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