From 50cbf4162e10b1d4e8765c1b3319c04c168056d3 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Ricau Date: Thu, 10 Nov 2022 12:11:36 -0800 Subject: [PATCH] Remove cleanup requirement for storage permission We're able to write directly to the Downloads folder (tested on API 33) so there's no reason to check for storage permission when trying to cleanup, we instead just check if we can actually write to that directory and if not we don't cleanup. This is related to #2415 --- .../internal/LeakDirectoryProvider.kt | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/leakcanary-android-core/src/main/java/leakcanary/internal/LeakDirectoryProvider.kt b/leakcanary-android-core/src/main/java/leakcanary/internal/LeakDirectoryProvider.kt index 9b57c17445..0c51ea6692 100644 --- a/leakcanary-android-core/src/main/java/leakcanary/internal/LeakDirectoryProvider.kt +++ b/leakcanary-android-core/src/main/java/leakcanary/internal/LeakDirectoryProvider.kt @@ -43,24 +43,6 @@ internal class LeakDirectoryProvider constructor( ) { private val context: Context = context.applicationContext - fun listFiles(filter: FilenameFilter): MutableList { - if (!hasStoragePermission() && requestExternalStoragePermission()) { - requestWritePermissionNotification() - } - val files = ArrayList() - - val externalFiles = externalStorageDirectory().listFiles(filter) - if (externalFiles != null) { - files.addAll(externalFiles) - } - - val appFiles = appStorageDirectory().listFiles(filter) - if (appFiles != null) { - files.addAll(appFiles) - } - return files - } - fun newHeapDumpFile(): File? { cleanupOldHeapDumps() @@ -147,7 +129,7 @@ internal class LeakDirectoryProvider constructor( } private fun cleanupOldHeapDumps() { - val hprofFiles = listFiles { _, name -> + val hprofFiles = listWritableFiles { _, name -> name.endsWith( HPROF_SUFFIX ) @@ -177,6 +159,24 @@ internal class LeakDirectoryProvider constructor( } } + private fun listWritableFiles(filter: FilenameFilter): MutableList { + val files = ArrayList() + + val externalStorageDirectory = externalStorageDirectory() + if (externalStorageDirectory.exists() && externalStorageDirectory.canWrite()) { + val externalFiles = externalStorageDirectory.listFiles(filter) + if (externalFiles != null) { + files.addAll(externalFiles) + } + } + + val appFiles = appStorageDirectory().listFiles(filter) + if (appFiles != null) { + files.addAll(appFiles) + } + return files + } + companion object { @Volatile private var writeExternalStorageGranted: Boolean = false @Volatile private var permissionNotificationDisplayed: Boolean = false