Search in sources :

Example 11 with DeviceAdminInfo

use of android.app.admin.DeviceAdminInfo in project android_frameworks_base by DirtyUnicorns.

the class DevicePolicyManagerService method setActiveAdmin.

private void setActiveAdmin(ComponentName adminReceiver, boolean refreshing, int userHandle, Bundle onEnableData) {
    mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEVICE_ADMINS, null);
    enforceFullCrossUsersPermission(userHandle);
    DevicePolicyData policy = getUserData(userHandle);
    DeviceAdminInfo info = findAdmin(adminReceiver, userHandle, /* throwForMissionPermission= */
    true);
    if (info == null) {
        throw new IllegalArgumentException("Bad admin: " + adminReceiver);
    }
    if (!info.getActivityInfo().applicationInfo.isInternal()) {
        throw new IllegalArgumentException("Only apps in internal storage can be active admin: " + adminReceiver);
    }
    synchronized (this) {
        long ident = mInjector.binderClearCallingIdentity();
        try {
            final ActiveAdmin existingAdmin = getActiveAdminUncheckedLocked(adminReceiver, userHandle);
            if (!refreshing && existingAdmin != null) {
                throw new IllegalArgumentException("Admin is already added");
            }
            if (policy.mRemovingAdmins.contains(adminReceiver)) {
                throw new IllegalArgumentException("Trying to set an admin which is being removed");
            }
            ActiveAdmin newAdmin = new ActiveAdmin(info, /* parent */
            false);
            newAdmin.testOnlyAdmin = (existingAdmin != null) ? existingAdmin.testOnlyAdmin : isPackageTestOnly(adminReceiver.getPackageName(), userHandle);
            policy.mAdminMap.put(adminReceiver, newAdmin);
            int replaceIndex = -1;
            final int N = policy.mAdminList.size();
            for (int i = 0; i < N; i++) {
                ActiveAdmin oldAdmin = policy.mAdminList.get(i);
                if (oldAdmin.info.getComponent().equals(adminReceiver)) {
                    replaceIndex = i;
                    break;
                }
            }
            if (replaceIndex == -1) {
                policy.mAdminList.add(newAdmin);
                enableIfNecessary(info.getPackageName(), userHandle);
            } else {
                policy.mAdminList.set(replaceIndex, newAdmin);
            }
            saveSettingsLocked(userHandle);
            sendAdminCommandLocked(newAdmin, DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED, onEnableData, null);
        } finally {
            mInjector.binderRestoreCallingIdentity(ident);
        }
    }
}
Also used : DeviceAdminInfo(android.app.admin.DeviceAdminInfo)

Example 12 with DeviceAdminInfo

use of android.app.admin.DeviceAdminInfo in project android_frameworks_base by DirtyUnicorns.

the class DevicePolicyManagerService method findAdmin.

public DeviceAdminInfo findAdmin(ComponentName adminName, int userHandle, boolean throwForMissiongPermission) {
    if (!mHasFeature) {
        return null;
    }
    enforceFullCrossUsersPermission(userHandle);
    ActivityInfo ai = null;
    try {
        ai = mIPackageManager.getReceiverInfo(adminName, PackageManager.GET_META_DATA | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, userHandle);
    } catch (RemoteException e) {
    // shouldn't happen.
    }
    if (ai == null) {
        throw new IllegalArgumentException("Unknown admin: " + adminName);
    }
    if (!permission.BIND_DEVICE_ADMIN.equals(ai.permission)) {
        final String message = "DeviceAdminReceiver " + adminName + " must be protected with " + permission.BIND_DEVICE_ADMIN;
        Slog.w(LOG_TAG, message);
        if (throwForMissiongPermission && ai.applicationInfo.targetSdkVersion > Build.VERSION_CODES.M) {
            throw new IllegalArgumentException(message);
        }
    }
    try {
        return new DeviceAdminInfo(mContext, ai);
    } catch (XmlPullParserException | IOException e) {
        Slog.w(LOG_TAG, "Bad device admin requested for user=" + userHandle + ": " + adminName, e);
        return null;
    }
}
Also used : ActivityInfo(android.content.pm.ActivityInfo) DeviceAdminInfo(android.app.admin.DeviceAdminInfo) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) ParcelableString(com.android.internal.util.ParcelableString) IOException(java.io.IOException) RemoteException(android.os.RemoteException)

