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

Commit 92a62e55 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Add AOD to BatterySaverPolicy

Test: activate/deactivate battery saver, look at AOD
Test: atest packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
Fixes: 62797110
Change-Id: I9fc5f4fc5aa9cfd45e90e602251e4c2c863dfbcc
parent f157b9f9
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -538,6 +538,7 @@ public final class PowerManager {
            ServiceType.DATA_SAVER,
            ServiceType.DATA_SAVER,
            ServiceType.FORCE_ALL_APPS_STANDBY,
            ServiceType.FORCE_ALL_APPS_STANDBY,
            ServiceType.OPTIONAL_SENSORS,
            ServiceType.OPTIONAL_SENSORS,
            ServiceType.AOD,
    })
    })
    public @interface ServiceType {
    public @interface ServiceType {
        int NULL = 0;
        int NULL = 0;
@@ -551,6 +552,7 @@ public final class PowerManager {
        int SOUND = 8;
        int SOUND = 8;
        int BATTERY_STATS = 9;
        int BATTERY_STATS = 9;
        int DATA_SAVER = 10;
        int DATA_SAVER = 10;
        int AOD = 14;


        /**
        /**
         * Whether to enable force-app-standby on all apps or not.
         * Whether to enable force-app-standby on all apps or not.
+1 −3
Original line number Original line Diff line number Diff line
@@ -210,7 +210,6 @@ import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.AboveShelfObserver;
import com.android.systemui.statusbar.notification.AboveShelfObserver;
import com.android.systemui.statusbar.notification.ActivityLaunchAnimator;
import com.android.systemui.statusbar.notification.ActivityLaunchAnimator;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
import com.android.systemui.statusbar.phone.UnlockMethodCache.OnUnlockMethodChangedListener;
import com.android.systemui.statusbar.phone.UnlockMethodCache.OnUnlockMethodChangedListener;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
@@ -240,7 +239,6 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;


@@ -4727,7 +4725,7 @@ public class StatusBar extends SystemUI implements DemoMode,


        @Override
        @Override
        public boolean isPowerSaveActive() {
        public boolean isPowerSaveActive() {
            return mBatteryController.isPowerSave();
            return mBatteryController.isAodPowerSave();
        }
        }


        @Override
        @Override
+7 −0
Original line number Original line Diff line number Diff line
@@ -40,6 +40,13 @@ public interface BatteryController extends DemoMode, Dumpable,
     */
     */
    boolean isPowerSave();
    boolean isPowerSave();


    /**
     * Returns {@code true} if AOD was disabled by power saving policies.
     */
    default boolean isAodPowerSave() {
        return isPowerSave();
    }

    /**
    /**
     * A listener that will be notified whenever a change in battery level or power save mode
     * A listener that will be notified whenever a change in battery level or power save mode
     * has occurred.
     * has occurred.
+20 −2
Original line number Original line Diff line number Diff line
@@ -24,8 +24,10 @@ import android.os.BatteryManager;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManager;
import android.os.PowerSaveState;
import android.util.Log;
import android.util.Log;
import com.android.systemui.DemoMode;

import com.android.internal.annotations.VisibleForTesting;


import java.io.FileDescriptor;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.io.PrintWriter;
@@ -52,13 +54,19 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
    protected boolean mCharging;
    protected boolean mCharging;
    protected boolean mCharged;
    protected boolean mCharged;
    protected boolean mPowerSave;
    protected boolean mPowerSave;
    protected boolean mAodPowerSave;
    private boolean mTestmode = false;
    private boolean mTestmode = false;
    private boolean mHasReceivedBattery = false;
    private boolean mHasReceivedBattery = false;


    public BatteryControllerImpl(Context context) {
    public BatteryControllerImpl(Context context) {
        this(context, context.getSystemService(PowerManager.class));
    }

    @VisibleForTesting
    BatteryControllerImpl(Context context, PowerManager powerManager) {
        mContext = context;
        mContext = context;
        mHandler = new Handler();
        mHandler = new Handler();
        mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        mPowerManager = powerManager;


        registerReceiver();
        registerReceiver();
        updatePowerSave();
        updatePowerSave();
@@ -166,6 +174,11 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
        return mPowerSave;
        return mPowerSave;
    }
    }


    @Override
    public boolean isAodPowerSave() {
        return mAodPowerSave;
    }

    private void updatePowerSave() {
    private void updatePowerSave() {
        setPowerSave(mPowerManager.isPowerSaveMode());
        setPowerSave(mPowerManager.isPowerSaveMode());
    }
    }
@@ -173,6 +186,11 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
    private void setPowerSave(boolean powerSave) {
    private void setPowerSave(boolean powerSave) {
        if (powerSave == mPowerSave) return;
        if (powerSave == mPowerSave) return;
        mPowerSave = powerSave;
        mPowerSave = powerSave;

        // AOD power saving setting might be different from PowerManager power saving mode.
        PowerSaveState state = mPowerManager.getPowerSaveState(PowerManager.ServiceType.AOD);
        mAodPowerSave = state.batterySaverEnabled;

        if (DEBUG) Log.d(TAG, "Power save is " + (mPowerSave ? "on" : "off"));
        if (DEBUG) Log.d(TAG, "Power save is " + (mPowerSave ? "on" : "off"));
        firePowerSaveChanged();
        firePowerSaveChanged();
    }
    }
+83 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2018 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.systemui.statusbar.policy;

import static org.mockito.Mockito.when;

import android.content.Intent;
import android.os.PowerManager;
import android.os.PowerSaveState;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;

import com.android.systemui.SysuiTestCase;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;


@SmallTest
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class BatteryControllerTest extends SysuiTestCase {

    @Mock
    private PowerManager mPowerManager;
    private BatteryControllerImpl mBatteryController;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mBatteryController = new BatteryControllerImpl(getContext(), mPowerManager);
    }

    @Test
    public void testIndependentAODBatterySaver_true() {
        PowerSaveState state = new PowerSaveState.Builder()
                .setBatterySaverEnabled(true)
                .build();
        Intent intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
        when(mPowerManager.getPowerSaveState(PowerManager.ServiceType.AOD)).thenReturn(state);
        when(mPowerManager.isPowerSaveMode()).thenReturn(true);

        mBatteryController.onReceive(getContext(), intent);

        Assert.assertTrue(mBatteryController.isPowerSave());
        Assert.assertTrue(mBatteryController.isAodPowerSave());
    }

    @Test
    public void testIndependentAODBatterySaver_false() {
        PowerSaveState state = new PowerSaveState.Builder()
                .setBatterySaverEnabled(false)
                .build();
        Intent intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
        when(mPowerManager.getPowerSaveState(PowerManager.ServiceType.AOD)).thenReturn(state);
        when(mPowerManager.isPowerSaveMode()).thenReturn(true);

        mBatteryController.onReceive(getContext(), intent);

        Assert.assertTrue(mBatteryController.isPowerSave());
        Assert.assertFalse(mBatteryController.isAodPowerSave());
    }

}
Loading