diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/filepicker/FilePickerAdapter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/filepicker/FilePickerAdapter.kt index 4174d63d..5c4dcbc7 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/filepicker/FilePickerAdapter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/filepicker/FilePickerAdapter.kt @@ -14,7 +14,6 @@ import androidx.appcompat.widget.AppCompatEditText import androidx.recyclerview.widget.RecyclerView import java.io.File import java.util.LinkedList -import kotlin.Comparator import org.moire.ultrasonic.R import org.moire.ultrasonic.util.Util import timber.log.Timber @@ -24,7 +23,8 @@ import timber.log.Timber * @author this implementation is loosely based on the work of Yogesh Sundaresan, * original license: http://www.apache.org/licenses/LICENSE-2.0 */ -internal class FilePickerAdapter : RecyclerView.Adapter { +internal class FilePickerAdapter(view: FilePickerView) : + RecyclerView.Adapter() { private var data: MutableList = LinkedList() var defaultDirectory: File = Environment.getExternalStorageDirectory() @@ -34,32 +34,15 @@ internal class FilePickerAdapter : RecyclerView.Adapter - get() = arrayOf( - "/storage/sdcard0", "/storage/sdcard1", "/storage/extsdcard", - "/storage/sdcard0/external_sdcard", "/mnt/extsdcard", "/mnt/sdcard/external_sd", - "/mnt/external_sd", "/mnt/media_rw/sdcard1", "/removable/microsd", "/mnt/emmc", - "/storage/external_SD", "/storage/ext_sd", "/storage/removable/sdcard1", - "/data/sdext", "/data/sdext2", "/data/sdext3", "/data/sdext4", "/sdcard1", - "/sdcard2", "/storage/microsd", "/data/user" - ) - private var folderIcon: Drawable? = null private var upIcon: Drawable? = null private var sdIcon: Drawable? = null - constructor(defaultDir: File, view: FilePickerView) : this(view) { - this.defaultDirectory = defaultDir - selectedDirectory = defaultDir - } - - constructor(view: FilePickerView) { + init { this.context = view.context - listerView = view - upIcon = Util.getDrawableFromAttribute(context, R.attr.filepicker_subdirectory_up) folderIcon = Util.getDrawableFromAttribute(context, R.attr.filepicker_folder) sdIcon = Util.getDrawableFromAttribute(context, R.attr.filepicker_sd_card) @@ -71,8 +54,8 @@ internal class FilePickerAdapter : RecyclerView.Adapter() - var storages: List? = null - var storagePaths: List? = null + val storages: List? + val storagePaths: List? storages = context!!.getExternalFilesDirs(null).filterNotNull() storagePaths = storages.map { i -> i.absolutePath } @@ -82,8 +65,7 @@ internal class FilePickerAdapter : RecyclerView.Adapter - if (f1.file!!.isDirectory && f2.file!!.isDirectory) - f1.name.compareTo(f2.name, ignoreCase = true) - else if (f1.file!!.isDirectory && !f2.file!!.isDirectory) - -1 - else if (!f1.file!!.isDirectory && f2.file!!.isDirectory) - 1 - else if (!f1.file!!.isDirectory && !f2.file!!.isDirectory) - f1.name.compareTo(f2.name, ignoreCase = true) - else - 0 - } - ) + data.sortWith { f1, f2 -> + if (f1.file!!.isDirectory && f2.file!!.isDirectory) + f1.name.compareTo(f2.name, ignoreCase = true) + else if (f1.file!!.isDirectory && !f2.file!!.isDirectory) + -1 + else if (!f1.file!!.isDirectory && f2.file!!.isDirectory) + 1 + else if (!f1.file!!.isDirectory && !f2.file!!.isDirectory) + f1.name.compareTo(f2.name, ignoreCase = true) + else + 0 + } selectedDirectory = currentDirectory selectedDirectoryChanged.invoke( @@ -122,7 +102,7 @@ internal class FilePickerAdapter : RecyclerView.Adapter 0) + if (storagePaths.indexOf(currentDirectory.absolutePath) > 0) data.add(0, FileListItem(File("/"), "..", upIcon!!)) else data.add(0, FileListItem(selectedDirectory.parentFile!!, "..", upIcon!!)) @@ -132,33 +112,6 @@ internal class FilePickerAdapter : RecyclerView.Adapter { - val fileList = LinkedList() - var s = System.getenv("EXTERNAL_STORAGE") - if (!TextUtils.isEmpty(s)) { - val f = File(s!!) - fileList.add(FileListItem(f, f.name, sdIcon!!)) - } else { - val paths = physicalPaths - for (path in paths) { - val f = File(path) - if (f.exists()) - fileList.add(FileListItem(f, f.name, sdIcon!!)) - } - } - s = System.getenv("SECONDARY_STORAGE") - if (s != null && !TextUtils.isEmpty(s)) { - val rawSecondaryStorages = - s.split(File.pathSeparator.toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() - for (path in rawSecondaryStorages) { - val f = File(path) - if (f.exists()) - fileList.add(FileListItem(f, f.name, sdIcon!!)) - } - } - return fileList - } - private fun getKitKatStorageItems(storages: List): LinkedList { val fileList = LinkedList() if (storages.isNotEmpty()) {