diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SegmentPlaybackController.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SegmentPlaybackController.java index b279de71b..86a7d200e 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SegmentPlaybackController.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SegmentPlaybackController.java @@ -44,6 +44,7 @@ import app.revanced.extension.youtube.sponsorblock.objects.SegmentCategory; import app.revanced.extension.youtube.sponsorblock.objects.SponsorSegment; import app.revanced.extension.youtube.sponsorblock.requests.SBRequester; import app.revanced.extension.youtube.sponsorblock.ui.SponsorBlockViewController; +import kotlin.Unit; /** * Handles showing, scheduling, and skipping of all {@link SponsorSegment} for the current video. @@ -167,6 +168,30 @@ public class SegmentPlaybackController { */ private static WeakReference toastDialogRef = new WeakReference<>(null); + static { + // Dismiss toast if app changes to PiP while undo skip is shown. + PlayerType.getOnChange().addObserver((PlayerType type) -> { + if (type == PlayerType.WATCH_WHILE_PICTURE_IN_PICTURE && dismissUndoToast()) { + Logger.printDebug(() -> "Dismissed undo toast as playback is PiP"); + } + + return Unit.INSTANCE; + }); + } + + /** + * @return If the toast was on screen and is now dismissed. + */ + private static boolean dismissUndoToast() { + Dialog toastDialog = toastDialogRef.get(); + if (toastDialog != null && toastDialog.isShowing()) { + toastDialog.dismiss(); + return true; + } + + return false; + } + /** * @return The adjusted duration to show the skip button, in milliseconds. */ @@ -700,6 +725,11 @@ public class SegmentPlaybackController { return; } + if (PlayerType.getCurrent() == PlayerType.WATCH_WHILE_PICTURE_IN_PICTURE) { + Logger.printDebug(() -> "Not showing autoskip toast as playback is PiP"); + return; + } + if (toastSegmentSkipped == null || undoAutoSkipRangeToast == null) { // Video was changed immediately after skipping segment. Logger.printDebug(() -> "Ignoring old scheduled show toast"); @@ -709,9 +739,7 @@ public class SegmentPlaybackController { ? toastSegmentSkipped.getSkippedToastText() : str("revanced_sb_skipped_multiple_segments"); - showToastShortWithTapAction(message, undoAutoSkipRangeToast); - } catch (Exception ex) { - Logger.printException(() -> "showSkippedSegmentToast failure", ex); + showAutoSkipToast(message, undoAutoSkipRangeToast); } finally { toastNumberOfSegmentsSkipped = 0; toastSegmentSkipped = null; @@ -719,7 +747,7 @@ public class SegmentPlaybackController { }, delayToToastMilliseconds); } - private static void showToastShortWithTapAction(String messageToToast, Range rangeToUndo) { + private static void showAutoSkipToast(String messageToToast, Range rangeToUndo) { Objects.requireNonNull(messageToToast); Utils.verifyOnMainThread(); @@ -816,10 +844,8 @@ public class SegmentPlaybackController { window.addFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); } - Dialog priorDialog = toastDialogRef.get(); - if (priorDialog != null && priorDialog.isShowing()) { - Logger.printDebug(() -> "Removing previous skip toast that is still on screen: " + priorDialog); - priorDialog.dismiss(); + if (dismissUndoToast()) { + Logger.printDebug(() -> "Dismissed previous skip toast that was still on screen"); } toastDialogRef = new WeakReference<>(dialog); diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index d8c18f4b1..722bb5192 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -1029,12 +1029,12 @@ This feature works best with a video quality of 720p or lower and when using a v Skip button hides after a few seconds Skip button is shown for the entire segment Skip button duration - How long the auto hide skip and skip to highlight buttons are shown + How long to show the skip and skip to highlight buttons before automatically hiding Show undo skip toast Toast is shown when a segment is automatically skipped. Tap the toast notification to undo the skip Toast is not shown Skip toast duration - How long the skip toast notification is shown + How long to show the undo skip toast 1 second 2 seconds 3 seconds