• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 package com.android.settings.accounts;
17 
18 import static android.provider.Settings.Secure.MANAGED_PROFILE_CONTACT_REMOTE_SEARCH;
19 
20 import static com.google.common.truth.Truth.assertThat;
21 
22 import static org.mockito.ArgumentMatchers.any;
23 import static org.mockito.ArgumentMatchers.anyInt;
24 import static org.mockito.Mockito.spy;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.when;
27 
28 import android.content.Context;
29 import android.content.pm.UserInfo;
30 import android.os.UserHandle;
31 import android.os.UserManager;
32 import android.provider.Settings;
33 
34 import androidx.test.core.app.ApplicationProvider;
35 
36 import com.android.settingslib.RestrictedSwitchPreference;
37 
38 import org.junit.Before;
39 import org.junit.Test;
40 import org.junit.runner.RunWith;
41 import org.mockito.Mock;
42 import org.mockito.MockitoAnnotations;
43 import org.robolectric.RobolectricTestRunner;
44 
45 import java.util.Collections;
46 
47 @RunWith(RobolectricTestRunner.class)
48 public class ContactSearchPreferenceControllerTest {
49 
50     private static final String PREF_KEY = "contacts_search";
51     private static final int MANAGED_USER_ID = 10;
52 
53     private Context mContext;
54     private ContactSearchPreferenceController mController;
55     private RestrictedSwitchPreference mPreference;
56 
57     @Mock
58     private UserHandle mManagedUser;
59     @Mock
60     private UserManager mUserManager;
61     @Mock
62     private UserInfo mUserInfo;
63 
64     @Before
setUp()65     public void setUp() {
66         MockitoAnnotations.initMocks(this);
67         mContext = spy(ApplicationProvider.getApplicationContext());
68         when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
69         mPreference = spy(new RestrictedSwitchPreference(mContext));
70         when(mUserInfo.isManagedProfile()).thenReturn(true);
71         when(mUserManager.getUserInfo(anyInt())).thenReturn(mUserInfo);
72         when(mUserManager.getProcessUserId()).thenReturn(0);
73         when(mUserManager.getUserProfiles()).thenReturn(Collections.singletonList(mManagedUser));
74         when(mManagedUser.getIdentifier()).thenReturn(MANAGED_USER_ID);
75         mController = new ContactSearchPreferenceController(mContext, PREF_KEY);
76     }
77 
78     @Test
getAvailabilityStatus_noManagedUser_DISABLED()79     public void getAvailabilityStatus_noManagedUser_DISABLED() {
80         when(mUserManager.getProcessUserId()).thenReturn(MANAGED_USER_ID);
81         mController = new ContactSearchPreferenceController(mContext, PREF_KEY);
82 
83         assertThat(mController.getAvailabilityStatus())
84                 .isNotEqualTo(ContactSearchPreferenceController.AVAILABLE);
85     }
86 
87     @Test
getAvailabilityStatus_hasManagedUser_AVAILABLE()88     public void getAvailabilityStatus_hasManagedUser_AVAILABLE() {
89         assertThat(mController.getAvailabilityStatus())
90                 .isEqualTo(ContactSearchPreferenceController.AVAILABLE);
91     }
92 
93     @Test
updateState_shouldRefreshContent()94     public void updateState_shouldRefreshContent() {
95         Settings.Secure.putIntForUser(mContext.getContentResolver(),
96                 MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 0, MANAGED_USER_ID);
97 
98         mController.updateState(mPreference);
99 
100         assertThat(mPreference.isChecked()).isFalse();
101 
102         Settings.Secure.putIntForUser(mContext.getContentResolver(),
103                 MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 1, MANAGED_USER_ID);
104 
105         mController.updateState(mPreference);
106 
107         assertThat(mPreference.isChecked()).isTrue();
108     }
109 
110     @Test
updateState_preferenceShouldBeDisabled()111     public void updateState_preferenceShouldBeDisabled() {
112         mController.updateState(mPreference);
113 
114         verify(mPreference).setDisabledByAdmin(any());
115     }
116 
117     @Test
onPreferenceChange_shouldUpdateProviderValue()118     public void onPreferenceChange_shouldUpdateProviderValue() {
119         mController.onPreferenceChange(mPreference, false);
120 
121         assertThat(Settings.Secure.getIntForUser(mContext.getContentResolver(),
122                 MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 1, MANAGED_USER_ID))
123                 .isEqualTo(0);
124 
125         mController.onPreferenceChange(mPreference, true);
126 
127         assertThat(Settings.Secure.getIntForUser(mContext.getContentResolver(),
128                 MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 0, MANAGED_USER_ID))
129                 .isEqualTo(1);
130     }
131 
132     @Test
onQuietModeDisabled_preferenceEnabled()133     public void onQuietModeDisabled_preferenceEnabled() {
134         when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(false);
135 
136         mController.updateState(mPreference);
137 
138         assertThat(mPreference.isEnabled()).isTrue();
139     }
140 
141     @Test
onQuietModeEnabled_preferenceDisabledAndUnchecked()142     public void onQuietModeEnabled_preferenceDisabledAndUnchecked() {
143         when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(true);
144 
145         mController.updateState(mPreference);
146 
147         assertThat(mPreference.isEnabled()).isFalse();
148         assertThat(mPreference.isChecked()).isFalse();
149     }
150 
151     @Test
afterQuietModeTurnedOnAndOffWhenPreferenceChecked_toggleCheckedAndEnabled()152     public void afterQuietModeTurnedOnAndOffWhenPreferenceChecked_toggleCheckedAndEnabled() {
153         Settings.Secure.putIntForUser(mContext.getContentResolver(),
154                 MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 1, MANAGED_USER_ID);
155         when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(true);
156 
157         mController.updateState(mPreference);
158 
159         assertThat(mPreference.isEnabled()).isFalse();
160         assertThat(mPreference.isChecked()).isFalse();
161 
162         when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(false);
163 
164         mController.updateState(mPreference);
165 
166         assertThat(mPreference.isEnabled()).isTrue();
167         assertThat(mPreference.isChecked()).isTrue();
168     }
169 
170     @Test
afterQuietModeTurnedOnAndOffWhenPreferenceUnchecked_toggleUncheckedAndEnabled()171     public void afterQuietModeTurnedOnAndOffWhenPreferenceUnchecked_toggleUncheckedAndEnabled() {
172         Settings.Secure.putIntForUser(mContext.getContentResolver(),
173                 MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 0, MANAGED_USER_ID);
174         when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(true);
175 
176         mController.updateState(mPreference);
177 
178         assertThat(mPreference.isEnabled()).isFalse();
179         assertThat(mPreference.isChecked()).isFalse();
180 
181         when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(false);
182 
183         mController.updateState(mPreference);
184 
185         assertThat(mPreference.isEnabled()).isTrue();
186         assertThat(mPreference.isChecked()).isFalse();
187     }
188 }
189