Loading src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java +7 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package com.android.settings.fuelgauge; import android.app.AppOpsManager; import android.content.Context; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; Loading @@ -38,14 +40,17 @@ public class RestrictAppPreferenceController extends BasePreferenceController { @VisibleForTesting static final String KEY_RESTRICT_APP = "restricted_app"; @VisibleForTesting List<AppInfo> mAppInfos; private AppOpsManager mAppOpsManager; private List<AppInfo> mAppInfos; private SettingsActivity mSettingsActivity; private InstrumentedPreferenceFragment mPreferenceFragment; private UserManager mUserManager; public RestrictAppPreferenceController(Context context) { super(context, KEY_RESTRICT_APP); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mUserManager = context.getSystemService(UserManager.class); } public RestrictAppPreferenceController(SettingsActivity settingsActivity, Loading @@ -64,7 +69,7 @@ public class RestrictAppPreferenceController extends BasePreferenceController { public void updateState(Preference preference) { super.updateState(preference); mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager); mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager); final int num = mAppInfos.size(); // Enable the preference if some apps already been restricted, otherwise disable it Loading src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java +4 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batterytip; import android.app.AppOpsManager; import android.content.Context; import android.os.UserManager; import android.provider.Settings; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; Loading @@ -35,12 +36,14 @@ public class BatteryManagerPreferenceController extends BasePreferenceController private static final int ON = 1; private PowerUsageFeatureProvider mPowerUsageFeatureProvider; private AppOpsManager mAppOpsManager; private UserManager mUserManager; public BatteryManagerPreferenceController(Context context) { super(context, KEY_BATTERY_MANAGER); mPowerUsageFeatureProvider = FeatureFactory.getFactory( context).getPowerUsageFeatureProvider(context); mAppOpsManager = context.getSystemService(AppOpsManager.class); mUserManager = context.getSystemService(UserManager.class); } @Override Loading @@ -51,7 +54,7 @@ public class BatteryManagerPreferenceController extends BasePreferenceController @Override public void updateState(Preference preference) { super.updateState(preference); final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager).size(); final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager).size(); final String setting = mPowerUsageFeatureProvider.isSmartBatterySupported() ? Settings.Global.APP_STANDBY_ENABLED : Settings.Global.APP_AUTO_RESTRICTION_ENABLED; Loading src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java +8 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.app.PendingIntent; import android.app.StatsManager; import android.content.Context; import android.content.Intent; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.NonNull; import com.android.internal.util.CollectionUtils; Loading Loading @@ -49,7 +51,9 @@ public class BatteryTipUtils { * Get a list of restricted apps with {@link AppOpsManager#OP_RUN_ANY_IN_BACKGROUND} */ @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( new int[]{AppOpsManager.OP_RUN_ANY_IN_BACKGROUND}); final List<AppInfo> appInfos = new ArrayList<>(); Loading @@ -62,7 +66,9 @@ public class BatteryTipUtils { if (entry.getOp() != AppOpsManager.OP_RUN_ANY_IN_BACKGROUND) { 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() .setPackageName(packageOps.getPackageName()) .setUid(packageOps.getUid()) Loading tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java +35 −1 Original line number Diff line number Diff line Loading @@ -29,11 +29,14 @@ import static org.mockito.Mockito.verify; import android.app.AppOpsManager; import android.content.Context; import android.content.Intent; import android.os.UserHandle; import android.os.UserManager; import android.support.v7.preference.Preference; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.fuelgauge.batterytip.AppInfo; import org.junit.Before; import org.junit.Test; Loading @@ -53,6 +56,7 @@ public class RestrictAppPreferenceControllerTest { private static final String ALLOWED_PACKAGE_NAME = "com.android.allowed.package"; private static final int RESTRICTED_UID = 222; 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 private AppOpsManager mAppOpsManager; Loading @@ -61,9 +65,13 @@ public class RestrictAppPreferenceControllerTest { @Mock private AppOpsManager.PackageOps mAllowedPackageOps; @Mock private AppOpsManager.PackageOps mOtherUserPackageOps; @Mock private SettingsActivity mSettingsActivity; @Mock private InstrumentedPreferenceFragment mFragment; @Mock private UserManager mUserManager; private List<AppOpsManager.PackageOps> mPackageOpsList; private RestrictAppPreferenceController mRestrictAppPreferenceController; private Preference mPreference; Loading @@ -87,15 +95,23 @@ public class RestrictAppPreferenceControllerTest { doReturn(RESTRICTED_UID).when(mRestrictedPackageOps).getUid(); doReturn(RESTRICTED_PACKAGE_NAME).when(mRestrictedPackageOps).getPackageName(); 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); doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE); doReturn(mUserManager).when(mContext).getSystemService(UserManager.class); doReturn(mContext).when(mSettingsActivity).getApplicationContext(); mRestrictAppPreferenceController = new RestrictAppPreferenceController(mSettingsActivity, mFragment); mPackageOpsList = new ArrayList<>(); mPreference = new Preference(mContext); mPreference.setKey(mRestrictAppPreferenceController.getPreferenceKey()); final List<UserHandle> userHandles = new ArrayList<>(); userHandles.add(new UserHandle(0)); doReturn(userHandles).when(mUserManager).getUserProfiles(); } @Test Loading @@ -109,10 +125,11 @@ public class RestrictAppPreferenceControllerTest { } @Test public void testUpdateState_twoRestrictApps_showCorrectSummary() { public void testUpdateState_twoRestrictedAppsForPrimaryUser_showCorrectSummary() { mPackageOpsList.add(mRestrictedPackageOps); mPackageOpsList.add(mRestrictedPackageOps); mPackageOpsList.add(mAllowedPackageOps); mPackageOpsList.add(mOtherUserPackageOps); doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any()); mRestrictAppPreferenceController.updateState(mPreference); Loading @@ -120,6 +137,23 @@ public class RestrictAppPreferenceControllerTest { 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 public void testUpdateState_zeroRestrictApp_disabled() { mPackageOpsList.add(mAllowedPackageOps); Loading Loading
src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java +7 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package com.android.settings.fuelgauge; import android.app.AppOpsManager; import android.content.Context; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; Loading @@ -38,14 +40,17 @@ public class RestrictAppPreferenceController extends BasePreferenceController { @VisibleForTesting static final String KEY_RESTRICT_APP = "restricted_app"; @VisibleForTesting List<AppInfo> mAppInfos; private AppOpsManager mAppOpsManager; private List<AppInfo> mAppInfos; private SettingsActivity mSettingsActivity; private InstrumentedPreferenceFragment mPreferenceFragment; private UserManager mUserManager; public RestrictAppPreferenceController(Context context) { super(context, KEY_RESTRICT_APP); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mUserManager = context.getSystemService(UserManager.class); } public RestrictAppPreferenceController(SettingsActivity settingsActivity, Loading @@ -64,7 +69,7 @@ public class RestrictAppPreferenceController extends BasePreferenceController { public void updateState(Preference preference) { super.updateState(preference); mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager); mAppInfos = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager); final int num = mAppInfos.size(); // Enable the preference if some apps already been restricted, otherwise disable it Loading
src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java +4 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batterytip; import android.app.AppOpsManager; import android.content.Context; import android.os.UserManager; import android.provider.Settings; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; Loading @@ -35,12 +36,14 @@ public class BatteryManagerPreferenceController extends BasePreferenceController private static final int ON = 1; private PowerUsageFeatureProvider mPowerUsageFeatureProvider; private AppOpsManager mAppOpsManager; private UserManager mUserManager; public BatteryManagerPreferenceController(Context context) { super(context, KEY_BATTERY_MANAGER); mPowerUsageFeatureProvider = FeatureFactory.getFactory( context).getPowerUsageFeatureProvider(context); mAppOpsManager = context.getSystemService(AppOpsManager.class); mUserManager = context.getSystemService(UserManager.class); } @Override Loading @@ -51,7 +54,7 @@ public class BatteryManagerPreferenceController extends BasePreferenceController @Override public void updateState(Preference preference) { super.updateState(preference); final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager).size(); final int num = BatteryTipUtils.getRestrictedAppsList(mAppOpsManager, mUserManager).size(); final String setting = mPowerUsageFeatureProvider.isSmartBatterySupported() ? Settings.Global.APP_STANDBY_ENABLED : Settings.Global.APP_AUTO_RESTRICTION_ENABLED; Loading
src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java +8 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.app.PendingIntent; import android.app.StatsManager; import android.content.Context; import android.content.Intent; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.NonNull; import com.android.internal.util.CollectionUtils; Loading Loading @@ -49,7 +51,9 @@ public class BatteryTipUtils { * Get a list of restricted apps with {@link AppOpsManager#OP_RUN_ANY_IN_BACKGROUND} */ @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( new int[]{AppOpsManager.OP_RUN_ANY_IN_BACKGROUND}); final List<AppInfo> appInfos = new ArrayList<>(); Loading @@ -62,7 +66,9 @@ public class BatteryTipUtils { if (entry.getOp() != AppOpsManager.OP_RUN_ANY_IN_BACKGROUND) { 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() .setPackageName(packageOps.getPackageName()) .setUid(packageOps.getUid()) Loading
tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java +35 −1 Original line number Diff line number Diff line Loading @@ -29,11 +29,14 @@ import static org.mockito.Mockito.verify; import android.app.AppOpsManager; import android.content.Context; import android.content.Intent; import android.os.UserHandle; import android.os.UserManager; import android.support.v7.preference.Preference; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.fuelgauge.batterytip.AppInfo; import org.junit.Before; import org.junit.Test; Loading @@ -53,6 +56,7 @@ public class RestrictAppPreferenceControllerTest { private static final String ALLOWED_PACKAGE_NAME = "com.android.allowed.package"; private static final int RESTRICTED_UID = 222; 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 private AppOpsManager mAppOpsManager; Loading @@ -61,9 +65,13 @@ public class RestrictAppPreferenceControllerTest { @Mock private AppOpsManager.PackageOps mAllowedPackageOps; @Mock private AppOpsManager.PackageOps mOtherUserPackageOps; @Mock private SettingsActivity mSettingsActivity; @Mock private InstrumentedPreferenceFragment mFragment; @Mock private UserManager mUserManager; private List<AppOpsManager.PackageOps> mPackageOpsList; private RestrictAppPreferenceController mRestrictAppPreferenceController; private Preference mPreference; Loading @@ -87,15 +95,23 @@ public class RestrictAppPreferenceControllerTest { doReturn(RESTRICTED_UID).when(mRestrictedPackageOps).getUid(); doReturn(RESTRICTED_PACKAGE_NAME).when(mRestrictedPackageOps).getPackageName(); 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); doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE); doReturn(mUserManager).when(mContext).getSystemService(UserManager.class); doReturn(mContext).when(mSettingsActivity).getApplicationContext(); mRestrictAppPreferenceController = new RestrictAppPreferenceController(mSettingsActivity, mFragment); mPackageOpsList = new ArrayList<>(); mPreference = new Preference(mContext); mPreference.setKey(mRestrictAppPreferenceController.getPreferenceKey()); final List<UserHandle> userHandles = new ArrayList<>(); userHandles.add(new UserHandle(0)); doReturn(userHandles).when(mUserManager).getUserProfiles(); } @Test Loading @@ -109,10 +125,11 @@ public class RestrictAppPreferenceControllerTest { } @Test public void testUpdateState_twoRestrictApps_showCorrectSummary() { public void testUpdateState_twoRestrictedAppsForPrimaryUser_showCorrectSummary() { mPackageOpsList.add(mRestrictedPackageOps); mPackageOpsList.add(mRestrictedPackageOps); mPackageOpsList.add(mAllowedPackageOps); mPackageOpsList.add(mOtherUserPackageOps); doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any()); mRestrictAppPreferenceController.updateState(mPreference); Loading @@ -120,6 +137,23 @@ public class RestrictAppPreferenceControllerTest { 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 public void testUpdateState_zeroRestrictApp_disabled() { mPackageOpsList.add(mAllowedPackageOps); Loading