android: merge redundant composables

This commit is contained in:
Harsh Shandilya 2022-04-22 20:30:19 +05:30
parent 0a1634bb83
commit ea2ebf0393
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
3 changed files with 43 additions and 69 deletions

View file

@ -37,7 +37,7 @@ import dev.msfjarvis.claw.android.ui.decorations.ClawAppBar
import dev.msfjarvis.claw.android.ui.decorations.ClawNavigationBar import dev.msfjarvis.claw.android.ui.decorations.ClawNavigationBar
import dev.msfjarvis.claw.android.ui.decorations.NavigationItem import dev.msfjarvis.claw.android.ui.decorations.NavigationItem
import dev.msfjarvis.claw.android.ui.lists.DatabasePosts import dev.msfjarvis.claw.android.ui.lists.DatabasePosts
import dev.msfjarvis.claw.android.ui.lists.HottestPosts import dev.msfjarvis.claw.android.ui.lists.NetworkPosts
import dev.msfjarvis.claw.android.ui.navigation.Destinations import dev.msfjarvis.claw.android.ui.navigation.Destinations
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
import dev.msfjarvis.claw.api.LobstersApi import dev.msfjarvis.claw.api.LobstersApi
@ -146,7 +146,7 @@ fun LobstersApp(
listOf(navDeepLink { uriPattern = uri }, navDeepLink { uriPattern = "$uri/" }), listOf(navDeepLink { uriPattern = uri }, navDeepLink { uriPattern = "$uri/" }),
) { ) {
setWebUri("https://lobste.rs/") setWebUri("https://lobste.rs/")
HottestPosts( NetworkPosts(
items = networkPosts, items = networkPosts,
listState = networkListState, listState = networkListState,
isPostSaved = viewModel::isPostSaved, isPostSaved = viewModel::isPostSaved,

View file

@ -1,54 +0,0 @@
package dev.msfjarvis.claw.android.ui.lists
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.paging.LoadState
import androidx.paging.compose.LazyPagingItems
import com.google.accompanist.swiperefresh.SwipeRefresh
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.database.local.SavedPost
import dev.msfjarvis.claw.model.LobstersPost
@Composable
fun HottestPosts(
items: LazyPagingItems<LobstersPost>,
listState: LazyListState,
isPostSaved: suspend (SavedPost) -> Boolean,
reloadPosts: () -> Unit,
postActions: PostActions,
modifier: Modifier = Modifier,
) {
val isRefreshing = items.loadState.refresh == LoadState.Loading
SwipeRefresh(
state = rememberSwipeRefreshState(isRefreshing),
onRefresh = reloadPosts,
indicator = { state, trigger ->
val backgroundColor = MaterialTheme.colorScheme.surface
SwipeRefreshIndicator(
state = state,
refreshTriggerDistance = trigger,
backgroundColor = backgroundColor,
contentColor = contentColorFor(backgroundColor)
)
}
) {
if (items.itemCount == 0) {
Box(modifier = Modifier.fillMaxSize())
} else {
NetworkPosts(
items = items,
listState = listState,
isSaved = isPostSaved,
postActions = postActions,
modifier = modifier,
)
}
}
}

View file

@ -1,11 +1,19 @@
package dev.msfjarvis.claw.android.ui.lists package dev.msfjarvis.claw.android.ui.lists
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.paging.LoadState
import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.items import androidx.paging.compose.items
import com.google.accompanist.swiperefresh.SwipeRefresh
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
import dev.msfjarvis.claw.common.posts.PostActions import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.posts.toDbModel import dev.msfjarvis.claw.common.posts.toDbModel
import dev.msfjarvis.claw.common.ui.Divider import dev.msfjarvis.claw.common.ui.Divider
@ -16,24 +24,44 @@ import dev.msfjarvis.claw.model.LobstersPost
fun NetworkPosts( fun NetworkPosts(
items: LazyPagingItems<LobstersPost>, items: LazyPagingItems<LobstersPost>,
listState: LazyListState, listState: LazyListState,
isSaved: suspend (SavedPost) -> Boolean, isPostSaved: suspend (SavedPost) -> Boolean,
reloadPosts: () -> Unit,
postActions: PostActions, postActions: PostActions,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
LazyColumn( val isRefreshing = items.loadState.refresh == LoadState.Loading
state = listState, SwipeRefresh(
modifier = modifier, state = rememberSwipeRefreshState(isRefreshing),
onRefresh = reloadPosts,
indicator = { state, trigger ->
val backgroundColor = MaterialTheme.colorScheme.surface
SwipeRefreshIndicator(
state = state,
refreshTriggerDistance = trigger,
backgroundColor = backgroundColor,
contentColor = contentColorFor(backgroundColor)
)
}
) { ) {
items(items) { item -> if (items.itemCount == 0) {
if (item != null) { Box(modifier = Modifier.fillMaxSize())
val dbModel = item.toDbModel() } else {
ListItem( LazyColumn(
item = dbModel, state = listState,
isSaved = isSaved, modifier = modifier,
postActions = postActions, ) {
) items(items) { item ->
if (item != null) {
val dbModel = item.toDbModel()
ListItem(
item = dbModel,
isSaved = isPostSaved,
postActions = postActions,
)
Divider() Divider()
}
}
} }
} }
} }