From 03890736004426eeceeef778650aa6845646a51c Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 20 Oct 2025 11:40:37 +0400 Subject: [PATCH] fix minimal miniplayer using incorrectly sized bold icons --- .../youtube/patches/MiniplayerPatch.java | 13 +++++++++ .../youtube/layout/miniplayer/Fingerprints.kt | 10 +++++++ .../layout/miniplayer/MiniplayerPatch.kt | 27 ++++++++++++++++++- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java index b2138934d..f24108b97 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/MiniplayerPatch.java @@ -379,6 +379,19 @@ public final class MiniplayerPatch { return original; } + /** + * Injection point. + */ + public static boolean allowBoldIcons(boolean original) { + if (CURRENT_TYPE == MINIMAL) { + // Minimal player does not have the correct pause/play icon (it's too large). + // Use the non bold icons instead. + return false; + } + + return original; + } + /** * Injection point. */ diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/Fingerprints.kt index 7aaf7d221..2a264a35b 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/Fingerprints.kt @@ -207,3 +207,13 @@ internal val playerOverlaysLayoutFingerprint by fingerprint { method.definingClass == YOUTUBE_PLAYER_OVERLAYS_LAYOUT_CLASS_NAME } } + +internal val miniplayerSetIconsFingerprint by fingerprint { + returns("V") + parameters("I", "Ljava/lang/Runnable;") + instructions( + resourceLiteral(ResourceType.DRAWABLE, "yt_fill_pause_white_36"), + resourceLiteral(ResourceType.DRAWABLE, "yt_fill_pause_black_36") + ) +} + diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/MiniplayerPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/MiniplayerPatch.kt index 86ef32c67..37eea1c4a 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/MiniplayerPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/MiniplayerPatch.kt @@ -29,6 +29,7 @@ import com.android.tools.smali.dexlib2.iface.Method import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.immutable.ImmutableMethod import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter @@ -321,7 +322,7 @@ val miniplayerPatch = bytecodePatch( """ invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->getMiniplayerDefaultSize(I)I move-result v$register - """, + """ ) } @@ -386,6 +387,30 @@ val miniplayerPatch = bytecodePatch( // endregion + // region fix minimal miniplayer using the wrong pause/play bold icons. + + if (is_20_31_or_greater) { + miniplayerSetIconsFingerprint.method.apply { + findInstructionIndicesReversedOrThrow { + val reference = getReference() + opcode == Opcode.INVOKE_INTERFACE + && reference?.returnType == "Z" && reference.parameterTypes.isEmpty() + }.forEach { index -> + val register = getInstruction(index + 1).registerA + + addInstructions( + index + 2, + """ + invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->allowBoldIcons(Z)Z + move-result v$register + """ + ) + } + } + } + + // endregion + // region Add hooks to hide modern miniplayer buttons. listOf(