summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds/am/src/com/android/commands/am/Am.java18
-rw-r--r--core/java/android/app/ActivityManagerNative.java6
-rw-r--r--core/java/android/app/IActivityManager.java2
-rw-r--r--packages/Shell/src/com/android/shell/BugreportProgressService.java2
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java5
-rw-r--r--services/core/java/com/android/server/policy/GlobalActions.java3
6 files changed, 26 insertions, 10 deletions
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index 2ad63b53efc6..4f7a1095cfbe 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -142,6 +142,7 @@ public class Am extends BaseCommand {
" am clear-debug-app\n" +
" am set-watch-heap <PROCESS> <MEM-LIMIT>\n" +
" am clear-watch-heap\n" +
+ " am bug-report [--progress]\n" +
" am monitor [--gdb <port>]\n" +
" am hang [--allow-restart]\n" +
" am restart\n" +
@@ -258,8 +259,9 @@ public class Am extends BaseCommand {
"\n" +
"am clear-watch-heap: clear the previously set-watch-heap.\n" +
"\n" +
- "am bug-report: request bug report generation; will launch UI\n" +
- " when done to select where it should be delivered.\n" +
+ "am bug-report: request bug report generation; will launch a notification\n" +
+ " when done to select where it should be delivered. Options are: \n" +
+ " --progress: will launch a notification right away to show its progress.\n" +
"\n" +
"am monitor: start monitoring for crashes or ANRs.\n" +
" --gdb: start gdbserv on the given port at crash/ANR\n" +
@@ -1072,7 +1074,17 @@ public class Am extends BaseCommand {
}
private void runBugReport() throws Exception {
- mAm.requestBugReport();
+ String opt;
+ boolean progress = false;
+ while ((opt=nextOption()) != null) {
+ if (opt.equals("--progress")) {
+ progress = true;
+ } else {
+ System.err.println("Error: Unknown option: " + opt);
+ return;
+ }
+ }
+ mAm.requestBugReport(progress);
System.out.println("Your lovely bug report is being created; please be patient.");
}
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index c05d5e8d8295..f36a165178ee 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -2228,7 +2228,8 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
case REQUEST_BUG_REPORT_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
- requestBugReport();
+ boolean progress = data.readInt() != 0;
+ requestBugReport(progress);
reply.writeNoException();
return true;
}
@@ -5600,10 +5601,11 @@ class ActivityManagerProxy implements IActivityManager
reply.recycle();
}
- public void requestBugReport() throws RemoteException {
+ public void requestBugReport(boolean progress) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeInt(progress ? 1 : 0);
mRemote.transact(REQUEST_BUG_REPORT_TRANSACTION, data, reply, 0);
reply.readException();
data.recycle();
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 38c795797bf8..50e20f4acb66 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -437,7 +437,7 @@ public interface IActivityManager extends IInterface {
public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException;
public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException;
- public void requestBugReport() throws RemoteException;
+ public void requestBugReport(boolean progress) throws RemoteException;
public long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason)
throws RemoteException;
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index 79d4f1751302..78e373bd22f0 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -123,7 +123,7 @@ public class BugreportProgressService extends Service {
/** System property (and value) used for stop dumpstate. */
private static final String CTL_STOP = "ctl.stop";
- private static final String BUGREPORT_SERVICE = "bugreport";
+ private static final String BUGREPORT_SERVICE = "bugreportplus";
/** Managed dumpstate processes (keyed by pid) */
private final SparseArray<BugreportInfo> mProcesses = new SparseArray<>();
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index b769d39b8e53..6e897b13a193 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -11224,9 +11224,10 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
- public void requestBugReport() {
+ public void requestBugReport(boolean progress) {
+ final String service = progress ? "bugreportplus" : "bugreport";
enforceCallingPermission(android.Manifest.permission.DUMP, "requestBugReport");
- SystemProperties.set("ctl.start", "bugreport");
+ SystemProperties.set("ctl.start", service);
}
public static long getInputDispatchingTimeoutLocked(ActivityRecord r) {
diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java
index d160221f5cc4..c8523c908fed 100644
--- a/services/core/java/com/android/server/policy/GlobalActions.java
+++ b/services/core/java/com/android/server/policy/GlobalActions.java
@@ -390,9 +390,10 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
// screenshot.
mHandler.postDelayed(new Runnable() {
@Override public void run() {
+ // TODO: select 'progress' flag according to menu choice
try {
ActivityManagerNative.getDefault()
- .requestBugReport();
+ .requestBugReport(true);
} catch (RemoteException e) {
}
}