Only show restricted apps that belong to the user.
Filter out the restricted apps that not belong to the correct user, in this way secondary user cannot see what apps been restricted by primary user. Bug: 74076658 Test: RunSettingsRoboTests Change-Id: I8471f07be747c177f8611cdc1973a8420dc41296
This commit is contained in:
@@ -19,6 +19,8 @@ package com.android.settings.fuelgauge;
|
|||||||
|
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.UserHandle;
|
||||||
|
import android.os.UserManager;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
|
|
||||||
@@ -38,14 +40,17 @@ public class RestrictAppPreferenceController extends BasePreferenceController {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final String KEY_RESTRICT_APP = "restricted_app";
|
static final String KEY_RESTRICT_APP = "restricted_app";
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
List<AppInfo> mAppInfos;
|
||||||
private AppOpsManager mAppOpsManager;
|
private AppOpsManager mAppOpsManager;
|
||||||
private List<AppInfo> mAppInfos;
|
|
||||||
private SettingsActivity mSettingsActivity;
|
private SettingsActivity mSettingsActivity;
|
||||||
private InstrumentedPreferenceFragment mPreferenceFragment;
|
private InstrumentedPreferenceFragment mPreferenceFragment;
|
||||||
|
private UserManager mUserManager;
|
||||||
|
|
||||||
public RestrictAppPreferenceController(Context context) {
|
public RestrictAppPreferenceController(Context context) {
|
||||||
super(context, KEY_RESTRICT_APP);
|
super(context, KEY_RESTRICT_APP);
|
||||||
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
||||||
|
mUserManager = context.getSystemService(UserManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RestrictAppPreferenceController(SettingsActivity settingsActivity,
|
public RestrictAppPreferenceController(SettingsActivity settingsActivity,
|
||||||
@@ -64,7 +69,7 @@ public class RestrictAppPreferenceController extends BasePreferenceController {
|
|||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
super.updateState(preference);
|
super.updateState(preference);
|
||||||
|
|
||||||
mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager);
|
mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager);
|
||||||
|
|
||||||
final int num = mAppInfos.size();
|
final int num = mAppInfos.size();
|
||||||
// Enable the preference if some apps already been restricted, otherwise disable it
|
// Enable the preference if some apps already been restricted, otherwise disable it
|
||||||
|
@@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batterytip;
|
|||||||
|
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.UserManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
@@ -35,12 +36,14 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
|
|||||||
private static final int ON = 1;
|
private static final int ON = 1;
|
||||||
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
||||||
private AppOpsManager mAppOpsManager;
|
private AppOpsManager mAppOpsManager;
|
||||||
|
private UserManager mUserManager;
|
||||||
|
|
||||||
public BatteryManagerPreferenceController(Context context) {
|
public BatteryManagerPreferenceController(Context context) {
|
||||||
super(context, KEY_BATTERY_MANAGER);
|
super(context, KEY_BATTERY_MANAGER);
|
||||||
mPowerUsageFeatureProvider = FeatureFactory.getFactory(
|
mPowerUsageFeatureProvider = FeatureFactory.getFactory(
|
||||||
context).getPowerUsageFeatureProvider(context);
|
context).getPowerUsageFeatureProvider(context);
|
||||||
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
||||||
|
mUserManager = context.getSystemService(UserManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -51,7 +54,7 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
|
|||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
super.updateState(preference);
|
super.updateState(preference);
|
||||||
final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager).size();
|
final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager).size();
|
||||||
final String setting = mPowerUsageFeatureProvider.isSmartBatterySupported()
|
final String setting = mPowerUsageFeatureProvider.isSmartBatterySupported()
|
||||||
? Settings.Global.APP_STANDBY_ENABLED
|
? Settings.Global.APP_STANDBY_ENABLED
|
||||||
: Settings.Global.APP_AUTO_RESTRICTION_ENABLED;
|
: Settings.Global.APP_AUTO_RESTRICTION_ENABLED;
|
||||||
|
@@ -21,6 +21,8 @@ import android.app.PendingIntent;
|
|||||||
import android.app.StatsManager;
|
import android.app.StatsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.os.UserHandle;
|
||||||
|
import android.os.UserManager;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
import com.android.internal.util.CollectionUtils;
|
import com.android.internal.util.CollectionUtils;
|
||||||
@@ -49,7 +51,9 @@ public class BatteryTipUtils {
|
|||||||
* Get a list of restricted apps with {@link AppOpsManager#OP_RUN_ANY_IN_BACKGROUND}
|
* Get a list of restricted apps with {@link AppOpsManager#OP_RUN_ANY_IN_BACKGROUND}
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public static List<AppInfo> getRestrictedAppsList(AppOpsManager appOpsManager) {
|
public static List<AppInfo> getRestrictedAppsList(AppOpsManager appOpsManager,
|
||||||
|
UserManager userManager) {
|
||||||
|
final List<UserHandle> userHandles = userManager.getUserProfiles();
|
||||||
final List<AppOpsManager.PackageOps> packageOpsList = appOpsManager.getPackagesForOps(
|
final List<AppOpsManager.PackageOps> packageOpsList = appOpsManager.getPackagesForOps(
|
||||||
new int[]{AppOpsManager.OP_RUN_ANY_IN_BACKGROUND});
|
new int[]{AppOpsManager.OP_RUN_ANY_IN_BACKGROUND});
|
||||||
final List<AppInfo> appInfos = new ArrayList<>();
|
final List<AppInfo> appInfos = new ArrayList<>();
|
||||||
@@ -62,7 +66,9 @@ public class BatteryTipUtils {
|
|||||||
if (entry.getOp() != AppOpsManager.OP_RUN_ANY_IN_BACKGROUND) {
|
if (entry.getOp() != AppOpsManager.OP_RUN_ANY_IN_BACKGROUND) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (entry.getMode() != AppOpsManager.MODE_ALLOWED) {
|
if (entry.getMode() != AppOpsManager.MODE_ALLOWED
|
||||||
|
&& userHandles.contains(
|
||||||
|
new UserHandle(UserHandle.getUserId(packageOps.getUid())))) {
|
||||||
appInfos.add(new AppInfo.Builder()
|
appInfos.add(new AppInfo.Builder()
|
||||||
.setPackageName(packageOps.getPackageName())
|
.setPackageName(packageOps.getPackageName())
|
||||||
.setUid(packageOps.getUid())
|
.setUid(packageOps.getUid())
|
||||||
|
@@ -29,11 +29,14 @@ import static org.mockito.Mockito.verify;
|
|||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.os.UserHandle;
|
||||||
|
import android.os.UserManager;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||||
|
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -53,6 +56,7 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
private static final String ALLOWED_PACKAGE_NAME = "com.android.allowed.package";
|
private static final String ALLOWED_PACKAGE_NAME = "com.android.allowed.package";
|
||||||
private static final int RESTRICTED_UID = 222;
|
private static final int RESTRICTED_UID = 222;
|
||||||
private static final String RESTRICTED_PACKAGE_NAME = "com.android.restricted.package";
|
private static final String RESTRICTED_PACKAGE_NAME = "com.android.restricted.package";
|
||||||
|
private static final int OTHER_USER_UID = UserHandle.PER_USER_RANGE + RESTRICTED_UID;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private AppOpsManager mAppOpsManager;
|
private AppOpsManager mAppOpsManager;
|
||||||
@@ -61,9 +65,13 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private AppOpsManager.PackageOps mAllowedPackageOps;
|
private AppOpsManager.PackageOps mAllowedPackageOps;
|
||||||
@Mock
|
@Mock
|
||||||
|
private AppOpsManager.PackageOps mOtherUserPackageOps;
|
||||||
|
@Mock
|
||||||
private SettingsActivity mSettingsActivity;
|
private SettingsActivity mSettingsActivity;
|
||||||
@Mock
|
@Mock
|
||||||
private InstrumentedPreferenceFragment mFragment;
|
private InstrumentedPreferenceFragment mFragment;
|
||||||
|
@Mock
|
||||||
|
private UserManager mUserManager;
|
||||||
private List<AppOpsManager.PackageOps> mPackageOpsList;
|
private List<AppOpsManager.PackageOps> mPackageOpsList;
|
||||||
private RestrictAppPreferenceController mRestrictAppPreferenceController;
|
private RestrictAppPreferenceController mRestrictAppPreferenceController;
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
@@ -87,15 +95,23 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
doReturn(RESTRICTED_UID).when(mRestrictedPackageOps).getUid();
|
doReturn(RESTRICTED_UID).when(mRestrictedPackageOps).getUid();
|
||||||
doReturn(RESTRICTED_PACKAGE_NAME).when(mRestrictedPackageOps).getPackageName();
|
doReturn(RESTRICTED_PACKAGE_NAME).when(mRestrictedPackageOps).getPackageName();
|
||||||
doReturn(restrictedOps).when(mRestrictedPackageOps).getOps();
|
doReturn(restrictedOps).when(mRestrictedPackageOps).getOps();
|
||||||
|
doReturn(OTHER_USER_UID).when(mOtherUserPackageOps).getUid();
|
||||||
|
doReturn(RESTRICTED_PACKAGE_NAME).when(mOtherUserPackageOps).getPackageName();
|
||||||
|
doReturn(restrictedOps).when(mOtherUserPackageOps).getOps();
|
||||||
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
|
doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
|
||||||
|
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||||
doReturn(mContext).when(mSettingsActivity).getApplicationContext();
|
doReturn(mContext).when(mSettingsActivity).getApplicationContext();
|
||||||
mRestrictAppPreferenceController =
|
mRestrictAppPreferenceController =
|
||||||
new RestrictAppPreferenceController(mSettingsActivity, mFragment);
|
new RestrictAppPreferenceController(mSettingsActivity, mFragment);
|
||||||
mPackageOpsList = new ArrayList<>();
|
mPackageOpsList = new ArrayList<>();
|
||||||
mPreference = new Preference(mContext);
|
mPreference = new Preference(mContext);
|
||||||
mPreference.setKey(mRestrictAppPreferenceController.getPreferenceKey());
|
mPreference.setKey(mRestrictAppPreferenceController.getPreferenceKey());
|
||||||
|
|
||||||
|
final List<UserHandle> userHandles = new ArrayList<>();
|
||||||
|
userHandles.add(new UserHandle(0));
|
||||||
|
doReturn(userHandles).when(mUserManager).getUserProfiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -109,10 +125,11 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateState_twoRestrictApps_showCorrectSummary() {
|
public void testUpdateState_twoRestrictedAppsForPrimaryUser_showCorrectSummary() {
|
||||||
mPackageOpsList.add(mRestrictedPackageOps);
|
mPackageOpsList.add(mRestrictedPackageOps);
|
||||||
mPackageOpsList.add(mRestrictedPackageOps);
|
mPackageOpsList.add(mRestrictedPackageOps);
|
||||||
mPackageOpsList.add(mAllowedPackageOps);
|
mPackageOpsList.add(mAllowedPackageOps);
|
||||||
|
mPackageOpsList.add(mOtherUserPackageOps);
|
||||||
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());
|
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());
|
||||||
|
|
||||||
mRestrictAppPreferenceController.updateState(mPreference);
|
mRestrictAppPreferenceController.updateState(mPreference);
|
||||||
@@ -120,6 +137,23 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
assertThat(mPreference.getSummary()).isEqualTo("2 apps");
|
assertThat(mPreference.getSummary()).isEqualTo("2 apps");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateState_oneRestrictedAppForTwoUsers_showSummaryAndContainCorrectApp() {
|
||||||
|
// Two packageOps share same package name but different uid.
|
||||||
|
mPackageOpsList.add(mRestrictedPackageOps);
|
||||||
|
mPackageOpsList.add(mOtherUserPackageOps);
|
||||||
|
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());
|
||||||
|
|
||||||
|
mRestrictAppPreferenceController.updateState(mPreference);
|
||||||
|
|
||||||
|
assertThat(mPreference.getSummary()).isEqualTo("1 app");
|
||||||
|
assertThat(mRestrictAppPreferenceController.mAppInfos).containsExactly(
|
||||||
|
new AppInfo.Builder()
|
||||||
|
.setUid(RESTRICTED_UID)
|
||||||
|
.setPackageName(RESTRICTED_PACKAGE_NAME)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateState_zeroRestrictApp_disabled() {
|
public void testUpdateState_zeroRestrictApp_disabled() {
|
||||||
mPackageOpsList.add(mAllowedPackageOps);
|
mPackageOpsList.add(mAllowedPackageOps);
|
||||||
|
Reference in New Issue
Block a user