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

Commit d47817ff authored by Suprabh Shukla's avatar Suprabh Shukla Committed by android-build-merger
Browse files

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

am: e70e27cc

Change-Id: If9e91bde1f531a004b440a66eede2c93a565c2df
parents b8cfe7ff e70e27cc
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);
    }
}