Search in sources :

Example 91 with FastXmlSerializer

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

the class PersistentDataStore method save.

private void save() {
    final FileOutputStream os;
    try {
        os = mAtomicFile.startWrite();
        boolean success = false;
        try {
            XmlSerializer serializer = new FastXmlSerializer();
            serializer.setOutput(new BufferedOutputStream(os), "utf-8");
            saveToXml(serializer);
            serializer.flush();
            success = true;
        } finally {
            if (success) {
                mAtomicFile.finishWrite(os);
            } else {
                mAtomicFile.failWrite(os);
            }
        }
    } catch (IOException ex) {
        Slog.w(InputManagerService.TAG, "Failed to save input manager persistent store data.", ex);
    }
}
Also used : FastXmlSerializer(com.android.internal.util.FastXmlSerializer) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) BufferedOutputStream(java.io.BufferedOutputStream) XmlSerializer(org.xmlpull.v1.XmlSerializer) FastXmlSerializer(com.android.internal.util.FastXmlSerializer)

Example 92 with FastXmlSerializer

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

the class SyncStorageEngine method writeAccountInfoLocked.

/**
     * Write all account information to the account file.
     */
private void writeAccountInfoLocked() {
    if (DEBUG_FILE)
        Log.v(TAG, "Writing new " + mAccountInfoFile.getBaseFile());
    FileOutputStream fos = null;
    try {
        fos = mAccountInfoFile.startWrite();
        XmlSerializer out = new FastXmlSerializer();
        out.setOutput(fos, "utf-8");
        out.startDocument(null, true);
        out.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
        out.startTag(null, "accounts");
        out.attribute(null, "version", Integer.toString(ACCOUNTS_VERSION));
        out.attribute(null, XML_ATTR_NEXT_AUTHORITY_ID, Integer.toString(mNextAuthorityId));
        out.attribute(null, XML_ATTR_SYNC_RANDOM_OFFSET, Integer.toString(mSyncRandomOffset));
        // Write the Sync Automatically flags for each user
        final int M = mMasterSyncAutomatically.size();
        for (int m = 0; m < M; m++) {
            int userId = mMasterSyncAutomatically.keyAt(m);
            Boolean listen = mMasterSyncAutomatically.valueAt(m);
            out.startTag(null, XML_TAG_LISTEN_FOR_TICKLES);
            out.attribute(null, XML_ATTR_USER, Integer.toString(userId));
            out.attribute(null, XML_ATTR_ENABLED, Boolean.toString(listen));
            out.endTag(null, XML_TAG_LISTEN_FOR_TICKLES);
        }
        final int N = mAuthorities.size();
        for (int i = 0; i < N; i++) {
            AuthorityInfo authority = mAuthorities.valueAt(i);
            out.startTag(null, "authority");
            out.attribute(null, "id", Integer.toString(authority.ident));
            out.attribute(null, "account", authority.account.name);
            out.attribute(null, XML_ATTR_USER, Integer.toString(authority.userId));
            out.attribute(null, "type", authority.account.type);
            out.attribute(null, "authority", authority.authority);
            out.attribute(null, XML_ATTR_ENABLED, Boolean.toString(authority.enabled));
            if (authority.syncable < 0) {
                out.attribute(null, "syncable", "unknown");
            } else {
                out.attribute(null, "syncable", Boolean.toString(authority.syncable != 0));
            }
            for (Pair<Bundle, Long> periodicSync : authority.periodicSyncs) {
                out.startTag(null, "periodicSync");
                out.attribute(null, "period", Long.toString(periodicSync.second));
                final Bundle extras = periodicSync.first;
                for (String key : extras.keySet()) {
                    out.startTag(null, "extra");
                    out.attribute(null, "name", key);
                    final Object value = extras.get(key);
                    if (value instanceof Long) {
                        out.attribute(null, "type", "long");
                        out.attribute(null, "value1", value.toString());
                    } else if (value instanceof Integer) {
                        out.attribute(null, "type", "integer");
                        out.attribute(null, "value1", value.toString());
                    } else if (value instanceof Boolean) {
                        out.attribute(null, "type", "boolean");
                        out.attribute(null, "value1", value.toString());
                    } else if (value instanceof Float) {
                        out.attribute(null, "type", "float");
                        out.attribute(null, "value1", value.toString());
                    } else if (value instanceof Double) {
                        out.attribute(null, "type", "double");
                        out.attribute(null, "value1", value.toString());
                    } else if (value instanceof String) {
                        out.attribute(null, "type", "string");
                        out.attribute(null, "value1", value.toString());
                    } else if (value instanceof Account) {
                        out.attribute(null, "type", "account");
                        out.attribute(null, "value1", ((Account) value).name);
                        out.attribute(null, "value2", ((Account) value).type);
                    }
                    out.endTag(null, "extra");
                }
                out.endTag(null, "periodicSync");
            }
            out.endTag(null, "authority");
        }
        out.endTag(null, "accounts");
        out.endDocument();
        mAccountInfoFile.finishWrite(fos);
    } catch (java.io.IOException e1) {
        Log.w(TAG, "Error writing accounts", e1);
        if (fos != null) {
            mAccountInfoFile.failWrite(fos);
        }
    }
}
Also used : Account(android.accounts.Account) Bundle(android.os.Bundle) FastXmlSerializer(com.android.internal.util.FastXmlSerializer) FileOutputStream(java.io.FileOutputStream) XmlSerializer(org.xmlpull.v1.XmlSerializer) FastXmlSerializer(com.android.internal.util.FastXmlSerializer)

