/* * 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. */ package com.android.settings.accessibility; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.support.v7.preference.PreferenceViewHolder; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.android.settings.R; /** * Grid preference that allows the user to pick a color from a predefined set of * colors. Optionally shows a preview in the preference item. */ public class ColorPreference extends ListDialogPreference { private ColorDrawable mPreviewColor; private boolean mPreviewEnabled; public ColorPreference(Context context, AttributeSet attrs) { super(context, attrs); setDialogLayoutResource(R.layout.grid_picker_dialog); setListItemLayoutResource(R.layout.color_picker_item); } /** * @param enabled whether to show a preview in the preference item */ public void setPreviewEnabled(boolean enabled) { if (mPreviewEnabled != enabled) { mPreviewEnabled = enabled; if (enabled) { setWidgetLayoutResource(R.layout.preference_color); } else { setWidgetLayoutResource(0); } } } @Override public boolean shouldDisableDependents() { return Color.alpha(getValue()) == 0 || super.shouldDisableDependents(); } @Override protected CharSequence getTitleAt(int index) { final CharSequence title = super.getTitleAt(index); if (title != null) { return title; } // If no title was supplied, format title using RGB values. final int value = getValueAt(index); final int r = Color.red(value); final int g = Color.green(value); final int b = Color.blue(value); return getContext().getString(R.string.color_custom, r, g, b); } @Override public void onBindViewHolder(PreferenceViewHolder view) { super.onBindViewHolder(view); if (mPreviewEnabled) { final ImageView previewImage = (ImageView) view.findViewById(R.id.color_preview); final int argb = getValue(); if (Color.alpha(argb) < 255) { previewImage.setBackgroundResource(R.drawable.transparency_tileable); } else { previewImage.setBackground(null); } if (mPreviewColor == null) { mPreviewColor = new ColorDrawable(argb); previewImage.setImageDrawable(mPreviewColor); } else { mPreviewColor.setColor(argb); } final CharSequence summary = getSummary(); if (!TextUtils.isEmpty(summary)) { previewImage.setContentDescription(summary); } else { previewImage.setContentDescription(null); } previewImage.setAlpha(isEnabled() ? 1f : 0.2f); } } @Override protected void onBindListItem(View view, int index) { final int argb = getValueAt(index); final int alpha = Color.alpha(argb); final ImageView swatch = (ImageView) view.findViewById(R.id.color_swatch); if (alpha < 255) { swatch.setBackgroundResource(R.drawable.transparency_tileable); } else { swatch.setBackground(null); } final Drawable foreground = swatch.getDrawable(); if (foreground instanceof ColorDrawable) { ((ColorDrawable) foreground).setColor(argb); } else { swatch.setImageDrawable(new ColorDrawable(argb)); } final CharSequence title = getTitleAt(index); if (title != null) { final TextView summary = (TextView) view.findViewById(R.id.summary); summary.setText(title); } } }