mirror of
https://github.com/azahar-emu/azahar
synced 2025-11-06 23:19:57 +01:00
android: Fix crash when user directory permissions are lost (#1110)
* android: Fix crash when user directory permissions are lost --------- Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
This commit is contained in:
parent
2acbcd333c
commit
fe7fe3ed24
@ -27,7 +27,7 @@ class SelectUserDirectoryDialogFragment : DialogFragment() {
|
||||
.setTitle(R.string.select_citra_user_folder)
|
||||
.setMessage(R.string.selecting_user_directory_without_write_permissions)
|
||||
.setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
|
||||
mainActivity?.openCitraDirectory?.launch(null)
|
||||
mainActivity?.openCitraDirectoryLostPermission?.launch(null)
|
||||
}
|
||||
.show()
|
||||
}
|
||||
|
||||
@ -478,7 +478,7 @@ class SetupFragment : Fragment() {
|
||||
return@registerForActivityResult
|
||||
}
|
||||
|
||||
CitraDirectoryHelper(requireActivity()).showCitraDirectoryDialog(result, pageButtonCallback, checkForButtonState)
|
||||
CitraDirectoryHelper(requireActivity(), true).showCitraDirectoryDialog(result, pageButtonCallback, checkForButtonState)
|
||||
}
|
||||
|
||||
private val getGamesDirectory =
|
||||
|
||||
@ -12,6 +12,7 @@ import android.view.ViewGroup.MarginLayoutParams
|
||||
import android.view.WindowManager
|
||||
import android.view.animation.PathInterpolator
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
@ -307,15 +308,21 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
|
||||
windowInsets
|
||||
}
|
||||
|
||||
val openCitraDirectory = registerForActivityResult(
|
||||
ActivityResultContracts.OpenDocumentTree()
|
||||
) { result: Uri? ->
|
||||
private fun createOpenCitraDirectoryLauncher(
|
||||
permissionsLost: Boolean
|
||||
): ActivityResultLauncher<Uri?> {
|
||||
return registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { result: Uri? ->
|
||||
if (result == null) {
|
||||
return@registerForActivityResult
|
||||
}
|
||||
|
||||
CitraDirectoryHelper(this@MainActivity).showCitraDirectoryDialog(result, buttonState = {})
|
||||
CitraDirectoryHelper(this@MainActivity, permissionsLost)
|
||||
.showCitraDirectoryDialog(result, buttonState = {})
|
||||
}
|
||||
}
|
||||
|
||||
val openCitraDirectory = createOpenCitraDirectoryLauncher(permissionsLost = false)
|
||||
val openCitraDirectoryLostPermission = createOpenCitraDirectoryLauncher(permissionsLost = true)
|
||||
|
||||
val ciaFileInstaller = registerForActivityResult(
|
||||
OpenFileResultContract()
|
||||
|
||||
@ -16,7 +16,7 @@ import org.citra.citra_emu.viewmodel.HomeViewModel
|
||||
/**
|
||||
* Citra directory initialization ui flow controller.
|
||||
*/
|
||||
class CitraDirectoryHelper(private val fragmentActivity: FragmentActivity) {
|
||||
class CitraDirectoryHelper(private val fragmentActivity: FragmentActivity, private val lostPermission: Boolean) {
|
||||
fun showCitraDirectoryDialog(result: Uri, callback: SetupCallback? = null, buttonState: () -> Unit) {
|
||||
val citraDirectoryDialog = CitraDirectoryDialogFragment.newInstance(
|
||||
fragmentActivity,
|
||||
@ -24,7 +24,7 @@ class CitraDirectoryHelper(private val fragmentActivity: FragmentActivity) {
|
||||
CitraDirectoryDialogFragment.Listener { moveData: Boolean, path: Uri ->
|
||||
val previous = PermissionsHandler.citraDirectory
|
||||
// Do noting if user select the previous path.
|
||||
if (path == previous) {
|
||||
if (path == previous && !lostPermission) {
|
||||
return@Listener
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// Copyright 2023 Citra Emulator Project
|
||||
// Copyright Citra Emulator Project / Azahar Emulator Project
|
||||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
@ -34,7 +34,8 @@ object PermissionsHandler {
|
||||
|
||||
context.contentResolver.releasePersistableUriPermission(uri, takeFlags)
|
||||
} catch (e: Exception) {
|
||||
Log.error("[PermissionsHandler]: Cannot check citra data directory permission, error: " + e.message)
|
||||
// Do not use native library logging, as the native library may not be loaded yet
|
||||
android.util.Log.e("PermissionsHandler", "Cannot check citra data directory permission, error: ${e.message}")
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user