blob: 80360f074cf8e1d9918c664ae86af94325fc15ab [file] [log] [blame]
// 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.components.embedder_support.delegate;
import android.content.Context;
import android.graphics.drawable.GradientDrawable;
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 = ApiCompatibilityUtils
.getDrawable(context.getResources(),
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();
mGradientDrawable.setColors(mGradientColors);
mGradientView.setBackground(mGradientDrawable);
}
}