Search in sources :

Example 6 with DeviceAdminInfo

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

the class DeviceAdminSettings method onListItemClick.

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    Object o = l.getAdapter().getItem(position);
    DeviceAdminInfo dpi = (DeviceAdminInfo) o;
    final UserHandle user = new UserHandle(getUserId(dpi));
    final Activity activity = getActivity();
    Intent intent = new Intent(activity, DeviceAdminAdd.class);
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, dpi.getComponent());
    activity.startActivityAsUser(intent, user);
}
Also used : DeviceAdminInfo(android.app.admin.DeviceAdminInfo) UserHandle(android.os.UserHandle) Activity(android.app.Activity) Intent(android.content.Intent)

Example 7 with DeviceAdminInfo

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

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 8 with DeviceAdminInfo

use of android.app.admin.DeviceAdminInfo in project platform_frameworks_base by android.

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 9 with DeviceAdminInfo

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

the class DevicePolicyManagerService method setActiveAdmin.

/**
     * @param adminReceiver The admin to add
     * @param refreshing true = update an active admin, no error
     */
public void setActiveAdmin(ComponentName adminReceiver, boolean refreshing, int userHandle) {
    mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BIND_DEVICE_ADMIN, null);
    enforceCrossUserPermission(userHandle);
    DevicePolicyData policy = getUserData(userHandle);
    DeviceAdminInfo info = findAdmin(adminReceiver, userHandle);
    if (info == null) {
        throw new IllegalArgumentException("Bad admin: " + adminReceiver);
    }
    synchronized (this) {
        long ident = Binder.clearCallingIdentity();
        try {
            if (!refreshing && getActiveAdminUncheckedLocked(adminReceiver, userHandle) != null) {
                throw new IllegalArgumentException("Admin is already added");
            }
            ActiveAdmin newAdmin = new ActiveAdmin(info);
            policy.mAdminMap.put(adminReceiver, newAdmin);
            int replaceIndex = -1;
            if (refreshing) {
                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);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }
}
Also used : DeviceAdminInfo(android.app.admin.DeviceAdminInfo)

Example 10 with DeviceAdminInfo

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

the class DevicePolicyManagerService method loadSettingsLocked.

private void loadSettingsLocked(DevicePolicyData policy, int userHandle) {
    JournaledFile journal = makeJournaledFile(userHandle);
    FileInputStream stream = null;
    File file = journal.chooseForRead();
    try {
        stream = new FileInputStream(file);
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(stream, null);
        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);
        }
        type = parser.next();
        int outerDepth = parser.getDepth();
        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);
                    if (DBG && (UserHandle.getUserId(dai.getActivityInfo().applicationInfo.uid) != userHandle)) {
                        Slog.w(TAG, "findAdmin returned an incorrect uid " + dai.getActivityInfo().applicationInfo.uid + " for user " + userHandle);
                    }
                    if (dai != null) {
                        ActiveAdmin ap = new ActiveAdmin(dai);
                        ap.readFromXml(parser);
                        policy.mAdminMap.put(ap.info.getComponent(), ap);
                        policy.mAdminList.add(ap);
                    }
                } catch (RuntimeException e) {
                    Slog.w(TAG, "Failed loading admin " + name, e);
                }
            } else if ("failed-password-attempts".equals(tag)) {
                policy.mFailedPasswordAttempts = Integer.parseInt(parser.getAttributeValue(null, "value"));
                XmlUtils.skipCurrentTag(parser);
            } else if ("password-owner".equals(tag)) {
                policy.mPasswordOwner = Integer.parseInt(parser.getAttributeValue(null, "value"));
                XmlUtils.skipCurrentTag(parser);
            } else if ("active-password".equals(tag)) {
                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"));
                XmlUtils.skipCurrentTag(parser);
            } else {
                Slog.w(TAG, "Unknown tag: " + tag);
                XmlUtils.skipCurrentTag(parser);
            }
        }
    } catch (NullPointerException e) {
        Slog.w(TAG, "failed parsing " + file + " " + e);
    } catch (NumberFormatException e) {
        Slog.w(TAG, "failed parsing " + file + " " + e);
    } catch (XmlPullParserException e) {
        Slog.w(TAG, "failed parsing " + file + " " + e);
    } catch (FileNotFoundException e) {
    // Don't be noisy, this is normal if we haven't defined any policies.
    } catch (IOException e) {
        Slog.w(TAG, "failed parsing " + file + " " + e);
    } catch (IndexOutOfBoundsException e) {
        Slog.w(TAG, "failed parsing " + file + " " + e);
    }
    try {
        if (stream != null) {
            stream.close();
        }
    } catch (IOException e) {
    // Ignore
    }
    // Validate that what we stored for the password quality matches
    // sufficiently what is currently set.  Note that this is only
    // a sanity check in case the two get out of sync; this should
    // never normally happen.
    LockPatternUtils utils = new LockPatternUtils(mContext);
    if (utils.getActivePasswordQuality() < policy.mActivePasswordQuality) {
        Slog.w(TAG, "Active password quality 0x" + Integer.toHexString(policy.mActivePasswordQuality) + " does not match actual quality 0x" + Integer.toHexString(utils.getActivePasswordQuality()));
        policy.mActivePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
        policy.mActivePasswordLength = 0;
        policy.mActivePasswordUpperCase = 0;
        policy.mActivePasswordLowerCase = 0;
        policy.mActivePasswordLetters = 0;
        policy.mActivePasswordNumeric = 0;
        policy.mActivePasswordSymbols = 0;
        policy.mActivePasswordNonLetter = 0;
    }
    validatePasswordOwnerLocked(policy);
    syncDeviceCapabilitiesLocked(policy);
    updateMaximumTimeToLockLocked(policy);
}
Also used : JournaledFile(com.android.internal.util.JournaledFile) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) LockPatternUtils(com.android.internal.widget.LockPatternUtils) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) DeviceAdminInfo(android.app.admin.DeviceAdminInfo) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) AtomicFile(android.util.AtomicFile) File(java.io.File) JournaledFile(com.android.internal.util.JournaledFile)

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