Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73437adc authored by tibbi's avatar tibbi
Browse files

move the OTG file getter in a context extension

parent 49a2de98
Loading
Loading
Loading
Loading
+1 −43
Original line number Diff line number Diff line
package com.simplemobiletools.commons.dialogs

import android.net.Uri
import android.os.Environment
import android.os.Parcelable
import android.support.v4.provider.DocumentFile
import android.support.v7.app.AlertDialog
import android.support.v7.widget.LinearLayoutManager
import android.view.KeyEvent
@@ -16,7 +14,6 @@ import com.simplemobiletools.commons.models.FileDirItem
import com.simplemobiletools.commons.views.Breadcrumbs
import kotlinx.android.synthetic.main.dialog_filepicker.view.*
import java.io.File
import java.net.URLDecoder
import java.util.*

/**
@@ -170,51 +167,12 @@ class FilePickerDialog(val activity: BaseSimpleActivity,

    private fun getItems(path: String, callback: (List<FileDirItem>) -> Unit) {
        if (path.startsWith(OTG_PATH)) {
            getOTGItems(path, callback)
            activity.getOTGItems(path, callback)
        } else {
            getRegularItems(path, callback)
        }
    }

    private fun getOTGItems(path: String, callback: (List<FileDirItem>) -> Unit) {
        val items = ArrayList<FileDirItem>()
        val OTGTreeUri = activity.baseConfig.OTGTreeUri
        var rootUri = DocumentFile.fromTreeUri(activity.applicationContext, Uri.parse(OTGTreeUri))
        val parts = path.split("/").dropLastWhile { it.isEmpty() }
        for (part in parts) {
            if (path == OTG_PATH) {
                break
            }

            if (part == "otg:" || part == "") {
                continue
            }

            rootUri = rootUri.findFile(part)
        }

        val files = rootUri.listFiles()
        if (activity.baseConfig.OTGBasePath.isEmpty()) {
            val first = files?.firstOrNull()
            if (first != null) {
                val fullPath = first.uri.toString()
                val nameStartIndex = fullPath.lastIndexOf(first.name)
                val basePath = fullPath.substring(0, nameStartIndex)
                activity.baseConfig.OTGBasePath = basePath
            }
        }

        val basePath = activity.baseConfig.OTGBasePath
        for (file in files) {
            if (file.exists()) {
                val filePath = file.uri.toString().substring(basePath.length)
                val decodedPath = OTG_PATH + "/" + URLDecoder.decode(filePath, "UTF-8")
                items.add(FileDirItem(decodedPath, file.name, file.isDirectory, 0, file.length()))
            }
        }
        callback(items)
    }

    private fun getRegularItems(path: String, callback: (List<FileDirItem>) -> Unit) {
        val items = ArrayList<FileDirItem>()
        val base = File(path)
+43 −0
Original line number Diff line number Diff line
@@ -14,7 +14,9 @@ import android.support.v4.provider.DocumentFile
import android.text.TextUtils
import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.helpers.OTG_PATH
import com.simplemobiletools.commons.models.FileDirItem
import java.io.File
import java.net.URLDecoder
import java.util.*
import java.util.regex.Pattern

@@ -105,6 +107,8 @@ fun Context.getInternalStoragePath() = Environment.getExternalStorageDirectory()

fun Context.isPathOnSD(path: String) = sdCardPath.isNotEmpty() && path.startsWith(sdCardPath)

fun Context.isPathOnOTG(path: String) = path.startsWith(OTG_PATH)

fun Context.needsStupidWritePermissions(path: String) = isPathOnSD(path) && isLollipopPlus()

@SuppressLint("NewApi")
@@ -244,6 +248,45 @@ fun Context.updateLastModified(file: File, lastModified: Long) {
    }
}

fun Context.getOTGItems(path: String, callback: (List<FileDirItem>) -> Unit) {
    val items = ArrayList<FileDirItem>()
    val OTGTreeUri = baseConfig.OTGTreeUri
    var rootUri = DocumentFile.fromTreeUri(applicationContext, Uri.parse(OTGTreeUri))
    val parts = path.split("/").dropLastWhile { it.isEmpty() }
    for (part in parts) {
        if (path == OTG_PATH) {
            break
        }

        if (part == "otg:" || part == "") {
            continue
        }

        rootUri = rootUri.findFile(part)
    }

    val files = rootUri.listFiles()
    if (baseConfig.OTGBasePath.isEmpty()) {
        val first = files?.firstOrNull()
        if (first != null) {
            val fullPath = first.uri.toString()
            val nameStartIndex = fullPath.lastIndexOf(first.name)
            val basePath = fullPath.substring(0, nameStartIndex)
            baseConfig.OTGBasePath = basePath
        }
    }

    val basePath = baseConfig.OTGBasePath
    for (file in files) {
        if (file.exists()) {
            val filePath = file.uri.toString().substring(basePath.length)
            val decodedPath = OTG_PATH + "/" + URLDecoder.decode(filePath, "UTF-8")
            items.add(FileDirItem(decodedPath, file.name, file.isDirectory, 0, file.length()))
        }
    }
    callback(items)
}

// avoid these being set as SD card paths
private val physicalPaths = arrayListOf(
        "/storage/sdcard1", // Motorola Xoom