From 74c8637943347078955f51325bc6af92a35d4463 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 21 Sep 2024 17:11:54 -0400 Subject: [PATCH 1/8] fix(YouTube - Spoof video streams): Change default client type to Android VR --- .../misc/fix/playback/SpoofVideoStreamsPatch.kt | 8 +++----- src/main/resources/addresources/values/arrays.xml | 10 +++++----- src/main/resources/addresources/values/strings.xml | 6 +++--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch.kt index 828b54784e..b378307622 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch.kt @@ -99,17 +99,15 @@ object SpoofVideoStreamsPatch : BytecodePatch( preferences = setOf( SwitchPreference("revanced_spoof_video_streams"), ListPreference( - "revanced_spoof_video_streams_client_type", - summaryKey = null, - entriesKey = "revanced_spoof_video_streams_client_type_entries", - entryValuesKey = "revanced_spoof_video_streams_client_type_entry_values", + "revanced_spoof_video_streams_client", + summaryKey = null ), SwitchPreference( "revanced_spoof_video_streams_ios_force_avc", tag = "app.revanced.integrations.youtube.settings.preference.ForceAVCSpoofingPreference", ), - NonInteractivePreference("revanced_spoof_video_streams_about_ios"), NonInteractivePreference("revanced_spoof_video_streams_about_android_vr"), + NonInteractivePreference("revanced_spoof_video_streams_about_ios"), ), ), ) diff --git a/src/main/resources/addresources/values/arrays.xml b/src/main/resources/addresources/values/arrays.xml index cee01a7a32..32751b87be 100644 --- a/src/main/resources/addresources/values/arrays.xml +++ b/src/main/resources/addresources/values/arrays.xml @@ -1,15 +1,15 @@ - - - iOS + + Android VR + iOS - + - IOS ANDROID_VR + IOS diff --git a/src/main/resources/addresources/values/strings.xml b/src/main/resources/addresources/values/strings.xml index d34a38e3b7..49520bf005 100644 --- a/src/main/resources/addresources/values/strings.xml +++ b/src/main/resources/addresources/values/strings.xml @@ -1155,16 +1155,16 @@ This is because Crowdin requires temporarily flattening this file and removing t Video streams are spoofed Video streams are not spoofed\n\nVideo playback may not work Turning off this setting may cause video playback issues. - Default client + Default client Force AVC (H.264) Video codec is AVC (H.264) Video codec is VP9 or AV1 Your device does not have VP9 hardware decoding, and this setting is always on when Client spoofing is enabled Enabling this might improve battery life and fix playback stuttering.\n\nAVC has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1. iOS spoofing side effects - • Movies or paid videos may not play\n• Livestreams start from the beginning + • Movies or paid videos may not play\n• Livestreams start from the beginning\n• Videos may end 1 second early\n• No opus audio codec Android VR spoofing side effects - • Audio track menu is missing + • Audio track menu is missing\n• Stable volume is not available From 82d53cbc3bbfa585ba4337fdfaec9f0f19c802e6 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 31 Jul 2024 19:40:33 +0200 Subject: [PATCH 2/8] fix(TikTok - Playback speed): Prevent crash by fixing invalid patch --- .../interaction/speed/PlaybackSpeedPatch.kt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/PlaybackSpeedPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/PlaybackSpeedPatch.kt index de3e5cb51b..5a5f02f754 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/PlaybackSpeedPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/PlaybackSpeedPatch.kt @@ -20,19 +20,19 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch( name = "Playback speed", description = "Enables the playback speed option for all videos and " + - "retains the speed configurations in between videos.", + "retains the speed configurations in between videos.", compatiblePackages = [ CompatiblePackage("com.ss.android.ugc.trill", ["32.5.3"]), - CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]) - ] + CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]), + ], ) @Suppress("unused") object PlaybackSpeedPatch : BytecodePatch( setOf( GetSpeedFingerprint, OnRenderFirstFrameFingerprint, - SetSpeedFingerprint - ) + SetSpeedFingerprint, + ), ) { override fun execute(context: BytecodeContext) { SetSpeedFingerprint.result?.let { onVideoSwiped -> @@ -44,7 +44,7 @@ object PlaybackSpeedPatch : BytecodePatch( addInstruction( injectIndex, "invoke-static { v$register }," + - " Lapp/revanced/integrations/tiktok/speed/PlaybackSpeedPatch;->rememberPlaybackSpeed(F)V" + " Lapp/revanced/integrations/tiktok/speed/PlaybackSpeedPatch;->rememberPlaybackSpeed(F)V", ) } ?: throw GetSpeedFingerprint.exception @@ -64,9 +64,9 @@ object PlaybackSpeedPatch : BytecodePatch( # Desired playback speed retrieved using getPlaybackSpeed method. invoke-static {}, Lapp/revanced/integrations/tiktok/speed/PlaybackSpeedPatch;->getPlaybackSpeed()F - move-result-object v2 + move-result v2 invoke-static { v0, v1, v2 }, ${onVideoSwiped.method} - """ + """, ) ?: throw OnRenderFirstFrameFingerprint.exception // Force enable the playback speed option for all videos. @@ -75,7 +75,7 @@ object PlaybackSpeedPatch : BytecodePatch( """ const/4 v0, 0x1 return v0 - """ + """, ) ?: throw PatchException("Failed to force enable the playback speed option.") } ?: throw SetSpeedFingerprint.exception } From 8074032fad3eff1c03296a882d2e2820da99b592 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sun, 22 Sep 2024 01:17:53 +0200 Subject: [PATCH 3/8] fix(TikTok - Settings): Prevent crash by fixing invalid patch --- .../tiktok/misc/settings/SettingsPatch.kt | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt index f3d5a2b0af..9dfdd86d21 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt @@ -25,8 +25,8 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference dependencies = [IntegrationsPatch::class], compatiblePackages = [ CompatiblePackage("com.ss.android.ugc.trill", ["32.5.3"]), - CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]) - ] + CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]), + ], ) object SettingsPatch : BytecodePatch( setOf( @@ -34,21 +34,21 @@ object SettingsPatch : BytecodePatch( AddSettingsEntryFingerprint, SettingsEntryFingerprint, SettingsEntryInfoFingerprint, - ) + ), ) { private const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/tiktok/settings/AdPersonalizationActivityHook;" private const val INITIALIZE_SETTINGS_METHOD_DESCRIPTOR = "$INTEGRATIONS_CLASS_DESCRIPTOR->initialize(" + - "Lcom/bytedance/ies/ugc/aweme/commercialize/compliance/personalization/AdPersonalizationActivity;" + - ")Z" + "Lcom/bytedance/ies/ugc/aweme/commercialize/compliance/personalization/AdPersonalizationActivity;" + + ")Z" private const val CREATE_SETTINGS_ENTRY_METHOD_DESCRIPTOR = "$INTEGRATIONS_CLASS_DESCRIPTOR->createSettingsEntry(" + - "Ljava/lang/String;" + - "Ljava/lang/String;" + - ")Ljava/lang/Object;" + "Ljava/lang/String;" + + "Ljava/lang/String;" + + ")Ljava/lang/Object;" override fun execute(context: BytecodeContext) { // Find the class name of classes which construct a settings entry @@ -70,8 +70,8 @@ object SettingsPatch : BytecodePatch( markIndex + 2, listOf( getUnitManager, - addEntry - ) + addEntry, + ), ) addInstructions( @@ -81,7 +81,8 @@ object SettingsPatch : BytecodePatch( const-string v1, "$settingsButtonInfoClass" invoke-static {v0, v1}, $CREATE_SETTINGS_ENTRY_METHOD_DESCRIPTOR move-result-object v0 - """ + check-cast v0, ${SettingsEntryFingerprint.result!!.classDef} + """, ) } ?: throw AddSettingsEntryFingerprint.exception @@ -102,12 +103,10 @@ object SettingsPatch : BytecodePatch( if-eqz v$usableRegister, :do_not_open return-void """, - ExternalLabel("do_not_open", getInstruction(initializeSettingsIndex)) + ExternalLabel("do_not_open", getInstruction(initializeSettingsIndex)), ) } ?: throw AdPersonalizationActivityOnCreateFingerprint.exception } - private fun String.toClassName(): String { - return substring(1, this.length - 1).replace("/", ".") - } -} \ No newline at end of file + private fun String.toClassName(): String = substring(1, this.length - 1).replace("/", ".") +} From b9955d5ff6e456593b01f0f25d80ff660d02082a Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sun, 22 Sep 2024 01:18:04 +0200 Subject: [PATCH 4/8] fix(Twitter - Open links with app chooser): Constrain patch to last working version `10.48.0-release` --- .../patches/twitter/misc/links/OpenLinksWithAppChooserPatch.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/app/revanced/patches/twitter/misc/links/OpenLinksWithAppChooserPatch.kt b/src/main/kotlin/app/revanced/patches/twitter/misc/links/OpenLinksWithAppChooserPatch.kt index 1807f0685f..bdbe07bc59 100644 --- a/src/main/kotlin/app/revanced/patches/twitter/misc/links/OpenLinksWithAppChooserPatch.kt +++ b/src/main/kotlin/app/revanced/patches/twitter/misc/links/OpenLinksWithAppChooserPatch.kt @@ -12,7 +12,7 @@ import app.revanced.util.exception name = "Open links with app chooser", description = "Instead of opening links directly, open them with an app chooser. " + "As a result you can select a browser to open the link with.", - compatiblePackages = [CompatiblePackage("com.twitter.android")], + compatiblePackages = [CompatiblePackage("com.twitter.android", ["10.48.0-release"])], use = false, ) @Suppress("unused") From 3bd0c4bdaaddf4988df720ac0058e3bbed957f86 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 21 Sep 2024 23:20:21 +0000 Subject: [PATCH 5/8] chore(release): 4.14.2-dev.1 [skip ci] ## [4.14.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.1...v4.14.2-dev.1) (2024-09-21) ### Bug Fixes * **TikTok - Playback speed:** Prevent crash by fixing invalid patch ([82d53cb](https://github.com/ReVanced/revanced-patches/commit/82d53cbc3bbfa585ba4337fdfaec9f0f19c802e6)) * **TikTok - Settings:** Prevent crash by fixing invalid patch ([8074032](https://github.com/ReVanced/revanced-patches/commit/8074032fad3eff1c03296a882d2e2820da99b592)) * **Twitter - Open links with app chooser:** Constrain patch to last working version `10.48.0-release` ([b9955d5](https://github.com/ReVanced/revanced-patches/commit/b9955d5ff6e456593b01f0f25d80ff660d02082a)) --- CHANGELOG.md | 9 +++++++++ gradle.properties | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eff46e0deb..0b974820f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [4.14.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.1...v4.14.2-dev.1) (2024-09-21) + + +### Bug Fixes + +* **TikTok - Playback speed:** Prevent crash by fixing invalid patch ([82d53cb](https://github.com/ReVanced/revanced-patches/commit/82d53cbc3bbfa585ba4337fdfaec9f0f19c802e6)) +* **TikTok - Settings:** Prevent crash by fixing invalid patch ([8074032](https://github.com/ReVanced/revanced-patches/commit/8074032fad3eff1c03296a882d2e2820da99b592)) +* **Twitter - Open links with app chooser:** Constrain patch to last working version `10.48.0-release` ([b9955d5](https://github.com/ReVanced/revanced-patches/commit/b9955d5ff6e456593b01f0f25d80ff660d02082a)) + ## [4.14.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.0...v4.14.1) (2024-09-18) diff --git a/gradle.properties b/gradle.properties index 2d36c75824..eff0a6631c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 4.14.1 +version = 4.14.2-dev.1 From d99687517e9a46f1c55a21864b8278b69e2f5b0c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 21 Sep 2024 23:33:50 +0000 Subject: [PATCH 6/8] chore(release): 4.14.2-dev.2 [skip ci] ## [4.14.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.14.2-dev.1...v4.14.2-dev.2) (2024-09-21) ### Bug Fixes * **YouTube - Spoof video streams:** Change default client type to Android VR ([74c8637](https://github.com/ReVanced/revanced-patches/commit/74c8637943347078955f51325bc6af92a35d4463)) * **YouTube - Spoof video streams:** Change default client type to Android VR ([#3672](https://github.com/ReVanced/revanced-patches/issues/3672)) ([a3306f6](https://github.com/ReVanced/revanced-patches/commit/a3306f6717a09b734354f00363a96abad0ae14e7)) --- CHANGELOG.md | 8 ++++++++ gradle.properties | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b974820f1..bb35895d29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## [4.14.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.14.2-dev.1...v4.14.2-dev.2) (2024-09-21) + + +### Bug Fixes + +* **YouTube - Spoof video streams:** Change default client type to Android VR ([74c8637](https://github.com/ReVanced/revanced-patches/commit/74c8637943347078955f51325bc6af92a35d4463)) +* **YouTube - Spoof video streams:** Change default client type to Android VR ([#3672](https://github.com/ReVanced/revanced-patches/issues/3672)) ([a3306f6](https://github.com/ReVanced/revanced-patches/commit/a3306f6717a09b734354f00363a96abad0ae14e7)) + ## [4.14.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.1...v4.14.2-dev.1) (2024-09-21) diff --git a/gradle.properties b/gradle.properties index eff0a6631c..6cd333a0a0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 4.14.2-dev.1 +version = 4.14.2-dev.2 From e5dcb72597092fb32003f11fdf6f861ede4e7ff3 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Mon, 23 Sep 2024 01:43:22 +0200 Subject: [PATCH 7/8] feat(TikTok): Bump patches to support the latest version 36.5.4 --- .../tiktok/feedfilter/FeedFilterPatch.kt | 14 ++--- ...ePatch.kt => RememberClearDisplayPatch.kt} | 33 +++++----- .../OnRenderFirstFrameFingerprint.kt | 9 --- .../interaction/downloads/DownloadsPatch.kt | 61 ++++++++----------- ...ngerprint.kt => DownloadUriFingerprint.kt} | 22 +++---- .../interaction/speed/PlaybackSpeedPatch.kt | 43 +++++++------ .../tiktok/misc/settings/SettingsPatch.kt | 4 +- .../fingerprints/GetEnterFromFingerprint.kt | 24 ++++++++ .../OnRenderFirstFrameFingerprint.kt | 7 ++- 9 files changed, 113 insertions(+), 104 deletions(-) rename src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/{RememberClearModePatch.kt => RememberClearDisplayPatch.kt} (76%) delete mode 100644 src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/fingerprints/OnRenderFirstFrameFingerprint.kt rename src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/{DownloadPathParentFingerprint.kt => DownloadUriFingerprint.kt} (50%) create mode 100644 src/main/kotlin/app/revanced/patches/tiktok/shared/fingerprints/GetEnterFromFingerprint.kt rename src/main/kotlin/app/revanced/patches/tiktok/{interaction/speed => shared}/fingerprints/OnRenderFirstFrameFingerprint.kt (63%) diff --git a/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/FeedFilterPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/FeedFilterPatch.kt index 35a6f77fea..74940a4600 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/FeedFilterPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/FeedFilterPatch.kt @@ -17,16 +17,16 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch( name = "Feed filter", description = "Removes ads, livestreams, stories, image videos " + - "and videos with a specific amount of views or likes from the feed.", + "and videos with a specific amount of views or likes from the feed.", dependencies = [IntegrationsPatch::class, SettingsPatch::class], compatiblePackages = [ - CompatiblePackage("com.ss.android.ugc.trill", ["32.5.3"]), - CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]) - ] + CompatiblePackage("com.ss.android.ugc.trill", ["36.5.4"]), + CompatiblePackage("com.zhiliaoapp.musically", ["36.5.4"]), + ], ) @Suppress("unused") object FeedFilterPatch : BytecodePatch( - setOf(FeedApiServiceLIZFingerprint, SettingsStatusLoadFingerprint) + setOf(FeedApiServiceLIZFingerprint, SettingsStatusLoadFingerprint), ) { override fun execute(context: BytecodeContext) { FeedApiServiceLIZFingerprint.result?.mutableMethod?.apply { @@ -36,13 +36,13 @@ object FeedFilterPatch : BytecodePatch( addInstruction( returnFeedItemInstruction.location.index, "invoke-static { v$feedItemsRegister }, " + - "Lapp/revanced/integrations/tiktok/feedfilter/FeedItemsFilter;->filter(Lcom/ss/android/ugc/aweme/feed/model/FeedItemList;)V" + "Lapp/revanced/integrations/tiktok/feedfilter/FeedItemsFilter;->filter(Lcom/ss/android/ugc/aweme/feed/model/FeedItemList;)V", ) } ?: throw FeedApiServiceLIZFingerprint.exception SettingsStatusLoadFingerprint.result?.mutableMethod?.addInstruction( 0, - "invoke-static {}, Lapp/revanced/integrations/tiktok/settings/SettingsStatus;->enableFeedFilter()V" + "invoke-static {}, Lapp/revanced/integrations/tiktok/settings/SettingsStatus;->enableFeedFilter()V", ) ?: throw SettingsStatusLoadFingerprint.exception } } diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/RememberClearModePatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/RememberClearDisplayPatch.kt similarity index 76% rename from src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/RememberClearModePatch.kt rename to src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/RememberClearDisplayPatch.kt index 701ea2836b..60eb637c47 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/RememberClearModePatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/RememberClearDisplayPatch.kt @@ -9,7 +9,7 @@ import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.tiktok.interaction.cleardisplay.fingerprints.OnClearDisplayEventFingerprint -import app.revanced.patches.tiktok.interaction.cleardisplay.fingerprints.OnRenderFirstFrameFingerprint +import app.revanced.patches.tiktok.shared.fingerprints.OnRenderFirstFrameFingerprint import app.revanced.util.exception import app.revanced.util.indexOfFirstInstructionOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -19,16 +19,16 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22c name = "Remember clear display", description = "Remembers the clear display configurations in between videos.", compatiblePackages = [ - CompatiblePackage("com.ss.android.ugc.trill", ["32.5.3"]), - CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]) - ] + CompatiblePackage("com.ss.android.ugc.trill", ["36.5.4"]), + CompatiblePackage("com.zhiliaoapp.musically", ["36.5.4"]), + ], ) @Suppress("unused") object RememberClearDisplayPatch : BytecodePatch( setOf( OnClearDisplayEventFingerprint, - OnRenderFirstFrameFingerprint - ) + OnRenderFirstFrameFingerprint, + ), ) { override fun execute(context: BytecodeContext) { OnClearDisplayEventFingerprint.result?.mutableMethod?.let { @@ -40,7 +40,7 @@ object RememberClearDisplayPatch : BytecodePatch( it.addInstructions( isEnabledIndex, "invoke-static { v$isEnabledRegister }, " + - "Lapp/revanced/integrations/tiktok/cleardisplay/RememberClearDisplayPatch;->rememberClearDisplayState(Z)V" + "Lapp/revanced/integrations/tiktok/cleardisplay/RememberClearDisplayPatch;->rememberClearDisplayState(Z)V", ) // endregion @@ -54,22 +54,25 @@ object RememberClearDisplayPatch : BytecodePatch( """ # Create a new clearDisplayEvent and post it to the EventBus (https://github.com/greenrobot/EventBus) - # The state of clear display. - invoke-static { }, Lapp/revanced/integrations/tiktok/cleardisplay/RememberClearDisplayPatch;->getClearDisplayState()Z - move-result v3 - if-eqz v3, :clear_display_disabled - # Clear display type such as 0 = LONG_PRESS, 1 = SCREEN_RECORD etc. const/4 v1, 0x0 + # Enter method (Such as "pinch", "swipe_exit", or an empty string (unknown, what it means)). + const-string v2, "" + # Name of the clear display type which is equivalent to the clear display type. - const-string v2, "long_press" + const-string v3, "long_press" + + # The state of clear display. + invoke-static { }, Lapp/revanced/integrations/tiktok/cleardisplay/RememberClearDisplayPatch;->getClearDisplayState()Z + move-result v4 + if-eqz v4, :clear_display_disabled new-instance v0, $clearDisplayEventClass - invoke-direct { v0, v1, v2, v3 }, $clearDisplayEventClass->(ILjava/lang/String;Z)V + invoke-direct { v0, v1, v2, v3, v4 }, $clearDisplayEventClass->(ILjava/lang/String;Ljava/lang/String;Z)V invoke-virtual { v0 }, $clearDisplayEventClass->post()Lcom/ss/android/ugc/governance/eventbus/IEvent; """, - ExternalLabel("clear_display_disabled", getInstruction(0)) + ExternalLabel("clear_display_disabled", getInstruction(0)), ) } ?: throw OnRenderFirstFrameFingerprint.exception diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/fingerprints/OnRenderFirstFrameFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/fingerprints/OnRenderFirstFrameFingerprint.kt deleted file mode 100644 index d9e5a15ed0..0000000000 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/cleardisplay/fingerprints/OnRenderFirstFrameFingerprint.kt +++ /dev/null @@ -1,9 +0,0 @@ -package app.revanced.patches.tiktok.interaction.cleardisplay.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object OnRenderFirstFrameFingerprint : MethodFingerprint( - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("/BaseListFragmentPanel;") && methodDef.name == "onRenderFirstFrame" - } -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/DownloadsPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/DownloadsPatch.kt index 7b0ece8b32..a4744f1dc7 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/DownloadsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/DownloadsPatch.kt @@ -13,14 +13,13 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint2 import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint3 -import app.revanced.patches.tiktok.interaction.downloads.fingerprints.DownloadPathParentFingerprint +import app.revanced.patches.tiktok.interaction.downloads.fingerprints.DownloadUriFingerprint import app.revanced.patches.tiktok.misc.integrations.IntegrationsPatch import app.revanced.patches.tiktok.misc.settings.SettingsPatch import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint import app.revanced.util.exception +import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch( @@ -28,9 +27,9 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference description = "Removes download restrictions and changes the default path to download to.", dependencies = [IntegrationsPatch::class, SettingsPatch::class], compatiblePackages = [ - CompatiblePackage("com.ss.android.ugc.trill", ["32.5.3"]), - CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]) - ] + CompatiblePackage("com.ss.android.ugc.trill", ["36.5.4"]), + CompatiblePackage("com.zhiliaoapp.musically", ["36.5.4"]), + ], ) @Suppress("unused") object DownloadsPatch : BytecodePatch( @@ -38,9 +37,9 @@ object DownloadsPatch : BytecodePatch( ACLCommonShareFingerprint, ACLCommonShareFingerprint2, ACLCommonShareFingerprint3, - DownloadPathParentFingerprint, - SettingsStatusLoadFingerprint - ) + DownloadUriFingerprint, + SettingsStatusLoadFingerprint, + ), ) { override fun execute(context: BytecodeContext) { fun MethodFingerprint.getMethod() = result?.mutableMethod ?: throw exception @@ -52,7 +51,7 @@ object DownloadsPatch : BytecodePatch( """ const/4 v0, 0x0 return v0 - """ + """, ) }, ACLCommonShareFingerprint2 to { @@ -61,7 +60,7 @@ object DownloadsPatch : BytecodePatch( """ const/4 v0, 0x2 return v0 - """ + """, ) }, // Download videos without watermark. @@ -76,48 +75,40 @@ object DownloadsPatch : BytecodePatch( return v0 :noremovewatermark nop - """ + """, ) }, // Change the download path patch. - DownloadPathParentFingerprint to { - val targetIndex = indexOfFirstInstructionOrThrow { opcode == Opcode.INVOKE_STATIC } - val downloadUriMethod = context - .toMethodWalker(this) - .nextMethod(targetIndex, true) - .getMethod() as MutableMethod - - val firstIndex = downloadUriMethod.indexOfFirstInstructionOrThrow { - opcode == Opcode.INVOKE_DIRECT && ((this as Instruction35c).reference as MethodReference).name == "" + DownloadUriFingerprint to { + val firstIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "" } - val secondIndex = downloadUriMethod.indexOfFirstInstructionOrThrow { - opcode == Opcode.INVOKE_STATIC && ((this as Instruction35c).reference as MethodReference).returnType.contains( - "Uri" - ) + val secondIndex = indexOfFirstInstructionOrThrow { + getReference()?.returnType?.contains("Uri") == true } - downloadUriMethod.addInstructions( + addInstructions( secondIndex, """ - invoke-static {}, Lapp/revanced/integrations/tiktok/download/DownloadsPatch;->getDownloadPath()Ljava/lang/String; - move-result-object v0 - """ + invoke-static {}, Lapp/revanced/integrations/tiktok/download/DownloadsPatch;->getDownloadPath()Ljava/lang/String; + move-result-object v0 + """, ) - downloadUriMethod.addInstructions( + addInstructions( firstIndex, """ - invoke-static {}, Lapp/revanced/integrations/tiktok/download/DownloadsPatch;->getDownloadPath()Ljava/lang/String; - move-result-object v0 - """ + invoke-static {}, Lapp/revanced/integrations/tiktok/download/DownloadsPatch;->getDownloadPath()Ljava/lang/String; + move-result-object v0 + """, ) }, SettingsStatusLoadFingerprint to { addInstruction( 0, - "invoke-static {}, Lapp/revanced/integrations/tiktok/settings/SettingsStatus;->enableDownload()V" + "invoke-static {}, Lapp/revanced/integrations/tiktok/settings/SettingsStatus;->enableDownload()V", ) - } + }, ).forEach { (fingerprint, patch) -> fingerprint.getMethod().patch() } diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadPathParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadUriFingerprint.kt similarity index 50% rename from src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadPathParentFingerprint.kt rename to src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadUriFingerprint.kt index 53f41dc20d..edbf542c53 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadPathParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadUriFingerprint.kt @@ -3,22 +3,18 @@ package app.revanced.patches.tiktok.interaction.downloads.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode -internal object DownloadPathParentFingerprint : MethodFingerprint( - "L", +internal object DownloadUriFingerprint : MethodFingerprint( + "Landroid/net/Uri;", AccessFlags.PUBLIC or AccessFlags.STATIC, strings = listOf( - "video/mp4" + "/", + "/Camera", + "/Camera/", + "video/mp4", ), parameters = listOf( - "L", - "L" + "Landroid/content/Context;", + "Ljava/lang/String;", ), - opcodes = listOf( - Opcode.CONST_STRING, - Opcode.INVOKE_STATIC, - Opcode.MOVE_RESULT_OBJECT, - Opcode.RETURN_OBJECT - ) -) \ No newline at end of file +) diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/PlaybackSpeedPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/PlaybackSpeedPatch.kt index 5a5f02f754..3d224c5856 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/PlaybackSpeedPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/PlaybackSpeedPatch.kt @@ -9,11 +9,13 @@ import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.tiktok.interaction.speed.fingerprints.GetSpeedFingerprint -import app.revanced.patches.tiktok.interaction.speed.fingerprints.OnRenderFirstFrameFingerprint import app.revanced.patches.tiktok.interaction.speed.fingerprints.SetSpeedFingerprint +import app.revanced.patches.tiktok.shared.fingerprints.GetEnterFromFingerprint +import app.revanced.patches.tiktok.shared.fingerprints.OnRenderFirstFrameFingerprint import app.revanced.util.exception import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction11x import com.android.tools.smali.dexlib2.iface.reference.MethodReference @@ -22,8 +24,8 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference description = "Enables the playback speed option for all videos and " + "retains the speed configurations in between videos.", compatiblePackages = [ - CompatiblePackage("com.ss.android.ugc.trill", ["32.5.3"]), - CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]), + CompatiblePackage("com.ss.android.ugc.trill", ["36.5.4"]), + CompatiblePackage("com.zhiliaoapp.musically", ["36.5.4"]), ], ) @Suppress("unused") @@ -32,6 +34,7 @@ object PlaybackSpeedPatch : BytecodePatch( GetSpeedFingerprint, OnRenderFirstFrameFingerprint, SetSpeedFingerprint, + GetEnterFromFingerprint, ), ) { override fun execute(context: BytecodeContext) { @@ -53,29 +56,29 @@ object PlaybackSpeedPatch : BytecodePatch( OnRenderFirstFrameFingerprint.result?.mutableMethod?.addInstructions( 0, """ - # Video playback location (e.g. home page, following page or search result page) retrieved using getEnterFrom method. - const/4 v0, 0x1 - invoke-virtual {p0, v0}, Lcom/ss/android/ugc/aweme/feed/panel/BaseListFragmentPanel;->getEnterFrom(Z)Ljava/lang/String; - move-result-object v0 - - # Model of current video retrieved using getCurrentAweme method. - invoke-virtual {p0}, Lcom/ss/android/ugc/aweme/feed/panel/BaseListFragmentPanel;->getCurrentAweme()Lcom/ss/android/ugc/aweme/feed/model/Aweme; - move-result-object v1 - - # Desired playback speed retrieved using getPlaybackSpeed method. - invoke-static {}, Lapp/revanced/integrations/tiktok/speed/PlaybackSpeedPatch;->getPlaybackSpeed()F - move-result v2 - invoke-static { v0, v1, v2 }, ${onVideoSwiped.method} - """, + # Video playback location (e.g. home page, following page or search result page) retrieved using getEnterFrom method. + const/4 v0, 0x1 + invoke-virtual {p0, v0}, ${GetEnterFromFingerprint.resultOrThrow().method} + move-result-object v0 + + # Model of current video retrieved using getCurrentAweme method. + invoke-virtual {p0}, Lcom/ss/android/ugc/aweme/feed/panel/BaseListFragmentPanel;->getCurrentAweme()Lcom/ss/android/ugc/aweme/feed/model/Aweme; + move-result-object v1 + + # Desired playback speed retrieved using getPlaybackSpeed method. + invoke-static {}, Lapp/revanced/integrations/tiktok/speed/PlaybackSpeedPatch;->getPlaybackSpeed()F + move-result v2 + invoke-static { v0, v1, v2 }, ${onVideoSwiped.method} + """, ) ?: throw OnRenderFirstFrameFingerprint.exception // Force enable the playback speed option for all videos. onVideoSwiped.mutableClass.methods.find { method -> method.returnType == "Z" }?.addInstructions( 0, """ - const/4 v0, 0x1 - return v0 - """, + const/4 v0, 0x1 + return v0 + """, ) ?: throw PatchException("Failed to force enable the playback speed option.") } ?: throw SetSpeedFingerprint.exception } diff --git a/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt index 9dfdd86d21..28ab4ecaf4 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/SettingsPatch.kt @@ -24,8 +24,8 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference description = "Adds ReVanced settings to TikTok.", dependencies = [IntegrationsPatch::class], compatiblePackages = [ - CompatiblePackage("com.ss.android.ugc.trill", ["32.5.3"]), - CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]), + CompatiblePackage("com.ss.android.ugc.trill", ["36.5.4"]), + CompatiblePackage("com.zhiliaoapp.musically", ["36.5.4"]), ], ) object SettingsPatch : BytecodePatch( diff --git a/src/main/kotlin/app/revanced/patches/tiktok/shared/fingerprints/GetEnterFromFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/shared/fingerprints/GetEnterFromFingerprint.kt new file mode 100644 index 0000000000..aa003dfc35 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/tiktok/shared/fingerprints/GetEnterFromFingerprint.kt @@ -0,0 +1,24 @@ +package app.revanced.patches.tiktok.shared.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +internal object GetEnterFromFingerprint : MethodFingerprint( + returnType = "Ljava/lang/String;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Z"), + opcodes = listOf( + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT, + Opcode.INVOKE_STATIC, + Opcode.MOVE_RESULT_OBJECT, + Opcode.RETURN_OBJECT, + ), + customFingerprint = { methodDef, _ -> + methodDef.definingClass.endsWith("/BaseListFragmentPanel;") + }, +) diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/fingerprints/OnRenderFirstFrameFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/shared/fingerprints/OnRenderFirstFrameFingerprint.kt similarity index 63% rename from src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/fingerprints/OnRenderFirstFrameFingerprint.kt rename to src/main/kotlin/app/revanced/patches/tiktok/shared/fingerprints/OnRenderFirstFrameFingerprint.kt index 59f930efea..6c796b15b7 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/fingerprints/OnRenderFirstFrameFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/shared/fingerprints/OnRenderFirstFrameFingerprint.kt @@ -1,9 +1,10 @@ -package app.revanced.patches.tiktok.interaction.speed.fingerprints +package app.revanced.patches.tiktok.shared.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint internal object OnRenderFirstFrameFingerprint : MethodFingerprint( + strings = listOf("method_enable_viewpager_preload_duration"), customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("/BaseListFragmentPanel;") && methodDef.name == "onRenderFirstFrame" - } + methodDef.definingClass.endsWith("/BaseListFragmentPanel;") + }, ) From f31b03ce1ddc3a90c2611916aae33a1b2ead11d2 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 22 Sep 2024 23:45:54 +0000 Subject: [PATCH 8/8] chore(release): 4.15.0-dev.1 [skip ci] # [4.15.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.2-dev.2...v4.15.0-dev.1) (2024-09-22) ### Features * **TikTok:** Bump patches to support the latest version 36.5.4 ([e5dcb72](https://github.com/ReVanced/revanced-patches/commit/e5dcb72597092fb32003f11fdf6f861ede4e7ff3)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb35895d29..e23f81ec36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [4.15.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.2-dev.2...v4.15.0-dev.1) (2024-09-22) + + +### Features + +* **TikTok:** Bump patches to support the latest version 36.5.4 ([e5dcb72](https://github.com/ReVanced/revanced-patches/commit/e5dcb72597092fb32003f11fdf6f861ede4e7ff3)) + ## [4.14.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.14.2-dev.1...v4.14.2-dev.2) (2024-09-21) diff --git a/gradle.properties b/gradle.properties index 6cd333a0a0..e862af09fa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 4.14.2-dev.2 +version = 4.15.0-dev.1