UsageStatsXmlV1public final class UsageStatsXmlV1 extends Object UsageStats reader/writer for version 1 of the XML format. |
Fields Summary |
---|
private static final String | PACKAGES_TAG | private static final String | PACKAGE_TAG | private static final String | CONFIGURATIONS_TAG | private static final String | CONFIG_TAG | private static final String | EVENT_LOG_TAG | private static final String | EVENT_TAG | private static final String | PACKAGE_ATTR | private static final String | CLASS_ATTR | private static final String | TOTAL_TIME_ACTIVE_ATTR | private static final String | COUNT_ATTR | private static final String | ACTIVE_ATTR | private static final String | LAST_EVENT_ATTR | private static final String | TYPE_ATTR | private static final String | LAST_TIME_ACTIVE_ATTR | private static final String | END_TIME_ATTR | private static final String | TIME_ATTR |
Constructors Summary |
---|
private UsageStatsXmlV1()
|
Methods Summary |
---|
private static void | loadConfigStats(org.xmlpull.v1.XmlPullParser parser, IntervalStats statsOut)
final Configuration config = new Configuration();
Configuration.readXmlAttrs(parser, config);
final ConfigurationStats configStats = statsOut.getOrCreateConfigurationStats(config);
// Apply the offset to the beginTime to find the absolute time.
configStats.mLastTimeActive = statsOut.beginTime + XmlUtils.readLongAttribute(
parser, LAST_TIME_ACTIVE_ATTR);
configStats.mTotalTimeActive = XmlUtils.readLongAttribute(parser, TOTAL_TIME_ACTIVE_ATTR);
configStats.mActivationCount = XmlUtils.readIntAttribute(parser, COUNT_ATTR);
if (XmlUtils.readBooleanAttribute(parser, ACTIVE_ATTR)) {
statsOut.activeConfiguration = configStats.mConfiguration;
}
| private static void | loadEvent(org.xmlpull.v1.XmlPullParser parser, IntervalStats statsOut)
final String packageName = XmlUtils.readStringAttribute(parser, PACKAGE_ATTR);
if (packageName == null) {
throw new ProtocolException("no " + PACKAGE_ATTR + " attribute present");
}
final String className = XmlUtils.readStringAttribute(parser, CLASS_ATTR);
final UsageEvents.Event event = statsOut.buildEvent(packageName, className);
// Apply the offset to the beginTime to find the absolute time of this event.
event.mTimeStamp = statsOut.beginTime + XmlUtils.readLongAttribute(parser, TIME_ATTR);
event.mEventType = XmlUtils.readIntAttribute(parser, TYPE_ATTR);
if (event.mEventType == UsageEvents.Event.CONFIGURATION_CHANGE) {
event.mConfiguration = new Configuration();
Configuration.readXmlAttrs(parser, event.mConfiguration);
}
if (statsOut.events == null) {
statsOut.events = new TimeSparseArray<>();
}
statsOut.events.put(event.mTimeStamp, event);
| private static void | loadUsageStats(org.xmlpull.v1.XmlPullParser parser, IntervalStats statsOut)
final String pkg = parser.getAttributeValue(null, PACKAGE_ATTR);
if (pkg == null) {
throw new ProtocolException("no " + PACKAGE_ATTR + " attribute present");
}
final UsageStats stats = statsOut.getOrCreateUsageStats(pkg);
// Apply the offset to the beginTime to find the absolute time.
stats.mLastTimeUsed = statsOut.beginTime + XmlUtils.readLongAttribute(
parser, LAST_TIME_ACTIVE_ATTR);
stats.mTotalTimeInForeground = XmlUtils.readLongAttribute(parser, TOTAL_TIME_ACTIVE_ATTR);
stats.mLastEvent = XmlUtils.readIntAttribute(parser, LAST_EVENT_ATTR);
| public static void | read(org.xmlpull.v1.XmlPullParser parser, IntervalStats statsOut)Reads from the {@link XmlPullParser}, assuming that it is already on the
tag.
statsOut.packageStats.clear();
statsOut.configurations.clear();
statsOut.activeConfiguration = null;
if (statsOut.events != null) {
statsOut.events.clear();
}
statsOut.endTime = XmlUtils.readLongAttribute(parser, END_TIME_ATTR);
int eventCode;
int outerDepth = parser.getDepth();
while ((eventCode = parser.next()) != XmlPullParser.END_DOCUMENT
&& (eventCode != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
if (eventCode != XmlPullParser.START_TAG) {
continue;
}
final String tag = parser.getName();
switch (tag) {
case PACKAGE_TAG:
loadUsageStats(parser, statsOut);
break;
case CONFIG_TAG:
loadConfigStats(parser, statsOut);
break;
case EVENT_TAG:
loadEvent(parser, statsOut);
break;
}
}
| public static void | write(org.xmlpull.v1.XmlSerializer xml, IntervalStats stats)Writes the stats object to an XML file. The {@link XmlSerializer}
has already written the tag, but attributes may still
be added.
XmlUtils.writeLongAttribute(xml, END_TIME_ATTR, stats.endTime - stats.beginTime);
xml.startTag(null, PACKAGES_TAG);
final int statsCount = stats.packageStats.size();
for (int i = 0; i < statsCount; i++) {
writeUsageStats(xml, stats, stats.packageStats.valueAt(i));
}
xml.endTag(null, PACKAGES_TAG);
xml.startTag(null, CONFIGURATIONS_TAG);
final int configCount = stats.configurations.size();
for (int i = 0; i < configCount; i++) {
boolean active = stats.activeConfiguration.equals(stats.configurations.keyAt(i));
writeConfigStats(xml, stats, stats.configurations.valueAt(i), active);
}
xml.endTag(null, CONFIGURATIONS_TAG);
xml.startTag(null, EVENT_LOG_TAG);
final int eventCount = stats.events != null ? stats.events.size() : 0;
for (int i = 0; i < eventCount; i++) {
writeEvent(xml, stats, stats.events.valueAt(i));
}
xml.endTag(null, EVENT_LOG_TAG);
| private static void | writeConfigStats(org.xmlpull.v1.XmlSerializer xml, IntervalStats stats, android.app.usage.ConfigurationStats configStats, boolean isActive)
xml.startTag(null, CONFIG_TAG);
// Write the time offset.
XmlUtils.writeLongAttribute(xml, LAST_TIME_ACTIVE_ATTR,
configStats.mLastTimeActive - stats.beginTime);
XmlUtils.writeLongAttribute(xml, TOTAL_TIME_ACTIVE_ATTR, configStats.mTotalTimeActive);
XmlUtils.writeIntAttribute(xml, COUNT_ATTR, configStats.mActivationCount);
if (isActive) {
XmlUtils.writeBooleanAttribute(xml, ACTIVE_ATTR, true);
}
// Now write the attributes representing the configuration object.
Configuration.writeXmlAttrs(xml, configStats.mConfiguration);
xml.endTag(null, CONFIG_TAG);
| private static void | writeEvent(org.xmlpull.v1.XmlSerializer xml, IntervalStats stats, UsageEvents.Event event)
xml.startTag(null, EVENT_TAG);
// Store the time offset.
XmlUtils.writeLongAttribute(xml, TIME_ATTR, event.mTimeStamp - stats.beginTime);
XmlUtils.writeStringAttribute(xml, PACKAGE_ATTR, event.mPackage);
if (event.mClass != null) {
XmlUtils.writeStringAttribute(xml, CLASS_ATTR, event.mClass);
}
XmlUtils.writeIntAttribute(xml, TYPE_ATTR, event.mEventType);
if (event.mEventType == UsageEvents.Event.CONFIGURATION_CHANGE
&& event.mConfiguration != null) {
Configuration.writeXmlAttrs(xml, event.mConfiguration);
}
xml.endTag(null, EVENT_TAG);
| private static void | writeUsageStats(org.xmlpull.v1.XmlSerializer xml, IntervalStats stats, android.app.usage.UsageStats usageStats)
xml.startTag(null, PACKAGE_TAG);
// Write the time offset.
XmlUtils.writeLongAttribute(xml, LAST_TIME_ACTIVE_ATTR,
usageStats.mLastTimeUsed - stats.beginTime);
XmlUtils.writeStringAttribute(xml, PACKAGE_ATTR, usageStats.mPackageName);
XmlUtils.writeLongAttribute(xml, TOTAL_TIME_ACTIVE_ATTR, usageStats.mTotalTimeInForeground);
XmlUtils.writeIntAttribute(xml, LAST_EVENT_ATTR, usageStats.mLastEvent);
xml.endTag(null, PACKAGE_TAG);
|
|