simple photo viewer

This commit is contained in:
2024-07-16 10:29:37 +03:00
parent 9e09cbb640
commit 1817698031
27 changed files with 484 additions and 278 deletions
@@ -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))
@@ -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()) {