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