summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorSimonx22 <simon@oatmealdome.me>2025-10-29 12:57:37 -0400
committerSimonx22 <simon@oatmealdome.me>2025-11-02 20:09:23 -0500
commitf718a6b72f4295430e70270c27c571c0d83de5f8 (patch)
tree2a633ff2603faeb7cbb0469434ceea917924f3af /Source/Android/app/src/main/java
parentb920182c97703b3df0fcb44cebdd6d1cc5485fcc (diff)
Android: Add Reset Dolphin Settings functionality
Diffstat (limited to 'Source/Android/app/src/main/java')
-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 69b9a94595..1423e2ccaa 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 e5db2f63d2..b4f8833f40 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
@@ -107,6 +110,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()
}
}