diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt index 6956ba6ba5..e306af0e9c 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt @@ -19,6 +19,7 @@ import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.plus import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @@ -65,6 +66,8 @@ import io.element.android.libraries.designsystem.theme.components.HorizontalFloa import io.element.android.libraries.designsystem.theme.components.HorizontalFloatingToolbarSeparator import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Scaffold +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState import io.element.android.libraries.matrix.api.core.RoomId @@ -234,7 +237,15 @@ private fun HomeScaffold( ) }, floatingActionButtonPosition = FabPosition.Center, + contentWindowInsets = scaffoldScrollableContentInsets, content = { padding -> + val outerPadding = PaddingValues( + start = padding.calculateStartPadding(LocalLayoutDirection.current), + end = padding.calculateEndPadding(LocalLayoutDirection.current), + // Remove these two lines once https://issuetracker.google.com/issues/436432313 has been fixed + bottom = padding.calculateBottomPadding(), + top = padding.calculateTopPadding() + ) val contentPadding = PaddingValues( bottom = 96.dp, ) @@ -251,18 +262,10 @@ private fun HomeScaffold( onConfirmRecoveryKeyClick = onConfirmRecoveryKeyClick, onRoomClick = ::onRoomClick, onCreateRoomClick = onStartChatClick, - contentPadding = contentPadding, + contentPadding = lazyColumnContentPadding + contentPadding, modifier = Modifier - .padding( - PaddingValues( - start = padding.calculateStartPadding(LocalLayoutDirection.current), - end = padding.calculateEndPadding(LocalLayoutDirection.current), - // Remove these two lines once https://issuetracker.google.com/issues/436432313 has been fixed - bottom = padding.calculateBottomPadding(), - top = padding.calculateTopPadding() - ) - ) - .consumeWindowInsets(padding) + .padding(outerPadding) + .consumeWindowInsets(outerPadding) .hazeSource(state = hazeState) ) SpaceFiltersView(roomListState.spaceFiltersState) @@ -271,8 +274,8 @@ private fun HomeScaffold( HomeSpacesView( modifier = Modifier .fillMaxSize() - .padding(padding) - .consumeWindowInsets(padding) + .padding(outerPadding) + .consumeWindowInsets(outerPadding) .hazeSource(state = hazeState), contentPadding = contentPadding, state = state.homeSpacesState, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchView.kt index f67338ef21..0535ded5c5 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchView.kt @@ -13,9 +13,15 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState @@ -153,7 +159,8 @@ private fun RoomListSearchContent( } }, ) - } + }, + contentWindowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Bottom), ) { padding -> Column( modifier = Modifier @@ -167,6 +174,7 @@ private fun RoomListSearchContent( LazyColumn( state = lazyListState, modifier = Modifier.weight(1f), + contentPadding = WindowInsets.navigationBars.asPaddingValues(), ) { items( items = state.results, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spacefilters/SpaceFiltersView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spacefilters/SpaceFiltersView.kt index c8d710fced..280f41b909 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spacefilters/SpaceFiltersView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spacefilters/SpaceFiltersView.kt @@ -15,9 +15,7 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items @@ -45,6 +43,8 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet import io.element.android.libraries.designsystem.theme.components.SearchField import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.api.spaces.SpaceServiceFilter import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.ui.strings.CommonStrings @@ -75,9 +75,7 @@ fun SpaceFiltersView( } if (sheetState.isVisible || isSelecting) { ModalBottomSheet( - modifier = modifier - .systemBarsPadding() - .navigationBarsPadding(), + modifier = modifier, sheetState = sheetState, onDismissRequest = { if (state is SpaceFiltersState.Selecting) { @@ -85,6 +83,7 @@ fun SpaceFiltersView( } }, scrollable = false, + contentWindowInsets = { scaffoldScrollableContentInsets }, ) { Box( modifier = Modifier @@ -113,7 +112,7 @@ private fun SpaceFiltersBottomSheetContent( modifier: Modifier = Modifier ) { Column( - modifier = modifier.padding(vertical = 16.dp) + modifier = modifier.padding(top = 16.dp) ) { Text( text = stringResource(R.string.screen_roomlist_your_spaces), @@ -131,7 +130,9 @@ private fun SpaceFiltersBottomSheetContent( placeholder = stringResource(CommonStrings.action_search), ) Spacer(modifier = Modifier.height(16.dp)) - LazyColumn { + LazyColumn( + contentPadding = lazyColumnContentPadding, + ) { items(filters) { filter -> SpaceFilterItem( filter = filter, diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt index 1ccc0742d6..db40596892 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt @@ -23,6 +23,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.plus import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn @@ -73,6 +74,8 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.ImmutableList @@ -94,7 +97,8 @@ fun KnockRequestsListView( .padding(padding) .consumeWindowInsets(padding), ) - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) } @@ -132,7 +136,7 @@ private fun KnockRequestsListContent( onAcceptClick = ::onAcceptClick, onDeclineClick = ::onDeclineClick, onBanClick = ::onBanClick, - contentPadding = PaddingValues(bottom = bottomPaddingInPixels.toDp()), + contentPadding = lazyColumnContentPadding + PaddingValues(bottom = bottomPaddingInPixels.toDp()), ) } } diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsView.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsView.kt index f463a6b8d1..e1d445ea1f 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsView.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsView.kt @@ -9,7 +9,7 @@ package io.element.android.features.licenses.impl.details import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.plus import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.ExperimentalMaterial3Api @@ -25,6 +25,8 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -41,9 +43,10 @@ fun DependenciesDetailsView( navigationIcon = { BackButton(onClick = onBack) }, ) }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { contentPadding -> LazyColumn( - modifier = Modifier.padding(contentPadding), + contentPadding = contentPadding + lazyColumnContentPadding, ) { val licenses = licenseItem.licenses.orEmpty() + licenseItem.unknownLicenses.orEmpty() diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListView.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListView.kt index f60c28ef2b..b732588217 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListView.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListView.kt @@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.plus import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.ExperimentalMaterial3Api @@ -34,6 +35,8 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextField import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.ui.strings.CommonStrings @OptIn(ExperimentalMaterial3Api::class) @@ -52,10 +55,11 @@ fun DependencyLicensesListView( navigationIcon = { BackButton(onClick = onBackClick) }, ) }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { contentPadding -> Column( modifier = Modifier - .padding(contentPadding) + .padding(contentPadding + lazyColumnContentPadding) .padding(horizontal = 16.dp) ) { if (state.licenses.isSuccess()) { @@ -72,7 +76,9 @@ fun DependencyLicensesListView( modifier = Modifier.fillMaxWidth(), ) } - LazyColumn { + LazyColumn( + contentPadding = lazyColumnContentPadding, + ) { when (state.licenses) { is AsyncData.Failure -> item { Text( diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderView.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderView.kt index 4f6c87ac73..212bab515d 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderView.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderView.kt @@ -39,6 +39,8 @@ import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets /** * https://www.figma.com/file/o9p34zmiuEpZRyvZXJZAYL/FTUE?type=design&node-id=604-60817 @@ -59,7 +61,8 @@ fun ChangeAccountProviderView( title = {}, navigationIcon = { BackButton(onClick = onBackClick) } ) - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { padding -> Box( modifier = Modifier @@ -71,6 +74,7 @@ fun ChangeAccountProviderView( Column( modifier = Modifier .verticalScroll(state = rememberScrollState()) + .padding(lazyColumnContentPadding) ) { IconTitleSubtitleMolecule( modifier = Modifier.padding(top = 16.dp, bottom = 32.dp, start = 16.dp, end = 16.dp), diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderView.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderView.kt index 17e7d10efb..e858789bb4 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderView.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderView.kt @@ -44,6 +44,8 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.api.auth.OAuthDetails import io.element.android.libraries.permissions.api.localnetwork.LocalNetworkPermissionDialogView import io.element.android.libraries.ui.strings.CommonStrings @@ -71,7 +73,8 @@ fun ChooseAccountProviderView( title = {}, navigationIcon = { BackButton(onClick = onBackClick) } ) - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { padding -> Box( modifier = Modifier @@ -84,6 +87,7 @@ fun ChooseAccountProviderView( modifier = Modifier .fillMaxSize() .verticalScroll(state = rememberScrollState()) + .padding(lazyColumnContentPadding) ) { IconTitleSubtitleMolecule( modifier = Modifier.padding(top = 16.dp, bottom = 32.dp, start = 16.dp, end = 16.dp), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt index 358eba9c25..1d5cb9c67f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt @@ -19,7 +19,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -27,7 +26,6 @@ import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.material3.MaterialTheme @@ -112,6 +110,7 @@ import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.utils.HideKeyboardWhenDisposed import io.element.android.libraries.designsystem.utils.KeepScreenOn import io.element.android.libraries.designsystem.utils.OnLifecycleEvent +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState import io.element.android.libraries.matrix.api.core.EventId @@ -226,7 +225,7 @@ fun MessagesView( }, content = { Scaffold( - contentWindowInsets = WindowInsets.statusBars, + contentWindowInsets = scaffoldScrollableContentInsets, topBar = { if (state.timelineState.timelineMode is Timeline.Mode.Thread) { ThreadTopBar( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt index dae2ceb836..d35cda87bc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt @@ -10,9 +10,13 @@ package io.element.android.features.messages.impl.pinned.list import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.plus import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState @@ -47,6 +51,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.ui.strings.CommonStrings @@ -90,7 +95,8 @@ fun PinnedMessagesListView( .padding(padding) .consumeWindowInsets(padding), ) - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) } @@ -206,11 +212,12 @@ private fun PinnedMessagesListLoaded( onEmojiReactionClick = { _, _ -> }, onVerifiedUserSendFailureClick = {} ) + LazyColumn( modifier = modifier.fillMaxSize(), state = rememberLazyListState(), reverseLayout = true, - contentPadding = PaddingValues(vertical = 8.dp), + contentPadding = WindowInsets.navigationBars.asPaddingValues() + PaddingValues(vertical = 8.dp), ) { items( items = state.timelineItems, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt index dd44fe0af3..6480dacfcf 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt @@ -16,6 +16,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.plus import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn @@ -54,6 +55,8 @@ import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.core.UserId @@ -129,14 +132,15 @@ fun ThreadsListView( }, navigationIcon = { BackButton(onBackClick) - } + }, + windowInsets = scaffoldScrollableContentInsets, ) } ) { padding -> val lazyListState = rememberLazyListState() LazyColumn( modifier = Modifier.fillMaxSize(), - contentPadding = padding, + contentPadding = padding + lazyColumnContentPadding, state = lazyListState, ) { itemsIndexed(state.threads, key = { _, row -> row.item.threadId }) { index, row -> diff --git a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/ui/ConnectivityIndicatorContainer.kt b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/ui/ConnectivityIndicatorContainer.kt index 7c3ff4a988..7d05fa7298 100644 --- a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/ui/ConnectivityIndicatorContainer.kt +++ b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/ui/ConnectivityIndicatorContainer.kt @@ -19,16 +19,15 @@ import androidx.compose.animation.fadeOut import androidx.compose.animation.shrinkVertically import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.consumeWindowInsets -import androidx.compose.foundation.layout.statusBars import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.unit.dp +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets private val INDICATOR_VERTICAL_PADDING = 6.dp @@ -47,7 +46,7 @@ fun ConnectivityIndicatorContainer( // Needed to get valid UI previews 24.dp } else { - WindowInsets.statusBars.asPaddingValues().calculateTopPadding() + INDICATOR_VERTICAL_PADDING + scaffoldScrollableContentInsets.asPaddingValues().calculateTopPadding() + INDICATOR_VERTICAL_PADDING } val target = if (isIndicatorVisible.targetState) statusBarTopPadding else 0.dp val topWindowInset by animateDpAsState( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt index e55144985a..412006feae 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt @@ -78,6 +78,8 @@ import io.element.android.libraries.designsystem.theme.components.ListItemStyle import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState import io.element.android.libraries.matrix.api.core.RoomAlias @@ -135,12 +137,14 @@ fun RoomDetailsView( ) }, snackbarHost = { SnackbarHost(snackbarHostState) }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { padding -> Column( modifier = Modifier .padding(padding) .verticalScroll(rememberScrollState()) .consumeWindowInsets(padding) + .padding(lazyColumnContentPadding) ) { leaveRoomView() diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt index 0e6f5b6c88..35150f42af 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt @@ -50,6 +50,8 @@ import io.element.android.libraries.designsystem.theme.components.SegmentedButto import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.encryption.identity.IdentityState import io.element.android.libraries.matrix.api.room.RoomMember @@ -78,7 +80,8 @@ fun RoomMemberListView( onBackClick = navigator::exitRoomMemberList, onInviteClick = navigator::openInviteMembers, ) - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { padding -> Column( modifier = Modifier @@ -115,7 +118,11 @@ private fun RoomMemberList( onSelectedSectionChange: (SelectedSection) -> Unit, onSelectUser: (RoomMember) -> Unit, ) { - LazyColumn(modifier = Modifier.fillMaxWidth(), state = rememberLazyListState()) { + LazyColumn( + modifier = Modifier.fillMaxWidth(), + state = rememberLazyListState(), + contentPadding = lazyColumnContentPadding, + ) { stickyHeader { Column { AnimatedVisibility(visible = showBannedSection) { diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt index f2e4ae44fa..dd9098b7ad 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt @@ -52,6 +52,8 @@ import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.ImmutableList @@ -76,7 +78,8 @@ fun RoomDirectoryView( .padding(padding) .consumeWindowInsets(padding) ) - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) } @@ -127,7 +130,10 @@ private fun RoomDirectoryRoomList( onReachedLoadMore: () -> Unit, modifier: Modifier = Modifier, ) { - LazyColumn(modifier = modifier) { + LazyColumn( + modifier = modifier, + contentPadding = lazyColumnContentPadding, + ) { items(roomDescriptions) { roomDescription -> RoomDirectoryRoomRow( roomDescription = roomDescription, diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt index 9b0686a64f..22f7439b2a 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt @@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding -import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api @@ -228,7 +227,7 @@ private fun RoomMemberActionsBottomSheet( enabledValues = setOf(SheetValue.Hidden, SheetValue.Expanded), ) ModalBottomSheet( - modifier = Modifier.systemBarsPadding(), + modifier = Modifier.statusBarsPadding(), sheetState = bottomSheetState, onDismissRequest = { coroutineScope.launch { diff --git a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyView.kt b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyView.kt index f4207ae3af..45fce0ca01 100644 --- a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyView.kt +++ b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyView.kt @@ -54,6 +54,8 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.ImmutableList @@ -78,14 +80,16 @@ fun SecurityAndPrivacyView( state.eventSink(SecurityAndPrivacyEvent.Save) }, ) - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { padding -> Column( modifier = Modifier .padding(padding) .imePadding() .verticalScroll(rememberScrollState()) - .consumeWindowInsets(padding), + .consumeWindowInsets(padding) + .padding(lazyColumnContentPadding), verticalArrangement = Arrangement.spacedBy(32.dp), ) { if (state.showRoomAccessSection) { diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpaceView.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpaceView.kt index 47c78e6fb8..eb485f11b5 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpaceView.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/addroom/AddRoomToSpaceView.kt @@ -47,6 +47,8 @@ import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.utils.OnVisibleRangeChangeEffect +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.ui.components.SelectedRoom import io.element.android.libraries.matrix.ui.model.SelectRoomInfo import io.element.android.libraries.matrix.ui.model.getAvatarData @@ -101,7 +103,8 @@ fun AddRoomToSpaceView( ) } ) - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { paddingValues -> Column( Modifier @@ -130,7 +133,9 @@ fun AddRoomToSpaceView( OnVisibleRangeChangeEffect(lazyListState) { visibleRange -> state.eventSink(AddRoomToSpaceEvent.UpdateSearchVisibleRange(visibleRange)) } - LazyColumn { + LazyColumn( + contentPadding = lazyColumnContentPadding, + ) { items(rooms, key = { it.roomId }) { roomInfo -> RoomListItem( roomInfo = roomInfo, diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceView.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceView.kt index 29898a1f63..fe971091f5 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceView.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceView.kt @@ -82,6 +82,8 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomInfo import io.element.android.libraries.matrix.api.spaces.SpaceRoom @@ -157,6 +159,7 @@ fun SpaceView( } } }, + contentWindowInsets = scaffoldScrollableContentInsets, content = { padding -> Box( modifier = Modifier.padding(padding) @@ -251,7 +254,10 @@ private fun SpaceViewContent( onAddRoomClick: () -> Unit, modifier: Modifier = Modifier, ) { - LazyColumn(modifier.fillMaxSize()) { + LazyColumn( + modifier = modifier.fillMaxSize(), + contentPadding = lazyColumnContentPadding, + ) { val spaceInfo = state.spaceInfo item(key = "space_header") { AnimatedVisibility( diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsView.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsView.kt index 63b83516ac..ace3a1f670 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsView.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsView.kt @@ -43,6 +43,8 @@ import io.element.android.libraries.designsystem.theme.components.ListItemStyle import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.ui.strings.CommonStrings @@ -62,11 +64,13 @@ fun SpaceSettingsView( topBar = { SpaceSettingsTopBar(onBackClick = onBackClick) }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { padding -> Column( modifier = Modifier .padding(padding) .verticalScroll(rememberScrollState()) + .padding(lazyColumnContentPadding) ) { SpaceInfoSection( roomId = state.roomId, diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/components/UserListView.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/components/UserListView.kt index cab1c57015..d33bd10856 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/components/UserListView.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/components/UserListView.kt @@ -10,7 +10,10 @@ package io.element.android.features.startchat.impl.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -76,7 +79,9 @@ fun UserListView( ) } if (!state.isSearchActive && state.recentDirectRooms.isNotEmpty()) { - LazyColumn { + LazyColumn( + contentPadding = WindowInsets.navigationBars.asPaddingValues(), + ) { item { ListSectionHeader( title = stringResource(id = CommonStrings.common_suggestions), diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatView.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatView.kt index 7537fee524..1878c6688e 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatView.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatView.kt @@ -45,6 +45,7 @@ import io.element.android.libraries.designsystem.theme.components.ListSectionHea import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.ui.components.CreateDmConfirmationBottomSheet import io.element.android.libraries.matrix.ui.components.MatrixUserRow @@ -71,7 +72,8 @@ fun StartChatView( if (!state.userListState.isSearchActive) { CreateRoomRootViewTopBar(onCloseClick = onCloseClick) } - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { paddingValues -> Column( modifier = Modifier diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt index 24477b4339..61dff418b1 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt @@ -10,13 +10,11 @@ package io.element.android.libraries.designsystem.components.preferences import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBars -import androidx.compose.foundation.layout.systemBarsPadding +import androidx.compose.foundation.layout.plus import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api @@ -34,6 +32,8 @@ import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets @Composable fun PreferencePage( @@ -46,9 +46,8 @@ fun PreferencePage( Scaffold( modifier = modifier .fillMaxSize() - .systemBarsPadding() .imePadding(), - contentWindowInsets = WindowInsets.statusBars, + contentWindowInsets = scaffoldScrollableContentInsets, topBar = { PreferenceTopAppBar( title = title, @@ -56,12 +55,12 @@ fun PreferencePage( ) }, snackbarHost = snackbarHost, - content = { + content = { contentPadding -> Column( modifier = Modifier - .padding(it) - .consumeWindowInsets(it) .verticalScroll(state = rememberScrollState()) + .padding(contentPadding + lazyColumnContentPadding) + .consumeWindowInsets(contentPadding + lazyColumnContentPadding) ) { content() } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/Insets.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/Insets.kt new file mode 100644 index 0000000000..69160c902e --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/Insets.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.designsystem.utils + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.safeDrawing +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.runtime.Composable +import io.element.android.libraries.designsystem.theme.components.Scaffold + +/** + * Content insets meant to be used for [Column] or [LazyColumn] components that are used as the main content of a screen, + * to avoid overlapping with navigation bars, IME or cut-out display parts, but ignoring the status bar. + * + * Counterpart of [scaffoldScrollableContentInsets] for [Column] or [LazyColumn] components. + */ +val lazyColumnContentPadding @Composable + get() = WindowInsets.safeDrawing + .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Bottom) + .asPaddingValues() + +/** + * Content insets meant to be used for [Scaffold] components that contain some content that is scrollable like [Column] or [LazyColumn], + * and this content should handle its own content padding. The insets will only apply the top padding to avoid overlapping with the status bar, + * while ignoring navigation bars, IME or cut-out display parts. + * + * Counterpart of [lazyColumnContentPadding] for [Scaffold] components. + */ +val scaffoldScrollableContentInsets @Composable + get() = WindowInsets.safeDrawing + .only(WindowInsetsSides.Top) diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryView.kt index 046a487502..2cddde495e 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryView.kt @@ -14,11 +14,14 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn @@ -67,6 +70,7 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.SegmentedButton import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState import io.element.android.libraries.matrix.api.timeline.Timeline @@ -125,6 +129,7 @@ fun MediaGalleryView( }, ) }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { paddingValues -> Column( modifier = Modifier @@ -320,6 +325,7 @@ private fun MediaGalleryFilesList( val presenterFactories = LocalMediaItemPresenterFactories.current LazyColumn( modifier = Modifier.fillMaxSize(), + contentPadding = WindowInsets.navigationBars.asPaddingValues(), ) { items( items = files, @@ -396,6 +402,7 @@ private fun MediaGalleryImageGrid( columns = GridCells.Adaptive(80.dp), horizontalArrangement = Arrangement.spacedBy(4.dp), verticalArrangement = Arrangement.spacedBy(4.dp), + contentPadding = WindowInsets.navigationBars.asPaddingValues(), ) { items( items = imagesAndVideos, diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt index 508fcd4fc2..7153306746 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt @@ -53,6 +53,8 @@ import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.utils.OnVisibleRangeChangeEffect +import io.element.android.libraries.designsystem.utils.lazyColumnContentPadding +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.ui.components.SelectedRoom import io.element.android.libraries.matrix.ui.model.SelectRoomInfo @@ -133,7 +135,8 @@ fun RoomSelectView( ) } ) - } + }, + contentWindowInsets = scaffoldScrollableContentInsets, ) { paddingValues -> Column( Modifier @@ -149,7 +152,10 @@ fun RoomSelectView( resultState = state.resultState, showBackButton = false, ) { summaries -> - LazyColumn(state = lazyListState) { + LazyColumn( + state = lazyListState, + contentPadding = lazyColumnContentPadding, + ) { item { SelectedRoomsHelper( selectedRooms = state.selectedRooms, diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryView.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryView.kt index 9105653516..7dfb8419dd 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryView.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryView.kt @@ -11,14 +11,12 @@ package io.element.android.libraries.troubleshoot.impl.history import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items @@ -50,6 +48,7 @@ import io.element.android.libraries.designsystem.theme.components.ListItem import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar +import io.element.android.libraries.designsystem.utils.scaffoldScrollableContentInsets import io.element.android.libraries.push.api.history.PushHistoryItem import io.element.android.libraries.troubleshoot.impl.R import io.element.android.libraries.ui.strings.CommonStrings @@ -68,7 +67,7 @@ fun PushHistoryView( .fillMaxSize() .systemBarsPadding() .imePadding(), - contentWindowInsets = WindowInsets.statusBars, + contentWindowInsets = scaffoldScrollableContentInsets, topBar = { TopAppBar( navigationIcon = { diff --git a/tests/uitests/src/test/snapshots/images/features.preferences.impl.userstatus_UserStatusView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.preferences.impl.userstatus_UserStatusView_Day_6_en.png index 0ca6f66438..f831ed92a2 100644 --- a/tests/uitests/src/test/snapshots/images/features.preferences.impl.userstatus_UserStatusView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.preferences.impl.userstatus_UserStatusView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5896eb5df6f5398bdb94e74280d0d5c04b6a5a53c2378b7377c60fa58eef544b -size 12013 +oid sha256:7fe1f51d385bba8821dfc0f0da84990cf0d148e991d765484b343d8764abd47d +size 11724 diff --git a/tests/uitests/src/test/snapshots/images/features.preferences.impl.userstatus_UserStatusView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.preferences.impl.userstatus_UserStatusView_Night_5_en.png index fb72cafe03..1e04c3e7d7 100644 --- a/tests/uitests/src/test/snapshots/images/features.preferences.impl.userstatus_UserStatusView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.preferences.impl.userstatus_UserStatusView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ef1b643a16b5a94c75f8bb845c36d3cbc7f7ed96a0cac32fdb9f0b09d26b4d1 -size 11747 +oid sha256:6bbc8c05e6f6818d00282228f52424ebe93e6e3dca3431d742e8c652d56460d6 +size 11712 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_HorizontalFloatingToolbarNoFab_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_HorizontalFloatingToolbarNoFab_Day_0_en.png index 58546b8522..ee5c582240 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_HorizontalFloatingToolbarNoFab_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_HorizontalFloatingToolbarNoFab_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:30357bf18792db5ab20085010251170a724ffe8c00313facd04ee704e806af64 -size 10982 +oid sha256:75de341f705bb22955f9399180519b65ad59c2e1917317d56e50ea4db78f35bc +size 12102 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_HorizontalFloatingToolbar_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_HorizontalFloatingToolbar_Day_0_en.png index 83302d6ba4..38ad0e4b56 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_HorizontalFloatingToolbar_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_HorizontalFloatingToolbar_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16dee1dfe746cd40dac9fe8f0af3ecb42cd14bab5cc490917b589beed065ed1b -size 14686 +oid sha256:326d59cf768b2dbd96eb7964d54c8eda509a5cd57c6e62087625e3314da0bb4d +size 13658