generated from ReVanced/revanced-patches-template
-
-
Notifications
You must be signed in to change notification settings - Fork 223
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: implement
wide-searchbar
Patch (#130)
- Loading branch information
1 parent
04f0342
commit 332f4d1
Showing
6 changed files
with
293 additions
and
0 deletions.
There are no files selected for viewing
13 changes: 13 additions & 0 deletions
13
...p/revanced/patches/youtube/layout/widesearchbar/annotations/WideSearchbarCompatibility.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package app.revanced.patches.youtube.layout.widesearchbar.annotations | ||
|
||
import app.revanced.patcher.annotation.Compatibility | ||
import app.revanced.patcher.annotation.Package | ||
|
||
@Compatibility( | ||
[Package( | ||
"com.google.android.youtube", arrayOf("17.25.34") | ||
)] | ||
) | ||
@Target(AnnotationTarget.CLASS) | ||
@Retention(AnnotationRetention.RUNTIME) | ||
internal annotation class WideSearchbarCompatibility |
47 changes: 47 additions & 0 deletions
47
...atches/youtube/layout/widesearchbar/fingerprints/methodone/WideSearchbarOneFingerprint.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package app.revanced.patches.youtube.layout.widesearchbar.fingerprints.methodone | ||
|
||
import app.revanced.patcher.annotation.Name | ||
import app.revanced.patcher.annotation.Version | ||
import app.revanced.patcher.extensions.or | ||
import app.revanced.patcher.fingerprint.method.annotation.DirectPatternScanMethod | ||
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod | ||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint | ||
import app.revanced.patches.youtube.layout.reels.annotations.HideReelsCompatibility | ||
import org.jf.dexlib2.AccessFlags | ||
import org.jf.dexlib2.Opcode | ||
|
||
@Name("wide-searchbar-methodone-fingerprint") | ||
@MatchingMethod( | ||
"Ljkg;", "i" | ||
) | ||
@DirectPatternScanMethod | ||
@HideReelsCompatibility | ||
@Version("0.0.1") | ||
|
||
/* | ||
This finds the following method: | ||
public final View i(akrl akrlVar, adpd adpdVar) { | ||
} | ||
Method we search for is located in smali now. | ||
See: | ||
.method public final i(Lakrl;Ladpd;)Landroid/view/View; | ||
iget-object v0, p0, Ljkg;->a:Landroid/app/Activity; | ||
invoke-static {v0}, Landroid/view/LayoutInflater;->from(Landroid/content/Context;)Landroid/view/LayoutInflater; | ||
move-result-object v0 | ||
iget-object v1, p0, Ljkg;->g:Ljis; | ||
const/4 v2, 0x0 | ||
invoke-interface {v1, v2}, Ljis;->h(Z)V | ||
iget-object p1, p1, Lakrl;->f:Lahnq; | ||
if-nez p1, :cond_12 | ||
sget-object p1, Lahnq;->a:Lahnq; | ||
:cond_12 | ||
iget-object v1, p0, Ljkg;->x:Ltxm; | ||
invoke-static {v1}, Lfbn;->aF(Ltxm;)Z //THIS IS WHAT WE SEARCH FOR (Method fbn.aF) | ||
move-result v1 | ||
*/ | ||
|
||
object WideSearchbarOneFingerprint : MethodFingerprint( | ||
"L", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf("L", "L"), listOf(Opcode.IF_NEZ, Opcode.SGET_OBJECT, Opcode.IGET_OBJECT, Opcode.INVOKE_STATIC), | ||
null, null | ||
) |
46 changes: 46 additions & 0 deletions
46
.../youtube/layout/widesearchbar/fingerprints/methodone/WideSearchbarOneParentFingerprint.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package app.revanced.patches.youtube.layout.widesearchbar.fingerprints.methodone | ||
|
||
import app.revanced.patcher.annotation.Name | ||
import app.revanced.patcher.annotation.Version | ||
import app.revanced.patcher.extensions.or | ||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint | ||
import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod | ||
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod | ||
import app.revanced.patches.youtube.layout.reels.annotations.HideReelsCompatibility | ||
import org.jf.dexlib2.AccessFlags | ||
|
||
@Name("wide-searchbar-methodone-parent-fingerprint") | ||
@MatchingMethod( | ||
"Ljkg;", "l" | ||
) | ||
@FuzzyPatternScanMethod(3) | ||
@HideReelsCompatibility | ||
@Version("0.0.1") | ||
|
||
/* | ||
* This finds the following method: | ||
private final void l(PaneDescriptor paneDescriptor) { | ||
Class cls = null; | ||
ahat f = paneDescriptor != null ? paneDescriptor.f() : null; | ||
if (paneDescriptor != null) { | ||
cls = paneDescriptor.a; | ||
} | ||
ftu k = k(); | ||
if ((k == null || !k.bk()) && ((!frx.k(f) && !((Boolean) aqer.S(this.n).X(new fac(this, f, 19)).K(irx.i).aH(false)).booleanValue()) || (f != null && f.qA(ReelWatchEndpointOuterClass$ReelWatchEndpoint.reelWatchEndpoint)))) { | ||
String j = frx.j(f); | ||
if ((j != null && ("FEhistory".equals(j) || "FEmy_videos".equals(j) || "FEpurchases".equals(j) || j.startsWith("VL"))) || cls == this.I.E() || cls == this.G.a) { | ||
this.F = 3; | ||
return; | ||
} else { | ||
this.F = 2; | ||
return; | ||
} | ||
} | ||
this.F = 1; | ||
} | ||
*/ | ||
|
||
object WideSearchbarOneParentFingerprint : MethodFingerprint( | ||
"V", AccessFlags.PRIVATE or AccessFlags.FINAL, listOf("L"), null, | ||
listOf("FEhistory", "FEmy_videos", "FEpurchases") | ||
) |
48 changes: 48 additions & 0 deletions
48
...atches/youtube/layout/widesearchbar/fingerprints/methodtwo/WideSearchbarTwoFingerprint.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package app.revanced.patches.youtube.layout.widesearchbar.fingerprints.methodtwo | ||
|
||
import app.revanced.patcher.annotation.Name | ||
import app.revanced.patcher.annotation.Version | ||
import app.revanced.patcher.extensions.or | ||
import app.revanced.patcher.fingerprint.method.annotation.DirectPatternScanMethod | ||
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod | ||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint | ||
import app.revanced.patches.youtube.layout.reels.annotations.HideReelsCompatibility | ||
import org.jf.dexlib2.AccessFlags | ||
import org.jf.dexlib2.Opcode | ||
|
||
@Name("wide-searchbar-methodtwo-fingerprint") | ||
@MatchingMethod( | ||
"Lkrf;", "h" | ||
) | ||
@DirectPatternScanMethod | ||
@HideReelsCompatibility | ||
@Version("0.0.1") | ||
|
||
/* | ||
public static jis h(Context context, txm txmVar, uag uagVar, txp txpVar) { | ||
return fbn.aB(txmVar) ? new jhx(context, txmVar, uagVar, txpVar) : jis.d; | ||
} | ||
Method we search for is located in smali now. | ||
See: | ||
.method public static h(Landroid/content/Context;Ltxm;Luag;Ltxp;)Ljis; | ||
invoke-static {p1}, Lfbn;->aB(Ltxm;)Z //this is the method we want to change. fbn.aB | ||
move-result v0 | ||
if-eqz v0, :cond_c | ||
new-instance v0, Ljhx; | ||
invoke-direct {v0, p0, p1, p2, p3}, Ljhx;-><init>(Landroid/content/Context;Ltxm;Luag;Ltxp;)V | ||
goto :goto_e | ||
:cond_c | ||
sget-object v0, Ljis;->d:Ljis; | ||
:goto_e | ||
return-object v0 | ||
.end method | ||
*/ | ||
|
||
object WideSearchbarTwoFingerprint : MethodFingerprint( | ||
"L", AccessFlags.PUBLIC or AccessFlags.STATIC, listOf("L", "L", "L", "L"), listOf( | ||
Opcode.INVOKE_STATIC, Opcode.MOVE_RESULT, Opcode.IF_EQZ, Opcode.NEW_INSTANCE | ||
), | ||
null, null | ||
) |
34 changes: 34 additions & 0 deletions
34
.../youtube/layout/widesearchbar/fingerprints/methodtwo/WideSearchbarTwoParentFingerprint.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package app.revanced.patches.youtube.layout.widesearchbar.fingerprints.methodtwo | ||
|
||
import app.revanced.patcher.annotation.Name | ||
import app.revanced.patcher.annotation.Version | ||
import app.revanced.patcher.extensions.or | ||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint | ||
import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod | ||
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod | ||
import app.revanced.patches.youtube.layout.reels.annotations.HideReelsCompatibility | ||
import org.jf.dexlib2.AccessFlags | ||
|
||
@Name("wide-searchbar-methodtwo-parent-fingerprint") | ||
@MatchingMethod( | ||
"Lkrf;", "i" | ||
) | ||
@FuzzyPatternScanMethod(3) | ||
@HideReelsCompatibility | ||
@Version("0.0.1") | ||
|
||
/* | ||
This finds following method: | ||
public static ies i(br brVar) { | ||
bp f = brVar.getSupportFragmentManager().f("VIDEO_QUALITIES_QUICK_MENU_BOTTOM_SHEET_FRAGMENT"); | ||
if (f != null) { | ||
return (kga) f; | ||
} | ||
return new kga(); | ||
} | ||
*/ | ||
|
||
object WideSearchbarTwoParentFingerprint : MethodFingerprint( | ||
"L", AccessFlags.PUBLIC or AccessFlags.STATIC, listOf("L"), null, | ||
listOf("VIDEO_QUALITIES_QUICK_MENU_BOTTOM_SHEET_FRAGMENT") | ||
) |
105 changes: 105 additions & 0 deletions
105
...main/kotlin/app/revanced/patches/youtube/layout/widesearchbar/patch/WideSearchbarPatch.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
package app.revanced.patches.youtube.layout.widesearchbar.patch | ||
|
||
import app.revanced.patcher.annotation.Description | ||
import app.revanced.patcher.annotation.Name | ||
import app.revanced.patcher.annotation.Version | ||
import app.revanced.patcher.data.impl.BytecodeData | ||
import app.revanced.patcher.data.impl.toMethodWalker | ||
import app.revanced.patcher.extensions.addInstructions | ||
import app.revanced.patcher.fingerprint.method.utils.MethodFingerprintUtils.resolve | ||
import app.revanced.patcher.patch.PatchResult | ||
import app.revanced.patcher.patch.PatchResultSuccess | ||
import app.revanced.patcher.patch.annotations.Dependencies | ||
import app.revanced.patcher.patch.annotations.Patch | ||
import app.revanced.patcher.patch.impl.BytecodePatch | ||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod | ||
import app.revanced.patches.youtube.layout.widesearchbar.annotations.WideSearchbarCompatibility | ||
import app.revanced.patches.youtube.layout.widesearchbar.fingerprints.methodone.WideSearchbarOneFingerprint | ||
import app.revanced.patches.youtube.layout.widesearchbar.fingerprints.methodone.WideSearchbarOneParentFingerprint | ||
import app.revanced.patches.youtube.layout.widesearchbar.fingerprints.methodtwo.WideSearchbarTwoFingerprint | ||
import app.revanced.patches.youtube.layout.widesearchbar.fingerprints.methodtwo.WideSearchbarTwoParentFingerprint | ||
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch | ||
|
||
@Patch(include = false) | ||
@Dependencies(dependencies = [IntegrationsPatch::class]) | ||
@Name("enable-wide-searchbar") | ||
@Description("Replaces the search-icon with a wide searchbar. This will hide the youtube logo when this is active.") | ||
@WideSearchbarCompatibility | ||
@Version("0.0.1") | ||
class WideSearchbarPatch : BytecodePatch( | ||
listOf( | ||
WideSearchbarOneParentFingerprint, WideSearchbarTwoParentFingerprint | ||
) | ||
) { | ||
override fun execute(data: BytecodeData): PatchResult { | ||
WideSearchbarOneFingerprint.resolve(data, WideSearchbarOneParentFingerprint.result!!.classDef) | ||
WideSearchbarTwoFingerprint.resolve(data, WideSearchbarTwoParentFingerprint.result!!.classDef) | ||
|
||
val resultOne = WideSearchbarOneFingerprint.result | ||
|
||
//This should be the method aF in class fbn | ||
val targetMethodOne = | ||
data.toMethodWalker(resultOne!!.method).nextMethod(resultOne!!.patternScanResult!!.endIndex, true).getMethod() as MutableMethod | ||
|
||
//Since both methods have the same smali code, inject instructions using a method. | ||
addInstructions(targetMethodOne) | ||
|
||
val resultTwo = WideSearchbarTwoFingerprint.result | ||
|
||
//This should be the method aB in class fbn | ||
val targetMethodTwo = | ||
data.toMethodWalker(resultTwo!!.method).nextMethod(resultTwo!!.patternScanResult!!.startIndex, true).getMethod() as MutableMethod | ||
|
||
//Since both methods have the same smali code, inject instructions using a method. | ||
addInstructions(targetMethodTwo) | ||
|
||
return PatchResultSuccess() | ||
} | ||
|
||
private fun addInstructions(method: MutableMethod) { | ||
val index = method.implementation!!.instructions.size - 1 | ||
method.addInstructions( | ||
index, """ | ||
invoke-static {}, Lapp/revanced/integrations/patches/NewActionbarPatch;->getNewActionBar()Z | ||
move-result p0 | ||
""" | ||
) | ||
} | ||
|
||
//targetMethodOne: in class fbn | ||
/* | ||
.method public static aF(Ltxm;)Z | ||
invoke-virtual {p0}, Ltxm;->b()Lahah; | ||
move-result-object p0 | ||
iget-object p0, p0, Lahah;->e:Lakfd; | ||
if-nez p0, :cond_a | ||
sget-object p0, Lakfd;->a:Lakfd; | ||
:cond_a | ||
iget-boolean p0, p0, Lakfd;->V:Z | ||
//added code here: | ||
invoke-static {}, app/revanced/integrations/patches/NewActionbarPatch;->getNewActionBar()Z | ||
move-result p0 | ||
//original code here: | ||
return p0 | ||
.end method | ||
*/ | ||
|
||
//targetMethodTwo: in class fbn | ||
/* | ||
.method public static aB(Ltxm;)Z | ||
invoke-virtual {p0}, Ltxm;->b()Lahah; | ||
move-result-object p0 | ||
iget-object p0, p0, Lahah;->e:Lakfd; | ||
if-nez p0, :cond_a | ||
sget-object p0, Lakfd;->a:Lakfd; | ||
:cond_a | ||
iget-boolean p0, p0, Lakfd;->y:Z | ||
//added code here: | ||
invoke-static {}, app/revanced/integrations/patches/NewActionbarPatch;->getNewActionBar()Z | ||
move-result p0 | ||
//original code here: | ||
return p0 | ||
.end method | ||
*/ | ||
} |