diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/patches/spoof/SpoofStreamingDataPatch.java b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/spoof/SpoofStreamingDataPatch.java index 21a21379f..2bb2a233b 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/shared/patches/spoof/SpoofStreamingDataPatch.java +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/spoof/SpoofStreamingDataPatch.java @@ -78,6 +78,16 @@ public class SpoofStreamingDataPatch { return SPOOF_STREAMING_DATA; } + /** + * Injection point. + */ + public static boolean fixHLSCurrentTime(boolean original) { + if (!SPOOF_STREAMING_DATA) { + return original; + } + return false; + } + /** * Injection point. */ diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java index 40b64919d..92eec6bcf 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java @@ -64,13 +64,7 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference { private void updateUI() { final ClientType clientType = Settings.SPOOF_STREAMING_DATA_TYPE.get(); - - final String summaryTextKey; - if (clientType == ClientType.IOS && Settings.SPOOF_STREAMING_DATA_IOS_SKIP_LIVESTREAM_PLAYBACK.get()) { - summaryTextKey = "revanced_spoof_streaming_data_side_effects_ios_skip_livestream_playback"; - } else { - summaryTextKey = "revanced_spoof_streaming_data_side_effects_" + clientType.name().toLowerCase(); - } + final String summaryTextKey = "revanced_spoof_streaming_data_side_effects_" + clientType.name().toLowerCase(); setSummary(str(summaryTextKey)); setEnabled(Settings.SPOOF_STREAMING_DATA.get()); diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/spoof/streamingdata/BaseSpoofStreamingDataPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/spoof/streamingdata/BaseSpoofStreamingDataPatch.kt index a8beb08eb..956a1818e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/spoof/streamingdata/BaseSpoofStreamingDataPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/spoof/streamingdata/BaseSpoofStreamingDataPatch.kt @@ -12,6 +12,7 @@ import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.extension.Constants.SPOOF_PATH import app.revanced.util.findInstructionIndicesReversedOrThrow import app.revanced.util.fingerprint.definingClassOrThrow +import app.revanced.util.fingerprint.injectLiteralInstructionBooleanCall import app.revanced.util.fingerprint.matchOrThrow import app.revanced.util.fingerprint.methodOrThrow import app.revanced.util.getReference @@ -209,6 +210,15 @@ fun baseSpoofStreamingDataPatch( // endregion + // region Fix iOS livestream current time. + + hlsCurrentTimeFingerprint.injectLiteralInstructionBooleanCall( + HLS_CURRENT_TIME_FEATURE_FLAG, + "$EXTENSION_CLASS_DESCRIPTOR->fixHLSCurrentTime(Z)Z" + ) + + // endregion + executeBlock() } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/spoof/streamingdata/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/spoof/streamingdata/Fingerprints.kt index 040316141..45e2739df 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/spoof/streamingdata/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/spoof/streamingdata/Fingerprints.kt @@ -134,3 +134,12 @@ internal val protobufClassParseByteBufferFingerprint = legacyFingerprint( ), customFingerprint = { method, _ -> method.name == "parseFrom" }, ) + +internal const val HLS_CURRENT_TIME_FEATURE_FLAG = 45355374L + +internal val hlsCurrentTimeFingerprint = legacyFingerprint( + name = "hlsCurrentTimeFingerprint", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Z", "L"), + literals = listOf(HLS_CURRENT_TIME_FEATURE_FLAG), +) diff --git a/patches/src/main/resources/youtube/settings/host/values/strings.xml b/patches/src/main/resources/youtube/settings/host/values/strings.xml index 7f4d6fef1..4e2aa35f6 100644 --- a/patches/src/main/resources/youtube/settings/host/values/strings.xml +++ b/patches/src/main/resources/youtube/settings/host/values/strings.xml @@ -1903,9 +1903,7 @@ Tap on the continue button and disable battery optimizations." Android TV Android VR Spoofing side effects - "• Livestreams start from the beginning. -• Videos may end 1 second early." - • Videos may end 1 second early. + • Videos may end 1 second early. "• Audio track menu is missing. • Stable volume is not available." "• Audio track menu is missing.