Search in sources :

Example 21 with START_TAG

use of org.xmlpull.v1.XmlPullParser.START_TAG in project android_frameworks_base by ParanoidAndroid.

the class BridgeXmlBlockParser method nextText.

@Override
public String nextText() throws XmlPullParserException, IOException {
    if (getEventType() != START_TAG) {
        throw new XmlPullParserException(getPositionDescription() + ": parser must be on START_TAG to read next text", this, null);
    }
    int eventType = next();
    if (eventType == TEXT) {
        String result = getText();
        eventType = next();
        if (eventType != END_TAG) {
            throw new XmlPullParserException(getPositionDescription() + ": event TEXT it must be immediately followed by END_TAG", this, null);
        }
        return result;
    } else if (eventType == END_TAG) {
        return "";
    } else {
        throw new XmlPullParserException(getPositionDescription() + ": parser must be on START_TAG or TEXT to read text", this, null);
    }
}
Also used : XmlPullParserException(org.xmlpull.v1.XmlPullParserException)

Example 22 with START_TAG

use of org.xmlpull.v1.XmlPullParser.START_TAG in project platform_frameworks_base by android.

the class MountService method readSettingsLocked.

private void readSettingsLocked() {
    mRecords.clear();
    mPrimaryStorageUuid = getDefaultPrimaryStorageUuid();
    mForceAdoptable = false;
    FileInputStream fis = null;
    try {
        fis = mSettingsFile.openRead();
        final XmlPullParser in = Xml.newPullParser();
        in.setInput(fis, StandardCharsets.UTF_8.name());
        int type;
        while ((type = in.next()) != END_DOCUMENT) {
            if (type == START_TAG) {
                final String tag = in.getName();
                if (TAG_VOLUMES.equals(tag)) {
                    final int version = readIntAttribute(in, ATTR_VERSION, VERSION_INIT);
                    final boolean primaryPhysical = SystemProperties.getBoolean(StorageManager.PROP_PRIMARY_PHYSICAL, false);
                    final boolean validAttr = (version >= VERSION_FIX_PRIMARY) || (version >= VERSION_ADD_PRIMARY && !primaryPhysical);
                    if (validAttr) {
                        mPrimaryStorageUuid = readStringAttribute(in, ATTR_PRIMARY_STORAGE_UUID);
                    }
                    mForceAdoptable = readBooleanAttribute(in, ATTR_FORCE_ADOPTABLE, false);
                } else if (TAG_VOLUME.equals(tag)) {
                    final VolumeRecord rec = readVolumeRecord(in);
                    mRecords.put(rec.fsUuid, rec);
                }
            }
        }
    } catch (FileNotFoundException e) {
    // Missing metadata is okay, probably first boot
    } catch (IOException e) {
        Slog.wtf(TAG, "Failed reading metadata", e);
    } catch (XmlPullParserException e) {
        Slog.wtf(TAG, "Failed reading metadata", e);
    } finally {
        IoUtils.closeQuietly(fis);
    }
}
Also used : VolumeRecord(android.os.storage.VolumeRecord) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream)

Example 23 with START_TAG

use of org.xmlpull.v1.XmlPullParser.START_TAG in project platform_frameworks_base by android.

the class TaskPersister method restoreTasksForUserLocked.

