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

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

Merge "Unrestricting app when put on power whitelist" into pi-dev

parents f4c8a4cd 0f447022
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -8718,7 +8718,7 @@
    <string name="ignore_optimizations_off">Optimize</string>
    <!-- Ignore battery optimizations on description [CHAR LIMIT=NONE] -->
    <string name="ignore_optimizations_on_desc">May drain your battery more quickly</string>
    <string name="ignore_optimizations_on_desc">May drain your battery more quickly. App will no longer be restricted from using background battery.</string>
    <!-- Ignore battery optimizations off description [CHAR LIMIT=NONE] -->
    <string name="ignore_optimizations_off_desc">Recommended for better battery life</string>
+1 −1
Original line number Diff line number Diff line
@@ -545,7 +545,7 @@ public class ManageApplications extends InstrumentedFragment
                startAppInfoFragment(AppStorageSettings.class, R.string.storage_settings);
                break;
            case LIST_TYPE_HIGH_POWER:
                HighPowerDetail.show(this, mCurrentPkgName, INSTALLED_APP_DETAILS);
                HighPowerDetail.show(this, mCurrentUid, mCurrentPkgName, INSTALLED_APP_DETAILS);
                break;
            case LIST_TYPE_OVERLAY:
                startAppInfoFragment(DrawOverlayDetails.class, R.string.overlay_settings);
+18 −5
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge;

import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.app.Dialog;
import android.app.Fragment;
import android.content.Context;
@@ -43,12 +44,18 @@ public class HighPowerDetail extends InstrumentedDialogFragment implements OnCli

    private static final String ARG_DEFAULT_ON = "default_on";

    private final PowerWhitelistBackend mBackend = PowerWhitelistBackend.getInstance();

    private String mPackageName;
    @VisibleForTesting
    PowerWhitelistBackend mBackend;
    @VisibleForTesting
    BatteryUtils mBatteryUtils;
    @VisibleForTesting
    String mPackageName;
    @VisibleForTesting
    int mPackageUid;
    private CharSequence mLabel;
    private boolean mDefaultOn;
    private boolean mIsEnabled;
    @VisibleForTesting
    boolean mIsEnabled;
    private Checkable mOptionOn;
    private Checkable mOptionOff;

@@ -60,8 +67,11 @@ public class HighPowerDetail extends InstrumentedDialogFragment implements OnCli
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBatteryUtils = BatteryUtils.getInstance(getContext());
        mBackend = PowerWhitelistBackend.getInstance();

        mPackageName = getArguments().getString(AppInfoBase.ARG_PACKAGE_NAME);
        mPackageUid = getArguments().getInt(AppInfoBase.ARG_PACKAGE_UID);
        PackageManager pm = getContext().getPackageManager();
        try {
            mLabel = pm.getApplicationInfo(mPackageName, 0).loadLabel(pm);
@@ -129,6 +139,8 @@ public class HighPowerDetail extends InstrumentedDialogFragment implements OnCli
            if (newValue != oldValue) {
                logSpecialPermissionChange(newValue, mPackageName, getContext());
                if (newValue) {
                    mBatteryUtils.setForceAppStandby(mPackageUid, mPackageName,
                            AppOpsManager.MODE_ALLOWED);
                    mBackend.addApp(mPackageName);
                } else {
                    mBackend.removeApp(mPackageName);
@@ -165,10 +177,11 @@ public class HighPowerDetail extends InstrumentedDialogFragment implements OnCli
                : R.string.high_power_off);
    }

    public static void show(Fragment caller, String packageName, int requestCode) {
    public static void show(Fragment caller, int uid, String packageName, int requestCode) {
        HighPowerDetail fragment = new HighPowerDetail();
        Bundle args = new Bundle();
        args.putString(AppInfoBase.ARG_PACKAGE_NAME, packageName);
        args.putInt(AppInfoBase.ARG_PACKAGE_UID, uid);
        fragment.setArguments(args);
        fragment.setTargetFragment(caller, requestCode);
        fragment.show(caller.getFragmentManager(), HighPowerDetail.class.getSimpleName());
+31 −0
Original line number Diff line number Diff line
@@ -18,27 +18,49 @@ package com.android.settings.fuelgauge;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.AppOpsManager;
import android.content.Context;
import android.content.DialogInterface;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;

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

@RunWith(SettingsRobolectricTestRunner.class)
public class HighPowerDetailTest {
    private static final int TEST_UID = 12000;
    private static final String TEST_PACKAGE = "com.test.package";

    private FakeFeatureFactory mFeatureFactory;
    private HighPowerDetail mFragment;

    @Mock
    private PowerWhitelistBackend mPowerWhitelistBackend;
    @Mock
    private BatteryUtils mBatteryUtils;

    @Before
    public void setUp() {
        mFeatureFactory = FakeFeatureFactory.setupForTest();

        MockitoAnnotations.initMocks(this);
        mFragment = spy(new HighPowerDetail());
        mFragment.mBackend = mPowerWhitelistBackend;
        mFragment.mBatteryUtils = mBatteryUtils;
        mFragment.mPackageUid = TEST_UID;
        mFragment.mPackageName = TEST_PACKAGE;
    }

    @Test
@@ -53,4 +75,13 @@ public class HighPowerDetailTest {
        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_ALLOW), eq("app"));
    }

    @Test
    public void onClick_appAddedToDozeWhitelist_getsUnrestricted() {
        mFragment.mIsEnabled = true;
        when(mPowerWhitelistBackend.isWhitelisted(TEST_PACKAGE)).thenReturn(false);
        mFragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
        verify(mBatteryUtils).setForceAppStandby(TEST_UID, TEST_PACKAGE,
                AppOpsManager.MODE_ALLOWED);
    }
}