Use the Shell app to show the bugreport notification on Wear.

b/30041885

Change-Id: I998aa1606eb12f74a407fbafd9abc11c9454fb66
diff --git a/packages/Shell/res/values/strings.xml b/packages/Shell/res/values/strings.xml
index 3d6643d..5dfac95 100644
--- a/packages/Shell/res/values/strings.xml
+++ b/packages/Shell/res/values/strings.xml
@@ -25,8 +25,8 @@
     <!-- Content notification indicating a bugreport is being updated before it can be shared, asking the user to wait [CHAR LIMIT=50] -->
     <string name="bugreport_updating_wait">Please wait\u2026</string>
 
-    <!-- Text of notification indicating that swipe left will share the captured bugreport. [CHAR LIMIT=100] -->
-    <string name="bugreport_finished_text" product="watch">Swipe left to share your bug report</string>
+    <!-- Text of notification indicating that bugreport will appear on the phone. [CHAR LIMIT=100] -->
+    <string name="bugreport_finished_text" product="watch">The bug report will appear on the phone shortly</string>
     <!-- Text of notification indicating that tapping will share the captured bugreport. [CHAR LIMIT=100] -->
     <string name="bugreport_finished_text" product="default">Tap to share your bug report</string>
     <!-- Text of notification indicating that swipe left will share the captured bugreport, but giving user the option to wait for the screenshot. [CHAR LIMIT=100] -->
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index 6bc4df7..f04df4b 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -212,6 +212,8 @@
 
     private static final Bundle sNotificationBundle = new Bundle();
 
+    private boolean mIsWatch;
+
     @Override
     public void onCreate() {
         mContext = getApplicationContext();
@@ -225,6 +227,9 @@
                 Log.w(TAG, "Could not create directory " + mScreenshotsDir);
             }
         }
+        final Configuration conf = mContext.getResources().getConfiguration();
+        mIsWatch = (conf.uiMode & Configuration.UI_MODE_TYPE_MASK) ==
+                Configuration.UI_MODE_TYPE_WATCH;
     }
 
     @Override
@@ -439,56 +444,68 @@
             return;
         }
 
-        final NumberFormat nf = NumberFormat.getPercentInstance();
-        nf.setMinimumFractionDigits(2);
-        nf.setMaximumFractionDigits(2);
-        final String percentageText = nf.format((double) info.progress / info.max);
-        final Action cancelAction = new Action.Builder(null, mContext.getString(
-                com.android.internal.R.string.cancel), newCancelIntent(mContext, info)).build();
-        final Intent infoIntent = new Intent(mContext, BugreportProgressService.class);
-        infoIntent.setAction(INTENT_BUGREPORT_INFO_LAUNCH);
-        infoIntent.putExtra(EXTRA_ID, info.id);
-        final PendingIntent infoPendingIntent =
-                PendingIntent.getService(mContext, info.id, infoIntent,
-                PendingIntent.FLAG_UPDATE_CURRENT);
-        final Action infoAction = new Action.Builder(null,
-                mContext.getString(R.string.bugreport_info_action),
-                infoPendingIntent).build();
-        final Intent screenshotIntent = new Intent(mContext, BugreportProgressService.class);
-        screenshotIntent.setAction(INTENT_BUGREPORT_SCREENSHOT);
-        screenshotIntent.putExtra(EXTRA_ID, info.id);
-        PendingIntent screenshotPendingIntent = mTakingScreenshot ? null : PendingIntent
-                .getService(mContext, info.id, screenshotIntent,
-                        PendingIntent.FLAG_UPDATE_CURRENT);
-        final Action screenshotAction = new Action.Builder(null,
-                mContext.getString(R.string.bugreport_screenshot_action),
-                screenshotPendingIntent).build();
-
-        final String title = mContext.getString(R.string.bugreport_in_progress_title, info.id);
-
-        final String name =
-                info.name != null ? info.name : mContext.getString(R.string.bugreport_unnamed);
-
-        final Notification notification = newBaseNotification(mContext)
-                .setContentTitle(title)
-                .setTicker(title)
-                .setContentText(name)
-                .setProgress(info.max, info.progress, false)
-                .setOngoing(true)
-                .setContentIntent(infoPendingIntent)
-                .setActions(infoAction, screenshotAction, cancelAction)
-                .build();
-
         if (info.finished) {
             Log.w(TAG, "Not sending progress notification because bugreport has finished already ("
                     + info + ")");
             return;
         }
