Merge "Handle malnamed files in history dir" into rvc-dev am: cb83004e12
Change-Id: I2bd3c36250f2ed4da208ea215ea3e0bf7f88ba3a
This commit is contained in:
@@ -250,26 +250,36 @@ public class NotificationHistoryDatabase {
|
||||
|
||||
for (int i = mHistoryFiles.size() - 1; i >= 0; i--) {
|
||||
final AtomicFile currentOldestFile = mHistoryFiles.get(i);
|
||||
final long creationTime = Long.parseLong(currentOldestFile.getBaseFile().getName());
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "File " + currentOldestFile.getBaseFile().getName()
|
||||
+ " created on " + creationTime);
|
||||
}
|
||||
if (creationTime <= retentionBoundary.getTimeInMillis()) {
|
||||
try {
|
||||
final long creationTime = Long.parseLong(
|
||||
currentOldestFile.getBaseFile().getName());
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "Removed " + currentOldestFile.getBaseFile().getName());
|
||||
Slog.d(TAG, "File " + currentOldestFile.getBaseFile().getName()
|
||||
+ " created on " + creationTime);
|
||||
}
|
||||
currentOldestFile.delete();
|
||||
// TODO: delete all relevant bitmaps, once they exist
|
||||
mHistoryFiles.removeLast();
|
||||
} else {
|
||||
// all remaining files are newer than the cut off; schedule jobs to delete
|
||||
scheduleDeletion(currentOldestFile.getBaseFile(), creationTime, retentionDays);
|
||||
if (creationTime <= retentionBoundary.getTimeInMillis()) {
|
||||
deleteFile(currentOldestFile);
|
||||
} else {
|
||||
// all remaining files are newer than the cut off; schedule jobs to delete
|
||||
scheduleDeletion(
|
||||
currentOldestFile.getBaseFile(), creationTime, retentionDays);
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
deleteFile(currentOldestFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteFile(AtomicFile file) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "Removed " + file.getBaseFile().getName());
|
||||
}
|
||||
file.delete();
|
||||
// TODO: delete all relevant bitmaps, once they exist
|
||||
mHistoryFiles.removeLast();
|
||||
}
|
||||
|
||||
private void scheduleDeletion(File file, long creationTime, int retentionDays) {
|
||||
final long deletionTime = creationTime + (retentionDays * HISTORY_RETENTION_MS);
|
||||
scheduleDeletion(file, deletionTime);
|
||||
|
||||
@@ -146,7 +146,29 @@ public class NotificationHistoryDatabaseTest extends UiServiceTestCase {
|
||||
assertThat(mDataBase.mHistoryFiles).containsExactlyElementsIn(expectedFiles);
|
||||
|
||||
verify(mAlarmManager, times(6)).setExactAndAllowWhileIdle(anyInt(), anyLong(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPrune_badFileName() {
|
||||
GregorianCalendar cal = new GregorianCalendar();
|
||||
cal.setTimeInMillis(10);
|
||||
int retainDays = 1;
|
||||
|
||||
List<AtomicFile> expectedFiles = new ArrayList<>();
|
||||
|
||||
// add 5 files with a creation date of "today", but the file names are bad
|
||||
for (long i = cal.getTimeInMillis(); i >= 5; i--) {
|
||||
File file = mock(File.class);
|
||||
when(file.getName()).thenReturn(i + ".txt");
|
||||
AtomicFile af = new AtomicFile(file);
|
||||
mDataBase.mHistoryFiles.addLast(af);
|
||||
}
|
||||
|
||||
// trim everything a day+ old
|
||||
cal.add(Calendar.DATE, 1 * retainDays);
|
||||
mDataBase.prune(retainDays, cal.getTimeInMillis());
|
||||
|
||||
assertThat(mDataBase.mHistoryFiles).containsExactlyElementsIn(expectedFiles);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user