summaryrefslogtreecommitdiffstats
path: root/services/usage/java/com/android/server/usage/UsageStatsXml.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/usage/java/com/android/server/usage/UsageStatsXml.java')
-rw-r--r--services/usage/java/com/android/server/usage/UsageStatsXml.java14
1 files changed, 9 insertions, 5 deletions
diff --git a/services/usage/java/com/android/server/usage/UsageStatsXml.java b/services/usage/java/com/android/server/usage/UsageStatsXml.java
index 26148ce..186813e 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsXml.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsXml.java
@@ -31,17 +31,21 @@ public class UsageStatsXml {
private static final int CURRENT_VERSION = 1;
private static final String USAGESTATS_TAG = "usagestats";
private static final String VERSION_ATTR = "version";
- private static final String CHECKED_IN_SUFFIX = "-c";
+ static final String CHECKED_IN_SUFFIX = "-c";
public static long parseBeginTime(AtomicFile file) {
return parseBeginTime(file.getBaseFile());
}
public static long parseBeginTime(File file) {
- final String name = file.getName();
- if (name.endsWith(CHECKED_IN_SUFFIX)) {
- return Long.parseLong(
- name.substring(0, name.length() - CHECKED_IN_SUFFIX.length()));
+ String name = file.getName();
+
+ // Eat as many occurrences of -c as possible. This is due to a bug where -c
+ // would be appended more than once to a checked-in file, causing a crash
+ // on boot when indexing files since Long.parseLong() will puke on anything but
+ // a number.
+ while (name.endsWith(CHECKED_IN_SUFFIX)) {
+ name = name.substring(0, name.length() - CHECKED_IN_SUFFIX.length());
}
return Long.parseLong(name);
}