package com.fastebro.androidrgbtool.widgets;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.fastebro.androidrgbtool.R;
import com.fastebro.androidrgbtool.utils.ColorUtils;
public class RGBPanelData extends LinearLayout {
@BindView(R.id.rgb_value)
TextView mRGBValue;
@BindView(R.id.hsb_value)
TextView mHSBValue;
@BindView(R.id.hex_value)
TextView mHEXValue;
@BindView(R.id.btn_dismiss_panel)
ImageButton mDismissPanelButton;
private int alpha;
private int red;
private int green;
private int blue;
private float[] hsb;
public RGBPanelData(@NonNull Context context) {
super(context);
setupPanel(context);
}
public RGBPanelData(@NonNull Context context, @NonNull AttributeSet attrs) {
super(context, attrs);
setupPanel(context);
}
public RGBPanelData(@NonNull Context context, @NonNull AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setupPanel(context);
}
private class ClipboardLongClickListener implements OnLongClickListener {
final Context context;
final CharSequence label;
public ClipboardLongClickListener(Context context, CharSequence label) {
this.context = context;
this.label = label;
}
@Override
public boolean onLongClick(View v) {
CharSequence text = ((TextView)v).getText();
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text);
clipboard.setPrimaryClip(clip);
Snackbar.make(v, text + " " + context.getString(R.string.clipboard), Snackbar.LENGTH_SHORT).show();
return true;
}
}
private void setupPanel(final Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.rgb_data_panel_small, this);
ButterKnife.bind(this);
mDismissPanelButton.setOnClickListener(v -> setVisibility(GONE));
mRGBValue.setOnLongClickListener(new ClipboardLongClickListener(context,
context.getString(R.string.app_name)));
mHSBValue.setOnLongClickListener(new ClipboardLongClickListener(context,
context.getString(R.string.app_name)));
mHEXValue.setOnLongClickListener(new ClipboardLongClickListener(context,
context.getString(R.string.app_name)));
}
public void updateData(int touchedRGB) {
alpha = (touchedRGB >> 24) & 0xFF;
red = (touchedRGB >> 16) & 0xFF;
green = (touchedRGB >> 8) & 0xFF;
blue = touchedRGB & 0xFF;
hsb = ColorUtils.RGBToHSB(red, green, blue);
setRGBValue();
setHSBValue();
setHEXValue(touchedRGB);
}
private void setRGBValue() {
if (mRGBValue != null) {
mRGBValue.setText("(" + alpha + ", " + red + ", " + green + ", " + blue + ")");
}
}
private void setHSBValue() {
if (mHSBValue != null) {
mHSBValue.setText("");
mHSBValue.append("(" + String.format("%.0f", hsb[0]));
mHSBValue.append(", " + String.format("%.0f%%", (hsb[1] * 100.0f)));
mHSBValue.append(", " + String.format("%.0f%%", (hsb[2] * 100.0f)) + ")");
}
}
private void setHEXValue(int touchedRGB) {
if (mHEXValue != null) {
mHEXValue.setText(("#" + Integer.toHexString(touchedRGB)).toUpperCase());
}
}
}