Loading core/java/android/app/ActivityManagerNative.java +27 −0 Original line number Diff line number Diff line Loading @@ -1772,6 +1772,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface( data.readStrongBinder()); registerUserSwitchObserver(observer); reply.writeNoException(); return true; } Loading @@ -1780,12 +1781,24 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface( data.readStrongBinder()); unregisterUserSwitchObserver(observer); reply.writeNoException(); return true; } case REQUEST_BUG_REPORT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); requestBugReport(); reply.writeNoException(); return true; } case INPUT_DISPATCHING_TIMED_OUT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); int pid = data.readInt(); boolean aboveSystem = data.readInt() != 0; long res = inputDispatchingTimedOut(pid, aboveSystem); reply.writeNoException(); reply.writeLong(res); return true; } Loading Loading @@ -4082,5 +4095,19 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public long inputDispatchingTimedOut(int pid, boolean aboveSystem) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(pid); data.writeInt(aboveSystem ? 1 : 0); mRemote.transact(INPUT_DISPATCHING_TIMED_OUT_TRANSACTION, data, reply, 0); reply.readException(); long res = reply.readInt(); data.recycle(); reply.recycle(); return res; } private IBinder mRemote; } core/java/android/app/IActivityManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -363,6 +363,8 @@ public interface IActivityManager extends IInterface { public void requestBugReport() throws RemoteException; public long inputDispatchingTimedOut(int pid, boolean aboveSystem) throws RemoteException; /* * Private non-Binder interfaces */ Loading Loading @@ -616,4 +618,5 @@ public interface IActivityManager extends IInterface { int UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+155; int GET_RUNNING_USER_IDS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+156; int REQUEST_BUG_REPORT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+157; int INPUT_DISPATCHING_TIMED_OUT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+158; } policy/src/com/android/internal/policy/impl/GlobalActions.java +3 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,9 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac mDialog = createDialog(); prepareDialog(); WindowManager.LayoutParams attrs = mDialog.getWindow().getAttributes(); attrs.setTitle("GlobalActions"); mDialog.getWindow().setAttributes(attrs); mDialog.show(); mDialog.getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND); } Loading services/java/com/android/server/am/ActiveServices.java +1 −1 Original line number Diff line number Diff line Loading @@ -1850,7 +1850,7 @@ public class ActiveServices { } if (anrMessage != null) { mAm.appNotResponding(proc, null, null, anrMessage); mAm.appNotResponding(proc, null, null, false, anrMessage); } } Loading services/java/com/android/server/am/ActivityManagerService.java +49 −2 Original line number Diff line number Diff line Loading @@ -970,7 +970,8 @@ public final class ActivityManagerService extends ActivityManagerNative if (mShowDialogs) { Dialog d = new AppNotRespondingDialog(ActivityManagerService.this, mContext, proc, (ActivityRecord)data.get("activity")); mContext, proc, (ActivityRecord)data.get("activity"), msg.arg1 != 0); d.show(); proc.anrDialog = d; } else { Loading Loading @@ -3247,7 +3248,7 @@ public final class ActivityManagerService extends ActivityManagerNative } final void appNotResponding(ProcessRecord app, ActivityRecord activity, ActivityRecord parent, final String annotation) { ActivityRecord parent, boolean aboveSystem, final String annotation) { ArrayList<Integer> firstPids = new ArrayList<Integer>(5); SparseArray<Boolean> lastPids = new SparseArray<Boolean>(20); Loading Loading @@ -3388,6 +3389,7 @@ public final class ActivityManagerService extends ActivityManagerNative HashMap map = new HashMap(); msg.what = SHOW_NOT_RESPONDING_MSG; msg.obj = map; msg.arg1 = aboveSystem ? 1 : 0; map.put("app", app); if (activity != null) { map.put("activity", activity); Loading Loading @@ -7340,6 +7342,51 @@ public final class ActivityManagerService extends ActivityManagerNative SystemProperties.set("ctl.start", "bugreport"); } public long inputDispatchingTimedOut(int pid, boolean aboveSystem) { if (checkCallingPermission(android.Manifest.permission.FILTER_EVENTS) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires permission " + android.Manifest.permission.FILTER_EVENTS); } ProcessRecord proc; // TODO: Unify this code with ActivityRecord.keyDispatchingTimedOut(). synchronized (this) { synchronized (mPidsSelfLocked) { proc = mPidsSelfLocked.get(pid); } if (proc != null) { if (proc.debugging) { return -1; } if (mDidDexOpt) { // Give more time since we were dexopting. mDidDexOpt = false; return -1; } if (proc.instrumentationClass != null) { Bundle info = new Bundle(); info.putString("shortMsg", "keyDispatchingTimedOut"); info.putString("longMsg", "Timed out while dispatching key event"); finishInstrumentationLocked(proc, Activity.RESULT_CANCELED, info); proc = null; } } } if (proc != null) { appNotResponding(proc, null, null, aboveSystem, "keyDispatchingTimedOut"); if (proc.instrumentationClass != null || proc.usingWrapper) { return INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT; } } return KEY_DISPATCHING_TIMEOUT; } public void registerProcessObserver(IProcessObserver observer) { enforceCallingPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER, "registerProcessObserver()"); Loading Loading
core/java/android/app/ActivityManagerNative.java +27 −0 Original line number Diff line number Diff line Loading @@ -1772,6 +1772,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface( data.readStrongBinder()); registerUserSwitchObserver(observer); reply.writeNoException(); return true; } Loading @@ -1780,12 +1781,24 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface( data.readStrongBinder()); unregisterUserSwitchObserver(observer); reply.writeNoException(); return true; } case REQUEST_BUG_REPORT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); requestBugReport(); reply.writeNoException(); return true; } case INPUT_DISPATCHING_TIMED_OUT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); int pid = data.readInt(); boolean aboveSystem = data.readInt() != 0; long res = inputDispatchingTimedOut(pid, aboveSystem); reply.writeNoException(); reply.writeLong(res); return true; } Loading Loading @@ -4082,5 +4095,19 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public long inputDispatchingTimedOut(int pid, boolean aboveSystem) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(pid); data.writeInt(aboveSystem ? 1 : 0); mRemote.transact(INPUT_DISPATCHING_TIMED_OUT_TRANSACTION, data, reply, 0); reply.readException(); long res = reply.readInt(); data.recycle(); reply.recycle(); return res; } private IBinder mRemote; }
core/java/android/app/IActivityManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -363,6 +363,8 @@ public interface IActivityManager extends IInterface { public void requestBugReport() throws RemoteException; public long inputDispatchingTimedOut(int pid, boolean aboveSystem) throws RemoteException; /* * Private non-Binder interfaces */ Loading Loading @@ -616,4 +618,5 @@ public interface IActivityManager extends IInterface { int UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+155; int GET_RUNNING_USER_IDS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+156; int REQUEST_BUG_REPORT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+157; int INPUT_DISPATCHING_TIMED_OUT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+158; }
policy/src/com/android/internal/policy/impl/GlobalActions.java +3 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,9 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac mDialog = createDialog(); prepareDialog(); WindowManager.LayoutParams attrs = mDialog.getWindow().getAttributes(); attrs.setTitle("GlobalActions"); mDialog.getWindow().setAttributes(attrs); mDialog.show(); mDialog.getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND); } Loading
services/java/com/android/server/am/ActiveServices.java +1 −1 Original line number Diff line number Diff line Loading @@ -1850,7 +1850,7 @@ public class ActiveServices { } if (anrMessage != null) { mAm.appNotResponding(proc, null, null, anrMessage); mAm.appNotResponding(proc, null, null, false, anrMessage); } } Loading
services/java/com/android/server/am/ActivityManagerService.java +49 −2 Original line number Diff line number Diff line Loading @@ -970,7 +970,8 @@ public final class ActivityManagerService extends ActivityManagerNative if (mShowDialogs) { Dialog d = new AppNotRespondingDialog(ActivityManagerService.this, mContext, proc, (ActivityRecord)data.get("activity")); mContext, proc, (ActivityRecord)data.get("activity"), msg.arg1 != 0); d.show(); proc.anrDialog = d; } else { Loading Loading @@ -3247,7 +3248,7 @@ public final class ActivityManagerService extends ActivityManagerNative } final void appNotResponding(ProcessRecord app, ActivityRecord activity, ActivityRecord parent, final String annotation) { ActivityRecord parent, boolean aboveSystem, final String annotation) { ArrayList<Integer> firstPids = new ArrayList<Integer>(5); SparseArray<Boolean> lastPids = new SparseArray<Boolean>(20); Loading Loading @@ -3388,6 +3389,7 @@ public final class ActivityManagerService extends ActivityManagerNative HashMap map = new HashMap(); msg.what = SHOW_NOT_RESPONDING_MSG; msg.obj = map; msg.arg1 = aboveSystem ? 1 : 0; map.put("app", app); if (activity != null) { map.put("activity", activity); Loading Loading @@ -7340,6 +7342,51 @@ public final class ActivityManagerService extends ActivityManagerNative SystemProperties.set("ctl.start", "bugreport"); } public long inputDispatchingTimedOut(int pid, boolean aboveSystem) { if (checkCallingPermission(android.Manifest.permission.FILTER_EVENTS) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires permission " + android.Manifest.permission.FILTER_EVENTS); } ProcessRecord proc; // TODO: Unify this code with ActivityRecord.keyDispatchingTimedOut(). synchronized (this) { synchronized (mPidsSelfLocked) { proc = mPidsSelfLocked.get(pid); } if (proc != null) { if (proc.debugging) { return -1; } if (mDidDexOpt) { // Give more time since we were dexopting. mDidDexOpt = false; return -1; } if (proc.instrumentationClass != null) { Bundle info = new Bundle(); info.putString("shortMsg", "keyDispatchingTimedOut"); info.putString("longMsg", "Timed out while dispatching key event"); finishInstrumentationLocked(proc, Activity.RESULT_CANCELED, info); proc = null; } } } if (proc != null) { appNotResponding(proc, null, null, aboveSystem, "keyDispatchingTimedOut"); if (proc.instrumentationClass != null || proc.usingWrapper) { return INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT; } } return KEY_DISPATCHING_TIMEOUT; } public void registerProcessObserver(IProcessObserver observer) { enforceCallingPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER, "registerProcessObserver()"); Loading