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