fedilab-Android-App/app/src/common/java/app/fedilab/android/imageeditor/StickerBSFragment.java

152 lines
5.1 KiB
Java
Raw Normal View History

2019-05-30 15:19:02 +02:00
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;
2019-11-15 16:32:25 +01:00
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
2019-09-06 17:55:14 +02:00
2019-06-11 19:38:26 +02:00
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
2019-09-06 17:55:14 +02:00
2019-11-15 16:32:25 +01:00
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
2019-05-30 15:19:02 +02:00
2019-05-30 19:09:36 +02:00
import org.jetbrains.annotations.NotNull;
2019-05-30 15:19:02 +02:00
import app.fedilab.android.R;
public class StickerBSFragment extends BottomSheetDialogFragment {
private StickerListener mStickerListener;
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) {
}
};
2019-11-15 16:32:25 +01:00
public StickerBSFragment() {
// Required empty public constructor
}
public void setStickerListener(StickerListener stickerListener) {
mStickerListener = stickerListener;
}
2019-05-30 15:19:02 +02:00
@SuppressLint("RestrictedApi")
@Override
2020-05-16 11:32:09 +02:00
public void setupDialog(@NotNull Dialog dialog, int style) {
2019-05-30 15:19:02 +02:00
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();
2019-05-30 19:09:36 +02:00
if (behavior instanceof BottomSheetBehavior) {
2019-05-30 15:19:02 +02:00
((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);
}
2020-05-16 11:32:09 +02:00
@SuppressWarnings("unused")
2019-11-15 16:32:25 +01:00
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);
}
2019-05-30 15:19:02 +02:00
public class StickerAdapter extends RecyclerView.Adapter<StickerAdapter.ViewHolder> {
2019-05-31 19:03:37 +02:00
int[] stickerList = new int[]{
R.drawable.bubble1,
R.drawable.cat1,
R.drawable.cat2,
R.drawable.cat3,
R.drawable.cat4,
R.drawable.cat5,
R.drawable.dog1,
R.drawable.dog2,
R.drawable.flower1,
R.drawable.flower2,
R.drawable.sun,
R.drawable.tux1,
};
2019-05-30 15:19:02 +02:00
2019-05-30 19:09:36 +02:00
@NotNull
2019-05-30 15:19:02 +02:00
@Override
2019-05-30 19:09:36 +02:00
public ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) {
2019-05-30 15:19:02 +02:00
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_sticker, parent, false);
return new ViewHolder(view);
}
@Override
2019-05-30 19:09:36 +02:00
public void onBindViewHolder(@NotNull ViewHolder holder, int position) {
2019-05-30 15:19:02 +02:00
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);
2020-05-16 11:32:09 +02:00
itemView.setOnClickListener(v -> {
if (mStickerListener != null) {
mStickerListener.onStickerClick(
BitmapFactory.decodeResource(getResources(),
stickerList[getLayoutPosition()]));
2019-05-30 15:19:02 +02:00
}
2020-05-16 11:32:09 +02:00
dismiss();
2019-05-30 15:19:02 +02:00
});
}
}
}
}