summaryrefslogtreecommitdiffstats
path: root/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt
new file mode 100644
index 000000000..4b24d6108
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt
@@ -0,0 +1,99 @@
+package org.yuzu.yuzu_emu.features.settings.ui
+
+import android.content.IntentFilter
+import android.os.Bundle
+import android.text.TextUtils
+import org.yuzu.yuzu_emu.NativeLibrary
+import org.yuzu.yuzu_emu.features.settings.model.Settings
+import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
+import org.yuzu.yuzu_emu.utils.DirectoryInitialization
+import org.yuzu.yuzu_emu.utils.DirectoryInitialization.DirectoryInitializationState
+import org.yuzu.yuzu_emu.utils.DirectoryStateReceiver
+import org.yuzu.yuzu_emu.utils.Log
+import java.io.File
+
+class SettingsActivityPresenter(private val activityView: SettingsActivityView) {
+ var settings: Settings? = Settings()
+ private var shouldSave = false
+ private var directoryStateReceiver: DirectoryStateReceiver? = null
+ private lateinit var menuTag: String
+ private lateinit var gameId: String
+
+ fun onCreate(savedInstanceState: Bundle?, menuTag: String, gameId: String) {
+ if (savedInstanceState == null) {
+ this.menuTag = menuTag
+ this.gameId = gameId
+ } else {
+ shouldSave = savedInstanceState.getBoolean(KEY_SHOULD_SAVE)
+ }
+ }
+
+ fun onStart() {
+ prepareDirectoriesIfNeeded()
+ }
+
+ private fun loadSettingsUI() {
+ if (settings!!.isEmpty) {
+ if (!TextUtils.isEmpty(gameId)) {
+ settings!!.loadSettings(gameId, activityView)
+ } else {
+ settings!!.loadSettings(activityView)
+ }
+ }
+ activityView.showSettingsFragment(menuTag, false, gameId)
+ activityView.onSettingsFileLoaded(settings)
+ }
+
+ private fun prepareDirectoriesIfNeeded() {
+ val configFile =
+ File(DirectoryInitialization.userDirectory + "/config/" + SettingsFile.FILE_NAME_CONFIG + ".ini")
+ if (!configFile.exists()) {
+ Log.error(DirectoryInitialization.userDirectory + "/config/" + SettingsFile.FILE_NAME_CONFIG + ".ini")
+ Log.error("yuzu config file could not be found!")
+ }
+ if (DirectoryInitialization.areDirectoriesReady()) {
+ loadSettingsUI()
+ } else {
+ activityView.showLoading()
+ val statusIntentFilter = IntentFilter(DirectoryInitialization.BROADCAST_ACTION)
+ directoryStateReceiver =
+ DirectoryStateReceiver { directoryInitializationState: DirectoryInitializationState ->
+ if (directoryInitializationState == DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED) {
+ activityView.hideLoading()
+ loadSettingsUI()
+ } else if (directoryInitializationState == DirectoryInitializationState.CANT_FIND_EXTERNAL_STORAGE) {
+ activityView.showExternalStorageNotMountedHint()
+ activityView.hideLoading()
+ }
+ }
+ activityView.startDirectoryInitializationService(
+ directoryStateReceiver,
+ statusIntentFilter
+ )
+ }
+ }
+
+ fun onStop(finishing: Boolean) {
+ if (directoryStateReceiver != null) {
+ activityView.stopListeningToDirectoryInitializationService(directoryStateReceiver!!)
+ directoryStateReceiver = null
+ }
+ if (settings != null && finishing && shouldSave) {
+ Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI...")
+ settings!!.saveSettings(activityView)
+ }
+ NativeLibrary.ReloadSettings()
+ }
+
+ fun onSettingChanged() {
+ shouldSave = true
+ }
+
+ fun saveState(outState: Bundle) {
+ outState.putBoolean(KEY_SHOULD_SAVE, shouldSave)
+ }
+
+ companion object {
+ private const val KEY_SHOULD_SAVE = "should_save"
+ }
+}