From b44e343466a944a4e35bb667d7aa51654cd0ef52 Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Sun, 11 Jul 2021 01:59:16 -0400 Subject: [PATCH] Adding animation for 3 states of checkboxes in settings since im stuck with illustrator we're back to using it --- .../util/view/ImageViewExtensions.kt | 4 +- .../materialdialogs/QuadStateCheckBox.kt | 25 ++++-- .../QuadStateMultiChoiceDialogAdapter.kt | 7 +- .../anim_check_box_blank_to_checked_24dp.xml | 80 +++++++++++++++++++ .../anim_check_box_checked_to_x_24dp.xml | 80 +++++++++++++++++++ .../anim_check_box_x_to_blank_24dp.xml | 80 +++++++++++++++++++ .../anim_checkbox_checked_to_blank_24dp.xml | 80 +++++++++++++++++++ 7 files changed, 345 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/drawable/anim_check_box_blank_to_checked_24dp.xml create mode 100644 app/src/main/res/drawable/anim_check_box_checked_to_x_24dp.xml create mode 100644 app/src/main/res/drawable/anim_check_box_x_to_blank_24dp.xml create mode 100644 app/src/main/res/drawable/anim_checkbox_checked_to_blank_24dp.xml diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/view/ImageViewExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/view/ImageViewExtensions.kt index 4ee2c6f6e9..ac44d27171 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/view/ImageViewExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/view/ImageViewExtensions.kt @@ -21,11 +21,11 @@ fun ImageView.setVectorCompat(@DrawableRes drawable: Int, @AttrRes tint: Int? = setImageDrawable(vector) } -fun ImageView.setAnimVectorCompat(@DrawableRes drawable: Int, tint: Int? = null) { +fun ImageView.setAnimVectorCompat(@DrawableRes drawable: Int, @AttrRes tint: Int? = null) { val vector = AnimatedVectorDrawableCompat.create(context, drawable) if (tint != null) { vector?.mutate() - vector?.setTint(tint) + vector?.setTint(context.getResourceColor(tint)) } setImageDrawable(vector) vector?.start() diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/materialdialogs/QuadStateCheckBox.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/materialdialogs/QuadStateCheckBox.kt index b01d224374..3455fb5421 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/materialdialogs/QuadStateCheckBox.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/materialdialogs/QuadStateCheckBox.kt @@ -4,23 +4,36 @@ import android.content.Context import android.util.AttributeSet import androidx.appcompat.widget.AppCompatImageView import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.util.view.setAnimVectorCompat import eu.kanade.tachiyomi.util.view.setVectorCompat 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() { + fun animateDrawableToState(state: State) { + when (state) { + State.UNCHECKED -> setAnimVectorCompat( + when (this.state) { + State.INVERSED -> R.drawable.anim_check_box_x_to_blank_24dp + else -> R.drawable.anim_checkbox_checked_to_blank_24dp + }, + R.attr.colorControlNormal + ) + State.INDETERMINATE -> setVectorCompat(R.drawable.ic_indeterminate_check_box_24dp, R.attr.colorAccent) + State.CHECKED -> setAnimVectorCompat(R.drawable.anim_check_box_blank_to_checked_24dp, R.attr.colorAccent) + State.INVERSED -> setAnimVectorCompat(R.drawable.anim_check_box_checked_to_x_24dp, R.attr.colorAccentText) + } + this.state = state + } + + fun updateDrawable() { when (state) { State.UNCHECKED -> setVectorCompat(R.drawable.ic_check_box_outline_blank_24dp, R.attr.colorControlNormal) State.INDETERMINATE -> setVectorCompat(R.drawable.ic_indeterminate_check_box_24dp, R.attr.colorAccent) State.CHECKED -> setVectorCompat(R.drawable.ic_check_box_24dp, R.attr.colorAccent) - State.INVERSED -> setVectorCompat(R.drawable.ic_check_box_x_24dp, R.attr.colorAccent) + State.INVERSED -> setVectorCompat(R.drawable.ic_check_box_x_24dp, R.attr.colorAccentText) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/materialdialogs/QuadStateMultiChoiceDialogAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/materialdialogs/QuadStateMultiChoiceDialogAdapter.kt index f156c23e8f..de415fe97d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/materialdialogs/QuadStateMultiChoiceDialogAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/materialdialogs/QuadStateMultiChoiceDialogAdapter.kt @@ -95,6 +95,7 @@ internal class QuadStateMultiChoiceDialogAdapter( holder.isEnabled = !disabledIndices.contains(position) holder.controlView.state = states[currentSelection[position]] + holder.controlView.updateDrawable() holder.titleView.text = items[position] holder.itemView.background = dialog.getItemSelector() @@ -110,15 +111,15 @@ internal class QuadStateMultiChoiceDialogAdapter( ) { when (payloads.firstOrNull()) { CheckPayload -> { - holder.controlView.state = QuadStateCheckBox.State.CHECKED + holder.controlView.animateDrawableToState(QuadStateCheckBox.State.CHECKED) return } InverseCheckPayload -> { - holder.controlView.state = QuadStateCheckBox.State.INVERSED + holder.controlView.animateDrawableToState(QuadStateCheckBox.State.INVERSED) return } UncheckPayload -> { - holder.controlView.state = QuadStateCheckBox.State.UNCHECKED + holder.controlView.animateDrawableToState(QuadStateCheckBox.State.UNCHECKED) return } } diff --git a/app/src/main/res/drawable/anim_check_box_blank_to_checked_24dp.xml b/app/src/main/res/drawable/anim_check_box_blank_to_checked_24dp.xml new file mode 100644 index 0000000000..c930ea2b20 --- /dev/null +++ b/app/src/main/res/drawable/anim_check_box_blank_to_checked_24dp.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/anim_check_box_checked_to_x_24dp.xml b/app/src/main/res/drawable/anim_check_box_checked_to_x_24dp.xml new file mode 100644 index 0000000000..f1da805abb --- /dev/null +++ b/app/src/main/res/drawable/anim_check_box_checked_to_x_24dp.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/anim_check_box_x_to_blank_24dp.xml b/app/src/main/res/drawable/anim_check_box_x_to_blank_24dp.xml new file mode 100644 index 0000000000..acf22aa178 --- /dev/null +++ b/app/src/main/res/drawable/anim_check_box_x_to_blank_24dp.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/anim_checkbox_checked_to_blank_24dp.xml b/app/src/main/res/drawable/anim_checkbox_checked_to_blank_24dp.xml new file mode 100644 index 0000000000..6c996364e9 --- /dev/null +++ b/app/src/main/res/drawable/anim_checkbox_checked_to_blank_24dp.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +