diff --git a/app/src/main/java/emu/skyline/adapter/controller/ControllerCheckBoxViewItem.kt b/app/src/main/java/emu/skyline/adapter/controller/ControllerCheckBoxViewItem.kt index 0e0738ab..9d29c05c 100644 --- a/app/src/main/java/emu/skyline/adapter/controller/ControllerCheckBoxViewItem.kt +++ b/app/src/main/java/emu/skyline/adapter/controller/ControllerCheckBoxViewItem.kt @@ -29,6 +29,7 @@ class ControllerCheckBoxViewItem(var title : String, var summary : String, var c binding.checkbox.isChecked = checked binding.root.setOnClickListener { checked = !checked + binding.checkbox.isChecked = checked onCheckedChange.invoke(this, position) } } diff --git a/app/src/main/java/emu/skyline/input/ControllerActivity.kt b/app/src/main/java/emu/skyline/input/ControllerActivity.kt index 99444175..3c158a9e 100644 --- a/app/src/main/java/emu/skyline/input/ControllerActivity.kt +++ b/app/src/main/java/emu/skyline/input/ControllerActivity.kt @@ -13,6 +13,7 @@ import android.view.KeyEvent import android.view.ViewTreeObserver import androidx.appcompat.app.AppCompatActivity import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.core.content.res.use import androidx.core.view.WindowCompat import androidx.core.view.marginTop import androidx.recyclerview.widget.DividerItemDecoration @@ -91,17 +92,14 @@ class ControllerActivity : AppCompatActivity() { items.add(ControllerCheckBoxViewItem(getString(R.string.osc_enable), oscSummary.invoke(appSettings.onScreenControl), appSettings.onScreenControl) { item, position -> item.summary = oscSummary.invoke(item.checked) appSettings.onScreenControl = item.checked - adapter.notifyItemChanged(position) }) items.add(ControllerCheckBoxViewItem(getString(R.string.osc_feedback), getString(R.string.osc_feedback_description), appSettings.onScreenControlFeedback) { item, position -> appSettings.onScreenControlFeedback = item.checked - adapter.notifyItemChanged(position) }) items.add(ControllerCheckBoxViewItem(getString(R.string.osc_recenter_sticks), "", appSettings.onScreenControlRecenterSticks) { item, position -> appSettings.onScreenControlRecenterSticks = item.checked - adapter.notifyItemChanged(position) }) items.add(ControllerViewItem(content = getString(R.string.osc_edit), onClick = { diff --git a/app/src/main/java/emu/skyline/preference/RefreshCheckBoxPreference.kt b/app/src/main/java/emu/skyline/preference/RefreshCheckBoxPreference.kt index 7a192f45..3ed88533 100644 --- a/app/src/main/java/emu/skyline/preference/RefreshCheckBoxPreference.kt +++ b/app/src/main/java/emu/skyline/preference/RefreshCheckBoxPreference.kt @@ -16,7 +16,7 @@ import emu.skyline.di.getSettings */ class RefreshCheckBoxPreference @JvmOverloads constructor(context : Context, attrs : AttributeSet? = null, defStyleAttr : Int = R.attr.checkBoxPreferenceStyle) : CheckBoxPreference(context, attrs, defStyleAttr) { override fun onClick() { - context?.getSettings()?.refreshRequired = true super.onClick() + context.getSettings().refreshRequired = true } } diff --git a/app/src/main/java/emu/skyline/preference/RefreshSwitchPreferenceCompat.kt b/app/src/main/java/emu/skyline/preference/RefreshSwitchPreferenceCompat.kt new file mode 100644 index 00000000..70c33f5a --- /dev/null +++ b/app/src/main/java/emu/skyline/preference/RefreshSwitchPreferenceCompat.kt @@ -0,0 +1,22 @@ +/* + * SPDX-License-Identifier: MPL-2.0 + * Copyright © 2023 Skyline Team and Contributors (https://github.com/skyline-emu/) + */ + +package emu.skyline.preference + +import android.content.Context +import android.util.AttributeSet +import androidx.preference.R +import androidx.preference.SwitchPreferenceCompat +import emu.skyline.di.getSettings + +/** + * This preference is used with switches that need to refresh the main activity when changed + */ +class RefreshSwitchPreferenceCompat @JvmOverloads constructor(context : Context, attrs : AttributeSet? = null, defStyleAttr : Int = R.attr.switchPreferenceCompatStyle) : SwitchPreferenceCompat(context, attrs, defStyleAttr) { + override fun onClick() { + super.onClick() + context.getSettings().refreshRequired = true + } +} diff --git a/app/src/main/java/emu/skyline/settings/GameSettingsFragment.kt b/app/src/main/java/emu/skyline/settings/GameSettingsFragment.kt index 86352962..c10237d7 100644 --- a/app/src/main/java/emu/skyline/settings/GameSettingsFragment.kt +++ b/app/src/main/java/emu/skyline/settings/GameSettingsFragment.kt @@ -56,8 +56,8 @@ class GameSettingsFragment : PreferenceFragmentCompat() { ).forEach { it?.dependency = "use_custom_settings" } // Uncheck `disable_frame_throttling` if `force_triple_buffering` gets disabled - val disableFrameThrottlingPref = findPreference("disable_frame_throttling")!! - findPreference("force_triple_buffering")?.setOnPreferenceChangeListener { _, newValue -> + val disableFrameThrottlingPref = findPreference("disable_frame_throttling")!! + findPreference("force_triple_buffering")?.setOnPreferenceChangeListener { _, newValue -> if (newValue == false) disableFrameThrottlingPref.isChecked = false true @@ -69,7 +69,7 @@ class GameSettingsFragment : PreferenceFragmentCompat() { findPreference("validation_layer")?.isVisible = true if (!GpuDriverHelper.supportsForceMaxGpuClocks()) { - val forceMaxGpuClocksPref = findPreference("force_max_gpu_clocks")!! + val forceMaxGpuClocksPref = findPreference("force_max_gpu_clocks")!! forceMaxGpuClocksPref.isSelectable = false forceMaxGpuClocksPref.isChecked = false forceMaxGpuClocksPref.summary = context!!.getString(R.string.force_max_gpu_clocks_desc_unsupported) diff --git a/app/src/main/java/emu/skyline/settings/GlobalSettingsFragment.kt b/app/src/main/java/emu/skyline/settings/GlobalSettingsFragment.kt index 2468a6f4..f865d229 100644 --- a/app/src/main/java/emu/skyline/settings/GlobalSettingsFragment.kt +++ b/app/src/main/java/emu/skyline/settings/GlobalSettingsFragment.kt @@ -7,10 +7,10 @@ package emu.skyline.settings import android.os.Bundle import android.view.View -import androidx.preference.CheckBoxPreference import androidx.preference.Preference import androidx.preference.PreferenceCategory import androidx.preference.PreferenceFragmentCompat +import androidx.preference.TwoStatePreference import emu.skyline.BuildConfig import emu.skyline.R import emu.skyline.preference.IntegerListPreference @@ -41,8 +41,8 @@ class GlobalSettingsFragment : PreferenceFragmentCompat() { addPreferencesFromResource(R.xml.credits_preferences) // Uncheck `disable_frame_throttling` if `force_triple_buffering` gets disabled - val disableFrameThrottlingPref = findPreference("disable_frame_throttling")!! - findPreference("force_triple_buffering")?.setOnPreferenceChangeListener { _, newValue -> + val disableFrameThrottlingPref = findPreference("disable_frame_throttling")!! + findPreference("force_triple_buffering")?.setOnPreferenceChangeListener { _, newValue -> if (newValue == false) disableFrameThrottlingPref.isChecked = false true @@ -54,7 +54,7 @@ class GlobalSettingsFragment : PreferenceFragmentCompat() { findPreference("validation_layer")?.isVisible = true if (!GpuDriverHelper.supportsForceMaxGpuClocks()) { - val forceMaxGpuClocksPref = findPreference("force_max_gpu_clocks")!! + val forceMaxGpuClocksPref = findPreference("force_max_gpu_clocks")!! forceMaxGpuClocksPref.isSelectable = false forceMaxGpuClocksPref.isChecked = false forceMaxGpuClocksPref.summary = context!!.getString(R.string.force_max_gpu_clocks_desc_unsupported) diff --git a/app/src/main/res/layout/controller_checkbox_item.xml b/app/src/main/res/layout/controller_checkbox_item.xml index 528653f8..3763f5a0 100644 --- a/app/src/main/res/layout/controller_checkbox_item.xml +++ b/app/src/main/res/layout/controller_checkbox_item.xml @@ -38,12 +38,13 @@ tools:text="Summary" /> - diff --git a/app/src/main/res/layout/preference_widget_material_switch.xml b/app/src/main/res/layout/preference_widget_material_switch.xml new file mode 100644 index 00000000..a18e2a48 --- /dev/null +++ b/app/src/main/res/layout/preference_widget_material_switch.xml @@ -0,0 +1,8 @@ + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 6325839c..e0100a19 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -11,4 +11,9 @@ + + + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index d2328f0a..f8806859 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -39,6 +39,8 @@ @style/ThemeOverlay.App.MaterialAlertDialog ?attr/colorPrimary + + @style/App.Preference.SwitchPreferenceCompat.Material3