Example 93 with FastXmlSerializer

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

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

the class Settings method writePackageRestrictionsLPr.

void writePackageRestrictionsLPr(int userId) {
    if (DEBUG_MU) {
        Log.i(TAG, "Writing package restrictions for user=" + userId);
    }
    // Keep the old stopped packages around until we know the new ones have
    // been successfully written.
    File userPackagesStateFile = getUserPackagesStateFile(userId);
    File backupFile = getUserPackagesStateBackupFile(userId);
    new File(userPackagesStateFile.getParent()).mkdirs();
    if (userPackagesStateFile.exists()) {
        // might have been corrupted.
        if (!backupFile.exists()) {
            if (!userPackagesStateFile.renameTo(backupFile)) {
                Log.wtf(PackageManagerService.TAG, "Unable to backup user packages state file, " + "current changes will be lost at reboot");
                return;
            }
        } else {
            userPackagesStateFile.delete();
            Slog.w(PackageManagerService.TAG, "Preserving older stopped packages backup");
        }
    }
    try {
        final FileOutputStream fstr = new FileOutputStream(userPackagesStateFile);
        final BufferedOutputStream str = new BufferedOutputStream(fstr);
        final 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, TAG_PACKAGE_RESTRICTIONS);
        for (final PackageSetting pkg : mPackages.values()) {
            PackageUserState ustate = pkg.readUserState(userId);
            if (ustate.stopped || ustate.notLaunched || !ustate.installed || ustate.enabled != COMPONENT_ENABLED_STATE_DEFAULT || (ustate.enabledComponents != null && ustate.enabledComponents.size() > 0) || (ustate.disabledComponents != null && ustate.disabledComponents.size() > 0)) {
                serializer.startTag(null, TAG_PACKAGE);
                serializer.attribute(null, ATTR_NAME, pkg.name);
                if (DEBUG_MU)
                    Log.i(TAG, "  pkg=" + pkg.name + ", state=" + ustate.enabled);
                if (!ustate.installed) {
                    serializer.attribute(null, ATTR_INSTALLED, "false");
                }
                if (ustate.stopped) {
                    serializer.attribute(null, ATTR_STOPPED, "true");
                }
                if (ustate.notLaunched) {
                    serializer.attribute(null, ATTR_NOT_LAUNCHED, "true");
                }
                if (ustate.enabled != COMPONENT_ENABLED_STATE_DEFAULT) {
                    serializer.attribute(null, ATTR_ENABLED, Integer.toString(ustate.enabled));
                    if (ustate.lastDisableAppCaller != null) {
                        serializer.attribute(null, ATTR_ENABLED_CALLER, ustate.lastDisableAppCaller);
                    }
                }
                if (ustate.enabledComponents != null && ustate.enabledComponents.size() > 0) {
                    serializer.startTag(null, TAG_ENABLED_COMPONENTS);
                    for (final String name : ustate.enabledComponents) {
                        serializer.startTag(null, TAG_ITEM);
                        serializer.attribute(null, ATTR_NAME, name);
                        serializer.endTag(null, TAG_ITEM);
                    }
                    serializer.endTag(null, TAG_ENABLED_COMPONENTS);
                }
                if (ustate.disabledComponents != null && ustate.disabledComponents.size() > 0) {
                    serializer.startTag(null, TAG_DISABLED_COMPONENTS);
                    for (final String name : ustate.disabledComponents) {
                        serializer.startTag(null, TAG_ITEM);
                        serializer.attribute(null, ATTR_NAME, name);
                        serializer.endTag(null, TAG_ITEM);
                    }
                    serializer.endTag(null, TAG_DISABLED_COMPONENTS);
                }
                serializer.endTag(null, TAG_PACKAGE);
            }
        }
        writePreferredActivitiesLPr(serializer, userId, true);
        serializer.endTag(null, TAG_PACKAGE_RESTRICTIONS);
        serializer.endDocument();
        str.flush();
        FileUtils.sync(fstr);
        str.close();
        // New settings successfully written, old ones are no longer
        // needed.
        backupFile.delete();
        FileUtils.setPermissions(userPackagesStateFile.toString(), FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IRGRP | FileUtils.S_IWGRP, -1, -1);
        // Done, all is good!
        return;
    } catch (java.io.IOException e) {
        Log.wtf(PackageManagerService.TAG, "Unable to write package manager user packages state, " + " current changes will be lost at reboot", e);
    }
    // Clean up partially written files
    if (userPackagesStateFile.exists()) {
        if (!userPackagesStateFile.delete()) {
            Log.i(PackageManagerService.TAG, "Failed to clean up mangled file: " + mStoppedPackagesFilename);
        }
    }
}
Also used : FastXmlSerializer(com.android.internal.util.FastXmlSerializer) PackageUserState(android.content.pm.PackageUserState) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) File(java.io.File) JournaledFile(com.android.internal.util.JournaledFile) BufferedOutputStream(java.io.BufferedOutputStream) XmlSerializer(org.xmlpull.v1.XmlSerializer) FastXmlSerializer(com.android.internal.util.FastXmlSerializer)