Example 13 with DeviceAdminInfo

use of android.app.admin.DeviceAdminInfo in project android_frameworks_base by DirtyUnicorns.

the class DevicePolicyManagerService method loadSettingsLocked.

private void loadSettingsLocked(DevicePolicyData policy, int userHandle) {
    JournaledFile journal = makeJournaledFile(userHandle);
    FileInputStream stream = null;
    File file = journal.chooseForRead();
    boolean needsRewrite = false;
    try {
        stream = new FileInputStream(file);
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(stream, StandardCharsets.UTF_8.name());
        int type;
        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
        }
        String tag = parser.getName();
        if (!"policies".equals(tag)) {
            throw new XmlPullParserException("Settings do not start with policies tag: found " + tag);
        }
        // Extract the permission provider component name if available
        String permissionProvider = parser.getAttributeValue(null, ATTR_PERMISSION_PROVIDER);
        if (permissionProvider != null) {
            policy.mRestrictionsProvider = ComponentName.unflattenFromString(permissionProvider);
        }
        String userSetupComplete = parser.getAttributeValue(null, ATTR_SETUP_COMPLETE);
        if (userSetupComplete != null && Boolean.toString(true).equals(userSetupComplete)) {
            policy.mUserSetupComplete = true;
        }
        String paired = parser.getAttributeValue(null, ATTR_DEVICE_PAIRED);
        if (paired != null && Boolean.toString(true).equals(paired)) {
            policy.mPaired = true;
        }
        String deviceProvisioningConfigApplied = parser.getAttributeValue(null, ATTR_DEVICE_PROVISIONING_CONFIG_APPLIED);
        if (deviceProvisioningConfigApplied != null && Boolean.toString(true).equals(deviceProvisioningConfigApplied)) {
            policy.mDeviceProvisioningConfigApplied = true;
        }
        String provisioningState = parser.getAttributeValue(null, ATTR_PROVISIONING_STATE);
        if (!TextUtils.isEmpty(provisioningState)) {
            policy.mUserProvisioningState = Integer.parseInt(provisioningState);
        }
        String permissionPolicy = parser.getAttributeValue(null, ATTR_PERMISSION_POLICY);
        if (!TextUtils.isEmpty(permissionPolicy)) {
            policy.mPermissionPolicy = Integer.parseInt(permissionPolicy);
        }
        policy.mDelegatedCertInstallerPackage = parser.getAttributeValue(null, ATTR_DELEGATED_CERT_INSTALLER);
        policy.mApplicationRestrictionsManagingPackage = parser.getAttributeValue(null, ATTR_APPLICATION_RESTRICTIONS_MANAGER);
        type = parser.next();
        int outerDepth = parser.getDepth();
        policy.mLockTaskPackages.clear();
        policy.mAdminList.clear();
        policy.mAdminMap.clear();
        policy.mAffiliationIds.clear();
        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
                continue;
            }
            tag = parser.getName();
            if ("admin".equals(tag)) {
                String name = parser.getAttributeValue(null, "name");
                try {
                    DeviceAdminInfo dai = findAdmin(ComponentName.unflattenFromString(name), userHandle, /* throwForMissionPermission= */
                    false);
                    if (VERBOSE_LOG && (UserHandle.getUserId(dai.getActivityInfo().applicationInfo.uid) != userHandle)) {
                        Slog.w(LOG_TAG, "findAdmin returned an incorrect uid " + dai.getActivityInfo().applicationInfo.uid + " for user " + userHandle);
                    }
                    if (dai != null) {
                        ActiveAdmin ap = new ActiveAdmin(dai, /* parent */
                        false);
                        ap.readFromXml(parser);
                        policy.mAdminMap.put(ap.info.getComponent(), ap);
                    }
                } catch (RuntimeException e) {
                    Slog.w(LOG_TAG, "Failed loading admin " + name, e);
                }
            } else if ("failed-password-attempts".equals(tag)) {
                policy.mFailedPasswordAttempts = Integer.parseInt(parser.getAttributeValue(null, "value"));
            } else if ("password-owner".equals(tag)) {
                policy.mPasswordOwner = Integer.parseInt(parser.getAttributeValue(null, "value"));
            } else if (TAG_ACCEPTED_CA_CERTIFICATES.equals(tag)) {
                policy.mAcceptedCaCertificates.add(parser.getAttributeValue(null, ATTR_NAME));
            } else if (TAG_LOCK_TASK_COMPONENTS.equals(tag)) {
                policy.mLockTaskPackages.add(parser.getAttributeValue(null, "name"));
            } else if (TAG_STATUS_BAR.equals(tag)) {
                policy.mStatusBarDisabled = Boolean.parseBoolean(parser.getAttributeValue(null, ATTR_DISABLED));
            } else if (DO_NOT_ASK_CREDENTIALS_ON_BOOT_XML.equals(tag)) {
                policy.doNotAskCredentialsOnBoot = true;
            } else if (TAG_AFFILIATION_ID.equals(tag)) {
                policy.mAffiliationIds.add(parser.getAttributeValue(null, "id"));
            } else if (TAG_ADMIN_BROADCAST_PENDING.equals(tag)) {
                String pending = parser.getAttributeValue(null, ATTR_VALUE);
                policy.mAdminBroadcastPending = Boolean.toString(true).equals(pending);
            } else if (TAG_INITIALIZATION_BUNDLE.equals(tag)) {
                policy.mInitBundle = PersistableBundle.restoreFromXml(parser);
            } else if ("active-password".equals(tag)) {
                if (mInjector.storageManagerIsFileBasedEncryptionEnabled()) {
                    // Remove this from FBE devices
                    needsRewrite = true;
                } else {
                    policy.mActivePasswordQuality = Integer.parseInt(parser.getAttributeValue(null, "quality"));
                    policy.mActivePasswordLength = Integer.parseInt(parser.getAttributeValue(null, "length"));
                    policy.mActivePasswordUpperCase = Integer.parseInt(parser.getAttributeValue(null, "uppercase"));
                    policy.mActivePasswordLowerCase = Integer.parseInt(parser.getAttributeValue(null, "lowercase"));
                    policy.mActivePasswordLetters = Integer.parseInt(parser.getAttributeValue(null, "letters"));
                    policy.mActivePasswordNumeric = Integer.parseInt(parser.getAttributeValue(null, "numeric"));
                    policy.mActivePasswordSymbols = Integer.parseInt(parser.getAttributeValue(null, "symbols"));
                    policy.mActivePasswordNonLetter = Integer.parseInt(parser.getAttributeValue(null, "nonletter"));
                }
            } else {
                Slog.w(LOG_TAG, "Unknown tag: " + tag);
                XmlUtils.skipCurrentTag(parser);
            }
        }
    } catch (FileNotFoundException e) {
    // Don't be noisy, this is normal if we haven't defined any policies.
    } catch (NullPointerException | NumberFormatException | XmlPullParserException | IOException | IndexOutOfBoundsException e) {
        Slog.w(LOG_TAG, "failed parsing " + file, e);
    }
    try {
        if (stream != null) {
            stream.close();
        }
    } catch (IOException e) {
    // Ignore
    }
    // Generate a list of admins from the admin map
    policy.mAdminList.addAll(policy.mAdminMap.values());
    // Might need to upgrade the file by rewriting it
    if (needsRewrite) {
        saveSettingsLocked(userHandle);
    }
    validatePasswordOwnerLocked(policy);
    updateMaximumTimeToLockLocked(userHandle);
    updateLockTaskPackagesLocked(policy.mLockTaskPackages, userHandle);
    if (policy.mStatusBarDisabled) {
        setStatusBarDisabledInternal(policy.mStatusBarDisabled, userHandle);
    }
}
Also used : JournaledFile(com.android.internal.util.JournaledFile) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) ParcelableString(com.android.internal.util.ParcelableString) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) DeviceAdminInfo(android.app.admin.DeviceAdminInfo) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) File(java.io.File) JournaledFile(com.android.internal.util.JournaledFile)

