зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1366703 - Part 2: Implement tab menu strip visual refresh for Photon. r=walkingice
In about:home page, we would like to switch tab indicator color between normal and private mode. MozReview-Commit-ID: FBhuPBaVvM3 --HG-- extra : rebase_source : 2d754db9bc45cf77f7f69f05aded883d991a9259
This commit is contained in:
Родитель
1d05f29242
Коммит
bb9758cc2a
|
@ -132,6 +132,7 @@
|
|||
|
||||
<declare-styleable name="TabMenuStrip">
|
||||
<attr name="strip" format="reference"/>
|
||||
<attr name="stripColor" format="color" />
|
||||
<attr name="tabsMarginLeft" format="dimension" />
|
||||
<attr name="activeTextColor" format="color" />
|
||||
<attr name="inactiveTextColor" format="color" />
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:gecko="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:color="@color/photon_highlight_private"
|
||||
gecko:state_private="true"/>
|
||||
|
||||
<item android:color="@color/photon_highlight"/>
|
||||
|
||||
</selector>
|
|
@ -13,13 +13,15 @@
|
|||
android:layout_height="match_parent"
|
||||
android:background="@android:color/white">
|
||||
|
||||
<org.mozilla.gecko.home.TabMenuStrip android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/tabs_strip_height"
|
||||
android:background="@color/about_page_header_grey"
|
||||
android:layout_gravity="top"
|
||||
gecko:strip="@drawable/home_tab_menu_strip"
|
||||
gecko:activeTextColor="@color/placeholder_grey"
|
||||
gecko:inactiveTextColor="@color/tab_text_color"
|
||||
gecko:tabsMarginLeft="@dimen/tab_strip_content_start" />
|
||||
<org.mozilla.gecko.home.TabMenuStrip
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/tabs_strip_height"
|
||||
android:layout_gravity="top"
|
||||
android:background="@color/about_page_header_grey"
|
||||
gecko:activeTextColor="@color/placeholder_grey"
|
||||
gecko:inactiveTextColor="@color/tab_text_color"
|
||||
gecko:strip="@drawable/home_tab_menu_strip"
|
||||
gecko:stripColor="@color/tab_menu_strip_color"
|
||||
gecko:tabsMarginLeft="@dimen/tab_strip_content_start"/>
|
||||
|
||||
</org.mozilla.gecko.home.HomePager>
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче