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

Commit d29cb7e7 authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Update Summary for Battery Optimization" into oc-dev

parents 028642e0 781c3000
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -230,7 +230,7 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase implements

        controllers.add(new BackgroundActivityPreferenceController(context, uid));
        controllers.add(new BatteryOptimizationPreferenceController(
                (SettingsActivity) getActivity(), this));
                (SettingsActivity) getActivity(), this, packageName));
        mAppButtonsPreferenceController = new AppButtonsPreferenceController(
                (SettingsActivity) getActivity(), this, getLifecycle(), packageName, mState, mDpm,
                mUserManager, mPackageManager, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
+24 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.settings.fuelgauge;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.text.TextUtils;

@@ -33,14 +34,29 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle

    private static final String KEY_BACKGROUND_ACTIVITY = "battery_optimization";


    private PowerWhitelistBackend mBackend;
    private Fragment mFragment;
    private SettingsActivity mSettingsActivity;
    private String mPackageName;

    public BatteryOptimizationPreferenceController(SettingsActivity settingsActivity,
            Fragment fragment) {
            Fragment fragment, String packageName) {
        super(settingsActivity);
        mFragment = fragment;
        mSettingsActivity = settingsActivity;
        mPackageName = packageName;
        mBackend = PowerWhitelistBackend.getInstance();
    }

    @VisibleForTesting
    BatteryOptimizationPreferenceController(SettingsActivity settingsActivity,
            Fragment fragment, String packageName, PowerWhitelistBackend backend) {
        super(settingsActivity);
        mFragment = fragment;
        mSettingsActivity = settingsActivity;
        mPackageName = packageName;
        mBackend = backend;
    }

    @Override
@@ -48,6 +64,12 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle
        return true;
    }

    @Override
    public void updateState(Preference preference) {
        final boolean isWhitelisted = mBackend.isWhitelisted(mPackageName);
        preference.setSummary(isWhitelisted ? R.string.high_power_on : R.string.high_power_off);
    }

    @Override
    public String getPreferenceKey() {
        return KEY_BACKGROUND_ACTIVITY;
@@ -66,4 +88,5 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle
                R.string.high_power_apps, null, null, 0);
        return true;
    }

}
+9 −3
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.settings.fuelgauge;
import android.os.IDeviceIdleController;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.support.annotation.VisibleForTesting;

import android.util.ArraySet;
import android.util.Log;

@@ -31,7 +33,7 @@ public class PowerWhitelistBackend {

    private static final String DEVICE_IDLE_SERVICE = "deviceidle";

    private static final PowerWhitelistBackend INSTANCE = new PowerWhitelistBackend();
    private static PowerWhitelistBackend sInstance;

    private final IDeviceIdleController mDeviceIdleService;
    private final ArraySet<String> mWhitelistedApps = new ArraySet<>();
@@ -73,7 +75,8 @@ public class PowerWhitelistBackend {
        }
    }

    private void refreshList() {
    @VisibleForTesting
    void refreshList() {
        mSysWhitelistedApps.clear();
        mWhitelistedApps.clear();
        try {
@@ -91,7 +94,10 @@ public class PowerWhitelistBackend {
    }

    public static PowerWhitelistBackend getInstance() {
        return INSTANCE;
        if (sInstance == null) {
            sInstance = new PowerWhitelistBackend();
        }
        return sInstance;
    }

}
+49 −5
Original line number Diff line number Diff line
@@ -22,14 +22,18 @@ import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;

import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig;

@@ -39,11 +43,14 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

@RunWith(RobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class BatteryOptimizationPreferenceControllerTest {
    private static final String PKG_IN_WHITELIST = "com.pkg.in.whitelist";
    private static final String PKG_NOT_IN_WHITELIST = "com.pkg.not.in.whitelist";
    private static final String KEY_OPTIMIZATION = "battery_optimization";
    private static final String KEY_OTHER = "other";
    @Mock
@@ -51,20 +58,28 @@ public class BatteryOptimizationPreferenceControllerTest {
    @Mock
    private Fragment mFragment;
    @Mock
    private Preference mPreference;
    private TestPowerWhitelistBackend mBackend;

    private BatteryOptimizationPreferenceController mController;
    private Preference mPreference;
    private Context mContext;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mController = new BatteryOptimizationPreferenceController(mSettingsActivity, mFragment);
        mContext = RuntimeEnvironment.application;
        doReturn(false).when(mBackend).isWhitelisted(PKG_NOT_IN_WHITELIST);
        doReturn(true).when(mBackend).isWhitelisted(PKG_IN_WHITELIST);

        mPreference = new SwitchPreference(mContext);
        mController = spy(new BatteryOptimizationPreferenceController(mSettingsActivity, mFragment,
                PKG_NOT_IN_WHITELIST, mBackend));
    }

    @Test
    public void testHandlePreferenceTreeClick_OptimizationPreference_HandleClick() {
        when(mPreference.getKey()).thenReturn(KEY_OPTIMIZATION);
        mPreference.setKey(KEY_OPTIMIZATION);

        final boolean handled = mController.handlePreferenceTreeClick(mPreference);

@@ -76,7 +91,7 @@ public class BatteryOptimizationPreferenceControllerTest {

    @Test
    public void testHandlePreferenceTreeClick_OtherPreference_NotHandleClick() {
        when(mPreference.getKey()).thenReturn(KEY_OTHER);
        mPreference.setKey(KEY_OTHER);

        final boolean handled = mController.handlePreferenceTreeClick(mPreference);

@@ -85,4 +100,33 @@ public class BatteryOptimizationPreferenceControllerTest {
                anyString(), any(Bundle.class), anyInt(), any(CharSequence.class),
                any(Fragment.class), anyInt());
    }

    @Test
    public void testUpdateState_appInWhitelist_showSummaryNotOptimized() {
        BatteryOptimizationPreferenceController controller =
                new BatteryOptimizationPreferenceController(mSettingsActivity, mFragment,
                        PKG_IN_WHITELIST, mBackend);

        controller.updateState(mPreference);

        assertThat(mPreference.getSummary()).isEqualTo(mContext.getString(R.string.high_power_on));
    }

    @Test
    public void testUpdateState_appNotInWhitelist_showSummaryOptimized() {
        mController.updateState(mPreference);

        assertThat(mPreference.getSummary()).isEqualTo(mContext.getString(R.string.high_power_off));
    }

    /**
     * Create this test class so we could mock it
     */
    public static class TestPowerWhitelistBackend extends PowerWhitelistBackend {

        @Override
        void refreshList() {
            // Do nothing so we could mock it without error
        }
    }
}