summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@android.com>2012-05-15 16:52:52 -0400
committerDaniel Sandler <dsandler@android.com>2012-05-16 01:27:54 -0400
commit8680bf865a08f876fc3986c50a193e3186ff6f02 (patch)
tree2af2ddab13e1b60f624f227d3789b54aa11b19dd
parent1d366274bac3153123bd37132ab87e3652e7feab (diff)
downloadframeworks_base-8680bf865a08f876fc3986c50a193e3186ff6f02.zip
frameworks_base-8680bf865a08f876fc3986c50a193e3186ff6f02.tar.gz
frameworks_base-8680bf865a08f876fc3986c50a193e3186ff6f02.tar.bz2
Action button improvements:
- Horizontal layout - At most 2 are shown - Tombstones are now shown (if the intent is null, the button is disabled; use it for quick feedback of an action's effect) Bug: 6418617 (tombstones) Bug: 6482237 (action separators) Change-Id: Ie0c613006227bbfe1c0ec6eab1cda4f3782a05f2
-rw-r--r--core/java/android/app/Notification.java20
-rw-r--r--core/res/res/layout/notification_action.xml3
-rw-r--r--core/res/res/layout/notification_action_list.xml28
-rw-r--r--core/res/res/layout/notification_action_tombstone.xml8
-rw-r--r--core/res/res/layout/notification_template_big_base.xml9
-rw-r--r--core/res/res/layout/notification_template_big_text.xml9
-rw-r--r--core/res/res/layout/notification_template_inbox.xml9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java37
8 files changed, 71 insertions, 52 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 0c47069..6d3aa98 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -907,6 +907,8 @@ public class Notification implements Parcelable
* </pre>
*/
public static class Builder {
+ private static final int MAX_ACTION_BUTTONS = 2;
+
private Context mContext;
private long mWhen;
@@ -938,7 +940,7 @@ public class Notification implements Parcelable
private ArrayList<String> mKindList = new ArrayList<String>(1);
private Bundle mExtras;
private int mPriority;
- private ArrayList<Action> mActions = new ArrayList<Action>(3);
+ private ArrayList<Action> mActions = new ArrayList<Action>(MAX_ACTION_BUTTONS);
private boolean mUseChronometer;
private Style mStyle;
@@ -1460,7 +1462,7 @@ public class Notification implements Parcelable
if (N > 0) {
// Log.d("Notification", "has actions: " + mContentText);
big.setViewVisibility(R.id.actions, View.VISIBLE);
- if (N>3) N=3;
+ if (N>MAX_ACTION_BUTTONS) N=MAX_ACTION_BUTTONS;
big.removeAllViews(R.id.actions);
for (int i=0; i<N; i++) {
final RemoteViews button = generateActionButton(mActions.get(i));
@@ -1500,18 +1502,14 @@ public class Notification implements Parcelable
}
private RemoteViews generateActionButton(Action action) {
- RemoteViews button = new RemoteViews(mContext.getPackageName(), R.layout.notification_action);
+ final boolean tombstone = (action.actionIntent == null);
+ RemoteViews button = new RemoteViews(mContext.getPackageName(),
+ tombstone ? R.layout.notification_action_tombstone
+ : R.layout.notification_action);
button.setTextViewCompoundDrawables(R.id.action0, action.icon, 0, 0, 0);
button.setTextViewText(R.id.action0, action.title);
- if (action.actionIntent != null) {
+ if (!tombstone) {
button.setOnClickPendingIntent(R.id.action0, action.actionIntent);
- //button.setBoolean(R.id.action0, "setEnabled", true);
- button.setFloat(R.id.button0, "setAlpha", 1.0f);
- button.setBoolean(R.id.button0, "setClickable", true);
- } else {
- //button.setBoolean(R.id.action0, "setEnabled", false);
- button.setFloat(R.id.button0, "setAlpha", 0.5f);
- button.setBoolean(R.id.button0, "setClickable", false);
}
button.setContentDescription(R.id.action0, action.title);
return button;
diff --git a/core/res/res/layout/notification_action.xml b/core/res/res/layout/notification_action.xml
index 28812a9..21f2474 100644
--- a/core/res/res/layout/notification_action.xml
+++ b/core/res/res/layout/notification_action.xml
@@ -17,8 +17,9 @@
<Button xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:attr/borderlessButtonStyle"
android:id="@+id/action0"
- android:layout_width="match_parent"
+ android:layout_width="0dp"
android:layout_height="48dp"
+ android:layout_weight="1"
android:gravity="left|center_vertical"
android:drawablePadding="8dp"
android:paddingLeft="8dp"
diff --git a/core/res/res/layout/notification_action_list.xml b/core/res/res/layout/notification_action_list.xml
new file mode 100644
index 0000000..fa0a8c8
--- /dev/null
+++ b/core/res/res/layout/notification_action_list.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/actions"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ android:showDividers="middle"
+ android:divider="?android:attr/listDivider"
+ >
+ <!-- actions will be added here -->
+</LinearLayout>
diff --git a/core/res/res/layout/notification_action_tombstone.xml b/core/res/res/layout/notification_action_tombstone.xml
index e61e15f..6c59ded 100644
--- a/core/res/res/layout/notification_action_tombstone.xml
+++ b/core/res/res/layout/notification_action_tombstone.xml
@@ -15,12 +15,16 @@
-->
<Button xmlns:android="http://schemas.android.com/apk/res/android"
+ style="?android:attr/borderlessButtonStyle"
android:id="@+id/action0"
- android:layout_width="match_parent"
+ android:layout_width="0dp"
android:layout_height="48dp"
+ android:layout_weight="1"
android:gravity="left|center_vertical"
android:drawablePadding="8dp"
android:paddingLeft="8dp"
- android:textColor="#666"
+ android:textColor="#ccc"
android:textSize="14dp"
+ android:alpha="0.5"
+ android:enabled="false"
/>
diff --git a/core/res/res/layout/notification_template_big_base.xml b/core/res/res/layout/notification_template_big_base.xml
index 378161c..d50b792 100644
--- a/core/res/res/layout/notification_template_big_base.xml
+++ b/core/res/res/layout/notification_template_big_base.xml
@@ -143,14 +143,11 @@
style="?android:attr/progressBarStyleHorizontal"
/>
</LinearLayout>
- <LinearLayout
+ <include
+ layout="@layout/notification_action_list"
android:id="@+id/actions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
- android:visibility="gone"
- >
- <!-- actions will be added here -->
- </LinearLayout>
+ />
</LinearLayout>
</FrameLayout>
diff --git a/core/res/res/layout/notification_template_big_text.xml b/core/res/res/layout/notification_template_big_text.xml
index 77a5f11..210bc13 100644
--- a/core/res/res/layout/notification_template_big_text.xml
+++ b/core/res/res/layout/notification_template_big_text.xml
@@ -105,16 +105,13 @@
android:layout_weight="1"
/>
</LinearLayout>
- <LinearLayout
- android:id="@+id/actions"
+ <include
+ layout="@layout/notification_action_list"
android:layout_width="match_parent"
android:layout_height="0dp"
- android:orientation="vertical"
android:visibility="gone"
android:layout_weight="1"
- >
- <!-- actions will be added here -->
- </LinearLayout>
+ />
<TextView android:id="@+id/overflow_title"
android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
android:layout_width="match_parent"
diff --git a/core/res/res/layout/notification_template_inbox.xml b/core/res/res/layout/notification_template_inbox.xml
index 05ec1d8..bfa2e02 100644
--- a/core/res/res/layout/notification_template_inbox.xml
+++ b/core/res/res/layout/notification_template_inbox.xml
@@ -142,16 +142,13 @@
android:visibility="gone"
android:layout_weight="1"
/>
- <LinearLayout
+ <include
+ layout="@layout/notification_action_list"
android:id="@+id/actions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
android:layout_weight="0"
- android:visibility="gone"
- >
- <!-- actions will be added here -->
- </LinearLayout>
+ />
<TextView android:id="@+id/overflow_title"
android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
android:layout_width="match_parent"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 4b223dd..ac92e1a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -531,30 +531,27 @@ public abstract class BaseStatusBar extends SystemUI implements
}
}
catch (RuntimeException e) {
- exception = e;
- }
- if (expandedOneU == null && expandedLarge == null) {
final String ident = sbn.pkg + "/0x" + Integer.toHexString(sbn.id);
- Slog.e(TAG, "couldn't inflate view for notification " + ident, exception);
+ Slog.e(TAG, "couldn't inflate view for notification " + ident, e);
return false;
- } else {
- if (expandedOneU != null) {
- SizeAdaptiveLayout.LayoutParams params =
- new SizeAdaptiveLayout.LayoutParams(expandedOneU.getLayoutParams());
- params.minHeight = minHeight;
- params.maxHeight = minHeight;
- adaptive.addView(expandedOneU, params);
- }
- if (expandedLarge != null) {
- SizeAdaptiveLayout.LayoutParams params =
- new SizeAdaptiveLayout.LayoutParams(expandedLarge.getLayoutParams());
- params.minHeight = minHeight+1;
- params.maxHeight = maxHeight;
- adaptive.addView(expandedLarge, params);
- }
- row.setDrawingCacheEnabled(true);
}
+ if (expandedOneU != null) {
+ SizeAdaptiveLayout.LayoutParams params =
+ new SizeAdaptiveLayout.LayoutParams(expandedOneU.getLayoutParams());
+ params.minHeight = minHeight;
+ params.maxHeight = minHeight;
+ adaptive.addView(expandedOneU, params);
+ }
+ if (expandedLarge != null) {
+ SizeAdaptiveLayout.LayoutParams params =
+ new SizeAdaptiveLayout.LayoutParams(expandedLarge.getLayoutParams());
+ params.minHeight = minHeight+1;
+ params.maxHeight = maxHeight;
+ adaptive.addView(expandedLarge, params);
+ }
+ row.setDrawingCacheEnabled(true);
+
applyLegacyRowBackground(sbn, content);
row.setTag(R.id.expandable_tag, Boolean.valueOf(large != null));