// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.ui; import android.content.Context; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable.Orientation; import android.os.Build; import android.view.View; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import org.chromium.base.ApiCompatibilityUtils; /** * Encapsulates a single gradient view of the HSV color display, including its label, gradient * view and seek bar. * * Mirrors a "color_picker_advanced_component" layout. */ public class ColorPickerAdvancedComponent { // The view that displays the gradient. private final View mGradientView; // The seek bar that allows the user to change the value of this component. private final SeekBar mSeekBar; // The set of colors to interpolate the gradient through. private int[] mGradientColors; // The Drawable that represents the gradient. private GradientDrawable mGradientDrawable; // The text label for the component. private final TextView mText; /** * Initializes the views. * * @param rootView View that contains all the content, such as the label, gradient view, etc. * @param textResourceId The resource ID of the text to show on the label. * @param seekBarMax The range of the seek bar. * @param seekBarListener The listener for when the seek bar value changes. */ ColorPickerAdvancedComponent(final View rootView, final int textResourceId, final int seekBarMax, final OnSeekBarChangeListener seekBarListener) { mGradientView = rootView.findViewById(R.id.gradient); mText = (TextView) rootView.findViewById(R.id.text); mText.setText(textResourceId); mGradientDrawable = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, null); mSeekBar = (SeekBar) rootView.findViewById(R.id.seek_bar); mSeekBar.setOnSeekBarChangeListener(seekBarListener); mSeekBar.setMax(seekBarMax); // Setting the thumb offset means the seek bar thumb can move all the way to each end // of the gradient view. Context context = rootView.getContext(); int offset = context.getResources() .getDrawable(R.drawable.color_picker_advanced_select_handle) .getIntrinsicWidth(); mSeekBar.setThumbOffset(offset / 2); } /** * @return The value represented by this component, maintained by the seek bar progress. */ public float getValue() { return mSeekBar.getProgress(); } /** * Sets the value of the component (by setting the seek bar value). * * @param newValue The value to give the component. */ public void setValue(float newValue) { mSeekBar.setProgress((int) newValue); } /** * Sets the colors for the gradient view to interpolate through. * * @param newColors The set of colors representing the interpolation points for the gradient. */ public void setGradientColors(int[] newColors) { mGradientColors = newColors.clone(); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { Orientation currentOrientation = Orientation.LEFT_RIGHT; mGradientDrawable = new GradientDrawable(currentOrientation, mGradientColors); } else { mGradientDrawable.setColors(mGradientColors); } ApiCompatibilityUtils.setBackgroundForView(mGradientView, mGradientDrawable); } }