diff options
Diffstat (limited to 'services/usage')
-rw-r--r-- | services/usage/java/com/android/server/usage/UsageStatsDatabase.java | 15 | ||||
-rw-r--r-- | services/usage/java/com/android/server/usage/UsageStatsXml.java | 11 |
2 files changed, 21 insertions, 5 deletions
diff --git a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java index 4498b84..0a7091e 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java +++ b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java @@ -191,7 +191,11 @@ class UsageStatsDatabase { for (File f : files) { final AtomicFile af = new AtomicFile(f); - mSortedStatFiles[i].put(UsageStatsXml.parseBeginTime(af), af); + try { + mSortedStatFiles[i].put(UsageStatsXml.parseBeginTime(af), af); + } catch (IOException e) { + Slog.e(TAG, "failed to index file: " + f, e); + } } } } @@ -506,7 +510,14 @@ class UsageStatsDatabase { if (path.endsWith(BAK_SUFFIX)) { f = new File(path.substring(0, path.length() - BAK_SUFFIX.length())); } - long beginTime = UsageStatsXml.parseBeginTime(f); + + long beginTime; + try { + beginTime = UsageStatsXml.parseBeginTime(f); + } catch (IOException e) { + beginTime = 0; + } + if (beginTime < expiryTime) { new AtomicFile(f).delete(); } diff --git a/services/usage/java/com/android/server/usage/UsageStatsXml.java b/services/usage/java/com/android/server/usage/UsageStatsXml.java index 186813e..543f361 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsXml.java +++ b/services/usage/java/com/android/server/usage/UsageStatsXml.java @@ -33,11 +33,11 @@ public class UsageStatsXml { private static final String VERSION_ATTR = "version"; static final String CHECKED_IN_SUFFIX = "-c"; - public static long parseBeginTime(AtomicFile file) { + public static long parseBeginTime(AtomicFile file) throws IOException { return parseBeginTime(file.getBaseFile()); } - public static long parseBeginTime(File file) { + public static long parseBeginTime(File file) throws IOException { String name = file.getName(); // Eat as many occurrences of -c as possible. This is due to a bug where -c @@ -47,7 +47,12 @@ public class UsageStatsXml { while (name.endsWith(CHECKED_IN_SUFFIX)) { name = name.substring(0, name.length() - CHECKED_IN_SUFFIX.length()); } - return Long.parseLong(name); + + try { + return Long.parseLong(name); + } catch (NumberFormatException e) { + throw new IOException(e); + } } public static void read(AtomicFile file, IntervalStats statsOut) throws IOException { |