Merge "Support custom path when saving bugreports." into jb-mr1-dev
diff --git a/bugmailer/bugmailer.sh b/bugmailer/bugmailer.sh
index 93d1c8a..225b18d 100755
--- a/bugmailer/bugmailer.sh
+++ b/bugmailer/bugmailer.sh
@@ -1,5 +1,7 @@
 #!/system/bin/sh
 
+# TODO: restructure this to keep bugreports entirely on internal storage
+
 # Do not allow bugreports on user builds unless USB debugging
 # is enabled.
 if [ "x$(getprop ro.build.type)" = "xuser" -a \
@@ -7,29 +9,44 @@
   exit 0
 fi
 
-timestamp=`date +'%Y-%m-%d-%H-%M-%S'`
-storagePath="$EXTERNAL_STORAGE/bugreports"
-bugreport=$storagePath/bugreport-$timestamp
-screenshotPath="$EXTERNAL_STORAGE/Pictures/Screenshots"
-screenshot=$screenshotPath/Screenshot_$timestamp.png
-
-# check screen shot folder
-if [ ! -e $screenshotPath ]; then
-  mkdir $screenshotPath
+# Use bugreport-specific paths if defined
+if [ -n "$BUGREPORT_WRITE_PATH" ]; then
+  writePath="$BUGREPORT_WRITE_PATH"
+else
+  writePath="$EXTERNAL_STORAGE"
 fi
+if [ -n "$BUGREPORT_READ_PATH" ]; then
+  readPath="$BUGREPORT_READ_PATH"
+else
+  readPath="$EXTERNAL_STORAGE"
+fi
+
+tmpPath="/data/local/tmp"
+bugreportPath="bugreports"
+screenshotPath="Pictures/Screenshots"
+
+# Create directories if needed
+if [ ! -e "$writePath/$bugreportPath" ]; then
+  mkdir "$writePath/$bugreportPath"
+fi
+if [ ! -e "$writePath/$screenshotPath" ]; then
+  mkdir "$writePath/$screenshotPath"
+fi
+
+timestamp=`date +'%Y-%m-%d-%H-%M-%S'`
 
 # take screen shot
 # we run this as a bg job in case screencap is stuck
-/system/bin/screencap -p $screenshot &
+/system/bin/screencap -p "$writePath/$screenshotPath/Screenshot_$timestamp.png" &
 
 # run bugreport
-/system/bin/dumpstate -o $bugreport $@
+/system/bin/dumpstate -o "$tmpPath/bugreport-$timestamp" $@
 
-
-# make files readable
-chown root.sdcard_rw $bugreport.txt
-chown root.sdcard_rw $screenshot
+# copy finished bugreport into place for sending
+cp "$tmpPath/bugreport-$timestamp.txt" "$writePath/$bugreportPath/bugreport-$timestamp.txt"
+# clean up any remaining files
+rm $tmpPath/bugreport*
 
 # invoke send_bug to look up email accounts and fire intents
 # make it convenient to send bugreport to oneself
-/system/bin/send_bug $bugreport.txt $screenshot
+/system/bin/send_bug "$readPath/$bugreportPath/bugreport-$timestamp.txt" "$readPath/$screenshotPath/Screenshot_$timestamp.png"
diff --git a/bugmailer/src/com/android/commands/sendbug/SendBug.java b/bugmailer/src/com/android/commands/sendbug/SendBug.java
index 1b8d669..f6d0db7 100644
--- a/bugmailer/src/com/android/commands/sendbug/SendBug.java
+++ b/bugmailer/src/com/android/commands/sendbug/SendBug.java
@@ -58,32 +58,26 @@
         File screenShot = null;
         if (screenShotPath != null) {
             screenShot = new File(screenShotPath);
-            if (!screenShot.exists()) {
-              // screen shot probably failed
-              screenShot = null;
-            }
         }
-        if (bugreport.exists()) {
-            final Uri bugreportUri = Uri.fromFile(bugreport);
-            // todo (aalbert): investigate adding a screenshot to BugReporter
-            Intent intent = tryBugReporter(bugreportUri);
-            if (intent == null) {
-                final Uri screenshotUri = screenShot != null
-                        ? Uri.fromFile(screenShot) : null;
-                intent = getSendMailIntent(bugreportUri, screenshotUri);
+        final Uri bugreportUri = Uri.fromFile(bugreport);
+        // todo (aalbert): investigate adding a screenshot to BugReporter
+        Intent intent = tryBugReporter(bugreportUri);
+        if (intent == null) {
+            final Uri screenshotUri = screenShot != null
+                    ? Uri.fromFile(screenShot) : null;
+            intent = getSendMailIntent(bugreportUri, screenshotUri);
+        }
+        if (intent != null) {
+            final IActivityManager mAm = ActivityManagerNative.getDefault();
+            try {
+                mAm.startActivity(null, intent, intent.getType(), null, null, 0, 0,
+                        null, null, null);
+            } catch (RemoteException e) {
+                // ignore
             }
-            if (intent != null) {
-                final IActivityManager mAm = ActivityManagerNative.getDefault();
-                try {
-                    mAm.startActivity(null, intent, intent.getType(), null, null, 0, 0,
-                            null, null, null);
-                } catch (RemoteException e) {
-                    // ignore
-                }
-            } else {
-                Log.w(LOG_TAG, "Cannot find account to send bugreport, local path: "
-                        + bugreportPath);
-            }
+        } else {
+            Log.w(LOG_TAG, "Cannot find account to send bugreport, local path: "
+                    + bugreportPath);
         }
     }