From 0f0b11c8719495ce559b93366fe9cd79782d791c Mon Sep 17 00:00:00 2001 From: Daniel Sandler Date: Wed, 4 Aug 2010 15:54:58 -0400 Subject: [PATCH] Basic support for notification payloads in the panel. Line-item veto is there, but allows you to cancel some notifications you probably shouldn't be canceling. (Should hide the "X" in those cases.) No preference given to "sticky" notifications, because there's no such thing yet. Notifications are now limited to 4 visible icons, per spec. The implementation is a total hack for now. Change-Id: Ibdf433ae94189117f983c510fe5e0cff0bf5c44c --- .../internal/statusbar/IStatusBarService.aidl | 1 + .../status_bar_item_background_normal.9.png | Bin 197 -> 2867 bytes .../status_bar_item_background_normal.9.png | Bin 186 -> 2835 bytes .../status_bar_latest_event_content.xml | 56 ++++++++++ core/res/res/values-xlarge/styles.xml | 40 +++++++ .../drawable-hdpi/status_bar_veto_normal.png | Bin 0 -> 1221 bytes .../drawable-hdpi/status_bar_veto_pressed.png | Bin 0 -> 1874 bytes .../drawable-mdpi/status_bar_veto_normal.png | Bin 0 -> 699 bytes .../drawable-mdpi/status_bar_veto_pressed.png | Bin 0 -> 1192 bytes .../SystemUI/res/drawable/status_bar_veto.xml | 21 ++++ .../layout-xlarge/status_bar_latest_event.xml | 36 +++++++ .../sysbar_panel_notifications.xml | 39 ++++--- .../res/layout/status_bar_latest_event.xml | 24 ----- .../SystemUI/res/values-xlarge/strings.xml | 23 ++++ .../systemui/statusbar/NotificationData.java | 4 + .../tablet/TabletStatusBarService.java | 101 +++++++++++++----- .../server/NotificationManagerService.java | 5 + .../server/StatusBarManagerService.java | 7 ++ 18 files changed, 291 insertions(+), 66 deletions(-) create mode 100644 core/res/res/layout-xlarge/status_bar_latest_event_content.xml create mode 100644 core/res/res/values-xlarge/styles.xml create mode 100644 packages/SystemUI/res/drawable-hdpi/status_bar_veto_normal.png create mode 100644 packages/SystemUI/res/drawable-hdpi/status_bar_veto_pressed.png create mode 100644 packages/SystemUI/res/drawable-mdpi/status_bar_veto_normal.png create mode 100644 packages/SystemUI/res/drawable-mdpi/status_bar_veto_pressed.png create mode 100644 packages/SystemUI/res/drawable/status_bar_veto.xml create mode 100644 packages/SystemUI/res/layout-xlarge/status_bar_latest_event.xml delete mode 100644 packages/SystemUI/res/layout/status_bar_latest_event.xml create mode 100644 packages/SystemUI/res/values-xlarge/strings.xml diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index 852630dfa4433..23076696b4df0 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -40,4 +40,5 @@ interface IStatusBarService void onNotificationError(String pkg, String tag, int id, int uid, int initialPid, String message); void onClearAllNotifications(); + void onNotificationClear(String pkg, String tag, int id); } diff --git a/core/res/res/drawable-hdpi/status_bar_item_background_normal.9.png b/core/res/res/drawable-hdpi/status_bar_item_background_normal.9.png index c01c018683f297608c23bdaaba1f0a9ea7c586ac..810c950ae43fd84e9070a41f1b93c8fc87fb022d 100644 GIT binary patch delta 2860 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 Xfznu^g_$AL00000NkvXXu0mjfjAldi diff --git a/core/res/res/drawable-mdpi/status_bar_item_background_normal.9.png b/core/res/res/drawable-mdpi/status_bar_item_background_normal.9.png index b8e399d9d514a0064ca94a5718350457467f2a9d..f0e4d068cbfee4a8b91bcf6292d1a0c91bb4da25 100644 GIT binary patch delta 2828 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 delta 158 zcmV;P0Ac@=7P7@87@w!vxsa*cezq43GpeU}C@mu&Tr@`0w98 zO0*Lth}E5=f + + + + + + + + + + + diff --git a/core/res/res/values-xlarge/styles.xml b/core/res/res/values-xlarge/styles.xml new file mode 100644 index 0000000000000..40e423e23be17 --- /dev/null +++ b/core/res/res/values-xlarge/styles.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/drawable-hdpi/status_bar_veto_normal.png b/packages/SystemUI/res/drawable-hdpi/status_bar_veto_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..df532b844ea9d5b2145b0d82946da060eec2b7de GIT binary patch literal 1221 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 M07*qoM6N<$g5S4#{Qv*} literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_veto_normal.png b/packages/SystemUI/res/drawable-mdpi/status_bar_veto_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..f9a7cc2d1a81867064770f80d043d571f043a7e9 GIT binary patch literal 699 zcmV;s0!00ZP)`}_Nsmlvf{$>;M)llJ%bZ8lr8*__R0I-QOLg~4EWJRW?mR4VCoIur_BTwE;W zoSvROJv|{Okw~1MpOe!Ti^U%wA4tmQ^SNBE*XtP!hIuqCnqQ2a2ODPuGi}jtKaXd z)#^po>pGebj_Anm_ut;$qCxl*aH&*EC=`;O5|ZO{eSO{ScA>Px;lPYx7SsbbnM|TV zm&>(|5fMx#(`+`wJMd&Q8r|L9CDzZ*&VY;Yy}rKUSj-z-c@FJ%J4C5gtEEzjpfgXv zD>{9De=in`u#!X~S?Qgtt1C3;juk_JC5zd zj+2s-q|o4`i7B)ZqN_p|s6}il1S-%4qUwSTD}DqEiUf<4hg5-3ix2?{sG=YNDosV2 zv~esav0Q@VXPkQcoEPVtAexe3I4Opu7zQ`0EX$&(NFrklLNhFDu`*^ez+|x{H5*d1 ziA^f7aFQ4lW8xUI#bo8N6Mw~ety#I>stR;F4uY7SE?aLPIDW`~Fp4-d&ES1SmT@5< z40c#7PPfhHcl3ut(@##HdBfuI77}+6l4%2hh}G@wJup7==G#_JPkiq3pTGZ-i!W6+ zH=05PIT94NhwlyeMjjb^_SC@P8BiB+V0pDsq+Y|)o_zxq(jbR}Nf;;-coZX44VjZeg z3t6NP9G{$g@oebOVdR+p_4@qm1ug5p>gAHusAG}dV-X>rt>!oTCt@^fg3g@HZV&d` z{K1jq&*6&r%X60(KK-z`mJo88dU;E3Hb{6?H2|rKsx6^jEYCyHE|r)K0y{$yhBKGe zlk*qfTl?{9IlV6AvZy*N(l#1xurb~vzZA`SQK>S}`wH ztHfVG**Peq@7vB)L@^&<0%xG;L2%Qm39uhdseyDPBgzht78Zsy@ivRgWA*w1+sK8%}B;h@{ zxwM+77IGjZw_1A`X{I!Bs1Aza85)kBes%1`^Wd_%cq{((l~O9%vwsXqgOtf?1KIrY zqF5Es6F@g&(cp=UfZ}`jz|_mH4<0>+;E?l=OSAcvJ3=-iiLJn+6Qrn;#P|BarIcC~ zYgJ$wX9JBU=Dj{wcqsPT`N1PkV>iz1-G$^2b6cs^MtQ4NDxfpq0NpRna0Kg>%m%cF zQFeg{9iKmX`jydVP9g#%NL>B$*2nL|HJTh%EH=ue;A2x59bjR0I30bVl%gQ`K-+WPAUBTQy2Z`t)St3JHmUU8SUGMNn`nR8M&b~`#%l&OQyA9Wko?@+5 zD21+t&2+!Xx@)zmNUCAwF`;;$-!rry0wHDag)^{i7l?EK_+v0>b6VBrbcaW@5sa~i z8K6xFiHu+b6FaQbz4y!UppS<>@X1F39RqnE^j-K{fB^vTnTSwxZO*{}0000 + + + + + + + diff --git a/packages/SystemUI/res/layout-xlarge/status_bar_latest_event.xml b/packages/SystemUI/res/layout-xlarge/status_bar_latest_event.xml new file mode 100644 index 0000000000000..fa492d0788348 --- /dev/null +++ b/packages/SystemUI/res/layout-xlarge/status_bar_latest_event.xml @@ -0,0 +1,36 @@ + + + + + + + + + diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_notifications.xml b/packages/SystemUI/res/layout-xlarge/sysbar_panel_notifications.xml index 4a34f037e1d21..84a718a704486 100644 --- a/packages/SystemUI/res/layout-xlarge/sysbar_panel_notifications.xml +++ b/packages/SystemUI/res/layout-xlarge/sysbar_panel_notifications.xml @@ -19,14 +19,33 @@ --> - - + + + + + - - + diff --git a/packages/SystemUI/res/layout/status_bar_latest_event.xml b/packages/SystemUI/res/layout/status_bar_latest_event.xml deleted file mode 100644 index 88d973985d713..0000000000000 --- a/packages/SystemUI/res/layout/status_bar_latest_event.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - diff --git a/packages/SystemUI/res/values-xlarge/strings.xml b/packages/SystemUI/res/values-xlarge/strings.xml new file mode 100644 index 0000000000000..4aa4b4731939f --- /dev/null +++ b/packages/SystemUI/res/values-xlarge/strings.xml @@ -0,0 +1,23 @@ + + + + + Clear all + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java index 6bb5e8f2625aa..45abe930a380c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java @@ -54,6 +54,10 @@ public class NotificationData { return mEntries.size(); } + public Entry get(int i) { + return mEntries.get(i); + } + public Entry findByKey(IBinder key) { for (Entry e : mEntries) { if (e.key == key) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java index 9d643d850f198..b1c4ee3d9c536 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java @@ -37,6 +37,7 @@ import android.view.WindowManager; import android.graphics.Rect; import android.os.RemoteException; import android.view.WindowManagerImpl; +import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -59,18 +60,19 @@ public class TabletStatusBarService extends StatusBarService { H mHandler = new H(); - private View mNotificationPanel; - private View mSystemPanel; + View mNotificationPanel; + View mSystemPanel; - private NotificationIconArea.IconLayout mIconLayout; + ViewGroup mPile; + TextView mClearButton; - private NotificationData mHaps = new NotificationData(); + NotificationIconArea.IconLayout mIconLayout; + + private NotificationData mNotns = new NotificationData(); protected void addPanelWindows() { - if (mNotificationPanel == null) { - mNotificationPanel = View.inflate(this, R.layout.sysbar_panel_notifications, null); - mSystemPanel = View.inflate(this, R.layout.sysbar_panel_system, null); - } + mNotificationPanel = View.inflate(this, R.layout.sysbar_panel_notifications, null); + mSystemPanel = View.inflate(this, R.layout.sysbar_panel_system, null); mNotificationPanel.setVisibility(View.GONE); mSystemPanel.setVisibility(View.GONE); @@ -80,7 +82,7 @@ public class TabletStatusBarService extends StatusBarService { com.android.internal.R.dimen.status_bar_height); WindowManager.LayoutParams lp = new WindowManager.LayoutParams( - 300, // ViewGroup.LayoutParams.WRAP_CONTENT, + 400, // ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN @@ -112,10 +114,14 @@ public class TabletStatusBarService extends StatusBarService { WindowManagerImpl.getDefault().addView(mSystemPanel, lp); // Lorem ipsum, Dolores - TextView tv = ((TextView) mNotificationPanel.findViewById(R.id.notificationPanelDummy)); - if (tv != null) tv.setText("(You probably have new email)"); - tv = ((TextView) mSystemPanel.findViewById(R.id.systemPanelDummy)); + TextView tv = ((TextView) mSystemPanel.findViewById(R.id.systemPanelDummy)); if (tv != null) tv.setText("System status: great"); + + mPile = (ViewGroup)mNotificationPanel.findViewById(R.id.content); + mPile.removeAllViews(); + + mClearButton = (TextView)mNotificationPanel.findViewById(R.id.clear_all_button); + mClearButton.setOnClickListener(mClearButtonListener); } @Override @@ -196,7 +202,7 @@ public class TabletStatusBarService extends StatusBarService { public void updateNotification(IBinder key, StatusBarNotification notification) { if (DEBUG) Slog.d(TAG, "updateNotification(" + key + " -> " + notification + ") // TODO"); - final NotificationData.Entry oldEntry = mHaps.findByKey(key); + final NotificationData.Entry oldEntry = mNotns.findByKey(key); if (oldEntry == null) { Slog.w(TAG, "updateNotification for unknown key: " + key); return; @@ -285,6 +291,9 @@ public class TabletStatusBarService extends StatusBarService { public void notificationIconsClicked(View v) { if (DEBUG) Slog.d(TAG, "clicked notification icons"); + mHandler.removeMessages(H.MSG_CLOSE_SYSTEM_PANEL); + mHandler.sendEmptyMessage(H.MSG_CLOSE_SYSTEM_PANEL); + int msg = (mNotificationPanel.getVisibility() == View.GONE) ? H.MSG_OPEN_NOTIFICATION_PANEL : H.MSG_CLOSE_NOTIFICATION_PANEL; @@ -294,6 +303,9 @@ public class TabletStatusBarService extends StatusBarService { public void systemInfoClicked(View v) { if (DEBUG) Slog.d(TAG, "clicked system info"); + mHandler.removeMessages(H.MSG_CLOSE_NOTIFICATION_PANEL); + mHandler.sendEmptyMessage(H.MSG_CLOSE_NOTIFICATION_PANEL); + int msg = (mSystemPanel.getVisibility() == View.GONE) ? H.MSG_OPEN_SYSTEM_PANEL : H.MSG_CLOSE_SYSTEM_PANEL; @@ -313,6 +325,17 @@ public class TabletStatusBarService extends StatusBarService { } } + private View.OnClickListener mClearButtonListener = new View.OnClickListener() { + public void onClick(View v) { + try { + mBarService.onClearAllNotifications(); + } catch (RemoteException ex) { + // system process is dead if we're here. + } + animateCollapse(); + } + }; + private class NotificationClicker implements View.OnClickListener { private PendingIntent mIntent; private String mPkg; @@ -365,7 +388,7 @@ public class TabletStatusBarService extends StatusBarService { } StatusBarNotification removeNotificationViews(IBinder key) { - NotificationData.Entry entry = mHaps.remove(key); + NotificationData.Entry entry = mNotns.remove(key); if (entry == null) { Slog.w(TAG, "removeNotification for unknown key: " + key); return null; @@ -374,21 +397,16 @@ public class TabletStatusBarService extends StatusBarService { ViewGroup rowParent = (ViewGroup)entry.row.getParent(); if (rowParent != null) rowParent.removeView(entry.row); // Remove the icon. - ViewGroup iconParent = (ViewGroup)entry.icon.getParent(); - if (iconParent != null) iconParent.removeView(entry.icon); +// ViewGroup iconParent = (ViewGroup)entry.icon.getParent(); +// if (iconParent != null) iconParent.removeView(entry.icon); + refreshIcons(); return entry.notification; } StatusBarIconView addNotificationViews(IBinder key, StatusBarNotification notification) { - NotificationData list = mHaps; - ViewGroup parent = null; - final boolean isOngoing = notification.isOngoing(); - if (isOngoing) { -// parent = mOngoingItems; - } else { -// parent = mIconLayout; - } + NotificationData list = mNotns; + ViewGroup parent = mPile; // Construct the icon. final StatusBarIconView iconView = new StatusBarIconView(this, notification.pkg + "/0x" + Integer.toHexString(notification.id)); @@ -413,12 +431,27 @@ public class TabletStatusBarService extends StatusBarService { final int viewIndex = list.add(entry); if (parent != null) parent.addView(entry.row, viewIndex); // Add the icon. - final int iconIndex = 0; // XXX: sort into ongoing and regular buckets - mIconLayout.addView(iconView, iconIndex, - new LinearLayout.LayoutParams(mIconSize, mIconSize)); +// final int iconIndex = 0; // XXX: sort into ongoing and regular buckets +// mIconLayout.addView(iconView, iconIndex, +// new LinearLayout.LayoutParams(mIconSize, mIconSize)); + + refreshIcons(); + return iconView; } + private void refreshIcons() { + // XXX: need to implement a new limited linear layout class + // to avoid removing & readding everything + mIconLayout.removeAllViews(); + int N = mNotns.size(); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(mIconSize, mIconSize); + for (int i=0; i<4; i++) { + if (i>=N) break; + mIconLayout.addView(mNotns.get(N-i-1).icon, i, params); + } + } + private boolean inflateViews(NotificationData.Entry entry, ViewGroup parent) { StatusBarNotification sbn = entry.notification; RemoteViews remoteViews = sbn.notification.contentView; @@ -429,6 +462,20 @@ public class TabletStatusBarService extends StatusBarService { // create the row view LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); View row = inflater.inflate(R.layout.status_bar_latest_event, parent, false); + View vetoButton = row.findViewById(R.id.veto); + final String _pkg = sbn.pkg; + final String _tag = sbn.tag; + final int _id = sbn.id; + vetoButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + try { + mBarService.onNotificationClear(_pkg, _tag, _id); + } catch (RemoteException ex) { + // system process is dead if we're here. + } +// animateCollapse(); + } + }); // bind the click event to the content area ViewGroup content = (ViewGroup)row.findViewById(R.id.content); diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java index 25de8b0c49b82..4f11231d49788 100755 --- a/services/java/com/android/server/NotificationManagerService.java +++ b/services/java/com/android/server/NotificationManagerService.java @@ -61,6 +61,7 @@ import android.util.Log; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.widget.Toast; +import android.widget.Toast; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -280,6 +281,10 @@ class NotificationManagerService extends INotificationManager.Stub Notification.FLAG_FOREGROUND_SERVICE); } + public void onNotificationClear(String pkg, String tag, int id) { + cancelNotification(pkg, tag, id, 0, 0); // maybe add some flags? + } + public void onPanelRevealed() { synchronized (mNotificationList) { // sound diff --git a/services/java/com/android/server/StatusBarManagerService.java b/services/java/com/android/server/StatusBarManagerService.java index 4177432c9d37b..717c3098398b8 100644 --- a/services/java/com/android/server/StatusBarManagerService.java +++ b/services/java/com/android/server/StatusBarManagerService.java @@ -84,6 +84,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub void onSetDisabled(int status); void onClearAll(); void onNotificationClick(String pkg, String tag, int id); + void onNotificationClear(String pkg, String tag, int id); void onPanelRevealed(); void onNotificationError(String pkg, String tag, int id, int uid, int initialPid, String message); @@ -302,6 +303,12 @@ public class StatusBarManagerService extends IStatusBarService.Stub mNotificationCallbacks.onNotificationError(pkg, tag, id, uid, initialPid, message); } + public void onNotificationClear(String pkg, String tag, int id) { + enforceStatusBarService(); + + mNotificationCallbacks.onNotificationClear(pkg, tag, id); + } + public void onClearAllNotifications() { enforceStatusBarService();