fix(YouTube Music - Hide layout components): Hide sound search button setting is not added to 8.05.51+

This commit is contained in:
inotia00 2025-02-28 09:23:18 +09:00
parent a4f9a182c1
commit 5706c08936
4 changed files with 79 additions and 21 deletions

View File

@ -79,6 +79,10 @@ public class GeneralPatch {
}
}
public static boolean hideSoundSearchButton() {
return Settings.HIDE_SOUND_SEARCH_BUTTON.get();
}
public static boolean hideSoundSearchButton(boolean original) {
if (!Settings.SETTINGS_INITIALIZED.get()) {
return original;

View File

@ -84,6 +84,9 @@ internal val mediaRouteButtonFingerprint = legacyFingerprint(
strings = listOf("MediaRouteButton")
)
/**
* This fingerprint is compatible with YouTube Music 6.39.50+.
*/
internal val parentToolMenuFingerprint = legacyFingerprint(
name = "parentToolMenuFingerprint",
returnType = "V",
@ -135,10 +138,39 @@ internal val searchBarParentFingerprint = legacyFingerprint(
strings = listOf("web_search")
)
internal const val SOUND_SEARCH_BUTTON_FEATURE_FLAG = 45625491L
/**
* This fingerprint is compatible with YouTube Music 6.48.52 ~ 8.04.53.
*/
internal val soundSearchLegacyFingerprint = legacyFingerprint(
name = "soundSearchLegacyFingerprint",
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = emptyList(),
literals = listOf(SOUND_SEARCH_BUTTON_FEATURE_FLAG),
)
/**
* This fingerprint is compatible with YouTube Music 6.48.52+.
*/
internal val soundSearchFingerprint = legacyFingerprint(
name = "soundSearchFingerprint",
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = emptyList(),
literals = listOf(45625491L),
opcodes = listOf(Opcode.INVOKE_INTERFACE),
)
/**
* This fingerprint is compatible with YouTube Music 6.48.52+.
*/
internal val soundSearchConstructorFingerprint = legacyFingerprint(
name = "soundSearchConstructorFingerprint",
returnType = "V",
accessFlags = AccessFlags.STATIC or AccessFlags.CONSTRUCTOR,
parameters = emptyList(),
literals = listOf(208485L),
)
internal val tasteBuilderConstructorFingerprint = legacyFingerprint(

View File

@ -13,7 +13,10 @@ import app.revanced.patches.music.utils.extension.Constants.COMPONENTS_PATH
import app.revanced.patches.music.utils.extension.Constants.GENERAL_CLASS_DESCRIPTOR
import app.revanced.patches.music.utils.extension.Constants.GENERAL_PATH
import app.revanced.patches.music.utils.patch.PatchList.HIDE_LAYOUT_COMPONENTS
import app.revanced.patches.music.utils.playservice.is_6_39_or_greater
import app.revanced.patches.music.utils.playservice.is_6_42_or_greater
import app.revanced.patches.music.utils.playservice.is_6_48_or_greater
import app.revanced.patches.music.utils.playservice.is_8_05_or_greater
import app.revanced.patches.music.utils.playservice.versionCheckPatch
import app.revanced.patches.music.utils.resourceid.musicTasteBuilderShelf
import app.revanced.patches.music.utils.resourceid.playerOverlayChip
@ -31,7 +34,6 @@ import app.revanced.util.fingerprint.injectLiteralInstructionBooleanCall
import app.revanced.util.fingerprint.matchOrThrow
import app.revanced.util.fingerprint.methodOrThrow
import app.revanced.util.fingerprint.mutableClassOrThrow
import app.revanced.util.fingerprint.resolvable
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
@ -61,8 +63,6 @@ val layoutComponentsPatch = bytecodePatch(
)
execute {
var notificationButtonIncluded = false
var soundSearchButtonIncluded = false
// region patch for hide cast button
@ -163,7 +163,6 @@ val layoutComponentsPatch = bytecodePatch(
"invoke-static {v$targetRegister}, $GENERAL_CLASS_DESCRIPTOR->hideNotificationButton(Landroid/view/View;)V"
)
}
notificationButtonIncluded = true
}
// endregion
@ -181,7 +180,7 @@ val layoutComponentsPatch = bytecodePatch(
}
// The lowest version supported by the patch does not have parent tool settings
if (parentToolMenuFingerprint.resolvable()) {
if (is_6_39_or_greater) {
parentToolMenuFingerprint.matchOrThrow().let {
it.method.apply {
val index = it.patternMatch!!.startIndex + 1
@ -201,12 +200,25 @@ val layoutComponentsPatch = bytecodePatch(
// region patch for hide sound search button
if (soundSearchFingerprint.resolvable()) {
soundSearchFingerprint.injectLiteralInstructionBooleanCall(
45625491L,
"$GENERAL_CLASS_DESCRIPTOR->hideSoundSearchButton(Z)Z"
)
soundSearchButtonIncluded = true
if (is_6_48_or_greater) {
if (is_8_05_or_greater) {
soundSearchFingerprint.methodOrThrow(soundSearchConstructorFingerprint)
.addInstructionsWithLabels(
0, """
invoke-static {}, $GENERAL_CLASS_DESCRIPTOR->hideSoundSearchButton()Z
move-result v0
if-eqz v0, :show
return-void
:show
nop
"""
)
} else {
soundSearchLegacyFingerprint.injectLiteralInstructionBooleanCall(
SOUND_SEARCH_BUTTON_FEATURE_FLAG,
"$GENERAL_CLASS_DESCRIPTOR->hideSoundSearchButton(Z)Z"
)
}
}
// endregion
@ -324,7 +336,7 @@ val layoutComponentsPatch = bytecodePatch(
"revanced_hide_history_button",
"false"
)
if (notificationButtonIncluded) {
if (is_6_42_or_greater) {
addSwitchPreference(
CategoryType.GENERAL,
"revanced_hide_notification_button",
@ -341,7 +353,7 @@ val layoutComponentsPatch = bytecodePatch(
"revanced_hide_samples_shelf",
"false"
)
if (soundSearchButtonIncluded) {
if (is_6_48_or_greater) {
addSwitchPreference(
CategoryType.GENERAL,
"revanced_hide_sound_search_button",
@ -358,13 +370,14 @@ val layoutComponentsPatch = bytecodePatch(
"revanced_hide_voice_search_button",
"false"
)
addSwitchPreference(
CategoryType.SETTINGS,
"revanced_hide_settings_menu_parent_tools",
"false",
false
)
if (is_6_39_or_greater) {
addSwitchPreference(
CategoryType.SETTINGS,
"revanced_hide_settings_menu_parent_tools",
"false",
false
)
}
addSwitchPreference(
CategoryType.SETTINGS,
"revanced_hide_settings_menu_general",

View File

@ -9,10 +9,14 @@ var is_6_27_or_greater = false
private set
var is_6_36_or_greater = false
private set
var is_6_39_or_greater = false
private set
var is_6_42_or_greater = false
private set
var is_6_43_or_greater = false
private set
var is_6_48_or_greater = false
private set
var is_7_03_or_greater = false
private set
var is_7_06_or_greater = false
@ -39,6 +43,8 @@ var is_7_33_or_greater = false
private set
var is_8_03_or_greater = false
private set
var is_8_05_or_greater = false
private set
val versionCheckPatch = resourcePatch(
description = "versionCheckPatch",
@ -56,8 +62,10 @@ val versionCheckPatch = resourcePatch(
// All bug fix releases always seem to use the same play store version as the minor version.
is_6_27_or_greater = 234412000 <= playStoreServicesVersion
is_6_36_or_greater = 240399000 <= playStoreServicesVersion
is_6_39_or_greater = 240699000 <= playStoreServicesVersion
is_6_42_or_greater = 240999000 <= playStoreServicesVersion
is_6_43_or_greater = 241099000 <= playStoreServicesVersion
is_6_48_or_greater = 241599000 <= playStoreServicesVersion
is_7_03_or_greater = 242199000 <= playStoreServicesVersion
is_7_06_or_greater = 242499000 <= playStoreServicesVersion
is_7_13_or_greater = 243199000 <= playStoreServicesVersion
@ -71,5 +79,6 @@ val versionCheckPatch = resourcePatch(
is_7_29_or_greater = 244799000 <= playStoreServicesVersion
is_7_33_or_greater = 245199000 <= playStoreServicesVersion
is_8_03_or_greater = 250399000 <= playStoreServicesVersion
is_8_05_or_greater = 250599000 <= playStoreServicesVersion
}
}