blob: 2988905b44a63d0b3cf056358fd7425b58571081 [file] [log] [blame]
Makoto Onuki16a0dd22018-03-20 10:40:37 -07001/*
2 * Copyright (C) 2018 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
17package com.android.settingslib.fuelgauge;
18
Makoto Onuki59727732018-04-04 12:44:05 -070019import static com.google.common.truth.Truth.assertThat;
Fan Zhangf7802ea2018-08-28 15:15:19 -070020
Makoto Onuki16a0dd22018-03-20 10:40:37 -070021import static org.junit.Assert.assertEquals;
22import static org.mockito.ArgumentMatchers.any;
23import static org.mockito.ArgumentMatchers.anyBoolean;
24import static org.mockito.ArgumentMatchers.eq;
25import static org.mockito.Mockito.times;
26import static org.mockito.Mockito.verify;
27import static org.mockito.Mockito.when;
28
29import android.content.ContentResolver;
30import android.content.Context;
31import android.content.Intent;
32import android.os.PowerManager;
Makoto Onuki59727732018-04-04 12:44:05 -070033import android.provider.Settings.Global;
Makoto Onuki16a0dd22018-03-20 10:40:37 -070034import android.provider.Settings.Secure;
35
Makoto Onuki16a0dd22018-03-20 10:40:37 -070036import org.junit.Before;
37import org.junit.Test;
38import org.junit.runner.RunWith;
39import org.mockito.Mock;
40import org.mockito.MockitoAnnotations;
James Lemieuxec3ad9e2018-11-28 17:49:14 -080041import org.robolectric.RobolectricTestRunner;
Makoto Onuki16a0dd22018-03-20 10:40:37 -070042
James Lemieuxec3ad9e2018-11-28 17:49:14 -080043@RunWith(RobolectricTestRunner.class)
Makoto Onuki16a0dd22018-03-20 10:40:37 -070044public class BatterySaverUtilsTest {
James Lemieuxec3ad9e2018-11-28 17:49:14 -080045 private static final int BATTERY_SAVER_THRESHOLD_1 = 15;
46 private static final int BATTERY_SAVER_THRESHOLD_2 = 20;
Makoto Onuki59727732018-04-04 12:44:05 -070047
Makoto Onuki16a0dd22018-03-20 10:40:37 -070048 @Mock
James Lemieuxec3ad9e2018-11-28 17:49:14 -080049 private Context mMockContext;
Makoto Onuki16a0dd22018-03-20 10:40:37 -070050
51 @Mock
James Lemieuxec3ad9e2018-11-28 17:49:14 -080052 private ContentResolver mMockResolver;
Makoto Onuki16a0dd22018-03-20 10:40:37 -070053
54 @Mock
James Lemieuxec3ad9e2018-11-28 17:49:14 -080055 private PowerManager mMockPowerManager;
Makoto Onuki16a0dd22018-03-20 10:40:37 -070056
57 @Before
58 public void setUp() throws Exception {
59 MockitoAnnotations.initMocks(this);
60
61 when(mMockContext.getContentResolver()).thenReturn(mMockResolver);
62 when(mMockContext.getSystemService(eq(PowerManager.class))).thenReturn(mMockPowerManager);
63 when(mMockPowerManager.setPowerSaveMode(anyBoolean())).thenReturn(true);
64 }
65
66 @Test
James Lemieuxec3ad9e2018-11-28 17:49:14 -080067 public void testSetPowerSaveMode_enable_firstCall_needWarning() {
Makoto Onuki16a0dd22018-03-20 10:40:37 -070068 Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
69 Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
70
James Lemieuxec3ad9e2018-11-28 17:49:14 -080071 assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true)).isFalse();
Makoto Onuki16a0dd22018-03-20 10:40:37 -070072
73 verify(mMockContext, times(1)).sendBroadcast(any(Intent.class));
74 verify(mMockPowerManager, times(0)).setPowerSaveMode(anyBoolean());
75
76 // They shouldn't have changed.
77 assertEquals(-1,
78 Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
79 assertEquals(-2,
80 Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
81 }
82
83 @Test
James Lemieuxec3ad9e2018-11-28 17:49:14 -080084 public void testSetPowerSaveMode_enable_secondCall_needWarning() {
Makoto Onuki16a0dd22018-03-20 10:40:37 -070085 Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1); // Already acked.
86 Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
87
James Lemieuxec3ad9e2018-11-28 17:49:14 -080088 assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true)).isTrue();
Makoto Onuki16a0dd22018-03-20 10:40:37 -070089
90 verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
91 verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(true));
92
93 assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
94 assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
95 }
96
97 @Test
James Lemieuxec3ad9e2018-11-28 17:49:14 -080098 public void testSetPowerSaveMode_enable_thridCall_needWarning() {
Makoto Onuki16a0dd22018-03-20 10:40:37 -070099 Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1); // Already acked.
100 Secure.putInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, 1);
101
James Lemieuxec3ad9e2018-11-28 17:49:14 -0800102 assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true)).isTrue();
Makoto Onuki16a0dd22018-03-20 10:40:37 -0700103
104 verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
105 verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(true));
106
107 assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
108 assertEquals(2, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
109 }
110
111 @Test
James Lemieuxec3ad9e2018-11-28 17:49:14 -0800112 public void testSetPowerSaveMode_enable_firstCall_noWarning() {
Makoto Onuki16a0dd22018-03-20 10:40:37 -0700113 Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
114 Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
115
James Lemieuxec3ad9e2018-11-28 17:49:14 -0800116 assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, false)).isTrue();
Makoto Onuki16a0dd22018-03-20 10:40:37 -0700117
118 verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
119 verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(true));
120
121 assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
122 assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
123 }
124
125 @Test
James Lemieuxec3ad9e2018-11-28 17:49:14 -0800126 public void testSetPowerSaveMode_disable_firstCall_noWarning() {
Makoto Onuki16a0dd22018-03-20 10:40:37 -0700127 Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
128 Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
129
130 // When disabling, needFirstTimeWarning doesn't matter.
James Lemieuxec3ad9e2018-11-28 17:49:14 -0800131 assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, false, false)).isTrue();
Makoto Onuki16a0dd22018-03-20 10:40:37 -0700132
133 verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
134 verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(false));
135
136 assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
137 assertEquals(-2,
138 Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
139 }
140
141 @Test
James Lemieuxec3ad9e2018-11-28 17:49:14 -0800142 public void testSetPowerSaveMode_disable_firstCall_needWarning() {
Makoto Onuki16a0dd22018-03-20 10:40:37 -0700143 Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
144 Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
145
146 // When disabling, needFirstTimeWarning doesn't matter.
James Lemieuxec3ad9e2018-11-28 17:49:14 -0800147 assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, false, true)).isTrue();
Makoto Onuki16a0dd22018-03-20 10:40:37 -0700148
149 verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
150 verify(mMockPowerManager, times(1)).setPowerSaveMode(eq(false));
151
152 assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
153 assertEquals(-2,
154 Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
155 }
Makoto Onuki59727732018-04-04 12:44:05 -0700156
157 @Test
James Lemieuxec3ad9e2018-11-28 17:49:14 -0800158 public void testEnsureAutoBatterysaver_setNewPositiveValue_doNotOverwrite() {
Fan Zhangafa36932018-10-11 14:44:48 -0700159 Global.putInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
Makoto Onuki59727732018-04-04 12:44:05 -0700160
161 BatterySaverUtils.ensureAutoBatterySaver(mMockContext, BATTERY_SAVER_THRESHOLD_1);
162
Fan Zhangafa36932018-10-11 14:44:48 -0700163 assertThat(Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
Makoto Onuki59727732018-04-04 12:44:05 -0700164 .isEqualTo(BATTERY_SAVER_THRESHOLD_1);
165
166 // Once a positive number is set, ensureAutoBatterySaver() won't overwrite it.
167 BatterySaverUtils.ensureAutoBatterySaver(mMockContext, BATTERY_SAVER_THRESHOLD_2);
Fan Zhangafa36932018-10-11 14:44:48 -0700168 assertThat(Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
Makoto Onuki59727732018-04-04 12:44:05 -0700169 .isEqualTo(BATTERY_SAVER_THRESHOLD_1);
170 }
171
172 @Test
James Lemieuxec3ad9e2018-11-28 17:49:14 -0800173 public void testSetAutoBatterySaverTriggerLevel_setSuppressSuggestion() {
Makoto Onuki59727732018-04-04 12:44:05 -0700174 Global.putString(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, "null");
175 Secure.putString(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, "null");
176
177 BatterySaverUtils.setAutoBatterySaverTriggerLevel(mMockContext, 0);
178 assertThat(Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
179 .isEqualTo(0);
180 assertThat(Secure.getInt(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, -1))
181 .isEqualTo(-1); // not set.
182
Fan Zhangafa36932018-10-11 14:44:48 -0700183 BatterySaverUtils.setAutoBatterySaverTriggerLevel(mMockContext, BATTERY_SAVER_THRESHOLD_1);
184 assertThat(Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
Makoto Onuki59727732018-04-04 12:44:05 -0700185 .isEqualTo(BATTERY_SAVER_THRESHOLD_1);
186 assertThat(Secure.getInt(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, -1))
187 .isEqualTo(1);
188 }
Makoto Onuki16a0dd22018-03-20 10:40:37 -0700189}