Просмотр исходного кода

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.
Charles Lombardo 3 лет назад
Родитель
Сommit
48c506682d

+ 24 - 4
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.content.ContextCompat
 import androidx.core.view.ViewCompat
 import androidx.core.view.ViewCompat
 import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.WindowInsetsCompat
+import androidx.core.view.isVisible
+import androidx.core.view.updatePadding
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
 import androidx.fragment.app.activityViewModels
 import androidx.navigation.findNavController
 import androidx.navigation.findNavController
@@ -36,6 +38,11 @@ class SetupFragment : Fragment() {
 
 
     private lateinit var mainActivity: MainActivity
     private lateinit var mainActivity: MainActivity
 
 
+    companion object {
+        const val KEY_NEXT_VISIBILITY = "NextButtonVisibility"
+        const val KEY_BACK_VISIBILITY = "BackButtonVisibility"
+    }
+
     override fun onCreate(savedInstanceState: Bundle?) {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         super.onCreate(savedInstanceState)
         exitTransition = MaterialFadeThrough()
         exitTransition = MaterialFadeThrough()
@@ -134,14 +141,27 @@ class SetupFragment : Fragment() {
         binding.buttonNext.setOnClickListener { pageForward() }
         binding.buttonNext.setOnClickListener { pageForward() }
         binding.buttonBack.setOnClickListener { pageBackward() }
         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()
         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() {
     override fun onDestroyView() {
         super.onDestroyView()
         super.onDestroyView()
         _binding = null
         _binding = null
@@ -190,7 +210,7 @@ class SetupFragment : Fragment() {
     }
     }
 
 
     private fun setInsets() =
     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())
             val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
             view.setPadding(
             view.setPadding(
                 insets.left,
                 insets.left,

+ 2 - 0
src/android/app/src/main/res/layout-w600dp/fragment_setup.xml

@@ -22,6 +22,7 @@
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:layout_margin="16dp"
         android:layout_margin="16dp"
         android:text="@string/next"
         android:text="@string/next"
+        android:visibility="invisible"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent" />
         app:layout_constraintEnd_toEndOf="parent" />
 
 
@@ -32,6 +33,7 @@
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:layout_margin="16dp"
         android:layout_margin="16dp"
         android:text="@string/back"
         android:text="@string/back"
+        android:visibility="invisible"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent" />
         app:layout_constraintStart_toStartOf="parent" />