Loading commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/FilePickerDialog.kt +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 Loading @@ -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.* /** Loading Loading @@ -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) Loading commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Context-storage.kt +43 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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") Loading Loading @@ -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 Loading Loading
commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/FilePickerDialog.kt +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 Loading @@ -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.* /** Loading Loading @@ -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) Loading
commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Context-storage.kt +43 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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") Loading Loading @@ -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 Loading