Merge changes Iced0fa59,Ic354ac91,I0b4cb6ca,I9c1d3761 into sc-dev
* changes: Add footer to app usage page Update app usage page with 3 radio button control Add 3 controller for app usage page radio buttons Add utils class for app usage operation
This commit is contained in:
@@ -23,6 +23,7 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.nullable;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
@@ -58,6 +59,7 @@ import com.android.settingslib.applications.ApplicationsState;
|
||||
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.widget.LayoutPreference;
|
||||
import com.android.settingslib.widget.RadioButtonPreference;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@@ -96,6 +98,9 @@ public class AdvancedPowerUsageDetailTest {
|
||||
private static final long PROCSTATE_TOP_TIME_US = PROCSTATE_TOP_TIME_MS * 1000;
|
||||
private static final long PHONE_FOREGROUND_TIME_MS = 250 * 1000;
|
||||
private static final long PHONE_BACKGROUND_TIME_MS = 0;
|
||||
private static final String KEY_PREF_UNRESTRICTED = "unrestricted_pref";
|
||||
private static final String KEY_PREF_OPTIMIZED = "optimized_pref";
|
||||
private static final String KEY_PREF_RESTRICTED = "restricted_pref";
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private FragmentActivity mActivity;
|
||||
@@ -121,9 +126,15 @@ public class AdvancedPowerUsageDetailTest {
|
||||
private BatteryStats.Timer mForegroundActivityTimer;
|
||||
@Mock
|
||||
private BatteryUtils mBatteryUtils;
|
||||
@Mock
|
||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
private Context mContext;
|
||||
private Preference mForegroundPreference;
|
||||
private Preference mBackgroundPreference;
|
||||
private Preference mFooterPreference;
|
||||
private RadioButtonPreference mRestrictedPreference;
|
||||
private RadioButtonPreference mOptimizePreference;
|
||||
private RadioButtonPreference mUnrestrictedPreference;
|
||||
private AdvancedPowerUsageDetail mFragment;
|
||||
private SettingsActivity mTestActivity;
|
||||
|
||||
@@ -170,6 +181,7 @@ public class AdvancedPowerUsageDetailTest {
|
||||
mFragment.mHeaderPreference = mHeaderPreference;
|
||||
mFragment.mState = mState;
|
||||
mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application);
|
||||
mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
|
||||
mAppEntry.info = mock(ApplicationInfo.class);
|
||||
|
||||
mTestActivity = spy(new SettingsActivity());
|
||||
@@ -194,8 +206,16 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
mForegroundPreference = new Preference(mContext);
|
||||
mBackgroundPreference = new Preference(mContext);
|
||||
mFooterPreference = new Preference(mContext);
|
||||
mRestrictedPreference = new RadioButtonPreference(mContext);
|
||||
mOptimizePreference = new RadioButtonPreference(mContext);
|
||||
mUnrestrictedPreference = new RadioButtonPreference(mContext);
|
||||
mFragment.mForegroundPreference = mForegroundPreference;
|
||||
mFragment.mBackgroundPreference = mBackgroundPreference;
|
||||
mFragment.mFooterPreference = mFooterPreference;
|
||||
mFragment.mRestrictedPreference = mRestrictedPreference;
|
||||
mFragment.mOptimizePreference = mOptimizePreference;
|
||||
mFragment.mUnrestrictedPreference = mUnrestrictedPreference;
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -352,4 +372,48 @@ public class AdvancedPowerUsageDetailTest {
|
||||
assertThat(mForegroundPreference.getSummary().toString()).isEqualTo("Used for 0 min");
|
||||
assertThat(mBackgroundPreference.getSummary().toString()).isEqualTo("Active for 0 min");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitPreference_isValidPackageName_hasCorrectString() {
|
||||
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(false);
|
||||
|
||||
mFragment.initPreference();
|
||||
|
||||
assertThat(mFooterPreference.getTitle().toString())
|
||||
.isEqualTo("This app requires Optimized battery usage.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitPreference_isSystemOrDefaultApp_hasCorrectString() {
|
||||
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
|
||||
mFragment.initPreference();
|
||||
|
||||
assertThat(mFooterPreference.getTitle()
|
||||
.toString()).isEqualTo("This app requires Unrestricted battery usage.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitPreference_hasCorrectString() {
|
||||
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
|
||||
|
||||
mFragment.initPreference();
|
||||
|
||||
assertThat(mFooterPreference.getTitle().toString())
|
||||
.isEqualTo("Changing how an app uses your battery can affect its performance.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnRadioButtonClicked_clickOptimizePref_optimizePreferenceChecked() {
|
||||
mOptimizePreference.setKey(KEY_PREF_OPTIMIZED);
|
||||
mRestrictedPreference.setKey(KEY_PREF_RESTRICTED);
|
||||
mUnrestrictedPreference.setKey(KEY_PREF_UNRESTRICTED);
|
||||
mFragment.onRadioButtonClicked(mOptimizePreference);
|
||||
|
||||
assertThat(mOptimizePreference.isChecked()).isTrue();
|
||||
assertThat(mRestrictedPreference.isChecked()).isFalse();
|
||||
assertThat(mUnrestrictedPreference.isChecked()).isFalse();
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.fuelgauge;
|
||||
|
||||
import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.OPTIMIZED;
|
||||
import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.RESTRICTED;
|
||||
import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.UNRESTRICTED;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.AppOpsManager;
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class BatteryOptimizeUtilsTest {
|
||||
|
||||
private static final int UID = 12345;
|
||||
private static final String PACKAGE_NAME = "com.android.app";
|
||||
|
||||
@Mock BatteryUtils mockBatteryUtils;
|
||||
@Mock AppOpsManager mockAppOpsManager;
|
||||
@Mock PowerAllowlistBackend mockBackend;
|
||||
|
||||
private Context mContext;
|
||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(mContext, UID, PACKAGE_NAME));
|
||||
mBatteryOptimizeUtils.mAppOpsManager = mockAppOpsManager;
|
||||
mBatteryOptimizeUtils.mBatteryUtils = mockBatteryUtils;
|
||||
mBatteryOptimizeUtils.mPowerAllowListBackend = mockBackend;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAppUsageState_returnRestricted() {
|
||||
when(mockBackend.isAllowlisted(anyString())).thenReturn(false);
|
||||
when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||
.thenReturn(AppOpsManager.MODE_IGNORED);
|
||||
|
||||
assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(RESTRICTED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAppUsageState_returnUnrestricted() {
|
||||
when(mockBackend.isAllowlisted(anyString())).thenReturn(true);
|
||||
when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||
|
||||
assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(UNRESTRICTED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAppUsageState_returnOptimized() {
|
||||
when(mockBackend.isAllowlisted(anyString())).thenReturn(false);
|
||||
when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||
|
||||
assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(OPTIMIZED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsSystemOrDefaultApp_isSystemOrDefaultApp_returnTrue() {
|
||||
when(mockBackend.isAllowlisted(anyString())).thenReturn(true);
|
||||
when(mockBackend.isDefaultActiveApp(anyString())).thenReturn(true);
|
||||
|
||||
assertThat(mBatteryOptimizeUtils.isSystemOrDefaultApp()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsSystemOrDefaultApp_notSystemOrDefaultApp_returnFalse() {
|
||||
assertThat(mBatteryOptimizeUtils.isSystemOrDefaultApp()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsValidPackageName_InvalidPackageName_returnFalse() {
|
||||
final BatteryOptimizeUtils testBatteryOptimizeUtils =
|
||||
new BatteryOptimizeUtils(mContext, UID, null);
|
||||
|
||||
assertThat(testBatteryOptimizeUtils.isValidPackageName()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsValidPackageName_validPackageName_returnTrue() {
|
||||
assertThat(mBatteryOptimizeUtils.isValidPackageName()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetAppUsageState_Restricted_verifyAction() {
|
||||
mBatteryOptimizeUtils.setAppUsageState(RESTRICTED);
|
||||
|
||||
verify(mockBatteryUtils).setForceAppStandby(UID,
|
||||
PACKAGE_NAME, AppOpsManager.MODE_IGNORED);
|
||||
verify(mockBackend).removeApp(PACKAGE_NAME);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetAppUsageState_Unrestricted_verifyAction() {
|
||||
mBatteryOptimizeUtils.setAppUsageState(UNRESTRICTED);
|
||||
|
||||
verify(mockBatteryUtils).setForceAppStandby(UID,
|
||||
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
|
||||
verify(mockBackend).addApp(PACKAGE_NAME);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetAppUsageState_Optimized_verifyAction() {
|
||||
mBatteryOptimizeUtils.setAppUsageState(OPTIMIZED);
|
||||
|
||||
verify(mockBatteryUtils).setForceAppStandby(UID,
|
||||
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
|
||||
verify(mockBackend).removeApp(PACKAGE_NAME);
|
||||
}
|
||||
}
|
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.fuelgauge;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import com.android.settingslib.widget.RadioButtonPreference;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class OptimizedPreferenceControllerTest {
|
||||
private static final int UID = 12345;
|
||||
private static final String PACKAGE_NAME = "com.android.app";
|
||||
|
||||
private OptimizedPreferenceController mController;
|
||||
private RadioButtonPreference mPreference;
|
||||
|
||||
@Mock BatteryOptimizeUtils mockBatteryOptimizeUtils;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mController = new OptimizedPreferenceController(
|
||||
RuntimeEnvironment.application, UID, PACKAGE_NAME);
|
||||
mPreference = new RadioButtonPreference(RuntimeEnvironment.application);
|
||||
mController.mBatteryOptimizeUtils = mockBatteryOptimizeUtils;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_invalidPackage_prefEnabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(false);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isEnabled()).isTrue();
|
||||
assertThat(mPreference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isChecked()).isFalse();
|
||||
assertThat(mPreference.isEnabled()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isOptimizedStates_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn(
|
||||
BatteryOptimizeUtils.AppUsageState.OPTIMIZED);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isChecked()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
|
||||
mPreference.setKey(mController.KEY_OPTIMIZED_PREF);
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
verify(mockBatteryOptimizeUtils).setAppUsageState(
|
||||
BatteryOptimizeUtils.AppUsageState.OPTIMIZED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() {
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
verifyZeroInteractions(mockBatteryOptimizeUtils);
|
||||
}
|
||||
}
|
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.fuelgauge;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import com.android.settingslib.widget.RadioButtonPreference;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class RestrictedPreferenceControllerTest {
|
||||
private static final int UID = 12345;
|
||||
private static final String PACKAGE_NAME = "com.android.app";
|
||||
|
||||
private RestrictedPreferenceController mController;
|
||||
private RadioButtonPreference mPreference;
|
||||
|
||||
@Mock BatteryOptimizeUtils mockBatteryOptimizeUtils;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mController = new RestrictedPreferenceController(
|
||||
RuntimeEnvironment.application, UID, PACKAGE_NAME);
|
||||
mPreference = new RadioButtonPreference(RuntimeEnvironment.application);
|
||||
mController.mBatteryOptimizeUtils = mockBatteryOptimizeUtils;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isValidPackage_prefEnabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isEnabled()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_invalidPackage_prefDisabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(false);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isEnabled()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isSystemOrDefaultApp_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isChecked()).isFalse();
|
||||
assertThat(mPreference.isEnabled()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isRestrictedStates_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn(
|
||||
BatteryOptimizeUtils.AppUsageState.RESTRICTED);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isChecked()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
|
||||
mPreference.setKey(mController.KEY_RESTRICTED_PREF);
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
verify(mockBatteryOptimizeUtils).setAppUsageState(
|
||||
BatteryOptimizeUtils.AppUsageState.RESTRICTED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() {
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
verifyZeroInteractions(mockBatteryOptimizeUtils);
|
||||
}
|
||||
}
|
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.android.settings.fuelgauge;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import com.android.settingslib.widget.RadioButtonPreference;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class UnrestrictedPreferenceControllerTest {
|
||||
private static final int UID = 12345;
|
||||
private static final String PACKAGE_NAME = "com.android.app";
|
||||
|
||||
private UnrestrictedPreferenceController mController;
|
||||
private RadioButtonPreference mPreference;
|
||||
|
||||
@Mock BatteryOptimizeUtils mockBatteryOptimizeUtils;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mController = new UnrestrictedPreferenceController(
|
||||
RuntimeEnvironment.application, UID, PACKAGE_NAME);
|
||||
mPreference = new RadioButtonPreference(RuntimeEnvironment.application);
|
||||
mController.mBatteryOptimizeUtils = mockBatteryOptimizeUtils;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isValidPackage_prefEnabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isEnabled()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_invalidPackage_prefDisabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(false);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isEnabled()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isSystemOrDefaultApp_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isUnrestrictedStates_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn(
|
||||
BatteryOptimizeUtils.AppUsageState.UNRESTRICTED);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.isChecked()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
|
||||
mPreference.setKey(mController.KEY_UNRESTRICTED_PREF);
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
verify(mockBatteryOptimizeUtils).setAppUsageState(
|
||||
BatteryOptimizeUtils.AppUsageState.UNRESTRICTED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() {
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
verifyZeroInteractions(mockBatteryOptimizeUtils);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user