android: split Compose code to LobstersApp composable

This commit is contained in:
Harsh Shandilya 2021-09-23 21:14:36 +05:30
parent f1b56e27cd
commit a5b04b9530
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
2 changed files with 59 additions and 43 deletions

View file

@ -3,28 +3,12 @@ package dev.msfjarvis.claw.android
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold
import androidx.compose.material.rememberScaffoldState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.paging.LoadState
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.compose.collectAsLazyPagingItems
import dagger.hilt.android.AndroidEntryPoint
import dev.msfjarvis.claw.android.paging.LobstersPagingSource
import dev.msfjarvis.claw.android.ui.ClawAppBar
import dev.msfjarvis.claw.android.ui.NetworkPosts
import dev.msfjarvis.claw.android.ui.LobstersApp
import dev.msfjarvis.claw.api.LobstersApi
import dev.msfjarvis.claw.common.theme.LobstersTheme
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
import javax.inject.Inject
@ -38,32 +22,10 @@ class MainActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
val pager = Pager(PagingConfig(20)) { LobstersPagingSource(api::getHottestPosts) }
setContent {
val scaffoldState = rememberScaffoldState()
LobstersTheme(darkTheme = isSystemInDarkTheme()) {
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,
)
}
}
}
}
LobstersApp(
pager,
urlLauncher,
)
}
}
}

View file

@ -0,0 +1,54 @@
package dev.msfjarvis.claw.android.ui
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold
import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.paging.LoadState
import androidx.paging.Pager
import androidx.paging.compose.collectAsLazyPagingItems
import dev.msfjarvis.claw.api.model.LobstersPost
import dev.msfjarvis.claw.common.theme.LobstersTheme
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
@Composable
fun LobstersApp(
pager: Pager<Int, LobstersPost>,
urlLauncher: UrlLauncher,
) {
val scaffoldState = rememberScaffoldState()
LobstersTheme(darkTheme = isSystemInDarkTheme()) {
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,
)
}
}
}
}
}