Преглед на файлове

android: Save global settings in onStop

t895 преди 2 години
родител
ревизия
7dddf5cb3c

+ 0 - 24
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt

@@ -3,33 +3,9 @@
 
 package org.yuzu.yuzu_emu.features.settings.model
 
-import android.text.TextUtils
-import android.widget.Toast
 import org.yuzu.yuzu_emu.R
-import org.yuzu.yuzu_emu.YuzuApplication
-import org.yuzu.yuzu_emu.utils.NativeConfig
 
 object Settings {
-    private val context get() = YuzuApplication.appContext
-
-    fun saveSettings(gameId: String = "") {
-        if (TextUtils.isEmpty(gameId)) {
-            Toast.makeText(
-                context,
-                context.getString(R.string.ini_saved),
-                Toast.LENGTH_SHORT
-            ).show()
-            NativeConfig.saveSettings()
-        } else {
-            // TODO: Save custom game settings
-            Toast.makeText(
-                context,
-                context.getString(R.string.gameid_saved, gameId),
-                Toast.LENGTH_SHORT
-            ).show()
-        }
-    }
-
     enum class Category {
         Android,
         Audio,

+ 4 - 26
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt

@@ -19,12 +19,13 @@ import androidx.lifecycle.repeatOnLifecycle
 import androidx.navigation.fragment.NavHostFragment
 import androidx.navigation.navArgs
 import com.google.android.material.color.MaterialColors
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.launch
 import java.io.IOException
 import org.yuzu.yuzu_emu.R
 import org.yuzu.yuzu_emu.databinding.ActivitySettingsBinding
-import org.yuzu.yuzu_emu.features.settings.model.Settings
 import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
 import org.yuzu.yuzu_emu.fragments.ResetSettingsDialogFragment
 import org.yuzu.yuzu_emu.model.SettingsViewModel
@@ -53,10 +54,6 @@ class SettingsActivity : AppCompatActivity() {
 
         WindowCompat.setDecorFitsSystemWindows(window, false)
 
-        if (savedInstanceState != null) {
-            settingsViewModel.shouldSave = savedInstanceState.getBoolean(KEY_SHOULD_SAVE)
-        }
-
         if (InsetsHelper.getSystemGestureType(applicationContext) !=
             InsetsHelper.GESTURE_NAVIGATION
         ) {
@@ -127,12 +124,6 @@ class SettingsActivity : AppCompatActivity() {
         }
     }
 
-    override fun onSaveInstanceState(outState: Bundle) {
-        // Critical: If super method is not called, rotations will be busted.
-        super.onSaveInstanceState(outState)
-        outState.putBoolean(KEY_SHOULD_SAVE, settingsViewModel.shouldSave)
-    }
-
     override fun onStart() {
         super.onStart()
         // TODO: Load custom settings contextually
@@ -141,16 +132,10 @@ class SettingsActivity : AppCompatActivity() {
         }
     }
 
-    /**
-     * If this is called, the user has left the settings screen (potentially through the
-     * home button) and will expect their changes to be persisted. So we kick off an
-     * IntentService which will do so on a background thread.
-     */
     override fun onStop() {
         super.onStop()
-        if (isFinishing && settingsViewModel.shouldSave) {
-            Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI...")
-            Settings.saveSettings()
+        CoroutineScope(Dispatchers.IO).launch {
+            NativeConfig.saveSettings()
         }
     }
 
@@ -160,9 +145,6 @@ class SettingsActivity : AppCompatActivity() {
     }
 
     fun onSettingsReset() {
-        // Prevents saving to a non-existent settings file
-        settingsViewModel.shouldSave = false
-
         // Delete settings file because the user may have changed values that do not exist in the UI
         NativeConfig.unloadConfig()
         val settingsFile = SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_CONFIG)
@@ -194,8 +176,4 @@ class SettingsActivity : AppCompatActivity() {
             windowInsets
         }
     }
-
-    companion object {
-        private const val KEY_SHOULD_SAVE = "should_save"
-    }
 }

+ 0 - 2
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt

@@ -105,7 +105,6 @@ class SettingsAdapter(
     fun onBooleanClick(item: SwitchSetting, checked: Boolean) {
         item.checked = checked
         settingsViewModel.setShouldReloadSettingsList(true)
-        settingsViewModel.shouldSave = true
     }
 
     fun onSingleChoiceClick(item: SingleChoiceSetting, position: Int) {
@@ -161,7 +160,6 @@ class SettingsAdapter(
             epochTime += timePicker.hour.toLong() * 60 * 60
             epochTime += timePicker.minute.toLong() * 60
             if (item.value != epochTime) {
-                settingsViewModel.shouldSave = true
                 notifyItemChanged(position)
                 item.value = epochTime
             }

+ 0 - 8
src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SettingsDialogFragment.kt

@@ -52,7 +52,6 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener
                     .setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
                         settingsViewModel.clickedItem!!.setting.reset()
                         settingsViewModel.setAdapterItemChanged(position)
-                        settingsViewModel.shouldSave = true
                     }
                     .setNegativeButton(android.R.string.cancel, null)
                     .create()
@@ -137,24 +136,17 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener
             is SingleChoiceSetting -> {
                 val scSetting = settingsViewModel.clickedItem as SingleChoiceSetting
                 val value = getValueForSingleChoiceSelection(scSetting, which)
-                if (scSetting.selectedValue != value) {
-                    settingsViewModel.shouldSave = true
-                }
                 scSetting.selectedValue = value
             }
 
             is StringSingleChoiceSetting -> {
                 val scSetting = settingsViewModel.clickedItem as StringSingleChoiceSetting
                 val value = scSetting.getValueAt(which)
-                if (scSetting.selectedValue != value) settingsViewModel.shouldSave = true
                 scSetting.selectedValue = value
             }
 
             is SliderSetting -> {
                 val sliderSetting = settingsViewModel.clickedItem as SliderSetting
-                if (sliderSetting.selectedValue != settingsViewModel.sliderProgress.value) {
-                    settingsViewModel.shouldSave = true
-                }
                 sliderSetting.selectedValue = settingsViewModel.sliderProgress.value
             }
         }

+ 0 - 3
src/android/app/src/main/java/org/yuzu/yuzu_emu/model/SettingsViewModel.kt

@@ -13,8 +13,6 @@ import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem
 class SettingsViewModel : ViewModel() {
     var game: Game? = null
 
-    var shouldSave = false
-
     var clickedItem: SettingsItem? = null
 
     val shouldRecreate: StateFlow<Boolean> get() = _shouldRecreate
@@ -73,6 +71,5 @@ class SettingsViewModel : ViewModel() {
 
     fun clear() {
         game = null
-        shouldSave = false
     }
 }

+ 7 - 0
src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt

@@ -253,6 +253,13 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
         super.onResume()
     }
 
+    override fun onStop() {
+        super.onStop()
+        CoroutineScope(Dispatchers.IO).launch {
+            NativeConfig.saveSettings()
+        }
+    }
+
     override fun onDestroy() {
         EmulationActivity.stopForegroundService(this)
         super.onDestroy()