package com.vgmlr.jamb
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Sort
import androidx.compose.material.icons.filled.Pause
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material.icons.filled.Repeat
import androidx.compose.material.icons.filled.Shuffle
import androidx.compose.material.icons.filled.SkipNext
import androidx.compose.material.icons.filled.SkipPrevious
import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.geometry.CornerRadius
@Composable
internal fun ControlBar(
mode: String,
repeat: Boolean,
onToggleMode: () -> Unit,
onPrev: () -> Unit,
onNext: () -> Unit,
onToggleRepeat: () -> Unit,
modifier: Modifier = Modifier
) {
Row(
modifier = modifier
.fillMaxWidth()
.height(56.dp)
.background(JambColors.Primary),
horizontalArrangement = Arrangement.SpaceEvenly,
verticalAlignment = Alignment.CenterVertically
) {
if (mode == JambPrefs.MODE_SORTED)
ControlIcon(Icons.AutoMirrored.Filled.Sort, "Sort", onToggleMode, iconSize = 20.dp)
else
ControlIcon(Icons.Filled.Shuffle, "Shuffle", onToggleMode, iconSize = 20.dp)
ControlIcon(Icons.Filled.SkipPrevious, "Back", onPrev, iconSize = 40.dp)
Box(
modifier = Modifier
.width(106.dp)
.fillMaxHeight()
.drawBehind {
val w = 16.dp.toPx()
val r = CornerRadius(3.dp.toPx())
drawRoundRect(
JambColors.SubPrimary.copy(alpha = 0.5f),
size = Size(w, size.height),
cornerRadius = r
)
drawRoundRect(
JambColors.SubPrimary.copy(alpha = 0.5f),
topLeft = Offset(size.width - w, 0f),
size = Size(w, size.height),
cornerRadius = r
)
}
)
ControlIcon(Icons.Filled.SkipNext, "Next", onNext, iconSize = 40.dp)
ControlIcon(
Icons.Filled.Repeat,
"Repeat",
onToggleRepeat,
tint = if (repeat) JambColors.Title else JambColors.Title.copy(alpha = 0.35f),
iconSize = 20.dp
)
}
}
@Composable
internal fun BigPlayButton(
isPlaying: Boolean,
onClick: () -> Unit,
height: Dp,
modifier: Modifier = Modifier
) {
Box(
modifier = modifier
.size(width = 102.dp, height = height)
.clip(RoundedCornerShape(20.dp))
.background(JambColors.Primary)
.clickable(onClick = onClick),
contentAlignment = Alignment.Center
) {
Icon(
if (isPlaying) Icons.Filled.Pause else Icons.Filled.PlayArrow,
"Play/Pause",
tint = JambColors.Title,
modifier = Modifier.size(60.dp)
)
}
}
@Composable
private fun ControlIcon(
icon: ImageVector,
desc: String,
onClick: () -> Unit,
tint: Color = JambColors.Title,
iconSize: Dp = 35.dp
) {
Box(
modifier = Modifier
.fillMaxHeight()
.clickable(onClick = onClick)
.padding(horizontal = 10.dp),
contentAlignment = Alignment.Center
) {
Icon(icon, desc, tint = tint, modifier = Modifier.size(iconSize))
}
}