diff options
Diffstat (limited to 'services/java/com')
-rw-r--r-- | services/java/com/android/server/am/ActivityManagerService.java | 37 | ||||
-rwxr-xr-x | services/java/com/android/server/am/ActivityStack.java | 5 |
2 files changed, 26 insertions, 16 deletions
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 54ef724..76016f4 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -3510,31 +3510,36 @@ public final class ActivityManagerService extends ActivityManagerNative public void closeSystemDialogs(String reason) { enforceNotIsolatedCaller("closeSystemDialogs"); + + final int uid = Binder.getCallingUid(); + final long origId = Binder.clearCallingIdentity(); + synchronized (this) { + closeSystemDialogsLocked(uid, reason); + } + Binder.restoreCallingIdentity(origId); + } + + void closeSystemDialogsLocked(int callingUid, String reason) { Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); if (reason != null) { intent.putExtra("reason", reason); } + mWindowManager.closeSystemDialogs(reason); - final int uid = Binder.getCallingUid(); - final long origId = Binder.clearCallingIdentity(); - synchronized (this) { - mWindowManager.closeSystemDialogs(reason); - - for (int i=mMainStack.mHistory.size()-1; i>=0; i--) { - ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i); - if ((r.info.flags&ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) { - r.stack.finishActivityLocked(r, i, - Activity.RESULT_CANCELED, null, "close-sys"); - } + for (int i=mMainStack.mHistory.size()-1; i>=0; i--) { + ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i); + if ((r.info.flags&ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) { + r.stack.finishActivityLocked(r, i, + Activity.RESULT_CANCELED, null, "close-sys"); } - - broadcastIntentLocked(null, null, intent, null, - null, 0, null, null, null, false, false, -1, uid, 0 /* TODO: Verify */); } - Binder.restoreCallingIdentity(origId); + + broadcastIntentLocked(null, null, intent, null, + null, 0, null, null, null, false, false, -1, + callingUid, 0 /* TODO: Verify */); } - + public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids) throws RemoteException { enforceNotIsolatedCaller("getProcessMemoryInfo"); diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index e6f4d918..5b15e50 100755 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -52,6 +52,7 @@ import android.os.IBinder; import android.os.Message; import android.os.ParcelFileDescriptor; import android.os.PowerManager; +import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; import android.os.UserId; @@ -2532,6 +2533,10 @@ final class ActivityStack { mDismissKeyguardOnNextActivity = false; mService.mWindowManager.dismissKeyguard(); } + if (err >= ActivityManager.START_SUCCESS && + (launchFlags&Intent.FLAG_ACTIVITY_CLOSE_SYSTEM_DIALOGS) != 0) { + mService.closeSystemDialogsLocked(Process.myUid(), "launch"); + } return err; } |