@@ -37,6 +37,7 @@ import android.widget.CompoundButton
3737import android.widget.LinearLayout
3838import android.widget.ScrollView
3939import android.widget.Toast
40+ import androidx.activity.OnBackPressedCallback
4041import androidx.activity.result.ActivityResultLauncher
4142import androidx.activity.result.contract.ActivityResultContracts
4243import androidx.annotation.RequiresApi
@@ -106,6 +107,7 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
106107 private val rdb by inject<RefreshDatabase >()
107108 private val eventLogger by inject<EventLogger >()
108109
110+ private var isThemeChanged: Boolean = false
109111 private lateinit var notificationPermissionResult: ActivityResultLauncher <String >
110112 private lateinit var bubbleSettingsResult: ActivityResultLauncher <Intent >
111113
@@ -128,11 +130,16 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
128130
129131 companion object {
130132 private const val SCHEME_PACKAGE = " package"
133+ const val THEME_CHANGED_RESULT = 24
134+ private const val KEY_THEME_CHANGE = " key_theme_change"
131135 }
132136
133137 override fun onCreate (savedInstanceState : Bundle ? ) {
134138 theme.applyStyle(getCurrentTheme(isDarkThemeOn(), persistentState.theme), true )
135139 super .onCreate(savedInstanceState)
140+ if (savedInstanceState != null ) {
141+ isThemeChanged = savedInstanceState.getBoolean(KEY_THEME_CHANGE , false )
142+ }
136143
137144 handleFrostEffectIfNeeded(persistentState.theme)
138145
@@ -145,6 +152,25 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
145152 registerForActivityResult()
146153 initView()
147154 setupClickListeners()
155+ setupOnBackPressed()
156+ }
157+
158+ override fun onSaveInstanceState (outState : Bundle ) {
159+ super .onSaveInstanceState(outState)
160+ outState.putBoolean(KEY_THEME_CHANGE , isThemeChanged)
161+ }
162+
163+ private fun setupOnBackPressed () {
164+ val callback = object : OnBackPressedCallback (true ) {
165+ override fun handleOnBackPressed () {
166+ if (isThemeChanged) {
167+ setResult(THEME_CHANGED_RESULT )
168+ }
169+ isEnabled = false
170+ onBackPressedDispatcher.onBackPressed()
171+ }
172+ }
173+ onBackPressedDispatcher.addCallback(this , callback)
148174 }
149175
150176 private fun initView () {
@@ -988,6 +1014,7 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
9881014 }
9891015
9901016 persistentState.theme = which
1017+ isThemeChanged = true
9911018 logEvent(" App theme changed, theme id: $theme " )
9921019 when (which) {
9931020 Themes .SYSTEM_DEFAULT .id -> {
0 commit comments