Remove use of transitionmanager to prevent sticky header flickering.
This commit is contained in:
parent
9f2d57493d
commit
c5c176a818
3 changed files with 42 additions and 34 deletions
|
@ -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));
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -42,13 +42,12 @@
|
|||
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/contact_selection_list_fragment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_below="@id/toolbar"
|
||||
app:layout_constraintBottom_toTopOf="@id/selected_list"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/toolbar" />
|
||||
|
||||
<org.thoughtcrime.securesms.components.SearchToolbar
|
||||
|
@ -64,8 +63,9 @@
|
|||
android:id="@+id/divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:alpha="1"
|
||||
android:alpha="0"
|
||||
android:background="@drawable/compose_divider_background"
|
||||
android:translationY="48dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/selected_list" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -73,10 +73,13 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="44dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:alpha="0"
|
||||
android:background="@color/signal_background_primary"
|
||||
android:clipToPadding="false"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingEnd="78dp"
|
||||
android:translationY="48dp"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
@ -94,12 +97,4 @@
|
|||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:srcCompat="@drawable/ic_continue_24" />
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/selection_group"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:visibility="gone"
|
||||
app:constraint_referenced_ids="divider,selected_list"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
Loading…
Add table
Reference in a new issue