List<TaskRecord> restoreTasksForUserLocked(final int userId) {
    final ArrayList<TaskRecord> tasks = new ArrayList<TaskRecord>();
    ArraySet<Integer> recoveredTaskIds = new ArraySet<Integer>();
    File userTasksDir = getUserTasksDir(userId);
    File[] recentFiles = userTasksDir.listFiles();
    if (recentFiles == null) {
        Slog.e(TAG, "restoreTasksForUserLocked: Unable to list files from " + userTasksDir);
        return tasks;
    }
    for (int taskNdx = 0; taskNdx < recentFiles.length; ++taskNdx) {
        File taskFile = recentFiles[taskNdx];
        if (DEBUG) {
            Slog.d(TAG, "restoreTasksForUserLocked: userId=" + userId + ", taskFile=" + taskFile.getName());
        }
        BufferedReader reader = null;
        boolean deleteFile = false;
        try {
            reader = new BufferedReader(new FileReader(taskFile));
            final XmlPullParser in = Xml.newPullParser();
            in.setInput(reader);
            int event;
            while (((event = in.next()) != XmlPullParser.END_DOCUMENT) && event != XmlPullParser.END_TAG) {
                final String name = in.getName();
                if (event == XmlPullParser.START_TAG) {
                    if (DEBUG)
                        Slog.d(TAG, "restoreTasksForUserLocked: START_TAG name=" + name);
                    if (TAG_TASK.equals(name)) {
                        final TaskRecord task = TaskRecord.restoreFromXml(in, mStackSupervisor);
                        if (DEBUG)
                            Slog.d(TAG, "restoreTasksForUserLocked: restored task=" + task);
                        if (task != null) {
                            // XXX Don't add to write queue... there is no reason to write
                            // out the stuff we just read, if we don't write it we will
                            // read the same thing again.
                            // mWriteQueue.add(new TaskWriteQueueItem(task));
                            final int taskId = task.taskId;
                            if (mStackSupervisor.anyTaskForIdLocked(taskId, /* restoreFromRecents= */
                            false, 0) != null) {
                                // Should not happen.
                                Slog.wtf(TAG, "Existing task with taskId " + taskId + "found");
                            } else if (userId != task.userId) {
                                // Should not happen.
                                Slog.wtf(TAG, "Task with userId " + task.userId + " found in " + userTasksDir.getAbsolutePath());
                            } else {
                                // Looks fine.
                                mStackSupervisor.setNextTaskIdForUserLocked(taskId, userId);
                                task.isPersistable = true;
                                tasks.add(task);
                                recoveredTaskIds.add(taskId);
                            }
                        } else {
                            Slog.e(TAG, "restoreTasksForUserLocked: Unable to restore taskFile=" + taskFile + ": " + fileToString(taskFile));
                        }
                    } else {
                        Slog.wtf(TAG, "restoreTasksForUserLocked: Unknown xml event=" + event + " name=" + name);
                    }
                }
                XmlUtils.skipCurrentTag(in);
            }
        } catch (Exception e) {
            Slog.wtf(TAG, "Unable to parse " + taskFile + ". Error ", e);
            Slog.e(TAG, "Failing file: " + fileToString(taskFile));
            deleteFile = true;
        } finally {
            IoUtils.closeQuietly(reader);
            if (deleteFile) {
                if (DEBUG)
                    Slog.d(TAG, "Deleting file=" + taskFile.getName());
                taskFile.delete();
            }
        }
    }
    if (!DEBUG) {
        removeObsoleteFiles(recoveredTaskIds, userTasksDir.listFiles());
    }
    // Fix up task affiliation from taskIds
    for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) {
        final TaskRecord task = tasks.get(taskNdx);
        task.setPrevAffiliate(taskIdToTask(task.mPrevAffiliateTaskId, tasks));
        task.setNextAffiliate(taskIdToTask(task.mNextAffiliateTaskId, tasks));
    }
    Collections.sort(tasks, new Comparator<TaskRecord>() {

        @Override
        public int compare(TaskRecord lhs, TaskRecord rhs) {
            final long diff = rhs.mLastTimeMoved - lhs.mLastTimeMoved;
            if (diff < 0) {
                return -1;
            } else if (diff > 0) {
                return +1;
            } else {
                return 0;
            }
        }
    });
    return tasks;
}
Also used : ArraySet(android.util.ArraySet) ArrayList(java.util.ArrayList) XmlPullParser(org.xmlpull.v1.XmlPullParser) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) BufferedReader(java.io.BufferedReader) FileReader(java.io.FileReader) AtomicFile(android.util.AtomicFile) File(java.io.File)

Example 24 with START_TAG

use of org.xmlpull.v1.XmlPullParser.START_TAG in project platform_frameworks_base by android.

the class PackageInstallerService method readSessionsLocked.

private void readSessionsLocked() {
    if (LOGD)
        Slog.v(TAG, "readSessionsLocked()");
    mSessions.clear();
    FileInputStream fis = null;
    try {
        fis = mSessionsFile.openRead();
        final XmlPullParser in = Xml.newPullParser();
        in.setInput(fis, StandardCharsets.UTF_8.name());
        int type;
        while ((type = in.next()) != END_DOCUMENT) {
            if (type == START_TAG) {
                final String tag = in.getName();
                if (TAG_SESSION.equals(tag)) {
                    final PackageInstallerSession session = readSessionLocked(in);
                    final long age = System.currentTimeMillis() - session.createdMillis;
                    final boolean valid;
                    if (age >= MAX_AGE_MILLIS) {
                        Slog.w(TAG, "Abandoning old session first created at " + session.createdMillis);
                        valid = false;
                    } else {
                        valid = true;
                    }
                    if (valid) {
                        mSessions.put(session.sessionId, session);
                    } else {
                        // Since this is early during boot we don't send
                        // any observer events about the session, but we
                        // keep details around for dumpsys.
                        mHistoricalSessions.put(session.sessionId, session);
                    }
                    mAllocatedSessions.put(session.sessionId, true);
                }
            }
        }
    } catch (FileNotFoundException e) {
    // Missing sessions are okay, probably first boot
    } catch (IOException | XmlPullParserException e) {
        Slog.wtf(TAG, "Failed reading install sessions", e);
    } finally {
        IoUtils.closeQuietly(fis);
    }
}
Also used : IPackageInstallerSession(android.content.pm.IPackageInstallerSession) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream)

Example 25 with START_TAG

use of org.xmlpull.v1.XmlPullParser.START_TAG in project platform_frameworks_base by android.

the class ActivityRecord method restoreFromXml.

