summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java/org
diff options
context:
space:
mode:
authorOatmealDome <OatmealDome@users.noreply.github.com>2025-11-08 14:03:44 -0500
committerGitHub <noreply@github.com>2025-11-08 14:03:44 -0500
commit4f849ec8273abfd8290b565264cfe7e422d4961f (patch)
treeb0901fb6886915bb920acb7b74b459fb78186861 /Source/Android/app/src/main/java/org
parent5ee1ae43bb8416e32df8c1700012495137d1129e (diff)
parentf718a6b72f4295430e70270c27c571c0d83de5f8 (diff)
Merge pull request #14047 from Simonx22/reset-all-dolphin-settings-android
Android: Add Reset Dolphin Settings functionality
Diffstat (limited to 'Source/Android/app/src/main/java/org')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java2
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt47
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.kt15
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ThemeHelper.kt20
4 files changed, 80 insertions, 4 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
index eca80d530c..7d4714d758 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
@@ -308,6 +308,8 @@ public final class NativeLibrary
public static native void ReloadConfig();
+ public static native void ResetDolphinSettings();
+
public static native void UpdateGCAdapterScanThread();
/**
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt
index 39ba64b657..4639da2839 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.kt
@@ -15,6 +15,8 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import org.dolphinemu.dolphinemu.NativeLibrary
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.databinding.ActivityUserDataBinding
import org.dolphinemu.dolphinemu.dialogs.NotificationDialog
@@ -22,8 +24,11 @@ import org.dolphinemu.dolphinemu.dialogs.TaskDialog
import org.dolphinemu.dolphinemu.dialogs.UserDataImportWarningDialog
import org.dolphinemu.dolphinemu.features.DocumentProvider
import org.dolphinemu.dolphinemu.model.TaskViewModel
+import org.dolphinemu.dolphinemu.ui.main.ThemeProvider
import org.dolphinemu.dolphinemu.utils.*
+import org.dolphinemu.dolphinemu.utils.ThemeHelper
import org.dolphinemu.dolphinemu.utils.ThemeHelper.enableScrollTint
+import org.dolphinemu.dolphinemu.utils.ThemeHelper.setCorrectTheme
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
@@ -33,11 +38,13 @@ import java.util.zip.ZipInputStream
import java.util.zip.ZipOutputStream
import kotlin.system.exitProcess
-class UserDataActivity : AppCompatActivity() {
+class UserDataActivity : AppCompatActivity(), ThemeProvider {
private lateinit var taskViewModel: TaskViewModel
private lateinit var mBinding: ActivityUserDataBinding
+ override var themeId: Int = 0
+
override fun onCreate(savedInstanceState: Bundle?) {
taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
@@ -73,11 +80,17 @@ class UserDataActivity : AppCompatActivity() {
mBinding.buttonExportUserData.setOnClickListener { exportUserData() }
+ mBinding.buttonResetSettings.setOnClickListener { confirmResetSettings() }
+
setSupportActionBar(mBinding.toolbarUserData)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
setInsets()
enableScrollTint(this, mBinding.toolbarUserData, mBinding.appbarUserData)
+
+ if (savedInstanceState == null) {
+ Analytics.checkAnalyticsInit(this)
+ }
}
override fun onSupportNavigateUp(): Boolean {
@@ -85,6 +98,16 @@ class UserDataActivity : AppCompatActivity() {
return true
}
+ override fun onResume() {
+ setCorrectTheme(this)
+ super.onResume()
+ }
+
+ override fun setTheme(themeId: Int) {
+ super.setTheme(themeId)
+ this.themeId = themeId
+ }
+
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
@@ -113,6 +136,28 @@ class UserDataActivity : AppCompatActivity() {
}
}
+ private fun confirmResetSettings() {
+ MaterialAlertDialogBuilder(this)
+ .setTitle(R.string.reset_dolphin_settings)
+ .setMessage(R.string.reset_dolphin_settings_confirmation)
+ .setPositiveButton(R.string.yes) { _, _ -> resetSettings() }
+ .setNegativeButton(R.string.no, null)
+ .show()
+ }
+
+ private fun resetSettings() {
+ NativeLibrary.ResetDolphinSettings()
+ ThemeHelper.resetThemePreferences(this, false)
+
+ val restartIntent = Intent(this, UserDataActivity::class.java)
+ restartIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
+
+ finish()
+ overridePendingTransition(0, 0)
+ startActivity(restartIntent)
+ overridePendingTransition(0, 0)
+ }
+
private fun openFileManager() {
// First, try to open the user data folder directly
try {
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.kt
index 316a6e9798..9b252b5cdd 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.kt
@@ -32,18 +32,21 @@ import org.dolphinemu.dolphinemu.features.input.model.ControllerInterface
import org.dolphinemu.dolphinemu.features.settings.model.Settings
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsFragment.Companion.newInstance
import org.dolphinemu.dolphinemu.ui.main.MainPresenter
+import org.dolphinemu.dolphinemu.ui.main.ThemeProvider
import org.dolphinemu.dolphinemu.utils.FileBrowserHelper
import org.dolphinemu.dolphinemu.utils.InsetsHelper
import org.dolphinemu.dolphinemu.utils.SerializableHelper.serializable
import org.dolphinemu.dolphinemu.utils.ThemeHelper.enableScrollTint
+import org.dolphinemu.dolphinemu.utils.ThemeHelper.setCorrectTheme
import org.dolphinemu.dolphinemu.utils.ThemeHelper.setTheme
-class SettingsActivity : AppCompatActivity(), SettingsActivityView {
+class SettingsActivity : AppCompatActivity(), SettingsActivityView, ThemeProvider {
private var presenter: SettingsActivityPresenter? = null
private var dialog: AlertDialog? = null
private var toolbarLayout: CollapsingToolbarLayout? = null
private var binding: ActivitySettingsBinding? = null
+ override var themeId: Int = 0
override var isMappingAllDevices = false
override val settings: Settings
@@ -106,6 +109,16 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView {
presenter!!.onStart()
}
+ override fun onResume() {
+ setCorrectTheme(this)
+ super.onResume()
+ }
+
+ override fun setTheme(themeId: Int) {
+ super.setTheme(themeId)
+ this.themeId = themeId
+ }
+
/**
* If this is called, the user has left the settings screen (potentially through the
* home button) and will expect their changes to be persisted.
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ThemeHelper.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ThemeHelper.kt
index 1f3f694202..810bcda8b0 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ThemeHelper.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ThemeHelper.kt
@@ -142,10 +142,26 @@ object ThemeHelper {
}
@JvmStatic
+ fun resetThemePreferences(activity: AppCompatActivity, applyImmediately: Boolean = false) {
+ PreferenceManager.getDefaultSharedPreferences(activity.applicationContext)
+ .edit()
+ .remove(CURRENT_THEME)
+ .remove(CURRENT_THEME_MODE)
+ .remove(USE_BLACK_BACKGROUNDS)
+ .apply()
+ activity.delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
+ activity.delegate.applyDayNight()
+ if (applyImmediately) {
+ activity.recreate()
+ }
+ }
+
+ @JvmStatic
fun setCorrectTheme(activity: AppCompatActivity) {
- val currentTheme = (activity as ThemeProvider).themeId
+ val provider = activity as? ThemeProvider ?: return
+ val currentTheme = provider.themeId
setTheme(activity)
- if (currentTheme != (activity as ThemeProvider).themeId) {
+ if (currentTheme != provider.themeId) {
activity.recreate()
}
}