Merge "Handle getActiveAdmins() == null safely." am: d46153c3d3 am: 70a6dfd647

am: df5053e85b

Change-Id: I8f01cd4716ead11e7671e5fa572b8cd01087899c
This commit is contained in:
Robin Lee
2017-12-13 17:31:16 +00:00
committed by android-build-merger

View File

@@ -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<ComponentName> 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<ComponentName> findAdminWithPackageName(String packageName) {
List<ComponentName> 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();