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

Commit f3155c03 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Performance] avoid setting the same optimization mode again" into sc-v2-dev

parents 810ab566 9ac072da
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -36,13 +36,12 @@ public class BatteryOptimizeUtils {
    @VisibleForTesting AppOpsManager mAppOpsManager;
    @VisibleForTesting BatteryUtils mBatteryUtils;
    @VisibleForTesting PowerAllowlistBackend mPowerAllowListBackend;
    @VisibleForTesting int mMode;
    @VisibleForTesting boolean mAllowListed;

    private final String mPackageName;
    private final int mUid;

    private int mMode;
    private boolean mAllowListed;

    // Optimization modes.
    static final int MODE_UNKNOWN = 0;
    static final int MODE_RESTRICTED = 1;
@@ -92,6 +91,10 @@ public class BatteryOptimizeUtils {

    /** Sets the {@link OptimizationMode} for associated app. */
    public void setAppOptimizationMode(@OptimizationMode int mode) {
        if (getAppOptimizationMode(mMode, mAllowListed) == mode) {
            Log.w(TAG, "set the same optimization mode for: " + mPackageName);
            return;
        }
        switch (mode) {
            case MODE_RESTRICTED:
                mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_IGNORED);
+42 −22
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ 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.verifyZeroInteractions;
import static org.mockito.Mockito.when;

import android.app.AppOpsManager;
@@ -47,9 +48,9 @@ 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;
    @Mock BatteryUtils mMockBatteryUtils;
    @Mock AppOpsManager mMockAppOpsManager;
    @Mock PowerAllowlistBackend mMockBackend;

    private Context mContext;
    private BatteryOptimizeUtils mBatteryOptimizeUtils;
@@ -59,15 +60,18 @@ public class BatteryOptimizeUtilsTest {
        MockitoAnnotations.initMocks(this);
        mContext = spy(RuntimeEnvironment.application);
        mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(mContext, UID, PACKAGE_NAME));
        mBatteryOptimizeUtils.mAppOpsManager = mockAppOpsManager;
        mBatteryOptimizeUtils.mBatteryUtils = mockBatteryUtils;
        mBatteryOptimizeUtils.mPowerAllowListBackend = mockBackend;
        mBatteryOptimizeUtils.mAppOpsManager = mMockAppOpsManager;
        mBatteryOptimizeUtils.mBatteryUtils = mMockBatteryUtils;
        mBatteryOptimizeUtils.mPowerAllowListBackend = mMockBackend;
        // Sets the default mode as MODE_RESTRICTED.
        mBatteryOptimizeUtils.mMode = AppOpsManager.MODE_IGNORED;
        mBatteryOptimizeUtils.mAllowListed = false;
    }

    @Test
    public void testGetAppOptimizationMode_returnRestricted() {
        when(mockBackend.isAllowlisted(anyString())).thenReturn(false);
        when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
        when(mMockBackend.isAllowlisted(anyString())).thenReturn(false);
        when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
                .thenReturn(AppOpsManager.MODE_IGNORED);

        assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
@@ -76,8 +80,8 @@ public class BatteryOptimizeUtilsTest {

    @Test
    public void testGetAppOptimizationMode_returnUnrestricted() {
        when(mockBackend.isAllowlisted(anyString())).thenReturn(true);
        when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
        when(mMockBackend.isAllowlisted(anyString())).thenReturn(true);
        when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
                .thenReturn(AppOpsManager.MODE_ALLOWED);

        assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
@@ -86,8 +90,8 @@ public class BatteryOptimizeUtilsTest {

    @Test
    public void testGetAppOptimizationMode_returnOptimized() {
        when(mockBackend.isAllowlisted(anyString())).thenReturn(false);
        when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
        when(mMockBackend.isAllowlisted(anyString())).thenReturn(false);
        when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
                .thenReturn(AppOpsManager.MODE_ALLOWED);

        assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
@@ -96,8 +100,8 @@ public class BatteryOptimizeUtilsTest {

    @Test
    public void testIsSystemOrDefaultApp_isSystemOrDefaultApp_returnTrue() {
        when(mockBackend.isAllowlisted(anyString())).thenReturn(true);
        when(mockBackend.isDefaultActiveApp(anyString())).thenReturn(true);
        when(mMockBackend.isAllowlisted(anyString())).thenReturn(true);
        when(mMockBackend.isDefaultActiveApp(anyString())).thenReturn(true);

        assertThat(mBatteryOptimizeUtils.isSystemOrDefaultApp()).isTrue();
    }
@@ -122,28 +126,44 @@ public class BatteryOptimizeUtilsTest {

    @Test
    public void testSetAppOptimizationMode_Restricted_verifyAction() {
        // Sets the current mode as MODE_UNRESTRICTED.
        mBatteryOptimizeUtils.mAllowListed = false;
        mBatteryOptimizeUtils.mMode = AppOpsManager.MODE_ALLOWED;

        mBatteryOptimizeUtils.setAppOptimizationMode(MODE_RESTRICTED);

        verify(mockBatteryUtils).setForceAppStandby(UID,
        verify(mMockBatteryUtils).setForceAppStandby(UID,
                PACKAGE_NAME, AppOpsManager.MODE_IGNORED);
        verify(mockBackend).removeApp(PACKAGE_NAME);
        verify(mMockBackend).removeApp(PACKAGE_NAME);
    }

    @Test
    public void testSetAppOptimizationMode_Unrestricted_verifyAction() {
        mBatteryOptimizeUtils.setAppOptimizationMode(MODE_UNRESTRICTED);

        verify(mockBatteryUtils).setForceAppStandby(UID,
        verify(mMockBatteryUtils).setForceAppStandby(UID,
                PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
        verify(mockBackend).addApp(PACKAGE_NAME);
        verify(mMockBackend).addApp(PACKAGE_NAME);
    }

    @Test
    public void testSetAppOptimizationMode_Optimized_verifyAction() {
        mBatteryOptimizeUtils.setAppOptimizationMode(MODE_OPTIMIZED);

        verify(mockBatteryUtils).setForceAppStandby(UID,
        verify(mMockBatteryUtils).setForceAppStandby(UID,
                PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
        verify(mockBackend).removeApp(PACKAGE_NAME);
        verify(mMockBackend).removeApp(PACKAGE_NAME);
    }

    @Test
    public void testSetAppOptimizationMode_sameUnrestrictedMode_verifyNoAction() {
        // Sets the current mode as MODE_UNRESTRICTED.
        mBatteryOptimizeUtils.mAllowListed = true;
        mBatteryOptimizeUtils.mMode = AppOpsManager.MODE_ALLOWED;

        mBatteryOptimizeUtils.setAppOptimizationMode(MODE_UNRESTRICTED);

        verifyZeroInteractions(mMockBackend);
        verifyZeroInteractions(mMockBatteryUtils);
    }
}