static ActivityRecord restoreFromXml(XmlPullParser in, ActivityStackSupervisor stackSupervisor) throws IOException, XmlPullParserException {
    Intent intent = null;
    PersistableBundle persistentState = null;
    int launchedFromUid = 0;
    String launchedFromPackage = null;
    String resolvedType = null;
    boolean componentSpecified = false;
    int userId = 0;
    long createTime = -1;
    final int outerDepth = in.getDepth();
    TaskDescription taskDescription = new TaskDescription();
    for (int attrNdx = in.getAttributeCount() - 1; attrNdx >= 0; --attrNdx) {
        final String attrName = in.getAttributeName(attrNdx);
        final String attrValue = in.getAttributeValue(attrNdx);
        if (TaskPersister.DEBUG)
            Slog.d(TaskPersister.TAG, "ActivityRecord: attribute name=" + attrName + " value=" + attrValue);
        if (ATTR_ID.equals(attrName)) {
            createTime = Long.parseLong(attrValue);
        } else if (ATTR_LAUNCHEDFROMUID.equals(attrName)) {
            launchedFromUid = Integer.parseInt(attrValue);
        } else if (ATTR_LAUNCHEDFROMPACKAGE.equals(attrName)) {
            launchedFromPackage = attrValue;
        } else if (ATTR_RESOLVEDTYPE.equals(attrName)) {
            resolvedType = attrValue;
        } else if (ATTR_COMPONENTSPECIFIED.equals(attrName)) {
            componentSpecified = Boolean.parseBoolean(attrValue);
        } else if (ATTR_USERID.equals(attrName)) {
            userId = Integer.parseInt(attrValue);
        } else if (attrName.startsWith(TaskDescription.ATTR_TASKDESCRIPTION_PREFIX)) {
            taskDescription.restoreFromXml(attrName, attrValue);
        } else {
            Log.d(TAG, "Unknown ActivityRecord attribute=" + attrName);
        }
    }
    int event;
    while (((event = in.next()) != XmlPullParser.END_DOCUMENT) && (event != XmlPullParser.END_TAG || in.getDepth() >= outerDepth)) {
        if (event == XmlPullParser.START_TAG) {
            final String name = in.getName();
            if (TaskPersister.DEBUG)
                Slog.d(TaskPersister.TAG, "ActivityRecord: START_TAG name=" + name);
            if (TAG_INTENT.equals(name)) {
                intent = Intent.restoreFromXml(in);
                if (TaskPersister.DEBUG)
                    Slog.d(TaskPersister.TAG, "ActivityRecord: intent=" + intent);
            } else if (TAG_PERSISTABLEBUNDLE.equals(name)) {
                persistentState = PersistableBundle.restoreFromXml(in);
                if (TaskPersister.DEBUG)
                    Slog.d(TaskPersister.TAG, "ActivityRecord: persistentState=" + persistentState);
            } else {
                Slog.w(TAG, "restoreActivity: unexpected name=" + name);
                XmlUtils.skipCurrentTag(in);
            }
        }
    }
    if (intent == null) {
        throw new XmlPullParserException("restoreActivity error intent=" + intent);
    }
    final ActivityManagerService service = stackSupervisor.mService;
    final ActivityInfo aInfo = stackSupervisor.resolveActivity(intent, resolvedType, 0, null, userId);
    if (aInfo == null) {
        throw new XmlPullParserException("restoreActivity resolver error. Intent=" + intent + " resolvedType=" + resolvedType);
    }
    final ActivityRecord r = new ActivityRecord(service, /*caller*/
    null, launchedFromUid, launchedFromPackage, intent, resolvedType, aInfo, service.getConfiguration(), null, null, 0, componentSpecified, false, stackSupervisor, null, null, null);
    r.persistentState = persistentState;
    r.taskDescription = taskDescription;
    r.createTime = createTime;
    return r;
}
Also used : ActivityInfo(android.content.pm.ActivityInfo) PersistableBundle(android.os.PersistableBundle) TaskDescription(android.app.ActivityManager.TaskDescription) PendingIntent(android.app.PendingIntent) ReferrerIntent(com.android.internal.content.ReferrerIntent) Intent(android.content.Intent) XmlPullParserException(org.xmlpull.v1.XmlPullParserException)

Aggregations

XmlPullParserException (org.xmlpull.v1.XmlPullParserException)41 XmlPullParser (org.xmlpull.v1.XmlPullParser)28 IOException (java.io.IOException)25 FileNotFoundException (java.io.FileNotFoundException)24 FileInputStream (java.io.FileInputStream)19 NetworkPolicy (android.net.NetworkPolicy)6 NetworkTemplate (android.net.NetworkTemplate)6 TaskDescription (android.app.ActivityManager.TaskDescription)5 PendingIntent (android.app.PendingIntent)5 Intent (android.content.Intent)5 ActivityInfo (android.content.pm.ActivityInfo)5 IPackageInstallerSession (android.content.pm.IPackageInstallerSession)5 NetworkPolicyManager.uidRulesToString (android.net.NetworkPolicyManager.uidRulesToString)5 PersistableBundle (android.os.PersistableBundle)5 VolumeRecord (android.os.storage.VolumeRecord)5 ArraySet (android.util.ArraySet)5 AtomicFile (android.util.AtomicFile)5 ReferrerIntent (com.android.internal.content.ReferrerIntent)5 BufferedReader (java.io.BufferedReader)5 File (java.io.File)5