From 48c506682d44081704a5275a282564121a4e3fee Mon Sep 17 00:00:00 2001 From: Charles Lombardo Date: Wed, 26 Apr 2023 01:52:26 -0400 Subject: [PATCH] android: Fix setup rotation bug If you rotated the device at the "Add Games" screen the buttons would disappear until you trigged them from the beginning page swap. Now button state is saved across recreation. --- .../yuzu/yuzu_emu/fragments/SetupFragment.kt | 28 ++++++++++++++++--- .../main/res/layout-w600dp/fragment_setup.xml | 2 ++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SetupFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SetupFragment.kt index 35c84699bb..7c8a37855e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SetupFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SetupFragment.kt @@ -13,6 +13,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.core.view.isVisible +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.findNavController @@ -36,6 +38,11 @@ class SetupFragment : Fragment() { private lateinit var mainActivity: MainActivity + companion object { + const val KEY_NEXT_VISIBILITY = "NextButtonVisibility" + const val KEY_BACK_VISIBILITY = "BackButtonVisibility" + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) exitTransition = MaterialFadeThrough() @@ -134,14 +141,27 @@ class SetupFragment : Fragment() { binding.buttonNext.setOnClickListener { pageForward() } binding.buttonBack.setOnClickListener { pageBackward() } - if (binding.viewPager2.currentItem == 0) { - binding.buttonNext.visibility = View.INVISIBLE - binding.buttonBack.visibility = View.INVISIBLE + if (savedInstanceState != null) { + val nextIsVisible = savedInstanceState.getBoolean(KEY_NEXT_VISIBILITY) + val backIsVisible = savedInstanceState.getBoolean(KEY_BACK_VISIBILITY) + + if (nextIsVisible) { + binding.buttonNext.visibility = View.VISIBLE + } + if (backIsVisible) { + binding.buttonBack.visibility = View.VISIBLE + } } setInsets() } + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + outState.putBoolean(KEY_NEXT_VISIBILITY, binding.buttonNext.isVisible) + outState.putBoolean(KEY_BACK_VISIBILITY, binding.buttonBack.isVisible) + } + override fun onDestroyView() { super.onDestroyView() _binding = null @@ -190,7 +210,7 @@ class SetupFragment : Fragment() { } private fun setInsets() = - ViewCompat.setOnApplyWindowInsetsListener(binding.setupRoot) { view: View, windowInsets: WindowInsetsCompat -> + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view: View, windowInsets: WindowInsetsCompat -> val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) view.setPadding( insets.left, diff --git a/src/android/app/src/main/res/layout-w600dp/fragment_setup.xml b/src/android/app/src/main/res/layout-w600dp/fragment_setup.xml index e05af9bdd6..cbe631d888 100644 --- a/src/android/app/src/main/res/layout-w600dp/fragment_setup.xml +++ b/src/android/app/src/main/res/layout-w600dp/fragment_setup.xml @@ -22,6 +22,7 @@ android:layout_height="wrap_content" android:layout_margin="16dp" android:text="@string/next" + android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> @@ -32,6 +33,7 @@ android:layout_height="wrap_content" android:layout_margin="16dp" android:text="@string/back" + android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" />