/******************************************************************************* * Copyright 2013 Gabriele Mariotti * * 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. *******************************************************************************/ package org.sugr.gearshift.ui.util.colorpicker; import android.app.Activity; import android.content.Context; import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.drawable.GradientDrawable; import android.preference.Preference; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import org.sugr.gearshift.R; import org.sugr.gearshift.ui.util.Colorizer; /** * ColorPreference based on ColorPickerDialog of Stock Calendar * * @author Gabriele Mariotti (gabri.mariotti@gmail.com) * */ public class ColorPickerPreference extends Preference{ private int[] mColorChoices = {}; private int mValue = 0; private int mItemLayoutId = R.layout.calendar_grid_item_color; private int mNumColumns = 5; private View mPreviewView; public ColorPickerPreference(Context context) { super(context); initAttrs(null, 0); } public ColorPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); initAttrs(attrs, 0); } public ColorPickerPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initAttrs(attrs, defStyle); } private void initAttrs(AttributeSet attrs, int defStyle) { TypedArray a = getContext().getTheme().obtainStyledAttributes( attrs, R.styleable.ColorPickerPreference, defStyle, defStyle); try { mItemLayoutId = a.getResourceId(R.styleable.ColorPickerPreference_cal_itemLayout, mItemLayoutId); mNumColumns = a.getInteger(R.styleable.ColorPickerPreference_cal_numColumns, mNumColumns); int choicesResId = a.getResourceId(R.styleable.ColorPickerPreference_cal_choices, R.array.default_color_choice_values); if (choicesResId > 0) { mColorChoices = a.getResources().getIntArray(choicesResId); } } finally { a.recycle(); } setWidgetLayoutResource(mItemLayoutId); } @Override protected void onBindView(View view) { super.onBindView(view); mPreviewView = view.findViewById(R.id.calendar_color_view); Colorizer.colorizeView((ImageView) mPreviewView, mValue, GradientDrawable.OVAL); } public void setValue(int value) { if (callChangeListener(value)) { mValue = value; persistInt(value); notifyChanged(); } } @Override protected void onClick() { super.onClick(); ColorPickerDialog colorPickerDialog = ColorPickerDialog.newInstance(R.string.color_picker_default_title, mColorChoices, getValue(), mNumColumns, isTablet(getContext())? ColorPickerDialog.SIZE_LARGE : ColorPickerDialog.SIZE_SMALL); //colorcalendar.setPreference(this); Activity activity = (Activity) getContext(); activity.getFragmentManager().beginTransaction() .add(colorPickerDialog, getFragmentTag()) .commit(); colorPickerDialog.setOnColorSelectedListener(listener); } /** * Implement listener to get selected color value */ ColorPickerSwatch.OnColorSelectedListener listener = new ColorPickerSwatch.OnColorSelectedListener() { @Override public void onColorSelected(int color) { setValue(color); } }; @Override protected void onAttachedToActivity() { super.onAttachedToActivity(); Activity activity = (Activity) getContext(); ColorPickerDialog colorcalendar = (ColorPickerDialog) activity .getFragmentManager().findFragmentByTag(getFragmentTag()); if (colorcalendar != null) { // re-bind listener to fragment colorcalendar.setOnColorSelectedListener(listener); } } @Override protected Object onGetDefaultValue(TypedArray a, int index) { return a.getInt(index, 0); } @Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { setValue(restoreValue ? getPersistedInt(0) : (Integer) defaultValue); } public String getFragmentTag() { return "color_" + getKey(); } public int getValue() { return mValue; } public static boolean isTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } }