Loading k9mail/src/main/java/com/fsck/k9/provider/DecryptedFileProvider.java +29 −19 Original line number Diff line number Diff line Loading @@ -35,9 +35,10 @@ public class DecryptedFileProvider extends FileProvider { private static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".decryptedfileprovider"; private static final String DECRYPTED_CACHE_DIRECTORY = "decrypted"; private static final long FILE_DELETE_THRESHOLD_MILLISECONDS = 3 * 60 * 1000; private static final Object cleanupReceiverMonitor = new Object(); private static DecryptedFileProviderCleanupReceiver receiverRegistered = null; private static DecryptedFileProviderCleanupReceiver cleanupReceiver = null; public static FileFactory getFileFactory(Context context) { Loading Loading @@ -163,24 +164,37 @@ public class DecryptedFileProvider extends FileProvider { } }.execute(); if (receiverRegistered != null) { context.unregisterReceiver(receiverRegistered); receiverRegistered = null; unregisterFileCleanupReceiver(context); } private static void unregisterFileCleanupReceiver(Context context) { synchronized (cleanupReceiverMonitor) { if (cleanupReceiver == null) { return; } if (K9.DEBUG) { Log.d(K9.LOG_TAG, "Unregistering temp file cleanup receiver"); } context.unregisterReceiver(cleanupReceiver); cleanupReceiver = null; } } @MainThread // no need to synchronize for receiverRegistered private static void registerFileCleanupReceiver(Context context) { if (receiverRegistered != null) { synchronized (cleanupReceiverMonitor) { if (cleanupReceiver != null) { return; } if (K9.DEBUG) { Log.d(K9.LOG_TAG, "Registering temp file cleanup receiver"); } receiverRegistered = new DecryptedFileProviderCleanupReceiver(); cleanupReceiver = new DecryptedFileProviderCleanupReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_SCREEN_OFF); context.registerReceiver(receiverRegistered, intentFilter); context.registerReceiver(cleanupReceiver, intentFilter); } } private static class DecryptedFileProviderCleanupReceiver extends BroadcastReceiver { Loading @@ -197,11 +211,7 @@ public class DecryptedFileProvider extends FileProvider { boolean allFilesDeleted = deleteOldTemporaryFiles(context); if (allFilesDeleted) { if (K9.DEBUG) { Log.d(K9.LOG_TAG, "Unregistering temp file cleanup receiver"); } context.unregisterReceiver(this); receiverRegistered = null; unregisterFileCleanupReceiver(context); } } } Loading Loading
k9mail/src/main/java/com/fsck/k9/provider/DecryptedFileProvider.java +29 −19 Original line number Diff line number Diff line Loading @@ -35,9 +35,10 @@ public class DecryptedFileProvider extends FileProvider { private static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".decryptedfileprovider"; private static final String DECRYPTED_CACHE_DIRECTORY = "decrypted"; private static final long FILE_DELETE_THRESHOLD_MILLISECONDS = 3 * 60 * 1000; private static final Object cleanupReceiverMonitor = new Object(); private static DecryptedFileProviderCleanupReceiver receiverRegistered = null; private static DecryptedFileProviderCleanupReceiver cleanupReceiver = null; public static FileFactory getFileFactory(Context context) { Loading Loading @@ -163,24 +164,37 @@ public class DecryptedFileProvider extends FileProvider { } }.execute(); if (receiverRegistered != null) { context.unregisterReceiver(receiverRegistered); receiverRegistered = null; unregisterFileCleanupReceiver(context); } private static void unregisterFileCleanupReceiver(Context context) { synchronized (cleanupReceiverMonitor) { if (cleanupReceiver == null) { return; } if (K9.DEBUG) { Log.d(K9.LOG_TAG, "Unregistering temp file cleanup receiver"); } context.unregisterReceiver(cleanupReceiver); cleanupReceiver = null; } } @MainThread // no need to synchronize for receiverRegistered private static void registerFileCleanupReceiver(Context context) { if (receiverRegistered != null) { synchronized (cleanupReceiverMonitor) { if (cleanupReceiver != null) { return; } if (K9.DEBUG) { Log.d(K9.LOG_TAG, "Registering temp file cleanup receiver"); } receiverRegistered = new DecryptedFileProviderCleanupReceiver(); cleanupReceiver = new DecryptedFileProviderCleanupReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_SCREEN_OFF); context.registerReceiver(receiverRegistered, intentFilter); context.registerReceiver(cleanupReceiver, intentFilter); } } private static class DecryptedFileProviderCleanupReceiver extends BroadcastReceiver { Loading @@ -197,11 +211,7 @@ public class DecryptedFileProvider extends FileProvider { boolean allFilesDeleted = deleteOldTemporaryFiles(context); if (allFilesDeleted) { if (K9.DEBUG) { Log.d(K9.LOG_TAG, "Unregistering temp file cleanup receiver"); } context.unregisterReceiver(this); receiverRegistered = null; unregisterFileCleanupReceiver(context); } } } Loading