/* 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) ) }