v0.1.0-Z (vc=14): VideoDetail to YT-standard order
Under the thumbnail: title → uploader → chips → buttons → description → Recommended → More from <uploader>. The Z2/W2 inverted layout shipped in Y put discovery cards before the title — bad UX, fixed back to standard. Inline player coming next.
This commit is contained in:
parent
591cf4ae21
commit
0188b1b973
2 changed files with 38 additions and 37 deletions
|
|
@ -15,6 +15,6 @@ const val NEWPIPE_APPLICATION_ID_OLD = "org.schabi.newpipe"
|
||||||
const val NEWPIPE_APPLICATION_ID_NEW = "net.newpipe.app"
|
const val NEWPIPE_APPLICATION_ID_NEW = "net.newpipe.app"
|
||||||
|
|
||||||
// Sulkta fork — Straw
|
// Sulkta fork — Straw
|
||||||
const val STRAW_VERSION_CODE = 13
|
const val STRAW_VERSION_CODE = 14
|
||||||
const val STRAW_VERSION_NAME = "0.1.0-Y"
|
const val STRAW_VERSION_NAME = "0.1.0-Z"
|
||||||
const val STRAW_APPLICATION_ID = "com.sulkta.straw"
|
const val STRAW_APPLICATION_ID = "com.sulkta.straw"
|
||||||
|
|
|
||||||
|
|
@ -123,40 +123,9 @@ fun VideoDetailScreen(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Spacer(modifier = Modifier.height(20.dp))
|
Spacer(modifier = Modifier.height(12.dp))
|
||||||
|
|
||||||
// ── Recommended ──────────────────────────────────────────
|
// ── Title + uploader ─────────────────────────────────────
|
||||||
if (d.related.isNotEmpty()) {
|
|
||||||
Text(
|
|
||||||
"Recommended",
|
|
||||||
style = MaterialTheme.typography.titleSmall,
|
|
||||||
fontWeight = FontWeight.SemiBold,
|
|
||||||
)
|
|
||||||
Spacer(modifier = Modifier.height(8.dp))
|
|
||||||
d.related.take(20).forEach { rel ->
|
|
||||||
RelatedRow(rel) { onOpenVideo(rel.url, rel.title) }
|
|
||||||
androidx.compose.material3.HorizontalDivider()
|
|
||||||
}
|
|
||||||
Spacer(modifier = Modifier.height(20.dp))
|
|
||||||
}
|
|
||||||
|
|
||||||
// ── More from <uploader> ─────────────────────────────────
|
|
||||||
if (d.moreFromChannel.isNotEmpty()) {
|
|
||||||
Text(
|
|
||||||
if (d.uploader.isBlank()) "More from this channel"
|
|
||||||
else "More from ${d.uploader}",
|
|
||||||
style = MaterialTheme.typography.titleSmall,
|
|
||||||
fontWeight = FontWeight.SemiBold,
|
|
||||||
)
|
|
||||||
Spacer(modifier = Modifier.height(8.dp))
|
|
||||||
d.moreFromChannel.take(20).forEach { item ->
|
|
||||||
RelatedRow(item) { onOpenVideo(item.url, item.title) }
|
|
||||||
androidx.compose.material3.HorizontalDivider()
|
|
||||||
}
|
|
||||||
Spacer(modifier = Modifier.height(20.dp))
|
|
||||||
}
|
|
||||||
|
|
||||||
// ── Video details ────────────────────────────────────────
|
|
||||||
Text(
|
Text(
|
||||||
text = d.title,
|
text = d.title,
|
||||||
style = MaterialTheme.typography.titleLarge,
|
style = MaterialTheme.typography.titleLarge,
|
||||||
|
|
@ -174,7 +143,7 @@ fun VideoDetailScreen(
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.height(12.dp))
|
Spacer(modifier = Modifier.height(12.dp))
|
||||||
|
|
||||||
// Engagement row: views + RYD likes/dislikes
|
// ── Engagement row: views + RYD likes/dislikes ───────────
|
||||||
Row(
|
Row(
|
||||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
|
@ -222,8 +191,9 @@ fun VideoDetailScreen(
|
||||||
Text("Download")
|
Text("Download")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
Spacer(modifier = Modifier.height(20.dp))
|
||||||
|
|
||||||
|
// ── Description ──────────────────────────────────────────
|
||||||
Text("Description", style = MaterialTheme.typography.titleSmall, fontWeight = FontWeight.SemiBold)
|
Text("Description", style = MaterialTheme.typography.titleSmall, fontWeight = FontWeight.SemiBold)
|
||||||
Spacer(modifier = Modifier.height(8.dp))
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
// AUD-MED: cap input length before regex passes — defends
|
// AUD-MED: cap input length before regex passes — defends
|
||||||
|
|
@ -233,6 +203,37 @@ fun VideoDetailScreen(
|
||||||
style = MaterialTheme.typography.bodySmall,
|
style = MaterialTheme.typography.bodySmall,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ── Recommended ──────────────────────────────────────────
|
||||||
|
if (d.related.isNotEmpty()) {
|
||||||
|
Spacer(modifier = Modifier.height(24.dp))
|
||||||
|
Text(
|
||||||
|
"Recommended",
|
||||||
|
style = MaterialTheme.typography.titleSmall,
|
||||||
|
fontWeight = FontWeight.SemiBold,
|
||||||
|
)
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
d.related.take(20).forEach { rel ->
|
||||||
|
RelatedRow(rel) { onOpenVideo(rel.url, rel.title) }
|
||||||
|
androidx.compose.material3.HorizontalDivider()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── More from <uploader> ─────────────────────────────────
|
||||||
|
if (d.moreFromChannel.isNotEmpty()) {
|
||||||
|
Spacer(modifier = Modifier.height(24.dp))
|
||||||
|
Text(
|
||||||
|
if (d.uploader.isBlank()) "More from this channel"
|
||||||
|
else "More from ${d.uploader}",
|
||||||
|
style = MaterialTheme.typography.titleSmall,
|
||||||
|
fontWeight = FontWeight.SemiBold,
|
||||||
|
)
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
d.moreFromChannel.take(20).forEach { item ->
|
||||||
|
RelatedRow(item) { onOpenVideo(item.url, item.title) }
|
||||||
|
androidx.compose.material3.HorizontalDivider()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (showDownloadDialog) {
|
if (showDownloadDialog) {
|
||||||
val info = state.streamInfo
|
val info = state.streamInfo
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue