From c5c176a818ac93219e87fea98ecb65f98f3d9680 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 8 Jun 2021 14:01:01 -0300 Subject: [PATCH] Remove use of transitionmanager to prevent sticky header flickering. --- .../ContactSelectionListFragment.java | 11 +++++ .../securesms/sharing/ShareActivity.java | 48 ++++++++++--------- app/src/main/res/layout/share_activity.xml | 17 +++---- 3 files changed, 42 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index 25595adc7b..0ee0f3c518 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -114,6 +114,8 @@ public final class ContactSelectionListFragment extends LoggingFragment public static final String HIDE_COUNT = "hide_count"; public static final String CAN_SELECT_SELF = "can_select_self"; public static final String DISPLAY_CHIPS = "display_chips"; + public static final String RV_PADDING_BOTTOM = "recycler_view_padding_bottom"; + public static final String RV_CLIP = "recycler_view_clipping"; private ConstraintLayout constraintLayout; private TextView emptyText; @@ -245,6 +247,15 @@ public final class ContactSelectionListFragment extends LoggingFragment Intent intent = requireActivity().getIntent(); Bundle arguments = safeArguments(); + int recyclerViewPadBottom = arguments.getInt(RV_PADDING_BOTTOM, intent.getIntExtra(RV_PADDING_BOTTOM, -1)); + boolean recyclerViewClipping = arguments.getBoolean(RV_CLIP, intent.getBooleanExtra(RV_CLIP, true)); + + if (recyclerViewPadBottom != -1) { + ViewUtil.setPaddingBottom(recyclerView, recyclerViewPadBottom); + } + + recyclerView.setClipToPadding(recyclerViewClipping); + swipeRefresh.setEnabled(arguments.getBoolean(REFRESHABLE, intent.getBooleanExtra(REFRESHABLE, true))); hideCount = arguments.getBoolean(HIDE_COUNT, intent.getBooleanExtra(HIDE_COUNT, false)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java index 1b8f0a372f..ddbb564717 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java @@ -32,11 +32,9 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.constraintlayout.widget.ConstraintSet; import androidx.core.util.Consumer; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.RecyclerView; -import androidx.transition.TransitionManager; import com.annimon.stream.Collectors; import com.annimon.stream.Stream; @@ -59,6 +57,7 @@ import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import org.whispersystems.libsignal.util.guava.Optional; @@ -97,6 +96,8 @@ public class ShareActivity extends PassphraseRequiredActivity private SearchToolbar searchToolbar; private ImageView searchAction; private View shareConfirm; + private RecyclerView contactsRecycler; + private View contactsRecyclerDivider; private ShareSelectionAdapter adapter; private boolean disallowMultiShare; @@ -190,23 +191,21 @@ public class ShareActivity extends PassphraseRequiredActivity } private void animateInSelection() { - TransitionManager.endTransitions(shareContainer); - TransitionManager.beginDelayedTransition(shareContainer); - - ConstraintSet constraintSet = new ConstraintSet(); - constraintSet.clone(shareContainer); - constraintSet.setVisibility(R.id.selection_group, ConstraintSet.VISIBLE); - constraintSet.applyTo(shareContainer); + contactsRecyclerDivider.animate() + .alpha(1f) + .translationY(0); + contactsRecycler.animate() + .alpha(1f) + .translationY(0); } private void animateOutSelection() { - TransitionManager.endTransitions(shareContainer); - TransitionManager.beginDelayedTransition(shareContainer); - - ConstraintSet constraintSet = new ConstraintSet(); - constraintSet.clone(shareContainer); - constraintSet.setVisibility(R.id.selection_group, ConstraintSet.GONE); - constraintSet.applyTo(shareContainer); + contactsRecyclerDivider.animate() + .alpha(0f) + .translationY(ViewUtil.dpToPx(48)); + contactsRecycler.animate() + .alpha(0f) + .translationY(ViewUtil.dpToPx(48)); } private void initializeIntent() { @@ -228,6 +227,8 @@ public class ShareActivity extends PassphraseRequiredActivity getIntent().putExtra(ContactSelectionListFragment.HIDE_COUNT, true); getIntent().putExtra(ContactSelectionListFragment.DISPLAY_CHIPS, false); getIntent().putExtra(ContactSelectionListFragment.CAN_SELECT_SELF, true); + getIntent().putExtra(ContactSelectionListFragment.RV_CLIP, false); + getIntent().putExtra(ContactSelectionListFragment.RV_PADDING_BOTTOM, ViewUtil.dpToPx(48)); } private void initializeToolbar() { @@ -242,14 +243,15 @@ public class ShareActivity extends PassphraseRequiredActivity } private void initializeResources() { - searchToolbar = findViewById(R.id.search_toolbar); - searchAction = findViewById(R.id.search_action); - shareConfirm = findViewById(R.id.share_confirm); - shareContainer = findViewById(R.id.container); - contactsFragment = new ContactSelectionListFragment(); - adapter = new ShareSelectionAdapter(); + searchToolbar = findViewById(R.id.search_toolbar); + searchAction = findViewById(R.id.search_action); + shareConfirm = findViewById(R.id.share_confirm); + shareContainer = findViewById(R.id.container); + contactsFragment = new ContactSelectionListFragment(); + adapter = new ShareSelectionAdapter(); + contactsRecycler = findViewById(R.id.selected_list); + contactsRecyclerDivider = findViewById(R.id.divider); - RecyclerView contactsRecycler = findViewById(R.id.selected_list); contactsRecycler.setAdapter(adapter); RecyclerView.ItemAnimator itemAnimator = Objects.requireNonNull(contactsRecycler.getItemAnimator()); diff --git a/app/src/main/res/layout/share_activity.xml b/app/src/main/res/layout/share_activity.xml index cb5b95eaa7..952bcff3d5 100644 --- a/app/src/main/res/layout/share_activity.xml +++ b/app/src/main/res/layout/share_activity.xml @@ -42,13 +42,12 @@ - - -