Add QuadStateCheckBox view
Cette révision appartient à :
Parent
f7a6cbe5e2
révision
940d8389b5
2 fichiers modifiés avec 53 ajouts et 0 suppressions
44
app/src/main/java/eu/kanade/tachiyomi/widget/QuadStateCheckBox.kt
Fichier normal
44
app/src/main/java/eu/kanade/tachiyomi/widget/QuadStateCheckBox.kt
Fichier normal
|
@ -0,0 +1,44 @@
|
|||
package eu.kanade.tachiyomi.widget
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.util.AttributeSet
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
|
||||
class QuadStateCheckBox @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
|
||||
AppCompatImageView(context, attrs) {
|
||||
|
||||
var state: State = State.UNCHECKED
|
||||
set(value) {
|
||||
field = value
|
||||
updateDrawable()
|
||||
}
|
||||
|
||||
private fun updateDrawable() {
|
||||
val drawable = when (state) {
|
||||
State.UNCHECKED -> tintVector(context, R.drawable.ic_check_box_outline_blank_24dp, R.attr.colorControlNormal)
|
||||
State.INDETERMINATE -> tintVector(context, R.drawable.ic_indeterminate_check_box_24dp)
|
||||
State.CHECKED -> tintVector(context, R.drawable.ic_check_box_24dp)
|
||||
State.INVERSED -> tintVector(context, R.drawable.ic_check_box_x_24dp)
|
||||
}
|
||||
|
||||
setImageDrawable(drawable)
|
||||
}
|
||||
|
||||
private fun tintVector(context: Context, resId: Int, @AttrRes colorAttrRes: Int = R.attr.colorAccent): Drawable {
|
||||
return AppCompatResources.getDrawable(context, resId)!!.apply {
|
||||
setTint(context.getResourceColor(colorAttrRes))
|
||||
}
|
||||
}
|
||||
|
||||
sealed class State {
|
||||
object UNCHECKED : State()
|
||||
object INDETERMINATE : State()
|
||||
object CHECKED : State()
|
||||
object INVERSED : State()
|
||||
}
|
||||
}
|
9
app/src/main/res/drawable/ic_indeterminate_check_box_24dp.xml
Fichier normal
9
app/src/main/res/drawable/ic_indeterminate_check_box_24dp.xml
Fichier normal
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/black"
|
||||
android:pathData="M19,3H5C3.9,3 3,3.9 3,5v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5C21,3.9 20.1,3 19,3zM17,13H7v-2h10V13z"/>
|
||||
</vector>
|
Référencer dans un nouveau ticket