From 35a52a0ee99fd71432f3c545ac641012f97e983c Mon Sep 17 00:00:00 2001 From: inotia00 Date: Sun, 2 Apr 2023 19:13:53 +0900 Subject: [PATCH] add `enable-tablet-navigation-bar` patch --- .../PivotBarChangedFingerprint.kt | 14 ++++ .../fingerprints/PivotBarStyleFingerprint.kt | 15 ++++ .../patch/TabletNavigationBarPatch.kt | 70 +++++++++++++++++++ .../youtube/settings/host/values/strings.xml | 3 + .../youtube/settings/xml/revanced_prefs.xml | 4 ++ 5 files changed, 106 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/fingerprints/PivotBarChangedFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/fingerprints/PivotBarStyleFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/patch/TabletNavigationBarPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/fingerprints/PivotBarChangedFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/fingerprints/PivotBarChangedFingerprint.kt new file mode 100644 index 000000000..8d4d9e3e2 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/fingerprints/PivotBarChangedFingerprint.kt @@ -0,0 +1,14 @@ +package app.revanced.patches.youtube.layout.navigation.tabletnavbar.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.Opcode + +object PivotBarChangedFingerprint : MethodFingerprint( + returnType = "V", + opcodes = listOf( + Opcode.INVOKE_STATIC, + Opcode.MOVE_RESULT + ), + customFingerprint = { it.definingClass == "Lcom/google/android/apps/youtube/app/ui/pivotbar/PivotBar;" + && it.name == "onConfigurationChanged" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/fingerprints/PivotBarStyleFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/fingerprints/PivotBarStyleFingerprint.kt new file mode 100644 index 000000000..82dc49e14 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/fingerprints/PivotBarStyleFingerprint.kt @@ -0,0 +1,15 @@ +package app.revanced.patches.youtube.layout.navigation.tabletnavbar.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.Opcode + +object PivotBarStyleFingerprint : MethodFingerprint( + returnType = "V", + parameters = listOf("L"), + opcodes = listOf( + Opcode.INVOKE_STATIC, + Opcode.MOVE_RESULT, + Opcode.XOR_INT_2ADDR + ), + customFingerprint = { it.definingClass == "Lcom/google/android/apps/youtube/app/ui/pivotbar/PivotBar;" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/patch/TabletNavigationBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/patch/TabletNavigationBarPatch.kt new file mode 100644 index 000000000..911273d45 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/navigation/tabletnavbar/patch/TabletNavigationBarPatch.kt @@ -0,0 +1,70 @@ +package app.revanced.patches.youtube.layout.navigation.tabletnavbar.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.addInstructions +import app.revanced.patcher.extensions.instruction +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.shared.annotation.YouTubeCompatibility +import app.revanced.patches.youtube.layout.navigation.tabletnavbar.fingerprints.* +import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsPatch +import app.revanced.util.integrations.Constants.NAVIGATION +import org.jf.dexlib2.iface.instruction.OneRegisterInstruction + +@Patch +@Name("enable-tablet-navigation-bar") +@Description("Enables the tablet navigation bar.") +@DependsOn([SettingsPatch::class]) +@YouTubeCompatibility +@Version("0.0.1") +class TabletNavigationBarPatch : BytecodePatch( + listOf( + PivotBarChangedFingerprint, + PivotBarStyleFingerprint + ) +) { + override fun execute(context: BytecodeContext): PatchResult { + + arrayOf( + PivotBarChangedFingerprint, + PivotBarStyleFingerprint + ).forEach { + it.result?.insertHook() ?: return it.toErrorResult() + } + + /* + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "PREFERENCE: NAVIGATION_SETTINGS", + "SETTINGS: ENABLE_TABLET_NAVIGATION_BAR" + ) + ) + + SettingsPatch.updatePatchStatus("enable-tablet-navigation-bar") + + return PatchResultSuccess() + } + companion object { + private fun MethodFingerprintResult.insertHook() { + val targetIndex = this.scanResult.patternScanResult!!.startIndex + 1 + val register = (mutableMethod.instruction(targetIndex) as OneRegisterInstruction).registerA + + mutableMethod.addInstructions( + targetIndex + 1, """ + invoke-static {v$register}, $NAVIGATION->enableTabletNavBar(Z)Z + move-result v$register + """ + ) + } + } +} diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index cc91620c9..40d50d551 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -245,6 +245,9 @@ Is it ready to submit?" Tablet mini player is disabled Tablet mini player is enabled Enable tablet mini player + Tablet navigation bar is disabled + Tablet navigation bar is enabled + Enable tablet navigation bar Append time stamp speed is disabled Append time stamp speed is enabled Enable time stamp speed diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 4ef0dde62..55e083683 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -293,6 +293,9 @@ PREFERENCE: NAVIGATION_SETTINGS --> + + @@ -481,6 +484,7 @@ +