diff options
| author | OatmealDome <OatmealDome@users.noreply.github.com> | 2025-11-08 14:03:44 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-08 14:03:44 -0500 |
| commit | 4f849ec8273abfd8290b565264cfe7e422d4961f (patch) | |
| tree | b0901fb6886915bb920acb7b74b459fb78186861 /Source/Android/app/src/main/java/org | |
| parent | 5ee1ae43bb8416e32df8c1700012495137d1129e (diff) | |
| parent | f718a6b72f4295430e70270c27c571c0d83de5f8 (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')
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() } } |
