From d2739d52e09c9bb0f0e6fefc113b566231fe1f48 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 21 Aug 2020 16:06:47 -0300 Subject: [PATCH] Remember position in react-with-any-emoji picker. --- .../conversation/ConversationActivity.java | 25 ++++++++++++++++++- ...WithAnyEmojiBottomSheetDialogFragment.java | 13 ++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 78727a5c3e..91f4f97b90 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -301,6 +301,8 @@ public class ConversationActivity extends PassphraseRequiredActivity public static final String SAFETY_NUMBER_DIALOG = "SAFETY_NUMBER"; + private static final String STATE_REACT_WITH_ANY_PAGE = "STATE_REACT_WITH_ANY_PAGE"; + public static final String RECIPIENT_EXTRA = "recipient_id"; public static final String THREAD_ID_EXTRA = "thread_id"; public static final String TEXT_EXTRA = "draft_text"; @@ -366,6 +368,7 @@ public class ConversationActivity extends PassphraseRequiredActivity private LiveRecipient recipient; private long threadId; private int distributionType; + private int reactWithAnyEmojiStartPage; private boolean isSecureText; private boolean isDefaultSms = true; private boolean isMmsEnabled = true; @@ -469,6 +472,7 @@ public class ConversationActivity extends PassphraseRequiredActivity return; } + reactWithAnyEmojiStartPage = 0; if (!Util.isEmpty(composeText) || attachmentManager.isAttachmentPresent() || inputPanel.getQuote().isPresent()) { saveDraft(); attachmentManager.clear(glideRequests, false); @@ -701,6 +705,20 @@ public class ConversationActivity extends PassphraseRequiredActivity } } + @Override + protected void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putInt(STATE_REACT_WITH_ANY_PAGE, reactWithAnyEmojiStartPage); + } + + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + + reactWithAnyEmojiStartPage = savedInstanceState.getInt(STATE_REACT_WITH_ANY_PAGE, 0); + } + private void handleImageFromDeviceCameraApp() { if (attachmentManager.getCaptureUri() == null) { Log.w(TAG, "No image available."); @@ -1995,7 +2013,7 @@ public class ConversationActivity extends PassphraseRequiredActivity } else { reactionOverlay.hideAllButMask(); - ReactWithAnyEmojiBottomSheetDialogFragment.createForMessageRecord(messageRecord) + ReactWithAnyEmojiBottomSheetDialogFragment.createForMessageRecord(messageRecord, reactWithAnyEmojiStartPage) .show(getSupportFragmentManager(), "BOTTOM"); } } @@ -2005,6 +2023,11 @@ public class ConversationActivity extends PassphraseRequiredActivity reactionOverlay.hideMask(); } + @Override + public void onReactWithAnyEmojiPageChanged(int page) { + reactWithAnyEmojiStartPage = page; + } + @Override public void onSearchMoveUpPressed() { searchViewModel.onMoveUp(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiBottomSheetDialogFragment.java index a28e7e9e29..c34c837c83 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiBottomSheetDialogFragment.java @@ -49,6 +49,7 @@ public final class ReactWithAnyEmojiBottomSheetDialogFragment extends BottomShee private static final String ARG_MESSAGE_ID = "arg_message_id"; private static final String ARG_IS_MMS = "arg_is_mms"; + private static final String ARG_START_PAGE = "arg_start_page"; private ReactWithAnyEmojiViewModel viewModel; private TextSwitcher categoryLabel; @@ -59,12 +60,13 @@ public final class ReactWithAnyEmojiBottomSheetDialogFragment extends BottomShee private Callback callback; private ReactionsLoader reactionsLoader; - public static DialogFragment createForMessageRecord(@NonNull MessageRecord messageRecord) { + public static DialogFragment createForMessageRecord(@NonNull MessageRecord messageRecord, int startingPage) { DialogFragment fragment = new ReactWithAnyEmojiBottomSheetDialogFragment(); Bundle args = new Bundle(); args.putLong(ARG_MESSAGE_ID, messageRecord.getId()); args.putBoolean(ARG_IS_MMS, messageRecord.isMms()); + args.putInt(ARG_START_PAGE, startingPage); fragment.setArguments(args); return fragment; @@ -150,7 +152,8 @@ public final class ReactWithAnyEmojiBottomSheetDialogFragment extends BottomShee categoryPager.registerOnPageChangeCallback(onPageChanged); viewModel.getEmojiPageModels().observe(getViewLifecycleOwner(), pages -> { - int pageToSet = adapter.getItemCount() == 0 ? (pages.get(0).hasEmoji() ? 0 : 1) : -1; + int pageToSet = adapter.getItemCount() == 0 ? getStartingPage((pages.get(0).hasEmoji())) + : -1; adapter.submitList(pages); @@ -237,14 +240,20 @@ public final class ReactWithAnyEmojiBottomSheetDialogFragment extends BottomShee categoryLabel.setText(getString(adapter.getItem(position).getLabel())); } + private int getStartingPage(boolean firstPageHasContent) { + return requireArguments().getInt(ARG_START_PAGE, firstPageHasContent ? 0 : 1); + } + private class OnPageChanged extends ViewPager2.OnPageChangeCallback { @Override public void onPageSelected(int position) { updateFocusedRecycler(position); + callback.onReactWithAnyEmojiPageChanged(position); } } public interface Callback { void onReactWithAnyEmojiDialogDismissed(); + void onReactWithAnyEmojiPageChanged(int page); } }