You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.0 KiB
Kotlin
79 lines
3.0 KiB
Kotlin
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.fenix.compose
|
|
|
|
import androidx.compose.foundation.layout.height
|
|
import androidx.compose.foundation.layout.width
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.painter.Painter
|
|
import androidx.compose.ui.layout.ContentScale
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
import androidx.compose.ui.unit.Dp
|
|
import androidx.compose.ui.unit.dp
|
|
import mozilla.components.support.images.compose.loader.ImageLoader
|
|
import mozilla.components.support.images.compose.loader.WithImage
|
|
import org.mozilla.fenix.components.components
|
|
|
|
/**
|
|
* A composable that lays out and draws the image from a given URL while showing a default placeholder
|
|
* while that image is downloaded or a default fallback image when downloading failed.
|
|
*
|
|
* @param url URL from where the to download the image to be shown.
|
|
* @param modifier [Modifier] to be applied to the layout.
|
|
* @param private Whether or not this is a private request. Like in private browsing mode,
|
|
* private requests will not cache anything on disk and not send any cookies shared with the browser.
|
|
* @param targetSize Image size (width and height) the loaded image should be scaled to.
|
|
* @param contentDescription Localized text used by accessibility services to describe what this image represents.
|
|
* This should always be provided unless this image is used for decorative purposes, and does not represent
|
|
* a meaningful action that a user can take.
|
|
* @param alignment Optional alignment parameter used to place the [Painter] in the given
|
|
* bounds defined by the width and height.
|
|
* @param contentScale Optional scale parameter used to determine the aspect ratio scaling to be used
|
|
* if the bounds are a different size from the intrinsic size of the [Painter].
|
|
*/
|
|
@Composable
|
|
@Suppress("LongParameterList")
|
|
fun Image(
|
|
url: String,
|
|
modifier: Modifier = Modifier,
|
|
private: Boolean = false,
|
|
targetSize: Dp = 100.dp,
|
|
contentDescription: String? = null,
|
|
alignment: Alignment = Alignment.Center,
|
|
contentScale: ContentScale = ContentScale.Fit,
|
|
) {
|
|
ImageLoader(
|
|
url = url,
|
|
client = components.core.client,
|
|
private = private,
|
|
targetSize = targetSize
|
|
) {
|
|
WithImage { painter ->
|
|
androidx.compose.foundation.Image(
|
|
painter = painter,
|
|
modifier = modifier,
|
|
contentDescription = contentDescription,
|
|
alignment = alignment,
|
|
contentScale = contentScale
|
|
)
|
|
}
|
|
|
|
WithDefaultPlaceholder(modifier, contentDescription)
|
|
|
|
WithDefaultFallback(modifier, contentDescription)
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
@Preview
|
|
private fun ImagePreview() {
|
|
Image(
|
|
"https://mozilla.com",
|
|
Modifier.height(100.dp).width(200.dp)
|
|
)
|
|
}
|