Bug 822421: Lightweight theme based text colors on about:home. [r=mfinkle]

--HG--
extra : rebase_source : 069bf336dc6753ecae41c56a49196059724d9d83
This commit is contained in:
Sriram Ramasubramanian 2012-12-17 12:31:52 -08:00
Родитель fe0e2c5d82
Коммит 6ee2b4ee8d
15 изменённых файлов: 174 добавлений и 39 удалений

Просмотреть файл

@ -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>