@@ -4,10 +4,15 @@ import android.content.res.Configuration
4
4
import androidx.annotation.Keep
5
5
import com.osfans.trime.data.AppPrefs
6
6
import com.osfans.trime.data.DataManager
7
+ import com.osfans.trime.util.WeakHashSet
7
8
import com.osfans.trime.util.isNightMode
8
9
import java.io.File
9
10
10
11
object ThemeManager {
12
+ fun interface OnThemeChangeListener {
13
+ fun onThemeChange (theme : Theme )
14
+ }
15
+
11
16
/* *
12
17
* Update sharedThemes and userThemes.
13
18
*/
@@ -28,11 +33,6 @@ object ThemeManager {
28
33
?.toMutableList() ? : mutableListOf ()
29
34
}
30
35
31
- @JvmStatic
32
- fun switchTheme (theme : String ) {
33
- AppPrefs .defaultInstance().themeAndColor.selectedTheme = theme
34
- }
35
-
36
36
val sharedThemes: MutableList <String > = listThemes(DataManager .sharedDataDir)
37
37
38
38
val userThemes: MutableList <String > = listThemes(DataManager .userDataDir)
@@ -60,15 +60,32 @@ object ThemeManager {
60
60
private set(value) {
61
61
if (_activeTheme == value) return
62
62
_activeTheme = value
63
+ fireChange()
63
64
}
64
65
65
66
private var isNightMode = false
66
67
68
+ private val onChangeListeners = WeakHashSet <OnThemeChangeListener >()
69
+
70
+ @JvmStatic
71
+ fun addOnChangedListener (listener : OnThemeChangeListener ) {
72
+ onChangeListeners.add(listener)
73
+ }
74
+
75
+ @JvmStatic
76
+ fun removeOnChangedListener (listener : OnThemeChangeListener ) {
77
+ onChangeListeners.remove(listener)
78
+ }
79
+
80
+ private fun fireChange () {
81
+ onChangeListeners.forEach { it.onThemeChange(_activeTheme ) }
82
+ }
83
+
67
84
val prefs = AppPrefs .defaultInstance().themeAndColor
68
85
69
86
fun setNormalTheme (name : String ) {
70
87
AppPrefs .defaultInstance().themeAndColor.selectedTheme = name
71
- _activeTheme = evalActiveTheme()
88
+ activeTheme = evalActiveTheme()
72
89
}
73
90
74
91
private fun evalActiveTheme (): Theme {
@@ -87,11 +104,9 @@ object ThemeManager {
87
104
88
105
@JvmStatic
89
106
fun onSystemNightModeChange (isNight : Boolean ) {
107
+ if (isNightMode == isNight) return
90
108
isNightMode = isNight
91
- if (::_activeTheme .isInitialized) {
92
- activeTheme.systemChangeColor(isNightMode)
93
- } else {
94
- activeTheme = evalActiveTheme()
95
- }
109
+ _activeTheme .systemChangeColor(isNightMode)
110
+ fireChange()
96
111
}
97
112
}
0 commit comments