+
+        final NumberFormat nf = NumberFormat.getPercentInstance();
+        nf.setMinimumFractionDigits(2);
+        nf.setMaximumFractionDigits(2);
+        final String percentageText = nf.format((double) info.progress / info.max);
+
+        String title = mContext.getString(R.string.bugreport_in_progress_title, info.id);
+
+        // TODO: Remove this workaround when notification progress is implemented on Wear.
+        if (mIsWatch) {
+            nf.setMinimumFractionDigits(0);
+            nf.setMaximumFractionDigits(0);
+            final String watchPercentageText = nf.format((double) info.progress / info.max);
+            title = title + "\n" + watchPercentageText;
+        }
+
+        final String name =
+                info.name != null ? info.name : mContext.getString(R.string.bugreport_unnamed);
+
+        final Notification.Builder builder = newBaseNotification(mContext)
+                .setContentTitle(title)
+                .setTicker(title)
+                .setContentText(name)
+                .setProgress(info.max, info.progress, false)
+                .setOngoing(true);
+
+        // Wear bugreport doesn't need the bug info dialog, screenshot and cancel action.
+        if (!mIsWatch) {
+            final Action cancelAction = new Action.Builder(null, mContext.getString(
+                    com.android.internal.R.string.cancel), newCancelIntent(mContext, info)).build();
+            final Intent infoIntent = new Intent(mContext, BugreportProgressService.class);
+            infoIntent.setAction(INTENT_BUGREPORT_INFO_LAUNCH);
+            infoIntent.putExtra(EXTRA_ID, info.id);
+            final PendingIntent infoPendingIntent =
+                    PendingIntent.getService(mContext, info.id, infoIntent,
+                    PendingIntent.FLAG_UPDATE_CURRENT);
+            final Action infoAction = new Action.Builder(null,
+                    mContext.getString(R.string.bugreport_info_action),
+                    infoPendingIntent).build();
+            final Intent screenshotIntent = new Intent(mContext, BugreportProgressService.class);
+            screenshotIntent.setAction(INTENT_BUGREPORT_SCREENSHOT);
+            screenshotIntent.putExtra(EXTRA_ID, info.id);
+            PendingIntent screenshotPendingIntent = mTakingScreenshot ? null : PendingIntent
+                    .getService(mContext, info.id, screenshotIntent,
+                            PendingIntent.FLAG_UPDATE_CURRENT);
+            final Action screenshotAction = new Action.Builder(null,
+                    mContext.getString(R.string.bugreport_screenshot_action),
+                    screenshotPendingIntent).build();
+            builder.setContentIntent(infoPendingIntent)
+                .setActions(infoAction, screenshotAction, cancelAction);
+        }
+
         if (DEBUG) {
             Log.d(TAG, "Sending 'Progress' notification for id " + info.id + " (pid " + info.pid
                     + "): " + percentageText);
         }
-        sendForegroundabledNotification(info.id, notification);
+        sendForegroundabledNotification(info.id, builder.build());
     }
 
     private void sendForegroundabledNotification(int id, Notification notification) {
@@ -854,10 +871,7 @@
         // Stop running on foreground, otherwise share notification cannot be dismissed.
         stopForegroundWhenDone(id);
 
-        final Configuration conf = mContext.getResources().getConfiguration();
-        if ((conf.uiMode & Configuration.UI_MODE_TYPE_MASK) != Configuration.UI_MODE_TYPE_WATCH) {
-            triggerLocalNotification(mContext, info);
-        }
+        triggerLocalNotification(mContext, info);
     }
 
     /**