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)
|
.setTitle(R.string.select_citra_user_folder)
|
||||||
.setMessage(R.string.selecting_user_directory_without_write_permissions)
|
.setMessage(R.string.selecting_user_directory_without_write_permissions)
|
||||||
.setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
|
.setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
|
||||||
mainActivity?.openCitraDirectory?.launch(null)
|
mainActivity?.openCitraDirectoryLostPermission?.launch(null)
|
||||||
}
|
}
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -478,7 +478,7 @@ class SetupFragment : Fragment() {
|
|||||||
return@registerForActivityResult
|
return@registerForActivityResult
|
||||||
}
|
}
|
||||||
|
|
||||||
CitraDirectoryHelper(requireActivity()).showCitraDirectoryDialog(result, pageButtonCallback, checkForButtonState)
|
CitraDirectoryHelper(requireActivity(), true).showCitraDirectoryDialog(result, pageButtonCallback, checkForButtonState)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val getGamesDirectory =
|
private val getGamesDirectory =
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import android.view.ViewGroup.MarginLayoutParams
|
|||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.view.animation.PathInterpolator
|
import android.view.animation.PathInterpolator
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
@ -307,16 +308,22 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
|
|||||||
windowInsets
|
windowInsets
|
||||||
}
|
}
|
||||||
|
|
||||||
val openCitraDirectory = registerForActivityResult(
|
private fun createOpenCitraDirectoryLauncher(
|
||||||
ActivityResultContracts.OpenDocumentTree()
|
permissionsLost: Boolean
|
||||||
) { result: Uri? ->
|
): ActivityResultLauncher<Uri?> {
|
||||||
if (result == null) {
|
return registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { result: Uri? ->
|
||||||
return@registerForActivityResult
|
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(
|
val ciaFileInstaller = registerForActivityResult(
|
||||||
OpenFileResultContract()
|
OpenFileResultContract()
|
||||||
) { result: Intent? ->
|
) { result: Intent? ->
|
||||||
|
|||||||
@ -16,7 +16,7 @@ import org.citra.citra_emu.viewmodel.HomeViewModel
|
|||||||
/**
|
/**
|
||||||
* Citra directory initialization ui flow controller.
|
* 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) {
|
fun showCitraDirectoryDialog(result: Uri, callback: SetupCallback? = null, buttonState: () -> Unit) {
|
||||||
val citraDirectoryDialog = CitraDirectoryDialogFragment.newInstance(
|
val citraDirectoryDialog = CitraDirectoryDialogFragment.newInstance(
|
||||||
fragmentActivity,
|
fragmentActivity,
|
||||||
@ -24,7 +24,7 @@ class CitraDirectoryHelper(private val fragmentActivity: FragmentActivity) {
|
|||||||
CitraDirectoryDialogFragment.Listener { moveData: Boolean, path: Uri ->
|
CitraDirectoryDialogFragment.Listener { moveData: Boolean, path: Uri ->
|
||||||
val previous = PermissionsHandler.citraDirectory
|
val previous = PermissionsHandler.citraDirectory
|
||||||
// Do noting if user select the previous path.
|
// Do noting if user select the previous path.
|
||||||
if (path == previous) {
|
if (path == previous && !lostPermission) {
|
||||||
return@Listener
|
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
|
// Licensed under GPLv2 or any later version
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
@ -34,7 +34,8 @@ object PermissionsHandler {
|
|||||||
|
|
||||||
context.contentResolver.releasePersistableUriPermission(uri, takeFlags)
|
context.contentResolver.releasePersistableUriPermission(uri, takeFlags)
|
||||||
} catch (e: Exception) {
|
} 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
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user