Skip to content

Commit f365083

Browse files
Merge pull request #2462 from VASHvic/fix_theme_bug
Fix: Theme change does not apply until app restart
2 parents 78ef82b + f2fff2a commit f365083

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

app/src/full/java/com/celzero/bravedns/ui/activity/MiscSettingsActivity.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import android.widget.CompoundButton
3737
import android.widget.LinearLayout
3838
import android.widget.ScrollView
3939
import android.widget.Toast
40+
import androidx.activity.OnBackPressedCallback
4041
import androidx.activity.result.ActivityResultLauncher
4142
import androidx.activity.result.contract.ActivityResultContracts
4243
import 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 -> {

app/src/full/java/com/celzero/bravedns/ui/fragment/ConfigureFragment.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package com.celzero.bravedns.ui.fragment
1818
import android.content.Intent
1919
import android.os.Bundle
2020
import android.view.View
21+
import androidx.activity.result.contract.ActivityResultContracts
2122
import androidx.fragment.app.Fragment
2223
import by.kirich1409.viewbindingdelegate.viewBinding
2324
import com.celzero.bravedns.R
@@ -37,6 +38,13 @@ class ConfigureFragment : Fragment(R.layout.fragment_configure) {
3738

3839
private val b by viewBinding(FragmentConfigureBinding::bind)
3940

41+
private val miscSettingsResultLauncher =
42+
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
43+
if (result.resultCode == MiscSettingsActivity.THEME_CHANGED_RESULT) {
44+
requireActivity().recreate()
45+
}
46+
}
47+
4048
enum class ScreenType {
4149
APPS,
4250
DNS,
@@ -128,6 +136,11 @@ class ConfigureFragment : Fragment(R.layout.fragment_configure) {
128136
ScreenType.ANTI_CENSORSHIP -> Intent(requireContext(), AntiCensorshipActivity::class.java)
129137
ScreenType.ADVANCED -> Intent(requireContext(), AdvancedSettingActivity::class.java)
130138
}
131-
startActivity(intent)
139+
140+
if (type == ScreenType.OTHERS) {
141+
miscSettingsResultLauncher.launch(intent)
142+
} else {
143+
startActivity(intent)
144+
}
132145
}
133146
}

0 commit comments

Comments
 (0)