mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-24 19:57:05 +02:00
[android,ui] chore: back action behavior (a16 hypoeros) fix attempt 1
This commit is contained in:
parent
a1b50e9339
commit
6043dbd690
3 changed files with 29 additions and 4 deletions
|
|
@ -108,9 +108,10 @@ class SettingsActivity : AppCompatActivity() {
|
||||||
fun navigateBack() {
|
fun navigateBack() {
|
||||||
val navHostFragment =
|
val navHostFragment =
|
||||||
supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
|
supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
|
||||||
if (navHostFragment.childFragmentManager.backStackEntryCount > 0) {
|
val navController = navHostFragment.navController
|
||||||
navHostFragment.navController.popBackStack()
|
val popped = navController.popBackStack()
|
||||||
} else {
|
|
||||||
|
if (!popped) {
|
||||||
finishWithFragmentLikeAnimation()
|
finishWithFragmentLikeAnimation()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -879,7 +879,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
||||||
setInsets()
|
setInsets()
|
||||||
|
|
||||||
requireActivity().onBackPressedDispatcher.addCallback(
|
requireActivity().onBackPressedDispatcher.addCallback(
|
||||||
requireActivity(),
|
viewLifecycleOwner,
|
||||||
object : OnBackPressedCallback(true) {
|
object : OnBackPressedCallback(true) {
|
||||||
override fun handleOnBackPressed() {
|
override fun handleOnBackPressed() {
|
||||||
if (!NativeLibrary.isRunning()) {
|
if (!NativeLibrary.isRunning()) {
|
||||||
|
|
|
||||||
|
|
@ -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.OnBackPressedCallback
|
||||||
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
|
||||||
|
|
@ -153,6 +154,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
|
||||||
val navHostFragment =
|
val navHostFragment =
|
||||||
supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
|
supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
|
||||||
setUpNavigation(navHostFragment.navController)
|
setUpNavigation(navHostFragment.navController)
|
||||||
|
installBackPressPolicy(navHostFragment.navController)
|
||||||
|
|
||||||
homeViewModel.statusBarShadeVisible.collect(this) { showStatusBarShade(it) }
|
homeViewModel.statusBarShadeVisible.collect(this) { showStatusBarShade(it) }
|
||||||
homeViewModel.contentToInstall.collect(
|
homeViewModel.contentToInstall.collect(
|
||||||
|
|
@ -330,6 +332,28 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun installBackPressPolicy(navController: NavController) {
|
||||||
|
onBackPressedDispatcher.addCallback(
|
||||||
|
this,
|
||||||
|
object : OnBackPressedCallback(true) {
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
|
val isOnGamesScreen = navController.currentDestination?.id == R.id.gamesFragment
|
||||||
|
if (isOnGamesScreen) {
|
||||||
|
// Allow native OS/app exit behavior only from the games root screen.
|
||||||
|
isEnabled = false
|
||||||
|
onBackPressedDispatcher.onBackPressed()
|
||||||
|
isEnabled = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!navController.popBackStack()) {
|
||||||
|
navController.navigate(R.id.gamesFragment)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun showStatusBarShade(visible: Boolean) {
|
private fun showStatusBarShade(visible: Boolean) {
|
||||||
binding.statusBarShade.animate().apply {
|
binding.statusBarShade.animate().apply {
|
||||||
if (visible) {
|
if (visible) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue