Search in sources :

Example 16 with JournaledFile

use of com.android.internal.util.JournaledFile in project android_frameworks_base by ParanoidAndroid.

the class Settings method writeLPr.

void writeLPr() {
    // been successfully written.
    if (mSettingsFilename.exists()) {
        // might have been corrupted.
        if (!mBackupSettingsFilename.exists()) {
            if (!mSettingsFilename.renameTo(mBackupSettingsFilename)) {
                Log.wtf(PackageManagerService.TAG, "Unable to backup package manager settings, " + " current changes will be lost at reboot");
                return;
            }
        } else {
            mSettingsFilename.delete();
            Slog.w(PackageManagerService.TAG, "Preserving older settings backup");
        }
    }
    mPastSignatures.clear();
    try {
        FileOutputStream fstr = new FileOutputStream(mSettingsFilename);
        BufferedOutputStream str = new BufferedOutputStream(fstr);
        //XmlSerializer serializer = XmlUtils.serializerInstance();
        XmlSerializer serializer = new FastXmlSerializer();
        serializer.setOutput(str, "utf-8");
        serializer.startDocument(null, true);
        serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
        serializer.startTag(null, "packages");
        serializer.startTag(null, "last-platform-version");
        serializer.attribute(null, "internal", Integer.toString(mInternalSdkPlatform));
        serializer.attribute(null, "external", Integer.toString(mExternalSdkPlatform));
        serializer.endTag(null, "last-platform-version");
        if (mVerifierDeviceIdentity != null) {
            serializer.startTag(null, "verifier");
            serializer.attribute(null, "device", mVerifierDeviceIdentity.toString());
            serializer.endTag(null, "verifier");
        }
        if (mReadExternalStorageEnforced != null) {
            serializer.startTag(null, TAG_READ_EXTERNAL_STORAGE);
            serializer.attribute(null, ATTR_ENFORCEMENT, mReadExternalStorageEnforced ? "1" : "0");
            serializer.endTag(null, TAG_READ_EXTERNAL_STORAGE);
        }
        serializer.startTag(null, "permission-trees");
        for (BasePermission bp : mPermissionTrees.values()) {
            writePermissionLPr(serializer, bp);
        }
        serializer.endTag(null, "permission-trees");
        serializer.startTag(null, "permissions");
        for (BasePermission bp : mPermissions.values()) {
            writePermissionLPr(serializer, bp);
        }
        serializer.endTag(null, "permissions");
        for (final PackageSetting pkg : mPackages.values()) {
            writePackageLPr(serializer, pkg);
        }
        for (final PackageSetting pkg : mDisabledSysPackages.values()) {
            writeDisabledSysPackageLPr(serializer, pkg);
        }
        for (final SharedUserSetting usr : mSharedUsers.values()) {
            serializer.startTag(null, "shared-user");
            serializer.attribute(null, ATTR_NAME, usr.name);
            serializer.attribute(null, "userId", Integer.toString(usr.userId));
            usr.signatures.writeXml(serializer, "sigs", mPastSignatures);
            serializer.startTag(null, "perms");
            for (String name : usr.grantedPermissions) {
                serializer.startTag(null, TAG_ITEM);
                serializer.attribute(null, ATTR_NAME, name);
                serializer.endTag(null, TAG_ITEM);
            }
            serializer.endTag(null, "perms");
            serializer.endTag(null, "shared-user");
        }
        if (mPackagesToBeCleaned.size() > 0) {
            for (PackageCleanItem item : mPackagesToBeCleaned) {
                final String userStr = Integer.toString(item.userId);
                serializer.startTag(null, "cleaning-package");
                serializer.attribute(null, ATTR_NAME, item.packageName);
                serializer.attribute(null, ATTR_CODE, item.andCode ? "true" : "false");
                serializer.attribute(null, ATTR_USER, userStr);
                serializer.endTag(null, "cleaning-package");
            }
        }
        if (mRenamedPackages.size() > 0) {
            for (Map.Entry<String, String> e : mRenamedPackages.entrySet()) {
                serializer.startTag(null, "renamed-package");
                serializer.attribute(null, "new", e.getKey());
                serializer.attribute(null, "old", e.getValue());
                serializer.endTag(null, "renamed-package");
            }
        }
        serializer.endTag(null, "packages");
        serializer.endDocument();
        str.flush();
        FileUtils.sync(fstr);
        str.close();
        // New settings successfully written, old ones are no longer
        // needed.
        mBackupSettingsFilename.delete();
        FileUtils.setPermissions(mSettingsFilename.toString(), FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IRGRP | FileUtils.S_IWGRP, -1, -1);
        // Write package list file now, use a JournaledFile.
        //
        File tempFile = new File(mPackageListFilename.toString() + ".tmp");
        JournaledFile journal = new JournaledFile(mPackageListFilename, tempFile);
        fstr = new FileOutputStream(journal.chooseForWrite());
        str = new BufferedOutputStream(fstr);
        try {
            StringBuilder sb = new StringBuilder();
            for (final PackageSetting pkg : mPackages.values()) {
                ApplicationInfo ai = pkg.pkg.applicationInfo;
                String dataPath = ai.dataDir;
                boolean isDebug = (ai.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
                // or that is handled by the system.
                if (dataPath.indexOf(" ") >= 0 || ai.uid < Process.FIRST_APPLICATION_UID)
                    continue;
                // we store on each line the following information for now:
                //
                // pkgName    - package name
                // userId     - application-specific user id
                // debugFlag  - 0 or 1 if the package is debuggable.
                // dataPath   - path to package's data path
                // seinfo     - seinfo label for the app (assigned at install time)
                //
                // NOTE: We prefer not to expose all ApplicationInfo flags for now.
                //
                // DO NOT MODIFY THIS FORMAT UNLESS YOU CAN ALSO MODIFY ITS USERS
                // FROM NATIVE CODE. AT THE MOMENT, LOOK AT THE FOLLOWING SOURCES:
                //   system/core/run-as/run-as.c
                //
                sb.setLength(0);
                sb.append(ai.packageName);
                sb.append(" ");
                sb.append((int) ai.uid);
                sb.append(isDebug ? " 1 " : " 0 ");
                sb.append(dataPath);
                sb.append(" ");
                sb.append(ai.seinfo);
                sb.append("\n");
                str.write(sb.toString().getBytes());
            }
            str.flush();
            FileUtils.sync(fstr);
            str.close();
            journal.commit();
        } catch (Exception e) {
            IoUtils.closeQuietly(str);
            journal.rollback();
        }
        FileUtils.setPermissions(mPackageListFilename.toString(), FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IRGRP | FileUtils.S_IWGRP, -1, -1);
        writeAllUsersPackageRestrictionsLPr();
        return;
    } catch (XmlPullParserException e) {
        Log.wtf(PackageManagerService.TAG, "Unable to write package manager settings, " + "current changes will be lost at reboot", e);
    } catch (java.io.IOException e) {
        Log.wtf(PackageManagerService.TAG, "Unable to write package manager settings, " + "current changes will be lost at reboot", e);
    }
    // Clean up partially written files
    if (mSettingsFilename.exists()) {
        if (!mSettingsFilename.delete()) {
            Log.wtf(PackageManagerService.TAG, "Failed to clean up mangled file: " + mSettingsFilename);
        }
    }
//Debug.stopMethodTracing();
}
Also used : JournaledFile(com.android.internal.util.JournaledFile) ApplicationInfo(android.content.pm.ApplicationInfo) IOException(java.io.IOException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException) FastXmlSerializer(com.android.internal.util.FastXmlSerializer) PackageCleanItem(android.content.pm.PackageCleanItem) FileOutputStream(java.io.FileOutputStream) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) BufferedOutputStream(java.io.BufferedOutputStream) Map(java.util.Map) HashMap(java.util.HashMap) File(java.io.File) JournaledFile(com.android.internal.util.JournaledFile) XmlSerializer(org.xmlpull.v1.XmlSerializer) FastXmlSerializer(com.android.internal.util.FastXmlSerializer)

Example 17 with JournaledFile

use of com.android.internal.util.JournaledFile in project platform_frameworks_base by android.

the class WallpaperManagerService method loadSettingsLocked.

private void loadSettingsLocked(int userId, boolean keepDimensionHints) {
    if (DEBUG)
        Slog.v(TAG, "loadSettingsLocked");
    JournaledFile journal = makeJournaledFile(userId);
    FileInputStream stream = null;
    File file = journal.chooseForRead();
    if (!file.exists()) {
        // This should only happen one time, when upgrading from a legacy system
        migrateFromOld();
    }
    WallpaperData wallpaper = mWallpaperMap.get(userId);
    if (wallpaper == null) {
        wallpaper = new WallpaperData(userId, WALLPAPER, WALLPAPER_CROP);
        wallpaper.allowBackup = true;
        mWallpaperMap.put(userId, wallpaper);
        if (!wallpaper.cropExists()) {
            generateCrop(wallpaper);
        }
    }
    boolean success = false;
    try {
        stream = new FileInputStream(file);
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(stream, StandardCharsets.UTF_8.name());
        int type;
        do {
            type = parser.next();
            if (type == XmlPullParser.START_TAG) {
                String tag = parser.getName();
                if ("wp".equals(tag)) {
                    // Common to system + lock wallpapers
                    parseWallpaperAttributes(parser, wallpaper, keepDimensionHints);
                    // A system wallpaper might also be a live wallpaper
                    String comp = parser.getAttributeValue(null, "component");
                    wallpaper.nextWallpaperComponent = comp != null ? ComponentName.unflattenFromString(comp) : null;
                    if (wallpaper.nextWallpaperComponent == null || "android".equals(wallpaper.nextWallpaperComponent.getPackageName())) {
                        wallpaper.nextWallpaperComponent = mImageWallpaper;
                    }
                    if (DEBUG) {
                        Slog.v(TAG, "mWidth:" + wallpaper.width);
                        Slog.v(TAG, "mHeight:" + wallpaper.height);
                        Slog.v(TAG, "cropRect:" + wallpaper.cropHint);
                        Slog.v(TAG, "mName:" + wallpaper.name);
                        Slog.v(TAG, "mNextWallpaperComponent:" + wallpaper.nextWallpaperComponent);
                    }
                } else if ("kwp".equals(tag)) {
                    // keyguard-specific wallpaper for this user
                    WallpaperData lockWallpaper = mLockWallpaperMap.get(userId);
                    if (lockWallpaper == null) {
                        lockWallpaper = new WallpaperData(userId, WALLPAPER_LOCK_ORIG, WALLPAPER_LOCK_CROP);
                        mLockWallpaperMap.put(userId, lockWallpaper);
                    }
                    parseWallpaperAttributes(parser, lockWallpaper, false);
                }
            }
        } while (type != XmlPullParser.END_DOCUMENT);
        success = true;
    } catch (FileNotFoundException e) {
        Slog.w(TAG, "no current wallpaper -- first boot?");
    } 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 (IOException e) {
        Slog.w(TAG, "failed parsing " + file + " " + e);
    } catch (IndexOutOfBoundsException e) {
        Slog.w(TAG, "failed parsing " + file + " " + e);
    }
    IoUtils.closeQuietly(stream);
    if (!success) {
        wallpaper.width = -1;
        wallpaper.height = -1;
        wallpaper.cropHint.set(0, 0, 0, 0);
        wallpaper.padding.set(0, 0, 0, 0);
        wallpaper.name = "";
        mLockWallpaperMap.remove(userId);
    } else {
        if (wallpaper.wallpaperId <= 0) {
            wallpaper.wallpaperId = makeWallpaperIdLocked();
            if (DEBUG) {
                Slog.w(TAG, "Didn't set wallpaper id in loadSettingsLocked(" + userId + "); now " + wallpaper.wallpaperId);
            }
        }
    }
    ensureSaneWallpaperData(wallpaper);
    WallpaperData lockWallpaper = mLockWallpaperMap.get(userId);
    if (lockWallpaper != null) {
        ensureSaneWallpaperData(lockWallpaper);
    }
}
Also used : JournaledFile(com.android.internal.util.JournaledFile) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) Point(android.graphics.Point) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) File(java.io.File) JournaledFile(com.android.internal.util.JournaledFile)

