Remember position in react-with-any-emoji picker.

This commit is contained in:
Alex Hart 2020-08-21 16:06:47 -03:00
parent 4668510106
commit d2739d52e0
2 changed files with 35 additions and 3 deletions

View File

@ -301,6 +301,8 @@ public class ConversationActivity extends PassphraseRequiredActivity
public static final String SAFETY_NUMBER_DIALOG = "SAFETY_NUMBER"; 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 RECIPIENT_EXTRA = "recipient_id";
public static final String THREAD_ID_EXTRA = "thread_id"; public static final String THREAD_ID_EXTRA = "thread_id";
public static final String TEXT_EXTRA = "draft_text"; public static final String TEXT_EXTRA = "draft_text";
@ -366,6 +368,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
private LiveRecipient recipient; private LiveRecipient recipient;
private long threadId; private long threadId;
private int distributionType; private int distributionType;
private int reactWithAnyEmojiStartPage;
private boolean isSecureText; private boolean isSecureText;
private boolean isDefaultSms = true; private boolean isDefaultSms = true;
private boolean isMmsEnabled = true; private boolean isMmsEnabled = true;
@ -469,6 +472,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
return; return;
} }
reactWithAnyEmojiStartPage = 0;
if (!Util.isEmpty(composeText) || attachmentManager.isAttachmentPresent() || inputPanel.getQuote().isPresent()) { if (!Util.isEmpty(composeText) || attachmentManager.isAttachmentPresent() || inputPanel.getQuote().isPresent()) {
saveDraft(); saveDraft();
attachmentManager.clear(glideRequests, false); 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() { private void handleImageFromDeviceCameraApp() {
if (attachmentManager.getCaptureUri() == null) { if (attachmentManager.getCaptureUri() == null) {
Log.w(TAG, "No image available."); Log.w(TAG, "No image available.");
@ -1995,7 +2013,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
} else { } else {
reactionOverlay.hideAllButMask(); reactionOverlay.hideAllButMask();
ReactWithAnyEmojiBottomSheetDialogFragment.createForMessageRecord(messageRecord) ReactWithAnyEmojiBottomSheetDialogFragment.createForMessageRecord(messageRecord, reactWithAnyEmojiStartPage)
.show(getSupportFragmentManager(), "BOTTOM"); .show(getSupportFragmentManager(), "BOTTOM");
} }
} }
@ -2005,6 +2023,11 @@ public class ConversationActivity extends PassphraseRequiredActivity
reactionOverlay.hideMask(); reactionOverlay.hideMask();
} }
@Override
public void onReactWithAnyEmojiPageChanged(int page) {
reactWithAnyEmojiStartPage = page;
}
@Override @Override
public void onSearchMoveUpPressed() { public void onSearchMoveUpPressed() {
searchViewModel.onMoveUp(); searchViewModel.onMoveUp();

View File

@ -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_MESSAGE_ID = "arg_message_id";
private static final String ARG_IS_MMS = "arg_is_mms"; private static final String ARG_IS_MMS = "arg_is_mms";
private static final String ARG_START_PAGE = "arg_start_page";
private ReactWithAnyEmojiViewModel viewModel; private ReactWithAnyEmojiViewModel viewModel;
private TextSwitcher categoryLabel; private TextSwitcher categoryLabel;
@ -59,12 +60,13 @@ public final class ReactWithAnyEmojiBottomSheetDialogFragment extends BottomShee
private Callback callback; private Callback callback;
private ReactionsLoader reactionsLoader; private ReactionsLoader reactionsLoader;
public static DialogFragment createForMessageRecord(@NonNull MessageRecord messageRecord) { public static DialogFragment createForMessageRecord(@NonNull MessageRecord messageRecord, int startingPage) {
DialogFragment fragment = new ReactWithAnyEmojiBottomSheetDialogFragment(); DialogFragment fragment = new ReactWithAnyEmojiBottomSheetDialogFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong(ARG_MESSAGE_ID, messageRecord.getId()); args.putLong(ARG_MESSAGE_ID, messageRecord.getId());
args.putBoolean(ARG_IS_MMS, messageRecord.isMms()); args.putBoolean(ARG_IS_MMS, messageRecord.isMms());
args.putInt(ARG_START_PAGE, startingPage);
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
@ -150,7 +152,8 @@ public final class ReactWithAnyEmojiBottomSheetDialogFragment extends BottomShee
categoryPager.registerOnPageChangeCallback(onPageChanged); categoryPager.registerOnPageChangeCallback(onPageChanged);
viewModel.getEmojiPageModels().observe(getViewLifecycleOwner(), pages -> { 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); adapter.submitList(pages);
@ -237,14 +240,20 @@ public final class ReactWithAnyEmojiBottomSheetDialogFragment extends BottomShee
categoryLabel.setText(getString(adapter.getItem(position).getLabel())); 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 { private class OnPageChanged extends ViewPager2.OnPageChangeCallback {
@Override @Override
public void onPageSelected(int position) { public void onPageSelected(int position) {
updateFocusedRecycler(position); updateFocusedRecycler(position);
callback.onReactWithAnyEmojiPageChanged(position);
} }
} }
public interface Callback { public interface Callback {
void onReactWithAnyEmojiDialogDismissed(); void onReactWithAnyEmojiDialogDismissed();
void onReactWithAnyEmojiPageChanged(int page);
} }
} }