aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackHelper.kt
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackHelper.kt')
-rw-r--r--core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackHelper.kt45
1 files changed, 45 insertions, 0 deletions
diff --git a/core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackHelper.kt b/core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackHelper.kt
new file mode 100644
index 0000000..4a8b6dc
--- /dev/null
+++ b/core/src/main/kotlin/ca/allanwang/kau/swipe/SwipeBackHelper.kt
@@ -0,0 +1,45 @@
+package ca.allanwang.kau.swipe
+
+import android.app.Activity
+import ca.allanwang.kau.logging.KL
+import java.util.*
+
+class SwipeBackException(message: String = "You Should call SwipeBackHelper.onCreate(activity) first") : RuntimeException(message)
+
+object SwipeBackHelper {
+
+ private val pageStack = Stack<SwipeBackPage>()
+
+ private operator fun get(activity: Activity): SwipeBackPage
+ = pageStack.firstOrNull { it.activity === activity } ?: throw SwipeBackException()
+
+ fun getCurrentPage(activity: Activity): SwipeBackPage = this[activity]
+
+ fun onCreate(activity: Activity) {
+ pageStack.firstOrNull { it.activity === activity } ?: pageStack.push(SwipeBackPage(activity))
+// activity.window.exitTransition =
+ }
+
+ fun onPostCreate(activity: Activity) = this[activity].onPostCreate()
+
+ fun onDestroy(activity: Activity) {
+ KL.d("Swipe destroy")
+ val page: SwipeBackPage = this[activity]
+ pageStack.remove(page)
+ page.activity = null
+ }
+
+ fun finish(activity: Activity) = this[activity].scrollToFinishActivity()
+
+ internal fun getPrePage(activity: SwipeBackPage): SwipeBackPage? {
+ val index = pageStack.indexOf(activity)
+ return if (index > 0) pageStack[index - 1] else null
+ }
+
+}
+
+fun Activity.kauSwipeOnCreate() = SwipeBackHelper.onCreate(this)
+fun Activity.kauSwipeOnPostCreate() = SwipeBackHelper.onPostCreate(this)
+fun Activity.kauSwipeOnDestroy() = SwipeBackHelper.onDestroy(this)
+fun Activity.kauSwipeFinish() = SwipeBackHelper.finish(this)
+