fix(android): stabilize chat ime insets and tab bar

This commit is contained in:
Ayaan Zaidi
2026-02-25 13:45:42 +05:30
committed by Ayaan Zaidi
parent 959cbafcdb
commit 7725c0b9b3
3 changed files with 16 additions and 18 deletions

View File

@@ -50,7 +50,7 @@
<activity
android:name=".MainActivity"
android:exported="true"
android:windowSoftInputMode="adjustNothing"
android:windowSoftInputMode="adjustResize"
android:configChanges="orientation|screenSize|screenLayout|smallestScreenSize|uiMode|density|keyboard|keyboardHidden|navigation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@@ -7,6 +7,7 @@ import android.webkit.WebView
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.core.view.WindowCompat
import androidx.compose.material3.Surface
import androidx.compose.ui.Modifier
import androidx.lifecycle.Lifecycle
@@ -23,6 +24,7 @@ class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
val isDebuggable = (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE) != 0
WebView.setWebContentsDebuggingEnabled(isDebuggable)
NodeForegroundService.start(this)

View File

@@ -18,6 +18,7 @@ import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ScreenShare
@@ -83,6 +84,10 @@ fun PostOnboardingTabs(viewModel: MainViewModel, modifier: Modifier = Modifier)
}
}
val density = LocalDensity.current
val imeVisible = WindowInsets.ime.getBottom(density) > 0
val hideBottomTabBar = activeTab == HomeTab.Chat && imeVisible
Scaffold(
modifier = modifier,
containerColor = Color.Transparent,
@@ -94,29 +99,20 @@ fun PostOnboardingTabs(viewModel: MainViewModel, modifier: Modifier = Modifier)
)
},
bottomBar = {
BottomTabBar(
activeTab = activeTab,
onSelect = { activeTab = it },
)
if (!hideBottomTabBar) {
BottomTabBar(
activeTab = activeTab,
onSelect = { activeTab = it },
)
}
},
) { innerPadding ->
val density = LocalDensity.current
val imeVisible = WindowInsets.ime.getBottom(density) > 0
val contentBottomPadding =
if (activeTab == HomeTab.Chat && imeVisible) {
0.dp
} else {
innerPadding.calculateBottomPadding()
}
Box(
modifier =
Modifier
.fillMaxSize()
.padding(
top = innerPadding.calculateTopPadding(),
bottom = contentBottomPadding,
)
.padding(innerPadding)
.consumeWindowInsets(innerPadding)
.background(mobileBackgroundGradient),
) {
when (activeTab) {