diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/filepicker/FilePickerActivity.kt b/catroid/src/main/java/org/catrobat/catroid/ui/filepicker/FilePickerActivity.kt index 24642bf17e8..283ef3fcae9 100644 --- a/catroid/src/main/java/org/catrobat/catroid/ui/filepicker/FilePickerActivity.kt +++ b/catroid/src/main/java/org/catrobat/catroid/ui/filepicker/FilePickerActivity.kt @@ -45,6 +45,8 @@ import androidx.appcompat.widget.Toolbar import org.catrobat.catroid.ui.recyclerview.adapter.multiselection.MultiSelectionManager import java.io.File import java.util.ArrayList +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers class FilePickerActivity : BaseCastActivity(), OnListProjectFilesListener, ActionModeClickListener, ProjectImportFinishedListener { @@ -78,7 +80,8 @@ class FilePickerActivity : BaseCastActivity(), OnListProjectFilesListener, Actio ) { @SuppressWarnings("SpreadOperator") override fun task() { - ListProjectFilesTask(this@FilePickerActivity).execute(*storageRoots.toTypedArray()) + ListProjectFilesTask(this@FilePickerActivity, CoroutineScope(Dispatchers.IO)) + .execute(*storageRoots.toTypedArray()) } }.execute(this) } diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/filepicker/ListProjectFilesTask.kt b/catroid/src/main/java/org/catrobat/catroid/ui/filepicker/ListProjectFilesTask.kt index 81e9a56ecce..e2a13d31cee 100644 --- a/catroid/src/main/java/org/catrobat/catroid/ui/filepicker/ListProjectFilesTask.kt +++ b/catroid/src/main/java/org/catrobat/catroid/ui/filepicker/ListProjectFilesTask.kt @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2022 The Catrobat Team + * Copyright (C) 2010-2024 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify @@ -21,23 +21,26 @@ * along with this program. If not, see . */ package org.catrobat.catroid.ui.filepicker - -import android.os.AsyncTask -import org.catrobat.catroid.common.Constants -import org.catrobat.catroid.common.FlavoredConstants +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.io.File import java.lang.ref.WeakReference +import org.catrobat.catroid.common.Constants +import org.catrobat.catroid.common.FlavoredConstants import java.util.ArrayList -class ListProjectFilesTask(listener: OnListProjectFilesListener) : - AsyncTask>() { +class ListProjectFilesTask(listener: OnListProjectFilesListener, coroutineScope: CoroutineScope) { private val weakListenerReference: WeakReference = WeakReference(listener) - @SuppressWarnings("SpreadOperator") - override fun doInBackground(vararg params: File?): List = task(*params as Array) - - override fun onPostExecute(files: List) { - val listener = weakListenerReference.get() - listener?.onListProjectFilesComplete(files) + private var scope: CoroutineScope = coroutineScope + fun execute(files: Array) { + scope.launch { + val resultFiles = withContext(Dispatchers.IO) { + task(*files) + } + weakListenerReference.get()?.onListProjectFilesComplete(resultFiles) + } } interface OnListProjectFilesListener { @@ -46,10 +49,12 @@ class ListProjectFilesTask(listener: OnListProjectFilesListener) : companion object { @JvmStatic - fun task(vararg startDir: File): List { + fun task(vararg startDir: File?): List { val files: MutableList = ArrayList() - for (dir in startDir) { - findProjectFiles(dir, files) + startDir.forEach { dir -> + dir?.let { + findProjectFiles(dir, files) + } } getAllProjectsFromPocketCodeFolder(files) return files @@ -70,11 +75,12 @@ class ListProjectFilesTask(listener: OnListProjectFilesListener) : } @SuppressWarnings("ComplexCondition") private fun getAllProjectsFromPocketCodeFolder(projectFiles: MutableList) { - if (FlavoredConstants.EXTERNAL_STORAGE_ROOT_DIRECTORY.listFiles() == null) { - return - } FlavoredConstants.EXTERNAL_STORAGE_ROOT_DIRECTORY.listFiles()?.forEach { dir -> - if (dir.name != Constants.BACKPACK_DIRECTORY_NAME && dir.name != Constants.TMP_DIRECTORY_NAME && dir.isDirectory && File(dir, Constants.CODE_XML_FILE_NAME).exists()) { + if (dir.name != Constants.BACKPACK_DIRECTORY_NAME && + dir.name != Constants.TMP_DIRECTORY_NAME && + dir.isDirectory && + File(dir, Constants.CODE_XML_FILE_NAME).exists()) + { projectFiles.add(dir) } }