Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a0831bf authored by Adam Lesinski's avatar Adam Lesinski
Browse files

Fix issue where pruned UsageStats files would not be removed from index

This would cause an exception to be thrown when querying stats
that included a deleted file and cause only in-memory stats to be
returned.

This change now re-indexes after deleting files.

Furthermore, we continue reading UsageStats files in order
to return more useful data if some other issue (file corruption)
leads us to fail reading a file.

Change-Id: I4a52739624d68e719e3d7d324a0b16709a62ac7a
parent 978a1ed5
Loading
Loading
Loading
Loading
+17 −12
Original line number Diff line number Diff line
@@ -378,9 +378,8 @@ class UsageStatsDatabase {
                }
            }

            try {
                IntervalStats stats = new IntervalStats();
                ArrayList<T> results = new ArrayList<>();
            final IntervalStats stats = new IntervalStats();
            final ArrayList<T> results = new ArrayList<>();
            for (int i = startIndex; i <= endIndex; i++) {
                final AtomicFile f = intervalStats.valueAt(i);

@@ -388,16 +387,18 @@ class UsageStatsDatabase {
                    Slog.d(TAG, "Reading stat file " + f.getBaseFile().getAbsolutePath());
                }

                try {
                    UsageStatsXml.read(f, stats);
                    if (beginTime < stats.endTime) {
                        combiner.combine(stats, false, results);
                    }
                }
                return results;
                } catch (IOException e) {
                    Slog.e(TAG, "Failed to read usage stats file", e);
                return null;
                    // We continue so that we return results that are not
                    // corrupt.
                }
            }
            return results;
        }
    }

@@ -450,6 +451,10 @@ class UsageStatsDatabase {
            mCal.addDays(-7);
            pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_DAILY],
                    mCal.getTimeInMillis());

            // We must re-index our file list or we will be trying to read
            // deleted files.
            indexFilesLocked();
        }
    }