optimised lifecycleOwner getter

This commit is contained in:
X1nto 2021-02-28 14:58:34 +04:00
parent 18cad94748
commit 1f600430ea
5 changed files with 8 additions and 15 deletions

View File

@ -16,7 +16,7 @@ class ThemedMaterialButton @JvmOverloads constructor(
) : MaterialButton(context, attributeSet, defStyleAttr) {
init {
context.lifecycleOwner()?.let { owner ->
context.lifecycleOwner?.let { owner ->
accentColor.observe(owner) { color ->
setBgColor(color.toInt())
}

View File

@ -14,7 +14,7 @@ class ThemedOutlinedMaterialButton @JvmOverloads constructor(
defStyleAttr: Int = 0
) : MaterialButton(context, attributeSet, defStyleAttr) {
init {
context.lifecycleOwner()?.let { owner ->
context.lifecycleOwner?.let { owner ->
accentColor.observe(owner) { color ->
applyAccent(color.toInt())
}

View File

@ -19,7 +19,7 @@ class ThemedSwitchCompat @JvmOverloads constructor(
private val states = arrayOf(intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked))
init {
context.lifecycleOwner()?.let { owner ->
context.lifecycleOwner?.let { owner ->
accentColor.observe(owner) { color ->
setSwitchColors(color.toInt())
}

View File

@ -12,7 +12,7 @@ class ThemedTextView @JvmOverloads constructor(
defStyleAttr: Int = 0
) : AppCompatTextView(context, attributeSet, defStyleAttr) {
init {
context.lifecycleOwner()?.let { owner ->
context.lifecycleOwner?.let { owner ->
accentColor.observe(owner) { color ->
setTextColor(color.toInt())
}

View File

@ -42,17 +42,10 @@ fun String.convertToAppTheme(context: Context): String {
fun String.getLatestAppVersion(versions: List<String>): String = if (this == "latest") versions.reversed()[0] else this
fun Context.lifecycleOwner(): LifecycleOwner? {
var curContext = this
var maxDepth = 20
while (maxDepth-- > 0 && curContext !is LifecycleOwner) {
curContext = (curContext as ContextWrapper).baseContext
}
return if (curContext is LifecycleOwner) {
curContext
} else {
null
}
val Context.lifecycleOwner: LifecycleOwner? get() = when (this) {
is LifecycleOwner -> this
!is LifecycleOwner -> (this as ContextWrapper).baseContext as LifecycleOwner
else -> null
}
fun Int.toHex(): String = java.lang.String.format("#%06X", 0xFFFFFF and this)