Remember the last position of emoji and sticker picker as you swap between them.

fork-5.53.8
Alex Hart 2020-12-10 17:42:18 -04:00 zatwierdzone przez Alan Evans
rodzic d2d698f64e
commit e709cdc9d5
4 zmienionych plików z 22 dodań i 4 usunięć

Wyświetl plik

@ -39,6 +39,7 @@ public class EmojiKeyboardProvider implements MediaKeyboardProvider,
private final EmojiEventListener emojiEventListener; private final EmojiEventListener emojiEventListener;
private Controller controller; private Controller controller;
private int currentPosition;
public EmojiKeyboardProvider(@NonNull Context context, @Nullable EmojiEventListener emojiEventListener) { public EmojiKeyboardProvider(@NonNull Context context, @Nullable EmojiEventListener emojiEventListener) {
this.context = context; this.context = context;
@ -66,11 +67,18 @@ public class EmojiKeyboardProvider implements MediaKeyboardProvider,
models.add(recentModel); models.add(recentModel);
models.addAll(EmojiPages.DISPLAY_PAGES); models.addAll(EmojiPages.DISPLAY_PAGES);
currentPosition = recentModel.getEmoji().size() > 0 ? 0 : 1;
} }
@Override @Override
public void requestPresentation(@NonNull Presenter presenter, boolean isSoloProvider) { 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 @Override

Wyświetl plik

@ -212,6 +212,7 @@ public class MediaKeyboard extends FrameLayout implements InputView,
public void onPageSelected(int i) { public void onPageSelected(int i) {
categoryTabAdapter.setActivePosition(i); categoryTabAdapter.setActivePosition(i);
categoryTabs.smoothScrollToPosition(i); categoryTabs.smoothScrollToPosition(i);
providers[providerIndex].setCurrentPosition(i);
} }
@Override @Override

Wyświetl plik

@ -14,6 +14,7 @@ public interface MediaKeyboardProvider {
/** @return True if the click was handled with provider-specific logic, otherwise false */ /** @return True if the click was handled with provider-specific logic, otherwise false */
void requestPresentation(@NonNull Presenter presenter, boolean isSoloProvider); void requestPresentation(@NonNull Presenter presenter, boolean isSoloProvider);
void setController(@Nullable Controller controller); void setController(@Nullable Controller controller);
void setCurrentPosition(int currentPosition);
interface BackspaceObserver { interface BackspaceObserver {
void onBackspaceClicked(); void onBackspaceClicked();

Wyświetl plik

@ -37,6 +37,7 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider,
MediaKeyboardProvider.AddObserver, MediaKeyboardProvider.AddObserver,
StickerKeyboardPageFragment.EventListener StickerKeyboardPageFragment.EventListener
{ {
private static final int UNSET = -1;
private final Context context; private final Context context;
private final StickerEventListener eventListener; private final StickerEventListener eventListener;
@ -47,6 +48,7 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider,
private Presenter presenter; private Presenter presenter;
private boolean isSoloProvider; private boolean isSoloProvider;
private StickerKeyboardViewModel viewModel; private StickerKeyboardViewModel viewModel;
private int currentPosition;
public StickerKeyboardProvider(@NonNull FragmentActivity activity, public StickerKeyboardProvider(@NonNull FragmentActivity activity,
@NonNull StickerEventListener eventListener) @NonNull StickerEventListener eventListener)
@ -55,6 +57,7 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider,
this.eventListener = eventListener; this.eventListener = eventListener;
this.pagerAdapter = new StickerPagerAdapter(activity.getSupportFragmentManager(), this); this.pagerAdapter = new StickerPagerAdapter(activity.getSupportFragmentManager(), this);
this.stickerThrottler = new Throttler(100); this.stickerThrottler = new Throttler(100);
this.currentPosition = UNSET;
initViewModel(activity); initViewModel(activity);
} }
@ -76,7 +79,7 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider,
PackListResult result = viewModel.getPacks().getValue(); PackListResult result = viewModel.getPacks().getValue();
if (result != null) { 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) { private void initViewModel(@NonNull FragmentActivity activity) {
StickerKeyboardRepository repository = new StickerKeyboardRepository(DatabaseFactory.getStickerDatabase(activity)); StickerKeyboardRepository repository = new StickerKeyboardRepository(DatabaseFactory.getStickerDatabase(activity));
viewModel = ViewModelProviders.of(activity, new StickerKeyboardViewModel.Factory(activity.getApplication(), repository)).get(StickerKeyboardViewModel.class); viewModel = ViewModelProviders.of(activity, new StickerKeyboardViewModel.Factory(activity.getApplication(), repository)).get(StickerKeyboardViewModel.class);
@ -133,9 +141,9 @@ public final class StickerKeyboardProvider implements MediaKeyboardProvider,
return; return;
} }
int startingIndex = presenter.getCurrentPosition(); int startingIndex = currentPosition;
if (calculateStartingIndex) { if (calculateStartingIndex || startingIndex == UNSET) {
startingIndex = !result.hasRecents() && result.getPacks().size() > 0 ? 1 : 0; startingIndex = !result.hasRecents() && result.getPacks().size() > 0 ? 1 : 0;
} }