diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a37eb34c..0b46ed74 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,8 +26,8 @@ android { applicationId = "dev.typetype.android" minSdk = 23 targetSdk = 37 - versionCode = 10807 - versionName = "1.8.0-beta.7" + versionCode = 10808 + versionName = "1.8.0-beta.8" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" resValue("string", "app_name", "TypeType") } diff --git a/app/src/androidTest/java/dev/typetype/android/feature/player/components/CommentBodyTest.kt b/app/src/androidTest/java/dev/typetype/android/feature/player/components/CommentBodyTest.kt index cf4872be..d1958adc 100644 --- a/app/src/androidTest/java/dev/typetype/android/feature/player/components/CommentBodyTest.kt +++ b/app/src/androidTest/java/dev/typetype/android/feature/player/components/CommentBodyTest.kt @@ -47,6 +47,7 @@ class CommentBodyTest { } composeRule.onNodeWithText("Read more").assertExists().performClick() - composeRule.onNodeWithText("Long comment starts here$suffix").assertExists() + composeRule.onNodeWithText("Show less").assertExists().performClick() + composeRule.onNodeWithText("Read more").assertExists() } } diff --git a/app/src/main/java/dev/typetype/android/data/stream/StreamRepositoryImpl.kt b/app/src/main/java/dev/typetype/android/data/stream/StreamRepositoryImpl.kt index 1b890dd5..7d81fb1c 100644 --- a/app/src/main/java/dev/typetype/android/data/stream/StreamRepositoryImpl.kt +++ b/app/src/main/java/dev/typetype/android/data/stream/StreamRepositoryImpl.kt @@ -180,7 +180,7 @@ internal class StreamRepositoryImpl @Inject constructor( }, storyboard = previewFrames .mapNotNull { it.toDomainStoryboard() } - .maxByOrNull { it.frameWidth }, + .let(::selectStoryboard), startPositionMillis = startPosition * 1000L, sponsorBlockSegments = sponsorBlockSegments.mapNotNull { it.toDomainSponsorBlockSegment(duration) @@ -207,6 +207,11 @@ internal class StreamRepositoryImpl @Inject constructor( .maxByOrNull { it.height } ?.url + private fun selectStoryboard(storyboards: List): StreamStoryboard? = + storyboards.filter { it.frameWidth >= TARGET_STORYBOARD_FRAME_WIDTH } + .minByOrNull { it.frameWidth } + ?: storyboards.maxByOrNull { it.frameWidth } + private fun PreviewFrameItem.toDomainStoryboard(): StreamStoryboard? = StreamStoryboard( urls = urls.filter(String::isNotBlank), @@ -289,6 +294,7 @@ internal suspend fun cancellableStreamResult( } private const val SABR_DELIVERY_METHOD = "sabr" +private const val TARGET_STORYBOARD_FRAME_WIDTH = 160 private class SabrContractException : IllegalStateException("The server returned no playable SABR contract"), diff --git a/app/src/main/java/dev/typetype/android/feature/player/components/CommentListItems.kt b/app/src/main/java/dev/typetype/android/feature/player/components/CommentListItems.kt index ef11922d..f6ee514e 100644 --- a/app/src/main/java/dev/typetype/android/feature/player/components/CommentListItems.kt +++ b/app/src/main/java/dev/typetype/android/feature/player/components/CommentListItems.kt @@ -139,13 +139,17 @@ private fun ExpandableCommentText( maxLines = if (expanded) Int.MAX_VALUE else COMMENT_COLLAPSE_LINE_LIMIT, overflow = if (expanded) TextOverflow.Clip else TextOverflow.Ellipsis, ) - if (needsTruncation && !expanded) { + if (needsTruncation) { TextButton( - onClick = { expanded = true }, + onClick = { expanded = !expanded }, contentPadding = PaddingValues(horizontal = 4.dp), modifier = Modifier.padding(top = 2.dp), ) { - Text(stringResource(R.string.comments_read_more)) + Text( + stringResource( + if (expanded) R.string.comments_show_less else R.string.comments_read_more, + ) + ) } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e98116f3..8cd0a910 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -497,6 +497,7 @@ Comments No comments Read more + Show less Likes: %1$s Couldn\'t load replies Couldn\'t load comments