Skip to content

Commit

Permalink
feat: Hide mini player back / forward buttons
Browse files Browse the repository at this point in the history
  • Loading branch information
LisoUseInAIKyrios committed Jun 4, 2024
1 parent 9460336 commit 907f239
Show file tree
Hide file tree
Showing 9 changed files with 110 additions and 34 deletions.
1 change: 1 addition & 0 deletions api/revanced-patches.api
Original file line number Diff line number Diff line change
Expand Up @@ -1937,6 +1937,7 @@ public final class app/revanced/util/ResourceUtilsKt {
public abstract class app/revanced/util/patch/LiteralValueFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint {
public fun <init> (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function0;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getLiteralSupplier ()Lkotlin/jvm/functions/Function0;
}

public final class app/revanced/util/resource/ArrayResource : app/revanced/util/resource/BaseResource {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,20 @@ import app.revanced.patches.youtube.layout.tablet.fingerprints.MiniPlayerDimensi
import app.revanced.patches.youtube.layout.tablet.fingerprints.MiniPlayerOverrideFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.MiniPlayerOverrideNoContextFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.MiniPlayerResponseModelSizeCheckFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerCloseImageViewFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerCloseButtonFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerConfigFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerConstructorFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerExpandImageViewFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerExpandButtonFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerForwardButtonFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerOverlayViewFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerRewindButtonFingerprint
import app.revanced.patches.youtube.layout.tablet.fingerprints.ModernMiniPlayerViewParentFingerprint
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
import app.revanced.patches.youtube.misc.settings.SettingsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow
import app.revanced.util.patch.LiteralValueFingerprint
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
Expand Down Expand Up @@ -89,7 +92,8 @@ object TabletLayoutPatch : BytecodePatch(
SwitchPreference("revanced_tablet_mini_player"),
SwitchPreference("revanced_tablet_mini_player_modern"),
SwitchPreference("revanced_tablet_mini_player_modern_hide_expand_close"),
TextPreference("revanced_tablet_mini_player_opacity", inputType = InputType.NUMBER),
SwitchPreference("revanced_tablet_mini_player_modern_hide_rewind_forward"),
TextPreference("revanced_tablet_mini_player_opacity", inputType = InputType.NUMBER)
)
)
)
Expand All @@ -116,7 +120,7 @@ object TabletLayoutPatch : BytecodePatch(
}
}

// Enable tablet mini player
// Enable tablet mini player.

