diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/menu/ActionItem.kt b/app/src/main/java/org/thoughtcrime/securesms/components/menu/ActionItem.kt index 6cea68d87..c13d14159 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/menu/ActionItem.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/menu/ActionItem.kt @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.components.menu import androidx.annotation.DrawableRes -import androidx.annotation.StringRes /** * Represents an action to be rendered via [SignalContextMenu] or [SignalBottomActionBar] diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/menu/SignalBottomActionBar.kt b/app/src/main/java/org/thoughtcrime/securesms/components/menu/SignalBottomActionBar.kt index 317565bc2..372ecff13 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/menu/SignalBottomActionBar.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/menu/SignalBottomActionBar.kt @@ -6,9 +6,12 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.animation.Animation +import android.view.animation.AnimationUtils import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView +import androidx.interpolator.view.animation.FastOutSlowInInterpolator import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.util.ViewUtil @@ -22,6 +25,20 @@ class SignalBottomActionBar(context: Context, attributeSet: AttributeSet) : Line val items: MutableList = mutableListOf() + val enterAnimation: Animation by lazy { + AnimationUtils.loadAnimation(context, R.anim.slide_fade_from_bottom).apply { + duration = 250 + interpolator = FastOutSlowInInterpolator() + } + } + + val exitAnimation: Animation by lazy { + AnimationUtils.loadAnimation(context, R.anim.slide_fade_to_bottom).apply { + duration = 250 + interpolator = FastOutSlowInInterpolator() + } + } + init { orientation = HORIZONTAL setBackgroundResource(R.drawable.signal_bottom_action_bar_background) 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 e85c9a354..5a909f533 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -963,7 +963,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode private void startActionMode() { actionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(ConversationListFragment.this); - ViewUtil.fadeIn(bottomActionBar, 250); + ViewUtil.animateIn(bottomActionBar, bottomActionBar.getEnterAnimation()); ViewUtil.fadeOut(fab, 250); ViewUtil.fadeOut(cameraFab, 250); if (megaphoneContainer.resolved()) { @@ -980,7 +980,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode private void endActionMode() { actionMode.finish(); actionMode = null; - ViewUtil.fadeOut(bottomActionBar, 250); + ViewUtil.animateOut(bottomActionBar, bottomActionBar.getExitAnimation()); ViewUtil.fadeIn(fab, 250); ViewUtil.fadeIn(cameraFab, 250); if (megaphoneContainer.resolved()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java index 07cab74e0..249191bd8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java @@ -303,14 +303,14 @@ public final class MediaOverviewPageFragment extends Fragment FragmentActivity activity = requireActivity(); actionMode = ((AppCompatActivity) activity).startSupportActionMode(actionModeCallback); ((MediaOverviewActivity) activity).onEnterMultiSelect(); - ViewUtil.fadeIn(bottomActionBar, 250); + ViewUtil.animateIn(bottomActionBar, bottomActionBar.getEnterAnimation()); updateMultiSelect(); } private void exitMultiSelect() { actionMode.finish(); actionMode = null; - ViewUtil.fadeOut(bottomActionBar, 250); + ViewUtil.animateOut(bottomActionBar, bottomActionBar.getExitAnimation()); } private void updateMultiSelect() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java index 3dbea7f3d..703b8e515 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java @@ -119,6 +119,10 @@ public final class ViewUtil { return animateOut(view, getAlphaAnimation(1f, 0f, duration), visibility); } + public static ListenableFuture animateOut(final @NonNull View view, final @NonNull Animation animation) { + return animateOut(view, animation, View.GONE); + } + public static ListenableFuture animateOut(final @NonNull View view, final @NonNull Animation animation, final int visibility) { final SettableFuture future = new SettableFuture(); if (view.getVisibility() == visibility) {