Skip to content

Commit

Permalink
Fix WindowInsets handling on iOS
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisbanes committed Jul 12, 2023
1 parent 6562898 commit 04c90a6
Show file tree
Hide file tree
Showing 9 changed files with 27 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
Expand Down Expand Up @@ -51,6 +52,7 @@ import app.tivi.common.compose.ui.plus
import app.tivi.common.ui.resources.MR
import app.tivi.data.compoundmodels.EntryWithShow
import app.tivi.data.models.Entry
import com.moriatsushi.insetsx.systemBars
import dev.icerock.moko.resources.compose.stringResource
import kotlin.math.roundToInt

Expand Down Expand Up @@ -114,6 +116,7 @@ fun <E : Entry> EntryGrid(
)
}
},
contentWindowInsets = WindowInsets.systemBars,
modifier = modifier,
) { paddingValues ->
val refreshing = lazyPagingItems.loadState.refresh == LoadStateLoading
Expand Down
2 changes: 1 addition & 1 deletion ios-app/Tivi/Tivi/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ struct ContentView: View {

var body: some View {
ComposeView(component: self.component)
.ignoresSafeArea(.all, edges: .bottom) // Compose has own keyboard handler
.ignoresSafeArea(.all, edges: .all)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.PaddingValues
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.aspectRatio
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
Expand Down Expand Up @@ -70,6 +71,7 @@ import app.tivi.data.traktauth.TraktAuthState
import app.tivi.overlays.showInDialog
import app.tivi.screens.AccountScreen
import app.tivi.screens.DiscoverScreen
import com.moriatsushi.insetsx.systemBars
import com.slack.circuit.overlay.LocalOverlayHost
import com.slack.circuit.runtime.CircuitContext
import com.slack.circuit.runtime.Screen
Expand Down Expand Up @@ -186,6 +188,7 @@ internal fun Discover(
)
}
},
contentWindowInsets = WindowInsets.systemBars,
modifier = modifier,
) { paddingValues ->
val refreshState = rememberPullRefreshState(refreshing = false, onRefresh = refresh)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.PaddingValues
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.aspectRatio
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
Expand Down Expand Up @@ -84,6 +85,7 @@ import app.tivi.data.traktauth.TraktAuthState
import app.tivi.overlays.showInDialog
import app.tivi.screens.AccountScreen
import app.tivi.screens.LibraryScreen
import com.moriatsushi.insetsx.systemBars
import com.slack.circuit.overlay.LocalOverlayHost
import com.slack.circuit.runtime.CircuitContext
import com.slack.circuit.runtime.Screen
Expand Down Expand Up @@ -198,6 +200,7 @@ internal fun Library(
)
}
},
contentWindowInsets = WindowInsets.systemBars,
modifier = modifier.fillMaxSize(),
) { paddingValues ->
val refreshState = rememberPullRefreshState(
Expand Down
11 changes: 7 additions & 4 deletions ui/root/src/commonMain/kotlin/app/tivi/home/Home.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ import androidx.compose.material3.NavigationDrawerItem
import androidx.compose.material3.NavigationRail
import androidx.compose.material3.NavigationRailItem
import androidx.compose.material3.Scaffold
import androidx.compose.material3.ScaffoldDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass
import androidx.compose.material3.windowsizeclass.WindowSizeClass
Expand All @@ -54,6 +53,7 @@ import app.tivi.screens.UpNextScreen
import com.moriatsushi.insetsx.navigationBars
import com.moriatsushi.insetsx.safeContentPadding
import com.moriatsushi.insetsx.statusBars
import com.moriatsushi.insetsx.systemBars
import com.slack.circuit.backstack.SaveableBackStack
import com.slack.circuit.foundation.NavigableCircuitContent
import com.slack.circuit.foundation.screen
Expand Down Expand Up @@ -95,8 +95,8 @@ internal fun Home(
)
}
},
contentWindowInsets = ScaffoldDefaults.contentWindowInsets
.exclude(WindowInsets.statusBars), // We let content handle the status bar
// We let content handle the status bar
contentWindowInsets = WindowInsets.systemBars.exclude(WindowInsets.statusBars),
modifier = modifier,
) { paddingValues ->
Row(
Expand Down Expand Up @@ -143,7 +143,10 @@ internal fun HomeNavigationBar(
onNavigationSelected: (Screen) -> Unit,
modifier: Modifier = Modifier,
) {
NavigationBar(modifier = modifier) {
NavigationBar(
modifier = modifier,
windowInsets = WindowInsets.navigationBars,
) {
for (item in HomeNavigationItems) {
NavigationBarItem(
icon = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
Expand Down Expand Up @@ -53,6 +54,7 @@ import app.tivi.common.ui.resources.MR
import app.tivi.data.models.TiviShow
import app.tivi.screens.SearchScreen
import com.moriatsushi.insetsx.statusBarsPadding
import com.moriatsushi.insetsx.systemBars
import com.slack.circuit.runtime.CircuitContext
import com.slack.circuit.runtime.Screen
import com.slack.circuit.runtime.ui.Ui
Expand Down Expand Up @@ -156,6 +158,7 @@ internal fun Search(
)
}
},
contentWindowInsets = WindowInsets.systemBars,
modifier = modifier,
) { padding ->
if (state.searchResults.isEmpty() && !state.refreshing) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ import app.tivi.data.models.TiviShow
import app.tivi.data.views.ShowsWatchStats
import app.tivi.screens.ShowDetailsScreen
import com.moriatsushi.insetsx.navigationBars
import com.moriatsushi.insetsx.systemBars
import com.slack.circuit.runtime.CircuitContext
import com.slack.circuit.runtime.Screen
import com.slack.circuit.runtime.ui.Ui
Expand Down Expand Up @@ -233,8 +234,7 @@ internal fun ShowDetails(
}
},
// The nav bar is handled by the root Scaffold
contentWindowInsets = ScaffoldDefaults.contentWindowInsets
.exclude(WindowInsets.navigationBars),
contentWindowInsets = WindowInsets.systemBars.exclude(WindowInsets.navigationBars),
modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
) { contentPadding ->
Surface(modifier = Modifier.bodyWidth()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ import app.tivi.data.compoundmodels.SeasonWithEpisodesAndWatches
import app.tivi.data.models.Episode
import app.tivi.data.models.Season
import app.tivi.screens.ShowSeasonsScreen
import com.moriatsushi.insetsx.statusBars
import com.moriatsushi.insetsx.systemBars
import com.slack.circuit.runtime.CircuitContext
import com.slack.circuit.runtime.Screen
import com.slack.circuit.runtime.ui.Ui
Expand Down Expand Up @@ -161,7 +161,6 @@ internal fun ShowSeasons(
}

Scaffold(
contentWindowInsets = WindowInsets.statusBars,
topBar = {
TopAppBarWithBottomContent(
title = { Text(text = state.show.title ?: "") },
Expand Down Expand Up @@ -204,6 +203,7 @@ internal fun ShowSeasons(
)
}
},
contentWindowInsets = WindowInsets.systemBars,
modifier = modifier
.testTag("show_seasons")
.fillMaxSize(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
Expand Down Expand Up @@ -83,6 +84,7 @@ import app.tivi.overlays.showInDialog
import app.tivi.screens.AccountScreen
import app.tivi.screens.EpisodeTrackScreen
import app.tivi.screens.UpNextScreen
import com.moriatsushi.insetsx.systemBars
import com.seiko.imageloader.model.ImageResult
import com.slack.circuit.overlay.LocalOverlayHost
import com.slack.circuit.runtime.CircuitContext
Expand Down Expand Up @@ -203,6 +205,7 @@ internal fun UpNext(
)
}
},
contentWindowInsets = WindowInsets.systemBars,
modifier = modifier.fillMaxSize(),
) { paddingValues ->
val refreshState = rememberPullRefreshState(
Expand Down

0 comments on commit 04c90a6

Please sign in to comment.