Skip to content

Commit

Permalink
Improve lyrics scroll behaviour; minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
aleksey-saenko committed May 31, 2024
1 parent 726d255 commit 35445bb
Show file tree
Hide file tree
Showing 10 changed files with 32 additions and 12 deletions.
1 change: 0 additions & 1 deletion core/strings/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,6 @@
<string name="stop_player">Arrêter le lecteur</string>
<string name="start_player">Démarrer le lecteur</string>
<string name="edit">Éditer</string>
<string name="share_options">Options de partage</string>
<string name="copy">Copier</string>
<string name="copied">Copié</string>
<string name="metadata">Métadonnées</string>
Expand Down
1 change: 0 additions & 1 deletion core/strings/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@
<string name="stop_player">Остановить проигрыватель</string>
<string name="start_player">Запустить проигрыватель</string>
<string name="edit">Редактировать</string>
<string name="share_options">Параметры обмена</string>
<string name="copy">Копировать</string>
<string name="copied">Скопировано</string>
<string name="metadata">Метаданные</string>
Expand Down
1 change: 0 additions & 1 deletion core/strings/src/main/res/values-tr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@
<string name="stop_player">Oynatıcıyı durdur</string>
<string name="start_player">Oynatıcıyı başlat</string>
<string name="edit">Düzenle</string>
<string name="share_options">Paylaşım seçenekleri</string>
<string name="copy">Kopyala</string>
<string name="copied">Kopyalandı</string>
<string name="metadata">Meta veriler</string>
Expand Down
4 changes: 2 additions & 2 deletions core/strings/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,9 @@
<string name="web_browser_not_found_toast">Web browser not found</string>
<string name="cannot_share_toast">Can\'t find any application to share</string>
<string name="reset">Reset</string>
<string name="unviewed_track_label">NEW</string>
<string name="mark_all_as_viewed">Mark all as viewed</string>
<!-- This label must be no longer than 5 characters, otherwise leave it without translation or replace it with "+1"-->
<string name="unviewed_track_label">NEW</string>
<string name="format_amount_of_new_tracks">%s new tracks</string>
<string name="filters">Filters</string>
<string name="filter_favorite_status">Favorite status</string>
Expand Down Expand Up @@ -240,7 +241,6 @@
<string name="stop_player">Stop player</string>
<string name="start_player">Start player</string>
<string name="edit">Edit</string>
<string name="share_options">Share options</string>
<string name="copy">Copy</string>
<string name="copied">Copied</string>
<string name="metadata">Metadata</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ internal fun LibraryScreen(
LaunchedEffect(uiState.trackFilter) {
if (newFilterApplied) {
lazyGridState.animateScrollToItem(0)
topBarBehaviour.state.contentOffset = 0f
newFilterApplied = false
}
}
Expand All @@ -111,6 +112,7 @@ internal fun LibraryScreen(
LaunchedEffect(uiState.trackFilter) {
if (newFilterApplied) {
lazyListState.animateScrollToItem(0)
topBarBehaviour.state.contentOffset = 0f
newFilterApplied = false
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ internal fun PreferenceClickableItem(
verticalArrangement = Arrangement.Center,
modifier = modifier
.fillMaxWidth()
.heightIn(min = 76.dp)
.heightIn(min = 80.dp)
.clickable { onItemClick() }
.padding(16.dp)
.alpha(if (enabled) 1f else 0.7f)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ internal fun PreferenceSwitchItem(
verticalAlignment = Alignment.CenterVertically,
modifier = modifier
.fillMaxWidth()
.heightIn(min = 76.dp)
.heightIn(min = 80.dp)
.clickable(
onClick = onClick,
enabled = enabled
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package com.mrsep.musicrecognizer.feature.track.presentation.lyrics
import androidx.activity.compose.BackHandler
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.animate
import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
Expand Down Expand Up @@ -238,6 +241,22 @@ internal fun LyricsScreen(
}
var autoScrollSpeed by rememberSaveable { mutableFloatStateOf(1f) }
val scrollInProgress = lyricsScrollState.isScrollInProgress
// Top bar doesn't collapse on manual (auto) scroll, so do it here
LaunchedEffect(autoScrollStarted) {
if (!autoScrollStarted) return@LaunchedEffect
with(topBarBehaviour) {
if (state.collapsedFraction < 0.99f) {
animate(
initialValue = state.heightOffset,
targetValue = state.heightOffsetLimit,
animationSpec = spring(stiffness = Spring.StiffnessMedium)
) { value, _ ->
state.heightOffset = value
}
state.contentOffset = state.heightOffsetLimit
}
}
}
LaunchedEffect(
autoScrollStarted,
autoScrollSpeed,
Expand All @@ -247,13 +266,13 @@ internal fun LyricsScreen(
if (autoScrollStarted) {
val scrollFraction =
1 - lyricsScrollState.value.toFloat() / lyricsScrollState.maxValue
// 3.5 min default, adjust in 1.75..7 min
val scrollDuration =
(210 / autoScrollSpeed * scrollFraction * 1000).toInt()
// 3.5 min default (210 seconds), adjust in 1.75..7 min
val trackDurationMs = uiState.trackDurationMs ?: 210_000
val scrollDurationMs = trackDurationMs / autoScrollSpeed * scrollFraction
lyricsScrollState.animateScrollTo(
value = lyricsScrollState.maxValue,
animationSpec = tween(
durationMillis = scrollDuration,
durationMillis = scrollDurationMs.toInt(),
easing = LinearEasing
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ internal class LyricsViewModel @Inject constructor(
artworkBasedThemeEnabled = preferences.artworkBasedThemeEnabled,
themeMode = preferences.themeMode,
isTrackViewed = track.isViewed,
trackDurationMs = track.duration?.toMillis()?.toInt()
)
}
} ?: LyricsUiState.LyricsNotFound
Expand Down Expand Up @@ -81,6 +82,7 @@ internal sealed class LyricsUiState {
val artworkBasedThemeEnabled: Boolean,
val themeMode: ThemeMode,
val isTrackViewed: Boolean,
val trackDurationMs: Int?,
) : LyricsUiState()

}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ internal fun ShareBottomSheet(
yearSelected || selectedMusicServices.isNotEmpty() || lyricsSelected

Text(
text = stringResource(StringsR.string.share_options),
text = stringResource(StringsR.string.share),
style = MaterialTheme.typography.titleLarge,
modifier = Modifier.align(Alignment.CenterHorizontally)
)
Expand Down

0 comments on commit 35445bb

Please sign in to comment.