Merge "Fix bug 5623642 - Status bar background incompatible with some legacy apps" into ics-mr1

This commit is contained in:
Adam Powell
2011-11-15 19:51:56 -08:00
committed by Android (Google) Code Review
4 changed files with 76 additions and 2 deletions

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:state_pressed="true" android:drawable="@drawable/notification_item_background_color_pressed" />
<item android:state_pressed="false" android:drawable="@drawable/notification_item_background_legacy_color" />
</selector>

View File

@@ -30,4 +30,5 @@
<drawable name="notification_tracking_bg">#d8000000</drawable> <drawable name="notification_tracking_bg">#d8000000</drawable>
<color name="notification_list_shadow_top">#80000000</color> <color name="notification_list_shadow_top">#80000000</color>
<drawable name="recents_callout_line">#99ffffff</drawable> <drawable name="recents_callout_line">#99ffffff</drawable>
<drawable name="notification_item_background_legacy_color">#ffaaaaaa</drawable>
</resources> </resources>

View File

@@ -28,11 +28,14 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.Handler; import android.os.Handler;
@@ -775,6 +778,8 @@ public class PhoneStatusBar extends StatusBar {
row.setDrawingCacheEnabled(true); row.setDrawingCacheEnabled(true);
} }
applyLegacyRowBackground(notification, content);
return new View[] { row, content, expanded }; return new View[] { row, content, expanded };
} }
@@ -948,6 +953,8 @@ public class PhoneStatusBar extends StatusBar {
row.setDrawingCacheEnabled(true); row.setDrawingCacheEnabled(true);
} }
applyLegacyRowBackground(sbn, content);
entry.row = row; entry.row = row;
entry.content = content; entry.content = content;
entry.expanded = expanded; entry.expanded = expanded;
@@ -956,6 +963,24 @@ public class PhoneStatusBar extends StatusBar {
return true; return true;
} }
void applyLegacyRowBackground(StatusBarNotification sbn, View content) {
if (sbn.notification.contentView.getLayoutId() !=
com.android.internal.R.layout.status_bar_latest_event_content) {
int version = 0;
try {
ApplicationInfo info = mContext.getPackageManager().getApplicationInfo(sbn.pkg, 0);
version = info.targetSdkVersion;
} catch (NameNotFoundException ex) {
Slog.e(TAG, "Failed looking up ApplicationInfo for " + sbn.pkg, ex);
}
if (version > 0 && version < Build.VERSION_CODES.HONEYCOMB) {
content.setBackgroundResource(R.drawable.notification_row_legacy_bg);
} else {
content.setBackgroundResource(R.drawable.notification_row_bg);
}
}
}
StatusBarNotification removeNotificationViews(IBinder key) { StatusBarNotification removeNotificationViews(IBinder key) {
NotificationData.Entry entry = mNotificationData.remove(key); NotificationData.Entry entry = mNotificationData.remove(key);
if (entry == null) { if (entry == null) {

View File

@@ -32,13 +32,17 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.inputmethodservice.InputMethodService; import android.inputmethodservice.InputMethodService;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.graphics.Point; import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable;
import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.Message; import android.os.Message;
@@ -1742,8 +1746,10 @@ public class TabletStatusBar extends StatusBar implements
} }
void workAroundBadLayerDrawableOpacity(View v) { void workAroundBadLayerDrawableOpacity(View v) {
LayerDrawable d = (LayerDrawable)v.getBackground(); Drawable bgd = v.getBackground();
if (d == null) return; if (!(bgd instanceof LayerDrawable)) return;
LayerDrawable d = (LayerDrawable) bgd;
v.setBackgroundDrawable(null); v.setBackgroundDrawable(null);
d.setOpacity(PixelFormat.TRANSLUCENT); d.setOpacity(PixelFormat.TRANSLUCENT);
v.setBackgroundDrawable(d); v.setBackgroundDrawable(d);
@@ -1809,6 +1815,8 @@ public class TabletStatusBar extends StatusBar implements
row.setDrawingCacheEnabled(true); row.setDrawingCacheEnabled(true);
} }
applyLegacyRowBackground(sbn, content);
entry.row = row; entry.row = row;
entry.content = content; entry.content = content;
entry.expanded = expanded; entry.expanded = expanded;
@@ -1817,6 +1825,24 @@ public class TabletStatusBar extends StatusBar implements
return true; return true;
} }
void applyLegacyRowBackground(StatusBarNotification sbn, View content) {
if (sbn.notification.contentView.getLayoutId() !=
com.android.internal.R.layout.status_bar_latest_event_content) {
int version = 0;
try {
ApplicationInfo info = mContext.getPackageManager().getApplicationInfo(sbn.pkg, 0);
version = info.targetSdkVersion;
} catch (NameNotFoundException ex) {
Slog.e(TAG, "Failed looking up ApplicationInfo for " + sbn.pkg, ex);
}
if (version > 0 && version < Build.VERSION_CODES.HONEYCOMB) {
content.setBackgroundResource(R.drawable.notification_row_legacy_bg);
} else {
content.setBackgroundResource(R.drawable.notification_row_bg);
}
}
}
public void clearAll() { public void clearAll() {
try { try {
mBarService.onClearAllNotifications(); mBarService.onClearAllNotifications();