Skip to content

Commit

Permalink
Fix: Use last path segment as default name for external storage short…
Browse files Browse the repository at this point in the history
…cuts
  • Loading branch information
zhanghai committed Apr 19, 2024
1 parent d24985f commit 5800d6c
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,21 @@ import kotlinx.parcelize.Parcelize
import kotlinx.parcelize.WriteWith
import me.zhanghai.android.files.compat.DocumentsContractCompat
import me.zhanghai.android.files.util.StableUriParceler
import me.zhanghai.android.files.util.takeIfNotEmpty

@Parcelize
@JvmInline
value class ExternalStorageUri(val value: @WriteWith<StableUriParceler> Uri) : Parcelable {
constructor(rootId: String, path: String) : this(
constructor(
rootId: String,
path: String
) : this(
DocumentsContract.buildDocumentUriUsingTree(
DocumentsContract.buildTreeDocumentUri(
DocumentsContractCompat.EXTERNAL_STORAGE_PROVIDER_AUTHORITY, rootId
), "$rootId:$path"
DocumentsContractCompat.EXTERNAL_STORAGE_PROVIDER_AUTHORITY,
rootId
),
"$rootId:$path"
)
)

Expand All @@ -47,9 +53,4 @@ private val Uri.isExternalStorageUri: Boolean
pathSegments.size == 4

val ExternalStorageUri.displayName: String
get() =
if (rootId == DocumentsContractCompat.EXTERNAL_STORAGE_PRIMARY_EMULATED_ROOT_ID) {
path
} else {
DocumentsContract.getDocumentId(value)
}
get() = path.takeLastWhile { it != '/' }.takeIfNotEmpty() ?: "/"
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package me.zhanghai.android.files.storage

import android.os.Bundle
import androidx.annotation.StringRes
import androidx.fragment.app.Fragment
import kotlinx.parcelize.Parcelize
import me.zhanghai.android.files.R
Expand All @@ -27,7 +28,9 @@ class AddExternalStorageShortcutFragment : Fragment() {
val hasDocumentsUi = uri.value.createDocumentsUiViewDirectoryIntent()
.resolveActivity(packageManager) != null
if (hasDocumentsUi) {
val externalStorageShortcut = ExternalStorageShortcut(null, null, uri)
val externalStorageShortcut = ExternalStorageShortcut(
null, args.customNameRes?.let { getString(it) }, uri
)
Storages.addOrReplace(externalStorageShortcut)
} else {
showToast(R.string.activity_not_found)
Expand All @@ -36,5 +39,8 @@ class AddExternalStorageShortcutFragment : Fragment() {
}

@Parcelize
class Args(val uri: ExternalStorageUri) : ParcelableArgs
class Args(
@StringRes val customNameRes: Int?,
val uri: ExternalStorageUri
) : ParcelableArgs
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class AddStorageDialogFragment : AppCompatDialogFragment() {
R.string.storage_add_storage_android_data to
AddExternalStorageShortcutActivity ::class.createIntent().putArgs(
AddExternalStorageShortcutFragment.Args(
R.string.storage_add_storage_android_data,
ExternalStorageProviderHacks.DOCUMENT_URI_ANDROID_DATA
.asExternalStorageUri()
)
Expand All @@ -53,6 +54,7 @@ class AddStorageDialogFragment : AppCompatDialogFragment() {
R.string.storage_add_storage_android_obb to
AddExternalStorageShortcutActivity ::class.createIntent().putArgs(
AddExternalStorageShortcutFragment.Args(
R.string.storage_add_storage_android_obb,
ExternalStorageProviderHacks.DOCUMENT_URI_ANDROID_OBB
.asExternalStorageUri()
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.textfield.TextInputEditText
import kotlinx.parcelize.Parcelize
import me.zhanghai.android.files.R
import me.zhanghai.android.files.compat.DocumentsContractCompat
import me.zhanghai.android.files.databinding.EditExternalStorageShortcutDialogBinding
import me.zhanghai.android.files.file.ExternalStorageUri
import me.zhanghai.android.files.file.displayName
Expand Down Expand Up @@ -65,12 +66,9 @@ class EditExternalStorageShortcutDialogFragment : AppCompatDialogFragment() {

private fun updateNamePlaceholder() {
val rootId = binding.rootIdEdit.text.toString().takeIfNotEmpty()
?: DocumentsContractCompat.EXTERNAL_STORAGE_PRIMARY_EMULATED_ROOT_ID
val path = binding.pathEdit.text.toString().dropWhile { it == '/' }
binding.nameLayout.placeholderText = if (rootId != null) {
ExternalStorageUri(rootId, path).displayName
} else {
path
}
binding.nameLayout.placeholderText = ExternalStorageUri(rootId, path).displayName
}

private fun save() {
Expand Down

0 comments on commit 5800d6c

Please sign in to comment.