/* * Copyright (C) 2010 Daniel Nilsson * * 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.emdev.ui.preference; import org.sufficientlysecure.viewer.R; import android.content.Context; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.preference.DialogPreference; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import org.afzkl.colorpicker.views.ColorPanelView; import org.afzkl.colorpicker.views.ColorPickerView; import org.afzkl.colorpicker.views.ColorPickerView.OnColorChangedListener; import org.emdev.utils.LengthUtils; public class ColorPickerPreference extends DialogPreference implements ColorPickerView.OnColorChangedListener { private ColorPickerView mColorPicker; private ColorPanelView mOldColor; private ColorPanelView mNewColor; private OnColorChangedListener mListener; private int color; public ColorPickerPreference(final Context context, final AttributeSet attrs) { super(context, attrs); setWidgetLayoutResource(R.layout.color_picker_preference_widget); } @Override protected void onSetInitialValue(final boolean restoreValue, final Object defaultValue) { readColor(defaultValue); } private void readColor(final Object defaultValue) { try { color = Integer.parseInt(getPersistedString(LengthUtils.toString(defaultValue))); } catch (final Exception ex) { color = 0x00FFFFFF; } } @Override protected void onBindView(View view) { super.onBindView(view); View v = view.findViewById(R.id.color_picke_preference_view); if (v != null) { Drawable background = v.getBackground(); if (background instanceof GradientDrawable) { GradientDrawable grad = (GradientDrawable) background; grad.setColor(color); } } } @Override protected View onCreateDialogView() { final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View layout = inflater.inflate(R.layout.dialog_color_picker, null); readColor(0x00FFFFFF); mColorPicker = (ColorPickerView) layout.findViewById(R.id.color_picker_view); mOldColor = (ColorPanelView) layout.findViewById(R.id.old_color_panel); mNewColor = (ColorPanelView) layout.findViewById(R.id.new_color_panel); ((LinearLayout) mOldColor.getParent()).setPadding(Math.round(mColorPicker.getDrawingOffset()), 0, Math.round(mColorPicker.getDrawingOffset()), 0); mColorPicker.setOnColorChangedListener(this); mOldColor.setColor(color); mColorPicker.setColor(color, true); setAlphaSliderVisible(true); return layout; } @Override protected void onDialogClosed(final boolean positiveResult) { if (positiveResult) { color = getColor(); final String value = Integer.toString(color); if (callChangeListener(value)) { if (shouldPersist()) { persistString(value); } notifyChanged(); } } } @Override public void onColorChanged(final int color) { mNewColor.setColor(color); if (mListener != null) { mListener.onColorChanged(color); } } public void setAlphaSliderVisible(final boolean visible) { mColorPicker.setAlphaSliderVisible(visible); } public int getColor() { return mColorPicker.getColor(); } }