Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23b3a96f authored by YK Hung's avatar YK Hung Committed by Android (Google) Code Review
Browse files

Merge "Log battery saver disabled event and reason (1/2)" into udc-dev

parents 7206bf09 8fafd67d
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -32,9 +32,13 @@ public final class BatterySaverLogging {
    public static final String EXTRA_POWER_SAVE_MODE_MANUAL_ENABLED_REASON =
            "extra_power_save_mode_manual_enabled_reason";

    /** Record the event while enabling power save mode manually. */
    public static final String EXTRA_POWER_SAVE_MODE_MANUAL_ENABLED =
            "extra_power_save_mode_manual_enabled";

    /** Broadcast action to record battery saver manual enabled reason. */
    public static final String ACTION_SAVER_MANUAL_ENABLED_REASON =
            "com.android.settingslib.fuelgauge.ACTION_SAVER_MANUAL_ENABLED_REASON";
    public static final String ACTION_SAVER_STATE_MANUAL_UPDATE =
            "com.android.settingslib.fuelgauge.ACTION_SAVER_STATE_MANUAL_UPDATE";

    /** An interface for the battery saver manual enable reason. */
    @Retention(RetentionPolicy.SOURCE)
+7 −6
Original line number Diff line number Diff line
@@ -16,7 +16,8 @@

package com.android.settingslib.fuelgauge;

import static com.android.settingslib.fuelgauge.BatterySaverLogging.ACTION_SAVER_MANUAL_ENABLED_REASON;
import static com.android.settingslib.fuelgauge.BatterySaverLogging.ACTION_SAVER_STATE_MANUAL_UPDATE;
import static com.android.settingslib.fuelgauge.BatterySaverLogging.EXTRA_POWER_SAVE_MODE_MANUAL_ENABLED;
import static com.android.settingslib.fuelgauge.BatterySaverLogging.EXTRA_POWER_SAVE_MODE_MANUAL_ENABLED_REASON;
import static com.android.settingslib.fuelgauge.BatterySaverLogging.SaverManualEnabledReason;

@@ -152,9 +153,8 @@ public class BatterySaverUtils {
                    sendSystemUiBroadcast(context, ACTION_SHOW_AUTO_SAVER_SUGGESTION,
                            confirmationExtras);
                }
                recordBatterySaverEnabledReason(context, reason);
            }

            recordBatterySaverEnabledReason(context, enable, reason);
            return true;
        }
        return false;
@@ -185,11 +185,12 @@ public class BatterySaverUtils {
        return true;
    }

    private static void recordBatterySaverEnabledReason(Context context,
    private static void recordBatterySaverEnabledReason(Context context, boolean enable,
            @SaverManualEnabledReason int reason) {
        final Bundle enabledReasonExtras = new Bundle(1);
        final Bundle enabledReasonExtras = new Bundle(2);
        enabledReasonExtras.putInt(EXTRA_POWER_SAVE_MODE_MANUAL_ENABLED_REASON, reason);
        sendSystemUiBroadcast(context, ACTION_SAVER_MANUAL_ENABLED_REASON, enabledReasonExtras);
        enabledReasonExtras.putBoolean(EXTRA_POWER_SAVE_MODE_MANUAL_ENABLED, enable);
        sendSystemUiBroadcast(context, ACTION_SAVER_STATE_MANUAL_UPDATE, enabledReasonExtras);
    }

    private static void sendSystemUiBroadcast(Context context, String action, Bundle extras) {
+72 −36
Original line number Diff line number Diff line
@@ -16,14 +16,16 @@

package com.android.settingslib.fuelgauge;

import static com.android.settingslib.fuelgauge.BatterySaverLogging.ACTION_SAVER_STATE_MANUAL_UPDATE;
import static com.android.settingslib.fuelgauge.BatterySaverLogging.SAVER_ENABLED_UNKNOWN;
import static com.android.settingslib.fuelgauge.BatterySaverUtils.ACTION_SHOW_AUTO_SAVER_SUGGESTION;
import static com.android.settingslib.fuelgauge.BatterySaverUtils.ACTION_SHOW_START_SAVER_CONFIRMATION;
import static com.android.settingslib.fuelgauge.BatterySaverUtils.KEY_NO_SCHEDULE;
import static com.android.settingslib.fuelgauge.BatterySaverUtils.KEY_PERCENTAGE;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
@@ -40,10 +42,13 @@ import android.provider.Settings.Secure;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;

import java.util.List;

@RunWith(RobolectricTestRunner.class)
public class BatterySaverUtilsTest {
    private static final int BATTERY_SAVER_THRESHOLD_1 = 15;
@@ -68,7 +73,7 @@ public class BatterySaverUtilsTest {
    }

    @Test
    public void testSetPowerSaveMode_enable_firstCall_needWarning() {
    public void testSetPowerSaveMode_enableWithWarning_firstCall_needConfirmationWarning() {
        Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
@@ -76,9 +81,12 @@ public class BatterySaverUtilsTest {
        assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true,
                SAVER_ENABLED_UNKNOWN)).isFalse();

        verify(mMockContext, times(1)).sendBroadcast(any(Intent.class));
        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mMockContext, times(1)).sendBroadcast(intentCaptor.capture());
        verify(mMockPowerManager, times(0)).setPowerSaveModeEnabled(anyBoolean());

        assertThat(intentCaptor.getValue().getAction()).isEqualTo(
                ACTION_SHOW_START_SAVER_CONFIRMATION);
        // They shouldn't have changed.
        assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(-1,
@@ -88,7 +96,7 @@ public class BatterySaverUtilsTest {
    }

    @Test
    public void testSetPowerSaveMode_enable_secondCall_needWarning() {
    public void testSetPowerSaveMode_enableWithWarning_secondCall_expectUpdateIntent() {
        // Already acked.
        Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1);
        Secure.putInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, 1);
@@ -97,8 +105,12 @@ public class BatterySaverUtilsTest {
        assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true,
                SAVER_ENABLED_UNKNOWN)).isTrue();

        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mMockContext, times(1)).sendBroadcast(intentCaptor.capture());
        verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true));

        assertThat(intentCaptor.getValue().getAction()).isEqualTo(
                ACTION_SAVER_STATE_MANUAL_UPDATE);
        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(1,
                Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1));
