Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(980)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/widget/ButtonCompat.java

Issue 1235033003: Move ButtonCompat to ui/android/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/widget/ButtonCompat.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/ButtonCompat.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/ButtonCompat.java
deleted file mode 100644
index 1385f1ada197e2bf898f9afd7abc8e4ac3d02365..0000000000000000000000000000000000000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/ButtonCompat.java
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2015 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.chrome.browser.widget;
-
-import android.animation.AnimatorInflater;
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.Color;
-import android.graphics.drawable.GradientDrawable;
-import android.graphics.drawable.RippleDrawable;
-import android.os.Build;
-import android.util.AttributeSet;
-import android.view.ContextThemeWrapper;
-import android.widget.Button;
-
-import org.chromium.chrome.R;
-
-/**
- * A Material-styled button with a customizable background color. On L devices, this is a true
- * Material button. On earlier devices, the button is similar but lacks ripples and a shadow.
- *
- * Create a button in Java:
- *
- * new ButtonCompat(context, Color.RED);
- *
- * Create a button in XML:
- *
- * <org.chromium.chrome.browser.widget.ButtonCompat
- * android:layout_width="wrap_content"
- * android:layout_height="wrap_content"
- * android:text="Click me"
- * chrome:buttonColor="#f00" />
- *
- * Note: To ensure the button's shadow is fully visible, you may need to set
- * android:clipToPadding="false" on the button's parent view.
- */
-@TargetApi(Build.VERSION_CODES.LOLLIPOP)
-public class ButtonCompat extends Button {
-
- private static final float PRE_L_PRESSED_BRIGHTNESS = 0.85f;
- private static final int DISABLED_COLOR = 0x1F000000;
-
- private int mColor;
-
- /**
- * Returns a new borderless material-style button.
- */
- public static Button createBorderlessButton(Context context) {
- return new Button(new ContextThemeWrapper(context, R.style.ButtonCompatBorderlessOverlay));
- }
-
- /**
- * Constructs a button with the given buttonColor as its background.
- */
- public ButtonCompat(Context context, int buttonColor) {
- this(context, buttonColor, null);
- }
-
- /**
- * Constructor for inflating from XML.
- */
- public ButtonCompat(Context context, AttributeSet attrs) {
- this(context, getColorFromAttributeSet(context, attrs), attrs);
- }
-
- private ButtonCompat(Context context, int buttonColor, AttributeSet attrs) {
- // To apply the ButtonCompat style to this view, use a ContextThemeWrapper to overlay the
- // ButtonCompatThemeOverlay, which simply sets the buttonStyle to @style/ButtonCompat.
- super(new ContextThemeWrapper(context, R.style.ButtonCompatOverlay), attrs);
-
- getBackground().mutate();
- setButtonColor(buttonColor);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- // Use the StateListAnimator from the Widget.Material.Button style to animate the
- // elevation when the button is pressed.
- TypedArray a = getContext().obtainStyledAttributes(null,
- new int[]{android.R.attr.stateListAnimator}, 0,
- android.R.style.Widget_Material_Button);
- setStateListAnimator(AnimatorInflater.loadStateListAnimator(getContext(),
- a.getResourceId(0, 0)));
- a.recycle();
- }
- }
-
- /**
- * Sets the background color of the button.
- */
- public void setButtonColor(int color) {
- if (color == mColor) return;
- mColor = color;
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- updateButtonBackgroundL();
- } else {
- updateButtonBackgroundPreL();
- }
- }
-
- @Override
- protected void drawableStateChanged() {
- super.drawableStateChanged();
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
- updateButtonBackgroundPreL();
- }
- }
-
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
- private void updateButtonBackgroundL() {
- ColorStateList csl = new ColorStateList(
- new int[][] { { -android.R.attr.state_enabled }, {} },
- new int[] { DISABLED_COLOR, mColor });
- GradientDrawable shape = (GradientDrawable)
- ((RippleDrawable) getBackground()).getDrawable(0);
- shape.mutate();
- shape.setColor(csl);
- }
-
- private void updateButtonBackgroundPreL() {
- GradientDrawable background = (GradientDrawable) getBackground();
- background.setColor(getBackgroundColorPreL());
- }
-
- private int getBackgroundColorPreL() {
- for (int state : getDrawableState()) {
- if (state == android.R.attr.state_pressed
- || state == android.R.attr.state_focused
- || state == android.R.attr.state_selected) {
- return Color.rgb(
- Math.round(Color.red(mColor) * PRE_L_PRESSED_BRIGHTNESS),
- Math.round(Color.green(mColor) * PRE_L_PRESSED_BRIGHTNESS),
- Math.round(Color.blue(mColor) * PRE_L_PRESSED_BRIGHTNESS));
- }
- }
- for (int state : getDrawableState()) {
- if (state == android.R.attr.state_enabled) {
- return mColor;
- }
- }
- return DISABLED_COLOR;
- }
-
- private static int getColorFromAttributeSet(Context context, AttributeSet attrs) {
- TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ButtonCompat, 0, 0);
- int color = a.getColor(R.styleable.ButtonCompat_buttonColor, Color.WHITE);
- a.recycle();
- return color;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698