Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

droidcon/eliza #286

Merged
merged 2 commits into from
Jul 3, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.view.ViewTreeObserver
import androidx.activity.ComponentActivity
import androidx.activity.compose.BackHandler
import androidx.activity.compose.setContent
Expand Down Expand Up @@ -62,12 +63,15 @@ import androidx.compose.material3.windowsizeclass.WindowSizeClass
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand All @@ -78,6 +82,10 @@ import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.platform.LocalWindowInfo
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.SpanStyle
Expand All @@ -90,6 +98,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.DialogProperties
import androidx.compose.ui.zIndex
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.ban.autosizetextfield.AutoSizeTextField
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
import com.mikepenz.aboutlibraries.ui.compose.m3.LibraryDefaults.libraryColors
Expand Down Expand Up @@ -519,6 +529,8 @@ private fun ZePages(
.padding(paddingValues),
) {
val uiState by vm.uiState.collectAsState() // should be replace with 'collectAsStateWithLifecycle'
val isKeyboardVisible by isKeyboardVisibleState()
val keyboardController = LocalSoftwareKeyboardController.current

val editor = uiState.currentSlotEditor
val templateChooser = uiState.currentTemplateChooser
Expand All @@ -527,6 +539,10 @@ private fun ZePages(
val slots = uiState.slots
val badgeConfiguration = uiState.currentBadgeConfig

if (isKeyboardVisible && editor == null && templateChooser == null) {
keyboardController?.hide()
}

if (badgeConfiguration != null) {
BadgeConfigEditor(
config = badgeConfiguration,
Expand Down Expand Up @@ -961,3 +977,22 @@ private val WindowSizeClass.isTabletSize: Boolean
private val WindowSizeClass.isSmartphoneSize: Boolean
get() = this.widthSizeClass in WindowWidthSizeClass.DefaultSizeClasses &&
(this.heightSizeClass == WindowHeightSizeClass.Compact)

@Composable
private fun isKeyboardVisibleState(): State<Boolean> {
val view = LocalView.current
var isImeVisible by remember { mutableStateOf(false) }

DisposableEffect(LocalWindowInfo.current) {
val listener = ViewTreeObserver.OnPreDrawListener {
isImeVisible = ViewCompat.getRootWindowInsets(view)
?.isVisible(WindowInsetsCompat.Type.ime()) == true
true
}
view.viewTreeObserver.addOnPreDrawListener(listener)
onDispose {
view.viewTreeObserver.removeOnPreDrawListener(listener)
}
}
return rememberUpdatedState(isImeVisible)
}
Loading