diff options
| author | 2024-04-05 23:46:42 +0000 | |
|---|---|---|
| committer | 2024-04-05 23:46:42 +0000 | |
| commit | f2001b43d7e7568369c8e9eae0d730fe1ec931ed (patch) | |
| tree | 5ba0a8d571eb2de52d96be3c97902f5b474b1e34 | |
| parent | a7136d36a0c1653fdd7469ab48e86dfeb4d2d441 (diff) | |
Fix deadlock in showing Toast for sensitive content
Toast#show calls into NotificationManagerService which then acquires a
lock there.
WMS is at a lower layer of the system and shouldn't be calling into a
higher level system with a lock held. This cl fixes the layering
inversion.
Bug: 323580163
Test: atest CtsSensitiveContentProtectionTestCases:android.sensitivecontentprotection.cts.ViewSensitiveContentTest --iterations
Change-Id: I4e829183b7f29ad2ad3231f4ea91937b8d9e2c6b
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 6762e7a29b0b..15aad55d1a72 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -10163,10 +10163,12 @@ public class WindowManagerService extends IWindowManager.Stub // TODO(b/323580163): Check if already shown and update shown state. if (mSensitiveContentPackages.shouldBlockScreenCaptureForApp(w.getOwningPackage(), w.getOwningUid(), w.getWindowToken())) { - Toast.makeText(mContext, Looper.getMainLooper(), - mContext.getString(R.string.screen_not_shared_sensitive_content), - Toast.LENGTH_SHORT) - .show(); + mH.post(() -> { + Toast.makeText(mContext, Looper.getMainLooper(), + mContext.getString(R.string.screen_not_shared_sensitive_content), + Toast.LENGTH_SHORT) + .show(); + }); } } } |