diff options
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.kt | 45 |
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) + |