Example 18 with JournaledFile

use of com.android.internal.util.JournaledFile 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 19 with JournaledFile

use of com.android.internal.util.JournaledFile in project android_frameworks_base by ResurrectionRemix.

the class WallpaperManagerService method loadSettingsLocked.

private void loadSettingsLocked(int userId, boolean keepDimensionHints) {
    if (DEBUG)
        Slog.v(TAG, "loadSettingsLocked");
    JournaledFile journal = makeJournaledFile(userId);
    FileInputStream stream = null;
    File file = journal.chooseForRead();
    if (!file.exists()) {
        // This should only happen one time, when upgrading from a legacy system
        migrateFromOld();
    }
    WallpaperData wallpaper = mWallpaperMap.get(userId);
    if (wallpaper == null) {
        wallpaper = new WallpaperData(userId, WALLPAPER, WALLPAPER_CROP);
        wallpaper.allowBackup = true;
        mWallpaperMap.put(userId, wallpaper);
        if (!wallpaper.cropExists()) {
            generateCrop(wallpaper);
        }
    }
    boolean success = false;
    try {
        stream = new FileInputStream(file);
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(stream, StandardCharsets.UTF_8.name());
        int type;
        do {
            type = parser.next();
            if (type == XmlPullParser.START_TAG) {
                String tag = parser.getName();
                if ("wp".equals(tag)) {
                    // Common to system + lock wallpapers
                    parseWallpaperAttributes(parser, wallpaper, keepDimensionHints);
                    // A system wallpaper might also be a live wallpaper
                    String comp = parser.getAttributeValue(null, "component");
                    wallpaper.nextWallpaperComponent = comp != null ? ComponentName.unflattenFromString(comp) : null;
                    if (wallpaper.nextWallpaperComponent == null || "android".equals(wallpaper.nextWallpaperComponent.getPackageName())) {
                        wallpaper.nextWallpaperComponent = mImageWallpaper;
                    }
                    if (DEBUG) {
                        Slog.v(TAG, "mWidth:" + wallpaper.width);
                        Slog.v(TAG, "mHeight:" + wallpaper.height);
                        Slog.v(TAG, "cropRect:" + wallpaper.cropHint);
                        Slog.v(TAG, "mName:" + wallpaper.name);
                        Slog.v(TAG, "mNextWallpaperComponent:" + wallpaper.nextWallpaperComponent);
                    }
                } else if ("kwp".equals(tag)) {
                    // keyguard-specific wallpaper for this user
                    WallpaperData lockWallpaper = mLockWallpaperMap.get(userId);
                    if (lockWallpaper == null) {
                        lockWallpaper = new WallpaperData(userId, WALLPAPER_LOCK_ORIG, WALLPAPER_LOCK_CROP);
                        mLockWallpaperMap.put(userId, lockWallpaper);
                    }
                    parseWallpaperAttributes(parser, lockWallpaper, false);
                }
            }
        } while (type != XmlPullParser.END_DOCUMENT);
        success = true;
    } catch (FileNotFoundException e) {
        Slog.w(TAG, "no current wallpaper -- first boot?");
    } 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 (IOException e) {
        Slog.w(TAG, "failed parsing " + file + " " + e);
    } catch (IndexOutOfBoundsException e) {
        Slog.w(TAG, "failed parsing " + file + " " + e);
    }
    IoUtils.closeQuietly(stream);
    if (!success) {
        wallpaper.width = -1;
        wallpaper.height = -1;
        wallpaper.cropHint.set(0, 0, 0, 0);
        wallpaper.padding.set(0, 0, 0, 0);
        wallpaper.name = "";
        mLockWallpaperMap.remove(userId);
    } else {
        if (wallpaper.wallpaperId <= 0) {
            wallpaper.wallpaperId = makeWallpaperIdLocked();
            if (DEBUG) {
                Slog.w(TAG, "Didn't set wallpaper id in loadSettingsLocked(" + userId + "); now " + wallpaper.wallpaperId);
            }
        }
    }
    ensureSaneWallpaperData(wallpaper);
    WallpaperData lockWallpaper = mLockWallpaperMap.get(userId);
    if (lockWallpaper != null) {
        ensureSaneWallpaperData(lockWallpaper);
    }
}
Also used : JournaledFile(com.android.internal.util.JournaledFile) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) Point(android.graphics.Point) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) File(java.io.File) JournaledFile(com.android.internal.util.JournaledFile)

