mirror of
https://github.com/florisboard/florisboard.git
synced 2024-09-19 19:42:20 +02:00
Fix incorrect drawing behavior with display cutouts (#2533)
* Fix incorrect drawing behavior with display cutouts * Replace old conditional logic with new function
This commit is contained in:
parent
5215227793
commit
566b6fbae3
@ -23,6 +23,7 @@ import android.os.Bundle
|
|||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.displayCutoutPadding
|
||||||
import androidx.compose.foundation.layout.imePadding
|
import androidx.compose.foundation.layout.imePadding
|
||||||
import androidx.compose.foundation.layout.navigationBarsPadding
|
import androidx.compose.foundation.layout.navigationBarsPadding
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
@ -36,6 +37,7 @@ import androidx.compose.runtime.mutableStateOf
|
|||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.runtime.staticCompositionLocalOf
|
import androidx.compose.runtime.staticCompositionLocalOf
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.platform.LocalConfiguration
|
||||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
@ -46,17 +48,18 @@ import dev.patrickgold.florisboard.app.ext.ExtensionImportScreenType
|
|||||||
import dev.patrickgold.florisboard.app.setup.NotificationPermissionState
|
import dev.patrickgold.florisboard.app.setup.NotificationPermissionState
|
||||||
import dev.patrickgold.florisboard.cacheManager
|
import dev.patrickgold.florisboard.cacheManager
|
||||||
import dev.patrickgold.florisboard.lib.FlorisLocale
|
import dev.patrickgold.florisboard.lib.FlorisLocale
|
||||||
import org.florisboard.lib.android.AndroidVersion
|
|
||||||
import org.florisboard.lib.android.hideAppIcon
|
|
||||||
import org.florisboard.lib.android.showAppIcon
|
|
||||||
import dev.patrickgold.florisboard.lib.compose.LocalPreviewFieldController
|
import dev.patrickgold.florisboard.lib.compose.LocalPreviewFieldController
|
||||||
import dev.patrickgold.florisboard.lib.compose.PreviewKeyboardField
|
import dev.patrickgold.florisboard.lib.compose.PreviewKeyboardField
|
||||||
import dev.patrickgold.florisboard.lib.compose.ProvideLocalizedResources
|
import dev.patrickgold.florisboard.lib.compose.ProvideLocalizedResources
|
||||||
|
import dev.patrickgold.florisboard.lib.compose.conditional
|
||||||
import dev.patrickgold.florisboard.lib.compose.rememberPreviewFieldController
|
import dev.patrickgold.florisboard.lib.compose.rememberPreviewFieldController
|
||||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||||
import dev.patrickgold.florisboard.lib.util.AppVersionUtils
|
import dev.patrickgold.florisboard.lib.util.AppVersionUtils
|
||||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||||
import dev.patrickgold.jetpref.datastore.ui.ProvideDefaultDialogPrefStrings
|
import dev.patrickgold.jetpref.datastore.ui.ProvideDefaultDialogPrefStrings
|
||||||
|
import org.florisboard.lib.android.AndroidVersion
|
||||||
|
import org.florisboard.lib.android.hideAppIcon
|
||||||
|
import org.florisboard.lib.android.showAppIcon
|
||||||
|
|
||||||
enum class AppTheme(val id: String) {
|
enum class AppTheme(val id: String) {
|
||||||
AUTO("auto"),
|
AUTO("auto"),
|
||||||
@ -180,6 +183,9 @@ class FlorisAppActivity : ComponentActivity() {
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
//.statusBarsPadding()
|
//.statusBarsPadding()
|
||||||
.navigationBarsPadding()
|
.navigationBarsPadding()
|
||||||
|
.conditional(LocalConfiguration.current.orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
|
displayCutoutPadding()
|
||||||
|
}
|
||||||
.imePadding(),
|
.imePadding(),
|
||||||
) {
|
) {
|
||||||
Routes.AppNavHost(
|
Routes.AppNavHost(
|
||||||
|
@ -31,6 +31,7 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
import dev.patrickgold.florisboard.ime.keyboard.KeyboardState
|
import dev.patrickgold.florisboard.ime.keyboard.KeyboardState
|
||||||
|
import dev.patrickgold.florisboard.lib.compose.conditional
|
||||||
|
|
||||||
private val SheetOutOfBoundsBgColorInactive = Color(0x00000000)
|
private val SheetOutOfBoundsBgColorInactive = Color(0x00000000)
|
||||||
private val SheetOutOfBoundsBgColorActive = Color(0x52000000)
|
private val SheetOutOfBoundsBgColorActive = Color(0x52000000)
|
||||||
@ -53,16 +54,13 @@ fun BottomSheetHostUi(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.weight(1f)
|
.weight(1f)
|
||||||
.then(
|
.conditional(isShowing) {
|
||||||
if (isShowing) {
|
pointerInput(Unit) {
|
||||||
Modifier.pointerInput(Unit) {
|
|
||||||
detectTapGestures {
|
detectTapGestures {
|
||||||
onHide()
|
onHide()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
},
|
||||||
Modifier
|
|
||||||
}),
|
|
||||||
)
|
)
|
||||||
AnimatedVisibility(
|
AnimatedVisibility(
|
||||||
visible = isShowing,
|
visible = isShowing,
|
||||||
|
@ -55,6 +55,7 @@ import dev.patrickgold.florisboard.ime.nlp.SuggestionCandidate
|
|||||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
|
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme
|
||||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
||||||
import dev.patrickgold.florisboard.keyboardManager
|
import dev.patrickgold.florisboard.keyboardManager
|
||||||
|
import dev.patrickgold.florisboard.lib.compose.conditional
|
||||||
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
|
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
|
||||||
import dev.patrickgold.florisboard.lib.compose.safeTimes
|
import dev.patrickgold.florisboard.lib.compose.safeTimes
|
||||||
import dev.patrickgold.florisboard.lib.observeAsNonNullState
|
import dev.patrickgold.florisboard.lib.observeAsNonNullState
|
||||||
@ -98,13 +99,9 @@ fun CandidatesRow(modifier: Modifier = Modifier) {
|
|||||||
modifier = modifier
|
modifier = modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.snyggBackground(context, rowStyle)
|
.snyggBackground(context, rowStyle)
|
||||||
.then(
|
.conditional(displayMode == CandidatesDisplayMode.DYNAMIC_SCROLLABLE && candidates.size > 1) {
|
||||||
if (displayMode == CandidatesDisplayMode.DYNAMIC_SCROLLABLE && candidates.size > 1) {
|
florisHorizontalScroll(scrollbarHeight = CandidatesRowScrollbarHeight)
|
||||||
Modifier.florisHorizontalScroll(scrollbarHeight = CandidatesRowScrollbarHeight)
|
},
|
||||||
} else {
|
|
||||||
Modifier
|
|
||||||
}
|
|
||||||
),
|
|
||||||
horizontalArrangement = if (candidates.size > 1) {
|
horizontalArrangement = if (candidates.size > 1) {
|
||||||
Arrangement.Start
|
Arrangement.Start
|
||||||
} else {
|
} else {
|
||||||
@ -119,13 +116,12 @@ fun CandidatesRow(modifier: Modifier = Modifier) {
|
|||||||
} else {
|
} else {
|
||||||
Modifier
|
Modifier
|
||||||
.fillMaxHeight()
|
.fillMaxHeight()
|
||||||
.then(
|
.conditional(displayMode == CandidatesDisplayMode.CLASSIC) {
|
||||||
if (displayMode == CandidatesDisplayMode.CLASSIC) {
|
weight(1f)
|
||||||
Modifier.weight(1f)
|
}
|
||||||
} else {
|
.conditional(displayMode != CandidatesDisplayMode.CLASSIC) {
|
||||||
Modifier.wrapContentWidth().widthIn(max = 160.dp)
|
wrapContentWidth().widthIn(max = 160.dp)
|
||||||
}
|
}
|
||||||
)
|
|
||||||
}
|
}
|
||||||
val list = when (displayMode) {
|
val list = when (displayMode) {
|
||||||
CandidatesDisplayMode.CLASSIC -> candidates.subList(0, 3.coerceAtMost(candidates.size))
|
CandidatesDisplayMode.CLASSIC -> candidates.subList(0, 3.coerceAtMost(candidates.size))
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
package dev.patrickgold.florisboard.lib.compose
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun Modifier.conditional(
|
||||||
|
condition: Boolean,
|
||||||
|
modifier: @Composable Modifier.() -> Modifier
|
||||||
|
): Modifier =
|
||||||
|
if (condition) then(modifier(Modifier)) else this
|
Loading…
Reference in New Issue
Block a user