mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-06-09 08:07:42 +00:00
Fix partial emoji swiping (#1645)
This commit is contained in:
parent
92b1907c61
commit
4d441e5bdf
1 changed files with 21 additions and 15 deletions
|
@ -6,6 +6,9 @@
|
||||||
|
|
||||||
package helium314.keyboard.keyboard.emoji;
|
package helium314.keyboard.keyboard.emoji;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
@ -68,9 +71,21 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
|
|
||||||
private final class PagerAdapter extends RecyclerView.Adapter<PagerViewHolder> {
|
private final class PagerAdapter extends RecyclerView.Adapter<PagerViewHolder> {
|
||||||
private boolean mInitialized;
|
private boolean mInitialized;
|
||||||
|
private Map<Integer, RecyclerView> mViews = new HashMap<>(mEmojiCategory.getShownCategories().size());
|
||||||
|
|
||||||
private PagerAdapter() {
|
private PagerAdapter(ViewPager2 pager) {
|
||||||
setHasStableIds(true);
|
setHasStableIds(true);
|
||||||
|
pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||||
|
@Override
|
||||||
|
public void onPageSelected(int position) {
|
||||||
|
var categoryId = (int) getItemId(position);
|
||||||
|
setCurrentCategoryId(categoryId, false);
|
||||||
|
var recyclerView = mViews.get(position);
|
||||||
|
if (recyclerView != null) {
|
||||||
|
updateState(recyclerView, categoryId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -94,7 +109,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
||||||
updateState(recyclerView, viewHolder);
|
updateState(recyclerView, viewHolder.mCategoryId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -106,6 +121,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
public void onBindViewHolder(PagerViewHolder holder, int position) {
|
public void onBindViewHolder(PagerViewHolder holder, int position) {
|
||||||
holder.mCategoryId = getItemId(position);
|
holder.mCategoryId = getItemId(position);
|
||||||
var recyclerView = getRecyclerView(holder.itemView);
|
var recyclerView = getRecyclerView(holder.itemView);
|
||||||
|
mViews.put(position, recyclerView);
|
||||||
recyclerView.setAdapter(new EmojiPalettesAdapter(mEmojiCategory, (int) holder.mCategoryId,
|
recyclerView.setAdapter(new EmojiPalettesAdapter(mEmojiCategory, (int) holder.mCategoryId,
|
||||||
EmojiPalettesView.this));
|
EmojiPalettesView.this));
|
||||||
|
|
||||||
|
@ -120,16 +136,6 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
return mEmojiCategory.getShownCategories().size();
|
return mEmojiCategory.getShownCategories().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onViewAttachedToWindow(PagerViewHolder holder) {
|
|
||||||
if (mPager.getScrollState() == ViewPager2.SCROLL_STATE_DRAGGING // swipe
|
|
||||||
|| holder.getBindingAdapterPosition() == mPager.getCurrentItem() // tab
|
|
||||||
) {
|
|
||||||
setCurrentCategoryId((int) getItemId(holder.getBindingAdapterPosition()), false);
|
|
||||||
updateState(getRecyclerView(holder.itemView), holder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewDetachedFromWindow(PagerViewHolder holder) {
|
public void onViewDetachedFromWindow(PagerViewHolder holder) {
|
||||||
if (holder.mCategoryId == EmojiCategory.ID_RECENTS) {
|
if (holder.mCategoryId == EmojiCategory.ID_RECENTS) {
|
||||||
|
@ -150,8 +156,8 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
return view.findViewById(R.id.emoji_keyboard_list);
|
return view.findViewById(R.id.emoji_keyboard_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateState(@NonNull RecyclerView recyclerView, PagerViewHolder viewHolder) {
|
private void updateState(@NonNull RecyclerView recyclerView, long categoryId) {
|
||||||
if (viewHolder.mCategoryId != mEmojiCategory.getCurrentCategoryId()) {
|
if (categoryId != mEmojiCategory.getCurrentCategoryId()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,7 +248,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
}
|
}
|
||||||
|
|
||||||
mPager = findViewById(R.id.emoji_pager);
|
mPager = findViewById(R.id.emoji_pager);
|
||||||
mPager.setAdapter(new PagerAdapter());
|
mPager.setAdapter(new PagerAdapter(mPager));
|
||||||
mEmojiLayoutParams.setEmojiListProperties(mPager);
|
mEmojiLayoutParams.setEmojiListProperties(mPager);
|
||||||
mEmojiCategoryPageIndicatorView = findViewById(R.id.emoji_category_page_id_view);
|
mEmojiCategoryPageIndicatorView = findViewById(R.id.emoji_category_page_id_view);
|
||||||
mEmojiLayoutParams.setCategoryPageIdViewProperties(mEmojiCategoryPageIndicatorView);
|
mEmojiLayoutParams.setCategoryPageIdViewProperties(mEmojiCategoryPageIndicatorView);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue