diff options
| author | 2018-08-21 13:22:33 -0700 | |
|---|---|---|
| committer | 2018-08-21 13:22:33 -0700 | |
| commit | a3e3627375ec076eb94ca7eae5470da825072f9d (patch) | |
| tree | 6f7ad167db5d210c197ab2e525b713599cd40458 | |
| parent | 1a8588d19f75eda4e802763d6725d8c0e1e39341 (diff) | |
Hide system overlays on AOD
Test: atest packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java
Change-Id: Ib6e4bbd4652f8c01460884602def97eb65ad4e98
Fixes: 110990354
2 files changed, 103 insertions, 3 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 bd4fedfaac11..4d601218b7ca 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java @@ -36,6 +36,7 @@ import android.view.ViewGroup; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; +import com.android.internal.annotations.VisibleForTesting; import com.android.keyguard.R; import com.android.systemui.Dumpable; import com.android.systemui.keyguard.KeyguardViewMediator; @@ -69,11 +70,18 @@ public class StatusBarWindowController implements RemoteInputController.Callback private OtherwisedCollapsedListener mListener; public StatusBarWindowController(Context context) { + this(context, context.getSystemService(WindowManager.class), ActivityManager.getService(), + DozeParameters.getInstance(context)); + } + + @VisibleForTesting + StatusBarWindowController(Context context, WindowManager windowManager, + IActivityManager activityManager, DozeParameters dozeParameters) { mContext = context; - mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); - mActivityManager = ActivityManager.getService(); + mWindowManager = windowManager; + mActivityManager = activityManager; mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation(); - mDozeParameters = DozeParameters.getInstance(mContext); + mDozeParameters = dozeParameters; mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze(); } @@ -149,6 +157,12 @@ public class StatusBarWindowController implements RemoteInputController.Callback } else { mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; } + + if (state.dozing) { + mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; + } else { + mLpChanged.privateFlags &= ~LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; + } } 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 new file mode 100644 index 000000000000..f8223f61edb4 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.statusbar.phone; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.IActivityManager; +import android.support.test.filters.SmallTest; +import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper.RunWithLooper; +import android.view.View; +import android.view.WindowManager; + +import com.android.systemui.SysuiTestCase; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +@RunWith(AndroidTestingRunner.class) +@RunWithLooper +@SmallTest +public class StatusBarWindowControllerTest extends SysuiTestCase { + + @Mock + private WindowManager mWindowManager; + @Mock + private DozeParameters mDozeParameters; + @Mock + private View mStatusBarView; + @Mock + private IActivityManager mActivityManager; + + private StatusBarWindowController mStatusBarWindowController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + when(mDozeParameters.getAlwaysOn()).thenReturn(true); + + mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, + mActivityManager, mDozeParameters); + 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 + & WindowManager.LayoutParams.PRIVATE_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 + & WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; + assertThat(flag).isEqualTo(0); + } +} |