Skip to content

Instantly share code, notes, and snippets.

@vitkidd
Created November 13, 2020 17:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vitkidd/0cc3e2e3604eb6f90b15a8e6ee8365a2 to your computer and use it in GitHub Desktop.
Save vitkidd/0cc3e2e3604eb6f90b15a8e6ee8365a2 to your computer and use it in GitHub Desktop.
Theme Change
class CustomTextView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : AppCompatTextView(context, attrs, defStyleAttr), ThemeChangeListener {
override fun onAttachedToWindow() {
super.onAttachedToWindow()
AdmiralUI.addListener(this)
}
override fun onDetachedFromWindow() {
AdmiralUI.removeListener(this)
super.onDetachedFromWindow()
}
override fun onThemeChanged(theme: Theme) {
// todo change theme
}
}
object ThemeManager {
private val listeners = mutableSetOf<ThemeChangeListener>()
var theme: Theme = Theme.fromPalette()
set(value) {
field = value
listeners.forEach { listener -> listener.onThemeChanged(value) }
}
internal fun addListener(listener: ThemeChangeListener) = listeners.add(listener)
internal fun removeListener(listener: ThemeChangeListener) = listeners.remove(listener)
}
internal interface ThemeChangeListener {
fun onThemeChanged(theme: Theme)
}
data class Theme(
val primary: String = "#ffffff",
val primaryOn: String = "#000000"
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment