use MaterialContainerTransform for ActionButton animation (#1961)
* use MaterialContainerTransform for ActionButton animation * fix back button in TabPreferenceActivity
This commit is contained in:
parent
e572e653ee
commit
53bd081802
|
@ -130,7 +130,7 @@ dependencies {
|
||||||
implementation "androidx.room:room-rxjava2:$roomVersion"
|
implementation "androidx.room:room-rxjava2:$roomVersion"
|
||||||
kapt "androidx.room:room-compiler:$roomVersion"
|
kapt "androidx.room:room-compiler:$roomVersion"
|
||||||
|
|
||||||
implementation "com.google.android.material:material:1.2.0"
|
implementation "com.google.android.material:material:1.2.1"
|
||||||
|
|
||||||
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
|
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
|
||||||
implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
|
implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
|
||||||
|
|
|
@ -15,19 +15,25 @@
|
||||||
|
|
||||||
package com.keylesspalace.tusky
|
package com.keylesspalace.tusky
|
||||||
|
|
||||||
|
import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
|
import android.view.View
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.widget.AppCompatEditText
|
import androidx.appcompat.widget.AppCompatEditText
|
||||||
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.view.updatePadding
|
import androidx.core.view.updatePadding
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration
|
import androidx.recyclerview.widget.DividerItemDecoration
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import androidx.transition.TransitionManager
|
||||||
import at.connyduck.sparkbutton.helpers.Utils
|
import at.connyduck.sparkbutton.helpers.Utils
|
||||||
|
import com.google.android.material.transition.MaterialArcMotion
|
||||||
|
import com.google.android.material.transition.MaterialContainerTransform
|
||||||
import com.keylesspalace.tusky.adapter.ItemInteractionListener
|
import com.keylesspalace.tusky.adapter.ItemInteractionListener
|
||||||
import com.keylesspalace.tusky.adapter.ListSelectionAdapter
|
import com.keylesspalace.tusky.adapter.ListSelectionAdapter
|
||||||
import com.keylesspalace.tusky.adapter.TabAdapter
|
import com.keylesspalace.tusky.adapter.TabAdapter
|
||||||
|
@ -129,19 +135,17 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
|
||||||
|
|
||||||
touchHelper.attachToRecyclerView(currentTabsRecyclerView)
|
touchHelper.attachToRecyclerView(currentTabsRecyclerView)
|
||||||
|
|
||||||
|
|
||||||
actionButton.setOnClickListener {
|
actionButton.setOnClickListener {
|
||||||
actionButton.isExpanded = true
|
toggleFab(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
scrim.setOnClickListener {
|
scrim.setOnClickListener {
|
||||||
actionButton.isExpanded = false
|
toggleFab(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
maxTabsInfo.text = getString(R.string.max_tab_number_reached, MAX_TAB_COUNT)
|
maxTabsInfo.text = getString(R.string.max_tab_number_reached, MAX_TAB_COUNT)
|
||||||
|
|
||||||
updateAvailableTabs()
|
updateAvailableTabs()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTabAdded(tab: TabData) {
|
override fun onTabAdded(tab: TabData) {
|
||||||
|
@ -150,7 +154,7 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
actionButton.isExpanded = false
|
toggleFab(false)
|
||||||
|
|
||||||
if (tab.id == HASHTAG) {
|
if (tab.id == HASHTAG) {
|
||||||
showAddHashtagDialog()
|
showAddHashtagDialog()
|
||||||
|
@ -188,6 +192,22 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
|
||||||
currentTabsAdapter.notifyItemChanged(tabPosition)
|
currentTabsAdapter.notifyItemChanged(tabPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun toggleFab(expand: Boolean) {
|
||||||
|
val transition = MaterialContainerTransform().apply {
|
||||||
|
startView = if (expand) actionButton else sheet
|
||||||
|
val endView: View = if (expand) sheet else actionButton
|
||||||
|
this.endView = endView
|
||||||
|
addTarget(endView)
|
||||||
|
scrimColor = Color.TRANSPARENT
|
||||||
|
setPathMotion(MaterialArcMotion())
|
||||||
|
}
|
||||||
|
|
||||||
|
TransitionManager.beginDelayedTransition(tabPreferenceContainer, transition)
|
||||||
|
actionButton.visible(!expand)
|
||||||
|
sheet.visible(expand)
|
||||||
|
scrim.visible(expand)
|
||||||
|
}
|
||||||
|
|
||||||
private fun showAddHashtagDialog(tab: TabData? = null, tabPosition: Int = 0) {
|
private fun showAddHashtagDialog(tab: TabData? = null, tabPosition: Int = 0) {
|
||||||
|
|
||||||
val frameLayout = FrameLayout(this)
|
val frameLayout = FrameLayout(this)
|
||||||
|
@ -318,10 +338,10 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
if (actionButton.isExpanded) {
|
if (actionButton.isVisible) {
|
||||||
actionButton.isExpanded = false
|
|
||||||
} else {
|
|
||||||
super.onBackPressed()
|
super.onBackPressed()
|
||||||
|
} else {
|
||||||
|
toggleFab(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/tabPreferenceContainer"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
@ -19,8 +20,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/scrimBackground"
|
android:background="?attr/scrimBackground"
|
||||||
android:visibility="invisible"
|
android:visibility="invisible" />
|
||||||
app:layout_behavior="@string/fab_transformation_scrim_behavior" />
|
|
||||||
|
|
||||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
android:id="@+id/actionButton"
|
android:id="@+id/actionButton"
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
android:layout_margin="16dp"
|
android:layout_margin="16dp"
|
||||||
android:src="@drawable/ic_plus_24dp" />
|
android:src="@drawable/ic_plus_24dp" />
|
||||||
|
|
||||||
<com.google.android.material.transformation.TransformationChildCard
|
<com.google.android.material.card.MaterialCardView
|
||||||
android:id="@+id/sheet"
|
android:id="@+id/sheet"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -38,8 +38,7 @@
|
||||||
android:layout_margin="16dp"
|
android:layout_margin="16dp"
|
||||||
android:visibility="invisible"
|
android:visibility="invisible"
|
||||||
app:cardBackgroundColor="?attr/colorSurface"
|
app:cardBackgroundColor="?attr/colorSurface"
|
||||||
app:cardElevation="2dp"
|
app:cardElevation="2dp">
|
||||||
app:layout_behavior="@string/fab_transformation_sheet_behavior">
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="240dp"
|
android:layout_width="240dp"
|
||||||
|
@ -76,6 +75,7 @@
|
||||||
android:textColor="?attr/colorOnPrimary"
|
android:textColor="?attr/colorOnPrimary"
|
||||||
android:textSize="?attr/status_text_large" />
|
android:textSize="?attr/status_text_large" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</com.google.android.material.transformation.TransformationChildCard>
|
|
||||||
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
Loading…
Reference in New Issue