1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.keyguard; 18 19 import static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS; 20 21 import static org.mockito.ArgumentMatchers.any; 22 import static org.mockito.ArgumentMatchers.eq; 23 import static org.mockito.Mockito.doReturn; 24 import static org.mockito.Mockito.never; 25 import static org.mockito.Mockito.spy; 26 import static org.mockito.Mockito.times; 27 import static org.mockito.Mockito.verify; 28 import static org.mockito.Mockito.when; 29 30 import android.hardware.display.DisplayManager; 31 import android.hardware.display.DisplayManagerGlobal; 32 import android.testing.AndroidTestingRunner; 33 import android.testing.TestableLooper; 34 import android.view.Display; 35 import android.view.DisplayInfo; 36 37 import androidx.test.filters.SmallTest; 38 39 import com.android.keyguard.dagger.KeyguardStatusViewComponent; 40 import com.android.systemui.SysuiTestCase; 41 import com.android.systemui.navigationbar.NavigationBarController; 42 43 import org.junit.Before; 44 import org.junit.Test; 45 import org.junit.runner.RunWith; 46 import org.mockito.Mock; 47 import org.mockito.MockitoAnnotations; 48 49 import java.util.concurrent.Executor; 50 51 @SmallTest 52 @RunWith(AndroidTestingRunner.class) 53 @TestableLooper.RunWithLooper 54 public class KeyguardDisplayManagerTest extends SysuiTestCase { 55 56 @Mock 57 private NavigationBarController mNavigationBarController; 58 @Mock 59 private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory; 60 @Mock 61 private DisplayManager mDisplayManager; 62 @Mock 63 private KeyguardDisplayManager.KeyguardPresentation mKeyguardPresentation; 64 65 private Executor mBackgroundExecutor = Runnable::run; 66 private KeyguardDisplayManager mManager; 67 68 // The default and secondary displays are both in the default group 69 private Display mDefaultDisplay; 70 private Display mSecondaryDisplay; 71 72 // This display is in a different group from the default and secondary displays. 73 private Display mDifferentGroupDisplay; 74 75 @Before setUp()76 public void setUp() { 77 MockitoAnnotations.initMocks(this); 78 mContext.addMockSystemService(DisplayManager.class, mDisplayManager); 79 mManager = spy(new KeyguardDisplayManager(mContext, () -> mNavigationBarController, 80 mKeyguardStatusViewComponentFactory, mBackgroundExecutor)); 81 doReturn(mKeyguardPresentation).when(mManager).createPresentation(any()); 82 83 mDefaultDisplay = new Display(DisplayManagerGlobal.getInstance(), Display.DEFAULT_DISPLAY, 84 new DisplayInfo(), DEFAULT_DISPLAY_ADJUSTMENTS); 85 mSecondaryDisplay = new Display(DisplayManagerGlobal.getInstance(), 86 Display.DEFAULT_DISPLAY + 1, 87 new DisplayInfo(), DEFAULT_DISPLAY_ADJUSTMENTS); 88 89 DisplayInfo differentGroupInfo = new DisplayInfo(); 90 differentGroupInfo.displayId = Display.DEFAULT_DISPLAY + 2; 91 differentGroupInfo.displayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1; 92 mDifferentGroupDisplay = new Display(DisplayManagerGlobal.getInstance(), 93 Display.DEFAULT_DISPLAY, 94 differentGroupInfo, DEFAULT_DISPLAY_ADJUSTMENTS); 95 } 96 97 @Test testShow_defaultDisplayOnly()98 public void testShow_defaultDisplayOnly() { 99 when(mDisplayManager.getDisplays()).thenReturn(new Display[]{mDefaultDisplay}); 100 mManager.show(); 101 verify(mManager, never()).createPresentation(any()); 102 } 103 104 @Test testShow_includeSecondaryDisplay()105 public void testShow_includeSecondaryDisplay() { 106 when(mDisplayManager.getDisplays()).thenReturn( 107 new Display[]{mDefaultDisplay, mSecondaryDisplay}); 108 mManager.show(); 109 verify(mManager, times(1)).createPresentation(eq(mSecondaryDisplay)); 110 } 111 112 @Test testShow_includeNonDefaultGroupDisplay()113 public void testShow_includeNonDefaultGroupDisplay() { 114 when(mDisplayManager.getDisplays()).thenReturn( 115 new Display[]{mDefaultDisplay, mDifferentGroupDisplay}); 116 117 mManager.show(); 118 verify(mManager, never()).createPresentation(any()); 119 } 120 121 @Test testShow_includeSecondaryAndNonDefaultGroupDisplays()122 public void testShow_includeSecondaryAndNonDefaultGroupDisplays() { 123 when(mDisplayManager.getDisplays()).thenReturn( 124 new Display[]{mDefaultDisplay, mSecondaryDisplay, mDifferentGroupDisplay}); 125 126 mManager.show(); 127 verify(mManager, times(1)).createPresentation(eq(mSecondaryDisplay)); 128 } 129 } 130