Java tutorial
package colorpicker; /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * You can find source here: * https://android.googlesource.com/platform/frameworks/opt/colorpicker/+/master/src/com/android/colorpicker */ import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.widget.ProgressBar; import java.io.Serializable; import de.dala.simplenews.R; /** * A dialog which takes in as input an array of colors and creates a palette allowing the user to * select a specific color swatch, which invokes a listener. */ public class ColorPickerDialog extends DialogFragment implements OnColorSelectedListener { public static final int SIZE_LARGE = 1; public static final int SIZE_SMALL = 2; protected static final String KEY_TITLE_ID = "title_id"; protected static final String KEY_MESSAGE_ID = "message_id"; protected static final String KEY_COLORS = "colors"; protected static final String KEY_SELECTED_COLOR = "selected_color"; protected static final String KEY_COLUMNS = "columns"; protected static final String KEY_SIZE = "size"; protected AlertDialog mAlertDialog; protected String mTitle = null; protected String mMessage = null; protected int[] mColors = null; protected int mSelectedColor; protected int mColumns; protected int mSize; protected OnColorSelectedListener mListener; private ColorPickerPalette mPalette; private ProgressBar mProgress; public ColorPickerDialog() { // Empty constructor required for dialog fragments. } public static ColorPickerDialog newInstance(String title, int[] colors, int selectedColor, int columns, int size, String message) { ColorPickerDialog ret = new ColorPickerDialog(); ret.initialize(title, colors, selectedColor, columns, size, message); return ret; } public void initialize(String title, int[] colors, int selectedColor, int columns, int size, String message) { setArguments(title, columns, size, message); setColors(colors, selectedColor); } public void setArguments(String title, int columns, int size, String message) { Bundle bundle = new Bundle(); bundle.putString(KEY_TITLE_ID, title); if (message != null) { bundle.putString(KEY_MESSAGE_ID, message); } bundle.putInt(KEY_COLUMNS, columns); bundle.putInt(KEY_SIZE, size); setArguments(bundle); } public void setOnColorSelectedListener(OnColorSelectedListener listener) { mListener = listener; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mTitle = getArguments().getString(KEY_TITLE_ID); mMessage = getArguments().getString(KEY_MESSAGE_ID); mColumns = getArguments().getInt(KEY_COLUMNS); mSize = getArguments().getInt(KEY_SIZE); } if (savedInstanceState != null) { mColors = savedInstanceState.getIntArray(KEY_COLORS); Serializable obj = savedInstanceState.getSerializable(KEY_SELECTED_COLOR); if (obj != null && obj instanceof Integer) { mSelectedColor = (Integer) obj; } } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Activity activity = getActivity(); View view = LayoutInflater.from(getActivity()).inflate(R.layout.calendar_color_picker_dialog, null); mProgress = (ProgressBar) view.findViewById(android.R.id.progress); mPalette = (ColorPickerPalette) view.findViewById(R.id.color_picker); mPalette.init(mSize, mColumns, this); if (mColors != null) { showPaletteView(); //showProgressBarView(); } if (mMessage != null) { mAlertDialog = new AlertDialog.Builder(activity).setTitle(mTitle).setMessage(mMessage).setView(view) .create(); } else { mAlertDialog = new AlertDialog.Builder(activity).setTitle(mTitle).setView(view).create(); } return mAlertDialog; } @Override public void onColorSelected(int color) { if (mListener != null) { mListener.onColorSelected(color); } if (getTargetFragment() instanceof OnColorSelectedListener) { final OnColorSelectedListener listener = (OnColorSelectedListener) getTargetFragment(); listener.onColorSelected(color); } if (color != mSelectedColor) { mSelectedColor = color; // Redraw palette to show checkmark on newly selected color before dismissing. mPalette.drawPalette(mColors, mSelectedColor); } dismiss(); } public void showPaletteView() { if (mProgress != null && mPalette != null) { mProgress.setVisibility(View.GONE); refreshPalette(); mPalette.setVisibility(View.VISIBLE); } } public void showProgressBarView() { if (mProgress != null && mPalette != null) { mProgress.setVisibility(View.VISIBLE); mPalette.setVisibility(View.GONE); } } public void setColors(int[] colors, int selectedColor) { if (mColors != colors || mSelectedColor != selectedColor) { mColors = colors; mSelectedColor = selectedColor; refreshPalette(); } } private void refreshPalette() { if (mPalette != null && mColors != null) { mPalette.drawPalette(mColors, mSelectedColor); } } public int[] getColors() { return mColors; } public void setColors(int[] colors) { if (mColors != colors) { mColors = colors; refreshPalette(); } } public int getSelectedColor() { return mSelectedColor; } public void setSelectedColor(int color) { if (mSelectedColor != color) { mSelectedColor = color; refreshPalette(); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putIntArray(KEY_COLORS, mColors); outState.putSerializable(KEY_SELECTED_COLOR, mSelectedColor); } }