Update window with FLAG_SECURE when bouncer is showing
This will prevent bouncer interactions from showing up in screenrecords or screenshots. Fixes: 215005011 Test: atest NotificationShadeWindowControllerImpl && take screenshot with bouncer up Change-Id: I3f59df865dc2dd13d4b9ac54bb2dacb7b23f0aa1
This commit is contained in:
@@ -30,6 +30,7 @@ import android.content.res.Configuration;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.Region;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
import android.os.RemoteException;
|
||||
import android.os.Trace;
|
||||
import android.util.Log;
|
||||
@@ -327,6 +328,16 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
|
||||
Trace.setCounter("display_max_refresh_rate",
|
||||
(long) mLpChanged.preferredMaxDisplayRefreshRate);
|
||||
}
|
||||
|
||||
if (state.mBouncerShowing && !isDebuggable()) {
|
||||
mLpChanged.flags |= LayoutParams.FLAG_SECURE;
|
||||
} else {
|
||||
mLpChanged.flags &= ~LayoutParams.FLAG_SECURE;
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isDebuggable() {
|
||||
return Build.IS_DEBUGGABLE;
|
||||
}
|
||||
|
||||
private void adjustScreenOrientation(State state) {
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@@ -92,7 +93,12 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
|
||||
mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
|
||||
mConfigurationController, mKeyguardViewMediator, mKeyguardBypassController,
|
||||
mColorExtractor, mDumpManager, mKeyguardStateController,
|
||||
mScreenOffAnimationController, mAuthController);
|
||||
mScreenOffAnimationController, mAuthController) {
|
||||
@Override
|
||||
protected boolean isDebuggable() {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
mNotificationShadeWindowController.setScrimsVisibilityListener((visibility) -> {});
|
||||
mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView);
|
||||
|
||||
@@ -231,6 +237,22 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
|
||||
assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) == 0).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setKeyguardShowing_enablesSecureFlag() {
|
||||
mNotificationShadeWindowController.setBouncerShowing(true);
|
||||
|
||||
verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
|
||||
assertThat((mLayoutParameters.getValue().flags & FLAG_SECURE) != 0).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setKeyguardNotShowing_disablesSecureFlag() {
|
||||
mNotificationShadeWindowController.setBouncerShowing(false);
|
||||
|
||||
verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
|
||||
assertThat((mLayoutParameters.getValue().flags & FLAG_SECURE) == 0).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void rotationBecameAllowed_layoutParamsUpdated() {
|
||||
mNotificationShadeWindowController.setKeyguardShowing(true);
|
||||
|
||||
Reference in New Issue
Block a user