MiniPlayerOverrideNoContextFingerprint.resolve(
context,
Expand Down Expand Up @@ -145,7 +149,7 @@ object TabletLayoutPatch : BytecodePatch(
it.mutableMethod.insertTabletOverride(it.scanResult.patternScanResult!!.endIndex)
}

// Enable modern mini player
// Enable modern mini player.

ModernMiniPlayerConfigFingerprint.resultOrThrow().let {
it.mutableMethod.apply {
Expand All @@ -169,30 +173,30 @@ object TabletLayoutPatch : BytecodePatch(

// Hide modern mini player buttons.

listOf(
Triple(ModernMiniPlayerOverlayViewFingerprint, TabletLayoutResourcePatch.scrimOverlay, "adjustModernTabletMiniPlayerOpacity"),
Triple(ModernMiniPlayerExpandImageViewFingerprint, TabletLayoutResourcePatch.modernMiniplayerExpand, "hideModernMiniPlayerButtonView"),
Triple(ModernMiniPlayerCloseImageViewFingerprint, TabletLayoutResourcePatch.modernMiniplayerClose, "hideModernMiniPlayerButtonView")
).forEach { (fingerprint, resourceId, integrationsMethodName) ->
fingerprint.resolve(
context,
ModernMiniPlayerViewParentFingerprint.resultOrThrow().classDef
)
ModernMiniPlayerOverlayViewFingerprint.addModernTabletMiniPlayerImageViewHook(
context,
"adjustModernTabletMiniPlayerOpacity"
)

fingerprint.resultOrThrow().mutableMethod.apply {
val imageViewIndex = indexOfFirstInstructionOrThrow(
indexOfFirstWideLiteralInstructionValueOrThrow(resourceId)
) {
opcode == Opcode.CHECK_CAST
}
ModernMiniPlayerExpandButtonFingerprint.addModernTabletMiniPlayerImageViewHook(
context,
"hideModernMiniPlayerExpandClose"
)

val register = getInstruction<OneRegisterInstruction>(imageViewIndex).registerA
addInstruction(
imageViewIndex + 1,
"invoke-static { v$register }, $INTEGRATIONS_CLASS_DESCRIPTOR->$integrationsMethodName(Landroid/widget/ImageView;)V"
)
}
}
ModernMiniPlayerCloseButtonFingerprint.addModernTabletMiniPlayerImageViewHook(
context,
"hideModernMiniPlayerExpandClose"
)

ModernMiniPlayerRewindButtonFingerprint.addModernTabletMiniPlayerImageViewHook(
context,
"hideModernMiniPlayerRewindForward"
)

ModernMiniPlayerForwardButtonFingerprint.addModernTabletMiniPlayerImageViewHook(
context,
"hideModernMiniPlayerRewindForward"
)
}

private fun Method.findReturnIndexes(): List<Int> {
Expand All @@ -203,7 +207,7 @@ object TabletLayoutPatch : BytecodePatch(
.reversed()
if (indexes.isEmpty()) throw PatchException("No return instructions found.")

return indexes;
return indexes
}

private fun MutableMethod.insertTabletOverride(index: Int) {
Expand Down Expand Up @@ -238,4 +242,28 @@ object TabletLayoutPatch : BytecodePatch(
)
removeInstruction(iPutIndex)
}

private fun LiteralValueFingerprint.addModernTabletMiniPlayerImageViewHook(
context: BytecodeContext,
integrationsMethodName: String
) {
resolve(
context,
ModernMiniPlayerViewParentFingerprint.resultOrThrow().classDef
)

resultOrThrow().mutableMethod.apply {
val imageViewIndex = indexOfFirstInstructionOrThrow(
indexOfFirstWideLiteralInstructionValueOrThrow(literalSupplier.invoke())
) {
opcode == Opcode.CHECK_CAST
}

val register = getInstruction<OneRegisterInstruction>(imageViewIndex).registerA
addInstruction(
imageViewIndex + 1,
"invoke-static { v$register }, $INTEGRATIONS_CLASS_DESCRIPTOR->$integrationsMethodName(Landroid/widget/ImageView;)V"
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,23 @@ import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch
@Patch(dependencies = [ResourceMappingPatch::class])
internal object TabletLayoutResourcePatch : ResourcePatch() {
var floatyBarButtonTopMargin = -1L
var scrimOverlay = -1L
var modernMiniplayerClose = -1L
var modernMiniplayerExpand = -1L
var scrimOverlay = -1L
var modernMiniplayerRewindButton = -1L
var modernMiniplayerForwardButton = -1L

override fun execute(context: ResourceContext) {
floatyBarButtonTopMargin = ResourceMappingPatch[
"dimen",
"floaty_bar_button_top_margin"
]

scrimOverlay = ResourceMappingPatch[
"id",
"scrim_overlay"
]

modernMiniplayerClose = ResourceMappingPatch[
"id",
"modern_miniplayer_close"
Expand All @@ -28,9 +35,14 @@ internal object TabletLayoutResourcePatch : ResourcePatch() {
"modern_miniplayer_expand"
]

scrimOverlay = ResourceMappingPatch[
modernMiniplayerRewindButton = ResourceMappingPatch[
"id",
"scrim_overlay"
"modern_miniplayer_rewind_button"
]

modernMiniplayerForwardButton = ResourceMappingPatch[
"id",
"modern_miniplayer_forward_button"
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
/**
* Resolves using the class found in [ModernMiniPlayerViewParentFingerprint].
*/
internal object ModernMiniPlayerCloseImageViewFingerprint : LiteralValueFingerprint(
internal object ModernMiniPlayerCloseButtonFingerprint : LiteralValueFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "Landroid/widget/ImageView;",
parameters = listOf(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
/**
* Resolves using the class found in [ModernMiniPlayerViewParentFingerprint].
*/
internal object ModernMiniPlayerExpandImageViewFingerprint : LiteralValueFingerprint(
internal object ModernMiniPlayerExpandButtonFingerprint : LiteralValueFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "Landroid/widget/ImageView;",
parameters = listOf(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package app.revanced.patches.youtube.layout.tablet.fingerprints

import app.revanced.patcher.extensions.or
import app.revanced.patches.youtube.layout.tablet.TabletLayoutResourcePatch
import app.revanced.util.patch.LiteralValueFingerprint
import com.android.tools.smali.dexlib2.AccessFlags

/**
* Resolves using the class found in [ModernMiniPlayerViewParentFingerprint].
*/
internal object ModernMiniPlayerForwardButtonFingerprint : LiteralValueFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "Landroid/widget/ImageView;",
parameters = listOf(),
literalSupplier = { TabletLayoutResourcePatch.modernMiniplayerForwardButton }
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package app.revanced.patches.youtube.layout.tablet.fingerprints

import app.revanced.patcher.extensions.or
import app.revanced.patches.youtube.layout.tablet.TabletLayoutResourcePatch
import app.revanced.util.patch.LiteralValueFingerprint
import com.android.tools.smali.dexlib2.AccessFlags

/**
* Resolves using the class found in [ModernMiniPlayerViewParentFingerprint].
*/
internal object ModernMiniPlayerRewindButtonFingerprint : LiteralValueFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "Landroid/widget/ImageView;",
parameters = listOf(),
literalSupplier = { TabletLayoutResourcePatch.modernMiniplayerRewindButton }
)
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ abstract class LiteralValueFingerprint(
opcodes: Iterable<Opcode>? = null,
strings: Iterable<String>? = null,
// Has to be a supplier because the fingerprint is created before patches can set literals.
literalSupplier: () -> Long
val literalSupplier: () -> Long
) : MethodFingerprint(
returnType = returnType,
accessFlags = accessFlags,
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/addresources/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -959,6 +959,9 @@
<string name="revanced_tablet_mini_player_modern_hide_expand_close_title">Hide expand and close buttons</string>
<string name="revanced_tablet_mini_player_modern_hide_expand_close_summary_on">Buttons are hidden\n(swipe mini player to expand or close)</string>
<string name="revanced_tablet_mini_player_modern_hide_expand_close_summary_off">Expand and close buttons are shown</string>
<string name="revanced_tablet_mini_player_modern_hide_rewind_forward_title">Hide skip forward and back buttons</string>
<string name="revanced_tablet_mini_player_modern_hide_rewind_forward_summary_on">Skip forward and back are hidden</string>
<string name="revanced_tablet_mini_player_modern_hide_rewind_forward_summary_off">Skip forward and back are shown</string>
<string name="revanced_tablet_mini_player_opacity_title">Modern mini player overlay opacity</string>
<string name="revanced_tablet_mini_player_opacity_summary">Opacity value between 0-100, where 0 is transparent</string>
<string name="revanced_tablet_mini_player_opacity_invalid_toast">Mini player overlay opacity must be between 0-100</string>
Expand Down

0 comments on commit 907f239

Please sign in to comment.