Example 14 with DeviceAdminInfo

use of android.app.admin.DeviceAdminInfo in project android_frameworks_base by ResurrectionRemix.

the class DevicePolicyManagerService method loadSettingsLocked.

private void loadSettingsLocked(DevicePolicyData policy, int userHandle) {
    JournaledFile journal = makeJournaledFile(userHandle);
    FileInputStream stream = null;
    File file = journal.chooseForRead();
    boolean needsRewrite = false;
    try {
        stream = new FileInputStream(file);
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(stream, StandardCharsets.UTF_8.name());
        int type;
        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
        }
        String tag = parser.getName();
        if (!"policies".equals(tag)) {
            throw new XmlPullParserException("Settings do not start with policies tag: found " + tag);
        }
        // Extract the permission provider component name if available
        String permissionProvider = parser.getAttributeValue(null, ATTR_PERMISSION_PROVIDER);
        if (permissionProvider != null) {
            policy.mRestrictionsProvider = ComponentName.unflattenFromString(permissionProvider);
        }
        String userSetupComplete = parser.getAttributeValue(null, ATTR_SETUP_COMPLETE);
        if (userSetupComplete != null && Boolean.toString(true).equals(userSetupComplete)) {
            policy.mUserSetupComplete = true;
        }
        String paired = parser.getAttributeValue(null, ATTR_DEVICE_PAIRED);
        if (paired != null && Boolean.toString(true).equals(paired)) {
            policy.mPaired = true;
        }
        String deviceProvisioningConfigApplied = parser.getAttributeValue(null, ATTR_DEVICE_PROVISIONING_CONFIG_APPLIED);
        if (deviceProvisioningConfigApplied != null && Boolean.toString(true).equals(deviceProvisioningConfigApplied)) {
            policy.mDeviceProvisioningConfigApplied = true;
        }
        String provisioningState = parser.getAttributeValue(null, ATTR_PROVISIONING_STATE);
        if (!TextUtils.isEmpty(provisioningState)) {
            policy.mUserProvisioningState = Integer.parseInt(provisioningState);
        }
        String permissionPolicy = parser.getAttributeValue(null, ATTR_PERMISSION_POLICY);
        if (!TextUtils.isEmpty(permissionPolicy)) {
            policy.mPermissionPolicy = Integer.parseInt(permissionPolicy);
        }
        policy.mDelegatedCertInstallerPackage = parser.getAttributeValue(null, ATTR_DELEGATED_CERT_INSTALLER);
        policy.mApplicationRestrictionsManagingPackage = parser.getAttributeValue(null, ATTR_APPLICATION_RESTRICTIONS_MANAGER);
        type = parser.next();
        int outerDepth = parser.getDepth();
        policy.mLockTaskPackages.clear();
        policy.mAdminList.clear();
        policy.mAdminMap.clear();
        policy.mAffiliationIds.clear();
        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
                continue;
            }
            tag = parser.getName();
            if ("admin".equals(tag)) {
                String name = parser.getAttributeValue(null, "name");
                try {
                    DeviceAdminInfo dai = findAdmin(ComponentName.unflattenFromString(name), userHandle, /* throwForMissionPermission= */
                    false);
                    if (VERBOSE_LOG && (UserHandle.getUserId(dai.getActivityInfo().applicationInfo.uid) != userHandle)) {
                        Slog.w(LOG_TAG, "findAdmin returned an incorrect uid " + dai.getActivityInfo().applicationInfo.uid + " for user " + userHandle);
                    }
                    if (dai != null) {
                        ActiveAdmin ap = new ActiveAdmin(dai, /* parent */
                        false);
                        ap.readFromXml(parser);
                        policy.mAdminMap.put(ap.info.getComponent(), ap);
                    }
                } catch (RuntimeException e) {
                    Slog.w(LOG_TAG, "Failed loading admin " + name, e);
                }
            } else if ("failed-password-attempts".equals(tag)) {
                policy.mFailedPasswordAttempts = Integer.parseInt(parser.getAttributeValue(null, "value"));
            } else if ("password-owner".equals(tag)) {
                policy.mPasswordOwner = Integer.parseInt(parser.getAttributeValue(null, "value"));
            } else if (TAG_ACCEPTED_CA_CERTIFICATES.equals(tag)) {
                policy.mAcceptedCaCertificates.add(parser.getAttributeValue(null, ATTR_NAME));
            } else if (TAG_LOCK_TASK_COMPONENTS.equals(tag)) {
                policy.mLockTaskPackages.add(parser.getAttributeValue(null, "name"));
            } else if (TAG_STATUS_BAR.equals(tag)) {
                policy.mStatusBarDisabled = Boolean.parseBoolean(parser.getAttributeValue(null, ATTR_DISABLED));
            } else if (DO_NOT_ASK_CREDENTIALS_ON_BOOT_XML.equals(tag)) {
                policy.doNotAskCredentialsOnBoot = true;
            } else if (TAG_AFFILIATION_ID.equals(tag)) {
                policy.mAffiliationIds.add(parser.getAttributeValue(null, "id"));
            } else if (TAG_ADMIN_BROADCAST_PENDING.equals(tag)) {
                String pending = parser.getAttributeValue(null, ATTR_VALUE);
                policy.mAdminBroadcastPending = Boolean.toString(true).equals(pending);
            } else if (TAG_INITIALIZATION_BUNDLE.equals(tag)) {
                policy.mInitBundle = PersistableBundle.restoreFromXml(parser);
            } else if ("active-password".equals(tag)) {
                if (mInjector.storageManagerIsFileBasedEncryptionEnabled()) {
                    // Remove this from FBE devices
                    needsRewrite = true;
                } else {
                    policy.mActivePasswordQuality = Integer.parseInt(parser.getAttributeValue(null, "quality"));
                    policy.mActivePasswordLength = Integer.parseInt(parser.getAttributeValue(null, "length"));
                    policy.mActivePasswordUpperCase = Integer.parseInt(parser.getAttributeValue(null, "uppercase"));
                    policy.mActivePasswordLowerCase = Integer.parseInt(parser.getAttributeValue(null, "lowercase"));
                    policy.mActivePasswordLetters = Integer.parseInt(parser.getAttributeValue(null, "letters"));
                    policy.mActivePasswordNumeric = Integer.parseInt(parser.getAttributeValue(null, "numeric"));
                    policy.mActivePasswordSymbols = Integer.parseInt(parser.getAttributeValue(null, "symbols"));
                    policy.mActivePasswordNonLetter = Integer.parseInt(parser.getAttributeValue(null, "nonletter"));
                }
            } else {
                Slog.w(LOG_TAG, "Unknown tag: " + tag);
                XmlUtils.skipCurrentTag(parser);
            }
        }
    } catch (FileNotFoundException e) {
    // Don't be noisy, this is normal if we haven't defined any policies.
    } catch (NullPointerException | NumberFormatException | XmlPullParserException | IOException | IndexOutOfBoundsException e) {
        Slog.w(LOG_TAG, "failed parsing " + file, e);
    }
    try {
        if (stream != null) {
            stream.close();
        }
    } catch (IOException e) {
    // Ignore
    }
    // Generate a list of admins from the admin map
    policy.mAdminList.addAll(policy.mAdminMap.values());
    // Might need to upgrade the file by rewriting it
    if (needsRewrite) {
        saveSettingsLocked(userHandle);
    }
    validatePasswordOwnerLocked(policy);
    updateMaximumTimeToLockLocked(userHandle);
    updateLockTaskPackagesLocked(policy.mLockTaskPackages, userHandle);
    if (policy.mStatusBarDisabled) {
        setStatusBarDisabledInternal(policy.mStatusBarDisabled, userHandle);
    }
}
Also used : JournaledFile(com.android.internal.util.JournaledFile) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) ParcelableString(com.android.internal.util.ParcelableString) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) DeviceAdminInfo(android.app.admin.DeviceAdminInfo) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) File(java.io.File) JournaledFile(com.android.internal.util.JournaledFile)

