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

master
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";
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();

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_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);
}
}