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

am: d47817ffcb

Change-Id: I488c11a04f7350c96c71ca70d1122c7de7b27833
This commit is contained in:
Suprabh Shukla
2018-05-11 17:00:22 -07:00
committed by android-build-merger
4 changed files with 51 additions and 7 deletions

View File

@@ -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>

View File

@@ -549,7 +549,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);

View File

@@ -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());

View File

@@ -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);
}
}