From e9b62b71d1092eedfbf66b4343bc2c4c8b28d804 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 14 Nov 2022 10:37:53 +0100 Subject: [PATCH] Ask restart when theme is changed --- .../android/activities/SettingsActivity.kt | 18 ++++++++++++++++-- .../settings/FragmentThemingSettings.java | 13 +++++++++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/SettingsActivity.kt b/app/src/main/java/app/fedilab/android/activities/SettingsActivity.kt index 7835bf4d..f80760e0 100644 --- a/app/src/main/java/app/fedilab/android/activities/SettingsActivity.kt +++ b/app/src/main/java/app/fedilab/android/activities/SettingsActivity.kt @@ -16,15 +16,18 @@ package app.fedilab.android.activities import android.os.Bundle import android.view.MenuItem +import androidx.appcompat.app.AlertDialog import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.navigateUp import androidx.navigation.ui.setupActionBarWithNavController import app.fedilab.android.R import app.fedilab.android.databinding.ActivitySettingsBinding +import app.fedilab.android.helper.Helper import app.fedilab.android.helper.ThemeHelper +import app.fedilab.android.ui.fragment.settings.FragmentThemingSettings -class SettingsActivity : BaseActivity() { +class SettingsActivity : BaseActivity(), FragmentThemingSettings.ActionTheming { private lateinit var binding: ActivitySettingsBinding private lateinit var appBarConfiguration: AppBarConfiguration @@ -34,7 +37,6 @@ class SettingsActivity : BaseActivity() { binding = ActivitySettingsBinding.inflate(layoutInflater) setContentView(binding.root) - val navController = findNavController(R.id.fragment_container) appBarConfiguration = AppBarConfiguration.Builder().build() setupActionBarWithNavController(navController, appBarConfiguration) @@ -53,4 +55,16 @@ class SettingsActivity : BaseActivity() { } return super.onOptionsItemSelected(item) } + + override fun restart() { + val restartBuilder = AlertDialog.Builder(this, Helper.dialogStyle()) + restartBuilder.setTitle(getString(R.string.restart_the_app)) + restartBuilder.setMessage(getString(R.string.restart_the_app_theme)) + restartBuilder.setNegativeButton(R.string.no) { dialog, which -> dialog.dismiss() } + restartBuilder.setPositiveButton(R.string.restart) { dialog, which -> + dialog.dismiss() + Helper.restart(this) + } + restartBuilder.create().show() + } } diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentThemingSettings.java b/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentThemingSettings.java index 0cfbfca5..e2e2c8a3 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentThemingSettings.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentThemingSettings.java @@ -63,6 +63,7 @@ import java.util.List; import app.fedilab.android.R; import app.fedilab.android.activities.ComposeActivity; +import app.fedilab.android.activities.SettingsActivity; import app.fedilab.android.databinding.PopupStatusThemeBinding; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.ThemeHelper; @@ -75,6 +76,8 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements private List> listOfThemes; private SharedPreferences appPref; private SharedPreferences cyneaPref; + public ActionTheming actionTheming; + private boolean shouldRestart; @Override public void onCreatePreferences(Bundle bundle, String s) { @@ -82,6 +85,8 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements appPref = PreferenceManager.getDefaultSharedPreferences(requireActivity()); createPref(); listOfThemes = ThemeHelper.getContributorsTheme(requireActivity()); + shouldRestart = false; + actionTheming = (SettingsActivity) requireActivity(); } @@ -101,6 +106,9 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } + if (shouldRestart && actionTheming != null) { + actionTheming.restart(); + } } @Override @@ -109,9 +117,14 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements if (key.equals("use_custom_theme")) { createPref(); } + shouldRestart = true; Helper.recreateMainActivity(requireActivity()); } + public interface ActionTheming { + void restart(); + } + @SuppressWarnings("deprecation") @SuppressLint("ApplySharedPref") diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1610c7c4..8ee9bc36 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1599,4 +1599,5 @@ State Restart the app? Restart + You should restart the application to apply changes.