Merge "Handle getActiveAdmins() == null safely." am: d46153c3d3
am: 70a6dfd647
am: df5053e85b
Change-Id: I8f01cd4716ead11e7671e5fa572b8cd01087899c
This commit is contained in:
@@ -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();
|
||||
|
Reference in New Issue
Block a user