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.
iceraven-browser/app/src/main/java/org/mozilla/fenix/compose/tabstray/MediaImage.kt

69 lines
2.6 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.tabstray
import androidx.appcompat.content.res.AppCompatResources
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.google.accompanist.drawablepainter.rememberDrawablePainter
import mozilla.components.browser.state.state.TabSessionState
import mozilla.components.browser.state.state.createTab
import mozilla.components.concept.engine.mediasession.MediaSession.PlaybackState
import org.mozilla.fenix.R
import org.mozilla.fenix.compose.annotation.LightDarkPreview
import org.mozilla.fenix.theme.FirefoxTheme
/**
* Controller buttons for the media (play/pause) state for the given [tab].
*
* @param tab [TabSessionState] which the image should be shown.
* @param onMediaIconClicked handles the click event when tab has media session like play/pause.
* @param modifier [Modifier] to be applied to the layout.
*/
@Composable
fun MediaImage(
tab: TabSessionState,
onMediaIconClicked: ((TabSessionState) -> Unit),
modifier: Modifier,
) {
val (icon, contentDescription) = when (tab.mediaSessionState?.playbackState) {
PlaybackState.PAUSED -> {
R.drawable.media_state_play to R.string.mozac_feature_media_notification_action_play
}
PlaybackState.PLAYING -> {
R.drawable.media_state_pause to R.string.mozac_feature_media_notification_action_pause
}
else -> return
}
val drawable = AppCompatResources.getDrawable(LocalContext.current, icon)
// Follow up ticket https://github.com/mozilla-mobile/fenix/issues/25774
Image(
painter = rememberDrawablePainter(drawable = drawable),
contentDescription = stringResource(contentDescription),
modifier = modifier.clickable { onMediaIconClicked(tab) },
)
}
@Composable
@LightDarkPreview
private fun ImagePreview() {
FirefoxTheme {
MediaImage(
tab = createTab(url = "https://mozilla.com"),
onMediaIconClicked = {},
modifier = Modifier
.height(100.dp)
.width(200.dp),
)
}
}