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.server.utils;
18 
19 import static com.android.server.utils.FoldSettingProvider.SETTING_VALUE_SLEEP_ON_FOLD;
20 import static com.android.server.utils.FoldSettingProvider.SETTING_VALUE_STAY_AWAKE_ON_FOLD;
21 
22 import static com.google.common.truth.Truth.assertThat;
23 
24 import static org.mockito.ArgumentMatchers.any;
25 import static org.mockito.ArgumentMatchers.eq;
26 import static org.mockito.Mockito.when;
27 
28 import android.content.ContentResolver;
29 import android.content.Context;
30 import android.content.res.Resources;
31 import android.os.UserHandle;
32 import android.provider.Settings;
33 
34 import androidx.test.platform.app.InstrumentationRegistry;
35 
36 import com.android.internal.R;
37 import com.android.internal.util.SettingsWrapper;
38 
39 import org.junit.Before;
40 import org.junit.Test;
41 import org.mockito.Mock;
42 import org.mockito.MockitoAnnotations;
43 
44 public class FoldSettingProviderTest {
45 
46     private static final String SETTING_VALUE_INVALID = "invalid_fold_lock_behavior";
47 
48     @Mock
49     private Context mContext;
50     @Mock
51     private Resources mResources;
52     @Mock
53     private SettingsWrapper mSettingsWrapper;
54     private ContentResolver mContentResolver;
55     private FoldSettingProvider mFoldSettingProvider;
56 
57     @Before
setUp()58     public void setUp() {
59         MockitoAnnotations.initMocks(this);
60 
61         mContentResolver =
62                 InstrumentationRegistry.getInstrumentation().getContext().getContentResolver();
63         when(mContext.getContentResolver()).thenReturn(mContentResolver);
64         when(mContext.getResources()).thenReturn(mResources);
65         setFoldLockBehaviorAvailability(true);
66 
67         mFoldSettingProvider = new FoldSettingProvider(mContext, mSettingsWrapper);
68     }
69 
70     @Test
foldSettingNotAvailable_returnDefaultSetting()71     public void foldSettingNotAvailable_returnDefaultSetting() {
72         setFoldLockBehaviorAvailability(false);
73         setFoldLockBehaviorSettingValue(SETTING_VALUE_STAY_AWAKE_ON_FOLD);
74         mFoldSettingProvider = new FoldSettingProvider(mContext, mSettingsWrapper);
75 
76         boolean shouldSelectiveStayAwakeOnFold =
77                 mFoldSettingProvider.shouldSelectiveStayAwakeOnFold();
78 
79         assertThat(shouldSelectiveStayAwakeOnFold).isTrue();
80     }
81 
82     @Test
foldSettingNotAvailable_notReturnStayAwakeOnFoldTrue()83     public void foldSettingNotAvailable_notReturnStayAwakeOnFoldTrue() {
84         setFoldLockBehaviorAvailability(false);
85         setFoldLockBehaviorSettingValue(SETTING_VALUE_STAY_AWAKE_ON_FOLD);
86         mFoldSettingProvider = new FoldSettingProvider(mContext, mSettingsWrapper);
87 
88         boolean shouldStayAwakeOnFold = mFoldSettingProvider.shouldStayAwakeOnFold();
89 
90         assertThat(shouldStayAwakeOnFold).isFalse();
91     }
92 
93     @Test
foldSettingNotAvailable_notReturnSleepOnFoldTrue()94     public void foldSettingNotAvailable_notReturnSleepOnFoldTrue() {
95         setFoldLockBehaviorAvailability(false);
96         setFoldLockBehaviorSettingValue(SETTING_VALUE_SLEEP_ON_FOLD);
97         mFoldSettingProvider = new FoldSettingProvider(mContext, mSettingsWrapper);
98 
99         boolean shouldSleepOnFold = mFoldSettingProvider.shouldSleepOnFold();
100 
101         assertThat(shouldSleepOnFold).isFalse();
102     }
103 
104     @Test
foldSettingAvailable_returnCorrectFoldSetting()105     public void foldSettingAvailable_returnCorrectFoldSetting() {
106         setFoldLockBehaviorSettingValue(SETTING_VALUE_STAY_AWAKE_ON_FOLD);
107 
108         boolean shouldStayAwakeOnFold = mFoldSettingProvider.shouldStayAwakeOnFold();
109 
110         assertThat(shouldStayAwakeOnFold).isTrue();
111     }
112 
113     @Test
foldSettingInvalid_returnDefaultSetting()114     public void foldSettingInvalid_returnDefaultSetting() {
115         setFoldLockBehaviorSettingValue(SETTING_VALUE_INVALID);
116 
117         boolean shouldSelectiveStayAwakeOnFold =
118                 mFoldSettingProvider.shouldSelectiveStayAwakeOnFold();
119 
120         assertThat(shouldSelectiveStayAwakeOnFold).isTrue();
121     }
122 
123     @Test
foldSettingNotDefined_returnDefaultSetting()124     public void foldSettingNotDefined_returnDefaultSetting() {
125         setFoldLockBehaviorSettingValue(null);
126 
127         boolean shouldSelectiveStayAwakeOnFold =
128                 mFoldSettingProvider.shouldSelectiveStayAwakeOnFold();
129 
130         assertThat(shouldSelectiveStayAwakeOnFold).isTrue();
131     }
132 
setFoldLockBehaviorAvailability(boolean isFoldLockBehaviorEnabled)133     private void setFoldLockBehaviorAvailability(boolean isFoldLockBehaviorEnabled) {
134         when(mResources.getBoolean(R.bool.config_fold_lock_behavior)).thenReturn(
135                 isFoldLockBehaviorEnabled);
136     }
137 
setFoldLockBehaviorSettingValue(String foldLockBehaviorSettingValue)138     private void setFoldLockBehaviorSettingValue(String foldLockBehaviorSettingValue) {
139         when(mSettingsWrapper.getStringForUser(any(),
140                 eq(Settings.System.FOLD_LOCK_BEHAVIOR),
141                 eq(UserHandle.USER_CURRENT))).thenReturn(foldLockBehaviorSettingValue);
142     }
143 }
144