diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/utils/Logger.java b/extensions/shared/src/main/java/app/revanced/extension/shared/utils/Logger.java index 6583fc7ef..38ac18660 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/shared/utils/Logger.java +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/utils/Logger.java @@ -54,8 +54,24 @@ public class Logger { * so the performance cost of building strings is paid only if {@link BaseSettings#ENABLE_DEBUG_LOGGING} is enabled. */ public static void printDebug(@NonNull LogMessage message) { + printDebug(message, null); + } + + /** + * Logs debug messages under the outer class name of the code calling this method. + * Whenever possible, the log string should be constructed entirely inside {@link LogMessage#buildMessageString()} + * so the performance cost of building strings is paid only if {@link BaseSettings#ENABLE_DEBUG_LOGGING} is enabled. + */ + public static void printDebug(@NonNull LogMessage message, @Nullable Exception ex) { if (ENABLE_DEBUG_LOGGING.get()) { - Log.d(REVANCED_LOG_PREFIX + message.findOuterClassSimpleName(), message.buildMessageString()); + String logTag = REVANCED_LOG_PREFIX + message.findOuterClassSimpleName(); + String logMessage = message.buildMessageString(); + + if (ex == null) { + Log.d(logTag, logMessage); + } else { + Log.d(logTag, logMessage, ex); + } } } diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/video/PlaybackSpeedPatch.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/video/PlaybackSpeedPatch.java index 99b658d0a..ca2ad8fc1 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/video/PlaybackSpeedPatch.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/video/PlaybackSpeedPatch.java @@ -79,37 +79,41 @@ public class PlaybackSpeedPatch { * @param playbackSpeed The playback speed the user selected */ public static void userSelectedPlaybackSpeed(float playbackSpeed) { - if (PatchStatus.RememberPlaybackSpeed() && - Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED.get()) { - // With the 0.05x menu, if the speed is set by integrations to higher than 2.0x - // then the menu will allow increasing without bounds but the max speed is - // still capped to under 8.0x. - playbackSpeed = Math.min(playbackSpeed, CustomPlaybackSpeedPatch.PLAYBACK_SPEED_MAXIMUM - 0.05f); + try { + if (PatchStatus.RememberPlaybackSpeed() && + Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED.get()) { + // With the 0.05x menu, if the speed is set by integrations to higher than 2.0x + // then the menu will allow increasing without bounds but the max speed is + // still capped to under 8.0x. + playbackSpeed = Math.min(playbackSpeed, CustomPlaybackSpeedPatch.PLAYBACK_SPEED_MAXIMUM - 0.05f); - // Prevent toast spamming if using the 0.05x adjustments. - // Show exactly one toast after the user stops interacting with the speed menu. - final long now = System.currentTimeMillis(); - lastTimeSpeedChanged = now; + // Prevent toast spamming if using the 0.05x adjustments. + // Show exactly one toast after the user stops interacting with the speed menu. + final long now = System.currentTimeMillis(); + lastTimeSpeedChanged = now; - final float finalPlaybackSpeed = playbackSpeed; - Utils.runOnMainThreadDelayed(() -> { - if (lastTimeSpeedChanged != now) { - // The user made additional speed adjustments and this call is outdated. - return; - } + final float finalPlaybackSpeed = playbackSpeed; + Utils.runOnMainThreadDelayed(() -> { + if (lastTimeSpeedChanged != now) { + // The user made additional speed adjustments and this call is outdated. + return; + } - if (Settings.DEFAULT_PLAYBACK_SPEED.get() == finalPlaybackSpeed) { - // User changed to a different speed and immediately changed back. - // Or the user is going past 8.0x in the glitched out 0.05x menu. - return; - } - Settings.DEFAULT_PLAYBACK_SPEED.save(finalPlaybackSpeed); + if (Settings.DEFAULT_PLAYBACK_SPEED.get() == finalPlaybackSpeed) { + // User changed to a different speed and immediately changed back. + // Or the user is going past 8.0x in the glitched out 0.05x menu. + return; + } + Settings.DEFAULT_PLAYBACK_SPEED.save(finalPlaybackSpeed); - if (!Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED_TOAST.get()) { - return; - } - Utils.showToastShort(str("revanced_remember_playback_speed_toast", (finalPlaybackSpeed + "x"))); - }, TOAST_DELAY_MILLISECONDS); + if (!Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED_TOAST.get()) { + return; + } + Utils.showToastShort(str("revanced_remember_playback_speed_toast", (finalPlaybackSpeed + "x"))); + }, TOAST_DELAY_MILLISECONDS); + } + } catch (Exception ex) { + Logger.printException(() -> "userSelectedPlaybackSpeed failure", ex); } } diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/VideoInformation.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/VideoInformation.java index 0c0b87d81..06217d432 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/VideoInformation.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/VideoInformation.java @@ -369,7 +369,10 @@ public final class VideoInformation { * @param newlyLoadedPlaybackSpeed The current playback speed. */ public static void setPlaybackSpeed(float newlyLoadedPlaybackSpeed) { - playbackSpeed = newlyLoadedPlaybackSpeed; + if (playbackSpeed != newlyLoadedPlaybackSpeed) { + Logger.printDebug(() -> "Video speed changed: " + newlyLoadedPlaybackSpeed); + playbackSpeed = newlyLoadedPlaybackSpeed; + } } /** diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/CairoSettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/CairoSettingsPatch.kt index 9a35b4b3d..e0791fcdd 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/CairoSettingsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/CairoSettingsPatch.kt @@ -2,13 +2,21 @@ package app.revanced.patches.youtube.utils.fix.cairo import app.revanced.patcher.patch.bytecodePatch import app.revanced.patches.youtube.misc.backgroundplayback.backgroundPlaybackPatch +import app.revanced.patches.youtube.utils.playservice.is_19_04_or_greater +import app.revanced.patches.youtube.utils.playservice.versionCheckPatch import app.revanced.util.fingerprint.injectLiteralInstructionBooleanCall import app.revanced.util.fingerprint.resolvable val cairoSettingsPatch = bytecodePatch( description = "cairoSettingsPatch" ) { + dependsOn(versionCheckPatch) + execute { + if (!is_19_04_or_greater) { + return@execute + } + /** * Cairo Fragment was added since YouTube v19.04.38. * Disable this for the following reasons: @@ -19,11 +27,9 @@ val cairoSettingsPatch = bytecodePatch( * or uYouPlus#1468 * for screenshots of the Cairo Fragment. */ - if (carioFragmentConfigFingerprint.resolvable()) { - carioFragmentConfigFingerprint.injectLiteralInstructionBooleanCall( - 45532100L, - "0x0" - ) - } + carioFragmentConfigFingerprint.injectLiteralInstructionBooleanCall( + CAIRO_FRAGMENT_FEATURE_FLAG, + "0x0" + ) } }