aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/utils/AnimatedVectorDelegate.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/utils/AnimatedVectorDelegate.kt')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/utils/AnimatedVectorDelegate.kt62
1 files changed, 37 insertions, 25 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/AnimatedVectorDelegate.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/AnimatedVectorDelegate.kt
index 223eed3f..c9e64eb3 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/utils/AnimatedVectorDelegate.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/AnimatedVectorDelegate.kt
@@ -1,8 +1,24 @@
+/*
+ * Copyright 2018 Allan Wang
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
package com.pitchedapps.frost.utils
import android.graphics.drawable.AnimatedVectorDrawable
-import androidx.annotation.DrawableRes
import android.widget.ImageView
+import androidx.annotation.DrawableRes
import ca.allanwang.kau.utils.drawable
/**
@@ -23,23 +39,23 @@ interface AnimatedVectorContract {
}
class AnimatedVectorDelegate(
- /**
- * The res for the starting resource; must have parent tag animated-vector
- */
- @param:DrawableRes val avdStart: Int,
- /**
- * The res for the ending resource; must have parent tag animated-vector
- */
- @param:DrawableRes val avdEnd: Int,
- /**
- * The delegate will automatically set the start resource when bound
- * If [emitOnBind] is true, it will also trigger the listener
- */
- val emitOnBind: Boolean = true,
- /**
- * The optional listener that will be triggered every time the avd is switched by the delegate
- */
- override var animatedVectorListener: ((avd: AnimatedVectorDrawable, forwards: Boolean) -> Unit)? = null
+ /**
+ * The res for the starting resource; must have parent tag animated-vector
+ */
+ @param:DrawableRes val avdStart: Int,
+ /**
+ * The res for the ending resource; must have parent tag animated-vector
+ */
+ @param:DrawableRes val avdEnd: Int,
+ /**
+ * The delegate will automatically set the start resource when bound
+ * If [emitOnBind] is true, it will also trigger the listener
+ */
+ val emitOnBind: Boolean = true,
+ /**
+ * The optional listener that will be triggered every time the avd is switched by the delegate
+ */
+ override var animatedVectorListener: ((avd: AnimatedVectorDrawable, forwards: Boolean) -> Unit)? = null
) : AnimatedVectorContract {
lateinit var view: ImageView
@@ -55,9 +71,9 @@ class AnimatedVectorDelegate(
override fun bind(view: ImageView) {
this.view = view
view.context.drawable(avdStart) as? AnimatedVectorDrawable
- ?: throw IllegalArgumentException("AnimatedVectorDelegate has a starting drawable that isn't an avd")
+ ?: throw IllegalArgumentException("AnimatedVectorDelegate has a starting drawable that isn't an avd")
view.context.drawable(avdEnd) as? AnimatedVectorDrawable
- ?: throw IllegalArgumentException("AnimatedVectorDelegate has an ending drawable that isn't an avd")
+ ?: throw IllegalArgumentException("AnimatedVectorDelegate has an ending drawable that isn't an avd")
view.setImageResource(avdStart)
if (emitOnBind) animatedVectorListener?.invoke(avd!!, false)
}
@@ -70,15 +86,11 @@ class AnimatedVectorDelegate(
private fun animateImpl(toStart: Boolean) {
if ((atStart == toStart)) return L.d { "AVD already at ${if (toStart) "start" else "end"}" }
- if (avd == null) return L.d { "AVD null resource" }//no longer using animated vector; do not modify
+ if (avd == null) return L.d { "AVD null resource" } //no longer using animated vector; do not modify
avd?.stop()
view.setImageResource(if (toStart) avdEnd else avdStart)
animatedVectorListener?.invoke(avd!!, !toStart)
atStart = toStart
avd?.start()
}
-
}
-
-
-