diff options
Diffstat (limited to 'src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt')
-rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt | 96 |
1 files changed, 50 insertions, 46 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt index d7b38f62d..510b2b5eb 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt @@ -7,7 +7,6 @@ import android.annotation.SuppressLint import android.app.AlertDialog import android.content.Context import android.content.DialogInterface -import android.content.SharedPreferences import android.content.pm.ActivityInfo import android.content.res.Configuration import android.net.Uri @@ -33,7 +32,6 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.findNavController import androidx.navigation.fragment.navArgs -import androidx.preference.PreferenceManager import androidx.window.layout.FoldingFeature import androidx.window.layout.WindowInfoTracker import androidx.window.layout.WindowLayoutInfo @@ -46,22 +44,22 @@ import kotlinx.coroutines.launch import org.yuzu.yuzu_emu.HomeNavigationDirections import org.yuzu.yuzu_emu.NativeLibrary import org.yuzu.yuzu_emu.R -import org.yuzu.yuzu_emu.YuzuApplication import org.yuzu.yuzu_emu.activities.EmulationActivity import org.yuzu.yuzu_emu.databinding.DialogOverlayAdjustBinding import org.yuzu.yuzu_emu.databinding.FragmentEmulationBinding +import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting import org.yuzu.yuzu_emu.features.settings.model.IntSetting import org.yuzu.yuzu_emu.features.settings.model.Settings import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile import org.yuzu.yuzu_emu.model.DriverViewModel import org.yuzu.yuzu_emu.model.Game import org.yuzu.yuzu_emu.model.EmulationViewModel -import org.yuzu.yuzu_emu.overlay.InputOverlay +import org.yuzu.yuzu_emu.overlay.model.OverlayControl +import org.yuzu.yuzu_emu.overlay.model.OverlayLayout import org.yuzu.yuzu_emu.utils.* import java.lang.NullPointerException class EmulationFragment : Fragment(), SurfaceHolder.Callback { - private lateinit var preferences: SharedPreferences private lateinit var emulationState: EmulationState private var emulationActivity: EmulationActivity? = null private var perfStatsUpdater: (() -> Unit)? = null @@ -141,7 +139,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { // So this fragment doesn't restart on configuration changes; i.e. rotation. retainInstance = true - preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext) emulationState = EmulationState(game.path) } @@ -382,24 +379,25 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } updateScreenLayout() + val showInputOverlay = BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean() if (emulationActivity?.isInPictureInPictureMode == true) { if (binding.drawerLayout.isOpen) { binding.drawerLayout.close() } - if (EmulationMenuSettings.showOverlay) { + if (showInputOverlay) { binding.surfaceInputOverlay.visibility = View.INVISIBLE } } else { - if (EmulationMenuSettings.showOverlay && emulationViewModel.emulationStarted.value) { + if (showInputOverlay && emulationViewModel.emulationStarted.value) { binding.surfaceInputOverlay.visibility = View.VISIBLE } else { binding.surfaceInputOverlay.visibility = View.INVISIBLE } if (!isInFoldableLayout) { if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { - binding.surfaceInputOverlay.layout = InputOverlay.PORTRAIT + binding.surfaceInputOverlay.layout = OverlayLayout.Portrait } else { - binding.surfaceInputOverlay.layout = InputOverlay.LANDSCAPE + binding.surfaceInputOverlay.layout = OverlayLayout.Landscape } } } @@ -423,17 +421,15 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } private fun resetInputOverlay() { - preferences.edit() - .remove(Settings.PREF_CONTROL_SCALE) - .remove(Settings.PREF_CONTROL_OPACITY) - .apply() + IntSetting.OVERLAY_SCALE.reset() + IntSetting.OVERLAY_OPACITY.reset() binding.surfaceInputOverlay.post { binding.surfaceInputOverlay.resetLayoutVisibilityAndPlacement() } } private fun updateShowFpsOverlay() { - if (EmulationMenuSettings.showFps) { + if (BooleanSetting.SHOW_PERFORMANCE_OVERLAY.getBoolean()) { val SYSTEM_FPS = 0 val FPS = 1 val FRAMETIME = 2 @@ -496,7 +492,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { binding.inGameMenu.layoutParams.height = it.bounds.bottom isInFoldableLayout = true - binding.surfaceInputOverlay.layout = InputOverlay.FOLDABLE + binding.surfaceInputOverlay.layout = OverlayLayout.Foldable } } it.isSeparating @@ -535,18 +531,22 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { popup.menuInflater.inflate(R.menu.menu_overlay_options, popup.menu) popup.menu.apply { - findItem(R.id.menu_toggle_fps).isChecked = EmulationMenuSettings.showFps - findItem(R.id.menu_rel_stick_center).isChecked = EmulationMenuSettings.joystickRelCenter - findItem(R.id.menu_dpad_slide).isChecked = EmulationMenuSettings.dpadSlide - findItem(R.id.menu_show_overlay).isChecked = EmulationMenuSettings.showOverlay - findItem(R.id.menu_haptics).isChecked = EmulationMenuSettings.hapticFeedback + findItem(R.id.menu_toggle_fps).isChecked = + BooleanSetting.SHOW_PERFORMANCE_OVERLAY.getBoolean() + findItem(R.id.menu_rel_stick_center).isChecked = + BooleanSetting.JOYSTICK_REL_CENTER.getBoolean() + findItem(R.id.menu_dpad_slide).isChecked = BooleanSetting.DPAD_SLIDE.getBoolean() + findItem(R.id.menu_show_overlay).isChecked = + BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean() + findItem(R.id.menu_haptics).isChecked = BooleanSetting.HAPTIC_FEEDBACK.getBoolean() + findItem(R.id.menu_touchscreen).isChecked = BooleanSetting.TOUCHSCREEN.getBoolean() } popup.setOnMenuItemClickListener { when (it.itemId) { R.id.menu_toggle_fps -> { it.isChecked = !it.isChecked - EmulationMenuSettings.showFps = it.isChecked + BooleanSetting.SHOW_PERFORMANCE_OVERLAY.setBoolean(it.isChecked) updateShowFpsOverlay() true } @@ -564,11 +564,12 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } R.id.menu_toggle_controls -> { - val preferences = - PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext) - val optionsArray = BooleanArray(Settings.overlayPreferences.size) - Settings.overlayPreferences.forEachIndexed { i, _ -> - optionsArray[i] = preferences.getBoolean("buttonToggle$i", i < 15) + val overlayControlData = NativeConfig.getOverlayControlData() + val optionsArray = BooleanArray(overlayControlData.size) + overlayControlData.forEachIndexed { i, _ -> + optionsArray[i] = overlayControlData.firstOrNull { data -> + OverlayControl.entries[i].id == data.id + }?.enabled == true } val dialog = MaterialAlertDialogBuilder(requireContext()) @@ -577,11 +578,13 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { R.array.gamepadButtons, optionsArray ) { _, indexSelected, isChecked -> - preferences.edit() - .putBoolean("buttonToggle$indexSelected", isChecked) - .apply() + overlayControlData.firstOrNull { data -> + OverlayControl.entries[indexSelected].id == data.id + }?.enabled = isChecked } .setPositiveButton(android.R.string.ok) { _, _ -> + NativeConfig.setOverlayControlData(overlayControlData) + NativeConfig.saveGlobalConfig() binding.surfaceInputOverlay.refreshControls() } .setNegativeButton(android.R.string.cancel, null) @@ -592,12 +595,10 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { dialog.getButton(AlertDialog.BUTTON_NEUTRAL) .setOnClickListener { val isChecked = !optionsArray[0] - Settings.overlayPreferences.forEachIndexed { i, _ -> + overlayControlData.forEachIndexed { i, _ -> optionsArray[i] = isChecked dialog.listView.setItemChecked(i, isChecked) - preferences.edit() - .putBoolean("buttonToggle$i", isChecked) - .apply() + overlayControlData[i].enabled = isChecked } } true @@ -605,26 +606,32 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { R.id.menu_show_overlay -> { it.isChecked = !it.isChecked - EmulationMenuSettings.showOverlay = it.isChecked + BooleanSetting.SHOW_INPUT_OVERLAY.setBoolean(it.isChecked) binding.surfaceInputOverlay.refreshControls() true } R.id.menu_rel_stick_center -> { it.isChecked = !it.isChecked - EmulationMenuSettings.joystickRelCenter = it.isChecked + BooleanSetting.JOYSTICK_REL_CENTER.setBoolean(it.isChecked) true } R.id.menu_dpad_slide -> { it.isChecked = !it.isChecked - EmulationMenuSettings.dpadSlide = it.isChecked + BooleanSetting.DPAD_SLIDE.setBoolean(it.isChecked) true } R.id.menu_haptics -> { it.isChecked = !it.isChecked - EmulationMenuSettings.hapticFeedback = it.isChecked + BooleanSetting.HAPTIC_FEEDBACK.setBoolean(it.isChecked) + true + } + + R.id.menu_touchscreen -> { + it.isChecked = !it.isChecked + BooleanSetting.TOUCHSCREEN.setBoolean(it.isChecked) true } @@ -667,6 +674,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED } } + NativeConfig.saveGlobalConfig() } @SuppressLint("SetTextI18n") @@ -675,7 +683,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { adjustBinding.apply { inputScaleSlider.apply { valueTo = 150F - value = preferences.getInt(Settings.PREF_CONTROL_SCALE, 50).toFloat() + value = IntSetting.OVERLAY_SCALE.getInt().toFloat() addOnChangeListener( Slider.OnChangeListener { _, value, _ -> inputScaleValue.text = "${value.toInt()}%" @@ -685,7 +693,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } inputOpacitySlider.apply { valueTo = 100F - value = preferences.getInt(Settings.PREF_CONTROL_OPACITY, 100).toFloat() + value = IntSetting.OVERLAY_OPACITY.getInt().toFloat() addOnChangeListener( Slider.OnChangeListener { _, value, _ -> inputOpacityValue.text = "${value.toInt()}%" @@ -709,16 +717,12 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } private fun setControlScale(scale: Int) { - preferences.edit() - .putInt(Settings.PREF_CONTROL_SCALE, scale) - .apply() + IntSetting.OVERLAY_SCALE.setInt(scale) binding.surfaceInputOverlay.refreshControls() } private fun setControlOpacity(opacity: Int) { - preferences.edit() - .putInt(Settings.PREF_CONTROL_OPACITY, opacity) - .apply() + IntSetting.OVERLAY_OPACITY.setInt(opacity) binding.surfaceInputOverlay.refreshControls() } |