diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java | 16 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/keyguard/KeyguardDisplayManagerTest.java | 130 |
2 files changed, 144 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java b/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java index a40dc7abf063..85e9ca05d428 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java @@ -16,6 +16,7 @@ package com.android.keyguard; import static android.view.Display.DEFAULT_DISPLAY; +import static android.view.Display.DEFAULT_DISPLAY_GROUP; import android.app.Presentation; import android.content.Context; @@ -116,6 +117,14 @@ public class KeyguardDisplayManager { if (DEBUG) Log.i(TAG, "Do not show KeyguardPresentation on a private display"); return false; } + if (mTmpDisplayInfo.displayGroupId != DEFAULT_DISPLAY_GROUP) { + if (DEBUG) { + Log.i(TAG, + "Do not show KeyguardPresentation on a non-default group display"); + } + return false; + } + return true; } /** @@ -130,8 +139,7 @@ public class KeyguardDisplayManager { final int displayId = display.getDisplayId(); Presentation presentation = mPresentations.get(displayId); if (presentation == null) { - final Presentation newPresentation = new KeyguardPresentation(mContext, display, - mKeyguardStatusViewComponentFactory); + final Presentation newPresentation = createPresentation(display); newPresentation.setOnDismissListener(dialog -> { if (newPresentation.equals(mPresentations.get(displayId))) { mPresentations.remove(displayId); @@ -152,6 +160,10 @@ public class KeyguardDisplayManager { return false; } + KeyguardPresentation createPresentation(Display display) { + return new KeyguardPresentation(mContext, display, mKeyguardStatusViewComponentFactory); + } + /** * @param displayId The id of the display to hide the presentation off. */ diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardDisplayManagerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardDisplayManagerTest.java new file mode 100644 index 000000000000..826be2ba0d83 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardDisplayManagerTest.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2021 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.keyguard; + +import static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.hardware.display.DisplayManager; +import android.hardware.display.DisplayManagerGlobal; +import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper; +import android.view.Display; +import android.view.DisplayInfo; + +import androidx.test.filters.SmallTest; + +import com.android.keyguard.dagger.KeyguardStatusViewComponent; +import com.android.systemui.SysuiTestCase; +import com.android.systemui.navigationbar.NavigationBarController; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.concurrent.Executor; + +@SmallTest +@RunWith(AndroidTestingRunner.class) +@TestableLooper.RunWithLooper +public class KeyguardDisplayManagerTest extends SysuiTestCase { + + @Mock + private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory; + + @Mock + private DisplayManager mDisplayManager; + + @Mock + private KeyguardDisplayManager.KeyguardPresentation mKeyguardPresentation; + + private Executor mBackgroundExecutor = Runnable::run; + private KeyguardDisplayManager mManager; + + // The default and secondary displays are both in the default group + private Display mDefaultDisplay; + private Display mSecondaryDisplay; + + // This display is in a different group from the default and secondary displays. + private Display mDifferentGroupDisplay; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext.addMockSystemService(DisplayManager.class, mDisplayManager); + mDependency.injectMockDependency(NavigationBarController.class); + mManager = spy(new KeyguardDisplayManager(mContext, mKeyguardStatusViewComponentFactory, + mBackgroundExecutor)); + doReturn(mKeyguardPresentation).when(mManager).createPresentation(any()); + + mDefaultDisplay = new Display(DisplayManagerGlobal.getInstance(), Display.DEFAULT_DISPLAY, + new DisplayInfo(), DEFAULT_DISPLAY_ADJUSTMENTS); + mSecondaryDisplay = new Display(DisplayManagerGlobal.getInstance(), + Display.DEFAULT_DISPLAY + 1, + new DisplayInfo(), DEFAULT_DISPLAY_ADJUSTMENTS); + + DisplayInfo differentGroupInfo = new DisplayInfo(); + differentGroupInfo.displayId = Display.DEFAULT_DISPLAY + 2; + differentGroupInfo.displayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1; + mDifferentGroupDisplay = new Display(DisplayManagerGlobal.getInstance(), + Display.DEFAULT_DISPLAY, + differentGroupInfo, DEFAULT_DISPLAY_ADJUSTMENTS); + } + + @Test + public void testShow_defaultDisplayOnly() { + when(mDisplayManager.getDisplays()).thenReturn(new Display[]{mDefaultDisplay}); + mManager.show(); + verify(mManager, never()).createPresentation(any()); + } + + @Test + public void testShow_includeSecondaryDisplay() { + when(mDisplayManager.getDisplays()).thenReturn( + new Display[]{mDefaultDisplay, mSecondaryDisplay}); + mManager.show(); + verify(mManager, times(1)).createPresentation(eq(mSecondaryDisplay)); + } + + @Test + public void testShow_includeNonDefaultGroupDisplay() { + when(mDisplayManager.getDisplays()).thenReturn( + new Display[]{mDefaultDisplay, mDifferentGroupDisplay}); + + mManager.show(); + verify(mManager, never()).createPresentation(any()); + } + + @Test + public void testShow_includeSecondaryAndNonDefaultGroupDisplays() { + when(mDisplayManager.getDisplays()).thenReturn( + new Display[]{mDefaultDisplay, mSecondaryDisplay, mDifferentGroupDisplay}); + + mManager.show(); + verify(mManager, times(1)).createPresentation(eq(mSecondaryDisplay)); + } +} |