|
|
@ -7,6 +7,8 @@ package org.mozilla.fenix.compose.tabstray
|
|
|
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
|
|
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
|
|
|
import androidx.compose.foundation.background
|
|
|
|
import androidx.compose.foundation.background
|
|
|
|
import androidx.compose.foundation.combinedClickable
|
|
|
|
import androidx.compose.foundation.combinedClickable
|
|
|
|
|
|
|
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
|
|
|
|
|
|
|
import androidx.compose.foundation.isSystemInDarkTheme
|
|
|
|
import androidx.compose.foundation.layout.Box
|
|
|
|
import androidx.compose.foundation.layout.Box
|
|
|
|
import androidx.compose.foundation.layout.Column
|
|
|
|
import androidx.compose.foundation.layout.Column
|
|
|
|
import androidx.compose.foundation.layout.Row
|
|
|
|
import androidx.compose.foundation.layout.Row
|
|
|
@ -23,7 +25,9 @@ import androidx.compose.material.Icon
|
|
|
|
import androidx.compose.material.IconButton
|
|
|
|
import androidx.compose.material.IconButton
|
|
|
|
import androidx.compose.material.Text
|
|
|
|
import androidx.compose.material.Text
|
|
|
|
import androidx.compose.material.rememberDismissState
|
|
|
|
import androidx.compose.material.rememberDismissState
|
|
|
|
|
|
|
|
import androidx.compose.material.ripple.rememberRipple
|
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
|
|
|
|
import androidx.compose.runtime.remember
|
|
|
|
import androidx.compose.ui.Alignment
|
|
|
|
import androidx.compose.ui.Alignment
|
|
|
|
import androidx.compose.ui.Modifier
|
|
|
|
import androidx.compose.ui.Modifier
|
|
|
|
import androidx.compose.ui.draw.clip
|
|
|
|
import androidx.compose.ui.draw.clip
|
|
|
@ -39,6 +43,7 @@ import androidx.compose.ui.unit.sp
|
|
|
|
import mozilla.components.browser.state.state.TabSessionState
|
|
|
|
import mozilla.components.browser.state.state.TabSessionState
|
|
|
|
import mozilla.components.browser.state.state.createTab
|
|
|
|
import mozilla.components.browser.state.state.createTab
|
|
|
|
import mozilla.components.support.ktx.kotlin.MAX_URI_LENGTH
|
|
|
|
import mozilla.components.support.ktx.kotlin.MAX_URI_LENGTH
|
|
|
|
|
|
|
|
import mozilla.components.ui.colors.PhotonColors
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
import org.mozilla.fenix.compose.SwipeToDismiss
|
|
|
|
import org.mozilla.fenix.compose.SwipeToDismiss
|
|
|
|
import org.mozilla.fenix.compose.TabThumbnail
|
|
|
|
import org.mozilla.fenix.compose.TabThumbnail
|
|
|
@ -93,6 +98,9 @@ fun TabListItem(
|
|
|
|
},
|
|
|
|
},
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Used to propagate the ripple effect to the whole tab
|
|
|
|
|
|
|
|
val interactionSource = remember { MutableInteractionSource() }
|
|
|
|
|
|
|
|
|
|
|
|
SwipeToDismiss(
|
|
|
|
SwipeToDismiss(
|
|
|
|
state = dismissState,
|
|
|
|
state = dismissState,
|
|
|
|
enabled = !multiSelectionEnabled,
|
|
|
|
enabled = !multiSelectionEnabled,
|
|
|
@ -106,6 +114,13 @@ fun TabListItem(
|
|
|
|
.background(FirefoxTheme.colors.layer3)
|
|
|
|
.background(FirefoxTheme.colors.layer3)
|
|
|
|
.background(contentBackgroundColor)
|
|
|
|
.background(contentBackgroundColor)
|
|
|
|
.combinedClickable(
|
|
|
|
.combinedClickable(
|
|
|
|
|
|
|
|
interactionSource = interactionSource,
|
|
|
|
|
|
|
|
indication = rememberRipple(
|
|
|
|
|
|
|
|
color = when (isSystemInDarkTheme()) {
|
|
|
|
|
|
|
|
true -> PhotonColors.White
|
|
|
|
|
|
|
|
false -> PhotonColors.Black
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
onLongClick = { onLongClick(tab) },
|
|
|
|
onLongClick = { onLongClick(tab) },
|
|
|
|
onClick = { onClick(tab) },
|
|
|
|
onClick = { onClick(tab) },
|
|
|
|
)
|
|
|
|
)
|
|
|
@ -117,6 +132,7 @@ fun TabListItem(
|
|
|
|
multiSelectionEnabled = multiSelectionEnabled,
|
|
|
|
multiSelectionEnabled = multiSelectionEnabled,
|
|
|
|
isSelected = multiSelectionSelected,
|
|
|
|
isSelected = multiSelectionSelected,
|
|
|
|
onMediaIconClicked = { onMediaClick(it) },
|
|
|
|
onMediaIconClicked = { onMediaClick(it) },
|
|
|
|
|
|
|
|
interactionSource = interactionSource,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
Column(
|
|
|
|
Column(
|
|
|
@ -172,6 +188,7 @@ private fun Thumbnail(
|
|
|
|
multiSelectionEnabled: Boolean,
|
|
|
|
multiSelectionEnabled: Boolean,
|
|
|
|
isSelected: Boolean,
|
|
|
|
isSelected: Boolean,
|
|
|
|
onMediaIconClicked: ((TabSessionState) -> Unit),
|
|
|
|
onMediaIconClicked: ((TabSessionState) -> Unit),
|
|
|
|
|
|
|
|
interactionSource: MutableInteractionSource,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
Box {
|
|
|
|
Box {
|
|
|
|
TabThumbnail(
|
|
|
|
TabThumbnail(
|
|
|
@ -215,6 +232,7 @@ private fun Thumbnail(
|
|
|
|
tab = tab,
|
|
|
|
tab = tab,
|
|
|
|
onMediaIconClicked = onMediaIconClicked,
|
|
|
|
onMediaIconClicked = onMediaIconClicked,
|
|
|
|
modifier = Modifier.align(Alignment.TopEnd),
|
|
|
|
modifier = Modifier.align(Alignment.TopEnd),
|
|
|
|
|
|
|
|
interactionSource = interactionSource,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|