Loading build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ buildscript { propMinSdkVersion = 16 propTargetSdkVersion = propCompileSdkVersion propVersionCode = 1 propVersionName = '3.11.52' propVersionName = '3.11.54' kotlin_version = '1.2.21' support_libs = '27.0.2' } Loading commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/FilePickerDialog.kt +1 −9 Original line number Diff line number Diff line Loading @@ -198,19 +198,11 @@ class FilePickerDialog(val activity: BaseSimpleActivity, val curPath = file.absolutePath val curName = curPath.getFilenameFromPath() val size = if (getProperFileSize) file.getProperSize(showHidden) else file.length() items.add(FileDirItem(curPath, curName, file.isDirectory, getChildren(file), size)) items.add(FileDirItem(curPath, curName, file.isDirectory, file.getDirectChildrenCount(showHidden), size)) } callback(items) } private fun getChildren(file: File): Int { return if (file.listFiles() == null || !file.isDirectory) { 0 } else { file.listFiles().filter { !it.isHidden || (it.isHidden && showHidden) }.size } } private fun containsDirectory(items: List<FileDirItem>) = items.any { it.isDirectory } override fun breadcrumbClicked(id: Int) { Loading commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Activity.kt +43 −25 Original line number Diff line number Diff line Loading @@ -126,13 +126,13 @@ fun Activity.launchViewIntent(url: String) { }.start() } fun Activity.shareUri(uri: Uri, applicationId: String) { fun Activity.shareUriIntent(path: String, applicationId: String) { Thread { val newUri = ensurePublicUri(uri, applicationId) val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_STREAM, newUri) type = getUriMimeType(uri, newUri) type = getUriMimeType(path, newUri) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) if (resolveActivity(packageManager) != null) { try { Loading @@ -147,16 +147,23 @@ fun Activity.shareUri(uri: Uri, applicationId: String) { }.start() } fun Activity.shareUris(uris: ArrayList<Uri>, applicationId: String) { fun Activity.sharePathsIntent(paths: ArrayList<String>, applicationId: String) { Thread { if (uris.size == 1) { shareUri(uris.first(), applicationId) if (paths.size == 1) { shareUriIntent(paths.first(), applicationId) } else { val newUris = uris.map { ensurePublicUri(it, applicationId) } as ArrayList<Uri> var mimeType = newUris.getMimeType() val uriPaths = ArrayList<String>() val newUris = paths.map { val uri = getFinalUriFromPath(it, applicationId) ?: return@Thread uriPaths.add(uri.path) uri } as ArrayList<Uri> var mimeType = uriPaths.getMimeType() if (mimeType.isEmpty() || mimeType == "*/*") { mimeType = uris.getMimeType() mimeType = paths.getMimeType() } Intent().apply { action = Intent.ACTION_SEND_MULTIPLE type = mimeType Loading @@ -177,12 +184,12 @@ fun Activity.shareUris(uris: ArrayList<Uri>, applicationId: String) { }.start() } fun Activity.setAs(uri: Uri, applicationId: String) { fun Activity.setAsIntent(path: String, applicationId: String) { Thread { val newUri = ensurePublicUri(uri, applicationId) val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread Intent().apply { action = Intent.ACTION_ATTACH_DATA setDataAndType(newUri, getUriMimeType(uri, newUri)) setDataAndType(newUri, getUriMimeType(path, newUri)) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) val chooser = Intent.createChooser(this, getString(R.string.set_as)) Loading @@ -195,14 +202,14 @@ fun Activity.setAs(uri: Uri, applicationId: String) { }.start() } fun Activity.openEditor(uri: Uri, applicationId: String) { fun Activity.openEditorIntent(path: String, applicationId: String) { Thread { val newUri = ensurePublicUri(uri, applicationId) val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread Intent().apply { action = Intent.ACTION_EDIT setDataAndType(newUri, getUriMimeType(uri, newUri)) setDataAndType(newUri, getUriMimeType(path, newUri)) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) putExtra(MediaStore.EXTRA_OUTPUT, uri) putExtra(MediaStore.EXTRA_OUTPUT, newUri) if (resolveActivity(packageManager) != null) { startActivityForResult(this, REQUEST_EDIT_IMAGE) Loading @@ -213,15 +220,10 @@ fun Activity.openEditor(uri: Uri, applicationId: String) { }.start() } fun Activity.openFile(uri: Uri, forceChooser: Boolean, applicationId: String) { fun Activity.openPathIntent(path: String, forceChooser: Boolean, applicationId: String) { Thread { val newUri = try { ensurePublicUri(uri, applicationId) } catch (e: Exception) { showErrorToast(e) return@Thread } val mimeType = getUriMimeType(uri, newUri) val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread val mimeType = getUriMimeType(path, newUri) Intent().apply { action = Intent.ACTION_VIEW setDataAndType(newUri, mimeType) Loading @@ -231,7 +233,7 @@ fun Activity.openFile(uri: Uri, forceChooser: Boolean, applicationId: String) { putExtra(IS_FROM_GALLERY, true) } putExtra(REAL_FILE_PATH, uri) putExtra(REAL_FILE_PATH, path) if (resolveActivity(packageManager) != null) { val chooser = Intent.createChooser(this, getString(R.string.open_with)) Loading @@ -245,6 +247,22 @@ fun Activity.openFile(uri: Uri, forceChooser: Boolean, applicationId: String) { }.start() } fun Activity.getFinalUriFromPath(path: String, applicationId: String): Uri? { val uri = try { ensurePublicUri(path, applicationId) } catch (e: Exception) { showErrorToast(e) return null } if (uri == null) { toast(R.string.unknown_error_occurred) return null } return uri } fun Activity.tryGenericMimeType(intent: Intent, mimeType: String, uri: Uri): Boolean { var genericMimeType = mimeType.getGenericMimeType() if (genericMimeType.isEmpty()) { Loading commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Context.kt +17 −3 Original line number Diff line number Diff line Loading @@ -255,7 +255,7 @@ fun Context.getFilenameFromUri(uri: Uri): String { } fun Context.getMimeTypeFromUri(uri: Uri): String { var mimetype = uri.path.getMimeTypeFromPath() var mimetype = uri.path.getMimeType() if (mimetype.isEmpty()) { try { mimetype = contentResolver.getType(uri) Loading @@ -265,6 +265,20 @@ fun Context.getMimeTypeFromUri(uri: Uri): String { return mimetype } fun Context.ensurePublicUri(path: String, applicationId: String): Uri? { return if (isPathOnOTG(path)) { getDocumentFile(path)?.uri } else { val uri = Uri.parse(path) if (uri.scheme == "content") { uri } else { val file = File(uri.path) getFilePublicUri(file, applicationId) } } } fun Context.ensurePublicUri(uri: Uri, applicationId: String): Uri { return if (uri.scheme == "content") { uri Loading Loading @@ -329,8 +343,8 @@ fun Context.updateSDCardPath() { }.start() } fun Context.getUriMimeType(oldUri: Uri, newUri: Uri): String { var mimeType = getMimeTypeFromUri(oldUri) fun Context.getUriMimeType(path: String, newUri: Uri): String { var mimeType = path.getMimeType() if (mimeType.isEmpty()) { mimeType = getMimeTypeFromUri(newUri) } Loading commons/src/main/kotlin/com/simplemobiletools/commons/extensions/File.kt +1 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ fun File.isImageSlow() = absolutePath.isImageFast() || getMimeType().startsWith( fun File.isVideoSlow() = absolutePath.isVideoFast() || getMimeType().startsWith("video") fun File.isAudioSlow() = absolutePath.isAudioFast() || getMimeType().startsWith("audio") fun File.getMimeType() = absolutePath.getMimeTypeFromPath() fun File.getMimeType() = absolutePath.getMimeType() fun File.getCompressionFormat() = when (extension.toLowerCase()) { "png" -> Bitmap.CompressFormat.PNG Loading Loading
build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ buildscript { propMinSdkVersion = 16 propTargetSdkVersion = propCompileSdkVersion propVersionCode = 1 propVersionName = '3.11.52' propVersionName = '3.11.54' kotlin_version = '1.2.21' support_libs = '27.0.2' } Loading
commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/FilePickerDialog.kt +1 −9 Original line number Diff line number Diff line Loading @@ -198,19 +198,11 @@ class FilePickerDialog(val activity: BaseSimpleActivity, val curPath = file.absolutePath val curName = curPath.getFilenameFromPath() val size = if (getProperFileSize) file.getProperSize(showHidden) else file.length() items.add(FileDirItem(curPath, curName, file.isDirectory, getChildren(file), size)) items.add(FileDirItem(curPath, curName, file.isDirectory, file.getDirectChildrenCount(showHidden), size)) } callback(items) } private fun getChildren(file: File): Int { return if (file.listFiles() == null || !file.isDirectory) { 0 } else { file.listFiles().filter { !it.isHidden || (it.isHidden && showHidden) }.size } } private fun containsDirectory(items: List<FileDirItem>) = items.any { it.isDirectory } override fun breadcrumbClicked(id: Int) { Loading
commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Activity.kt +43 −25 Original line number Diff line number Diff line Loading @@ -126,13 +126,13 @@ fun Activity.launchViewIntent(url: String) { }.start() } fun Activity.shareUri(uri: Uri, applicationId: String) { fun Activity.shareUriIntent(path: String, applicationId: String) { Thread { val newUri = ensurePublicUri(uri, applicationId) val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_STREAM, newUri) type = getUriMimeType(uri, newUri) type = getUriMimeType(path, newUri) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) if (resolveActivity(packageManager) != null) { try { Loading @@ -147,16 +147,23 @@ fun Activity.shareUri(uri: Uri, applicationId: String) { }.start() } fun Activity.shareUris(uris: ArrayList<Uri>, applicationId: String) { fun Activity.sharePathsIntent(paths: ArrayList<String>, applicationId: String) { Thread { if (uris.size == 1) { shareUri(uris.first(), applicationId) if (paths.size == 1) { shareUriIntent(paths.first(), applicationId) } else { val newUris = uris.map { ensurePublicUri(it, applicationId) } as ArrayList<Uri> var mimeType = newUris.getMimeType() val uriPaths = ArrayList<String>() val newUris = paths.map { val uri = getFinalUriFromPath(it, applicationId) ?: return@Thread uriPaths.add(uri.path) uri } as ArrayList<Uri> var mimeType = uriPaths.getMimeType() if (mimeType.isEmpty() || mimeType == "*/*") { mimeType = uris.getMimeType() mimeType = paths.getMimeType() } Intent().apply { action = Intent.ACTION_SEND_MULTIPLE type = mimeType Loading @@ -177,12 +184,12 @@ fun Activity.shareUris(uris: ArrayList<Uri>, applicationId: String) { }.start() } fun Activity.setAs(uri: Uri, applicationId: String) { fun Activity.setAsIntent(path: String, applicationId: String) { Thread { val newUri = ensurePublicUri(uri, applicationId) val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread Intent().apply { action = Intent.ACTION_ATTACH_DATA setDataAndType(newUri, getUriMimeType(uri, newUri)) setDataAndType(newUri, getUriMimeType(path, newUri)) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) val chooser = Intent.createChooser(this, getString(R.string.set_as)) Loading @@ -195,14 +202,14 @@ fun Activity.setAs(uri: Uri, applicationId: String) { }.start() } fun Activity.openEditor(uri: Uri, applicationId: String) { fun Activity.openEditorIntent(path: String, applicationId: String) { Thread { val newUri = ensurePublicUri(uri, applicationId) val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread Intent().apply { action = Intent.ACTION_EDIT setDataAndType(newUri, getUriMimeType(uri, newUri)) setDataAndType(newUri, getUriMimeType(path, newUri)) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) putExtra(MediaStore.EXTRA_OUTPUT, uri) putExtra(MediaStore.EXTRA_OUTPUT, newUri) if (resolveActivity(packageManager) != null) { startActivityForResult(this, REQUEST_EDIT_IMAGE) Loading @@ -213,15 +220,10 @@ fun Activity.openEditor(uri: Uri, applicationId: String) { }.start() } fun Activity.openFile(uri: Uri, forceChooser: Boolean, applicationId: String) { fun Activity.openPathIntent(path: String, forceChooser: Boolean, applicationId: String) { Thread { val newUri = try { ensurePublicUri(uri, applicationId) } catch (e: Exception) { showErrorToast(e) return@Thread } val mimeType = getUriMimeType(uri, newUri) val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread val mimeType = getUriMimeType(path, newUri) Intent().apply { action = Intent.ACTION_VIEW setDataAndType(newUri, mimeType) Loading @@ -231,7 +233,7 @@ fun Activity.openFile(uri: Uri, forceChooser: Boolean, applicationId: String) { putExtra(IS_FROM_GALLERY, true) } putExtra(REAL_FILE_PATH, uri) putExtra(REAL_FILE_PATH, path) if (resolveActivity(packageManager) != null) { val chooser = Intent.createChooser(this, getString(R.string.open_with)) Loading @@ -245,6 +247,22 @@ fun Activity.openFile(uri: Uri, forceChooser: Boolean, applicationId: String) { }.start() } fun Activity.getFinalUriFromPath(path: String, applicationId: String): Uri? { val uri = try { ensurePublicUri(path, applicationId) } catch (e: Exception) { showErrorToast(e) return null } if (uri == null) { toast(R.string.unknown_error_occurred) return null } return uri } fun Activity.tryGenericMimeType(intent: Intent, mimeType: String, uri: Uri): Boolean { var genericMimeType = mimeType.getGenericMimeType() if (genericMimeType.isEmpty()) { Loading
commons/src/main/kotlin/com/simplemobiletools/commons/extensions/Context.kt +17 −3 Original line number Diff line number Diff line Loading @@ -255,7 +255,7 @@ fun Context.getFilenameFromUri(uri: Uri): String { } fun Context.getMimeTypeFromUri(uri: Uri): String { var mimetype = uri.path.getMimeTypeFromPath() var mimetype = uri.path.getMimeType() if (mimetype.isEmpty()) { try { mimetype = contentResolver.getType(uri) Loading @@ -265,6 +265,20 @@ fun Context.getMimeTypeFromUri(uri: Uri): String { return mimetype } fun Context.ensurePublicUri(path: String, applicationId: String): Uri? { return if (isPathOnOTG(path)) { getDocumentFile(path)?.uri } else { val uri = Uri.parse(path) if (uri.scheme == "content") { uri } else { val file = File(uri.path) getFilePublicUri(file, applicationId) } } } fun Context.ensurePublicUri(uri: Uri, applicationId: String): Uri { return if (uri.scheme == "content") { uri Loading Loading @@ -329,8 +343,8 @@ fun Context.updateSDCardPath() { }.start() } fun Context.getUriMimeType(oldUri: Uri, newUri: Uri): String { var mimeType = getMimeTypeFromUri(oldUri) fun Context.getUriMimeType(path: String, newUri: Uri): String { var mimeType = path.getMimeType() if (mimeType.isEmpty()) { mimeType = getMimeTypeFromUri(newUri) } Loading
commons/src/main/kotlin/com/simplemobiletools/commons/extensions/File.kt +1 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ fun File.isImageSlow() = absolutePath.isImageFast() || getMimeType().startsWith( fun File.isVideoSlow() = absolutePath.isVideoFast() || getMimeType().startsWith("video") fun File.isAudioSlow() = absolutePath.isAudioFast() || getMimeType().startsWith("audio") fun File.getMimeType() = absolutePath.getMimeTypeFromPath() fun File.getMimeType() = absolutePath.getMimeType() fun File.getCompressionFormat() = when (extension.toLowerCase()) { "png" -> Bitmap.CompressFormat.PNG Loading