@@ -107,7 +119,7 @@ public class BatterySaverUtilsTest {
    }

    @Test
    public void testSetPowerSaveMode_enable_thridCall_needWarning() {
    public void testSetPowerSaveMode_enableWithWarning_thirdCall_expectUpdateIntent() {
        // Already acked.
        Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1);
        Secure.putInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, 1);
@@ -116,8 +128,12 @@ public class BatterySaverUtilsTest {
        assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true,
                SAVER_ENABLED_UNKNOWN)).isTrue();

        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mMockContext, times(1)).sendBroadcast(intentCaptor.capture());
        verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true));

        assertThat(intentCaptor.getValue().getAction()).isEqualTo(
                ACTION_SAVER_STATE_MANUAL_UPDATE);
        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(1,
                Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1));
@@ -126,60 +142,58 @@ public class BatterySaverUtilsTest {
    }

    @Test
    public void testSetPowerSaveMode_enable_firstCall_noWarning() {
        Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");
    public void testSetPowerSaveMode_enableWithWarning_5thCall_needAutoSuggestionWarning() {
        // Already acked.
        Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1);
        Secure.putInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, 1);
        Secure.putInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, 3);

        assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, false,
        assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true,
                SAVER_ENABLED_UNKNOWN)).isTrue();

        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mMockContext, times(2)).sendBroadcast(intentCaptor.capture());
        verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true));

        List<Intent> values = intentCaptor.getAllValues();
        assertThat(values.get(0).getAction()).isEqualTo(ACTION_SHOW_AUTO_SAVER_SUGGESTION);
        assertThat(values.get(1).getAction()).isEqualTo(ACTION_SAVER_STATE_MANUAL_UPDATE);
        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(1,
                Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
        assertEquals(4,
                Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
    }

    @Test
    public void testSetPowerSaveMode_disable_firstCall_noWarning() {
    public void testSetPowerSaveMode_enableWithoutWarning_expectUpdateIntent() {
        Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");

        // When disabling, needFirstTimeWarning doesn't matter.
        assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, false, false,
        assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, false,
                SAVER_ENABLED_UNKNOWN)).isTrue();

        verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
        verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(false));
        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mMockContext, times(1)).sendBroadcast(intentCaptor.capture());
        verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true));

        assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(-1,
        assertThat(intentCaptor.getValue().getAction()).isEqualTo(
                ACTION_SAVER_STATE_MANUAL_UPDATE);
        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(1,
                Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(-2,
                Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
        assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
    }

    @Test
    public void testSetPowerSaveMode_disable_firstCall_needWarning() {
        Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");

        // When disabling, needFirstTimeWarning doesn't matter.
        assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, false, true,
                SAVER_ENABLED_UNKNOWN)).isTrue();

        verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
        verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(false));
    public void testSetPowerSaveMode_disableWithoutWarning_expectUpdateIntent() {
        verifyDisablePowerSaveMode(/* needFirstTimeWarning= */ false);
    }

        assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(-1,
                Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(-2,
                Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
    @Test
    public void testSetPowerSaveMode_disableWithWarning_expectUpdateIntent() {
        verifyDisablePowerSaveMode(/* needFirstTimeWarning= */ true);
    }

    @Test
@@ -256,4 +270,26 @@ public class BatterySaverUtilsTest {
                .isEqualTo(20);

    }

    private void verifyDisablePowerSaveMode(boolean needFirstTimeWarning) {
        Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, "null");
        Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null");

        // When disabling, needFirstTimeWarning doesn't matter.
        assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, false, needFirstTimeWarning,
                SAVER_ENABLED_UNKNOWN)).isTrue();

        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mMockContext, times(1)).sendBroadcast(intentCaptor.capture());
        verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(false));

        assertThat(intentCaptor.getValue().getAction()).isEqualTo(
                ACTION_SAVER_STATE_MANUAL_UPDATE);
        assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(-1,
                Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1));
        assertEquals(-2,
                Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2));
    }
}