116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki/*
216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki * Copyright (C) 2018 The Android Open Source Project
316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki *
416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki * you may not use this file except in compliance with the License.
616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki * You may obtain a copy of the License at
716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki *
816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki *
1016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki * Unless required by applicable law or agreed to in writing, software
1116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
1216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki * See the License for the specific language governing permissions and
1416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki * limitations under the License.
1516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki */
1616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
1716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukipackage com.android.settingslib.fuelgauge;
1816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
195972773e476eb2d5290c644e721016df19b8c9d6Makoto Onukiimport static com.google.common.truth.Truth.assertThat;
2016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport static org.junit.Assert.assertEquals;
215972773e476eb2d5290c644e721016df19b8c9d6Makoto Onukiimport static org.junit.Assert.assertThat;
2216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport static org.mockito.ArgumentMatchers.any;
2316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport static org.mockito.ArgumentMatchers.anyBoolean;
2416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport static org.mockito.ArgumentMatchers.eq;
2516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport static org.mockito.Mockito.times;
2616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport static org.mockito.Mockito.verify;
2716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport static org.mockito.Mockito.when;
2816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
2916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport android.content.ContentResolver;
3016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport android.content.Context;
3116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport android.content.Intent;
3216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport android.os.PowerManager;
335972773e476eb2d5290c644e721016df19b8c9d6Makoto Onukiimport android.provider.Settings.Global;
3416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport android.provider.Settings.Secure;
3516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
3616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport com.android.settingslib.SettingsLibRobolectricTestRunner;
3716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
3816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport org.junit.Before;
3916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport org.junit.Test;
4016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport org.junit.runner.RunWith;
4116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport org.mockito.Mock;
4216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukiimport org.mockito.MockitoAnnotations;
4316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
4416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
4516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki@RunWith(SettingsLibRobolectricTestRunner.class)
4616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onukipublic class BatterySaverUtilsTest {
475972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki    final int BATTERY_SAVER_THRESHOLD_1 = 15;
485972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki    final int BATTERY_SAVER_THRESHOLD_2 = 20;
495972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki
5016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Mock
5116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    Context mMockContext;
5216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
5316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Mock
5416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    ContentResolver mMockResolver;
5516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
5616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Mock
5716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    PowerManager mMockPowerManager;
5816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
5916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Before
6016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    public void setUp() throws Exception {
6116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        MockitoAnnotations.initMocks(this);
6216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
6316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        when(mMockContext.getContentResolver()).thenReturn(mMockResolver);
6416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        when(mMockContext.getSystemService(eq(PowerManager.class))).thenReturn(mMockPowerManager);
6516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        when(mMockPowerManager.setPowerSaveMode(anyBoolean())).thenReturn(true);
6616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    }
6716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
6816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Test
6916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    public void testSetPowerSaveMode_enable_firstCall_needWarning() throws Exception {
7016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
7116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
7216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
7316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(false, BatterySaverUtils.setPowerSaveMode(mMockContext, true, true));
7416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
7516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockContext, times(1)).sendBroadcast(any(Intent.class));
7616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockPowerManager, times(0)).setPowerSaveMode(anyBoolean());
7716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
7816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        // They shouldn't have changed.
7916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(-1,
8016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki                Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
8116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(-2,
8216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki                Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
8316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    }
8416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
8516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Test
8616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    public void testSetPowerSaveMode_enable_secondCall_needWarning() throws Exception {
8716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1); // Already acked.
8816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
8916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
9016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(true, BatterySaverUtils.setPowerSaveMode(mMockContext, true, true));
9116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
9216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
9316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(true));
9416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
9516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
9616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
9716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    }
9816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
9916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Test
10016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    public void testSetPowerSaveMode_enable_thridCall_needWarning() throws Exception {
10116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1); // Already acked.
10216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, 1);
10316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
10416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(true, BatterySaverUtils.setPowerSaveMode(mMockContext, true, true));
10516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
10616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
10716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(true));
10816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
10916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
11016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(2, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
11116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    }
11216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
11316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Test
11416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    public void testSetPowerSaveMode_enable_firstCall_noWarning() throws Exception {
11516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
11616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
11716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
11816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(true, BatterySaverUtils.setPowerSaveMode(mMockContext, true, false));
11916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
12016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
12116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(true));
12216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
12316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
12416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
12516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    }
12616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
12716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Test
12816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    public void testSetPowerSaveMode_disable_firstCall_noWarning() throws Exception {
12916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
13016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
13116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
13216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        // When disabling, needFirstTimeWarning doesn't matter.
13316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(true, BatterySaverUtils.setPowerSaveMode(mMockContext, false, false));
13416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
13516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
13616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(false));
13716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
13816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
13916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(-2,
14016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki                Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
14116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    }
14216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
14316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    @Test
14416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    public void testSetPowerSaveMode_disable_firstCall_needWarning() throws Exception {
14516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
14616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
14716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
14816a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        // When disabling, needFirstTimeWarning doesn't matter.
14916a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(true, BatterySaverUtils.setPowerSaveMode(mMockContext, false, true));
15016a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
15116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
15216a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(false));
15316a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki
15416a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
15516a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki        assertEquals(-2,
15616a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki                Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
15716a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki    }
1585972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki
1595972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki    @Test
1605972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki    public void testEnsureAutoBatterysaver_setNewPositiveValue_doNotOverwrite() throws Exception {
1615972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        Global.putString(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, "null");
1625972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki
1635972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        BatterySaverUtils.ensureAutoBatterySaver(mMockContext, BATTERY_SAVER_THRESHOLD_1);
1645972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki
1655972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        assertThat(Secure.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
1665972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki                .isEqualTo(BATTERY_SAVER_THRESHOLD_1);
1675972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki
1685972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        // Once a positive number is set, ensureAutoBatterySaver() won't overwrite it.
1695972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        BatterySaverUtils.ensureAutoBatterySaver(mMockContext, BATTERY_SAVER_THRESHOLD_2);
1705972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        assertThat(Secure.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
1715972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki                .isEqualTo(BATTERY_SAVER_THRESHOLD_1);
1725972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki    }
1735972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki
1745972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki    @Test
1755972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki    public void testSetAutoBatterySaverTriggerLevel_setSuppressSuggestion() throws Exception {
1765972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        Global.putString(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, "null");
1775972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        Secure.putString(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, "null");
1785972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki
1795972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        BatterySaverUtils.setAutoBatterySaverTriggerLevel(mMockContext, 0);
1805972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        assertThat(Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
1815972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki                .isEqualTo(0);
1825972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        assertThat(Secure.getInt(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, -1))
1835972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki                .isEqualTo(-1); // not set.
1845972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki
1855972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        BatterySaverUtils.setAutoBatterySaverTriggerLevel(mMockContext, BATTERY_SAVER_THRESHOLD_1 );
1865972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        assertThat( Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
1875972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki                .isEqualTo(BATTERY_SAVER_THRESHOLD_1);
1885972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki        assertThat(Secure.getInt(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, -1))
1895972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki                .isEqualTo(1);
1905972773e476eb2d5290c644e721016df19b8c9d6Makoto Onuki    }
19116a0dd2d5eeef320a80afe130e6c1e2946e8d2f1Makoto Onuki}
192