diff --git a/navigation/src/main/java/ru/touchin/roboswag/components/navigation/keyboard_resizeable/KeyboardBehaviorDetector.kt b/navigation/src/main/java/ru/touchin/roboswag/components/navigation/keyboard_resizeable/KeyboardBehaviorDetector.kt index ab0aac9..cc6880d 100644 --- a/navigation/src/main/java/ru/touchin/roboswag/components/navigation/keyboard_resizeable/KeyboardBehaviorDetector.kt +++ b/navigation/src/main/java/ru/touchin/roboswag/components/navigation/keyboard_resizeable/KeyboardBehaviorDetector.kt @@ -2,6 +2,9 @@ package ru.touchin.roboswag.components.navigation.keyboard_resizeable import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.OnLifecycleEvent import ru.touchin.roboswag.components.navigation.activities.BaseActivity /** @@ -11,18 +14,18 @@ import ru.touchin.roboswag.components.navigation.activities.BaseActivity */ class KeyboardBehaviorDetector( activity: BaseActivity -) { +) : LifecycleObserver { private val view = activity.window.decorView var keyboardHideListener: (() -> Unit)? = null var keyboardShowListener: ((Int) -> Unit)? = null + // -1 when we never measure insets yet var startNavigationBarHeight = -1 private set - private val listener = { isKeyboardOpen: Boolean, - windowInsets: WindowInsetsCompat -> + private val listener = { isKeyboardOpen: Boolean, windowInsets: WindowInsetsCompat -> if (isKeyboardOpen) { keyboardShowListener?.invoke( windowInsets.systemWindowInsetBottom - startNavigationBarHeight @@ -32,7 +35,7 @@ class KeyboardBehaviorDetector( } } - // Call this in "onResume()" of a fragment + @OnLifecycleEvent(Lifecycle.Event.ON_START) fun startDetection() { ViewCompat.setOnApplyWindowInsetsListener(view) { _, windowInsets -> val bottomInset = windowInsets.systemWindowInsetBottom @@ -45,7 +48,7 @@ class KeyboardBehaviorDetector( ViewCompat.requestApplyInsets(view) } - // Call this in "onPause()" of a fragment + @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) fun stopDetection() { ViewCompat.setOnApplyWindowInsetsListener(view, null) } diff --git a/navigation/src/main/java/ru/touchin/roboswag/components/navigation/keyboard_resizeable/KeyboardResizeableViewController.kt b/navigation/src/main/java/ru/touchin/roboswag/components/navigation/keyboard_resizeable/KeyboardResizeableViewController.kt index 1378fe7..df2e56a 100644 --- a/navigation/src/main/java/ru/touchin/roboswag/components/navigation/keyboard_resizeable/KeyboardResizeableViewController.kt +++ b/navigation/src/main/java/ru/touchin/roboswag/components/navigation/keyboard_resizeable/KeyboardResizeableViewController.kt @@ -3,6 +3,7 @@ package ru.touchin.roboswag.components.navigation.keyboard_resizeable import android.os.Build import android.os.Parcelable import androidx.annotation.LayoutRes +import androidx.lifecycle.LifecycleObserver import ru.touchin.roboswag.components.navigation.activities.BaseActivity import ru.touchin.roboswag.components.navigation.activities.OnBackPressedListener import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewController @@ -19,6 +20,7 @@ abstract class KeyboardResizeableViewController= Build.VERSION_CODES.KITKAT_WATCH) { creationContext.container?.requestApplyInsets() } + lifecycle.addObserver(activity.keyboardBehaviorDetector as LifecycleObserver) } private var keyboardIsVisible: Boolean = false @@ -66,7 +68,6 @@ abstract class KeyboardResizeableViewController