package app.fedilab.android.imageeditor; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import java.util.ArrayList; import app.fedilab.android.R; public class EmojiBSFragment extends BottomSheetDialogFragment { private final BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { if (newState == BottomSheetBehavior.STATE_HIDDEN) { dismiss(); } } @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { } }; private EmojiListener mEmojiListener; public EmojiBSFragment() { // Required empty public constructor } /** * Provide the list of emoji in form of unicode string * * @param context context * @return list of emoji unicode */ public static ArrayList getEmojis(Context context) { ArrayList convertedEmojiList = new ArrayList<>(); String[] emojiList = context.getResources().getStringArray(R.array.photo_editor_emoji); for (String emojiUnicode : emojiList) { convertedEmojiList.add(convertEmoji(emojiUnicode)); } return convertedEmojiList; } private static String convertEmoji(String emoji) { String returnedEmoji; try { int convertEmojiToInt = Integer.parseInt(emoji.substring(2), 16); returnedEmoji = new String(Character.toChars(convertEmojiToInt)); } catch (NumberFormatException e) { returnedEmoji = ""; } return returnedEmoji; } @SuppressLint("RestrictedApi") @Override public void setupDialog(Dialog dialog, int style) { super.setupDialog(dialog, style); View contentView = View.inflate(getContext(), R.layout.fragment_bottom_sticker_emoji_dialog, null); dialog.setContentView(contentView); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams(); CoordinatorLayout.Behavior behavior = params.getBehavior(); if (behavior != null && behavior instanceof BottomSheetBehavior) { ((BottomSheetBehavior) behavior).setBottomSheetCallback(mBottomSheetBehaviorCallback); } ((View) contentView.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent)); RecyclerView rvEmoji = contentView.findViewById(R.id.rvEmoji); GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 5); rvEmoji.setLayoutManager(gridLayoutManager); EmojiAdapter emojiAdapter = new EmojiAdapter(); rvEmoji.setAdapter(emojiAdapter); } public void setEmojiListener(EmojiListener emojiListener) { mEmojiListener = emojiListener; } public interface EmojiListener { void onEmojiClick(String emojiUnicode); } public class EmojiAdapter extends RecyclerView.Adapter { ArrayList emojisList = getEmojis(getActivity()); @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_emoji, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.txtEmoji.setText(emojisList.get(position)); } @Override public int getItemCount() { return emojisList.size(); } class ViewHolder extends RecyclerView.ViewHolder { TextView txtEmoji; ViewHolder(View itemView) { super(itemView); txtEmoji = itemView.findViewById(R.id.txtEmoji); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mEmojiListener != null) { mEmojiListener.onEmojiClick(emojisList.get(getLayoutPosition())); } dismiss(); } }); } } } }