diff options
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) { } } |