0
0
mirror of https://github.com/thunderbird/thunderbird-android.git synced 2024-09-20 12:12:15 +02:00

Merge pull request #6743 from thundernest/fab_appearance

Change appearance and behavior of the floating compose button
This commit is contained in:
cketti 2023-03-10 13:08:12 +01:00 committed by GitHub
commit c642d7615f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 59 additions and 54 deletions

View File

@ -0,0 +1,49 @@
package com.fsck.k9.ui.fab
import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.view.View
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.view.marginBottom
import com.google.android.material.behavior.HideBottomViewOnScrollBehavior
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.snackbar.Snackbar.SnackbarLayout
class HideFabOnScrollBehavior(context: Context, attributes: AttributeSet) :
HideBottomViewOnScrollBehavior<FloatingActionButton>(context, attributes) {
override fun onAttachedToLayoutParams(lp: CoordinatorLayout.LayoutParams) {
if (lp.dodgeInsetEdges == Gravity.NO_GRAVITY) {
// If the developer hasn't set dodgeInsetEdges, lets set it to BOTTOM so that we dodge any Snackbars
lp.dodgeInsetEdges = Gravity.BOTTOM
}
super.onAttachedToLayoutParams(lp)
}
override fun layoutDependsOn(parent: CoordinatorLayout, child: FloatingActionButton, dependency: View): Boolean {
return dependency is SnackbarLayout || super.layoutDependsOn(parent, child, dependency)
}
override fun onDependentViewChanged(
parent: CoordinatorLayout,
child: FloatingActionButton,
dependency: View,
): Boolean {
if (dependency is SnackbarLayout) {
val additionalHiddenOffsetY = dependency.height + dependency.marginBottom
setAdditionalHiddenOffsetY(child, additionalHiddenOffsetY)
}
return false
}
override fun onDependentViewRemoved(parent: CoordinatorLayout, child: FloatingActionButton, dependency: View) {
super.onDependentViewRemoved(parent, child, dependency)
if (dependency is SnackbarLayout) {
setAdditionalHiddenOffsetY(child, 0)
}
}
}

View File

@ -1,39 +0,0 @@
package com.fsck.k9.ui.fab
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.OnScrollListener
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
/**
* Shrink the supplied [ExtendedFloatingActionButton] when the RecyclerView this listener is attached to is scrolling
* down, and expand the FAB when scrolling up.
*/
class ShrinkFabOnScrollListener(private val floatingActionButton: ExtendedFloatingActionButton) : OnScrollListener() {
private var isScrolledUp = true
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (dy > 0) {
if (recyclerView.canScrollVertically(1)) {
shrink()
} else {
extend()
}
} else if (dy < 0) {
extend()
}
}
private fun extend() {
if (!isScrolledUp) {
isScrolledUp = true
floatingActionButton.extend()
}
}
private fun shrink() {
if (isScrolledUp) {
isScrolledUp = false
floatingActionButton.shrink()
}
}
}

View File

@ -50,11 +50,10 @@ import com.fsck.k9.ui.R
import com.fsck.k9.ui.changelog.RecentChangesActivity
import com.fsck.k9.ui.changelog.RecentChangesViewModel
import com.fsck.k9.ui.choosefolder.ChooseFolderActivity
import com.fsck.k9.ui.fab.ShrinkFabOnScrollListener
import com.fsck.k9.ui.folders.FolderNameFormatter
import com.fsck.k9.ui.helper.RelativeDateTimeFormatter
import com.fsck.k9.ui.messagelist.MessageListFragment.MessageListFragmentListener.Companion.MAX_PROGRESS
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.snackbar.BaseTransientBottomBar.BaseCallback
import com.google.android.material.snackbar.Snackbar
import java.util.concurrent.Future
@ -92,7 +91,7 @@ class MessageListFragment :
private var recyclerView: RecyclerView? = null
private var itemTouchHelper: ItemTouchHelper? = null
private var swipeRefreshLayout: SwipeRefreshLayout? = null
private var floatingActionButton: ExtendedFloatingActionButton? = null
private var floatingActionButton: FloatingActionButton? = null
private lateinit var adapter: MessageListAdapter
@ -308,20 +307,17 @@ class MessageListFragment :
}
private fun enableFloatingActionButton(view: View) {
val floatingActionButton = view.findViewById<ExtendedFloatingActionButton>(R.id.floating_action_button)
val floatingActionButton = view.findViewById<FloatingActionButton>(R.id.floating_action_button)
floatingActionButton.setOnClickListener {
onCompose()
}
val recyclerView = view.findViewById<RecyclerView>(R.id.message_list)
recyclerView.addOnScrollListener(ShrinkFabOnScrollListener(floatingActionButton))
this.floatingActionButton = floatingActionButton
}
private fun disableFloatingActionButton(view: View) {
val floatingActionButton = view.findViewById<ExtendedFloatingActionButton>(R.id.floating_action_button)
val floatingActionButton = view.findViewById<FloatingActionButton>(R.id.floating_action_button)
floatingActionButton.isGone = true
}

View File

@ -25,17 +25,16 @@
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/floating_action_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/floatingActionButtonMargin"
android:contentDescription="@string/compose_action"
android:text="@string/compose_action"
android:textColor="?attr/floatingActionButtonForegroundColor"
app:backgroundTint="?attr/floatingActionButtonBackgroundColor"
app:icon="?attr/iconActionCompose"
app:iconTint="?attr/floatingActionButtonForegroundColor" />
app:layout_behavior="com.fsck.k9.ui.fab.HideFabOnScrollBehavior"
app:srcCompat="?attr/iconActionCompose"
app:tint="?attr/floatingActionButtonForegroundColor" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -35,6 +35,6 @@
<dimen name="fakeAlignImageTopToTextTopPadding">4dp</dimen>
<dimen name="floatingActionButtonMargin">16dp</dimen>
<!-- Height of ExtendedFloatingActionButton (48dp) plus two times floatingActionButtonMargin -->
<dimen name="floatingActionButtonSpacing">80dp</dimen>
<!-- Height of FloatingActionButton (56dp) plus two times floatingActionButtonMargin -->
<dimen name="floatingActionButtonSpacing">88dp</dimen>
</resources>