• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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.settings.accounts;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import static org.mockito.ArgumentMatchers.any;
22 import static org.mockito.ArgumentMatchers.anyBoolean;
23 import static org.mockito.ArgumentMatchers.anyInt;
24 import static org.mockito.ArgumentMatchers.eq;
25 import static org.mockito.Mockito.never;
26 import static org.mockito.Mockito.spy;
27 import static org.mockito.Mockito.times;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.when;
30 
31 import android.app.admin.flags.Flags;
32 import android.content.Context;
33 import android.content.Intent;
34 import android.content.pm.UserInfo;
35 import android.os.UserHandle;
36 import android.os.UserManager;
37 import android.platform.test.annotations.RequiresFlagsEnabled;
38 import android.platform.test.flag.junit.CheckFlagsRule;
39 import android.platform.test.flag.junit.DeviceFlagsValueProvider;
40 
41 import androidx.lifecycle.Lifecycle;
42 import androidx.lifecycle.LifecycleOwner;
43 import androidx.lifecycle.LifecycleRegistry;
44 import androidx.test.core.app.ApplicationProvider;
45 
46 import org.junit.Before;
47 import org.junit.Rule;
48 import org.junit.Test;
49 import org.junit.runner.RunWith;
50 import org.mockito.Mock;
51 import org.mockito.junit.MockitoJUnit;
52 import org.mockito.junit.MockitoRule;
53 import org.robolectric.ParameterizedRobolectricTestRunner;
54 import org.robolectric.shadows.ShadowLooper;
55 
56 import java.util.Arrays;
57 import java.util.Collections;
58 import java.util.List;
59 
60 
61 @RunWith(ParameterizedRobolectricTestRunner.class)
62 public class ManagedProfileQuietModeEnablerTest {
63 
64     @Rule
65     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
66 
67     private static final int MANAGED_USER_ID = 10;
68     private Context mContext;
69     private ManagedProfileQuietModeEnabler mQuietModeEnabler;
70     private LifecycleOwner mLifecycleOwner = new LifecycleOwner() {
71         public LifecycleRegistry registry = new LifecycleRegistry(this);
72 
73         @Override
74         public Lifecycle getLifecycle() {
75             return registry;
76         }
77     };
78 
79     @Rule
80     public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
81 
82     @ParameterizedRobolectricTestRunner.Parameters
params()83     public static List<?> params() {
84         return Arrays.asList(true, false);
85     }
86     final boolean mEnable;
87 
88     @Mock
89     private ManagedProfileQuietModeEnabler.QuietModeChangeListener mOnQuietModeChangeListener;
90     @Mock
91     private UserManager mUserManager;
92     @Mock
93     private UserHandle mManagedUser;
94     @Mock
95     private UserInfo mUserInfo;
96 
ManagedProfileQuietModeEnablerTest(boolean enable)97     public ManagedProfileQuietModeEnablerTest(boolean enable) {
98         mEnable = enable;
99     }
100 
101     @Before
setUp()102     public void setUp() {
103         mContext = spy(ApplicationProvider.getApplicationContext());
104         when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
105         when(mUserInfo.isManagedProfile()).thenReturn(true);
106         when(mUserManager.getUserInfo(anyInt())).thenReturn(mUserInfo);
107         when(mUserManager.getProcessUserId()).thenReturn(0);
108         when(mManagedUser.getIdentifier()).thenReturn(MANAGED_USER_ID);
109         when(mUserManager.getUserProfiles()).thenReturn(Collections.singletonList(mManagedUser));
110         mQuietModeEnabler = new ManagedProfileQuietModeEnabler(mContext,
111                 mOnQuietModeChangeListener);
112     }
113 
114     @Test
onSetQuietMode_shouldRequestQuietModeEnabled()115     public void onSetQuietMode_shouldRequestQuietModeEnabled() {
116         when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(!mEnable);
117 
118         mQuietModeEnabler.setQuietModeEnabled(mEnable);
119 
120         verify(mUserManager).requestQuietModeEnabled(mEnable, mManagedUser);
121     }
122 
123     @Test
124     @RequiresFlagsEnabled(Flags.FLAG_QUIET_MODE_CREDENTIAL_BUG_FIX)
onSetQuietMode_ifQuietModeAlreadyInDesiredState_shouldNotRequestQuietModeEnabled()125     public void onSetQuietMode_ifQuietModeAlreadyInDesiredState_shouldNotRequestQuietModeEnabled() {
126         when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(mEnable);
127 
128         mQuietModeEnabler.setQuietModeEnabled(mEnable);
129 
130         verify(mUserManager, never()).requestQuietModeEnabled(anyBoolean(), any());
131     }
132 
133     @Test
onIsQuietModeEnabled_shouldCallIsQuietModeEnabled()134     public void onIsQuietModeEnabled_shouldCallIsQuietModeEnabled() {
135         assertThat(mQuietModeEnabler.isQuietModeEnabled()).isEqualTo(
136                 verify(mUserManager).isQuietModeEnabled(any()));
137     }
138 
139     @Test
onQuietModeChanged_listenerNotified()140     public void onQuietModeChanged_listenerNotified() {
141         mQuietModeEnabler.onStart(mLifecycleOwner);
142         mContext.sendBroadcast(new Intent(Intent.ACTION_MANAGED_PROFILE_AVAILABLE).putExtra(
143                 Intent.EXTRA_USER_HANDLE, MANAGED_USER_ID));
144         mContext.sendBroadcast(new Intent(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE).putExtra(
145                 Intent.EXTRA_USER_HANDLE, MANAGED_USER_ID));
146         ShadowLooper.idleMainLooper();
147 
148         verify(mOnQuietModeChangeListener, times(2)).onQuietModeChanged();
149     }
150 
151     @Test
onStart_shouldRegisterReceiver()152     public void onStart_shouldRegisterReceiver() {
153         mQuietModeEnabler.onStart(mLifecycleOwner);
154         verify(mContext).registerReceiver(eq(mQuietModeEnabler.mReceiver), any(), anyInt());
155     }
156 
157     @Test
onStop_shouldUnregisterReceiver()158     public void onStop_shouldUnregisterReceiver() {
159         // register it first
160         mContext.registerReceiver(mQuietModeEnabler.mReceiver, null,
161                 Context.RECEIVER_EXPORTED/*UNAUDITED*/);
162 
163         mQuietModeEnabler.onStop(mLifecycleOwner);
164 
165         verify(mContext).unregisterReceiver(mQuietModeEnabler.mReceiver);
166     }
167 }
168