diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index 6e28121b40..48fbb337d0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -269,9 +269,6 @@ public class ConversationListFragment extends MainFragment implements ActionMode cameraFab = view.findViewById(R.id.camera_fab_old); } - Toolbar toolbar = getToolbar(view); - toolbar.setVisibility(View.VISIBLE); - fab.show(); cameraFab.show(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt index 6f59b2c107..ead68dc3ba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/MainActivityListHostFragment.kt @@ -39,6 +39,8 @@ import org.thoughtcrime.securesms.util.BottomSheetUtil import org.thoughtcrime.securesms.util.TopToastPopup import org.thoughtcrime.securesms.util.TopToastPopup.Companion.show import org.thoughtcrime.securesms.util.Util +import org.thoughtcrime.securesms.util.runHideAnimation +import org.thoughtcrime.securesms.util.runRevealAnimation import org.thoughtcrime.securesms.util.views.Stub import org.thoughtcrime.securesms.util.visible import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState @@ -147,16 +149,20 @@ class MainActivityListHostFragment : Fragment(R.layout.main_activity_list_host_f } private fun presentToolbarForConversationListFragment() { + if (_basicToolbar.resolved() && _basicToolbar.get().visible) { + _toolbar.runRevealAnimation(R.anim.slide_to_end) + } + _toolbar.visible = true _searchAction.visible = true if (_basicToolbar.resolved()) { - _basicToolbar.get().visible = false + _basicToolbar.get().runHideAnimation(R.anim.slide_from_start) } } private fun presentToolbarForConversationListArchiveFragment() { - _toolbar.visible = false - _basicToolbar.get().visible = true + _toolbar.runHideAnimation(R.anim.slide_to_start) + _basicToolbar.get().runRevealAnimation(R.anim.slide_from_end) } private fun presentToolbarForStoriesLandingFragment() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/Views.kt b/app/src/main/java/org/thoughtcrime/securesms/util/Views.kt new file mode 100644 index 0000000000..8352629fc4 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/util/Views.kt @@ -0,0 +1,27 @@ +package org.thoughtcrime.securesms.util + +import android.view.View +import android.view.animation.AnimationUtils +import androidx.annotation.AnimRes + +/** + * Runs the given animation on this view, assuming that the view is in an INVISIBLE or HIDDEN state. + */ +fun View.runRevealAnimation(@AnimRes anim: Int) { + animation = AnimationUtils.loadAnimation(context, anim) + visible = true +} + +/** + * Runs the given animation on this view, assuming that the view is in a VISIBLE state and will + * hide on completion + */ +fun View.runHideAnimation(@AnimRes anim: Int) { + startAnimation( + AnimationUtils.loadAnimation(context, anim).apply { + setListeners(onAnimationEnd = { + visible = false + }) + } + ) +} diff --git a/app/src/main/res/navigation/main_activity_list.xml b/app/src/main/res/navigation/main_activity_list.xml index 4ea8ac0051..8dc373cf5a 100644 --- a/app/src/main/res/navigation/main_activity_list.xml +++ b/app/src/main/res/navigation/main_activity_list.xml @@ -7,10 +7,14 @@ + android:label="conversation_list_fragment"> + app:destination="@id/conversationListArchiveFragment" + app:enterAnim="@anim/slide_from_end" + app:exitAnim="@anim/slide_to_start" + app:popEnterAnim="@anim/slide_to_end" + app:popExitAnim="@anim/slide_from_start" />