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 android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent 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.Pager
import androidx.paging.PagingConfig import androidx.paging.PagingConfig
import androidx.paging.compose.collectAsLazyPagingItems
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import dev.msfjarvis.claw.android.paging.LobstersPagingSource import dev.msfjarvis.claw.android.paging.LobstersPagingSource
import dev.msfjarvis.claw.android.ui.ClawAppBar import dev.msfjarvis.claw.android.ui.LobstersApp
import dev.msfjarvis.claw.android.ui.NetworkPosts
import dev.msfjarvis.claw.api.LobstersApi import dev.msfjarvis.claw.api.LobstersApi
import dev.msfjarvis.claw.common.theme.LobstersTheme
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
import javax.inject.Inject import javax.inject.Inject
@ -38,32 +22,10 @@ class MainActivity : ComponentActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val pager = Pager(PagingConfig(20)) { LobstersPagingSource(api::getHottestPosts) } val pager = Pager(PagingConfig(20)) { LobstersPagingSource(api::getHottestPosts) }
setContent { setContent {
val scaffoldState = rememberScaffoldState() LobstersApp(
LobstersTheme(darkTheme = isSystemInDarkTheme()) { pager,
val items = pager.flow.collectAsLazyPagingItems() urlLauncher,
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,
)
}
}
}
}
} }
} }
} }

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,
)
}
}
}
}
}