diff --git a/src/com/android/settings/DeviceAdminAdd.java b/src/com/android/settings/DeviceAdminAdd.java index 2fd769b42a2..0ad882df9a2 100644 --- a/src/com/android/settings/DeviceAdminAdd.java +++ b/src/com/android/settings/DeviceAdminAdd.java @@ -69,6 +69,7 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Optional; public class DeviceAdminAdd extends Activity { static final String TAG = "DeviceAdminAdd"; @@ -145,18 +146,14 @@ public class DeviceAdminAdd extends Activity { DevicePolicyManager.EXTRA_DEVICE_ADMIN); if (who == null) { String packageName = getIntent().getStringExtra(EXTRA_DEVICE_ADMIN_PACKAGE_NAME); - for (ComponentName component : mDPM.getActiveAdmins()) { - if (component.getPackageName().equals(packageName)) { - who = component; - mUninstalling = true; - break; - } - } - if (who == null) { + Optional installedAdmin = findAdminWithPackageName(packageName); + if (!installedAdmin.isPresent()) { Log.w(TAG, "No component specified in " + action); finish(); return; } + who = installedAdmin.get(); + mUninstalling = true; } if (action != null && action.equals(DevicePolicyManager.ACTION_SET_PROFILE_OWNER)) { @@ -692,6 +689,18 @@ public class DeviceAdminAdd extends Activity { return info != null ? info.isManagedProfile() : false; } + /** + * @return an {@link Optional} containing the admin with a given package name, if it exists, + * or {@link Optional#empty()} otherwise. + */ + private Optional findAdminWithPackageName(String packageName) { + List admins = mDPM.getActiveAdmins(); + if (admins == null) { + return Optional.empty(); + } + return admins.stream().filter(i -> i.getPackageName().equals(packageName)).findAny(); + } + private boolean isAdminUninstallable() { // System apps can't be uninstalled. return !mDeviceAdmin.getActivityInfo().applicationInfo.isSystemApp();