add hide-home-button, hide-subscriptions-button patch

This commit is contained in:
inotia00
2023-04-23 02:30:47 +09:00
parent 2ef68b09f6
commit 42365c0bdb
9 changed files with 186 additions and 61 deletions

View File

@ -0,0 +1,44 @@
package app.revanced.patches.youtube.layout.navigation.homebutton.patch
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.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.misc.lastpivottab.patch.LastPivotTabHookPatch
import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsPatch
@Patch
@Name("hide-home-button")
@Description("Hides the home button in the navigation bar.")
@DependsOn(
[
SettingsPatch::class,
LastPivotTabHookPatch::class
]
)
@YouTubeCompatibility
@Version("0.0.1")
class HomeButtonRemoverPatch : BytecodePatch() {
override fun execute(context: BytecodeContext): PatchResult {
/*
* Add settings
*/
SettingsPatch.addPreference(
arrayOf(
"PREFERENCE: NAVIGATION_SETTINGS",
"SETTINGS: HIDE_HOME_BUTTON"
)
)
SettingsPatch.updatePatchStatus("hide-home-button")
return PatchResultSuccess()
}
}

View File

@ -1,25 +1,17 @@
package app.revanced.patches.youtube.layout.navigation.shortsbutton.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.fingerprint.method.impl.MethodFingerprint.Companion.resolve
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.shared.fingerprints.PivotBarCreateButtonViewFingerprint
import app.revanced.patches.youtube.layout.navigation.shortsbutton.fingerprints.PivotBarEnumFingerprint
import app.revanced.patches.youtube.layout.navigation.shortsbutton.fingerprints.PivotBarShortsButtonViewFingerprint
import app.revanced.patches.youtube.misc.resourceid.patch.SharedResourceIdPatch
import app.revanced.patches.youtube.misc.lastpivottab.patch.LastPivotTabHookPatch
import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsPatch
import app.revanced.util.integrations.Constants.NAVIGATION
import app.revanced.util.pivotbar.InjectionUtils.REGISTER_TEMPLATE_REPLACEMENT
import app.revanced.util.pivotbar.InjectionUtils.injectHook
@Patch
@Name("hide-shorts-button")
@ -27,51 +19,14 @@ import app.revanced.util.pivotbar.InjectionUtils.injectHook
@DependsOn(
[
SettingsPatch::class,
SharedResourceIdPatch::class
LastPivotTabHookPatch::class
]
)
@YouTubeCompatibility
@Version("0.0.1")
class ShortsButtonRemoverPatch : BytecodePatch(
listOf(PivotBarCreateButtonViewFingerprint)
) {
class ShortsButtonRemoverPatch : BytecodePatch() {
override fun execute(context: BytecodeContext): PatchResult {
/*
* Resolve fingerprints
*/
PivotBarCreateButtonViewFingerprint.result?.let { parentResult ->
with (
arrayOf(
PivotBarEnumFingerprint,
PivotBarShortsButtonViewFingerprint
).onEach {
it.resolve(
context,
parentResult.mutableMethod,
parentResult.mutableClass
)
}.map {
it.result?.scanResult?.patternScanResult ?: return it.toErrorResult()
}
) {
val enumScanResult = this[0]
val buttonViewResult = this[1]
val enumHookInsertIndex = enumScanResult.startIndex + 2
val buttonHookInsertIndex = buttonViewResult.endIndex
mapOf(
buttonHook to buttonHookInsertIndex,
enumHook to enumHookInsertIndex
).forEach { (hook, insertIndex) ->
parentResult.mutableMethod.injectHook(hook, insertIndex)
}
}
} ?: return PivotBarCreateButtonViewFingerprint.toErrorResult()
/*
* Add settings
*/
@ -86,15 +41,4 @@ class ShortsButtonRemoverPatch : BytecodePatch(
return PatchResultSuccess()
}
private companion object {
const val enumHook =
"sput-object v$REGISTER_TEMPLATE_REPLACEMENT, $NAVIGATION" +
"->" +
"lastPivotTab:Ljava/lang/Enum;"
const val buttonHook =
"invoke-static { v$REGISTER_TEMPLATE_REPLACEMENT }, $NAVIGATION" +
"->" +
"hideShortsButton(Landroid/view/View;)V"
}
}

View File

@ -0,0 +1,44 @@
package app.revanced.patches.youtube.layout.navigation.subscriptionsbutton.patch
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.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.misc.lastpivottab.patch.LastPivotTabHookPatch
import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsPatch
@Patch
@Name("hide-subscriptions-button")
@Description("Hides the subscriptions button in the navigation bar.")
@DependsOn(
[
SettingsPatch::class,
LastPivotTabHookPatch::class
]
)
@YouTubeCompatibility
@Version("0.0.1")
class SubscriptionsButtonRemoverPatch : BytecodePatch() {
override fun execute(context: BytecodeContext): PatchResult {
/*
* Add settings
*/
SettingsPatch.addPreference(
arrayOf(
"PREFERENCE: NAVIGATION_SETTINGS",
"SETTINGS: HIDE_SUBSCRIPTIONS_BUTTON"
)
)
SettingsPatch.updatePatchStatus("hide-subscriptions-button")
return PatchResultSuccess()
}
}

View File

@ -1,4 +1,4 @@
package app.revanced.patches.youtube.layout.navigation.shortsbutton.fingerprints
package app.revanced.patches.youtube.misc.lastpivottab.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode

View File

@ -1,4 +1,4 @@
package app.revanced.patches.youtube.layout.navigation.shortsbutton.fingerprints
package app.revanced.patches.youtube.misc.lastpivottab.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode

View File

@ -0,0 +1,78 @@
package app.revanced.patches.youtube.misc.lastpivottab.patch
import app.revanced.extensions.toErrorResult
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
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.patches.shared.annotation.YouTubeCompatibility
import app.revanced.patches.shared.fingerprints.PivotBarCreateButtonViewFingerprint
import app.revanced.patches.youtube.misc.lastpivottab.fingerprints.PivotBarEnumFingerprint
import app.revanced.patches.youtube.misc.lastpivottab.fingerprints.PivotBarShortsButtonViewFingerprint
import app.revanced.patches.youtube.misc.resourceid.patch.SharedResourceIdPatch
import app.revanced.util.integrations.Constants.NAVIGATION
import app.revanced.util.pivotbar.InjectionUtils.REGISTER_TEMPLATE_REPLACEMENT
import app.revanced.util.pivotbar.InjectionUtils.injectHook
@Name("last-pivot-tab-hook")
@DependsOn([SharedResourceIdPatch::class])
@YouTubeCompatibility
@Version("0.0.1")
class LastPivotTabHookPatch : BytecodePatch(
listOf(PivotBarCreateButtonViewFingerprint)
) {
override fun execute(context: BytecodeContext): PatchResult {
/*
* Resolve fingerprints
*/
PivotBarCreateButtonViewFingerprint.result?.let { parentResult ->
with (
arrayOf(
PivotBarEnumFingerprint,
PivotBarShortsButtonViewFingerprint
).onEach {
it.resolve(
context,
parentResult.mutableMethod,
parentResult.mutableClass
)
}.map {
it.result?.scanResult?.patternScanResult ?: return it.toErrorResult()
}
) {
val enumScanResult = this[0]
val buttonViewResult = this[1]
val enumHookInsertIndex = enumScanResult.startIndex + 2
val buttonHookInsertIndex = buttonViewResult.endIndex
mapOf(
buttonHook to buttonHookInsertIndex,
enumHook to enumHookInsertIndex
).forEach { (hook, insertIndex) ->
parentResult.mutableMethod.injectHook(hook, insertIndex)
}
}
} ?: return PivotBarCreateButtonViewFingerprint.toErrorResult()
return PatchResultSuccess()
}
private companion object {
const val enumHook =
"sput-object v$REGISTER_TEMPLATE_REPLACEMENT, $NAVIGATION" +
"->" +
"lastPivotTab:Ljava/lang/Enum;"
const val buttonHook =
"invoke-static { v$REGISTER_TEMPLATE_REPLACEMENT }, $NAVIGATION" +
"->" +
"hideNavigationButton(Landroid/view/View;)V"
}
}