diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/YouTubeActivityHook.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/YouTubeActivityHook.java index 6801cc8a4..316e3f0bb 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/YouTubeActivityHook.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/YouTubeActivityHook.java @@ -152,7 +152,7 @@ public class YouTubeActivityHook extends BaseActivityHook { * @return if the original activity finish method should be allowed to run. */ @SuppressWarnings("unused") - public static boolean handleFinish() { + public static boolean handleBackPress() { return YouTubeSearchViewController.handleFinish(searchViewController); } } diff --git a/patches/src/main/kotlin/app/revanced/patches/music/misc/settings/SettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/misc/settings/SettingsPatch.kt index 9108d56b2..1ea963470 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/misc/settings/SettingsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/misc/settings/SettingsPatch.kt @@ -108,7 +108,8 @@ val settingsPatch = bytecodePatch( modifyActivityForSettingsInjection( googleApiActivityFingerprint.classDef, googleApiActivityFingerprint.method, - GOOGLE_API_ACTIVITY_HOOK_CLASS_DESCRIPTOR + GOOGLE_API_ACTIVITY_HOOK_CLASS_DESCRIPTOR, + true ) } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt index 735d7df99..baf4d18ea 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt @@ -218,7 +218,8 @@ val settingsPatch = bytecodePatch( modifyActivityForSettingsInjection( licenseActivityOnCreateFingerprint.classDef, licenseActivityOnCreateFingerprint.method, - YOUTUBE_ACTIVITY_HOOK_CLASS_DESCRIPTOR + YOUTUBE_ACTIVITY_HOOK_CLASS_DESCRIPTOR, + false ) } @@ -233,7 +234,8 @@ val settingsPatch = bytecodePatch( internal fun modifyActivityForSettingsInjection( activityOnCreateClass: MutableClass, activityOnCreateMethod: MutableMethod, - extensionClassType: String + extensionClassType: String, + isYouTubeMusic: Boolean ) { // Modify Activity and remove all existing layout code. // Must modify an existing activity and cannot add a new activity to the manifest, @@ -275,7 +277,7 @@ internal fun modifyActivityForSettingsInjection( // Override finish() to intercept back gesture. ImmutableMethod( activityOnCreateClass.type, - "finish", + if (isYouTubeMusic) "finish" else "onBackPressed", emptyList(), "V", AccessFlags.PUBLIC.value, @@ -283,13 +285,16 @@ internal fun modifyActivityForSettingsInjection( null, MutableMethodImplementation(3), ).toMutable().apply { + // Slightly different hooks are needed, otherwise the back button can behave wrong. + val extensionMethodName = if (isYouTubeMusic) "handleFinish" else "handleBackPress" + val invokeFinishOpcode = if (isYouTubeMusic) "invoke-super" else "invoke-virtual" + addInstructions( """ - invoke-static {}, $extensionClassType->handleFinish()Z + invoke-static {}, $extensionClassType->$extensionMethodName()Z move-result v0 if-nez v0, :search_handled - invoke-super { p0 }, Landroid/app/Activity;->finish()V - return-void + $invokeFinishOpcode { p0 }, Landroid/app/Activity;->finish()V :search_handled return-void """