Example 95 with FastXmlSerializer

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

the class NetworkPolicyManagerService method writePolicyLocked.

private void writePolicyLocked() {
    if (LOGV)
        Slog.v(TAG, "writePolicyLocked()");
    FileOutputStream fos = null;
    try {
        fos = mPolicyFile.startWrite();
        XmlSerializer out = new FastXmlSerializer();
        out.setOutput(fos, "utf-8");
        out.startDocument(null, true);
        out.startTag(null, TAG_POLICY_LIST);
        writeIntAttribute(out, ATTR_VERSION, VERSION_LATEST);
        writeBooleanAttribute(out, ATTR_RESTRICT_BACKGROUND, mRestrictBackground);
        // write all known network policies
        for (NetworkPolicy policy : mNetworkPolicy.values()) {
            final NetworkTemplate template = policy.template;
            out.startTag(null, TAG_NETWORK_POLICY);
            writeIntAttribute(out, ATTR_NETWORK_TEMPLATE, template.getMatchRule());
            final String subscriberId = template.getSubscriberId();
            if (subscriberId != null) {
                out.attribute(null, ATTR_SUBSCRIBER_ID, subscriberId);
            }
            final String networkId = template.getNetworkId();
            if (networkId != null) {
                out.attribute(null, ATTR_NETWORK_ID, networkId);
            }
            writeIntAttribute(out, ATTR_CYCLE_DAY, policy.cycleDay);
            out.attribute(null, ATTR_CYCLE_TIMEZONE, policy.cycleTimezone);
            writeLongAttribute(out, ATTR_WARNING_BYTES, policy.warningBytes);
            writeLongAttribute(out, ATTR_LIMIT_BYTES, policy.limitBytes);
            writeLongAttribute(out, ATTR_LAST_WARNING_SNOOZE, policy.lastWarningSnooze);
            writeLongAttribute(out, ATTR_LAST_LIMIT_SNOOZE, policy.lastLimitSnooze);
            writeBooleanAttribute(out, ATTR_METERED, policy.metered);
            writeBooleanAttribute(out, ATTR_INFERRED, policy.inferred);
            out.endTag(null, TAG_NETWORK_POLICY);
        }
        // write all known uid policies
        for (int i = 0; i < mUidPolicy.size(); i++) {
            final int uid = mUidPolicy.keyAt(i);
            final int policy = mUidPolicy.valueAt(i);
            // skip writing empty policies
            if (policy == POLICY_NONE)
                continue;
            out.startTag(null, TAG_UID_POLICY);
            writeIntAttribute(out, ATTR_UID, uid);
            writeIntAttribute(out, ATTR_POLICY, policy);
            out.endTag(null, TAG_UID_POLICY);
        }
        out.endTag(null, TAG_POLICY_LIST);
        out.endDocument();
        mPolicyFile.finishWrite(fos);
    } catch (IOException e) {
        if (fos != null) {
            mPolicyFile.failWrite(fos);
        }
    }
}
Also used : FastXmlSerializer(com.android.internal.util.FastXmlSerializer) NetworkTemplate(android.net.NetworkTemplate) NetworkPolicy(android.net.NetworkPolicy) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) XmlSerializer(org.xmlpull.v1.XmlSerializer) FastXmlSerializer(com.android.internal.util.FastXmlSerializer)

Aggregations

FastXmlSerializer (com.android.internal.util.FastXmlSerializer)169 XmlSerializer (org.xmlpull.v1.XmlSerializer)156 IOException (java.io.IOException)138 FileOutputStream (java.io.FileOutputStream)132 BufferedOutputStream (java.io.BufferedOutputStream)56 XmlPullParserException (org.xmlpull.v1.XmlPullParserException)35 RemoteException (android.os.RemoteException)29 AtomicFile (android.util.AtomicFile)28 FileNotFoundException (java.io.FileNotFoundException)24 ByteArrayOutputStream (java.io.ByteArrayOutputStream)22 Map (java.util.Map)22 ErrnoException (android.system.ErrnoException)20 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)15 JournaledFile (com.android.internal.util.JournaledFile)15 File (java.io.File)13 HashMap (java.util.HashMap)11 UserInfo (android.content.pm.UserInfo)9 SendIntentException (android.content.IntentSender.SendIntentException)8 PackageParserException (android.content.pm.PackageParser.PackageParserException)8 Point (android.graphics.Point)8