When restrict, use uid inside AppInfo

Before this CL, we use packageManager to get uid for battery
restriction. However it may not be correct all the time.

For example, RestrictedAppDetails will be opened as main user
however inside we also show work profile apps, in this case
we can't get correct uid by only using normal API in PackageManager.

This CL change it to use uid from AppInfo, which is correct all
the time.

Bug: 79992590
Test: RunSettingsRoboTests
Change-Id: Id33a5f6409d6bace0d756e5ac06432acb8b2cf65
This commit is contained in:
Lei Yu
2018-05-21 13:15:24 -07:00
parent 8075586a2e
commit d06d1165eb
5 changed files with 19 additions and 9 deletions

View File

@@ -129,6 +129,7 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
@VisibleForTesting @VisibleForTesting
void showDialog(boolean restricted) { void showDialog(boolean restricted) {
final AppInfo appInfo = new AppInfo.Builder() final AppInfo appInfo = new AppInfo.Builder()
.setUid(mUid)
.setPackageName(mTargetPackage) .setPackageName(mTargetPackage)
.build(); .build();
BatteryTip tip = restricted BatteryTip tip = restricted

View File

@@ -59,7 +59,7 @@ public class RestrictAppAction extends BatteryTipAction {
final AppInfo appInfo = appInfos.get(i); final AppInfo appInfo = appInfos.get(i);
final String packageName = appInfo.packageName; final String packageName = appInfo.packageName;
// Force app standby, then app can't run in the background // Force app standby, then app can't run in the background
mBatteryUtils.setForceAppStandby(mBatteryUtils.getPackageUid(packageName), packageName, mBatteryUtils.setForceAppStandby(appInfo.uid, packageName,
AppOpsManager.MODE_IGNORED); AppOpsManager.MODE_IGNORED);
if (CollectionUtils.isEmpty(appInfo.anomalyTypes)) { if (CollectionUtils.isEmpty(appInfo.anomalyTypes)) {
// Only log context if there is no anomaly type // Only log context if there is no anomaly type

View File

@@ -23,6 +23,7 @@ import android.util.Pair;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip; import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
/** /**
@@ -44,12 +45,12 @@ public class UnrestrictAppAction extends BatteryTipAction {
*/ */
@Override @Override
public void handlePositiveAction(int metricsKey) { public void handlePositiveAction(int metricsKey) {
final String packageName = mUnRestrictAppTip.getPackageName(); final AppInfo appInfo = mUnRestrictAppTip.getUnrestrictAppInfo();
// Clear force app standby, then app can run in the background // Clear force app standby, then app can run in the background
mBatteryUtils.setForceAppStandby(mBatteryUtils.getPackageUid(packageName), packageName, mBatteryUtils.setForceAppStandby(appInfo.uid, appInfo.packageName,
AppOpsManager.MODE_ALLOWED); AppOpsManager.MODE_ALLOWED);
mMetricsFeatureProvider.action(mContext, mMetricsFeatureProvider.action(mContext,
MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP, packageName, Pair.create( MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP, appInfo.packageName,
MetricsProto.MetricsEvent.FIELD_CONTEXT, metricsKey)); Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, metricsKey));
} }
} }

View File

@@ -46,6 +46,8 @@ import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
public class RestrictAppActionTest { public class RestrictAppActionTest {
private static final int UID_1 = 12345;
private static final int UID_2 = 23456;
private static final String PACKAGE_NAME_1 = "com.android.app1"; private static final String PACKAGE_NAME_1 = "com.android.app1";
private static final String PACKAGE_NAME_2 = "com.android.app2"; private static final String PACKAGE_NAME_2 = "com.android.app2";
private static final int ANOMALY_WAKEUP = 0; private static final int ANOMALY_WAKEUP = 0;
@@ -63,9 +65,11 @@ public class RestrictAppActionTest {
final List<AppInfo> mAppInfos = new ArrayList<>(); final List<AppInfo> mAppInfos = new ArrayList<>();
mAppInfos.add(new AppInfo.Builder() mAppInfos.add(new AppInfo.Builder()
.setUid(UID_1)
.setPackageName(PACKAGE_NAME_1) .setPackageName(PACKAGE_NAME_1)
.build()); .build());
mAppInfos.add(new AppInfo.Builder() mAppInfos.add(new AppInfo.Builder()
.setUid(UID_2)
.setPackageName(PACKAGE_NAME_2) .setPackageName(PACKAGE_NAME_2)
.addAnomalyType(ANOMALY_BT) .addAnomalyType(ANOMALY_BT)
.addAnomalyType(ANOMALY_WAKEUP) .addAnomalyType(ANOMALY_WAKEUP)
@@ -87,9 +91,9 @@ public class RestrictAppActionTest {
mRestrictAppAction.handlePositiveAction(METRICS_KEY); mRestrictAppAction.handlePositiveAction(METRICS_KEY);
verify(mBatteryUtils) verify(mBatteryUtils)
.setForceAppStandby(anyInt(), eq(PACKAGE_NAME_1), eq(AppOpsManager.MODE_IGNORED)); .setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_IGNORED);
verify(mBatteryUtils) verify(mBatteryUtils)
.setForceAppStandby(anyInt(), eq(PACKAGE_NAME_2), eq(AppOpsManager.MODE_IGNORED)); .setForceAppStandby(UID_2, PACKAGE_NAME_2, AppOpsManager.MODE_IGNORED);
verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application, verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application,
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, PACKAGE_NAME_1, Pair.create( MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, PACKAGE_NAME_1, Pair.create(
MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY)); MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY));

View File

@@ -42,6 +42,7 @@ import org.robolectric.RuntimeEnvironment;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
public class UnrestrictAppActionTest { public class UnrestrictAppActionTest {
private static final int UID_1 = 12345;
private static final String PACKAGE_NAME_1 = "com.android.app1"; private static final String PACKAGE_NAME_1 = "com.android.app1";
private static final int METRICS_KEY = 1; private static final int METRICS_KEY = 1;
@@ -54,7 +55,10 @@ public class UnrestrictAppActionTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
final AppInfo appInfo = new AppInfo.Builder().setPackageName(PACKAGE_NAME_1).build(); final AppInfo appInfo = new AppInfo.Builder()
.setUid(UID_1)
.setPackageName(PACKAGE_NAME_1)
.build();
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mUnrestrictAppAction = new UnrestrictAppAction(RuntimeEnvironment.application, mUnrestrictAppAction = new UnrestrictAppAction(RuntimeEnvironment.application,
@@ -72,7 +76,7 @@ public class UnrestrictAppActionTest {
mUnrestrictAppAction.handlePositiveAction(METRICS_KEY); mUnrestrictAppAction.handlePositiveAction(METRICS_KEY);
verify(mBatteryUtils) verify(mBatteryUtils)
.setForceAppStandby(anyInt(), eq(PACKAGE_NAME_1), eq(AppOpsManager.MODE_ALLOWED)); .setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_ALLOWED);
verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application, verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application,
MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP, PACKAGE_NAME_1, Pair.create( MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP, PACKAGE_NAME_1, Pair.create(
MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY)); MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY));