From 2c195f77a16e96fe2add0dd661b7376379e5513d Mon Sep 17 00:00:00 2001 From: Daniel Sandler Date: Fri, 21 May 2010 15:42:06 -0400 Subject: [PATCH] New shadowy status bar, direct from Z'ha'dum. Artwork is FPO but serviceable enough. Many hardcoded font colors & styles were moved to styles.xml where they belong. AM/PM finally given the old heave-ho (but configurable in StatusBarPolicy.java). Notification content remains on a light-gray background for now (so as not to screw up custom RemoteViews) but status icons will definitely need across-the-board rework to look better against a dark background. Change-Id: Id9d5a699532f9336563cd6f9699bff3893735e4f --- .../drawable-hdpi/status_bar_background.png | Bin 839 -> 1038 bytes .../drawable-hdpi/status_bar_close_on.9.png | Bin 945 -> 2368 bytes .../status_bar_header_background.9.png | Bin 187 -> 204 bytes .../drawable-hdpi/statusbar_background.9.png | Bin 215 -> 3233 bytes core/res/res/layout/status_bar.xml | 10 +-- core/res/res/layout/status_bar_expanded.xml | 12 +-- .../status_bar_latest_event_content.xml | 12 ++- core/res/res/values/styles.xml | 19 +++- .../android/server/status/StatusBarIcon.java | 5 +- .../server/status/StatusBarPolicy.java | 81 +++++++++++------- 10 files changed, 85 insertions(+), 54 deletions(-) diff --git a/core/res/res/drawable-hdpi/status_bar_background.png b/core/res/res/drawable-hdpi/status_bar_background.png index e6a865a786881b7c7d5fdde71ca7ebc2074695a5..3d00cd0f9a5e6c84fd10e3228a87d8639abc7166 100644 GIT binary patch delta 1015 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 diff --git a/core/res/res/drawable-hdpi/status_bar_header_background.9.png b/core/res/res/drawable-hdpi/status_bar_header_background.9.png index be36ff26bb8a969ed3fcf060a38c83253c689283..37b5fef592d1dda99f689aaecc47136b63c3864c 100644 GIT binary patch delta 139 zcmV;60CfMm0n7oANq=rhL_t(|+G1cp1^8zXWn*dST1H03!Q~)22j8fjlpD*;%sh0w@*khEj6h@m)7vWp5q!Xc tanviLb`Bc{4TNhMv9(EHasUAa06z^4M5y9{fB*mh07*qoLmn delta 121 zcmV-<0EYj}0lNW^Npf9DL_t(|+G1cp1^mzee+)xO zL_t(|+U%WMZyYNSgk#6KyyyS_#5_gHLn6l~vpHj73{6*cH8W#_wA%F;Smv^PRB^le z@Had?J$+DzySqDmrYo$l!U`*_Fgg5X3VTSY0KlDG`(Y1e_Shnt32Mkz1PW;4{{$zj<_DC&x=RROokXT7(++ltq#jLW$DXA4+0 zoLX_~^YLCs>$?!eV%_6bUgdXL=~{8>xTAcm#)SvEy~?n6UI?Um=Q6scv!H9K1_h86 zY8Zv461og5(MmlFyl8%?GDabacN6!HIqdSxGWnhVkr`b+a6)dabSx3vi?VN1?77poQkmDpG}lwz>rvz#>+& zQrV7_si)DwxE+eF1;jn60bIk^-3RRHkF@M%%fj((E=QH>Je=<;0TG9+`8K@$axyrgm!QmN| zJOX4?9kcdzCUB#wSJgP|^^y0KaQSzc{$U60ULn`8-4($;{}-7u60OWtwzPMe6Vu-t zv5ygpcyx?u3?PjX7KomE>%A{gi&_ESD1grn;mmo$41}W=GcuZ*t@IfcJ%SCRHc<$v zM}VD?rbM}n9Ei&s%bLCC_CQLv*l-tY2&1ch~^ zKNx-f5J001OwaTrZ@jYr*wgLQipQwujHyhDfm1Aet@K`yqL#RK{w_KlhslGnq|t`T zS-{%^u;+azKS*qkU>;YAbT2EqrrC8Vk2H)T8o3A zfBASpdp0mLphZSKkJ6y|WT@cC;G2kL9f4g0=us<~QO#M3_h|510Jgdpo&mhu%eDF~ zE9X%^A`+B}*i-4E(`8uenqA*G(&vmqU6J2Nc}MRXVi~i2ysWy-?mt$g%^L9>g(N#_ znX!`@Xe$7!fLj(UBdQ$DCkkcnwK*ERe?8lO^!F{(A&)#4s0VoSmHl%hvXMb%vt z#v@DHV;wVdoJZC=x;RJF?)Uz$_dJXgGXpZkyy0vJTX`tmDrK6e>Sgj&&Lxg6MB#-i zVnMSiS~0KIb3GI;K_+yS;I#m3!MCe`>$$NWMWw7zREsZUtOOPLKRa3*8LYg&0Se?vBV+2;H z>h-8s))H3s%_>#`i#DV(pgX#6qkDMUj_~v6&rs!^*>80Oh}lusGhnR9i&fgnhDmf( zbYvbc`n;n3!b){Jqfagl-cA#31$S)QAHaC=aoi6M@KzJRWYJgQALY_ zB183M0X$=Lc4Q|f=AJN1gU+& zpo&HUa{dU+87OA<^Qz;W6}-xL>_974{i@b^j*jL%%I;QJ!x3mR>oXtSx6A&1JlFPN z)bcyq;_;Cs2$kws4RY3bn5AkXWmV209$gb=`O|FW`xXJ5t%OypTdCK7R*vS)P|MM> zs=%pIxmSQL;?fKOJX&D?f5?-IR;*0Lt+J}wI1vk+nKr~)$w5o%YpH!#x|7>%cxj~bcQgsQG=7eE1BH13(ei%?}hi*_h&Wp)6UYT(zb-&)4}U{(R2b(=!f<_uAgE3MsZe|tCsx@T9r(Z=Yl zVY~zQir{4{R#oMm1*4IF#vCQ;j_8NTHaO1HK}l z&1x*D&gDG<7yW%be*^eE1jRCj8FQ0a&@#Zw0-p`4-C zW-8CUKML6$D0?oh%36*haa>y595bGB9O0j9P46S_OpQLtste}y1`@9*zZ z6u=6aZSz#hFjIA^)hYtd4A5pk_PyI$G1={1lJK7?0dw&7o z7I0et_N*Jd!f{YmfH?vsv|J+_J6h%=wi0~HzYnD{&RX&kRm?4WSf#q7WsWNR1>3p5 zjS{f+f9D#=zkmP!2jJa;F2UP^Zhd@(W57HEPzaEEyY`^v9_{{f#EwOg-HhI11;db0PY=7;Vwr2=F|<6s3HfLp+A9pAzYz+b+6c?H-F%G+!IT)r;|Ur#YJP?)hy zV{dT~tFoUtsEHlP9NkJV({R@pj*B+d%AUe0r+jfc_xgr)MX}E*Ylna{22>>WT-nA!flbn~A#kT{u|NfA1tL+dHWEK?c)Do9ac(GwoqmHrFfkx>lzRz=- zO-sHX)BVeGWB*c + /> + /> diff --git a/core/res/res/layout/status_bar_expanded.xml b/core/res/res/layout/status_bar_expanded.xml index 30138a742c74d..68eb9222bb4b4 100644 --- a/core/res/res/layout/status_bar_expanded.xml +++ b/core/res/res/layout/status_bar_expanded.xml @@ -48,7 +48,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textAppearance="?android:attr/textAppearanceLarge" - android:textColor="?android:attr/textColorSecondaryInverse" + android:textColor="?android:attr/textColorSecondary" android:paddingLeft="4dp" /> @@ -67,7 +67,7 @@ android:layout_marginTop="4dp" android:layout_marginBottom="1dp" android:textSize="14sp" - android:textColor="#ff000000" + android:textColor="?android:attr/textColorPrimaryInverse" android:text="@string/status_bar_clear_all_button" style="?android:attr/buttonStyle" android:paddingLeft="15dp" @@ -99,7 +99,7 @@ android:layout_height="wrap_content" android:background="@drawable/title_bar_portrait" android:paddingLeft="5dp" - android:textAppearance="@style/TextAppearance.StatusBarTitle" + android:textAppearance="@style/TextAppearance.StatusBar.Title" android:text="@string/status_bar_no_notifications_title" /> @@ -108,7 +108,7 @@ android:layout_height="wrap_content" android:background="@drawable/title_bar_portrait" android:paddingLeft="5dp" - android:textAppearance="@style/TextAppearance.StatusBarTitle" + android:textAppearance="@style/TextAppearance.StatusBar.Title" android:text="@string/status_bar_ongoing_events_title" /> + /> + /> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index b5fff968f9d1e..af04117db6c71 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -187,11 +187,26 @@ - + + + + + + diff --git a/services/java/com/android/server/status/StatusBarIcon.java b/services/java/com/android/server/status/StatusBarIcon.java index 6f8b8a8da6ca0..f77b550a433f7 100644 --- a/services/java/com/android/server/status/StatusBarIcon.java +++ b/services/java/com/android/server/status/StatusBarIcon.java @@ -51,14 +51,11 @@ class StatusBarIcon { switch (data.type) { case IconData.TEXT: { TextView t; - t = new TextView(context); + t = new TextView(context, null, com.android.internal.R.style.TextAppearance_StatusBar_Icon); mTextView = t; LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT); - t.setTextSize(16); - t.setTextColor(0xff000000); - t.setTypeface(Typeface.DEFAULT_BOLD); t.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); t.setPadding(6, 0, 0, 0); t.setLayoutParams(layoutParams); diff --git a/services/java/com/android/server/status/StatusBarPolicy.java b/services/java/com/android/server/status/StatusBarPolicy.java index 35ccfe8f66b7a..cab2662126a2f 100644 --- a/services/java/com/android/server/status/StatusBarPolicy.java +++ b/services/java/com/android/server/status/StatusBarPolicy.java @@ -29,6 +29,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.res.TypedArray; import android.graphics.PixelFormat; +import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.location.LocationManager; import android.media.AudioManager; @@ -49,7 +50,10 @@ import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; import android.text.format.DateFormat; +import android.text.style.CharacterStyle; import android.text.style.RelativeSizeSpan; +import android.text.style.ForegroundColorSpan; +import android.text.style.StyleSpan; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.util.Slog; @@ -86,6 +90,12 @@ public class StatusBarPolicy { // message codes for the handler private static final int EVENT_BATTERY_CLOSE = 4; + private static final int AM_PM_STYLE_NORMAL = 0; + private static final int AM_PM_STYLE_SMALL = 1; + private static final int AM_PM_STYLE_GONE = 2; + + private static final int AM_PM_STYLE = AM_PM_STYLE_GONE; + private final Context mContext; private final StatusBarService mService; private final Handler mHandler = new StatusBarHandler(); @@ -576,31 +586,33 @@ public class StatusBarPolicy { * add dummy characters around it to let us find it again after * formatting and change its size. */ - int a = -1; - boolean quoted = false; - for (int i = 0; i < format.length(); i++) { - char c = format.charAt(i); + if (AM_PM_STYLE != AM_PM_STYLE_NORMAL) { + int a = -1; + boolean quoted = false; + for (int i = 0; i < format.length(); i++) { + char c = format.charAt(i); - if (c == '\'') { - quoted = !quoted; + if (c == '\'') { + quoted = !quoted; + } + + if (!quoted && c == 'a') { + a = i; + break; + } } - if (!quoted && c == 'a') { - a = i; - break; + if (a >= 0) { + // Move a back so any whitespace before the AM/PM is also in the alternate size. + final int b = a; + while (a > 0 && Character.isWhitespace(format.charAt(a-1))) { + a--; + } + format = format.substring(0, a) + MAGIC1 + format.substring(a, b) + + "a" + MAGIC2 + format.substring(b + 1); } } - if (a >= 0) { - // Move a back so any whitespace before the AM/PM is also in the alternate size. - final int b = a; - while (a > 0 && Character.isWhitespace(format.charAt(a-1))) { - a--; - } - format = format.substring(0, a) + MAGIC1 + format.substring(a, b) - + "a" + MAGIC2 + format.substring(b + 1); - } - mClockFormat = sdf = new SimpleDateFormat(format); mClockFormatString = format; } else { @@ -608,22 +620,31 @@ public class StatusBarPolicy { } String result = sdf.format(mCalendar.getTime()); - int magic1 = result.indexOf(MAGIC1); - int magic2 = result.indexOf(MAGIC2); + if (AM_PM_STYLE != AM_PM_STYLE_NORMAL) { + int magic1 = result.indexOf(MAGIC1); + int magic2 = result.indexOf(MAGIC2); - if (magic1 >= 0 && magic2 > magic1) { - SpannableStringBuilder formatted = new SpannableStringBuilder(result); + if (magic1 >= 0 && magic2 > magic1) { + SpannableStringBuilder formatted = new SpannableStringBuilder(result); - formatted.setSpan(new RelativeSizeSpan(0.7f), magic1, magic2, - Spannable.SPAN_EXCLUSIVE_INCLUSIVE); + if (AM_PM_STYLE == AM_PM_STYLE_GONE) { + formatted.delete(magic1, magic2+1); + } else { + if (AM_PM_STYLE == AM_PM_STYLE_SMALL) { + CharacterStyle style = new RelativeSizeSpan(0.7f); + formatted.setSpan(style, magic1, magic2, + Spannable.SPAN_EXCLUSIVE_INCLUSIVE); + } - formatted.delete(magic2, magic2 + 1); - formatted.delete(magic1, magic1 + 1); + formatted.delete(magic2, magic2 + 1); + formatted.delete(magic1, magic1 + 1); + } - return formatted; - } else { - return result; + return formatted; + } } + + return result; } private final void updateClock() {