mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-03 10:46:53 -04:00
Fixed: The chooser UI now defaults to displaying external storage.
* Previously, it displayed the last known location when selecting a folder for external storage, which could confuse the user. We have now resolved this by defaulting to opening the SD card when choosing the SD card folder.
This commit is contained in:
parent
e693dd544a
commit
50eeddd314
@ -28,6 +28,7 @@ import android.content.pm.PackageManager.PERMISSION_GRANTED
|
||||
import android.net.ConnectivityManager
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.DocumentsContract
|
||||
import android.provider.Settings
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
@ -88,6 +89,7 @@ import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog
|
||||
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog.SelectFolder
|
||||
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog.YesNoDialog.WifiOnly
|
||||
import org.kiwix.kiwixmobile.core.utils.files.FileUtils.getPathFromUri
|
||||
import org.kiwix.kiwixmobile.core.utils.files.FileUtils.getSdCardUri
|
||||
import org.kiwix.kiwixmobile.databinding.FragmentDestinationDownloadBinding
|
||||
import org.kiwix.kiwixmobile.zimManager.NetworkState
|
||||
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel
|
||||
@ -402,13 +404,19 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions {
|
||||
}
|
||||
|
||||
private fun selectFolder() {
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
|
||||
intent.addFlags(
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
|
||||
or Intent.FLAG_GRANT_PREFIX_URI_PERMISSION
|
||||
)
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
getSdCardUri(requireActivity())?.let {
|
||||
putExtra(DocumentsContract.EXTRA_INITIAL_URI, it)
|
||||
}
|
||||
}
|
||||
addFlags(
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
|
||||
or Intent.FLAG_GRANT_PREFIX_URI_PERMISSION
|
||||
)
|
||||
}
|
||||
selectFolderLauncher.launch(intent)
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,7 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.DocumentsContract
|
||||
import android.view.LayoutInflater
|
||||
import android.webkit.WebView
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
@ -55,6 +56,7 @@ import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog
|
||||
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog.OpenCredits
|
||||
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog.SelectFolder
|
||||
import org.kiwix.kiwixmobile.core.utils.files.FileUtils.getPathFromUri
|
||||
import org.kiwix.kiwixmobile.core.utils.files.FileUtils.getSdCardUri
|
||||
import java.io.File
|
||||
import java.util.Locale
|
||||
import javax.inject.Inject
|
||||
@ -345,6 +347,11 @@ abstract class CorePrefsFragment :
|
||||
|
||||
private fun selectFolder() {
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
getSdCardUri(requireActivity())?.let {
|
||||
putExtra(DocumentsContract.EXTRA_INITIAL_URI, it)
|
||||
}
|
||||
}
|
||||
addFlags(
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
|
@ -31,6 +31,7 @@ import android.util.Log
|
||||
import android.webkit.URLUtil
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.net.toUri
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -293,6 +294,27 @@ object FileUtils {
|
||||
.firstOrNull { it.path.contains(storageName) }
|
||||
?.path?.substringBefore(context.getString(R.string.android_directory_seperator))
|
||||
|
||||
@JvmStatic
|
||||
fun getSdCardUri(context: Context): Uri? {
|
||||
// Get the external SD card path
|
||||
val externalSdCardPath = context.getExternalFilesDirs("")[1]
|
||||
?.path?.substringBefore(context.getString(R.string.android_directory_seperator))
|
||||
|
||||
// Extract the SD card name from the path
|
||||
val sdCardName = externalSdCardPath?.substringAfterLast("/storage/")
|
||||
|
||||
// If SD card name is null or empty, return null
|
||||
return if (sdCardName.isNullOrEmpty()) {
|
||||
null
|
||||
} else {
|
||||
// Build and return the URI for the SD card
|
||||
val sdCardPath =
|
||||
"content://com.android.externalstorage.documents/tree/" +
|
||||
"$sdCardName%3A/document/$sdCardName%3A/"
|
||||
sdCardPath.toUri()
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("WrongConstant")
|
||||
@JvmStatic
|
||||
fun getPathFromUri(activity: Activity, data: Intent): String? {
|
||||
|
Loading…
x
Reference in New Issue
Block a user