Index: chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/TabSwitcherDrawable.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/TabSwitcherDrawable.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/TabSwitcherDrawable.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c7804c3aac38f2658c6042a39bc8f0377eaaf2c2 |
--- /dev/null |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/TabSwitcherDrawable.java |
@@ -0,0 +1,123 @@ |
+// 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.toolbar; |
+ |
+import android.content.res.Resources; |
+import android.graphics.Bitmap; |
+import android.graphics.BitmapFactory; |
+import android.graphics.Canvas; |
+import android.graphics.Paint.Align; |
+import android.graphics.Rect; |
+import android.graphics.Typeface; |
+import android.text.TextPaint; |
+ |
+import com.google.android.apps.chrome.R; |
+ |
+import org.chromium.base.VisibleForTesting; |
+import org.chromium.chrome.browser.widget.TintedDrawable; |
+ |
+import java.util.Locale; |
+ |
+/** |
+ * A drawable for the tab switcher icon. |
+ */ |
+public class TabSwitcherDrawable extends TintedDrawable { |
+ private final float mSingleDigitTextSize; |
+ private final float mDoubleDigitTextSize; |
+ |
+ private final Rect mTextBounds = new Rect(); |
+ private final TextPaint mTextPaint; |
+ |
+ // Tab Count Label |
+ private int mTabCount; |
+ private boolean mIncognito; |
+ |
+ /** |
+ * Creates a {@link TabSwitcherDrawable}. |
+ * @param resources A {@link Resources} instance. |
+ * @param useLight Whether or not to use light or dark textures and text colors. |
+ * @return A {@link TabSwitcherDrawable} instance. |
+ */ |
+ public static TabSwitcherDrawable createTabSwitcherDrawable( |
+ Resources resources, boolean useLight) { |
+ Bitmap icon = BitmapFactory.decodeResource(resources, R.drawable.btn_tabswitcher); |
+ return new TabSwitcherDrawable(resources, useLight, icon); |
+ } |
+ |
+ private TabSwitcherDrawable(Resources resources, boolean useLight, Bitmap bitmap) { |
+ super(resources, bitmap); |
+ setTint(resources.getColorStateList(useLight ? R.color.light_mode_tint |
+ : R.color.dark_mode_tint)); |
+ mSingleDigitTextSize = |
+ resources.getDimension(R.dimen.toolbar_tab_count_text_size_1_digit); |
+ mDoubleDigitTextSize = |
+ resources.getDimension(R.dimen.toolbar_tab_count_text_size_2_digit); |
+ |
+ mTextPaint = new TextPaint(); |
+ mTextPaint.setAntiAlias(true); |
+ mTextPaint.setTextAlign(Align.CENTER); |
+ mTextPaint.setTypeface(Typeface.create("sans-serif-condensed", Typeface.BOLD)); |
+ mTextPaint.setColor(getColorForState()); |
+ } |
+ |
+ @Override |
+ protected boolean onStateChange(int[] state) { |
+ boolean retVal = super.onStateChange(state); |
+ if (retVal) mTextPaint.setColor(getColorForState()); |
+ return retVal; |
+ } |
+ |
+ @Override |
+ public void draw(Canvas canvas) { |
+ super.draw(canvas); |
+ |
+ String textString = getTabCountString(); |
+ if (!textString.isEmpty()) { |
+ mTextPaint.getTextBounds(textString, 0, textString.length(), mTextBounds); |
+ |
+ Rect drawableBounds = getBounds(); |
+ int textX = drawableBounds.width() / 2; |
+ int textY = drawableBounds.height() / 2 + (mTextBounds.bottom - mTextBounds.top) / 2 |
+ - mTextBounds.bottom; |
+ |
+ canvas.drawText(textString, textX, textY, mTextPaint); |
+ } |
+ } |
+ |
+ /** |
+ * @return The current tab count this drawable is displaying. |
+ */ |
+ @VisibleForTesting |
+ public int getTabCount() { |
+ return mTabCount; |
+ } |
+ |
+ /** |
+ * Update the visual state based on the number of tabs present. |
+ * @param tabCount The number of tabs. |
+ */ |
+ public void updateForTabCount(int tabCount, boolean incognito) { |
+ if (tabCount == mTabCount && incognito == mIncognito) return; |
+ mTabCount = tabCount; |
+ mIncognito = incognito; |
+ float textSizePx = mTabCount > 9 ? mDoubleDigitTextSize : mSingleDigitTextSize; |
+ mTextPaint.setTextSize(textSizePx); |
+ invalidateSelf(); |
+ } |
+ |
+ private String getTabCountString() { |
+ if (mTabCount <= 0) { |
+ return ""; |
+ } else if (mTabCount > 99) { |
+ return mIncognito ? ";)" : ":D"; |
+ } else { |
+ return String.format(Locale.getDefault(), "%d", mTabCount); |
+ } |
+ } |
+ |
+ private int getColorForState() { |
+ return mTint.getColorForState(getState(), 0); |
+ } |
+} |