package treehou.se.habit.ui.colorpicker; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.res.TypedArray; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ArrayAdapter; import java.util.ArrayList; import java.util.List; import treehou.se.habit.R; public class ColorDialog extends DialogFragment { private ColorDialogCallback colorCallback; public static ColorDialog instance(){ return new ColorDialog(); } @Override public void onAttach(Activity activity) { if(getTargetFragment() != null && getTargetFragment() instanceof ColorDialogCallback){ colorCallback = (ColorDialogCallback) getTargetFragment(); } else if(activity instanceof ColorDialogCallback){ colorCallback = (ColorDialogCallback) activity; } super.onAttach(activity); } @Override public void onDetach() { colorCallback = null; super.onDetach(); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); View pickerView = inflater.inflate(R.layout.color_picker, null); AbsListView lstColors = (AbsListView) pickerView.findViewById(R.id.lst_colors); TypedArray ta = getResources().obtainTypedArray(R.array.cell_colors); ArrayList<Integer> colors = new ArrayList<>(); for(int i=0; i < ta.length(); i++) colors.add(ta.getColor(i, Color.TRANSPARENT)); ta.recycle(); lstColors.setAdapter(new ColorAdapter(getActivity(), R.layout.item_color, colors)); lstColors.setOnItemClickListener((parent, view, position, id) -> { if(colorCallback != null) { colorCallback.setColor((int) view.getTag()); } ColorDialog.this.dismiss(); }); builder.setView(pickerView) .setNegativeButton(getActivity().getString(R.string.cancel), (dialog, id) -> ColorDialog.this.getDialog().cancel()); return builder.create(); } class ColorAdapter extends ArrayAdapter<Integer> { ColorAdapter(Context context, int resource, List<Integer> objects) { super(context, resource, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(getContext()); int color = getItem(position); View rootView = inflater.inflate(R.layout.item_color, null); rootView.setTag(color); View viwColor = rootView.findViewById(R.id.viw_color); viwColor.setBackgroundColor(color); return rootView; } } public interface ColorDialogCallback{ void setColor(int color); } }