summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ahaan Ugale <augale@google.com> 2024-04-09 17:12:40 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-04-09 17:12:40 +0000
commita81c448c12b590afd0a9bea8359904c22a8bea33 (patch)
tree09185dd85c1c5ae46db5fa7e1054c8acc50f8083
parent1e85fe8c6add18848378c84f1b500a1464850b91 (diff)
parent7b55838f3db56abbd1bff9bc65a9a7914d43580f (diff)
Merge "Avoid re-showing Toast for sensitive content screen capture blocking" into main
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java31
1 files changed, 28 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 74616acf0325..ed88b5a7c449 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -241,6 +241,7 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.DisplayMetrics;
import android.util.EventLog;
+import android.util.IntArray;
import android.util.MergedConfiguration;
import android.util.Pair;
import android.util.Slog;
@@ -1106,6 +1107,14 @@ public class WindowManagerService extends IWindowManager.Stub
@GuardedBy("mGlobalLock")
final SensitiveContentPackages mSensitiveContentPackages = new SensitiveContentPackages();
+ /**
+ * UIDs for which a Toast has been shown to indicate
+ * {@link LocalService#addBlockScreenCaptureForApps(ArraySet) screen capture blocking}. This is
+ * used to ensure we don't keep re-showing the Toast every time the window becomes visible.
+ * UIDs are removed when the app is removed from the block list.
+ */
+ @GuardedBy("mGlobalLock")
+ private final IntArray mCaptureBlockedToastShownUids = new IntArray();
/** Listener to notify activity manager about app transitions. */
final WindowManagerInternal.AppTransitionListener mActivityManagerAppTransitionNotifier
@@ -8746,6 +8755,15 @@ public class WindowManagerService extends IWindowManager.Stub
if (modified) {
WindowManagerService.this.refreshScreenCaptureDisabled();
}
+ if (sensitiveContentImprovements()) {
+ for (int i = 0; i < packageInfos.size(); i++) {
+ int uid = packageInfos.valueAt(i).getUid();
+ if (mCaptureBlockedToastShownUids.contains(uid)) {
+ mCaptureBlockedToastShownUids.remove(
+ mCaptureBlockedToastShownUids.indexOf(uid));
+ }
+ }
+ }
}
}
@@ -8756,6 +8774,9 @@ public class WindowManagerService extends IWindowManager.Stub
if (modified) {
WindowManagerService.this.refreshScreenCaptureDisabled();
}
+ if (sensitiveContentImprovements()) {
+ mCaptureBlockedToastShownUids.clear();
+ }
}
}
@@ -10157,9 +10178,13 @@ public class WindowManagerService extends IWindowManager.Stub
* on sensitive content protections.
*/
private void showToastIfBlockingScreenCapture(@NonNull WindowState w) {
- // TODO(b/323580163): Check if already shown and update shown state.
- if (mSensitiveContentPackages.shouldBlockScreenCaptureForApp(w.getOwningPackage(),
- w.getOwningUid(), w.getWindowToken())) {
+ int uid = w.getOwningUid();
+ if (mCaptureBlockedToastShownUids.contains(uid)) {
+ return;
+ }
+ if (mSensitiveContentPackages.shouldBlockScreenCaptureForApp(w.getOwningPackage(), uid,
+ w.getWindowToken())) {
+ mCaptureBlockedToastShownUids.add(uid);
mH.post(() -> {
Toast.makeText(mContext, Looper.getMainLooper(),
mContext.getString(R.string.screen_not_shared_sensitive_content),