Add text labels to intruder actions.
Change-Id: I544bed7b37c043639ee0e6a11bf757c0a191c1fc
diff --git a/api/current.txt b/api/current.txt
index bebbf36..86cf9e1 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3712,6 +3712,7 @@
method public android.app.Notification.Builder setDefaults(int);
method public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent);
method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
+ method public android.app.Notification.Builder setIntruderActionsShowText(boolean);
method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
method public android.app.Notification.Builder setLights(int, int, int);
method public android.app.Notification.Builder setNumber(int);
@@ -3725,6 +3726,7 @@
method public android.app.Notification.Builder setSound(android.net.Uri, int);
method public android.app.Notification.Builder setTicker(java.lang.CharSequence);
method public android.app.Notification.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews);
+ method public android.app.Notification.Builder setUsesIntruderAlert(boolean);
method public android.app.Notification.Builder setVibrate(long[]);
method public android.app.Notification.Builder setWhen(long);
}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 04ab407..bbb6a4e 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -918,6 +918,8 @@
private Bundle mExtras;
private int mPriority;
private ArrayList<Action> mActions = new ArrayList<Action>(3);
+ private boolean mCanHasIntruder;
+ private boolean mIntruderActionsShowText;
/**
* Constructs a new Builder with the defaults:
@@ -1313,6 +1315,38 @@
return this;
}
+ /**
+ * Specify whether this notification should pop up as an
+ * "intruder alert" (a small window that shares the screen with the
+ * current activity). This sort of notification is (as the name implies)
+ * very intrusive, so use it sparingly for notifications that require
+ * the user's attention.
+ *
+ * Notes:
+ * <ul>
+ * <li>Intruder alerts only show when the screen is on.</li>
+ * <li>Intruder alerts take precedence over fullScreenIntents.</li>
+ * </ul>
+ *
+ * @param intrude Whether to pop up an intruder alert (default false).
+ */
+ public Builder setUsesIntruderAlert(boolean intrude) {
+ mCanHasIntruder = intrude;
+ return this;
+ }
+
+ /**
+ * Control text on intruder alert action buttons. By default, action
+ * buttons in intruders do not show textual labels.
+ *
+ * @param showActionText Whether to show text labels beneath action
+ * icons (default false).
+ */
+ public Builder setIntruderActionsShowText(boolean showActionText) {
+ mIntruderActionsShowText = showActionText;
+ return this;
+ }
+
private void setFlag(int mask, boolean value) {
if (value) {
mFlags |= mask;
@@ -1394,7 +1428,7 @@
}
}
- private RemoteViews makeIntruderView() {
+ private RemoteViews makeIntruderView(boolean showLabels) {
RemoteViews intruderView = new RemoteViews(mContext.getPackageName(),
R.layout.notification_intruder_content);
if (mLargeIcon != null) {
@@ -1422,7 +1456,8 @@
final int buttonId = BUTTONS[i];
intruderView.setViewVisibility(buttonId, View.VISIBLE);
- intruderView.setImageViewResource(buttonId, action.icon);
+ intruderView.setTextViewText(buttonId, showLabels ? action.title : null);
+ intruderView.setTextViewCompoundDrawables(buttonId, 0, action.icon, 0, 0);
intruderView.setContentDescription(buttonId, action.title);
intruderView.setOnClickPendingIntent(buttonId, action.actionIntent);
}
@@ -1457,7 +1492,9 @@
n.ledOffMS = mLedOffMs;
n.defaults = mDefaults;
n.flags = mFlags;
- n.intruderView = makeIntruderView();
+ if (mCanHasIntruder) {
+ n.intruderView = makeIntruderView(mIntruderActionsShowText);
+ }
if (mLedOnMs != 0 && mLedOffMs != 0) {
n.flags |= FLAG_SHOW_LIGHTS;
}
diff --git a/core/res/res/layout/notification_intruder_content.xml b/core/res/res/layout/notification_intruder_content.xml
index 61be5f5..7f37032 100644
--- a/core/res/res/layout/notification_intruder_content.xml
+++ b/core/res/res/layout/notification_intruder_content.xml
@@ -2,7 +2,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:background="#FF333333"
android:padding="4dp"
>
<ImageView android:id="@+id/icon"
@@ -39,29 +38,35 @@
<LinearLayout
android:id="@+id/actions"
android:layout_width="match_parent"
- android:layout_height="40dp"
+ android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:orientation="horizontal"
android:visibility="gone"
>
- <ImageView
+ <Button
+ style="?android:attr/buttonBarButtonStyle"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
android:id="@+id/action0"
android:layout_width="0dp"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_weight="1"
android:visibility="gone"
/>
- <ImageView
+ <Button
+ style="?android:attr/buttonBarButtonStyle"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
android:id="@+id/action1"
android:layout_width="0dp"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_weight="1"
android:visibility="gone"
/>
- <ImageView
+ <Button
+ style="?android:attr/buttonBarButtonStyle"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
android:id="@+id/action2"
android:layout_width="0dp"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_weight="1"
android:visibility="gone"
/>