package app.fedilab.android.imageeditor; import android.annotation.SuppressLint; import android.app.Dialog; 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 org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Objects; import app.fedilab.android.R; import ja.burhanrashid52.photoeditor.PhotoEditor; public class EmojiBSFragment extends BottomSheetDialogFragment { private EmojiListener mEmojiListener; private 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) { } }; public EmojiBSFragment() { // Required empty public constructor } @SuppressLint("RestrictedApi") @Override public void setupDialog(@NotNull 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 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 = PhotoEditor.getEmojis(Objects.requireNonNull(getActivity())); @NotNull @Override public ViewHolder onCreateViewHolder(@NotNull 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(@NotNull 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(v -> { if (mEmojiListener != null) { mEmojiListener.onEmojiClick(emojisList.get(getLayoutPosition())); } dismiss(); }); } } } }