kopia lustrzana https://github.com/ryukoposting/Signal-Android
Remember the last position of emoji and sticker picker as you swap between them.
rodzic
d2d698f64e
commit
e709cdc9d5
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue