1 /* 2 * Copyright (C) 2020 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.mockito.Mockito.atLeast; 20 import static org.mockito.Mockito.verify; 21 import static org.mockito.Mockito.when; 22 23 import android.view.View; 24 import android.view.ViewTreeObserver; 25 import android.widget.FrameLayout; 26 27 import com.android.keyguard.logging.KeyguardLogger; 28 import com.android.systemui.SysuiTestCase; 29 import com.android.systemui.dump.DumpManager; 30 import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository; 31 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory; 32 import com.android.systemui.kosmos.KosmosJavaAdapter; 33 import com.android.systemui.power.data.repository.FakePowerRepository; 34 import com.android.systemui.power.domain.interactor.PowerInteractorFactory; 35 import com.android.systemui.res.R; 36 import com.android.systemui.statusbar.notification.AnimatableProperty; 37 import com.android.systemui.statusbar.phone.DozeParameters; 38 import com.android.systemui.statusbar.phone.ScreenOffAnimationController; 39 import com.android.systemui.statusbar.policy.ConfigurationController; 40 import com.android.systemui.statusbar.policy.KeyguardStateController; 41 42 import org.junit.Before; 43 import org.mockito.ArgumentCaptor; 44 import org.mockito.Mock; 45 import org.mockito.MockitoAnnotations; 46 47 public class KeyguardStatusViewControllerBaseTest extends SysuiTestCase { 48 49 private KosmosJavaAdapter mKosmos; 50 @Mock protected KeyguardStatusView mKeyguardStatusView; 51 52 @Mock protected KeyguardSliceViewController mKeyguardSliceViewController; 53 @Mock protected KeyguardClockSwitchController mKeyguardClockSwitchController; 54 @Mock protected KeyguardStateController mKeyguardStateController; 55 @Mock protected KeyguardUpdateMonitor mKeyguardUpdateMonitor; 56 @Mock protected ConfigurationController mConfigurationController; 57 @Mock protected DozeParameters mDozeParameters; 58 @Mock protected ScreenOffAnimationController mScreenOffAnimationController; 59 @Mock protected KeyguardLogger mKeyguardLogger; 60 @Mock protected KeyguardStatusViewController mControllerMock; 61 @Mock protected ViewTreeObserver mViewTreeObserver; 62 @Mock protected DumpManager mDumpManager; 63 protected FakeKeyguardRepository mFakeKeyguardRepository; 64 protected FakePowerRepository mFakePowerRepository; 65 66 protected KeyguardStatusViewController mController; 67 68 @Mock protected KeyguardClockSwitch mKeyguardClockSwitch; 69 @Mock protected FrameLayout mMediaHostContainer; 70 @Mock protected KeyguardStatusAreaView mKeyguardStatusAreaView; 71 72 @Before setup()73 public void setup() { 74 mKosmos = new KosmosJavaAdapter(this); 75 MockitoAnnotations.initMocks(this); 76 77 KeyguardInteractorFactory.WithDependencies deps = KeyguardInteractorFactory.create(); 78 mFakeKeyguardRepository = deps.getRepository(); 79 mFakePowerRepository = new FakePowerRepository(); 80 81 mController = new KeyguardStatusViewController( 82 mKeyguardStatusView, 83 mKeyguardSliceViewController, 84 mKeyguardClockSwitchController, 85 mKeyguardStateController, 86 mKeyguardUpdateMonitor, 87 mConfigurationController, 88 mDozeParameters, 89 mScreenOffAnimationController, 90 mKeyguardLogger, 91 mKosmos.getInteractionJankMonitor(), 92 deps.getKeyguardInteractor(), 93 mDumpManager, 94 PowerInteractorFactory.create( 95 mFakePowerRepository 96 ).getPowerInteractor()) { 97 @Override 98 void setProperty( 99 AnimatableProperty property, 100 float value, 101 boolean animate) { 102 // Route into the mock version for verification 103 mControllerMock.setProperty(property, value, animate); 104 } 105 }; 106 107 when(mKeyguardStatusView.getViewTreeObserver()).thenReturn(mViewTreeObserver); 108 when(mKeyguardClockSwitchController.getView()).thenReturn(mKeyguardClockSwitch); 109 when(mKeyguardStatusView.findViewById(R.id.keyguard_status_area)) 110 .thenReturn(mKeyguardStatusAreaView); 111 } 112 givenViewAttached()113 protected void givenViewAttached() { 114 ArgumentCaptor<View.OnAttachStateChangeListener> captor = 115 ArgumentCaptor.forClass(View.OnAttachStateChangeListener.class); 116 verify(mKeyguardStatusView, atLeast(1)).addOnAttachStateChangeListener(captor.capture()); 117 118 for (View.OnAttachStateChangeListener listener : captor.getAllValues()) { 119 listener.onViewAttachedToWindow(mKeyguardStatusView); 120 } 121 } 122 } 123