aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/ca
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2019-12-31 11:25:29 -0800
committerAllan Wang <me@allanwang.ca>2019-12-31 11:25:29 -0800
commit5388aabf0b581a69405125ec0cdaf05ae2455133 (patch)
tree17e2d344469b4cb7af5750880630ff7da31a32b4 /core/src/main/kotlin/ca
parent91da44158d9aab832317a16fc0e63f48f3e5e940 (diff)
downloadkau-5388aabf0b581a69405125ec0cdaf05ae2455133.tar.gz
kau-5388aabf0b581a69405125ec0cdaf05ae2455133.tar.bz2
kau-5388aabf0b581a69405125ec0cdaf05ae2455133.zip
Add lazy ui
Diffstat (limited to 'core/src/main/kotlin/ca')
-rw-r--r--core/src/main/kotlin/ca/allanwang/kau/kotlin/LazyUi.kt6
-rw-r--r--core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackLayout.kt50
2 files changed, 39 insertions, 17 deletions
diff --git a/core/src/main/kotlin/ca/allanwang/kau/kotlin/LazyUi.kt b/core/src/main/kotlin/ca/allanwang/kau/kotlin/LazyUi.kt
new file mode 100644
index 0000000..28994e4
--- /dev/null
+++ b/core/src/main/kotlin/ca/allanwang/kau/kotlin/LazyUi.kt
@@ -0,0 +1,6 @@
+package ca.allanwang.kau.kotlin
+
+/**
+ * Shortcut for unsynchronized lazy block
+ */
+fun <T> lazyUi(initializer: () -> T): Lazy<T> = lazy(LazyThreadSafetyMode.NONE, initializer) \ No newline at end of file
diff --git a/core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackLayout.kt b/core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackLayout.kt
index b2d9a5f..4f9d54f 100644
--- a/core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackLayout.kt
+++ b/core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackLayout.kt
@@ -105,21 +105,18 @@ internal class SwipeBackLayout @JvmOverloads constructor(
private var statusBarBase: Int = 0
private var navBarBase: Int = 0
- val chromeFadeListener: SwipeListener by lazy {
- object : SwipeListener {
- @SuppressLint("NewApi")
- override fun onScroll(percent: Float, px: Int, edgeFlag: Int) {
- if (!transitionSystemBars) return
- activity?.apply {
- statusBarColor = statusBarBase.adjustAlpha(scrimOpacity)
- navigationBarColor = navBarBase.adjustAlpha(scrimOpacity)
- }
+ private val chromeFadeListener: SwipeListener = object : SwipeListener {
+ override fun onScroll(percent: Float, px: Int, edgeFlag: Int) {
+ if (!transitionSystemBars) return
+ activity?.apply {
+ statusBarColor = statusBarBase.adjustAlpha(scrimOpacity)
+ navigationBarColor = navBarBase.adjustAlpha(scrimOpacity)
}
+ }
- override fun onEdgeTouch() {}
+ override fun onEdgeTouch() {}
- override fun onScrollToClose(edgeFlag: Int) {}
- }
+ override fun onScrollToClose(edgeFlag: Int) {}
}
private var inLayout: Boolean = false
@@ -135,7 +132,13 @@ internal class SwipeBackLayout @JvmOverloads constructor(
* We will verify that only one axis is used at a time
*/
set(value) {
- if (value !in arrayOf(SWIPE_EDGE_TOP, SWIPE_EDGE_BOTTOM, SWIPE_EDGE_LEFT, SWIPE_EDGE_RIGHT)) {
+ if (value !in arrayOf(
+ SWIPE_EDGE_TOP,
+ SWIPE_EDGE_BOTTOM,
+ SWIPE_EDGE_LEFT,
+ SWIPE_EDGE_RIGHT
+ )
+ ) {
throw IllegalArgumentException("Edge flag is not valid; use one of the SWIPE_EDGE_* values")
}
field = value
@@ -275,7 +278,12 @@ internal class SwipeBackLayout @JvmOverloads constructor(
xOffset = 0
yOffset = contentOffset
}
- contentView.layout(xOffset, yOffset, xOffset + contentView.measuredWidth, yOffset + contentView.measuredHeight)
+ contentView.layout(
+ xOffset,
+ yOffset,
+ xOffset + contentView.measuredWidth,
+ yOffset + contentView.measuredHeight
+ )
inLayout = false
}
@@ -364,13 +372,21 @@ internal class SwipeBackLayout @JvmOverloads constructor(
return if (!horizontal) 1 else 0
}
- override fun onViewPositionChanged(changedView: View, left: Int, top: Int, dx: Int, dy: Int) {
+ override fun onViewPositionChanged(
+ changedView: View,
+ left: Int,
+ top: Int,
+ dx: Int,
+ dy: Int
+ ) {
super.onViewPositionChanged(changedView, left, top, dx, dy)
val contentView = contentViewRef.get()
?: return KL.e { "KauSwipe cannot change view position as contentView is null; is onPostCreate called?" }
// make sure that we are using the proper axis
- scrollPercent = abs(if (horizontal) left.toFloat() / contentView.width
- else (top.toFloat() / contentView.height))
+ scrollPercent = abs(
+ if (horizontal) left.toFloat() / contentView.width
+ else (top.toFloat() / contentView.height)
+ )
contentOffset = if (horizontal) left else top
invalidate()
if (scrollPercent < scrollThreshold && !isScrollOverValid)