diff --git a/mobile/android/app/src/main/res/values/attrs.xml b/mobile/android/app/src/main/res/values/attrs.xml index 443c6243bc8e..225835f6666e 100644 --- a/mobile/android/app/src/main/res/values/attrs.xml +++ b/mobile/android/app/src/main/res/values/attrs.xml @@ -132,6 +132,7 @@ + diff --git a/mobile/android/app/src/photon/res/color/tab_menu_strip_color.xml b/mobile/android/app/src/photon/res/color/tab_menu_strip_color.xml new file mode 100644 index 000000000000..64e440ebc514 --- /dev/null +++ b/mobile/android/app/src/photon/res/color/tab_menu_strip_color.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/mobile/android/app/src/photon/res/layout/home_pager.xml b/mobile/android/app/src/photon/res/layout/home_pager.xml index c858cefbc18e..5fa7d8153b26 100644 --- a/mobile/android/app/src/photon/res/layout/home_pager.xml +++ b/mobile/android/app/src/photon/res/layout/home_pager.xml @@ -13,13 +13,15 @@ android:layout_height="match_parent" android:background="@android:color/white"> - + diff --git a/mobile/android/base/java/org/mozilla/gecko/home/TabMenuStripLayout.java b/mobile/android/base/java/org/mozilla/gecko/home/TabMenuStripLayout.java index df4e4632a07b..667a922f197c 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/TabMenuStripLayout.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/TabMenuStripLayout.java @@ -5,12 +5,18 @@ package org.mozilla.gecko.home; +import android.graphics.Color; +import android.support.v4.content.res.ResourcesCompat; +import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v4.view.ViewCompat; import android.view.ViewGroup; import android.widget.LinearLayout; import android.content.res.ColorStateList; import org.mozilla.gecko.R; +import org.mozilla.gecko.Tab; +import org.mozilla.gecko.Tabs; +import org.mozilla.gecko.widget.themed.ThemedLinearLayout; import android.content.Context; import android.content.res.TypedArray; @@ -27,8 +33,8 @@ import android.widget.TextView; * {@code TabMenuStripLayout} is the view that draws the {@code HomePager} * tabs that are displayed in {@code TabMenuStrip}. */ -class TabMenuStripLayout extends LinearLayout - implements View.OnFocusChangeListener { +class TabMenuStripLayout extends ThemedLinearLayout + implements View.OnFocusChangeListener, Tabs.OnTabsChangedListener { private TabMenuStrip.OnTitleClickListener onTitleClickListener; private Drawable strip; @@ -43,30 +49,52 @@ class TabMenuStripLayout extends LinearLayout // This variable is used to predict the direction of scroll. private float prevProgress; - private int tabContentStart; - private boolean titlebarFill; - private int activeTextColor; - private ColorStateList inactiveTextColor; + private final int tabContentStart; + private final boolean titlebarFill; + private final int activeTextColor; + private final ColorStateList inactiveTextColor; + private final ColorStateList stripColor; TabMenuStripLayout(Context context, AttributeSet attrs) { super(context, attrs); - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TabMenuStrip); + final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TabMenuStrip); final int stripResId = a.getResourceId(R.styleable.TabMenuStrip_strip, -1); titlebarFill = a.getBoolean(R.styleable.TabMenuStrip_titlebarFill, false); tabContentStart = a.getDimensionPixelSize(R.styleable.TabMenuStrip_tabsMarginLeft, 0); - activeTextColor = a.getColor(R.styleable.TabMenuStrip_activeTextColor, R.color.text_and_tabs_tray_grey); + activeTextColor = a.getColor(R.styleable.TabMenuStrip_activeTextColor, + ResourcesCompat.getColor(getResources(), R.color.text_and_tabs_tray_grey, null)); inactiveTextColor = a.getColorStateList(R.styleable.TabMenuStrip_inactiveTextColor); + stripColor = a.getColorStateList(R.styleable.TabMenuStrip_stripColor); a.recycle(); if (stripResId != -1) { strip = getResources().getDrawable(stripResId); + + if (stripColor != null) { + final int backgroundTintColor = stripColor.getColorForState(getDrawableState(), Color.TRANSPARENT); + DrawableCompat.setTint(strip, backgroundTintColor); + } } setWillNotDraw(false); } + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + + Tabs.registerOnTabsChangedListener(this); + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + + Tabs.unregisterOnTabsChangedListener(this); + } + void onAddPagerView(String title) { final TextView button = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.tab_menu_strip, this, false); button.setText(title.toUpperCase()); @@ -251,6 +279,29 @@ class TabMenuStripLayout extends LinearLayout this.onTitleClickListener = onTitleClickListener; } + @Override + public void onTabChanged(Tab tab, Tabs.TabEvents msg, String data) { + if (tab == null) { + return; + } + + if (msg == Tabs.TabEvents.SELECTED) { + setPrivateMode(tab.isPrivate()); + } + } + + @Override + public void setPrivateMode(boolean isPrivate) { + final boolean modeChanged = (isPrivateMode() != isPrivate); + + super.setPrivateMode(isPrivate); + + if (modeChanged && stripColor != null) { + final int backgroundTintColor = stripColor.getColorForState(getDrawableState(), Color.TRANSPARENT); + DrawableCompat.setTint(strip, backgroundTintColor); + } + } + private class ViewClickListener implements OnClickListener { private final int mIndex;