summaryrefslogtreecommitdiff
path: root/Source/Android/app/src
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
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')
-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
-rw-r--r--Source/Android/app/src/main/res/layout-land/activity_user_data.xml13
-rw-r--r--Source/Android/app/src/main/res/layout/activity_user_data.xml11
-rw-r--r--Source/Android/app/src/main/res/values/strings.xml3
7 files changed, 106 insertions, 5 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()
}
}
diff --git a/Source/Android/app/src/main/res/layout-land/activity_user_data.xml b/Source/Android/app/src/main/res/layout-land/activity_user_data.xml
index df1f5c4cc2..fa729401ba 100644
--- a/Source/Android/app/src/main/res/layout-land/activity_user_data.xml
+++ b/Source/Android/app/src/main/res/layout-land/activity_user_data.xml
@@ -107,7 +107,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="start"
- app:constraint_referenced_ids="button_open_system_file_manager,button_import_user_data,button_export_user_data" />
+ app:constraint_referenced_ids="button_open_system_file_manager,button_import_user_data,button_export_user_data,button_reset_settings" />
<Button
android:id="@+id/button_open_system_file_manager"
@@ -141,6 +141,17 @@
app:layout_constraintStart_toEndOf="@id/barrier_text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/button_import_user_data"
+ app:layout_constraintBottom_toTopOf="@id/button_reset_settings" />
+
+ <Button
+ android:id="@+id/button_reset_settings"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="@dimen/spacing_small"
+ android:text="@string/reset_all_settings"
+ app:layout_constraintStart_toEndOf="@id/barrier_text"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/button_export_user_data"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/Source/Android/app/src/main/res/layout/activity_user_data.xml b/Source/Android/app/src/main/res/layout/activity_user_data.xml
index 7a256bd9e9..b2abe04cc0 100644
--- a/Source/Android/app/src/main/res/layout/activity_user_data.xml
+++ b/Source/Android/app/src/main/res/layout/activity_user_data.xml
@@ -118,6 +118,17 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/button_import_user_data"
+ app:layout_constraintBottom_toTopOf="@id/button_reset_settings" />
+
+ <Button
+ android:id="@+id/button_reset_settings"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:text="@string/reset_all_settings"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/button_export_user_data"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml
index 1971a1535e..6342e35cb0 100644
--- a/Source/Android/app/src/main/res/values/strings.xml
+++ b/Source/Android/app/src/main/res/values/strings.xml
@@ -454,6 +454,9 @@
<string name="user_data_import_failure">Failed to import user data.</string>
<string name="user_data_export_success">Your user data has been exported.</string>
<string name="user_data_export_failure">Failed to export user data.</string>
+ <string name="reset_dolphin_settings">Reset Dolphin Settings</string>
+ <string name="reset_all_settings">Reset All Settings</string>
+ <string name="reset_dolphin_settings_confirmation">Are you sure you want to restore all Dolphin settings to their default values? This action cannot be undone!\nAll customizations or changes you have made will be lost.\n\nDo you want to proceed?</string>
<!-- Miscellaneous -->
<string name="yes">Yes</string>