Example 20 with JournaledFile

use of com.android.internal.util.JournaledFile 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)

Aggregations

JournaledFile (com.android.internal.util.JournaledFile)23 IOException (java.io.IOException)23 XmlPullParserException (org.xmlpull.v1.XmlPullParserException)17 File (java.io.File)14 FileOutputStream (java.io.FileOutputStream)14 FileNotFoundException (java.io.FileNotFoundException)13 FastXmlSerializer (com.android.internal.util.FastXmlSerializer)10 XmlSerializer (org.xmlpull.v1.XmlSerializer)10 FileInputStream (java.io.FileInputStream)9 XmlPullParser (org.xmlpull.v1.XmlPullParser)9 ParcelableString (com.android.internal.util.ParcelableString)6 ApplicationInfo (android.content.pm.ApplicationInfo)5 AtomicFile (android.util.AtomicFile)5 BufferedOutputStream (java.io.BufferedOutputStream)5 DeviceAdminInfo (android.app.admin.DeviceAdminInfo)4 UserInfo (android.content.pm.UserInfo)4 Point (android.graphics.Point)4 BufferedWriter (java.io.BufferedWriter)4 OutputStreamWriter (java.io.OutputStreamWriter)4 InstallerException (com.android.internal.os.InstallerConnection.InstallerException)3