11package com.patch4code.logline.features.search.presentation.utils
22
3+ import android.os.Handler
4+ import android.os.Looper
35import android.view.ViewTreeObserver
46import androidx.compose.runtime.Composable
57import androidx.compose.runtime.DisposableEffect
8+ import androidx.compose.runtime.getValue
9+ import androidx.compose.runtime.mutableStateOf
10+ import androidx.compose.runtime.remember
11+ import androidx.compose.runtime.setValue
612import androidx.compose.ui.platform.LocalView
713import androidx.core.view.ViewCompat
814import androidx.core.view.WindowInsetsCompat
@@ -19,15 +25,24 @@ fun KeyboardVisibilityObserver(onKeyboardOpened:()->Unit = {}, onKeyboardClosed:
1925
2026 val view = LocalView .current
2127 val viewTreeObserver = view.viewTreeObserver
28+
29+ var lastKeyboardState by remember { mutableStateOf(false ) }
30+
2231 DisposableEffect (viewTreeObserver) {
2332 val listener = ViewTreeObserver .OnGlobalLayoutListener {
2433 val isKeyboardOpen = ViewCompat .getRootWindowInsets(view)
2534 ?.isVisible(WindowInsetsCompat .Type .ime()) ? : true
2635
2736 if (isKeyboardOpen) {
37+ lastKeyboardState = true
2838 onKeyboardOpened()
29- } else {
30- onKeyboardClosed()
39+ } else if (lastKeyboardState) {
40+ lastKeyboardState = false
41+
42+ // Delay to prevent split screen keyboard problems
43+ Handler (Looper .getMainLooper()).postDelayed({
44+ onKeyboardClosed()
45+ }, 200 )
3146 }
3247 }
3348 viewTreeObserver.addOnGlobalLayoutListener(listener)
0 commit comments