Merge "Unrestricting app when put on power whitelist" into pi-dev
am: e70e27ccea
Change-Id: If9e91bde1f531a004b440a66eede2c93a565c2df
This commit is contained in:
@@ -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>
|
||||
|
@@ -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);
|
||||
|
@@ -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());
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user