package im.actor.sdk.view.emoji.stickers; import android.content.Context; import android.graphics.Color; import android.support.v7.widget.RecyclerView; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import im.actor.core.entity.FileReference; import im.actor.core.entity.Sticker; import im.actor.core.entity.StickerPack; import im.actor.runtime.mvvm.Value; import im.actor.runtime.mvvm.ValueChangedListener; import im.actor.sdk.util.Screen; import static im.actor.sdk.util.ActorSDKMessenger.messenger; public class PacksAdapter extends RecyclerView.Adapter<PacksAdapter.StickerViewHolder> { private LinearLayout packsSwitchContainer; ArrayList<Sticker> stickers = new ArrayList<>(); private int selectedPostion = 0; Context context; StickersAdapter stickersAdapter; protected PacksAdapter(Context context, StickersAdapter stickersAdapter, LinearLayout stickerIndicatorContainer) { packsSwitchContainer = stickerIndicatorContainer; this.context = context; this.stickersAdapter = stickersAdapter; stickersAdapter.getBinder().bind(messenger().getAvailableStickersVM().getOwnStickerPacks(), new ValueChangedListener<ArrayList<StickerPack>>() { @Override public void onChanged(ArrayList<StickerPack> val, Value<ArrayList<StickerPack>> valueModel) { stickers.clear(); for (StickerPack pack : val) { if (pack.getStickers().size() > 0) { stickers.add(pack.getStickers().get(0)); } } } }); } @Override public StickerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { return new StickerViewHolder(context, new FrameLayout(context)); } @Override public void onBindViewHolder(StickerViewHolder holder, int position) { holder.bind(stickers.get(position), position); } @Override public int getItemCount() { return stickers.size(); } @Override public void onViewRecycled(StickerViewHolder holder) { holder.unbind(); } public class StickerViewHolder extends RecyclerView.ViewHolder { private StickerView sv; private Sticker s; private int position; FrameLayout fl; public StickerViewHolder(Context context, FrameLayout fl) { super(fl); this.fl = fl; sv = new StickerView(context); int padding = Screen.dp(2); sv.setPadding(padding, padding, padding, padding); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(packsSwitchContainer.getHeight(), packsSwitchContainer.getHeight(), Gravity.CENTER); fl.addView(sv, params); fl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int oldSelected = selectedPostion; selectedPostion = position; notifyItemChanged(oldSelected); notifyItemChanged(selectedPostion); stickersAdapter.scrollToSticker(s); } }); } public void bind(Sticker s, int position) { this.s = s; this.position = position; sv.bind(s.getImage128(), StickerView.STICKER_SMALL); if (selectedPostion == position) { fl.setBackgroundColor(Color.LTGRAY); } else { fl.setBackgroundColor(Color.TRANSPARENT); } } public void unbind() { } } public void selectPack(int localPackId) { int oldSelected = selectedPostion; for (int i = 0; i < getItemCount(); i++) { Sticker p = stickers.get(i); Integer collectionId = p.getCollectionId(); if (collectionId != null && collectionId == localPackId) { selectedPostion = i; notifyItemChanged(oldSelected); notifyItemChanged(selectedPostion); // notifyDataSetChanged(); break; } } } }