mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-05-18 07:51:46 +00:00
feat: implement nuvioSecondaryClick modifier for secondary click handling
This commit is contained in:
parent
89ca233f71
commit
76cce3180f
9 changed files with 54 additions and 4 deletions
|
|
@ -0,0 +1,5 @@
|
|||
package com.nuvio.app.core.ui
|
||||
|
||||
import androidx.compose.ui.Modifier
|
||||
|
||||
internal actual fun Modifier.nuvioSecondaryClick(onSecondaryClick: (() -> Unit)?): Modifier = this
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.nuvio.app.core.ui
|
||||
|
||||
import androidx.compose.ui.Modifier
|
||||
|
||||
internal expect fun Modifier.nuvioSecondaryClick(onSecondaryClick: (() -> Unit)?): Modifier
|
||||
|
|
@ -343,10 +343,11 @@ internal fun Modifier.posterCardClickable(
|
|||
onLongClick: (() -> Unit)?,
|
||||
): Modifier =
|
||||
if (onClick != null || onLongClick != null) {
|
||||
combinedClickable(
|
||||
onClick = { onClick?.invoke() },
|
||||
onLongClick = onLongClick,
|
||||
)
|
||||
nuvioSecondaryClick(onLongClick)
|
||||
.combinedClickable(
|
||||
onClick = { onClick?.invoke() },
|
||||
onLongClick = onLongClick,
|
||||
)
|
||||
} else {
|
||||
this
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||
import androidx.compose.ui.unit.dp
|
||||
import com.nuvio.app.core.ui.AppIconResource
|
||||
import com.nuvio.app.core.ui.appIconPainter
|
||||
import com.nuvio.app.core.ui.nuvioSecondaryClick
|
||||
import nuvio.composeapp.generated.resources.Res
|
||||
import nuvio.composeapp.generated.resources.action_play
|
||||
import nuvio.composeapp.generated.resources.action_save
|
||||
|
|
@ -70,6 +71,7 @@ fun DetailActionButtons(
|
|||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.nuvioSecondaryClick(onPlayLongClick)
|
||||
.combinedClickable(
|
||||
onClick = onPlayClick,
|
||||
onLongClick = onPlayLongClick,
|
||||
|
|
@ -104,6 +106,7 @@ fun DetailActionButtons(
|
|||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.nuvioSecondaryClick(onSaveLongClick)
|
||||
.combinedClickable(
|
||||
onClick = onSaveClick,
|
||||
onLongClick = onSaveLongClick,
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ import com.nuvio.app.core.format.formatReleaseDateForDisplay
|
|||
import com.nuvio.app.core.i18n.localizedSeasonEpisodeCode
|
||||
import com.nuvio.app.core.ui.NuvioAnimatedWatchedBadge
|
||||
import com.nuvio.app.core.ui.NuvioProgressBar
|
||||
import com.nuvio.app.core.ui.nuvioSecondaryClick
|
||||
import com.nuvio.app.features.details.MetaDetails
|
||||
import com.nuvio.app.features.details.MetaEpisodeCardStyle
|
||||
import com.nuvio.app.features.details.MetaVideo
|
||||
|
|
@ -656,6 +657,7 @@ private fun EpisodeHorizontalCard(
|
|||
color = Color.White.copy(alpha = 0.12f),
|
||||
shape = cardShape,
|
||||
)
|
||||
.nuvioSecondaryClick(onLongPress)
|
||||
.combinedClickable(
|
||||
enabled = onClick != null || onLongPress != null,
|
||||
onClick = { onClick?.invoke() },
|
||||
|
|
@ -1011,6 +1013,7 @@ private fun EpisodeListCard(
|
|||
color = Color.White.copy(alpha = 0.1f),
|
||||
shape = cardShape,
|
||||
)
|
||||
.nuvioSecondaryClick(onLongPress)
|
||||
.combinedClickable(
|
||||
enabled = onClick != null || onLongPress != null,
|
||||
onClick = { onClick?.invoke() },
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ import coil3.compose.AsyncImage
|
|||
import com.nuvio.app.core.ui.localizedContinueWatchingSubtitle
|
||||
import com.nuvio.app.core.ui.NuvioProgressBar
|
||||
import com.nuvio.app.core.ui.NuvioShelfSection
|
||||
import com.nuvio.app.core.ui.nuvioSecondaryClick
|
||||
import com.nuvio.app.core.ui.posterCardClickable
|
||||
import com.nuvio.app.features.watchprogress.ContinueWatchingItem
|
||||
import com.nuvio.app.features.watchprogress.ContinueWatchingSectionStyle
|
||||
|
|
@ -334,6 +335,7 @@ private fun ContinueWatchingWideCard(
|
|||
color = Color.White.copy(alpha = 0.15f),
|
||||
shape = RoundedCornerShape(layout.cardRadius),
|
||||
)
|
||||
.nuvioSecondaryClick(onLongClick)
|
||||
.combinedClickable(
|
||||
enabled = onClick != null || onLongClick != null,
|
||||
onClick = { onClick?.invoke() },
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
|||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.rememberModalBottomSheetState
|
||||
import coil3.compose.AsyncImage
|
||||
import com.nuvio.app.core.ui.nuvioSecondaryClick
|
||||
import com.nuvio.app.core.ui.nuvioSafeBottomPadding
|
||||
import com.nuvio.app.features.watchprogress.WatchProgressRepository
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
@ -963,6 +964,7 @@ private fun StreamCard(
|
|||
)
|
||||
.clip(cardShape)
|
||||
.background(Color.White.copy(alpha = 0.05f))
|
||||
.nuvioSecondaryClick(if (isEnabled) onLongClick else null)
|
||||
.combinedClickable(
|
||||
enabled = isEnabled,
|
||||
onClick = onClick,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
package com.nuvio.app.core.ui
|
||||
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.pointer.PointerEventPass
|
||||
import androidx.compose.ui.input.pointer.PointerEventType
|
||||
import androidx.compose.ui.input.pointer.isSecondary
|
||||
import androidx.compose.ui.input.pointer.onPointerEvent
|
||||
|
||||
@OptIn(ExperimentalComposeUiApi::class)
|
||||
internal actual fun Modifier.nuvioSecondaryClick(onSecondaryClick: (() -> Unit)?): Modifier =
|
||||
if (onSecondaryClick != null) {
|
||||
onPointerEvent(
|
||||
eventType = PointerEventType.Press,
|
||||
pass = PointerEventPass.Initial,
|
||||
) { event ->
|
||||
if (event.button?.isSecondary == true) {
|
||||
event.changes.forEach { it.consume() }
|
||||
onSecondaryClick()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.nuvio.app.core.ui
|
||||
|
||||
import androidx.compose.ui.Modifier
|
||||
|
||||
internal actual fun Modifier.nuvioSecondaryClick(onSecondaryClick: (() -> Unit)?): Modifier = this
|
||||
Loading…
Reference in a new issue