summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt70
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt2
2 files changed, 52 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..3813427f26 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
@@ -49,6 +51,7 @@ class UserDataActivity : AppCompatActivity() {
WindowCompat.setDecorFitsSystemWindows(window, false)
+ val android7 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
val android10 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
val android11 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
val legacy = DirectoryInitialization.isUsingLegacyUserDirectory()
@@ -57,6 +60,10 @@ class UserDataActivity : AppCompatActivity() {
if (android10) R.string.user_data_new_location_android_10 else R.string.user_data_new_location
mBinding.textType.setText(if (legacy) R.string.user_data_old_location else userDataNewLocation)
+ val openFileManagerStringId =
+ if (android7) R.string.user_data_open_user_folder else R.string.user_data_open_system_file_manager
+ mBinding.buttonOpenSystemFileManager.setText(openFileManagerStringId)
+
mBinding.textPath.text = DirectoryInitialization.getUserDirectory()
mBinding.textAndroid11.visibility = if (android11 && !legacy) View.VISIBLE else View.GONE
@@ -112,27 +119,43 @@ class UserDataActivity : AppCompatActivity() {
}
private fun openFileManager() {
+ // First, try to open the user data folder directly
+ try {
+ startActivity(getFileManagerIntentOnDocumentProvider(Intent.ACTION_VIEW))
+ return
+ } catch (_: ActivityNotFoundException) {}
+
+ try {
+ startActivity(getFileManagerIntentOnDocumentProvider("android.provider.action.BROWSE"))
+ return
+ } catch (_: ActivityNotFoundException) {}
+
try {
- // First, try the package name used on "normal" phones
+ // 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 +166,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,