diff options
Diffstat (limited to 'app')
3 files changed, 46 insertions, 8 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java index 392ef4d07..cd7a6b913 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java @@ -96,6 +96,8 @@ public class AudioPlayerFragment extends Fragment implements private Disposable disposable; private boolean showTimeLeft; private boolean hasChapters = false; + private boolean seekedToChapterStart = false; + private int currentChapterIndex = -1; private TabLayoutMediator tabLayoutMediator; @Override @@ -418,8 +420,10 @@ public class AudioPlayerFragment extends Fragment implements if (media != null && media.getChapters() != null) { setHasChapters(media.getChapters().size() > 0); + currentChapterIndex = ChapterUtils.getCurrentChapterIndex(media, controller.getPosition()); } else { setHasChapters(false); + currentChapterIndex = -1; } updatePosition(new PlaybackPositionEvent(controller.getPosition(), controller.getDuration())); updatePlaybackSpeedButton(media); @@ -496,7 +500,21 @@ public class AudioPlayerFragment extends Fragment implements float prog = progress / ((float) seekBar.getMax()); TimeSpeedConverter converter = new TimeSpeedConverter(controller.getCurrentPlaybackSpeedMultiplier()); int position = converter.convert((int) (prog * controller.getDuration())); - txtvSeek.setText(Converter.getDurationStringLong(position)); + int newChapterIndex = ChapterUtils.getCurrentChapterIndex(controller.getMedia(), position); + if (newChapterIndex > -1) { + if (!sbPosition.isPressed() && currentChapterIndex != newChapterIndex) { + currentChapterIndex = newChapterIndex; + position = (int) controller.getMedia().getChapters().get(currentChapterIndex).getStart(); + seekedToChapterStart = true; + controller.seekTo(position); + updateUi(controller.getMedia()); + sbPosition.highlightCurrentChapter(); + } + txtvSeek.setText(controller.getMedia().getChapters().get(newChapterIndex).getTitle() + + "\n" + Converter.getDurationStringLong(position)); + } else { + txtvSeek.setText(Converter.getDurationStringLong(position)); + } } } @@ -515,8 +533,12 @@ public class AudioPlayerFragment extends Fragment implements @Override public void onStopTrackingTouch(SeekBar seekBar) { if (controller != null) { - float prog = seekBar.getProgress() / ((float) seekBar.getMax()); - controller.seekTo((int) (prog * controller.getDuration())); + if (seekedToChapterStart) { + seekedToChapterStart = false; + } else { + float prog = seekBar.getProgress() / ((float) seekBar.getMax()); + controller.seekTo((int) (prog * controller.getDuration())); + } } cardViewSeek.setScaleX(1f); cardViewSeek.setScaleY(1f); diff --git a/app/src/main/java/de/danoeh/antennapod/view/ChapterSeekBar.java b/app/src/main/java/de/danoeh/antennapod/view/ChapterSeekBar.java index 9752c1464..e002d72ca 100644 --- a/app/src/main/java/de/danoeh/antennapod/view/ChapterSeekBar.java +++ b/app/src/main/java/de/danoeh/antennapod/view/ChapterSeekBar.java @@ -3,6 +3,8 @@ package de.danoeh.antennapod.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; +import android.os.Handler; +import android.os.Looper; import android.util.AttributeSet; import de.danoeh.antennapod.ui.common.ThemeUtils; @@ -15,6 +17,7 @@ public class ChapterSeekBar extends androidx.appcompat.widget.AppCompatSeekBar { private float progressPrimary; private float progressSecondary; private float[] dividerPos; + private boolean isHighlighted = false; private final Paint paintBackground = new Paint(); private final Paint paintProgressPrimary = new Paint(); @@ -59,6 +62,17 @@ public class ChapterSeekBar extends androidx.appcompat.widget.AppCompatSeekBar { } } + public void highlightCurrentChapter() { + isHighlighted = true; + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + isHighlighted = false; + invalidate(); + } + }, 1000); + } + @Override protected synchronized void onDraw(Canvas canvas) { top = getTop() + density * 7.5f; @@ -87,7 +101,7 @@ public class ChapterSeekBar extends androidx.appcompat.widget.AppCompatSeekBar { private void drawProgressChapters(Canvas canvas) { final int saveCount = canvas.save(); int currChapter = 1; - float chapterMargin = density * 0.6f; + float chapterMargin = density * 1.2f; float topExpanded = getTop() + density * 7; float bottomExpanded = getBottom() - density * 7; @@ -95,16 +109,16 @@ public class ChapterSeekBar extends androidx.appcompat.widget.AppCompatSeekBar { for (int i = 1; i < dividerPos.length; i++) { float right = dividerPos[i] * width - chapterMargin; - float left = dividerPos[i - 1] * width + chapterMargin; + float left = dividerPos[i - 1] * width; float rightCurr = dividerPos[currChapter] * width - chapterMargin; - float leftCurr = dividerPos[currChapter - 1] * width + chapterMargin; + float leftCurr = dividerPos[currChapter - 1] * width; canvas.drawRect(left, top, right, bottom, paintBackground); if (right < progressPrimary) { currChapter = i + 1; canvas.drawRect(left, top, right, bottom, paintProgressPrimary); - } else if (isPressed()) { + } else if (isHighlighted || isPressed()) { canvas.drawRect(leftCurr, topExpanded, rightCurr, bottomExpanded, paintBackground); canvas.drawRect(leftCurr, topExpanded, progressPrimary, bottomExpanded, paintProgressPrimary); } else { diff --git a/app/src/main/res/layout/audioplayer_fragment.xml b/app/src/main/res/layout/audioplayer_fragment.xml index 73e8ec5e3..3685032e6 100644 --- a/app/src/main/res/layout/audioplayer_fragment.xml +++ b/app/src/main/res/layout/audioplayer_fragment.xml @@ -56,6 +56,8 @@ android:alpha="0" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginLeft="16dp" + android:layout_marginRight="16dp" android:layout_alignBottom="@+id/pager" android:layout_centerHorizontal="true" android:layout_marginBottom="12dp" @@ -74,7 +76,7 @@ android:paddingRight="24dp" android:paddingBottom="4dp" android:textColor="@color/white" - android:textSize="24sp" + android:textSize="16sp" tools:text="1:06:29" /> </androidx.cardview.widget.CardView> |