android: properly handle insets and padding

This commit is contained in:
Harsh Shandilya 2021-09-23 22:20:17 +05:30
parent 6bbd236203
commit 1683c5c027
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
4 changed files with 34 additions and 24 deletions

View file

@ -12,9 +12,11 @@ dependencies {
kapt(libs.dagger.hilt.compiler)
implementation(projects.api)
implementation(projects.common)
implementation(libs.accompanist.insets)
implementation(libs.accompanist.sysuicontroller)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.appcompat)
implementation(libs.androidx.coreKtx)
implementation(libs.androidx.paging.compose)
implementation(libs.dagger.hilt.android)
implementation(libs.retrofit.moshiConverter)

View file

@ -3,6 +3,7 @@ package dev.msfjarvis.claw.android
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.core.view.WindowCompat
import androidx.paging.Pager
import androidx.paging.PagingConfig
import dagger.hilt.android.AndroidEntryPoint
@ -20,6 +21,7 @@ class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
val pager = Pager(PagingConfig(20)) { LobstersPagingSource(api::getHottestPosts) }
setContent {
LobstersApp(

View file

@ -18,6 +18,8 @@ import androidx.compose.ui.unit.dp
import androidx.paging.LoadState
import androidx.paging.Pager
import androidx.paging.compose.collectAsLazyPagingItems
import com.google.accompanist.insets.ProvideWindowInsets
import com.google.accompanist.insets.statusBarsPadding
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import dev.msfjarvis.claw.api.model.LobstersPost
import dev.msfjarvis.claw.common.theme.LobstersTheme
@ -31,32 +33,34 @@ fun LobstersApp(
val systemUiController = rememberSystemUiController()
val scaffoldState = rememberScaffoldState()
LobstersTheme(darkTheme = isSystemInDarkTheme()) {
val useDarkIcons = MaterialTheme.colors.isLight
val systemBarsColor = MaterialTheme.colors.primarySurface
ProvideWindowInsets {
val useDarkIcons = MaterialTheme.colors.isLight
val systemBarsColor = MaterialTheme.colors.primarySurface
SideEffect {
systemUiController.setSystemBarsColor(color = systemBarsColor, darkIcons = useDarkIcons)
}
val items = pager.flow.collectAsLazyPagingItems()
Scaffold(
scaffoldState = scaffoldState,
topBar = { ClawAppBar() },
modifier = Modifier,
) { padding ->
if (items.loadState.refresh != LoadState.Loading) {
NetworkPosts(
items = items,
urlLauncher = urlLauncher,
modifier = Modifier.padding(padding),
)
} else {
Box(
modifier = Modifier.fillMaxSize(),
) {
CircularProgressIndicator(
modifier = Modifier.size(64.dp).align(Alignment.Center),
color = MaterialTheme.colors.secondary,
SideEffect {
systemUiController.setSystemBarsColor(color = systemBarsColor, darkIcons = useDarkIcons)
}
val items = pager.flow.collectAsLazyPagingItems()
Scaffold(
scaffoldState = scaffoldState,
topBar = { ClawAppBar(modifier = Modifier.statusBarsPadding()) },
modifier = Modifier,
) {
if (items.loadState.refresh != LoadState.Loading) {
NetworkPosts(
items = items,
urlLauncher = urlLauncher,
modifier = Modifier.padding(top = 16.dp),
)
} else {
Box(
modifier = Modifier.fillMaxSize(),
) {
CircularProgressIndicator(
modifier = Modifier.size(64.dp).align(Alignment.Center),
color = MaterialTheme.colors.secondary,
)
}
}
}
}