summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matt Pietal <mpietal@google.com> 2022-09-14 19:08:02 +0000
committer Matt Pietal <mpietal@google.com> 2022-09-15 17:52:28 +0000
commitc561831af7af834b66ce0df3a169fffc08d2d3b5 (patch)
tree22d281854ec368ae03c083ec70c8593ea3f42894
parent3fe8fdc4dc2a4172d99faf2a398fa4ba77bbd4a5 (diff)
[DO NOT MERGE] 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 StatusBarWindowControllerTest && take screenshot with bouncer up Merged-In: I3f59df865dc2dd13d4b9ac54bb2dacb7b23f0aa1 Change-Id: I8df2258863b8cede5ba112331e0446f534267ba2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java11
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java38
2 files changed, 42 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java
index 8621b7293711..b55cb2adcebb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java
@@ -27,6 +27,7 @@ import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.graphics.PixelFormat;
import android.os.Binder;
+import android.os.Build;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.util.Log;
@@ -204,6 +205,16 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat
} else {
mLpChanged.privateFlags &= ~LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
}
+
+ if (state.bouncerShowing && !isDebuggable()) {
+ mLpChanged.flags |= LayoutParams.FLAG_SECURE;
+ } else {
+ mLpChanged.flags &= ~LayoutParams.FLAG_SECURE;
+ }
+ }
+
+ protected boolean isDebuggable() {
+ return Build.IS_DEBUGGABLE;
}
private void adjustScreenOrientation(State state) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java
index fea41a441065..41b37712517c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java
@@ -16,6 +16,8 @@
package com.android.systemui.statusbar.phone;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -38,6 +40,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -54,6 +57,8 @@ public class StatusBarWindowControllerTest extends SysuiTestCase {
private ViewGroup mStatusBarView;
@Mock
private IActivityManager mActivityManager;
+ @Captor
+ private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters;
private StatusBarWindowController mStatusBarWindowController;
@@ -63,24 +68,27 @@ public class StatusBarWindowControllerTest extends SysuiTestCase {
when(mDozeParameters.getAlwaysOn()).thenReturn(true);
mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager,
- mActivityManager, mDozeParameters);
+ mActivityManager, mDozeParameters) {
+ @Override
+ protected boolean isDebuggable() {
+ return false;
+ }
+ };
mStatusBarWindowController.add(mStatusBarView, 100 /* height */);
}
@Test
public void testSetDozing_hidesSystemOverlays() {
mStatusBarWindowController.setDozing(true);
- ArgumentCaptor<WindowManager.LayoutParams> captor =
- ArgumentCaptor.forClass(WindowManager.LayoutParams.class);
- verify(mWindowManager).updateViewLayout(any(), captor.capture());
- int flag = captor.getValue().privateFlags
+ verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+ int flag = mLayoutParameters.getValue().privateFlags
& WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
assertThat(flag).isNotEqualTo(0);
reset(mWindowManager);
mStatusBarWindowController.setDozing(false);
- verify(mWindowManager).updateViewLayout(any(), captor.capture());
- flag = captor.getValue().privateFlags
+ verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+ flag = mLayoutParameters.getValue().privateFlags
& WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
assertThat(flag).isEqualTo(0);
}
@@ -103,4 +111,20 @@ public class StatusBarWindowControllerTest extends SysuiTestCase {
mActivityManager, mDozeParameters);
mStatusBarWindowController.setForcePluginOpen(true);
}
+
+ @Test
+ public void setKeyguardShowing_enablesSecureFlag() {
+ mStatusBarWindowController.setBouncerShowing(true);
+
+ verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+ assertThat((mLayoutParameters.getValue().flags & FLAG_SECURE) != 0).isTrue();
+ }
+
+ @Test
+ public void setKeyguardNotShowing_disablesSecureFlag() {
+ mStatusBarWindowController.setBouncerShowing(false);
+
+ verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+ assertThat((mLayoutParameters.getValue().flags & FLAG_SECURE) == 0).isTrue();
+ }
}