Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7229e29f authored by Alex Klyubin's avatar Alex Klyubin Committed by Android (Google) Code Review
Browse files

Merge "Ensure all active Device Admins are listed." into jb-mr2-dev

parents 8274b677 d14258e5
Loading
Loading
Loading
Loading
+29 −2
Original line number Diff line number Diff line
@@ -43,8 +43,10 @@ import android.widget.TextView;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class DeviceAdminSettings extends ListFragment {
    static final String TAG = "DeviceAdminSettings";
@@ -91,8 +93,33 @@ public class DeviceAdminSettings extends ListFragment {
        List<ResolveInfo> avail = getActivity().getPackageManager().queryBroadcastReceivers(
                new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
                PackageManager.GET_META_DATA | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
        int count = avail == null ? 0 : avail.size();
        for (int i=0; i<count; i++) {
        if (avail == null) {
            avail = Collections.emptyList();
        }

        // Some admins listed in mActiveAdmins may not have been found by the above query.
        // We thus add them separately.
        Set<ComponentName> activeAdminsNotInAvail = new HashSet<ComponentName>(mActiveAdmins);
        for (ResolveInfo ri : avail) {
            ComponentName riComponentName =
                    new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name);
            activeAdminsNotInAvail.remove(riComponentName);
        }
        if (!activeAdminsNotInAvail.isEmpty()) {
            avail = new ArrayList<ResolveInfo>(avail);
            PackageManager packageManager = getActivity().getPackageManager();
            for (ComponentName unlistedActiveAdmin : activeAdminsNotInAvail) {
                List<ResolveInfo> resolved = packageManager.queryBroadcastReceivers(
                        new Intent().setComponent(unlistedActiveAdmin),
                        PackageManager.GET_META_DATA
                                | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
                if (resolved != null) {
                    avail.addAll(resolved);
                }
            }
        }

        for (int i = 0, count = avail.size(); i < count; i++) {
            ResolveInfo ri = avail.get(i);
            try {
                DeviceAdminInfo dpi = new DeviceAdminInfo(getActivity(), ri);