Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 261ad46b authored by Manjeet Rulhania's avatar Manjeet Rulhania Committed by Android (Google) Code Review
Browse files

Merge "Protect sensitive content in multi/split window use case" into main

parents ca993002 b831831c
Loading
Loading
Loading
Loading
+27 −5
Original line number Diff line number Diff line
@@ -69,6 +69,8 @@ public final class SensitiveContentProtectionManagerService extends SystemServic

    final Object mSensitiveContentProtectionLock = new Object();

    private final ArraySet<PackageInfo> mPackagesShowingSensitiveContent = new ArraySet<>();

    @GuardedBy("mSensitiveContentProtectionLock")
    private boolean mProjectionActive = false;

@@ -205,6 +207,10 @@ public final class SensitiveContentProtectionManagerService extends SystemServic
            if (sensitiveNotificationAppProtection()) {
                updateAppsThatShouldBlockScreenCapture();
            }

            if (sensitiveContentAppProtection() && mPackagesShowingSensitiveContent.size() > 0) {
                mWindowManager.addBlockScreenCaptureForApps(mPackagesShowingSensitiveContent);
            }
        }
    }

@@ -354,17 +360,27 @@ public final class SensitiveContentProtectionManagerService extends SystemServic
    void setSensitiveContentProtection(IBinder windowToken, String packageName, int uid,
            boolean isShowingSensitiveContent) {
        synchronized (mSensitiveContentProtectionLock) {
            // The window token distinguish this package from packages added for notifications.
            PackageInfo packageInfo = new PackageInfo(packageName, uid, windowToken);
            // track these packages to protect when screen share starts.
            if (isShowingSensitiveContent) {
                mPackagesShowingSensitiveContent.add(packageInfo);
                if (mPackagesShowingSensitiveContent.size() > 100) {
                    Log.w(TAG, "Unexpectedly large number of sensitive windows, count: "
                            + mPackagesShowingSensitiveContent.size());
                }
            } else {
                mPackagesShowingSensitiveContent.remove(packageInfo);
            }
            if (!mProjectionActive) {
                return;
            }
            if (DEBUG) {
                Log.d(TAG, "setSensitiveContentProtection - windowToken=" + windowToken
                        + ", package=" + packageName + ", uid=" + uid
                        + ", isShowingSensitiveContent=" + isShowingSensitiveContent);
                Log.d(TAG, "setSensitiveContentProtection - current package=" + packageInfo
                        + ", isShowingSensitiveContent=" + isShowingSensitiveContent
                        + ", sensitive packages=" + mPackagesShowingSensitiveContent);
            }

            // The window token distinguish this package from packages added for notifications.
            PackageInfo packageInfo = new PackageInfo(packageName, uid, windowToken);
            ArraySet<PackageInfo> packageInfos = new ArraySet<>();
            packageInfos.add(packageInfo);
            if (isShowingSensitiveContent) {
@@ -392,6 +408,12 @@ public final class SensitiveContentProtectionManagerService extends SystemServic
                verifyCallingPackage(callingUid, packageName);
                final long identity = Binder.clearCallingIdentity();
                try {
                    if (isShowingSensitiveContent
                            && mWindowManager.getWindowName(windowToken) == null) {
                        Log.e(TAG, "window token is not know to WMS, can't apply protection,"
                                + " token: " + windowToken + ", package: " + packageName);
                        return;
                    }
                    SensitiveContentProtectionManagerService.this.setSensitiveContentProtection(
                            windowToken, packageName, callingUid, isShowingSensitiveContent);
                } finally {