summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk2
-rw-r--r--src/com/android/mail/compose/ComposeActivity.java22
-rw-r--r--src/com/android/mail/utils/NotificationActionUtils.java9
-rw-r--r--src/com/android/mail/utils/NotificationUtils.java60
4 files changed, 59 insertions, 34 deletions
diff --git a/Android.mk b/Android.mk
index 0f39dadf5..bc81af2a9 100644
--- a/Android.mk
+++ b/Android.mk
@@ -44,7 +44,7 @@ LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-gridlayout
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v13
LOCAL_STATIC_JAVA_LIBRARIES += android-opt-datetimepicker
# STOPSHIP: Open source the wearable support jar
-LOCAL_STATIC_JAVA_LIBRARIES += prebuilt-wearable-support-1133727
+LOCAL_STATIC_JAVA_LIBRARIES += prebuilt-wearable-support
LOCAL_SDK_VERSION := current
diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java
index b31f37ce5..a120202a1 100644
--- a/src/com/android/mail/compose/ComposeActivity.java
+++ b/src/com/android/mail/compose/ComposeActivity.java
@@ -47,6 +47,7 @@ import android.os.HandlerThread;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
import android.provider.BaseColumns;
+import android.support.wearable.notifications.RemoteInput;
import android.text.Editable;
import android.text.Html;
import android.text.SpannableString;
@@ -55,6 +56,7 @@ import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.util.Rfc822Token;
import android.text.util.Rfc822Tokenizer;
+import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -106,6 +108,7 @@ import com.android.mail.utils.ContentProviderTask;
import com.android.mail.utils.LogTag;
import com.android.mail.utils.LogUtils;
import com.android.mail.utils.NotificationActionUtils;
+import com.android.mail.utils.NotificationUtils;
import com.android.mail.utils.Utils;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
@@ -185,8 +188,6 @@ public class ComposeActivity extends Activity implements OnClickListener, OnNavi
static final String[] ALL_EXTRAS = { EXTRA_SUBJECT, EXTRA_BODY, EXTRA_TO, EXTRA_CC, EXTRA_BCC,
EXTRA_QUOTED_TEXT };
- private static final String WEAR_EXTRA = "com.google.android.wearable.extras";
-
private static SendOrSaveCallback sTestSendOrSaveCallback = null;
// Map containing information about requests to create new messages, and the id of the
// messages that were the result of those requests.
@@ -534,19 +535,20 @@ public class ComposeActivity extends Activity implements OnClickListener, OnNavi
mComposeMode = action;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- // TODO: Use the wrapper api to get the clip data.
- ClipData clipData = intent.getClipData();
- if (clipData != null
- && WEAR_EXTRA.equals(clipData.getDescription().getLabel())) {
- Bundle extras = clipData.getItemAt(0).getIntent().getExtras();
- if (extras != null) {
- String wearReply =
- extras.getString(NotificationActionUtils.WEAR_REPLY_INPUT);
+ Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+ if (remoteInput != null) {
+ String wearReply = remoteInput.getString(
+ NotificationActionUtils.WEAR_REPLY_INPUT);
+ if (!TextUtils.isEmpty(wearReply)) {
createWearReplyTask(this, mRefMessageUri, UIProvider.MESSAGE_PROJECTION,
mComposeMode, wearReply).execute();
finish();
return;
+ } else {
+ LogUtils.w(LOG_TAG, "remote input string is null");
}
+ } else {
+ LogUtils.d(LOG_TAG, "No remote input");
}
}
diff --git a/src/com/android/mail/utils/NotificationActionUtils.java b/src/com/android/mail/utils/NotificationActionUtils.java
index baf3b8a9f..089b9f57b 100644
--- a/src/com/android/mail/utils/NotificationActionUtils.java
+++ b/src/com/android/mail/utils/NotificationActionUtils.java
@@ -31,7 +31,8 @@ import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.support.wearable.notifications.RemoteInput;
-import android.support.wearable.notifications.WearableNotifications;
+import android.support.wearable.notifications.WearableAction;
+import android.support.wearable.notifications.WearableNotificationOptions;
import android.widget.RemoteViews;
import com.android.mail.MailIntentService;
@@ -198,7 +199,7 @@ public class NotificationActionUtils {
*/
public static void addNotificationActions(final Context context,
final Intent notificationIntent, final NotificationCompat.Builder notification,
- WearableNotifications.Builder wearableNotification, final Account account,
+ WearableNotificationOptions.Builder wearableNotification, final Account account,
final Conversation conversation, final Message message,
final Folder folder, final int notificationId, final long when,
final Set<String> notificationActions) {
@@ -217,8 +218,8 @@ public class NotificationActionUtils {
// Always add all actions to both standard and wearable notifications.
notification.addAction(actionIconResId, title, pendingIntent);
- WearableNotifications.Action.Builder wearableActionBuilder =
- new WearableNotifications.Action.Builder(actionIconResId, title, pendingIntent);
+ WearableAction.Builder wearableActionBuilder = new WearableAction.Builder(
+ actionIconResId, title, pendingIntent);
if (notificationAction == NotificationActionType.REPLY
|| notificationAction == NotificationActionType.REPLY_ALL) {
wearableActionBuilder.addRemoteInput(
diff --git a/src/com/android/mail/utils/NotificationUtils.java b/src/com/android/mail/utils/NotificationUtils.java
index 931f61cbf..04669f94e 100644
--- a/src/com/android/mail/utils/NotificationUtils.java
+++ b/src/com/android/mail/utils/NotificationUtils.java
@@ -28,14 +28,14 @@ import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
-import android.preview.support.v4.app.NotificationManagerCompat;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.Contacts.Photo;
import android.support.v4.app.NotificationCompat;
import android.support.v4.text.BidiFormatter;
import android.support.v4.util.ArrayMap;
-import android.support.wearable.notifications.WearableNotifications;
+import android.support.wearable.app.NotificationManagerCompat;
+import android.support.wearable.notifications.WearableNotificationOptions;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
@@ -574,10 +574,10 @@ public class NotificationUtils {
PendingIntent clickIntent;
NotificationCompat.Builder notification = new NotificationCompat.Builder(context);
- WearableNotifications.Builder wearableNotification =
- new WearableNotifications.Builder(notification);
- Map<Integer, WearableNotifications.Builder> msgNotifications =
- new ArrayMap<Integer, WearableNotifications.Builder>();
+ WearableNotificationOptions.Builder wearableNotification =
+ new WearableNotificationOptions.Builder();
+ Map<Integer, NotificationBuilders> msgNotifications =
+ new ArrayMap<Integer, NotificationBuilders>();
notification.setSmallIcon(R.drawable.stat_notify_email);
notification.setTicker(account.getDisplayName());
@@ -733,7 +733,8 @@ public class NotificationUtils {
notification.setTicker(null);
}
- nm.notify(notificationId, wearableNotification.build());
+ wearableNotification.build().applyTo(notification);
+ nm.notify(notificationId, notification.build());
if (prevChildNotifications != null) {
Set<Integer> currentNotificationIds = msgNotifications.keySet();
@@ -746,9 +747,10 @@ public class NotificationUtils {
}
}
- for (Map.Entry<Integer, WearableNotifications.Builder> entry
- : msgNotifications.entrySet()) {
- nm.notify(entry.getKey(), entry.getValue().build());
+ for (Map.Entry<Integer, NotificationBuilders> entry : msgNotifications.entrySet()) {
+ NotificationBuilders builders = entry.getValue();
+ builders.wearableNotifBuilder.build().applyTo(builders.notifBuilder);
+ nm.notify(entry.getKey(), builders.notifBuilder.build());
LogUtils.d(LOG_TAG, "notifying child notification %s", entry.getKey());
}
@@ -843,8 +845,8 @@ public class NotificationUtils {
private static void configureLatestEventInfoFromConversation(final Context context,
final Account account, final FolderPreferences folderPreferences,
final NotificationCompat.Builder notification,
- final WearableNotifications.Builder summaryWearNotif,
- final Map<Integer, WearableNotifications.Builder> msgNotifications,
+ final WearableNotificationOptions.Builder summaryWearNotif,
+ final Map<Integer, NotificationBuilders> msgNotifications,
final int summaryNotificationId, final Cursor conversationCursor,
final PendingIntent clickIntent, final Intent notificationIntent,
final int unreadCount, final int unseenCount,
@@ -894,8 +896,7 @@ public class NotificationUtils {
// Group by account.
String notificationGroupKey =
account.uri.toString() + "/" + folder.folderUri.fullUri;
- summaryWearNotif.setGroup(notificationGroupKey,
- WearableNotifications.GROUP_ORDER_SUMMARY);
+ summaryWearNotif.setGroup(notificationGroupKey).setGroupSummary(true);
int numDigestItems = 0;
do {
@@ -962,9 +963,13 @@ public class NotificationUtils {
childNotificationIntent);
childNotif.setContentIntent(childClickIntent);
- WearableNotifications.Builder childWearNotif =
- new WearableNotifications.Builder(childNotif).setGroup(
- notificationGroupKey, numDigestItems);
+ // TODO: Use a stable sort key if possible, e.g. message post time
+ // + msgid hash
+ String groupSortKey = String.format("%010d", numDigestItems);
+ WearableNotificationOptions.Builder childWearNotif =
+ new WearableNotificationOptions.Builder()
+ .setGroup(notificationGroupKey)
+ .setSortKey(groupSortKey);
int childNotificationId = getNotificationId(summaryNotificationId,
conversation.hashCode());
@@ -973,7 +978,8 @@ public class NotificationUtils {
notificationIntent, folder, when, res,
notificationAccountDisplayName, notificationAccountEmail,
isInbox, notificationLabelName, childNotificationId);
- msgNotifications.put(childNotificationId, childWearNotif);
+ msgNotifications.put(childNotificationId,
+ NotificationBuilders.of(childNotif, childWearNotif));
} finally {
if (messageCursor != null) {
messageCursor.close();
@@ -1029,7 +1035,7 @@ public class NotificationUtils {
*/
private static String configureNotifForOneConversation(Context context, Account account,
FolderPreferences folderPreferences, NotificationCompat.Builder notification,
- WearableNotifications.Builder summaryWearNotif, Cursor conversationCursor,
+ WearableNotificationOptions.Builder summaryWearNotif, Cursor conversationCursor,
Intent notificationIntent, Folder folder, long when, Resources res,
String notificationAccountDisplayName, String notificationAccountEmail, boolean isInbox,
String notificationLabelName, int notificationId) {
@@ -1756,4 +1762,20 @@ public class NotificationUtils {
accountPreferences.clearDefaultInboxNotificationsEnabled();
}
}
+
+ private static class NotificationBuilders {
+ public final NotificationCompat.Builder notifBuilder;
+ public final WearableNotificationOptions.Builder wearableNotifBuilder;
+
+ private NotificationBuilders(NotificationCompat.Builder notifBuilder,
+ WearableNotificationOptions.Builder wearableNotifBuilder) {
+ this.notifBuilder = notifBuilder;
+ this.wearableNotifBuilder = wearableNotifBuilder;
+ }
+
+ public static NotificationBuilders of(NotificationCompat.Builder notifBuilder,
+ WearableNotificationOptions.Builder wearableNotifBuilder) {
+ return new NotificationBuilders(notifBuilder, wearableNotifBuilder);
+ }
+ }
}