summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ahaan Ugale <augale@google.com> 2024-04-05 23:46:42 +0000
committer Ahaan Ugale <augale@google.com> 2024-04-05 23:46:42 +0000
commitf2001b43d7e7568369c8e9eae0d730fe1ec931ed (patch)
tree5ba0a8d571eb2de52d96be3c97902f5b474b1e34
parenta7136d36a0c1653fdd7469ab48e86dfeb4d2d441 (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.java10
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();
+ });
}
}
}