Loading src/com/android/settings/Utils.java +23 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,7 @@ import com.android.internal.app.UnlaunchableAppActivity; import com.android.internal.util.ArrayUtils; import com.android.internal.util.UserIcons; import com.android.internal.widget.LockPatternUtils; import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.password.FingerprintManagerWrapper; import com.android.settings.password.IFingerprintManager; Loading Loading @@ -1279,6 +1280,28 @@ public final class Utils extends com.android.settingslib.Utils { return isVolumeValid(volume) ? volume : null; } /** * Return {@code true} if the supplied package is device owner or profile owner of at * least one user. * @param userManager used to get profile owner app for each user * @param devicePolicyManager used to check whether it is device owner app * @param packageName package to check about */ public static boolean isProfileOrDeviceOwner(UserManager userManager, DevicePolicyManagerWrapper devicePolicyManager, String packageName) { List<UserInfo> userInfos = userManager.getUsers(); if (devicePolicyManager.isDeviceOwnerAppOnAnyUser(packageName)) { return true; } for (int i = 0, size = userInfos.size(); i < size; i++) { ComponentName cn = devicePolicyManager.getProfileOwnerAsUser(userInfos.get(i).id); if (cn != null && cn.getPackageName().equals(packageName)) { return true; } } return false; } /** * Return the resource id to represent the install status for an app */ Loading src/com/android/settings/applications/AppInfoBase.java +5 −2 Original line number Diff line number Diff line Loading @@ -43,6 +43,8 @@ import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.applications.ApplicationsState; Loading Loading @@ -73,7 +75,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment protected String mPackageName; protected IUsbManager mUsbManager; protected DevicePolicyManager mDpm; protected DevicePolicyManagerWrapper mDpm; protected UserManager mUserManager; protected PackageManager mPm; Loading @@ -92,7 +94,8 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment .getApplicationFeatureProvider(activity); mState = ApplicationsState.getInstance(activity.getApplication()); mSession = mState.newSession(this); mDpm = (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE); mDpm = new DevicePolicyManagerWrapperImpl( (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE)); mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE); mPm = activity.getPackageManager(); IBinder b = ServiceManager.getService(Context.USB_SERVICE); Loading src/com/android/settings/applications/InstalledAppDetails.java +1 −18 Original line number Diff line number Diff line Loading @@ -274,7 +274,7 @@ public class InstalledAppDetails extends AppInfoBase // We don't allow uninstalling DO/PO on *any* users, because if it's a system app, // "uninstall" is actually "downgrade to the system version + disable", and "downgrade" // will clear data on all users. if (isProfileOrDeviceOwner(mPackageInfo.packageName)) { if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) { enabled = false; } Loading Loading @@ -349,23 +349,6 @@ public class InstalledAppDetails extends AppInfoBase return enabled; } /** Returns if the supplied package is device owner or profile owner of at least one user */ private boolean isProfileOrDeviceOwner(String packageName) { List<UserInfo> userInfos = mUserManager.getUsers(); DevicePolicyManager dpm = (DevicePolicyManager) getContext().getSystemService(Context.DEVICE_POLICY_SERVICE); if (dpm.isDeviceOwnerAppOnAnyUser(packageName)) { return true; } for (UserInfo userInfo : userInfos) { ComponentName cn = dpm.getProfileOwnerAsUser(userInfo.id); if (cn != null && cn.getPackageName().equals(packageName)) { return true; } } return false; } /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { Loading src/com/android/settings/fuelgauge/AppButtonsPreferenceController.java +1 −16 Original line number Diff line number Diff line Loading @@ -381,7 +381,7 @@ public class AppButtonsPreferenceController extends AbstractPreferenceController // We don't allow uninstalling DO/PO on *any* users, because if it's a system app, // "uninstall" is actually "downgrade to the system version + disable", and "downgrade" // will clear data on all users. if (isProfileOrDeviceOwner(mPackageInfo.packageName)) { if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) { enabled = false; } Loading Loading @@ -581,21 +581,6 @@ public class AppButtonsPreferenceController extends AbstractPreferenceController || (mUserManager.isSplitSystemUser() && userCount == 2); } /** Returns if the supplied package is device owner or profile owner of at least one user */ private boolean isProfileOrDeviceOwner(String packageName) { List<UserInfo> userInfos = mUserManager.getUsers(); if (mDpm.isDeviceOwnerAppOnAnyUser(packageName)) { return true; } for (int i = 0, size = userInfos.size(); i < size; i++) { ComponentName cn = mDpm.getProfileOwnerAsUser(userInfos.get(i).id); if (cn != null && cn.getPackageName().equals(packageName)) { return true; } } return false; } private final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Loading src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java +17 −3 Original line number Diff line number Diff line Loading @@ -15,17 +15,22 @@ package com.android.settings.fuelgauge; import android.app.AppOpsManager; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.util.Log; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl; import com.android.settingslib.core.AbstractPreferenceController; /** Loading @@ -39,14 +44,20 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo private final PackageManager mPackageManager; private final AppOpsManager mAppOpsManager; private final UserManager mUserManager; private final String[] mPackages; private final int mUid; @VisibleForTesting DevicePolicyManagerWrapper mDpm; private String mTargetPackage; public BackgroundActivityPreferenceController(Context context, int uid) { super(context); mPackageManager = context.getPackageManager(); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); mDpm = new DevicePolicyManagerWrapperImpl( (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE)); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mUid = uid; mPackages = mPackageManager.getPackagesForUid(mUid); Loading @@ -56,12 +67,15 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo public void updateState(Preference preference) { final int mode = mAppOpsManager .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, mUid, mTargetPackage); if (mode == AppOpsManager.MODE_ERRORED) { preference.setEnabled(false); } else { // Set checked or not before we may set it disabled if (mode != AppOpsManager.MODE_ERRORED) { final boolean checked = mode != AppOpsManager.MODE_IGNORED; ((SwitchPreference) preference).setChecked(checked); } if (mode == AppOpsManager.MODE_ERRORED || Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mTargetPackage)) { preference.setEnabled(false); } updateSummary(preference); } Loading Loading
src/com/android/settings/Utils.java +23 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,7 @@ import com.android.internal.app.UnlaunchableAppActivity; import com.android.internal.util.ArrayUtils; import com.android.internal.util.UserIcons; import com.android.internal.widget.LockPatternUtils; import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.password.FingerprintManagerWrapper; import com.android.settings.password.IFingerprintManager; Loading Loading @@ -1279,6 +1280,28 @@ public final class Utils extends com.android.settingslib.Utils { return isVolumeValid(volume) ? volume : null; } /** * Return {@code true} if the supplied package is device owner or profile owner of at * least one user. * @param userManager used to get profile owner app for each user * @param devicePolicyManager used to check whether it is device owner app * @param packageName package to check about */ public static boolean isProfileOrDeviceOwner(UserManager userManager, DevicePolicyManagerWrapper devicePolicyManager, String packageName) { List<UserInfo> userInfos = userManager.getUsers(); if (devicePolicyManager.isDeviceOwnerAppOnAnyUser(packageName)) { return true; } for (int i = 0, size = userInfos.size(); i < size; i++) { ComponentName cn = devicePolicyManager.getProfileOwnerAsUser(userInfos.get(i).id); if (cn != null && cn.getPackageName().equals(packageName)) { return true; } } return false; } /** * Return the resource id to represent the install status for an app */ Loading
src/com/android/settings/applications/AppInfoBase.java +5 −2 Original line number Diff line number Diff line Loading @@ -43,6 +43,8 @@ import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.applications.ApplicationsState; Loading Loading @@ -73,7 +75,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment protected String mPackageName; protected IUsbManager mUsbManager; protected DevicePolicyManager mDpm; protected DevicePolicyManagerWrapper mDpm; protected UserManager mUserManager; protected PackageManager mPm; Loading @@ -92,7 +94,8 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment .getApplicationFeatureProvider(activity); mState = ApplicationsState.getInstance(activity.getApplication()); mSession = mState.newSession(this); mDpm = (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE); mDpm = new DevicePolicyManagerWrapperImpl( (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE)); mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE); mPm = activity.getPackageManager(); IBinder b = ServiceManager.getService(Context.USB_SERVICE); Loading
src/com/android/settings/applications/InstalledAppDetails.java +1 −18 Original line number Diff line number Diff line Loading @@ -274,7 +274,7 @@ public class InstalledAppDetails extends AppInfoBase // We don't allow uninstalling DO/PO on *any* users, because if it's a system app, // "uninstall" is actually "downgrade to the system version + disable", and "downgrade" // will clear data on all users. if (isProfileOrDeviceOwner(mPackageInfo.packageName)) { if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) { enabled = false; } Loading Loading @@ -349,23 +349,6 @@ public class InstalledAppDetails extends AppInfoBase return enabled; } /** Returns if the supplied package is device owner or profile owner of at least one user */ private boolean isProfileOrDeviceOwner(String packageName) { List<UserInfo> userInfos = mUserManager.getUsers(); DevicePolicyManager dpm = (DevicePolicyManager) getContext().getSystemService(Context.DEVICE_POLICY_SERVICE); if (dpm.isDeviceOwnerAppOnAnyUser(packageName)) { return true; } for (UserInfo userInfo : userInfos) { ComponentName cn = dpm.getProfileOwnerAsUser(userInfo.id); if (cn != null && cn.getPackageName().equals(packageName)) { return true; } } return false; } /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { Loading
src/com/android/settings/fuelgauge/AppButtonsPreferenceController.java +1 −16 Original line number Diff line number Diff line Loading @@ -381,7 +381,7 @@ public class AppButtonsPreferenceController extends AbstractPreferenceController // We don't allow uninstalling DO/PO on *any* users, because if it's a system app, // "uninstall" is actually "downgrade to the system version + disable", and "downgrade" // will clear data on all users. if (isProfileOrDeviceOwner(mPackageInfo.packageName)) { if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) { enabled = false; } Loading Loading @@ -581,21 +581,6 @@ public class AppButtonsPreferenceController extends AbstractPreferenceController || (mUserManager.isSplitSystemUser() && userCount == 2); } /** Returns if the supplied package is device owner or profile owner of at least one user */ private boolean isProfileOrDeviceOwner(String packageName) { List<UserInfo> userInfos = mUserManager.getUsers(); if (mDpm.isDeviceOwnerAppOnAnyUser(packageName)) { return true; } for (int i = 0, size = userInfos.size(); i < size; i++) { ComponentName cn = mDpm.getProfileOwnerAsUser(userInfos.get(i).id); if (cn != null && cn.getPackageName().equals(packageName)) { return true; } } return false; } private final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Loading
src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java +17 −3 Original line number Diff line number Diff line Loading @@ -15,17 +15,22 @@ package com.android.settings.fuelgauge; import android.app.AppOpsManager; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.util.Log; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl; import com.android.settingslib.core.AbstractPreferenceController; /** Loading @@ -39,14 +44,20 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo private final PackageManager mPackageManager; private final AppOpsManager mAppOpsManager; private final UserManager mUserManager; private final String[] mPackages; private final int mUid; @VisibleForTesting DevicePolicyManagerWrapper mDpm; private String mTargetPackage; public BackgroundActivityPreferenceController(Context context, int uid) { super(context); mPackageManager = context.getPackageManager(); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); mDpm = new DevicePolicyManagerWrapperImpl( (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE)); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mUid = uid; mPackages = mPackageManager.getPackagesForUid(mUid); Loading @@ -56,12 +67,15 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo public void updateState(Preference preference) { final int mode = mAppOpsManager .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, mUid, mTargetPackage); if (mode == AppOpsManager.MODE_ERRORED) { preference.setEnabled(false); } else { // Set checked or not before we may set it disabled if (mode != AppOpsManager.MODE_ERRORED) { final boolean checked = mode != AppOpsManager.MODE_IGNORED; ((SwitchPreference) preference).setChecked(checked); } if (mode == AppOpsManager.MODE_ERRORED || Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mTargetPackage)) { preference.setEnabled(false); } updateSummary(preference); } Loading