diff --git a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt index 6af77aec1..10c03016b 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt @@ -693,34 +693,37 @@ object NativeLibrary { @Keep @JvmStatic - fun getUserDirectory(uriOverride: Uri? = null): String { + fun getNativePath(uri: Uri): String { BuildUtil.assertNotGooglePlay() - val preferences: SharedPreferences = - PreferenceManager.getDefaultSharedPreferences(CitraApplication.appContext) - val dirSep = "/" - val udUri = uriOverride ?: - preferences.getString("CITRA_DIRECTORY", "")!!.toUri() - val udPathSegment = udUri.lastPathSegment!! - val udVirtualPath = udPathSegment.substringAfter(":") - if (udPathSegment.startsWith("primary:")) { // User directory is located in primary storage + val pathSegment = uri.lastPathSegment!! + val virtualPath = pathSegment.substringAfter(":") + + if (pathSegment.startsWith("primary:")) { // User directory is located in primary storage val primaryStoragePath = Environment.getExternalStorageDirectory().absolutePath - return primaryStoragePath + dirSep + udVirtualPath + dirSep + return primaryStoragePath + dirSep + virtualPath + dirSep } else { // User directory probably located on a removable storage device - val storageIdString = udPathSegment.substringBefore(":") - val udRemovablePath = RemovableStorageHelper.getRemovableStoragePath(storageIdString) + val storageIdString = pathSegment.substringBefore(":") + val removablePath = RemovableStorageHelper.getRemovableStoragePath(storageIdString) - if (udRemovablePath == null) { + if (removablePath == null) { android.util.Log.e("NativeLibrary", - "Unknown mount location for storage device '$storageIdString' (URI: $udUri)" + "Unknown mount location for storage device '$storageIdString' (URI: $uri)" ) return "" } - return udRemovablePath + dirSep + udVirtualPath + dirSep + return removablePath + dirSep + virtualPath } + } + @Keep + @JvmStatic + fun getUserDirectory(): String { + val preferences: SharedPreferences = + PreferenceManager.getDefaultSharedPreferences(CitraApplication.appContext) + return getNativePath(preferences.getString("CITRA_DIRECTORY", "")!!.toUri()) } @Keep diff --git a/src/android/app/src/main/java/org/citra/citra_emu/fragments/SetupFragment.kt b/src/android/app/src/main/java/org/citra/citra_emu/fragments/SetupFragment.kt index 0a25044ea..f4cefc94f 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/fragments/SetupFragment.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/fragments/SetupFragment.kt @@ -567,7 +567,7 @@ class SetupFragment : Fragment() { } if (!BuildUtil.isGooglePlayBuild) { - if (NativeLibrary.getUserDirectory(result) == "") { + if (NativeLibrary.getNativePath(result) == "") { SelectUserDirectoryDialogFragment.newInstance( mainActivity, R.string.invalid_selection, diff --git a/src/android/app/src/main/java/org/citra/citra_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/citra/citra_emu/ui/main/MainActivity.kt index e1416bd37..80b26685d 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/ui/main/MainActivity.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/ui/main/MainActivity.kt @@ -367,7 +367,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider { } if (!BuildUtil.isGooglePlayBuild) { - if (NativeLibrary.getUserDirectory(result) == "") { + if (NativeLibrary.getNativePath(result) == "") { SelectUserDirectoryDialogFragment.newInstance( this, R.string.invalid_selection, diff --git a/src/common/android_storage.cpp b/src/common/android_storage.cpp index 58df72319..033baaeeb 100644 --- a/src/common/android_storage.cpp +++ b/src/common/android_storage.cpp @@ -296,7 +296,7 @@ bool MoveAndRenameFile(const std::string& src_full_path, const std::string& dest std::string TranslateFilePath(const std::string& filepath) { std::optional userDirLocation = GetUserDirectory(); if (userDirLocation) { - return *userDirLocation + filepath; + return *userDirLocation + "/" + filepath; } return ""; } diff --git a/src/common/android_storage.h b/src/common/android_storage.h index 65c149894..b070ca53b 100644 --- a/src/common/android_storage.h +++ b/src/common/android_storage.h @@ -20,7 +20,7 @@ V(GetFilesName, std::vector, (const std::string& filepath), get_files_name, \ "getFilesName", "(Ljava/lang/String;)[Ljava/lang/String;") \ V(GetUserDirectory, std::optional, (), get_user_directory, "getUserDirectory", \ - "(Landroid/net/Uri;)Ljava/lang/String;") \ + "()Ljava/lang/String;") \ V(CopyFile, bool, \ (const std::string& source, const std::string& destination_path, \ const std::string& destination_filename), \