package app.fedilab.android.imageeditor; import android.annotation.SuppressLint; import android.app.Dialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; 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 app.fedilab.android.R; public class StickerBSFragment 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 StickerListener mStickerListener; public StickerBSFragment() { // Required empty public constructor } public void setStickerListener(StickerListener stickerListener) { mStickerListener = stickerListener; } @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(), 3); rvEmoji.setLayoutManager(gridLayoutManager); StickerAdapter stickerAdapter = new StickerAdapter(); rvEmoji.setAdapter(stickerAdapter); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } private String convertEmoji(String emoji) { String returnedEmoji = ""; try { int convertEmojiToInt = Integer.parseInt(emoji.substring(2), 16); returnedEmoji = getEmojiByUnicode(convertEmojiToInt); } catch (NumberFormatException e) { returnedEmoji = ""; } return returnedEmoji; } private String getEmojiByUnicode(int unicode) { return new String(Character.toChars(unicode)); } public interface StickerListener { void onStickerClick(Bitmap bitmap); } public class StickerAdapter extends RecyclerView.Adapter { int[] stickerList = new int[]{R.drawable.aa, R.drawable.bb}; @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_sticker, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.imgSticker.setImageResource(stickerList[position]); } @Override public int getItemCount() { return stickerList.length; } class ViewHolder extends RecyclerView.ViewHolder { ImageView imgSticker; ViewHolder(View itemView) { super(itemView); imgSticker = itemView.findViewById(R.id.imgSticker); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mStickerListener != null) { mStickerListener.onStickerClick( BitmapFactory.decodeResource(getResources(), stickerList[getLayoutPosition()])); } dismiss(); } }); } } } }