This commit is contained in:
2024-08-14 00:04:53 +08:00
parent d5067ca05b
commit e8140579e0
9 changed files with 85 additions and 12 deletions

View File

@@ -40,6 +40,7 @@ import com.aiosman.riderpro.data.TestAccountServiceImpl
import com.aiosman.riderpro.data.TestUserServiceImpl
import com.aiosman.riderpro.data.UploadImage
import com.aiosman.riderpro.data.UserService
import com.aiosman.riderpro.ui.composables.CustomAsyncImage
import com.aiosman.riderpro.ui.modifiers.noRippleClickable
import com.aiosman.riderpro.ui.post.NewPostViewModel.uriToFile
import kotlinx.coroutines.launch
@@ -144,7 +145,8 @@ fun AccountEditScreen() {
.padding(padding).padding(horizontal = 24.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
AsyncImage(
CustomAsyncImage(
context,
if (imageUrl != null) {
imageUrl.toString()
} else {

View File

@@ -0,0 +1,26 @@
package com.aiosman.riderpro.ui.composables
import android.content.Context
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import coil.compose.AsyncImage
import com.aiosman.riderpro.utils.Utils.getImageLoader
@Composable
fun CustomAsyncImage(
context: Context,
imageUrl: String,
contentDescription: String?,
modifier: Modifier = Modifier,
contentScale: ContentScale = ContentScale.Crop
) {
val imageLoader = getImageLoader(context)
AsyncImage(
model = imageUrl,
contentDescription = contentDescription,
modifier = modifier,
contentScale = contentScale,
imageLoader = imageLoader
)
}

View File

@@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import com.aiosman.riderpro.model.MomentEntity
@@ -18,6 +19,7 @@ fun RelPostCard(
modifier: Modifier = Modifier,
) {
val image = momentEntity.images.firstOrNull()
val context = LocalContext.current
Column(
modifier = modifier
) {
@@ -26,7 +28,8 @@ fun RelPostCard(
modifier=Modifier.padding(horizontal = 16.dp, vertical = 8.dp)
) {
image?.let {
AsyncImage(
CustomAsyncImage(
context,
image,
contentDescription = null,
modifier = Modifier.size(100.dp),

View File

@@ -10,10 +10,12 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import coil.compose.AsyncImage
import com.aiosman.riderpro.LocalAnimatedContentScope
import com.aiosman.riderpro.LocalNavController
import com.aiosman.riderpro.LocalSharedTransitionScope
import com.aiosman.riderpro.ui.composables.CustomAsyncImage
import com.aiosman.riderpro.ui.composables.StatusBarMaskLayout
import com.aiosman.riderpro.ui.imageviewer.ImageViewerViewModel
import com.google.accompanist.systemuicontroller.rememberSystemUiController
@@ -31,7 +33,7 @@ fun ImageViewer() {
val navController = LocalNavController.current
val sharedTransitionScope = LocalSharedTransitionScope.current
val animatedVisibilityScope = LocalAnimatedContentScope.current
val context = LocalContext.current
LaunchedEffect(Unit) {
systemUiController.setStatusBarColor(Color.Black)
systemUiController.setNavigationBarColor(Color.Black)
@@ -50,7 +52,8 @@ fun ImageViewer() {
) { page ->
val zoomState = rememberZoomState()
with(sharedTransitionScope) {
AsyncImage(
CustomAsyncImage(
context,
images[page],
contentDescription = null,
modifier = Modifier.sharedElement(

View File

@@ -44,6 +44,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
@@ -63,6 +64,7 @@ import com.aiosman.riderpro.ui.comment.CommentModalContent
import com.aiosman.riderpro.ui.composables.AnimatedCounter
import com.aiosman.riderpro.ui.composables.AnimatedFavouriteIcon
import com.aiosman.riderpro.ui.composables.AnimatedLikeIcon
import com.aiosman.riderpro.ui.composables.CustomAsyncImage
import com.aiosman.riderpro.ui.composables.RelPostCard
import com.aiosman.riderpro.ui.modifiers.noRippleClickable
import com.aiosman.riderpro.ui.post.NewPostViewModel
@@ -265,12 +267,14 @@ fun MomentPostTime(time: String) {
@Composable
fun MomentTopRowGroup(momentEntity: MomentEntity) {
val navController = LocalNavController.current
val context = LocalContext.current
Row(
modifier = Modifier
.height(40.dp)
.padding(top = 0.dp, bottom = 0.dp, start = 24.dp, end = 24.dp)
) {
AsyncImage(
CustomAsyncImage(
context,
momentEntity.avatar,
contentDescription = "",
modifier = Modifier
@@ -320,6 +324,7 @@ fun MomentContentGroup(
val displayImageUrl = momentEntity.images.firstOrNull()
val sharedTransitionScope = LocalSharedTransitionScope.current
val animatedVisibilityScope = LocalAnimatedContentScope.current
val context = LocalContext.current
Text(
text = "${momentEntity.momentTextContent}",
modifier = Modifier
@@ -335,7 +340,8 @@ fun MomentContentGroup(
} else {
displayImageUrl?.let {
with(sharedTransitionScope) {
AsyncImage(
CustomAsyncImage(
context,
it,
modifier = Modifier
.sharedElement(

View File

@@ -38,6 +38,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
@@ -54,6 +55,7 @@ import com.aiosman.riderpro.R
import com.aiosman.riderpro.data.AccountProfileEntity
import com.aiosman.riderpro.model.MomentEntity
import com.aiosman.riderpro.ui.NavigationRoute
import com.aiosman.riderpro.ui.composables.CustomAsyncImage
import com.aiosman.riderpro.ui.modifiers.noRippleClickable
import kotlinx.coroutines.launch
@@ -246,6 +248,7 @@ fun UserInformationFollowers(modifier: Modifier, accountProfileEntity: AccountPr
@Composable
fun UserInformationBasic(modifier: Modifier, accountProfileEntity: AccountProfileEntity) {
val context = LocalContext.current
Column(
horizontalAlignment = Alignment.CenterHorizontally
) {
@@ -257,7 +260,8 @@ fun UserInformationBasic(modifier: Modifier, accountProfileEntity: AccountProfil
modifier = Modifier.fillMaxSize(),
painter = painterResource(id = R.drawable.avatar_bold), contentDescription = ""
)
AsyncImage(
CustomAsyncImage(
context,
accountProfileEntity.avatar,
modifier = Modifier
.size(width = 88.dp, height = 88.dp)
@@ -571,8 +575,10 @@ fun MomentCardPicture(imageUrl: String, momentId: Int) {
val navController = LocalNavController.current
val sharedTransitionScope = LocalSharedTransitionScope.current
val animatedVisibilityScope = LocalAnimatedContentScope.current
val context = LocalContext.current
with(sharedTransitionScope) {
AsyncImage(
CustomAsyncImage(
context,
imageUrl,
modifier = Modifier
.sharedElement(

View File

@@ -51,6 +51,7 @@ import androidx.lifecycle.viewModelScope
import coil.compose.AsyncImage
import com.aiosman.riderpro.LocalNavController
import com.aiosman.riderpro.R
import com.aiosman.riderpro.ui.composables.CustomAsyncImage
import com.aiosman.riderpro.ui.composables.RelPostCard
import com.aiosman.riderpro.ui.composables.StatusBarMaskLayout
import com.aiosman.riderpro.ui.modifiers.noRippleClickable
@@ -199,7 +200,8 @@ fun AddImageGrid() {
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
model.imageUriList.forEach {
AsyncImage(
CustomAsyncImage(
context,
it,
contentDescription = "Image",
modifier = Modifier

View File

@@ -53,6 +53,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
@@ -90,6 +91,7 @@ import com.aiosman.riderpro.model.MomentEntity
import com.aiosman.riderpro.ui.NavigationRoute
import com.aiosman.riderpro.ui.composables.StatusBarMaskLayout
import com.aiosman.riderpro.ui.composables.BottomNavigationPlaceholder
import com.aiosman.riderpro.ui.composables.CustomAsyncImage
import com.aiosman.riderpro.ui.composables.EditCommentBottomModal
import com.aiosman.riderpro.ui.imageviewer.ImageViewerViewModel
import com.aiosman.riderpro.ui.index.tabs.moment.MomentViewModel
@@ -353,6 +355,7 @@ fun Header(
onFollowClick: () -> Unit
) {
val navController = LocalNavController.current
val context = LocalContext.current
Row(
modifier = Modifier
.fillMaxWidth()
@@ -370,7 +373,8 @@ fun Header(
)
Spacer(modifier = Modifier.width(8.dp))
avatar?.let {
AsyncImage(
CustomAsyncImage(
context,
it,
contentDescription = "Profile Picture",
modifier = Modifier
@@ -428,6 +432,8 @@ fun PostImageView(
val navController = LocalNavController.current
val sharedTransitionScope = LocalSharedTransitionScope.current
val animatedVisibilityScope = LocalAnimatedContentScope.current
val context = LocalContext.current
Column {
HorizontalPager(
state = pagerState,
@@ -437,7 +443,8 @@ fun PostImageView(
) { page ->
val image = images[page]
with(sharedTransitionScope) {
AsyncImage(
CustomAsyncImage(
context,
image,
contentDescription = "Image",
contentScale = ContentScale.Fit,
@@ -547,9 +554,11 @@ fun CommentsSection(
@Composable
fun CommentItem(commentEntity: CommentEntity, onLike: () -> Unit = {}) {
val context = LocalContext.current
Column {
Row(modifier = Modifier.padding(vertical = 8.dp)) {
AsyncImage(
CustomAsyncImage(
context,
commentEntity.avatar,
contentDescription = "Comment Profile Picture",
modifier = Modifier

View File

@@ -1,5 +1,10 @@
package com.aiosman.riderpro.utils
import android.content.Context
import coil.ImageLoader
import coil.request.CachePolicy
import com.aiosman.riderpro.data.api.getUnsafeOkHttpClient
object Utils {
fun generateRandomString(length: Int): String {
val allowedChars = ('A'..'Z') + ('a'..'z') + ('0'..'9')
@@ -7,4 +12,15 @@ object Utils {
.map { allowedChars.random() }
.joinToString("")
}
fun getImageLoader(context: Context): ImageLoader {
val okHttpClient = getUnsafeOkHttpClient()
return ImageLoader.Builder(context)
.okHttpClient(okHttpClient)
.diskCachePolicy(CachePolicy.ENABLED)
.memoryCachePolicy(CachePolicy.ENABLED)
.components {
}
.build()
}
}