mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-23 19:32:16 +00:00
Update Coil Version
This commit is contained in:
parent
e2ace2d13f
commit
c5bae67635
@ -131,8 +131,8 @@ dependencies {
|
||||
implementation 'com.google.android.material:material:1.6.0-alpha03'
|
||||
|
||||
// Coil
|
||||
implementation 'io.coil-kt:coil:1.4.0'
|
||||
implementation "io.coil-kt:coil-compose:1.4.0"
|
||||
implementation 'io.coil-kt:coil:2.0.0-rc01'
|
||||
implementation "io.coil-kt:coil-compose:2.0.0-rc01"
|
||||
|
||||
// OkHttps
|
||||
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.5'
|
||||
|
@ -26,7 +26,6 @@ import com.looker.droidify.graphics.PaddingDrawable
|
||||
import com.looker.droidify.network.CoilDownloader
|
||||
import com.looker.droidify.utility.RxUtils
|
||||
import com.looker.droidify.utility.extension.android.Android
|
||||
import com.looker.droidify.utility.extension.resources.clear
|
||||
import com.looker.droidify.utility.extension.resources.getColorFromAttr
|
||||
import com.looker.droidify.utility.extension.resources.getDrawableCompat
|
||||
import com.looker.droidify.utility.extension.resources.sizeScaled
|
||||
@ -255,22 +254,18 @@ class ScreenshotsFragment() : DialogFragment() {
|
||||
holder as ViewHolder
|
||||
val screenshot = screenshots[position]
|
||||
val (width, height) = size
|
||||
if (width > 0 && height > 0) {
|
||||
repository?.let {
|
||||
holder.image.load(
|
||||
CoilDownloader.createScreenshotUri(
|
||||
it,
|
||||
packageName,
|
||||
screenshot
|
||||
)
|
||||
) {
|
||||
placeholder(holder.placeholder)
|
||||
error(holder.placeholder)
|
||||
size(width, height)
|
||||
}
|
||||
repository?.let {
|
||||
holder.image.load(
|
||||
CoilDownloader.createScreenshotUri(
|
||||
it,
|
||||
packageName,
|
||||
screenshot
|
||||
)
|
||||
) {
|
||||
placeholder(holder.placeholder)
|
||||
error(holder.placeholder)
|
||||
size(width, height)
|
||||
}
|
||||
} else {
|
||||
holder.image.clear()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,44 @@
|
||||
package com.looker.droidify.ui.compose.components
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.requiredHeight
|
||||
import androidx.compose.foundation.layout.wrapContentWidth
|
||||
import androidx.compose.foundation.lazy.LazyRow
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.net.toUri
|
||||
import com.looker.droidify.entity.Screenshot
|
||||
import com.looker.droidify.ui.compose.theme.LocalShapes
|
||||
import com.looker.droidify.ui.compose.utils.NetworkImage
|
||||
|
||||
@Composable
|
||||
fun ScreenshotList(
|
||||
modifier: Modifier = Modifier,
|
||||
screenShots: List<Screenshot>,
|
||||
onScreenShotClick: (Screenshot) -> Unit
|
||||
) {
|
||||
val screenShotList by remember { mutableStateOf(screenShots) }
|
||||
LazyRow(
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
items(screenShotList) {
|
||||
NetworkImage(
|
||||
modifier = Modifier
|
||||
.wrapContentWidth()
|
||||
.requiredHeight(120.dp)
|
||||
.clickable { onScreenShotClick(it) },
|
||||
data = it.path.toUri(),
|
||||
shape = RoundedCornerShape(LocalShapes.current.large)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,21 +1,29 @@
|
||||
package com.looker.droidify.ui.compose.utils
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.gestures.detectTransformGestures
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.shape.CornerBasedShape
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.RectangleShape
|
||||
import androidx.compose.ui.graphics.Shape
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import coil.annotation.ExperimentalCoilApi
|
||||
import coil.compose.ImagePainter
|
||||
import coil.compose.rememberImagePainter
|
||||
import coil.compose.SubcomposeAsyncImage
|
||||
import coil.compose.SubcomposeAsyncImageContent
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.ui.compose.theme.LocalShapes
|
||||
|
||||
@ -26,29 +34,55 @@ fun NetworkImage(
|
||||
data: Uri?,
|
||||
contentScale: ContentScale = ContentScale.Crop,
|
||||
backgroundColor: Color = MaterialTheme.colorScheme.surface,
|
||||
shape: CornerBasedShape = RoundedCornerShape(LocalShapes.current.medium)
|
||||
shape: Shape = RoundedCornerShape(LocalShapes.current.medium)
|
||||
) {
|
||||
Box(modifier) {
|
||||
val painter = rememberImagePainter(data = data) {
|
||||
placeholder(R.drawable.ic_placeholder)
|
||||
error(R.drawable.ic_placeholder)
|
||||
}
|
||||
|
||||
Image(
|
||||
painter = painter,
|
||||
contentDescription = "This is Album Art",
|
||||
contentScale = contentScale,
|
||||
modifier = Modifier
|
||||
.matchParentSize()
|
||||
.clip(shape)
|
||||
)
|
||||
|
||||
if (painter.state is ImagePainter.State.Loading) {
|
||||
SubcomposeAsyncImage(
|
||||
modifier = modifier.clip(shape),
|
||||
model = data,
|
||||
contentDescription = null,
|
||||
contentScale = contentScale,
|
||||
loading = {
|
||||
Spacer(
|
||||
modifier = Modifier
|
||||
.matchParentSize()
|
||||
.background(backgroundColor)
|
||||
)
|
||||
},
|
||||
error = {
|
||||
SubcomposeAsyncImageContent(painter = painterResource(id = R.drawable.ic_placeholder))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ZoomableImage(
|
||||
modifier: Modifier = Modifier,
|
||||
data: Uri?
|
||||
) {
|
||||
val scale = remember { mutableStateOf(1f) }
|
||||
val rotationState = remember { mutableStateOf(1f) }
|
||||
Box(
|
||||
modifier = modifier
|
||||
.fillMaxSize() // Give the size you want...
|
||||
.background(Color.Gray)
|
||||
.pointerInput(Unit) {
|
||||
detectTransformGestures { _, _, zoom, rotation ->
|
||||
scale.value *= zoom
|
||||
rotationState.value += rotation
|
||||
}
|
||||
}
|
||||
) {
|
||||
NetworkImage(
|
||||
modifier = Modifier
|
||||
.align(Alignment.Center) // keep the image centralized into the Box
|
||||
.graphicsLayer(
|
||||
// adding some zoom limits (min 50%, max 200%)
|
||||
scaleX = maxOf(.5f, minOf(3f, scale.value)),
|
||||
scaleY = maxOf(.5f, minOf(3f, scale.value)),
|
||||
rotationZ = rotationState.value
|
||||
),
|
||||
data = data,
|
||||
shape = RectangleShape
|
||||
)
|
||||
}
|
||||
}
|
@ -15,8 +15,6 @@ import androidx.annotation.AttrRes
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import coil.util.CoilUtils
|
||||
import com.google.android.material.imageview.ShapeableImageView
|
||||
import com.google.android.material.textview.MaterialTextView
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
@ -67,8 +65,4 @@ fun MaterialTextView.setTextSizeScaled(size: Int) {
|
||||
|
||||
fun ViewGroup.inflate(layoutResId: Int): View {
|
||||
return LayoutInflater.from(context).inflate(layoutResId, this, false)
|
||||
}
|
||||
|
||||
fun ShapeableImageView.clear() {
|
||||
CoilUtils.clear(this)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user