Handle getActiveAdmins() == null safely.
Test: adb install -r $OUT/system/priv-app/Settings/Settings.apk && adb shell am start -n com.android.settings/.DeviceAdminAdd --es android.app.extra.DEVICE_ADMIN_PACKAGE_NAME com.example.nonexistent Change-Id: I1e3cf406e8053f6dbf99669f33b7c16648c9c8f8 Fix: 70491813
This commit is contained in:
@@ -69,6 +69,7 @@ import org.xmlpull.v1.XmlPullParserException;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class DeviceAdminAdd extends Activity {
|
public class DeviceAdminAdd extends Activity {
|
||||||
static final String TAG = "DeviceAdminAdd";
|
static final String TAG = "DeviceAdminAdd";
|
||||||
@@ -145,18 +146,14 @@ public class DeviceAdminAdd extends Activity {
|
|||||||
DevicePolicyManager.EXTRA_DEVICE_ADMIN);
|
DevicePolicyManager.EXTRA_DEVICE_ADMIN);
|
||||||
if (who == null) {
|
if (who == null) {
|
||||||
String packageName = getIntent().getStringExtra(EXTRA_DEVICE_ADMIN_PACKAGE_NAME);
|
String packageName = getIntent().getStringExtra(EXTRA_DEVICE_ADMIN_PACKAGE_NAME);
|
||||||
for (ComponentName component : mDPM.getActiveAdmins()) {
|
Optional<ComponentName> installedAdmin = findAdminWithPackageName(packageName);
|
||||||
if (component.getPackageName().equals(packageName)) {
|
if (!installedAdmin.isPresent()) {
|
||||||
who = component;
|
|
||||||
mUninstalling = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (who == null) {
|
|
||||||
Log.w(TAG, "No component specified in " + action);
|
Log.w(TAG, "No component specified in " + action);
|
||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
who = installedAdmin.get();
|
||||||
|
mUninstalling = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action != null && action.equals(DevicePolicyManager.ACTION_SET_PROFILE_OWNER)) {
|
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 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() {
|
private boolean isAdminUninstallable() {
|
||||||
// System apps can't be uninstalled.
|
// System apps can't be uninstalled.
|
||||||
return !mDeviceAdmin.getActivityInfo().applicationInfo.isSystemApp();
|
return !mDeviceAdmin.getActivityInfo().applicationInfo.isSystemApp();
|
||||||
|
Reference in New Issue
Block a user