diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java index 73989908f8..5c11d5f18d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java @@ -39,6 +39,7 @@ public class EmojiKeyboardProvider implements MediaKeyboardProvider, private final EmojiEventListener emojiEventListener; private Controller controller; + private int currentPosition; public EmojiKeyboardProvider(@NonNull Context context, @Nullable EmojiEventListener emojiEventListener) { this.context = context; @@ -66,11 +67,18 @@ public class EmojiKeyboardProvider implements MediaKeyboardProvider, models.add(recentModel); models.addAll(EmojiPages.DISPLAY_PAGES); + + currentPosition = recentModel.getEmoji().size() > 0 ? 0 : 1; } @Override public void requestPresentation(@NonNull Presenter presenter, boolean isSoloProvider) { - presenter.present(this, emojiPagerAdapter, this, this, null, null, recentModel.getEmoji().size() > 0 ? 0 : 1); + presenter.present(this, emojiPagerAdapter, this, this, null, null, currentPosition); + } + + @Override + public void setCurrentPosition(int currentPosition) { + this.currentPosition = currentPosition; } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java index 3bf250bd5a..d632deceba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java @@ -212,6 +212,7 @@ public class MediaKeyboard extends FrameLayout implements InputView, public void onPageSelected(int i) { categoryTabAdapter.setActivePosition(i); categoryTabs.smoothScrollToPosition(i); + providers[providerIndex].setCurrentPosition(i); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java index d31bb98a32..4488463508 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java @@ -14,6 +14,7 @@ public interface MediaKeyboardProvider { /** @return True if the click was handled with provider-specific logic, otherwise false */ void requestPresentation(@NonNull Presenter presenter, boolean isSoloProvider); void setController(@Nullable Controller controller); + void setCurrentPosition(int currentPosition); interface BackspaceObserver { void onBackspaceClicked(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java index 59d8db3987..c330c28191 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java @@ -37,6 +37,7 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider, MediaKeyboardProvider.AddObserver, StickerKeyboardPageFragment.EventListener { + private static final int UNSET = -1; private final Context context; private final StickerEventListener eventListener; @@ -47,6 +48,7 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider, private Presenter presenter; private boolean isSoloProvider; private StickerKeyboardViewModel viewModel; + private int currentPosition; public StickerKeyboardProvider(@NonNull FragmentActivity activity, @NonNull StickerEventListener eventListener) @@ -55,6 +57,7 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider, this.eventListener = eventListener; this.pagerAdapter = new StickerPagerAdapter(activity.getSupportFragmentManager(), this); this.stickerThrottler = new Throttler(100); + this.currentPosition = UNSET; initViewModel(activity); } @@ -76,7 +79,7 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider, PackListResult result = viewModel.getPacks().getValue(); if (result != null) { - present(presenter, result, true); + present(presenter, result, false); } } @@ -109,6 +112,11 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider, } } + @Override + public void setCurrentPosition(int currentPosition) { + this.currentPosition = currentPosition; + } + private void initViewModel(@NonNull FragmentActivity activity) { StickerKeyboardRepository repository = new StickerKeyboardRepository(DatabaseFactory.getStickerDatabase(activity)); viewModel = ViewModelProviders.of(activity, new StickerKeyboardViewModel.Factory(activity.getApplication(), repository)).get(StickerKeyboardViewModel.class); @@ -133,9 +141,9 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider, return; } - int startingIndex = presenter.getCurrentPosition(); + int startingIndex = currentPosition; - if (calculateStartingIndex) { + if (calculateStartingIndex || startingIndex == UNSET) { startingIndex = !result.hasRecents() && result.getPacks().size() > 0 ? 1 : 0; }