Merge "Handle the AM error dialogs in system UI thread" into sc-dev am: 75e3baedbb

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14537657

Change-Id: I0af39bf9140585dae01c38dda7d701d4424e31f5
This commit is contained in:
Jing Ji
2021-05-14 07:09:55 +00:00
committed by Automerger Merge Worker

View File

@@ -115,7 +115,7 @@ final class ErrorDialogController {
return; return;
} }
if (needDismiss) { if (needDismiss) {
forAllDialogs(mCrashDialogs, Dialog::dismiss); scheduleForAllDialogs(mCrashDialogs, Dialog::dismiss);
} }
mCrashDialogs = null; mCrashDialogs = null;
} }
@@ -125,7 +125,7 @@ final class ErrorDialogController {
if (mAnrDialogs == null) { if (mAnrDialogs == null) {
return; return;
} }
forAllDialogs(mAnrDialogs, Dialog::dismiss); scheduleForAllDialogs(mAnrDialogs, Dialog::dismiss);
mAnrDialogs = null; mAnrDialogs = null;
mAnrController = null; mAnrController = null;
} }
@@ -135,7 +135,7 @@ final class ErrorDialogController {
if (mViolationDialogs == null) { if (mViolationDialogs == null) {
return; return;
} }
forAllDialogs(mViolationDialogs, Dialog::dismiss); scheduleForAllDialogs(mViolationDialogs, Dialog::dismiss);
mViolationDialogs = null; mViolationDialogs = null;
} }
@@ -148,6 +148,16 @@ final class ErrorDialogController {
mWaitDialog = null; mWaitDialog = null;
} }
@GuardedBy("mProcLock")
void scheduleForAllDialogs(List<? extends BaseErrorDialog> dialogs,
Consumer<BaseErrorDialog> c) {
mService.mUiHandler.post(() -> {
if (dialogs != null) {
forAllDialogs(dialogs, c);
}
});
}
void forAllDialogs(List<? extends BaseErrorDialog> dialogs, Consumer<BaseErrorDialog> c) { void forAllDialogs(List<? extends BaseErrorDialog> dialogs, Consumer<BaseErrorDialog> c) {
for (int i = dialogs.size() - 1; i >= 0; i--) { for (int i = dialogs.size() - 1; i >= 0; i--) {
c.accept(dialogs.get(i)); c.accept(dialogs.get(i));
@@ -182,15 +192,7 @@ final class ErrorDialogController {
final Context c = contexts.get(i); final Context c = contexts.get(i);
mAnrDialogs.add(new AppNotRespondingDialog(mService, c, data)); mAnrDialogs.add(new AppNotRespondingDialog(mService, c, data));
} }
mService.mUiHandler.post(() -> { scheduleForAllDialogs(mAnrDialogs, Dialog::show);
List<AppNotRespondingDialog> dialogs;
synchronized (mProcLock) {
dialogs = mAnrDialogs;
}
if (dialogs != null) {
forAllDialogs(dialogs, Dialog::show);
}
});
} }
@GuardedBy("mProcLock") @GuardedBy("mProcLock")
@@ -202,15 +204,7 @@ final class ErrorDialogController {
mViolationDialogs.add( mViolationDialogs.add(
new StrictModeViolationDialog(c, mService, res, mApp)); new StrictModeViolationDialog(c, mService, res, mApp));
} }
mService.mUiHandler.post(() -> { scheduleForAllDialogs(mViolationDialogs, Dialog::show);
List<StrictModeViolationDialog> dialogs;
synchronized (mProcLock) {
dialogs = mViolationDialogs;
}
if (dialogs != null) {
forAllDialogs(dialogs, Dialog::show);
}
});
} }
@GuardedBy("mProcLock") @GuardedBy("mProcLock")