Example 15 with DeviceAdminInfo

use of android.app.admin.DeviceAdminInfo in project android_frameworks_base by ResurrectionRemix.

the class DevicePolicyManagerService method setActiveAdmin.

private void setActiveAdmin(ComponentName adminReceiver, boolean refreshing, int userHandle, Bundle onEnableData) {
    mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_DEVICE_ADMINS, null);
    enforceFullCrossUsersPermission(userHandle);
    DevicePolicyData policy = getUserData(userHandle);
    DeviceAdminInfo info = findAdmin(adminReceiver, userHandle, /* throwForMissionPermission= */
    true);
    if (info == null) {
        throw new IllegalArgumentException("Bad admin: " + adminReceiver);
    }
    if (!info.getActivityInfo().applicationInfo.isInternal()) {
        throw new IllegalArgumentException("Only apps in internal storage can be active admin: " + adminReceiver);
    }
    synchronized (this) {
        long ident = mInjector.binderClearCallingIdentity();
        try {
            final ActiveAdmin existingAdmin = getActiveAdminUncheckedLocked(adminReceiver, userHandle);
            if (!refreshing && existingAdmin != null) {
                throw new IllegalArgumentException("Admin is already added");
            }
            if (policy.mRemovingAdmins.contains(adminReceiver)) {
                throw new IllegalArgumentException("Trying to set an admin which is being removed");
            }
            ActiveAdmin newAdmin = new ActiveAdmin(info, /* parent */
            false);
            newAdmin.testOnlyAdmin = (existingAdmin != null) ? existingAdmin.testOnlyAdmin : isPackageTestOnly(adminReceiver.getPackageName(), userHandle);
            policy.mAdminMap.put(adminReceiver, newAdmin);
            int replaceIndex = -1;
            final int N = policy.mAdminList.size();
            for (int i = 0; i < N; i++) {
                ActiveAdmin oldAdmin = policy.mAdminList.get(i);
                if (oldAdmin.info.getComponent().equals(adminReceiver)) {
                    replaceIndex = i;
                    break;
                }
            }
            if (replaceIndex == -1) {
                policy.mAdminList.add(newAdmin);
                enableIfNecessary(info.getPackageName(), userHandle);
            } else {
                policy.mAdminList.set(replaceIndex, newAdmin);
            }
            saveSettingsLocked(userHandle);
            sendAdminCommandLocked(newAdmin, DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED, onEnableData, null);
        } finally {
            mInjector.binderRestoreCallingIdentity(ident);
        }
    }
}
Also used : DeviceAdminInfo(android.app.admin.DeviceAdminInfo)

Aggregations

DeviceAdminInfo (android.app.admin.DeviceAdminInfo)16 IOException (java.io.IOException)9 XmlPullParserException (org.xmlpull.v1.XmlPullParserException)9 ParcelableString (com.android.internal.util.ParcelableString)6 ActivityInfo (android.content.pm.ActivityInfo)5 RemoteException (android.os.RemoteException)5 Intent (android.content.Intent)4 JournaledFile (com.android.internal.util.JournaledFile)4 File (java.io.File)4 FileInputStream (java.io.FileInputStream)4 FileNotFoundException (java.io.FileNotFoundException)4 XmlPullParser (org.xmlpull.v1.XmlPullParser)4 ComponentName (android.content.ComponentName)3 PackageManager (android.content.pm.PackageManager)3 ResolveInfo (android.content.pm.ResolveInfo)3 IPackageManager (android.content.pm.IPackageManager)2 Activity (android.app.Activity)1 PendingIntent (android.app.PendingIntent)1 DialogInterface (android.content.DialogInterface)1 PackageInfo (android.content.pm.PackageInfo)1