зеркало из https://github.com/mozilla/gecko-dev.git
Bug 822421: Lightweight theme based text colors on about:home. [r=mfinkle]
--HG-- extra : rebase_source : 069bf336dc6753ecae41c56a49196059724d9d83
This commit is contained in:
Родитель
fe0e2c5d82
Коммит
6ee2b4ee8d
|
@ -689,11 +689,27 @@ public class AboutHomeContent extends ScrollView
|
||||||
|
|
||||||
drawable.setAlpha(255, 0);
|
drawable.setAlpha(255, 0);
|
||||||
setBackgroundDrawable(drawable);
|
setBackgroundDrawable(drawable);
|
||||||
|
|
||||||
|
boolean isLight = mActivity.getLightweightTheme().isLightTheme();
|
||||||
|
|
||||||
|
if (mAddons != null) {
|
||||||
|
mAddons.setTheme(isLight);
|
||||||
|
mLastTabs.setTheme(isLight);
|
||||||
|
mRemoteTabs.setTheme(isLight);
|
||||||
|
((GeckoTextView) findViewById(R.id.top_sites_title)).setTheme(isLight);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLightweightThemeReset() {
|
public void onLightweightThemeReset() {
|
||||||
setBackgroundResource(R.drawable.abouthome_bg_repeat);
|
setBackgroundResource(R.drawable.abouthome_bg_repeat);
|
||||||
|
|
||||||
|
if (mAddons != null) {
|
||||||
|
mAddons.resetTheme();
|
||||||
|
mLastTabs.resetTheme();
|
||||||
|
mRemoteTabs.resetTheme();
|
||||||
|
((GeckoTextView) findViewById(R.id.top_sites_title)).resetTheme();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -13,7 +13,7 @@ import android.view.View;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
public class AboutHomeSection extends LinearLayout {
|
public class AboutHomeSection extends GeckoLinearLayout {
|
||||||
private static final String LOGTAG = "GeckoAboutHomeSection";
|
private static final String LOGTAG = "GeckoAboutHomeSection";
|
||||||
|
|
||||||
private TextView mTitle;
|
private TextView mTitle;
|
||||||
|
|
|
@ -10,8 +10,12 @@ import android.widget.@VIEWTYPE@;
|
||||||
|
|
||||||
public class Gecko@VIEWTYPE@ extends @VIEWTYPE@ {
|
public class Gecko@VIEWTYPE@ extends @VIEWTYPE@ {
|
||||||
private static final int[] STATE_PRIVATE_MODE = { R.attr.state_private };
|
private static final int[] STATE_PRIVATE_MODE = { R.attr.state_private };
|
||||||
|
private static final int[] STATE_LIGHT = { R.attr.state_light };
|
||||||
|
private static final int[] STATE_DARK = { R.attr.state_dark };
|
||||||
|
|
||||||
private boolean mIsPrivate = false;
|
private boolean mIsPrivate = false;
|
||||||
|
private boolean mIsLight = false;
|
||||||
|
private boolean mIsDark = false;
|
||||||
|
|
||||||
public Gecko@VIEWTYPE@(Context context, AttributeSet attrs) {
|
public Gecko@VIEWTYPE@(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
|
@ -23,6 +27,10 @@ public class Gecko@VIEWTYPE@ extends @VIEWTYPE@ {
|
||||||
|
|
||||||
if (mIsPrivate)
|
if (mIsPrivate)
|
||||||
mergeDrawableStates(drawableState, STATE_PRIVATE_MODE);
|
mergeDrawableStates(drawableState, STATE_PRIVATE_MODE);
|
||||||
|
else if (mIsLight)
|
||||||
|
mergeDrawableStates(drawableState, STATE_LIGHT);
|
||||||
|
else if (mIsDark)
|
||||||
|
mergeDrawableStates(drawableState, STATE_DARK);
|
||||||
|
|
||||||
return drawableState;
|
return drawableState;
|
||||||
}
|
}
|
||||||
|
@ -36,5 +44,29 @@ public class Gecko@VIEWTYPE@ extends @VIEWTYPE@ {
|
||||||
mIsPrivate = isPrivate;
|
mIsPrivate = isPrivate;
|
||||||
refreshDrawableState();
|
refreshDrawableState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTheme(boolean isLight) {
|
||||||
|
// Set the theme only if it is different from existing theme.
|
||||||
|
if ((isLight && mIsLight != isLight) ||
|
||||||
|
(!isLight && mIsDark == isLight)) {
|
||||||
|
if (isLight) {
|
||||||
|
mIsLight = true;
|
||||||
|
mIsDark = false;
|
||||||
|
} else {
|
||||||
|
mIsLight = false;
|
||||||
|
mIsDark = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
refreshDrawableState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resetTheme() {
|
||||||
|
if (mIsLight || mIsDark) {
|
||||||
|
mIsLight = false;
|
||||||
|
mIsDark = false;
|
||||||
|
refreshDrawableState();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ public class LightweightTheme implements GeckoEventListener {
|
||||||
private Application mApplication;
|
private Application mApplication;
|
||||||
private Bitmap mBitmap;
|
private Bitmap mBitmap;
|
||||||
private int mColor;
|
private int mColor;
|
||||||
|
private boolean mIsLight;
|
||||||
|
|
||||||
public static interface OnChangeListener {
|
public static interface OnChangeListener {
|
||||||
// This is the View's default post.
|
// This is the View's default post.
|
||||||
|
@ -98,6 +99,11 @@ public class LightweightTheme implements GeckoEventListener {
|
||||||
maxWidth, height);
|
maxWidth, height);
|
||||||
mColor = BitmapUtils.getDominantColor(cropped, false);
|
mColor = BitmapUtils.getDominantColor(cropped, false);
|
||||||
|
|
||||||
|
double luminance = (0.2125 * ((mColor & 0x00FF0000) >> 16)) +
|
||||||
|
(0.7154 * ((mColor & 0x0000FF00) >> 8)) +
|
||||||
|
(0.0721 * (mColor &0x000000FF));
|
||||||
|
mIsLight = (luminance > 110) ? true : false;
|
||||||
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
} catch(java.net.MalformedURLException e) {
|
} catch(java.net.MalformedURLException e) {
|
||||||
mBitmap = null;
|
mBitmap = null;
|
||||||
|
@ -156,6 +162,10 @@ public class LightweightTheme implements GeckoEventListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isLightTheme() {
|
||||||
|
return mIsLight;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crop the image based on the position of the view on the window.
|
* Crop the image based on the position of the view on the window.
|
||||||
* Either the View or one of its ancestors might have scrolled or translated.
|
* Either the View or one of its ancestors might have scrolled or translated.
|
||||||
|
|
|
@ -227,6 +227,9 @@ FENNEC_PP_JAVA_FILES = \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
FENNEC_PP_XML_FILES = \
|
FENNEC_PP_XML_FILES = \
|
||||||
|
res/color/abouthome_section_more_text.xml \
|
||||||
|
res/color/abouthome_section_subtitle.xml \
|
||||||
|
res/color/abouthome_section_title.xml \
|
||||||
res/color/awesome_bar_title.xml \
|
res/color/awesome_bar_title.xml \
|
||||||
res/color/awesome_bar_title_hint.xml \
|
res/color/awesome_bar_title_hint.xml \
|
||||||
res/drawable/address_bar_bg.xml \
|
res/drawable/address_bar_bg.xml \
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#filter substitution
|
||||||
|
<?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/@ANDROID_PACKAGE_NAME@">
|
||||||
|
|
||||||
|
<!-- dark theme -->
|
||||||
|
<item gecko:state_dark="true" android:color="#80FFFFFF" />
|
||||||
|
|
||||||
|
<!-- light theme -->
|
||||||
|
<item gecko:state_light="true" android:color="#80222222" />
|
||||||
|
|
||||||
|
<!-- default -->
|
||||||
|
<item android:color="#FF22629E"/>
|
||||||
|
|
||||||
|
</selector>
|
|
@ -0,0 +1,19 @@
|
||||||
|
#filter substitution
|
||||||
|
<?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/@ANDROID_PACKAGE_NAME@">
|
||||||
|
|
||||||
|
<!-- dark theme -->
|
||||||
|
<item gecko:state_dark="true" android:color="#CCFFFFFF" />
|
||||||
|
|
||||||
|
<!-- light theme -->
|
||||||
|
<item gecko:state_light="true" android:color="#CC222222" />
|
||||||
|
|
||||||
|
<!-- default -->
|
||||||
|
<item android:color="#FF666666"/>
|
||||||
|
|
||||||
|
</selector>
|
|
@ -0,0 +1,19 @@
|
||||||
|
#filter substitution
|
||||||
|
<?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/@ANDROID_PACKAGE_NAME@">
|
||||||
|
|
||||||
|
<!-- dark theme -->
|
||||||
|
<item gecko:state_dark="true" android:color="#FFFFFFFF" />
|
||||||
|
|
||||||
|
<!-- light theme -->
|
||||||
|
<item gecko:state_light="true" android:color="#FF222222" />
|
||||||
|
|
||||||
|
<!-- default -->
|
||||||
|
<item android:color="#FF000000"/>
|
||||||
|
|
||||||
|
</selector>
|
|
@ -25,16 +25,16 @@
|
||||||
android:layout_marginBottom="10dip"
|
android:layout_marginBottom="10dip"
|
||||||
android:layout_marginLeft="12dip"/>
|
android:layout_marginLeft="12dip"/>
|
||||||
|
|
||||||
<TextView android:id="@+id/top_sites_title"
|
<Gecko.TextView android:id="@+id/top_sites_title"
|
||||||
android:text="@string/abouthome_top_sites_title"
|
android:text="@string/abouthome_top_sites_title"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="26dip"
|
android:layout_height="26dip"
|
||||||
android:background="#34FFFFFF"
|
android:background="#34FFFFFF"
|
||||||
android:paddingLeft="12dip"
|
android:paddingLeft="12dip"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:textColor="#000000"
|
android:textColor="@color/abouthome_section_title"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:gravity="left|center_vertical"/>
|
android:gravity="left|center_vertical"/>
|
||||||
|
|
||||||
<view class="org.mozilla.gecko.AboutHomeContent$TopSitesGridView"
|
<view class="org.mozilla.gecko.AboutHomeContent$TopSitesGridView"
|
||||||
android:id="@+id/top_sites_grid"
|
android:id="@+id/top_sites_grid"
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="47dip"
|
android:layout_height="47dip"
|
||||||
android:gravity="left|center_vertical"
|
android:gravity="left|center_vertical"
|
||||||
android:background="@drawable/action_bar_button">
|
android:background="@drawable/action_bar_button"
|
||||||
|
android:duplicateParentState="true">
|
||||||
|
|
||||||
<ImageView android:id="@+id/addon_icon"
|
<ImageView android:id="@+id/addon_icon"
|
||||||
android:layout_width="32dp"
|
android:layout_width="32dp"
|
||||||
|
@ -23,7 +24,8 @@
|
||||||
android:layout_marginLeft="12dip"
|
android:layout_marginLeft="12dip"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:textSize="15sp"
|
android:textSize="15sp"
|
||||||
android:textColor="#222222"/>
|
android:textColor="@color/abouthome_section_title"
|
||||||
|
android:duplicateParentState="true"/>
|
||||||
|
|
||||||
<TextView android:id="@+id/addon_version"
|
<TextView android:id="@+id/addon_version"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -33,7 +35,8 @@
|
||||||
android:layout_marginLeft="5dip"
|
android:layout_marginLeft="5dip"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:textColor="#666666"/>
|
android:textColor="@color/abouthome_section_subtitle"
|
||||||
|
android:duplicateParentState="true"/>
|
||||||
|
|
||||||
<View android:layout_width="fill_parent"
|
<View android:layout_width="fill_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
|
|
|
@ -22,17 +22,17 @@
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_alignParentLeft="true"/>
|
android:layout_alignParentLeft="true"/>
|
||||||
|
|
||||||
<TextView android:id="@+id/top_sites_title"
|
<Gecko.TextView android:id="@+id/top_sites_title"
|
||||||
android:text="@string/abouthome_top_sites_title"
|
android:text="@string/abouthome_top_sites_title"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="26dip"
|
android:layout_height="26dip"
|
||||||
android:background="#34FFFFFF"
|
android:background="#34FFFFFF"
|
||||||
android:paddingLeft="12dip"
|
android:paddingLeft="12dip"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:textColor="#000000"
|
android:textColor="@color/abouthome_section_title"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:gravity="left|center_vertical"
|
android:gravity="left|center_vertical"
|
||||||
android:layout_below="@id/abouthome_logo"/>
|
android:layout_below="@id/abouthome_logo"/>
|
||||||
|
|
||||||
<ImageView android:src="@drawable/abouthome_icon"
|
<ImageView android:src="@drawable/abouthome_icon"
|
||||||
android:layout_width="180dp"
|
android:layout_width="180dp"
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="47dip"
|
android:layout_height="47dip"
|
||||||
android:gravity="left|center_vertical"
|
android:gravity="left|center_vertical"
|
||||||
android:background="@drawable/action_bar_button">
|
android:background="@drawable/action_bar_button"
|
||||||
|
android:duplicateParentState="true">
|
||||||
|
|
||||||
<ImageView android:id="@+id/last_tab_favicon"
|
<ImageView android:id="@+id/last_tab_favicon"
|
||||||
android:layout_width="32dip"
|
android:layout_width="32dip"
|
||||||
|
@ -26,7 +27,8 @@
|
||||||
android:layout_marginRight="12dip"
|
android:layout_marginRight="12dip"
|
||||||
android:textSize="15sp"
|
android:textSize="15sp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textColor="#222222"/>
|
android:textColor="@color/abouthome_section_title"
|
||||||
|
android:duplicateParentState="true"/>
|
||||||
|
|
||||||
<TextView android:id="@+id/last_tab_url"
|
<TextView android:id="@+id/last_tab_url"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -37,7 +39,8 @@
|
||||||
android:layout_below="@id/last_tab_title"
|
android:layout_below="@id/last_tab_title"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textColor="#666666"/>
|
android:textColor="@color/abouthome_section_subtitle"
|
||||||
|
android:duplicateParentState="true"/>
|
||||||
|
|
||||||
<View android:layout_width="fill_parent"
|
<View android:layout_width="fill_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="47dip"
|
android:layout_height="47dip"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:background="@drawable/action_bar_button">
|
android:background="@drawable/action_bar_button"
|
||||||
|
android:duplicateParentState="true">
|
||||||
|
|
||||||
<TextView android:id="@+id/remote_tab_title"
|
<TextView android:id="@+id/remote_tab_title"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
|
@ -16,9 +17,10 @@
|
||||||
android:paddingRight="12dip"
|
android:paddingRight="12dip"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:textSize="15sp"
|
android:textSize="15sp"
|
||||||
android:textColor="#222222"
|
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="middle"/>
|
android:ellipsize="middle"
|
||||||
|
android:textColor="@color/abouthome_section_title"
|
||||||
|
android:duplicateParentState="true"/>
|
||||||
|
|
||||||
<View android:layout_width="fill_parent"
|
<View android:layout_width="fill_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
|
|
|
@ -11,9 +11,10 @@
|
||||||
android:background="#34FFFFFF"
|
android:background="#34FFFFFF"
|
||||||
android:paddingLeft="12dip"
|
android:paddingLeft="12dip"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:textColor="#000000"
|
android:textColor="@color/abouthome_section_title"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:gravity="left|center_vertical"/>
|
android:gravity="left|center_vertical"
|
||||||
|
android:duplicateParentState="true"/>
|
||||||
|
|
||||||
<TextView android:id="@+id/subtitle"
|
<TextView android:id="@+id/subtitle"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
|
@ -22,20 +23,23 @@
|
||||||
android:background="#34FFFFFF"
|
android:background="#34FFFFFF"
|
||||||
android:paddingLeft="12dip"
|
android:paddingLeft="12dip"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:textColor="#666666"
|
android:textColor="@color/abouthome_section_subtitle"
|
||||||
android:gravity="left|center_vertical"/>
|
android:gravity="left|center_vertical"
|
||||||
|
android:duplicateParentState="true"/>
|
||||||
|
|
||||||
<LinearLayout android:id="@+id/items_container"
|
<LinearLayout android:id="@+id/items_container"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:isScrollContainer="false"/>
|
android:isScrollContainer="false"
|
||||||
|
android:duplicateParentState="true"/>
|
||||||
|
|
||||||
<org.mozilla.gecko.LinkTextView android:id="@+id/more_text"
|
<org.mozilla.gecko.LinkTextView android:id="@+id/more_text"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="47dip"
|
android:layout_height="47dip"
|
||||||
android:textColor="#22629e"
|
android:textColor="@color/abouthome_section_more_text"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:gravity="center"/>
|
android:gravity="center"
|
||||||
|
android:duplicateParentState="true"/>
|
||||||
|
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -61,5 +61,10 @@
|
||||||
<attr name="state_private" format="boolean"/>
|
<attr name="state_private" format="boolean"/>
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
|
<declare-styleable name="LightweightTheme">
|
||||||
|
<attr name="state_light" format="boolean"/>
|
||||||
|
<attr name="state_dark" format="boolean"/>
|
||||||
|
</declare-styleable>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче