Proper way to setup attr colors
This commit is contained in:
parent
8c19654d20
commit
9e5cb6cb91
app/src/main
java/com/topjohnwu/magisk
databinding
di
ui/safetynet
res/layout
@ -297,3 +297,17 @@ fun CardView.setCardBackgroundColorAttr(attr: Int) {
|
||||
fun ImageView.setTint(color: Int) {
|
||||
ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(color))
|
||||
}
|
||||
|
||||
@BindingAdapter("tintAttr")
|
||||
fun ImageView.setTintAttr(attr: Int) {
|
||||
val tv = TypedValue()
|
||||
context.theme.resolveAttribute(attr, tv, true)
|
||||
ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(tv.data))
|
||||
}
|
||||
|
||||
@BindingAdapter("textColorAttr")
|
||||
fun TextView.setTextColorAttr(attr: Int) {
|
||||
val tv = TypedValue()
|
||||
context.theme.resolveAttribute(attr, tv, true)
|
||||
setTextColor(tv.data)
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.topjohnwu.magisk.di
|
||||
|
||||
import android.view.ContextThemeWrapper
|
||||
import com.topjohnwu.magisk.ui.MainViewModel
|
||||
import com.topjohnwu.magisk.ui.flash.FlashFragmentArgs
|
||||
import com.topjohnwu.magisk.ui.flash.FlashViewModel
|
||||
@ -22,7 +21,7 @@ val viewModelModules = module {
|
||||
viewModel { HomeViewModel(get()) }
|
||||
viewModel { LogViewModel(get()) }
|
||||
viewModel { ModuleViewModel(get(), get(), get()) }
|
||||
viewModel { (context: ContextThemeWrapper) -> SafetynetViewModel(context) }
|
||||
viewModel { SafetynetViewModel() }
|
||||
viewModel { SettingsViewModel(get()) }
|
||||
viewModel { SuperuserViewModel(get(), get()) }
|
||||
viewModel { ThemeViewModel() }
|
||||
|
@ -8,14 +8,11 @@ import com.topjohnwu.magisk.R
|
||||
import com.topjohnwu.magisk.arch.BaseUIFragment
|
||||
import com.topjohnwu.magisk.databinding.FragmentSafetynetMd2Binding
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
import org.koin.core.parameter.parametersOf
|
||||
|
||||
class SafetynetFragment : BaseUIFragment<SafetynetViewModel, FragmentSafetynetMd2Binding>() {
|
||||
|
||||
override val layoutRes = R.layout.fragment_safetynet_md2
|
||||
override val viewModel by viewModel<SafetynetViewModel>() {
|
||||
parametersOf(activity)
|
||||
}
|
||||
override val viewModel by viewModel<SafetynetViewModel>()
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
|
@ -1,7 +1,5 @@
|
||||
package com.topjohnwu.magisk.ui.safetynet
|
||||
|
||||
import android.util.TypedValue
|
||||
import android.view.ContextThemeWrapper
|
||||
import androidx.databinding.Bindable
|
||||
import com.topjohnwu.magisk.BR
|
||||
import com.topjohnwu.magisk.R
|
||||
@ -14,7 +12,7 @@ data class SafetyNetResult(
|
||||
val dismiss: Boolean = false
|
||||
)
|
||||
|
||||
class SafetynetViewModel(context: ContextThemeWrapper) : BaseViewModel() {
|
||||
class SafetynetViewModel : BaseViewModel() {
|
||||
|
||||
@get:Bindable
|
||||
var safetyNetTitle = R.string.empty
|
||||
@ -38,21 +36,12 @@ class SafetynetViewModel(context: ContextThemeWrapper) : BaseViewModel() {
|
||||
|
||||
@get:Bindable
|
||||
var isSuccess = false
|
||||
set(value) = set(value, field, { field = it }, BR.success, BR.textColor)
|
||||
set(value) = set(value, field, { field = it }, BR.success, BR.textColorAttr)
|
||||
|
||||
@get:Bindable
|
||||
val textColor get() = if (isSuccess) colorOnPrimary else colorOnError
|
||||
|
||||
private val colorOnPrimary: Int
|
||||
private val colorOnError: Int
|
||||
val textColorAttr get() = if (isSuccess) R.attr.colorOnPrimary else R.attr.colorOnError
|
||||
|
||||
init {
|
||||
val tv = TypedValue()
|
||||
context.theme.resolveAttribute(R.attr.colorOnPrimary, tv, true)
|
||||
colorOnPrimary = tv.data
|
||||
context.theme.resolveAttribute(R.attr.colorOnError, tv, true)
|
||||
colorOnError = tv.data
|
||||
|
||||
cachedResult?.also {
|
||||
resolveResponse(SafetyNetResult(it))
|
||||
} ?: attest()
|
||||
|
@ -80,8 +80,8 @@
|
||||
android:gravity="center"
|
||||
android:text="@{viewModel.safetyNetTitle}"
|
||||
android:textAppearance="@style/AppearanceFoundation.Display.OnPrimary"
|
||||
android:textColor="@{viewModel.textColor}"
|
||||
android:textStyle="bold"
|
||||
app:textColorAttr="@{viewModel.textColorAttr}"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
@ -94,10 +94,11 @@
|
||||
android:layout_height="4dp"
|
||||
android:layout_marginTop="@dimen/l2"
|
||||
app:srcCompat="@drawable/bg_divider_rounded_on_primary"
|
||||
app:tint="@{viewModel.textColor}"
|
||||
app:tintAttr="@{viewModel.textColorAttr}"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/safetynet_title" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/safetynet_title"
|
||||
tools:tint="?colorOnPrimary"/>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/checkbox_layout"
|
||||
@ -117,8 +118,8 @@
|
||||
android:text="basicIntegrity"
|
||||
android:textAppearance="@style/AppearanceFoundation.Body.OnPrimary"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@{viewModel.textColor}"
|
||||
android:layout_marginTop="@dimen/l2"
|
||||
app:textColorAttr="@{viewModel.textColorAttr}"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@id/snet_barrier"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
@ -133,8 +134,8 @@
|
||||
android:text="ctsProfile"
|
||||
android:textAppearance="@style/AppearanceFoundation.Body.OnPrimary"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@{viewModel.textColor}"
|
||||
android:layout_marginTop="@dimen/l2"
|
||||
app:textColorAttr="@{viewModel.textColorAttr}"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@id/snet_barrier"
|
||||
app:layout_constraintTop_toBottomOf="@id/basic_text"
|
||||
@ -152,20 +153,22 @@
|
||||
isSelected="@{viewModel.basicIntegrityState}"
|
||||
android:layout_gravity="center"
|
||||
app:srcCompat="@drawable/ic_check_circle_md2"
|
||||
app:tint="@{viewModel.textColor}"
|
||||
app:tintAttr="@{viewModel.textColorAttr}"
|
||||
app:layout_constraintStart_toEndOf="@id/snet_barrier"
|
||||
app:layout_constraintTop_toTopOf="@id/basic_text"
|
||||
app:layout_constraintBottom_toBottomOf="@id/basic_text"/>
|
||||
app:layout_constraintBottom_toBottomOf="@id/basic_text"
|
||||
tools:tint="?colorOnPrimary"/>
|
||||
|
||||
<ImageView
|
||||
style="@style/WidgetFoundation.Icon.OnPrimary"
|
||||
isSelected="@{viewModel.ctsState}"
|
||||
android:layout_gravity="center"
|
||||
app:srcCompat="@drawable/ic_check_circle_md2"
|
||||
app:tint="@{viewModel.textColor}"
|
||||
app:tintAttr="@{viewModel.textColorAttr}"
|
||||
app:layout_constraintStart_toEndOf="@id/snet_barrier"
|
||||
app:layout_constraintTop_toTopOf="@id/cts_text"
|
||||
app:layout_constraintBottom_toBottomOf="@id/cts_text"/>
|
||||
app:layout_constraintBottom_toBottomOf="@id/cts_text"
|
||||
tools:tint="?colorOnPrimary"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
@ -186,7 +189,7 @@
|
||||
android:text="evalType"
|
||||
android:textAppearance="@style/AppearanceFoundation.Body.OnPrimary"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@{viewModel.textColor}"
|
||||
app:textColorAttr="@{viewModel.textColorAttr}"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<TextView
|
||||
@ -195,9 +198,9 @@
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textAppearance="@style/AppearanceFoundation.Body.OnPrimary"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@{viewModel.textColor}"
|
||||
android:layout_marginStart="@dimen/l1"
|
||||
android:text="@{viewModel.evalType}"
|
||||
app:textColorAttr="@{viewModel.textColorAttr}"
|
||||
tools:text="HARDWARE"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
Loading…
Reference in New Issue
Block a user