summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorRobin Kertels <robin.kertels@gmail.com>2023-03-24 00:33:42 +0100
committerRobin Kertels <robin.kertels@gmail.com>2023-03-24 00:33:42 +0100
commit43d346aba4e86839492234393165f81fd485afb4 (patch)
treea067231f9b8622ee38af21e95c78aa86201729e9 /Source/Android/app/src/main/java
parent002a96adb05366b12909d65023f74830bb6a082c (diff)
Android: Open DocumentProvider directly when tapping the File Manager button
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt65
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt2
2 files changed, 47 insertions, 20 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt
index dc11e811fc..152255eb63 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt
@@ -8,6 +8,7 @@ import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
+import android.provider.DocumentsContract
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
@@ -20,6 +21,7 @@ import org.dolphinemu.dolphinemu.databinding.ActivityUserDataBinding
import org.dolphinemu.dolphinemu.dialogs.NotificationDialog
import org.dolphinemu.dolphinemu.dialogs.TaskDialog
import org.dolphinemu.dolphinemu.dialogs.UserDataImportWarningDialog
+import org.dolphinemu.dolphinemu.features.DocumentProvider
import org.dolphinemu.dolphinemu.model.TaskViewModel
import org.dolphinemu.dolphinemu.utils.*
import org.dolphinemu.dolphinemu.utils.ThemeHelper.enableScrollTint
@@ -112,27 +114,43 @@ class UserDataActivity : AppCompatActivity() {
}
private fun openFileManager() {
+ // First, try to open the user data folder directly
try {
- // First, try the package name used on "normal" phones
+ startActivity(getFileManagerIntentOnDocumentProvider(Intent.ACTION_VIEW))
+ return
+ } catch (_: ActivityNotFoundException) {}
+
+ try {
+ startActivity(getFileManagerIntentOnDocumentProvider("android.provider.action.BROWSE"))
+ return
+ } catch (_: ActivityNotFoundException) {}
+
+ try {
+ // Just try to open the file manager, try the package name used on "normal" phones
startActivity(getFileManagerIntent("com.google.android.documentsui"))
- } catch (e: ActivityNotFoundException) {
- try {
- // Next, try the AOSP package name
- startActivity(getFileManagerIntent("com.android.documentsui"))
- } catch (e2: ActivityNotFoundException) {
- // Activity not found. Perhaps it was removed by the OEM, or by some new Android version
- // that didn't exist at the time of writing. Not much we can do other than tell the user.
- val arguments = Bundle()
- arguments.putInt(
- NotificationDialog.KEY_MESSAGE,
- R.string.user_data_open_system_file_manager_failed
- )
-
- val dialog = NotificationDialog()
- dialog.arguments = arguments
- dialog.show(supportFragmentManager, NotificationDialog.TAG)
- }
- }
+ return
+ } catch (_: ActivityNotFoundException) {}
+
+ try {
+ // Next, try the AOSP package name
+ startActivity(getFileManagerIntent("com.android.documentsui"))
+ return
+ } catch (_: ActivityNotFoundException) {}
+
+ try {
+ // Activity not found. Perhaps it was removed by the OEM, or by some new Android version
+ // that didn't exist at the time of writing. Not much we can do other than tell the user.
+ val arguments = Bundle()
+ arguments.putInt(
+ NotificationDialog.KEY_MESSAGE,
+ R.string.user_data_open_system_file_manager_failed
+ )
+
+ val dialog = NotificationDialog()
+ dialog.arguments = arguments
+ dialog.show(supportFragmentManager, NotificationDialog.TAG)
+ return
+ } catch (_: ActivityNotFoundException) {}
}
private fun getFileManagerIntent(packageName: String): Intent {
@@ -143,6 +161,15 @@ class UserDataActivity : AppCompatActivity() {
return intent
}
+ private fun getFileManagerIntentOnDocumentProvider(action: String): Intent {
+ val authority = "$packageName.user"
+ val intent = Intent(action)
+ intent.addCategory(Intent.CATEGORY_DEFAULT)
+ intent.data = DocumentsContract.buildRootUri(authority, DocumentProvider.ROOT_ID)
+ intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION or Intent.FLAG_GRANT_PREFIX_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
+ return intent
+ }
+
private fun importUserData() {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.type = "application/zip"
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt
index 5ce6aaac9a..089170125c 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt
@@ -27,7 +27,7 @@ class DocumentProvider : DocumentsProvider() {
private var rootDirectory: File? = null
companion object {
- private const val ROOT_ID = "root"
+ public const val ROOT_ID = "root"
private val DEFAULT_ROOT_PROJECTION = arrayOf(
DocumentsContract.Root.COLUMN_ROOT_ID,