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

Commit 32774d47 authored by Julia Reynolds's avatar Julia Reynolds Committed by Automerger Merge Worker
Browse files

Merge "Clean up temp AtomicFile files" into rvc-dev am: d9705147

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11884298

Change-Id: I7cca38dcd04cd0403d696e54f17b741e97cdf63b
parents 95f2a9be d9705147
Loading
Loading
Loading
Loading
+26 −17
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ public class NotificationHistoryDatabase {
    private static final int HISTORY_RETENTION_DAYS = 1;
    private static final int HISTORY_RETENTION_MS = 24 * 60 * 60 * 1000;
    private static final long WRITE_BUFFER_INTERVAL_MS = 1000 * 60 * 20;
    private static final long INVALID_FILE_TIME_MS = -1;

    private static final String ACTION_HISTORY_DELETION =
            NotificationHistoryDatabase.class.getSimpleName() + ".CLEANUP";
@@ -130,8 +131,8 @@ public class NotificationHistoryDatabase {
        }

        // Sort with newest files first
        Arrays.sort(files, (lhs, rhs) -> Long.compare(Long.parseLong(rhs.getName()),
                Long.parseLong(lhs.getName())));
        Arrays.sort(files, (lhs, rhs) -> Long.compare(safeParseLong(rhs.getName()),
                safeParseLong(lhs.getName())));

        for (File file : files) {
            mHistoryFiles.addLast(new AtomicFile(file));
@@ -252,13 +253,13 @@ public class NotificationHistoryDatabase {

            for (int i = mHistoryFiles.size() - 1; i >= 0; i--) {
                final AtomicFile currentOldestFile = mHistoryFiles.get(i);
                try {
                    final long creationTime = Long.parseLong(
                final long creationTime = safeParseLong(
                        currentOldestFile.getBaseFile().getName());
                if (DEBUG) {
                    Slog.d(TAG, "File " + currentOldestFile.getBaseFile().getName()
                            + " created on " + creationTime);
                }

                if (creationTime <= retentionBoundary.getTimeInMillis()) {
                    deleteFile(currentOldestFile);
                } else {
@@ -266,9 +267,6 @@ public class NotificationHistoryDatabase {
                    scheduleDeletion(
                            currentOldestFile.getBaseFile(), creationTime, retentionDays);
                }
                } catch (NumberFormatException e) {
                    deleteFile(currentOldestFile);
                }
            }
        }
    }
@@ -331,6 +329,17 @@ public class NotificationHistoryDatabase {
        }
    }

    private static long safeParseLong(String fileName) {
        // AtomicFile will create copies of the numeric files with ".new" and ".bak"
        // over the course of its processing. If these files still exist on boot we need to clean
        // them up
        try {
            return Long.parseLong(fileName);
        } catch (NumberFormatException e) {
            return INVALID_FILE_TIME_MS;
        }
    }

    private final BroadcastReceiver mFileCleaupReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
+2 −2
Original line number Diff line number Diff line
@@ -149,7 +149,7 @@ public class NotificationHistoryDatabaseTest extends UiServiceTestCase {
    }

    @Test
    public void testPrune_badFileName() {
    public void testPrune_badFileName_noCrash() {
        GregorianCalendar cal = new GregorianCalendar();
        cal.setTimeInMillis(10);
        int retainDays = 1;
@@ -159,7 +159,7 @@ public class NotificationHistoryDatabaseTest extends UiServiceTestCase {
        // 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");
            when(file.getName()).thenReturn(i + ".bak");
            AtomicFile af = new AtomicFile(file);
            mDataBase.mHistoryFiles.addLast(af);
        }