From 177fc5670c5054e8f04faa9eb34870784e8c4395 Mon Sep 17 00:00:00 2001 From: le-firehawk Date: Tue, 5 Aug 2025 22:39:41 +0930 Subject: [PATCH] feat: Fix lyric scrolling during playback, keep screen on while viewing --- .../ui/fragment/PlayerLyricsFragment.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerLyricsFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerLyricsFragment.java index 58e7a7c5..7140632f 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerLyricsFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerLyricsFragment.java @@ -6,11 +6,13 @@ import android.os.Bundle; import android.os.Handler; import android.text.Spannable; import android.text.SpannableString; +import android.text.Layout; import android.text.style.ForegroundColorSpan; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -28,6 +30,7 @@ import com.cappielloantonio.tempo.subsonic.models.Line; import com.cappielloantonio.tempo.subsonic.models.LyricsList; import com.cappielloantonio.tempo.util.MusicUtil; import com.cappielloantonio.tempo.util.OpenSubsonicExtensionsUtil; +import com.cappielloantonio.tempo.util.Preferences; import com.cappielloantonio.tempo.viewmodel.PlayerBottomSheetViewModel; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; @@ -76,12 +79,16 @@ public class PlayerLyricsFragment extends Fragment { public void onResume() { super.onResume(); bindMediaController(); + requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } @Override public void onPause() { super.onPause(); releaseHandler(); + if (!Preferences.isDisplayAlwaysOn()) { + requireActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } } @Override @@ -281,10 +288,18 @@ public class PlayerLyricsFragment extends Fragment { } private int getScroll(List lines, Line toHighlight) { - int lineHeight = bind.nowPlayingSongLyricsTextView.getLineHeight(); - int lineCount = getLineCount(lines, toHighlight); - int scrollViewHeight = bind.nowPlayingSongLyricsSrollView.getHeight(); + int startIndex = getStartPosition(lines, toHighlight); + Layout layout = bind.nowPlayingSongLyricsTextView.getLayout(); + if (layout == null) return 0; - return lineHeight * lineCount < scrollViewHeight / 2 ? 0 : lineHeight * lineCount - scrollViewHeight / 2 + lineHeight; + int line = layout.getLineForOffset(startIndex); + int lineTop = layout.getLineTop(line); + int lineBottom = layout.getLineBottom(line); + int lineCenter = (lineTop + lineBottom) / 2; + + int scrollViewHeight = bind.nowPlayingSongLyricsSrollView.getHeight(); + int scroll = lineCenter - scrollViewHeight / 2; + + return Math.max(scroll, 0); } } \ No newline at end of file