1 /* 2 * Copyright (C) 2018 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 org.junit.Assert.assertEquals; 20 import static org.junit.Assert.assertFalse; 21 import static org.junit.Assert.assertTrue; 22 import static org.mockito.ArgumentMatchers.any; 23 import static org.mockito.Mockito.mock; 24 import static org.mockito.Mockito.verify; 25 import static org.mockito.Mockito.when; 26 27 import android.media.AudioManager; 28 import android.telephony.TelephonyManager; 29 import android.test.suitebuilder.annotation.SmallTest; 30 import android.testing.AndroidTestingRunner; 31 import android.testing.TestableLooper; 32 import android.testing.TestableResources; 33 import android.view.Gravity; 34 import android.view.ViewGroup; 35 import android.widget.FrameLayout; 36 37 import com.android.systemui.R; 38 import com.android.systemui.SysuiTestCase; 39 import com.android.systemui.plugins.ActivityStarter.OnDismissAction; 40 41 import org.junit.Before; 42 import org.junit.Rule; 43 import org.junit.Test; 44 import org.junit.runner.RunWith; 45 import org.mockito.Mock; 46 import org.mockito.junit.MockitoJUnit; 47 import org.mockito.junit.MockitoRule; 48 49 @SmallTest 50 @RunWith(AndroidTestingRunner.class) 51 @TestableLooper.RunWithLooper 52 public class KeyguardHostViewControllerTest extends SysuiTestCase { 53 @Mock 54 private KeyguardUpdateMonitor mKeyguardUpdateMonitor; 55 56 private KeyguardHostView mKeyguardHostView; 57 @Mock 58 private AudioManager mAudioManager; 59 @Mock 60 private TelephonyManager mTelephonyManager; 61 @Mock 62 private ViewMediatorCallback mViewMediatorCallback; 63 @Mock 64 KeyguardSecurityContainerController.Factory mKeyguardSecurityContainerControllerFactory; 65 @Mock 66 private KeyguardSecurityContainerController mKeyguardSecurityContainerController; 67 68 @Rule 69 public MockitoRule mMockitoRule = MockitoJUnit.rule(); 70 71 private TestableResources mTestableResources; 72 private KeyguardHostViewController mKeyguardHostViewController; 73 74 @Before setup()75 public void setup() { 76 mTestableResources = mContext.getOrCreateTestableResources(); 77 78 mKeyguardHostView = new KeyguardHostView(mContext); 79 80 // Explicitly disable one handed keyguard. 81 mTestableResources.addOverride( 82 R.bool.can_use_one_handed_bouncer, false); 83 mTestableResources.addOverride( 84 com.android.internal.R.bool.config_enableDynamicKeyguardPositioning, false); 85 86 when(mKeyguardSecurityContainerControllerFactory.create(any( 87 KeyguardSecurityContainer.SecurityCallback.class))) 88 .thenReturn(mKeyguardSecurityContainerController); 89 mKeyguardHostViewController = new KeyguardHostViewController( 90 mKeyguardHostView, mKeyguardUpdateMonitor, mAudioManager, mTelephonyManager, 91 mViewMediatorCallback, mKeyguardSecurityContainerControllerFactory); 92 } 93 94 @Test testHasDismissActions()95 public void testHasDismissActions() { 96 assertFalse("Action not set yet", mKeyguardHostViewController.hasDismissActions()); 97 mKeyguardHostViewController.setOnDismissAction(mock(OnDismissAction.class), 98 null /* cancelAction */); 99 assertTrue("Action should exist", mKeyguardHostViewController.hasDismissActions()); 100 } 101 102 @Test testOnStartingToHide()103 public void testOnStartingToHide() { 104 mKeyguardHostViewController.onStartingToHide(); 105 verify(mKeyguardSecurityContainerController).onStartingToHide(); 106 } 107 108 @Test testGravityReappliedOnConfigurationChange()109 public void testGravityReappliedOnConfigurationChange() { 110 FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( 111 ViewGroup.LayoutParams.MATCH_PARENT, 112 ViewGroup.LayoutParams.MATCH_PARENT); 113 mKeyguardHostView.setLayoutParams(lp); 114 115 // Set initial gravity 116 mTestableResources.addOverride(R.integer.keyguard_host_view_gravity, 117 Gravity.CENTER); 118 119 // Kick off the initial pass... 120 mKeyguardHostViewController.init(); 121 assertEquals( 122 ((FrameLayout.LayoutParams) mKeyguardHostView.getLayoutParams()).gravity, 123 Gravity.CENTER); 124 125 // Now simulate a config change 126 mTestableResources.addOverride(R.integer.keyguard_host_view_gravity, 127 Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); 128 129 mKeyguardHostViewController.updateResources(); 130 assertEquals( 131 ((FrameLayout.LayoutParams) mKeyguardHostView.getLayoutParams()).gravity, 132 Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); 133 } 134 135 @Test testGravityUsesOneHandGravityWhenApplicable()136 public void testGravityUsesOneHandGravityWhenApplicable() { 137 FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( 138 ViewGroup.LayoutParams.MATCH_PARENT, 139 ViewGroup.LayoutParams.MATCH_PARENT); 140 mKeyguardHostView.setLayoutParams(lp); 141 142 mTestableResources.addOverride( 143 R.integer.keyguard_host_view_gravity, 144 Gravity.CENTER); 145 mTestableResources.addOverride( 146 R.integer.keyguard_host_view_one_handed_gravity, 147 Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); 148 149 // Start disabled. 150 mTestableResources.addOverride( 151 R.bool.can_use_one_handed_bouncer, false); 152 mTestableResources.addOverride( 153 com.android.internal.R.bool.config_enableDynamicKeyguardPositioning, false); 154 155 mKeyguardHostViewController.init(); 156 assertEquals( 157 ((FrameLayout.LayoutParams) mKeyguardHostView.getLayoutParams()).gravity, 158 Gravity.CENTER); 159 160 // And enable 161 mTestableResources.addOverride( 162 R.bool.can_use_one_handed_bouncer, true); 163 mTestableResources.addOverride( 164 com.android.internal.R.bool.config_enableDynamicKeyguardPositioning, true); 165 166 mKeyguardHostViewController.updateResources(); 167 assertEquals( 168 ((FrameLayout.LayoutParams) mKeyguardHostView.getLayoutParams()).gravity, 169 Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); 170 } 171 172 @Test testUpdateKeyguardPositionDelegatesToSecurityContainer()173 public void testUpdateKeyguardPositionDelegatesToSecurityContainer() { 174 mKeyguardHostViewController.updateKeyguardPosition(1.0f); 175 176 verify(mKeyguardSecurityContainerController).updateKeyguardPosition(1.0f); 177 } 178 } 179