• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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.users;
18 
19 import static android.provider.Settings.Secure.TIMEOUT_TO_DOCK_USER;
20 
21 import static com.google.common.truth.Truth.assertThat;
22 
23 import static org.mockito.Mockito.doReturn;
24 import static org.mockito.Mockito.spy;
25 import static org.mockito.Mockito.when;
26 
27 import android.content.Context;
28 import android.content.res.Resources;
29 import android.os.UserHandle;
30 import android.os.UserManager;
31 import android.provider.Settings;
32 
33 import androidx.test.core.app.ApplicationProvider;
34 
35 import com.android.settings.R;
36 import com.android.settings.Utils;
37 import com.android.settings.core.BasePreferenceController;
38 import com.android.settings.fuelgauge.BatteryBackupHelperTest.ShadowUserHandle;
39 import com.android.settings.testutils.shadow.ShadowSecureSettings;
40 
41 import org.junit.After;
42 import org.junit.Before;
43 import org.junit.Ignore;
44 import org.junit.Test;
45 import org.junit.runner.RunWith;
46 import org.mockito.Mock;
47 import org.mockito.MockitoAnnotations;
48 import org.robolectric.RobolectricTestRunner;
49 import org.robolectric.annotation.Config;
50 
51 @RunWith(RobolectricTestRunner.class)
52 @Config(shadows = {ShadowSecureSettings.class, ShadowUserHandle.class})
53 public class TimeoutToDockUserPreferenceControllerTest {
54     private Context mContext;
55     private Resources mResources;
56     private TimeoutToDockUserPreferenceController mController;
57 
58     @Mock
59     private UserManager mUserManager;
60 
61     private static final String FAKE_PREFERENCE_KEY = "timeout_to_dock_user_preference";
62 
63     private String[] mEntries;
64     private String[] mValues;
65 
66     @Before
setUp()67     public void setUp() {
68         MockitoAnnotations.initMocks(this);
69 
70         mContext = spy(ApplicationProvider.getApplicationContext());
71         mResources = spy(mContext.getResources());
72         doReturn(mResources).when(mContext).getResources();
73         when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
74 
75         mEntries = mResources.getStringArray(
76                 R.array.switch_to_dock_user_when_docked_timeout_entries);
77         mValues = mResources.getStringArray(
78                 R.array.switch_to_dock_user_when_docked_timeout_values);
79 
80         mController = new TimeoutToDockUserPreferenceController(mContext, FAKE_PREFERENCE_KEY);
81 
82         // Feature enabled.
83         when(mResources.getBoolean(
84                 com.android.internal.R.bool.config_enableTimeoutToDockUserWhenDocked)).thenReturn(
85                 true);
86 
87         // Multi-user feature enabled.
88         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.USER_SWITCHER_ENABLED,
89                 1);
90 
91         // User switching not blocked.
92         when(mUserManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH)).thenReturn(false);
93 
94         // Set to user 1;
95         ShadowUserHandle.setUid(1);
96     }
97 
98     @After
tearDown()99     public void tearDown() {
100         ShadowUserHandle.reset();
101     }
102 
103     @Test
getAvailabilityStatus_featureFlagDisabled_returnUnsupportedOnDevice()104     public void getAvailabilityStatus_featureFlagDisabled_returnUnsupportedOnDevice() {
105         when(mResources.getBoolean(
106                 com.android.internal.R.bool.config_enableTimeoutToDockUserWhenDocked)).thenReturn(
107                 false);
108 
109         assertThat(mController.getAvailabilityStatus()).isEqualTo(
110                 BasePreferenceController.UNSUPPORTED_ON_DEVICE);
111     }
112 
113     @Test
getAvailabilityStatus_multiUserDisabled_returnConditionallyUnavailable()114     public void getAvailabilityStatus_multiUserDisabled_returnConditionallyUnavailable() {
115         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.USER_SWITCHER_ENABLED,
116                 0);
117 
118         assertThat(mController.getAvailabilityStatus()).isEqualTo(
119                 BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
120     }
121 
122     @Test
getAvailabilityStatus_userSwitchingBlocked_returnConditionallyUnavailable()123     public void getAvailabilityStatus_userSwitchingBlocked_returnConditionallyUnavailable() {
124         when(mUserManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH)).thenReturn(true);
125 
126         assertThat(mController.getAvailabilityStatus()).isEqualTo(
127                 BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
128     }
129 
130     @Ignore
131     @Test
getAvailabilityStatus_isCurrentlyMainUser_returnDisabledForUser()132     public void getAvailabilityStatus_isCurrentlyMainUser_returnDisabledForUser() {
133         when(Utils.canCurrentUserDream(mContext)).thenReturn(true);
134 
135         assertThat(mController.getAvailabilityStatus()).isEqualTo(
136                 BasePreferenceController.DISABLED_FOR_USER);
137     }
138 
139     @Ignore
140     @Test
getAvailabilityStatus_featureAndMultiUserEnabledAndNonMainUser_returnAvailable()141     public void getAvailabilityStatus_featureAndMultiUserEnabledAndNonMainUser_returnAvailable() {
142         when(Utils.canCurrentUserDream(mContext)).thenReturn(false);
143 
144         assertThat(mController.getAvailabilityStatus()).isEqualTo(
145                 BasePreferenceController.AVAILABLE);
146     }
147 
148     @Test
getSummary_settingNotSet()149     public void getSummary_settingNotSet() {
150         Settings.Secure.putStringForUser(mContext.getContentResolver(), TIMEOUT_TO_DOCK_USER,
151                 null, UserHandle.myUserId());
152 
153         assertThat(mController.getSummary().toString()).isEqualTo(
154                 mEntries[TimeoutToDockUserSettings.DEFAULT_TIMEOUT_SETTING_VALUE_INDEX]);
155     }
156 
157     @Test
getSummary_setToNever()158     public void getSummary_setToNever() {
159         Settings.Secure.putStringForUser(mContext.getContentResolver(), TIMEOUT_TO_DOCK_USER,
160                 mValues[0], UserHandle.myUserId());
161 
162         assertThat(mController.getSummary().toString()).isEqualTo(mEntries[0]);
163     }
164 
165     @Test
getSummary_setToOneMinute()166     public void getSummary_setToOneMinute() {
167         Settings.Secure.putStringForUser(mContext.getContentResolver(), TIMEOUT_TO_DOCK_USER,
168                 mValues[1], UserHandle.myUserId());
169 
170         assertThat(mController.getSummary().toString()).isEqualTo(mEntries[1]);
171     }
172 }
173