simple photo viewer
This commit is contained in:
+4
-2
@@ -15,7 +15,8 @@ object Friends
|
||||
|
||||
fun NavGraphBuilder.friendsScreen(
|
||||
onError: (BaseError) -> Unit,
|
||||
navController: NavController
|
||||
navController: NavController,
|
||||
onPhotoClicked: (url: String) -> Unit
|
||||
) {
|
||||
composable<Friends> {
|
||||
val viewModel: FriendsViewModel =
|
||||
@@ -23,7 +24,8 @@ fun NavGraphBuilder.friendsScreen(
|
||||
|
||||
FriendsRoute(
|
||||
onError = onError,
|
||||
viewModel = viewModel
|
||||
viewModel = viewModel,
|
||||
onPhotoClicked = onPhotoClicked
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.meloda.fast.friends.presentation
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -18,22 +19,20 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import coil.compose.AsyncImage
|
||||
import dev.meloda.fast.ui.R
|
||||
import dev.meloda.fast.friends.model.UiFriend
|
||||
import dev.meloda.fast.ui.R
|
||||
|
||||
@Composable
|
||||
fun FriendItem(
|
||||
modifier: Modifier = Modifier,
|
||||
friend: UiFriend,
|
||||
maxLines: Int
|
||||
maxLines: Int,
|
||||
onPhotoClicked: (url: String) -> Unit
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
|
||||
Row(
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
@@ -58,7 +57,8 @@ fun FriendItem(
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.clip(CircleShape),
|
||||
.clip(CircleShape)
|
||||
.clickable { onPhotoClicked(friendAvatar) },
|
||||
placeholder = painterResource(id = R.drawable.ic_account_circle_cut)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -34,7 +34,8 @@ fun FriendsList(
|
||||
uiFriends: ImmutableList<UiFriend>,
|
||||
listState: LazyListState,
|
||||
maxLines: Int,
|
||||
padding: PaddingValues
|
||||
padding: PaddingValues,
|
||||
onPhotoClicked: (url: String) -> Unit
|
||||
) {
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
|
||||
@@ -58,7 +59,8 @@ fun FriendsList(
|
||||
|
||||
FriendItem(
|
||||
friend = friend,
|
||||
maxLines = maxLines
|
||||
maxLines = maxLines,
|
||||
onPhotoClicked = onPhotoClicked
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
+11
-7
@@ -49,6 +49,10 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import coil.imageLoader
|
||||
import coil.request.ImageRequest
|
||||
import dev.chrisbanes.haze.haze
|
||||
import dev.chrisbanes.haze.hazeChild
|
||||
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
||||
import dev.chrisbanes.haze.materials.HazeMaterials
|
||||
import dev.meloda.fast.datastore.UserSettings
|
||||
import dev.meloda.fast.friends.FriendsViewModel
|
||||
import dev.meloda.fast.friends.FriendsViewModelImpl
|
||||
@@ -61,10 +65,6 @@ import dev.meloda.fast.ui.model.TabItem
|
||||
import dev.meloda.fast.ui.theme.LocalHazeState
|
||||
import dev.meloda.fast.ui.theme.LocalThemeConfig
|
||||
import dev.meloda.fast.ui.util.ImmutableList
|
||||
import dev.chrisbanes.haze.haze
|
||||
import dev.chrisbanes.haze.hazeChild
|
||||
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
||||
import dev.chrisbanes.haze.materials.HazeMaterials
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
import org.koin.compose.koinInject
|
||||
import dev.meloda.fast.ui.R as UiR
|
||||
@@ -72,6 +72,7 @@ import dev.meloda.fast.ui.R as UiR
|
||||
@Composable
|
||||
fun FriendsRoute(
|
||||
onError: (BaseError) -> Unit,
|
||||
onPhotoClicked: (url: String) -> Unit,
|
||||
viewModel: FriendsViewModel = koinViewModel<FriendsViewModelImpl>()
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
@@ -102,7 +103,8 @@ fun FriendsRoute(
|
||||
canPaginate = canPaginate,
|
||||
onSessionExpiredLogOutButtonClicked = { onError(BaseError.SessionExpired) },
|
||||
onPaginationConditionsMet = viewModel::onPaginationConditionsMet,
|
||||
onRefresh = viewModel::onRefresh
|
||||
onRefresh = viewModel::onRefresh,
|
||||
onPhotoClicked = onPhotoClicked
|
||||
)
|
||||
}
|
||||
|
||||
@@ -120,7 +122,8 @@ fun FriendsScreen(
|
||||
canPaginate: Boolean = false,
|
||||
onSessionExpiredLogOutButtonClicked: () -> Unit = {},
|
||||
onPaginationConditionsMet: () -> Unit = {},
|
||||
onRefresh: () -> Unit = {}
|
||||
onRefresh: () -> Unit = {},
|
||||
onPhotoClicked: (url: String) -> Unit = {}
|
||||
) {
|
||||
val currentTheme = LocalThemeConfig.current
|
||||
|
||||
@@ -307,7 +310,8 @@ fun FriendsScreen(
|
||||
uiFriends = ImmutableList.copyOf(friendsToDisplay),
|
||||
listState = listState,
|
||||
maxLines = maxLines,
|
||||
padding = padding
|
||||
padding = padding,
|
||||
onPhotoClicked = onPhotoClicked
|
||||
)
|
||||
|
||||
if (friendsToDisplay.isEmpty()) {
|
||||
|
||||
Reference in New Issue
Block a user