mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-05-04 16:44:29 +02:00
feat(YouTube): Hide search term thumbnail
, Hide toolbar button
, Hide trending searches
, Hide voice search button
patches has been integrated into Toolbar components
patch
This commit is contained in:
parent
e6411d946a
commit
9d78f19b74
@ -15,7 +15,7 @@ object DrawableColorPatch : BytecodePatch(
|
||||
) {
|
||||
override fun execute(context: BytecodeContext) {
|
||||
|
||||
DrawableFingerprint.resultOrThrow().mutableMethod?.apply {
|
||||
DrawableFingerprint.resultOrThrow().mutableMethod.apply {
|
||||
insertMethod = this
|
||||
insertIndex = getTargetIndexWithMethodReferenceNameReversed("setColor")
|
||||
insertRegister = getInstruction<FiveRegisterInstruction>(insertIndex).registerD
|
||||
|
@ -5,45 +5,30 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.booleanPatchOption
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.shared.litho.LithoFilterPatch
|
||||
import app.revanced.patches.shared.voicesearch.VoiceSearchUtils.patchXml
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.AccountListFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.AccountListParentFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.AccountMenuFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.AccountSwitcherAccessibilityLabelFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.BottomUiContainerFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.CreateSearchSuggestionsFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.FloatingMicrophoneFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.TrendingSearchConfigFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.SearchBarFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.SearchBarParentFingerprint
|
||||
import app.revanced.patches.youtube.general.components.fingerprints.SearchResultFingerprint
|
||||
import app.revanced.patches.youtube.utils.fingerprints.AccountMenuParentFingerprint
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.COMPATIBLE_PACKAGE
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.AccountSwitcherAccessibility
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.VoiceSearch
|
||||
import app.revanced.patches.youtube.utils.settings.SettingsPatch
|
||||
import app.revanced.patches.youtube.utils.toolbar.ToolBarHookPatch
|
||||
import app.revanced.patches.youtube.utils.viewgroup.ViewGroupMarginLayoutParamsHookPatch
|
||||
import app.revanced.util.getTargetIndex
|
||||
import app.revanced.util.getTargetIndexWithMethodReferenceName
|
||||
import app.revanced.util.getTargetIndexWithReference
|
||||
import app.revanced.util.getTargetIndexWithReferenceReversed
|
||||
import app.revanced.util.getWideLiteralInstructionIndex
|
||||
import app.revanced.util.literalInstructionBooleanHook
|
||||
import app.revanced.util.patch.BaseBytecodePatch
|
||||
import app.revanced.util.resultOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
@ -54,7 +39,6 @@ object LayoutComponentsPatch : BaseBytecodePatch(
|
||||
LithoFilterPatch::class,
|
||||
SettingsPatch::class,
|
||||
SharedResourceIdPatch::class,
|
||||
ToolBarHookPatch::class,
|
||||
ViewGroupMarginLayoutParamsHookPatch::class
|
||||
),
|
||||
compatiblePackages = COMPATIBLE_PACKAGE,
|
||||
@ -63,11 +47,7 @@ object LayoutComponentsPatch : BaseBytecodePatch(
|
||||
AccountMenuParentFingerprint,
|
||||
AccountSwitcherAccessibilityLabelFingerprint,
|
||||
BottomUiContainerFingerprint,
|
||||
CreateSearchSuggestionsFingerprint,
|
||||
FloatingMicrophoneFingerprint,
|
||||
SearchBarParentFingerprint,
|
||||
SearchResultFingerprint,
|
||||
TrendingSearchConfigFingerprint
|
||||
FloatingMicrophoneFingerprint
|
||||
)
|
||||
) {
|
||||
private const val CUSTOM_FILTER_CLASS_DESCRIPTOR =
|
||||
@ -75,13 +55,6 @@ object LayoutComponentsPatch : BaseBytecodePatch(
|
||||
private const val LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR =
|
||||
"$COMPONENTS_PATH/LayoutComponentsFilter;"
|
||||
|
||||
private val ForceHideVoiceSearchButton by booleanPatchOption(
|
||||
key = "ForceHideVoiceSearchButton",
|
||||
default = false,
|
||||
title = "Force hide voice search button",
|
||||
description = "Hide voice search button with legacy method, button will always be hidden"
|
||||
)
|
||||
|
||||
override fun execute(context: BytecodeContext) {
|
||||
|
||||
// region patch for hide account menu
|
||||
@ -124,22 +97,6 @@ object LayoutComponentsPatch : BaseBytecodePatch(
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide cast button
|
||||
|
||||
val buttonClass = context.findClass("MediaRouteButton")
|
||||
?: throw PatchException("MediaRouteButton class not found.")
|
||||
|
||||
buttonClass.mutableClass.methods.find { it.name == "setVisibility" }?.apply {
|
||||
addInstructions(
|
||||
0, """
|
||||
invoke-static {p1}, $GENERAL_CLASS_DESCRIPTOR->hideCastButton(I)I
|
||||
move-result p1
|
||||
"""
|
||||
)
|
||||
} ?: throw PatchException("setVisibility method not found.")
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide floating microphone
|
||||
|
||||
FloatingMicrophoneFingerprint.resultOrThrow().let {
|
||||
@ -178,39 +135,6 @@ object LayoutComponentsPatch : BaseBytecodePatch(
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide search term thumbnail
|
||||
|
||||
CreateSearchSuggestionsFingerprint.resultOrThrow().let { result ->
|
||||
result.mutableMethod.apply {
|
||||
val relativeIndex = getWideLiteralInstructionIndex(40)
|
||||
val replaceIndex = getTargetIndexWithReferenceReversed(
|
||||
relativeIndex,
|
||||
"Landroid/widget/ImageView;->setVisibility(I)V"
|
||||
) - 1
|
||||
|
||||
val jumpIndex = getTargetIndexWithReference(
|
||||
relativeIndex,
|
||||
"Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;"
|
||||
) + 4
|
||||
|
||||
val replaceIndexInstruction = getInstruction<TwoRegisterInstruction>(replaceIndex)
|
||||
val replaceIndexReference =
|
||||
getInstruction<ReferenceInstruction>(replaceIndex).reference
|
||||
|
||||
addInstructionsWithLabels(
|
||||
replaceIndex + 1, """
|
||||
invoke-static { }, $GENERAL_CLASS_DESCRIPTOR->hideSearchTermThumbnail()Z
|
||||
move-result v${replaceIndexInstruction.registerA}
|
||||
if-nez v${replaceIndexInstruction.registerA}, :hidden
|
||||
iget-object v${replaceIndexInstruction.registerA}, v${replaceIndexInstruction.registerB}, $replaceIndexReference
|
||||
""", ExternalLabel("hidden", getInstruction(jumpIndex))
|
||||
)
|
||||
removeInstruction(replaceIndex)
|
||||
}
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide snack bar
|
||||
|
||||
BottomUiContainerFingerprint.resultOrThrow().let {
|
||||
@ -228,80 +152,6 @@ object LayoutComponentsPatch : BaseBytecodePatch(
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide toolbar button
|
||||
|
||||
ToolBarHookPatch.injectCall("$GENERAL_CLASS_DESCRIPTOR->hideToolBarButton")
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide trending searches
|
||||
|
||||
TrendingSearchConfigFingerprint.literalInstructionBooleanHook(
|
||||
45399984,
|
||||
"$GENERAL_CLASS_DESCRIPTOR->hideTrendingSearches(Z)Z"
|
||||
)
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide voice search button
|
||||
|
||||
if (ForceHideVoiceSearchButton == true) {
|
||||
SettingsPatch.contexts.patchXml(
|
||||
arrayOf(
|
||||
"action_bar_search_results_view_mic.xml",
|
||||
"action_bar_search_view.xml",
|
||||
"action_bar_search_view_grey.xml",
|
||||
"action_bar_search_view_mic_out.xml"
|
||||
),
|
||||
arrayOf(
|
||||
"height",
|
||||
"marginEnd",
|
||||
"marginStart",
|
||||
"width"
|
||||
)
|
||||
)
|
||||
} else {
|
||||
SearchBarFingerprint.resolve(context, SearchBarParentFingerprint.resultOrThrow().classDef)
|
||||
|
||||
SearchBarFingerprint.resultOrThrow().let {
|
||||
it.mutableMethod.apply {
|
||||
val startIndex = it.scanResult.patternScanResult!!.startIndex
|
||||
val setVisibilityIndex = getTargetIndexWithMethodReferenceName(startIndex, "setVisibility")
|
||||
val setVisibilityInstruction = getInstruction<FiveRegisterInstruction>(setVisibilityIndex)
|
||||
|
||||
replaceInstruction(
|
||||
setVisibilityIndex,
|
||||
"invoke-static {v${setVisibilityInstruction.registerC}, v${setVisibilityInstruction.registerD}}, " +
|
||||
"$GENERAL_CLASS_DESCRIPTOR->hideVoiceSearchButton(Landroid/view/View;I)V"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
SearchResultFingerprint.resultOrThrow().let {
|
||||
it.mutableMethod.apply {
|
||||
val startIndex = getWideLiteralInstructionIndex(VoiceSearch)
|
||||
val setOnClickListenerIndex = getTargetIndexWithMethodReferenceName(startIndex, "setOnClickListener")
|
||||
val viewRegister = getInstruction<FiveRegisterInstruction>(setOnClickListenerIndex).registerC
|
||||
|
||||
addInstruction(
|
||||
setOnClickListenerIndex + 1,
|
||||
"invoke-static {v$viewRegister}, $GENERAL_CLASS_DESCRIPTOR->hideVoiceSearchButton(Landroid/view/View;)V"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add settings
|
||||
*/
|
||||
SettingsPatch.addPreference(
|
||||
arrayOf(
|
||||
"SETTINGS: HIDE_VOICE_SEARCH_BUTTON"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
LithoFilterPatch.addFilter(CUSTOM_FILTER_CLASS_DESCRIPTOR)
|
||||
LithoFilterPatch.addFilter(LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR)
|
||||
|
||||
|
@ -0,0 +1,259 @@
|
||||
package app.revanced.patches.youtube.general.toolbar
|
||||
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.booleanPatchOption
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.shared.voicesearch.VoiceSearchUtils.patchXml
|
||||
import app.revanced.patches.youtube.general.toolbar.fingerprints.CreateSearchSuggestionsFingerprint
|
||||
import app.revanced.patches.youtube.general.toolbar.fingerprints.SearchBarFingerprint
|
||||
import app.revanced.patches.youtube.general.toolbar.fingerprints.SearchBarParentFingerprint
|
||||
import app.revanced.patches.youtube.general.toolbar.fingerprints.SearchResultFingerprint
|
||||
import app.revanced.patches.youtube.general.toolbar.fingerprints.SetActionBarRingoFingerprint
|
||||
import app.revanced.patches.youtube.general.toolbar.fingerprints.SetWordMarkHeaderFingerprint
|
||||
import app.revanced.patches.youtube.general.toolbar.fingerprints.TrendingSearchConfigFingerprint
|
||||
import app.revanced.patches.youtube.general.toolbar.fingerprints.YouActionBarFingerprint
|
||||
import app.revanced.patches.youtube.utils.castbutton.CastButtonPatch
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.COMPATIBLE_PACKAGE
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.VoiceSearch
|
||||
import app.revanced.patches.youtube.utils.settings.SettingsPatch
|
||||
import app.revanced.patches.youtube.utils.settings.SettingsPatch.contexts
|
||||
import app.revanced.patches.youtube.utils.toolbar.ToolBarHookPatch
|
||||
import app.revanced.util.getTargetIndexWithMethodReferenceName
|
||||
import app.revanced.util.getTargetIndexWithReference
|
||||
import app.revanced.util.getTargetIndexWithReferenceReversed
|
||||
import app.revanced.util.getWalkerMethod
|
||||
import app.revanced.util.getWideLiteralInstructionIndex
|
||||
import app.revanced.util.literalInstructionBooleanHook
|
||||
import app.revanced.util.patch.BaseBytecodePatch
|
||||
import app.revanced.util.resultOrThrow
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
|
||||
@Suppress("DEPRECATION", "unused")
|
||||
object ToolBarComponentsPatch : BaseBytecodePatch(
|
||||
name = "Toolbar components",
|
||||
description = "Adds options to hide or change components located on the toolbar such as toolbar buttons, search bar, and header.",
|
||||
dependencies = setOf(
|
||||
CastButtonPatch::class,
|
||||
SettingsPatch::class,
|
||||
SharedResourceIdPatch::class,
|
||||
ToolBarHookPatch::class
|
||||
),
|
||||
compatiblePackages = COMPATIBLE_PACKAGE,
|
||||
fingerprints = setOf(
|
||||
CreateSearchSuggestionsFingerprint,
|
||||
SearchBarParentFingerprint,
|
||||
SearchResultFingerprint,
|
||||
SetActionBarRingoFingerprint,
|
||||
SetWordMarkHeaderFingerprint,
|
||||
TrendingSearchConfigFingerprint
|
||||
)
|
||||
) {
|
||||
private const val FLAG = "android:paddingStart"
|
||||
private const val TARGET_RESOURCE_PATH = "res/layout/action_bar_ringo_background.xml"
|
||||
|
||||
private val ForceHideVoiceSearchButton by booleanPatchOption(
|
||||
key = "ForceHideVoiceSearchButton",
|
||||
default = false,
|
||||
title = "Force hide voice search button",
|
||||
description = "Hide voice search button with legacy method, button will always be hidden"
|
||||
)
|
||||
|
||||
override fun execute(context: BytecodeContext) {
|
||||
|
||||
// region patch for enable wide search bar
|
||||
|
||||
val parentClassDef = SetActionBarRingoFingerprint.resultOrThrow().classDef
|
||||
YouActionBarFingerprint.resolve(context, parentClassDef)
|
||||
|
||||
SetWordMarkHeaderFingerprint.resultOrThrow().let {
|
||||
val walkerMethod = it.getWalkerMethod(context, it.scanResult.patternScanResult!!.startIndex + 1)
|
||||
|
||||
walkerMethod.apply {
|
||||
injectSearchBarHook(
|
||||
implementation!!.instructions.size - 1,
|
||||
"enableWideSearchBar"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
YouActionBarFingerprint.resultOrThrow().let {
|
||||
it.mutableMethod.apply {
|
||||
injectSearchBarHook(
|
||||
it.scanResult.patternScanResult!!.endIndex,
|
||||
"enableWideSearchBarInYouTab"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
contexts.xmlEditor[TARGET_RESOURCE_PATH].use { editor ->
|
||||
val document = editor.file
|
||||
|
||||
with(document.getElementsByTagName("RelativeLayout").item(0)) {
|
||||
if (attributes.getNamedItem(FLAG) != null) return@with
|
||||
|
||||
document.createAttribute(FLAG)
|
||||
.apply { value = "8.0dip" }
|
||||
.let(attributes::setNamedItem)
|
||||
}
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide cast button
|
||||
|
||||
CastButtonPatch.hookToolBarButton(context)
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide create button
|
||||
|
||||
ToolBarHookPatch.hook("$GENERAL_CLASS_DESCRIPTOR->hideCreateButton")
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide notification button
|
||||
|
||||
ToolBarHookPatch.hook("$GENERAL_CLASS_DESCRIPTOR->hideNotificationButton")
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide search term thumbnail
|
||||
|
||||
CreateSearchSuggestionsFingerprint.resultOrThrow().let { result ->
|
||||
result.mutableMethod.apply {
|
||||
val relativeIndex = getWideLiteralInstructionIndex(40)
|
||||
val replaceIndex = getTargetIndexWithReferenceReversed(
|
||||
relativeIndex,
|
||||
"Landroid/widget/ImageView;->setVisibility(I)V"
|
||||
) - 1
|
||||
|
||||
val jumpIndex = getTargetIndexWithReference(
|
||||
relativeIndex,
|
||||
"Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;"
|
||||
) + 4
|
||||
|
||||
val replaceIndexInstruction = getInstruction<TwoRegisterInstruction>(replaceIndex)
|
||||
val replaceIndexReference =
|
||||
getInstruction<ReferenceInstruction>(replaceIndex).reference
|
||||
|
||||
addInstructionsWithLabels(
|
||||
replaceIndex + 1, """
|
||||
invoke-static { }, $GENERAL_CLASS_DESCRIPTOR->hideSearchTermThumbnail()Z
|
||||
move-result v${replaceIndexInstruction.registerA}
|
||||
if-nez v${replaceIndexInstruction.registerA}, :hidden
|
||||
iget-object v${replaceIndexInstruction.registerA}, v${replaceIndexInstruction.registerB}, $replaceIndexReference
|
||||
""", ExternalLabel("hidden", getInstruction(jumpIndex))
|
||||
)
|
||||
removeInstruction(replaceIndex)
|
||||
}
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide trending searches
|
||||
|
||||
TrendingSearchConfigFingerprint.literalInstructionBooleanHook(
|
||||
45399984,
|
||||
"$GENERAL_CLASS_DESCRIPTOR->hideTrendingSearches(Z)Z"
|
||||
)
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide voice search button
|
||||
|
||||
if (ForceHideVoiceSearchButton == true) {
|
||||
contexts.patchXml(
|
||||
arrayOf(
|
||||
"action_bar_search_results_view_mic.xml",
|
||||
"action_bar_search_view.xml",
|
||||
"action_bar_search_view_grey.xml",
|
||||
"action_bar_search_view_mic_out.xml"
|
||||
),
|
||||
arrayOf(
|
||||
"height",
|
||||
"marginEnd",
|
||||
"marginStart",
|
||||
"width"
|
||||
)
|
||||
)
|
||||
} else {
|
||||
SearchBarFingerprint.resolve(context, SearchBarParentFingerprint.resultOrThrow().classDef)
|
||||
|
||||
SearchBarFingerprint.resultOrThrow().let {
|
||||
it.mutableMethod.apply {
|
||||
val startIndex = it.scanResult.patternScanResult!!.startIndex
|
||||
val setVisibilityIndex = getTargetIndexWithMethodReferenceName(startIndex, "setVisibility")
|
||||
val setVisibilityInstruction = getInstruction<FiveRegisterInstruction>(setVisibilityIndex)
|
||||
|
||||
replaceInstruction(
|
||||
setVisibilityIndex,
|
||||
"invoke-static {v${setVisibilityInstruction.registerC}, v${setVisibilityInstruction.registerD}}, " +
|
||||
"$GENERAL_CLASS_DESCRIPTOR->hideVoiceSearchButton(Landroid/view/View;I)V"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
SearchResultFingerprint.resultOrThrow().let {
|
||||
it.mutableMethod.apply {
|
||||
val startIndex = getWideLiteralInstructionIndex(VoiceSearch)
|
||||
val setOnClickListenerIndex = getTargetIndexWithMethodReferenceName(startIndex, "setOnClickListener")
|
||||
val viewRegister = getInstruction<FiveRegisterInstruction>(setOnClickListenerIndex).registerC
|
||||
|
||||
addInstruction(
|
||||
setOnClickListenerIndex + 1,
|
||||
"invoke-static {v$viewRegister}, $GENERAL_CLASS_DESCRIPTOR->hideVoiceSearchButton(Landroid/view/View;)V"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add settings
|
||||
*/
|
||||
SettingsPatch.addPreference(
|
||||
arrayOf(
|
||||
"SETTINGS: HIDE_VOICE_SEARCH_BUTTON"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
/**
|
||||
* Add settings
|
||||
*/
|
||||
SettingsPatch.addPreference(
|
||||
arrayOf(
|
||||
"PREFERENCE_SCREEN: GENERAL",
|
||||
"SETTINGS: TOOLBAR_COMPONENTS"
|
||||
)
|
||||
)
|
||||
|
||||
SettingsPatch.updatePatchStatus(this)
|
||||
}
|
||||
|
||||
private fun MutableMethod.injectSearchBarHook(
|
||||
insertIndex: Int,
|
||||
descriptor: String
|
||||
) {
|
||||
val insertRegister = getInstruction<OneRegisterInstruction>(insertIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
insertIndex, """
|
||||
invoke-static {v$insertRegister}, $GENERAL_CLASS_DESCRIPTOR->$descriptor(Z)Z
|
||||
move-result v$insertRegister
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.general.components.fingerprints
|
||||
package app.revanced.patches.youtube.general.toolbar.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.general.components.fingerprints
|
||||
package app.revanced.patches.youtube.general.toolbar.fingerprints
|
||||
|
||||
import app.revanced.util.fingerprint.MethodReferenceNameFingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.general.components.fingerprints
|
||||
package app.revanced.patches.youtube.general.toolbar.fingerprints
|
||||
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.VoiceSearch
|
||||
import app.revanced.util.fingerprint.LiteralValueFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.general.components.fingerprints
|
||||
package app.revanced.patches.youtube.general.toolbar.fingerprints
|
||||
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.VoiceSearch
|
||||
import app.revanced.util.fingerprint.LiteralValueFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.general.widesearchbar.fingerprints
|
||||
package app.revanced.patches.youtube.general.toolbar.fingerprints
|
||||
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ActionBarRingo
|
||||
import app.revanced.util.fingerprint.LiteralValueFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.general.widesearchbar.fingerprints
|
||||
package app.revanced.patches.youtube.general.toolbar.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.general.components.fingerprints
|
||||
package app.revanced.patches.youtube.general.toolbar.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.util.fingerprint.LiteralValueFingerprint
|
@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.general.widesearchbar.fingerprints
|
||||
package app.revanced.patches.youtube.general.toolbar.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
@ -1,108 +0,0 @@
|
||||
package app.revanced.patches.youtube.general.widesearchbar
|
||||
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.youtube.general.widesearchbar.fingerprints.SetActionBarRingoFingerprint
|
||||
import app.revanced.patches.youtube.general.widesearchbar.fingerprints.SetWordMarkHeaderFingerprint
|
||||
import app.revanced.patches.youtube.general.widesearchbar.fingerprints.YouActionBarFingerprint
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.COMPATIBLE_PACKAGE
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch
|
||||
import app.revanced.patches.youtube.utils.settings.SettingsPatch
|
||||
import app.revanced.patches.youtube.utils.settings.SettingsPatch.contexts
|
||||
import app.revanced.util.getWalkerMethod
|
||||
import app.revanced.util.patch.BaseBytecodePatch
|
||||
import app.revanced.util.resultOrThrow
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Suppress("DEPRECATION", "unused")
|
||||
object WideSearchBarPatch : BaseBytecodePatch(
|
||||
name = "Enable wide search bar",
|
||||
description = "Adds an option to replace the search icon with a wide search bar. This will hide the YouTube logo when active.",
|
||||
dependencies = setOf(
|
||||
SettingsPatch::class,
|
||||
SharedResourceIdPatch::class
|
||||
),
|
||||
compatiblePackages = COMPATIBLE_PACKAGE,
|
||||
fingerprints = setOf(
|
||||
SetActionBarRingoFingerprint,
|
||||
SetWordMarkHeaderFingerprint
|
||||
)
|
||||
) {
|
||||
private const val FLAG = "android:paddingStart"
|
||||
private const val TARGET_RESOURCE_PATH = "res/layout/action_bar_ringo_background.xml"
|
||||
|
||||
override fun execute(context: BytecodeContext) {
|
||||
|
||||
// resolves fingerprints
|
||||
val parentClassDef = SetActionBarRingoFingerprint.resultOrThrow().classDef
|
||||
YouActionBarFingerprint.resolve(context, parentClassDef)
|
||||
|
||||
// patch methods
|
||||
SetWordMarkHeaderFingerprint.resultOrThrow().let {
|
||||
val walkerMethod = it.getWalkerMethod(context, it.scanResult.patternScanResult!!.startIndex + 1)
|
||||
|
||||
walkerMethod.apply {
|
||||
injectSearchBarHook(
|
||||
implementation!!.instructions.size - 1,
|
||||
"enableWideSearchBar"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
YouActionBarFingerprint.resultOrThrow().let {
|
||||
it.mutableMethod.apply {
|
||||
injectSearchBarHook(
|
||||
it.scanResult.patternScanResult!!.endIndex,
|
||||
"enableWideSearchBarInYouTab"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Wide SearchBar Start Margin
|
||||
*/
|
||||
contexts.xmlEditor[TARGET_RESOURCE_PATH].use { editor ->
|
||||
val document = editor.file
|
||||
|
||||
with(document.getElementsByTagName("RelativeLayout").item(0)) {
|
||||
if (attributes.getNamedItem(FLAG) != null) return@with
|
||||
|
||||
document.createAttribute(FLAG)
|
||||
.apply { value = "8.0dip" }
|
||||
.let(attributes::setNamedItem)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add settings
|
||||
*/
|
||||
SettingsPatch.addPreference(
|
||||
arrayOf(
|
||||
"PREFERENCE_SCREEN: GENERAL",
|
||||
"SETTINGS: ENABLE_WIDE_SEARCH_BAR"
|
||||
)
|
||||
)
|
||||
|
||||
SettingsPatch.updatePatchStatus(this)
|
||||
}
|
||||
|
||||
/**
|
||||
* Injects instructions required for certain methods.
|
||||
*/
|
||||
private fun MutableMethod.injectSearchBarHook(
|
||||
insertIndex: Int,
|
||||
descriptor: String
|
||||
) {
|
||||
val insertRegister = getInstruction<OneRegisterInstruction>(insertIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
insertIndex, """
|
||||
invoke-static {v$insertRegister}, $GENERAL_CLASS_DESCRIPTOR->$descriptor(Z)Z
|
||||
move-result v$insertRegister
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
@ -13,6 +13,7 @@ import app.revanced.patches.youtube.player.buttons.fingerprints.MusicAppDeeplink
|
||||
import app.revanced.patches.youtube.player.buttons.fingerprints.PlayerControlsVisibilityModelFingerprint
|
||||
import app.revanced.patches.youtube.player.buttons.fingerprints.TitleAnchorFingerprint
|
||||
import app.revanced.patches.youtube.player.buttons.fingerprints.YouTubeControlsOverlaySubtitleButtonFingerprint
|
||||
import app.revanced.patches.youtube.utils.castbutton.CastButtonPatch
|
||||
import app.revanced.patches.youtube.utils.fingerprints.LayoutConstructorFingerprint
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.COMPATIBLE_PACKAGE
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR
|
||||
@ -36,6 +37,7 @@ object PlayerButtonsPatch : BaseBytecodePatch(
|
||||
name = "Hide player buttons",
|
||||
description = "Adds an option to hide buttons in the video player.",
|
||||
dependencies = setOf(
|
||||
CastButtonPatch::class,
|
||||
SettingsPatch::class,
|
||||
SharedResourceIdPatch::class
|
||||
),
|
||||
@ -111,6 +113,12 @@ object PlayerButtonsPatch : BaseBytecodePatch(
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide cast button
|
||||
|
||||
CastButtonPatch.hookPlayerButton(context)
|
||||
|
||||
// endregion
|
||||
|
||||
// region patch for hide collapse button
|
||||
|
||||
TitleAnchorFingerprint.resultOrThrow().mutableMethod.apply {
|
||||
|
@ -23,8 +23,8 @@ import app.revanced.patches.youtube.utils.fingerprints.LayoutConstructorFingerpr
|
||||
import app.revanced.patches.youtube.utils.fingerprints.YouTubeControlsOverlayFingerprint
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.COMPATIBLE_PACKAGE
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.AutoNavPreviewStub
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.FullScreenEngagementPanel
|
||||
@ -168,7 +168,7 @@ object FullscreenComponentsPatch : BaseBytecodePatch(
|
||||
}
|
||||
}
|
||||
|
||||
context.updatePatchStatus("$UTILS_PATH/PatchStatus;", "QuickActions")
|
||||
context.updatePatchStatus(PATCH_STATUS_CLASS_DESCRIPTOR, "QuickActions")
|
||||
|
||||
// endregion
|
||||
|
||||
|
@ -10,7 +10,7 @@ import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.youtube.player.overlaybuttons.fingerprints.OfflineVideoEndpointFingerprint
|
||||
import app.revanced.patches.youtube.player.overlaybuttons.fingerprints.PiPPlaybackFingerprint
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.INTEGRATIONS_PATH
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.mainactivity.MainActivityResolvePatch
|
||||
import app.revanced.util.resultOrThrow
|
||||
import app.revanced.util.updatePatchStatus
|
||||
@ -52,7 +52,7 @@ object OverlayButtonsBytecodePatch : BytecodePatch(
|
||||
}
|
||||
}
|
||||
|
||||
context.updatePatchStatus("$UTILS_PATH/PatchStatus;", "OverlayButtons")
|
||||
context.updatePatchStatus(PATCH_STATUS_CLASS_DESCRIPTOR, "OverlayButtons")
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,101 @@
|
||||
package app.revanced.patches.youtube.utils.castbutton
|
||||
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
|
||||
import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.youtube.utils.castbutton.fingerprints.MenuItemInitializeFingerprint
|
||||
import app.revanced.patches.youtube.utils.castbutton.fingerprints.MenuItemVisibilityFingerprint
|
||||
import app.revanced.patches.youtube.utils.castbutton.fingerprints.PlayerButtonFingerprint
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch
|
||||
import app.revanced.util.getTargetIndexWithMethodReferenceName
|
||||
import app.revanced.util.resultOrThrow
|
||||
import app.revanced.util.updatePatchStatus
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
|
||||
@Patch(dependencies = [SharedResourceIdPatch::class])
|
||||
object CastButtonPatch : BytecodePatch(
|
||||
setOf(
|
||||
MenuItemInitializeFingerprint,
|
||||
PlayerButtonFingerprint
|
||||
)
|
||||
) {
|
||||
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
||||
"$UTILS_PATH/CastButtonPatch;"
|
||||
|
||||
private lateinit var playerButtonMethod: MutableMethod
|
||||
private lateinit var toolbarMenuItemInitializeMethod: MutableMethod
|
||||
private lateinit var toolbarMenuItemVisibilityMethod: MutableMethod
|
||||
|
||||
override fun execute(context: BytecodeContext) {
|
||||
|
||||
val toolbarMenuItemInitializeResult = MenuItemInitializeFingerprint.resultOrThrow()
|
||||
MenuItemVisibilityFingerprint.resolve(context, toolbarMenuItemInitializeResult.classDef)
|
||||
|
||||
toolbarMenuItemInitializeMethod = toolbarMenuItemInitializeResult.mutableMethod
|
||||
toolbarMenuItemVisibilityMethod = MenuItemVisibilityFingerprint.resultOrThrow().mutableMethod
|
||||
|
||||
playerButtonMethod = PlayerButtonFingerprint.resultOrThrow().mutableMethod
|
||||
|
||||
val buttonClass = context.findClass("MediaRouteButton")
|
||||
?: throw PatchException("MediaRouteButton class not found.")
|
||||
|
||||
buttonClass.mutableClass.methods.find { it.name == "setVisibility" }?.apply {
|
||||
addInstructions(
|
||||
0, """
|
||||
invoke-static {p1}, $INTEGRATIONS_CLASS_DESCRIPTOR->hideCastButton(I)I
|
||||
move-result p1
|
||||
"""
|
||||
)
|
||||
} ?: throw PatchException("setVisibility method not found.")
|
||||
|
||||
}
|
||||
|
||||
internal fun hookPlayerButton(context: BytecodeContext) {
|
||||
playerButtonMethod.apply {
|
||||
val index = getTargetIndexWithMethodReferenceName("setVisibility")
|
||||
val instruction = getInstruction<FiveRegisterInstruction>(index)
|
||||
val viewRegister = instruction.registerC
|
||||
val visibilityRegister = instruction.registerD
|
||||
val reference = getInstruction<ReferenceInstruction>(index).reference
|
||||
|
||||
addInstructions(
|
||||
index + 1, """
|
||||
invoke-static {v$visibilityRegister}, $PLAYER_CLASS_DESCRIPTOR->hideCastButton(I)I
|
||||
move-result v$visibilityRegister
|
||||
invoke-virtual {v$viewRegister, v$visibilityRegister}, $reference
|
||||
"""
|
||||
)
|
||||
removeInstruction(index)
|
||||
}
|
||||
context.updatePatchStatus(PATCH_STATUS_CLASS_DESCRIPTOR, "PlayerButtons")
|
||||
}
|
||||
|
||||
internal fun hookToolBarButton(context: BytecodeContext) {
|
||||
toolbarMenuItemInitializeMethod.apply {
|
||||
val index = getTargetIndexWithMethodReferenceName("setShowAsAction") + 1
|
||||
|
||||
addInstruction(
|
||||
index,
|
||||
"invoke-static {p1}, $GENERAL_CLASS_DESCRIPTOR->hideCastButton(Landroid/view/MenuItem;)V"
|
||||
)
|
||||
}
|
||||
toolbarMenuItemVisibilityMethod.addInstructions(
|
||||
0, """
|
||||
invoke-static {p1}, $GENERAL_CLASS_DESCRIPTOR->hideCastButton(Z)Z
|
||||
move-result p1
|
||||
"""
|
||||
)
|
||||
context.updatePatchStatus(PATCH_STATUS_CLASS_DESCRIPTOR, "ToolBarComponents")
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package app.revanced.patches.youtube.utils.castbutton.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.CastMediaRouteButton
|
||||
import app.revanced.util.fingerprint.LiteralValueFingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal object MenuItemInitializeFingerprint : LiteralValueFingerprint(
|
||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||
parameters = listOf("Landroid/view/MenuItem;"),
|
||||
returnType = "V",
|
||||
literalSupplier = { CastMediaRouteButton }
|
||||
)
|
@ -0,0 +1,12 @@
|
||||
package app.revanced.patches.youtube.utils.castbutton.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.util.fingerprint.MethodReferenceNameFingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal object MenuItemVisibilityFingerprint : MethodReferenceNameFingerprint(
|
||||
returnType = "V",
|
||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||
parameters = listOf("Z"),
|
||||
reference = { "setVisible" }
|
||||
)
|
@ -0,0 +1,12 @@
|
||||
package app.revanced.patches.youtube.utils.castbutton.fingerprints
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.util.fingerprint.LiteralValueFingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal object PlayerButtonFingerprint : LiteralValueFingerprint(
|
||||
accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL,
|
||||
parameters = emptyList(),
|
||||
returnType = "V",
|
||||
literalSupplier = { 11208 }
|
||||
)
|
@ -28,6 +28,8 @@ object Constants {
|
||||
const val PLAYER_CLASS_DESCRIPTOR = "$PLAYER_PATH/PlayerPatch;"
|
||||
const val SHORTS_CLASS_DESCRIPTOR = "$SHORTS_PATH/ShortsPatch;"
|
||||
|
||||
const val PATCH_STATUS_CLASS_DESCRIPTOR = "$UTILS_PATH/PatchStatus;"
|
||||
|
||||
val COMPATIBLE_PACKAGE = setOf(
|
||||
Patch.CompatiblePackage(
|
||||
"com.google.android.youtube",
|
||||
|
@ -30,6 +30,7 @@ object SharedResourceIdPatch : ResourcePatch() {
|
||||
var BarContainerHeight = -1L
|
||||
var BottomSheetFooterText = -1L
|
||||
var BottomUiContainerStub = -1L
|
||||
var CastMediaRouteButton = -1L
|
||||
var ChannelListSubMenu = -1L
|
||||
var CompactLink = -1L
|
||||
var CompactListItem = -1L
|
||||
@ -103,6 +104,7 @@ object SharedResourceIdPatch : ResourcePatch() {
|
||||
BarContainerHeight = getId(DIMEN, "bar_container_height")
|
||||
BottomSheetFooterText = getId(ID, "bottom_sheet_footer_text")
|
||||
BottomUiContainerStub = getId(ID, "bottom_ui_container_stub")
|
||||
CastMediaRouteButton = getId(LAYOUT, "castmediaroutebutton")
|
||||
ChannelListSubMenu = getId(LAYOUT, "channel_list_sub_menu")
|
||||
CompactLink = getId(LAYOUT, "compact_link")
|
||||
CompactListItem = getId(LAYOUT, "compact_list_item")
|
||||
|
@ -23,6 +23,11 @@ object ToolBarHookPatch : BytecodePatch(
|
||||
ToolBarPatchFingerprint
|
||||
)
|
||||
) {
|
||||
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
||||
"$UTILS_PATH/ToolBarPatch;"
|
||||
|
||||
private lateinit var toolbarMethod: MutableMethod
|
||||
|
||||
override fun execute(context: BytecodeContext) {
|
||||
|
||||
ToolBarButtonFingerprint.resultOrThrow().let {
|
||||
@ -51,18 +56,13 @@ object ToolBarHookPatch : BytecodePatch(
|
||||
}
|
||||
}
|
||||
|
||||
insertMethod = ToolBarPatchFingerprint.resultOrThrow().mutableMethod
|
||||
toolbarMethod = ToolBarPatchFingerprint.resultOrThrow().mutableMethod
|
||||
}
|
||||
|
||||
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
||||
"$UTILS_PATH/ToolBarPatch;"
|
||||
|
||||
private lateinit var insertMethod: MutableMethod
|
||||
|
||||
internal fun injectCall(
|
||||
internal fun hook(
|
||||
descriptor: String
|
||||
) {
|
||||
insertMethod.addInstructions(
|
||||
toolbarMethod.addInstructions(
|
||||
0,
|
||||
"invoke-static {p0, p1}, $descriptor(Ljava/lang/String;Landroid/view/View;)V"
|
||||
)
|
||||
|
@ -14,7 +14,7 @@ import app.revanced.patches.youtube.utils.fix.shortsplayback.ShortsPlaybackPatch
|
||||
import app.revanced.patches.youtube.utils.flyoutpanel.PlaybackSpeedFlyoutPanelHookPatch
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.COMPATIBLE_PACKAGE
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR
|
||||
import app.revanced.patches.youtube.utils.integrations.Constants.VIDEO_PATH
|
||||
import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch
|
||||
import app.revanced.patches.youtube.utils.recyclerview.BottomSheetRecyclerViewPatch
|
||||
@ -165,7 +165,7 @@ object VideoPlaybackPatch : BaseBytecodePatch(
|
||||
|
||||
VideoInformationPatch.cpnHook("$INTEGRATIONS_PLAYBACK_SPEED_CLASS_DESCRIPTOR->newVideoStarted(Ljava/lang/String;Z)V")
|
||||
|
||||
context.updatePatchStatus("$UTILS_PATH/PatchStatus;", "RememberPlaybackSpeed")
|
||||
context.updatePatchStatus(PATCH_STATUS_CLASS_DESCRIPTOR, "RememberPlaybackSpeed")
|
||||
|
||||
// endregion
|
||||
|
||||
|
@ -274,38 +274,15 @@ Limitations:
|
||||
<string name="revanced_enable_tablet_mini_player_title">Enable tablet mini player</string>
|
||||
<string name="revanced_enable_tablet_mini_player_summary_on">Tablet mini player is enabled.</string>
|
||||
<string name="revanced_enable_tablet_mini_player_summary_off">Tablet mini player is disabled.</string>
|
||||
<string name="revanced_enable_wide_search_bar_title">Enable wide search bar</string>
|
||||
<string name="revanced_enable_wide_search_bar_summary_on">Wide search bar is enabled.</string>
|
||||
<string name="revanced_enable_wide_search_bar_summary_off">Wide search bar is disabled.</string>
|
||||
<string name="revanced_enable_wide_search_bar_in_you_tab_title">Enable wide search bar in You tab</string>
|
||||
<string name="revanced_enable_wide_search_bar_in_you_tab_summary">"Enabling this setting will disable the settings button in the You tab.
|
||||
|
||||
In this case, please use the following path:
|
||||
You tab > View channel > Menu > Settings."</string>
|
||||
<string name="revanced_hide_cast_button_title">Hide cast button</string>
|
||||
<string name="revanced_hide_cast_button_summary_on">Cast button is hidden.</string>
|
||||
<string name="revanced_hide_cast_button_summary_off">Cast button is shown.</string>
|
||||
<string name="revanced_hide_floating_microphone_title">Hide floating microphone button</string>
|
||||
<string name="revanced_hide_floating_microphone_summary_on">Floating microphone button is hidden.</string>
|
||||
<string name="revanced_hide_floating_microphone_summary_off">Floating microphone button is shown.</string>
|
||||
<string name="revanced_hide_gray_separator_title">Hide gray separator</string>
|
||||
<string name="revanced_hide_gray_separator_summary_on">Gray separators are hidden.</string>
|
||||
<string name="revanced_hide_gray_separator_summary_off">Gray separators are shown.</string>
|
||||
<string name="revanced_hide_search_term_thumbnail_title">Hide search term thumbnail</string>
|
||||
<string name="revanced_hide_search_term_thumbnail_summary_on">Thumbnails in the search term history are hidden.</string>
|
||||
<string name="revanced_hide_search_term_thumbnail_summary_off">Thumbnails in the search term history are shown.</string>
|
||||
<string name="revanced_hide_snack_bar_title">Hide snack bar</string>
|
||||
<string name="revanced_hide_snack_bar_summary_on">Snack bar is hidden.</string>
|
||||
<string name="revanced_hide_snack_bar_summary_off">Snack bar is shown.</string>
|
||||
<string name="revanced_hide_toolbar_create_notification_button_title">Hide buttons in toolbar</string>
|
||||
<string name="revanced_hide_toolbar_create_notification_button_summary_on">Create and Notification buttons are hidden.</string>
|
||||
<string name="revanced_hide_toolbar_create_notification_button_summary_off">Create and Notification buttons are shown.</string>
|
||||
<string name="revanced_hide_trending_searches_title">Hide trending searches</string>
|
||||
<string name="revanced_hide_trending_searches_summary_on">Trending searches are hidden.</string>
|
||||
<string name="revanced_hide_trending_searches_summary_off">Trending searches are shown.</string>
|
||||
<string name="revanced_hide_voice_search_button_title">Hide voice search button</string>
|
||||
<string name="revanced_hide_voice_search_button_summary_on">Voice search button is hidden in search bar.</string>
|
||||
<string name="revanced_hide_voice_search_button_summary_off">Voice search button is shown in search bar.</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Remove viewer discretion dialog</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary">"Remove viewer discretion dialog.
|
||||
This does not bypass the age restriction. It just accepts it automatically."</string>
|
||||
@ -361,27 +338,27 @@ Some components may not be hidden."</string>
|
||||
<string name="revanced_enable_narrow_navigation_buttons_title">Enable narrow navigation buttons</string>
|
||||
<string name="revanced_enable_narrow_navigation_buttons_summary_on">Spacing between navigation buttons becomes narrower.</string>
|
||||
<string name="revanced_enable_narrow_navigation_buttons_summary_off">Spacing between navigation buttons does not become narrower.</string>
|
||||
<string name="revanced_hide_create_button_title">Hide create button</string>
|
||||
<string name="revanced_hide_create_button_summary_on">Create button is hidden.</string>
|
||||
<string name="revanced_hide_create_button_summary_off">Create button is shown.</string>
|
||||
<string name="revanced_hide_home_button_title">Hide home button</string>
|
||||
<string name="revanced_hide_home_button_summary_off">Home button is shown.</string>
|
||||
<string name="revanced_hide_home_button_summary_on">Home button is hidden.</string>
|
||||
<string name="revanced_hide_library_button_title">Hide library button</string>
|
||||
<string name="revanced_hide_library_button_summary_on">Library button is hidden.</string>
|
||||
<string name="revanced_hide_library_button_summary_off">Library button is shown.</string>
|
||||
<string name="revanced_hide_navigation_create_button_title">Hide create button</string>
|
||||
<string name="revanced_hide_navigation_create_button_summary_on">Create button is hidden.</string>
|
||||
<string name="revanced_hide_navigation_create_button_summary_off">Create button is shown.</string>
|
||||
<string name="revanced_hide_navigation_home_button_title">Hide home button</string>
|
||||
<string name="revanced_hide_navigation_home_button_summary_off">Home button is shown.</string>
|
||||
<string name="revanced_hide_navigation_home_button_summary_on">Home button is hidden.</string>
|
||||
<string name="revanced_hide_navigation_library_button_title">Hide library button</string>
|
||||
<string name="revanced_hide_navigation_library_button_summary_on">Library button is hidden.</string>
|
||||
<string name="revanced_hide_navigation_library_button_summary_off">Library button is shown.</string>
|
||||
<string name="revanced_hide_navigation_notifications_button_title">Hide notifications button</string>
|
||||
<string name="revanced_hide_navigation_notifications_button_summary_on">Notifications button is hidden.</string>
|
||||
<string name="revanced_hide_navigation_notifications_button_summary_off">Notifications button is shown.</string>
|
||||
<string name="revanced_hide_navigation_shorts_button_title">Hide shorts button</string>
|
||||
<string name="revanced_hide_navigation_shorts_button_summary_on">Shorts button is hidden.</string>
|
||||
<string name="revanced_hide_navigation_shorts_button_summary_off">Shorts button is shown.</string>
|
||||
<string name="revanced_hide_navigation_subscriptions_button_title">Hide subscriptions button</string>
|
||||
<string name="revanced_hide_navigation_subscriptions_button_summary_on">Subscriptions button is hidden.</string>
|
||||
<string name="revanced_hide_navigation_subscriptions_button_summary_off">Subscriptions button is shown.</string>
|
||||
<string name="revanced_hide_navigation_label_title">Hide navigation label</string>
|
||||
<string name="revanced_hide_navigation_label_summary_on">Navigation label is hidden.</string>
|
||||
<string name="revanced_hide_navigation_label_summary_off">Navigation label is shown.</string>
|
||||
<string name="revanced_hide_notifications_button_title">Hide notifications button</string>
|
||||
<string name="revanced_hide_notifications_button_summary_on">Notifications button is hidden.</string>
|
||||
<string name="revanced_hide_notifications_button_summary_off">Notifications button is shown.</string>
|
||||
<string name="revanced_hide_shorts_button_title">Hide shorts button</string>
|
||||
<string name="revanced_hide_shorts_button_summary_on">Shorts button is hidden.</string>
|
||||
<string name="revanced_hide_shorts_button_summary_off">Shorts button is shown.</string>
|
||||
<string name="revanced_hide_subscriptions_button_title">Hide subscriptions button</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Subscriptions button is hidden.</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Subscriptions button is shown.</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Switch create with notifications</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary">"Switch the positions of the create button and notification button by spoofing device information.
|
||||
|
||||
@ -389,6 +366,38 @@ Some components may not be hidden."</string>
|
||||
• Disabling this setting loads more ads from the server side.
|
||||
• You should disable this setting to make video ads visible."</string>
|
||||
|
||||
<!-- PreferenceScreen: General, PreferenceCategory: General, PreferenceScreen: Toolbar -->
|
||||
<string name="revanced_preference_screen_toolbar_title">Toolbar</string>
|
||||
<string name="revanced_preference_screen_toolbar_summary">Hide or change components located on the toolbar such as toolbar buttons, search bar, header.</string>
|
||||
|
||||
<string name="revanced_enable_wide_search_bar_title">Enable wide search bar</string>
|
||||
<string name="revanced_enable_wide_search_bar_summary_on">Wide search bar is enabled.</string>
|
||||
<string name="revanced_enable_wide_search_bar_summary_off">Wide search bar is disabled.</string>
|
||||
<string name="revanced_enable_wide_search_bar_in_you_tab_title">Enable wide search bar in You tab</string>
|
||||
<string name="revanced_enable_wide_search_bar_in_you_tab_summary">"Enabling this setting will disable the settings button in the You tab.
|
||||
|
||||
In this case, please use the following path:
|
||||
You tab > View channel > Menu > Settings."</string>
|
||||
<string name="revanced_hide_toolbar_cast_button_title">Hide cast button</string>
|
||||
<string name="revanced_hide_toolbar_cast_button_summary_on">Cast button is hidden.</string>
|
||||
<string name="revanced_hide_toolbar_cast_button_summary_off">Cast button is shown.</string>
|
||||
<string name="revanced_hide_toolbar_create_button_title">Hide create button</string>
|
||||
<string name="revanced_hide_toolbar_create_button_summary_on">Create button is hidden.</string>
|
||||
<string name="revanced_hide_toolbar_create_button_summary_off">Create button is shown.</string>
|
||||
<string name="revanced_hide_toolbar_notification_button_title">Hide notification button</string>
|
||||
<string name="revanced_hide_toolbar_notification_button_summary_on">Notification button is hidden.</string>
|
||||
<string name="revanced_hide_toolbar_notification_button_summary_off">Notification button is shown.</string>
|
||||
<string name="revanced_hide_search_term_thumbnail_title">Hide search term thumbnail</string>
|
||||
<string name="revanced_hide_search_term_thumbnail_summary_on">Thumbnails in the search term history are hidden.</string>
|
||||
<string name="revanced_hide_search_term_thumbnail_summary_off">Thumbnails in the search term history are shown.</string>
|
||||
<string name="revanced_hide_trending_searches_title">Hide trending searches</string>
|
||||
<string name="revanced_hide_trending_searches_summary_on">Trending searches are hidden.</string>
|
||||
<string name="revanced_hide_trending_searches_summary_off">Trending searches are shown.</string>
|
||||
<string name="revanced_hide_voice_search_button_title">Hide voice search button</string>
|
||||
<string name="revanced_hide_voice_search_button_summary_on">Voice search button is hidden in search bar.</string>
|
||||
<string name="revanced_hide_voice_search_button_summary_off">Voice search button is shown in search bar.</string>
|
||||
|
||||
|
||||
<!-- PreferenceScreen: Player -->
|
||||
<string name="revanced_preference_screen_player_title">Player</string>
|
||||
|
||||
@ -690,24 +699,27 @@ Limitation: Video title disappears when clicked."</string>
|
||||
<string name="revanced_preference_screen_player_buttons_title">Player buttons</string>
|
||||
<string name="revanced_preference_screen_player_buttons_summary">Hide or show buttons in videos.</string>
|
||||
|
||||
<string name="revanced_hide_autoplay_button_title">Hide autoplay button</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_on">Autoplay button is hidden.</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_off">Autoplay button is shown.</string>
|
||||
<string name="revanced_hide_captions_button_title">Hide captions button</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">Captions button is hidden.</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">Captions button is shown.</string>
|
||||
<string name="revanced_hide_collapse_button_title">Hide collapse button</string>
|
||||
<string name="revanced_hide_collapse_button_summary_on">Collapse button is hidden.</string>
|
||||
<string name="revanced_hide_collapse_button_summary_off">Collapse button is shown.</string>
|
||||
<string name="revanced_hide_fullscreen_button_title">Hide fullscreen button</string>
|
||||
<string name="revanced_hide_fullscreen_button_summary_on">Fullscreen button is hidden.</string>
|
||||
<string name="revanced_hide_fullscreen_button_summary_off">Fullscreen button is shown.</string>
|
||||
<string name="revanced_hide_previous_next_button_title">Hide previous & next button</string>
|
||||
<string name="revanced_hide_previous_next_button_summary_on">Buttons are hidden.</string>
|
||||
<string name="revanced_hide_previous_next_button_summary_off">Buttons are shown.</string>
|
||||
<string name="revanced_hide_youtube_music_button_title">Hide YouTube Music button</string>
|
||||
<string name="revanced_hide_youtube_music_button_summary_on">YouTube Music button is hidden.</string>
|
||||
<string name="revanced_hide_youtube_music_button_summary_off">YouTube Music button is shown.</string>
|
||||
<string name="revanced_hide_player_autoplay_button_title">Hide autoplay button</string>
|
||||
<string name="revanced_hide_player_autoplay_button_summary_on">Autoplay button is hidden.</string>
|
||||
<string name="revanced_hide_player_autoplay_button_summary_off">Autoplay button is shown.</string>
|
||||
<string name="revanced_hide_player_captions_button_title">Hide captions button</string>
|
||||
<string name="revanced_hide_player_captions_button_summary_on">Captions button is hidden.</string>
|
||||
<string name="revanced_hide_player_captions_button_summary_off">Captions button is shown.</string>
|
||||
<string name="revanced_hide_player_cast_button_title">Hide cast button</string>
|
||||
<string name="revanced_hide_player_cast_button_summary_on">Cast button is hidden.</string>
|
||||
<string name="revanced_hide_player_cast_button_summary_off">Cast button is shown.</string>
|
||||
<string name="revanced_hide_player_collapse_button_title">Hide collapse button</string>
|
||||
<string name="revanced_hide_player_collapse_button_summary_on">Collapse button is hidden.</string>
|
||||
<string name="revanced_hide_player_collapse_button_summary_off">Collapse button is shown.</string>
|
||||
<string name="revanced_hide_player_fullscreen_button_title">Hide fullscreen button</string>
|
||||
<string name="revanced_hide_player_fullscreen_button_summary_on">Fullscreen button is hidden.</string>
|
||||
<string name="revanced_hide_player_fullscreen_button_summary_off">Fullscreen button is shown.</string>
|
||||
<string name="revanced_hide_player_previous_next_button_title">Hide previous & next button</string>
|
||||
<string name="revanced_hide_player_previous_next_button_summary_on">Buttons are hidden.</string>
|
||||
<string name="revanced_hide_player_previous_next_button_summary_off">Buttons are shown.</string>
|
||||
<string name="revanced_hide_player_youtube_music_button_title">Hide YouTube Music button</string>
|
||||
<string name="revanced_hide_player_youtube_music_button_summary_on">YouTube Music button is hidden.</string>
|
||||
<string name="revanced_hide_player_youtube_music_button_summary_off">YouTube Music button is shown.</string>
|
||||
|
||||
<!-- PreferenceScreen: Player, PreferenceCategory: Player, PreferenceScreen: Player buttons, PreferenceCategory: Overlay buttons -->
|
||||
<string name="revanced_preference_category_overlay_buttons">Overlay buttons</string>
|
||||
|
@ -116,16 +116,31 @@
|
||||
<!-- SETTINGS: HIDE_NAVIGATION_COMPONENTS
|
||||
<PreferenceScreen android:title="@string/revanced_preference_screen_navigation_buttons_title" android:key="revanced_preference_screen_navigation_buttons" android:summary="@string/revanced_preference_screen_navigation_buttons_summary">
|
||||
<SwitchPreference android:title="@string/revanced_enable_narrow_navigation_buttons_title" android:key="revanced_enable_narrow_navigation_buttons" android:defaultValue="false" android:summaryOn="@string/revanced_enable_narrow_navigation_buttons_summary_on" android:summaryOff="@string/revanced_enable_narrow_navigation_buttons_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_create_button_title" android:key="revanced_hide_create_button" android:defaultValue="true" android:summaryOn="@string/revanced_hide_create_button_summary_on" android:summaryOff="@string/revanced_hide_create_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_home_button_title" android:key="revanced_hide_home_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_home_button_summary_on" android:summaryOff="@string/revanced_hide_home_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_library_button_title" android:key="revanced_hide_library_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_library_button_summary_on" android:summaryOff="@string/revanced_hide_library_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_navigation_create_button_title" android:key="revanced_hide_navigation_create_button" android:defaultValue="true" android:summaryOn="@string/revanced_hide_navigation_create_button_summary_on" android:summaryOff="@string/revanced_hide_navigation_create_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_navigation_home_button_title" android:key="revanced_hide_navigation_home_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_navigation_home_button_summary_on" android:summaryOff="@string/revanced_hide_navigation_home_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_navigation_library_button_title" android:key="revanced_hide_navigation_library_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_navigation_library_button_summary_on" android:summaryOff="@string/revanced_hide_navigation_library_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_navigation_notifications_button_title" android:key="revanced_hide_navigation_notifications_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_navigation_notifications_button_summary_on" android:summaryOff="@string/revanced_hide_navigation_notifications_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_navigation_shorts_button_title" android:key="revanced_hide_navigation_shorts_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_navigation_shorts_button_summary_on" android:summaryOff="@string/revanced_hide_navigation_shorts_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_navigation_subscriptions_button_title" android:key="revanced_hide_navigation_subscriptions_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_navigation_subscriptions_button_summary_on" android:summaryOff="@string/revanced_hide_navigation_subscriptions_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_navigation_label_title" android:key="revanced_hide_navigation_label" android:defaultValue="false" android:summaryOn="@string/revanced_hide_navigation_label_summary_on" android:summaryOff="@string/revanced_hide_navigation_label_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_notifications_button_title" android:key="revanced_hide_notifications_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_notifications_button_summary_on" android:summaryOff="@string/revanced_hide_notifications_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_shorts_button_title" android:key="revanced_hide_shorts_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_shorts_button_summary_on" android:summaryOff="@string/revanced_hide_shorts_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_subscriptions_button_title" android:key="revanced_hide_subscriptions_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_subscriptions_button_summary_on" android:summaryOff="@string/revanced_hide_subscriptions_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_switch_create_with_notifications_button_title" android:key="revanced_switch_create_with_notifications_button" android:defaultValue="true" android:summary="@string/revanced_switch_create_with_notifications_button_summary" />
|
||||
</PreferenceScreen>SETTINGS: HIDE_NAVIGATION_COMPONENTS -->
|
||||
|
||||
<!-- SETTINGS: TOOLBAR_COMPONENTS
|
||||
<PreferenceScreen android:title="@string/revanced_preference_screen_toolbar_title" android:key="revanced_preference_screen_toolbar" android:summary="@string/revanced_preference_screen_toolbar_summary">
|
||||
<SwitchPreference android:title="@string/revanced_enable_wide_search_bar_title" android:key="revanced_enable_wide_search_bar" android:defaultValue="false" android:summaryOn="@string/revanced_enable_wide_search_bar_summary_on" android:summaryOff="@string/revanced_enable_wide_search_bar_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_enable_wide_search_bar_in_you_tab_title" android:key="revanced_enable_wide_search_bar_in_you_tab" android:defaultValue="false" android:summary="@string/revanced_enable_wide_search_bar_in_you_tab_summary" android:dependency="revanced_enable_wide_search_bar" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_toolbar_cast_button_title" android:key="revanced_hide_toolbar_cast_button" android:defaultValue="true" android:summaryOn="@string/revanced_hide_toolbar_cast_button_summary_on" android:summaryOff="@string/revanced_hide_toolbar_cast_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_toolbar_create_button_title" android:key="revanced_hide_toolbar_create_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_toolbar_create_button_summary_on" android:summaryOff="@string/revanced_hide_toolbar_create_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_toolbar_notification_button_title" android:key="revanced_hide_toolbar_notification_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_toolbar_notification_button_summary_on" android:summaryOff="@string/revanced_hide_toolbar_notification_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_search_term_thumbnail_title" android:key="revanced_hide_search_term_thumbnail" android:defaultValue="false" android:summaryOn="@string/revanced_hide_search_term_thumbnail_summary_on" android:summaryOff="@string/revanced_hide_search_term_thumbnail_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_trending_searches_title" android:key="revanced_hide_trending_searches" android:defaultValue="true" android:summaryOn="@string/revanced_hide_trending_searches_summary_on" android:summaryOff="@string/revanced_hide_trending_searches_summary_off" />SETTINGS: TOOLBAR_COMPONENTS -->
|
||||
<!-- SETTINGS: HIDE_VOICE_SEARCH_BUTTON
|
||||
<SwitchPreference android:title="@string/revanced_hide_voice_search_button_title" android:key="revanced_hide_voice_search_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_voice_search_button_summary_on" android:summaryOff="@string/revanced_hide_voice_search_button_summary_off" />SETTINGS: HIDE_VOICE_SEARCH_BUTTON -->
|
||||
|
||||
<!-- SETTINGS: TOOLBAR_COMPONENTS
|
||||
</PreferenceScreen>SETTINGS: TOOLBAR_COMPONENTS -->
|
||||
|
||||
<!-- SETTINGS: CHANGE_START_PAGE
|
||||
<ListPreference android:entries="@array/revanced_change_start_page_entries" android:title="@string/revanced_change_start_page_title" android:key="revanced_change_start_page" android:defaultValue="" android:entryValues="@array/revanced_change_start_page_entry_values" />SETTINGS: CHANGE_START_PAGE -->
|
||||
|
||||
@ -144,21 +159,10 @@
|
||||
<!-- SETTINGS: ENABLE_TABLET_MINI_PLAYER
|
||||
<SwitchPreference android:title="@string/revanced_enable_tablet_mini_player_title" android:key="revanced_enable_tablet_mini_player" android:defaultValue="false" android:summaryOn="@string/revanced_enable_tablet_mini_player_summary_on" android:summaryOff="@string/revanced_enable_tablet_mini_player_summary_off" />SETTINGS: ENABLE_TABLET_MINI_PLAYER -->
|
||||
|
||||
<!-- SETTINGS: ENABLE_WIDE_SEARCH_BAR
|
||||
<SwitchPreference android:title="@string/revanced_enable_wide_search_bar_title" android:key="revanced_enable_wide_search_bar" android:defaultValue="false" android:summaryOn="@string/revanced_enable_wide_search_bar_summary_on" android:summaryOff="@string/revanced_enable_wide_search_bar_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_enable_wide_search_bar_in_you_tab_title" android:key="revanced_enable_wide_search_bar_in_you_tab" android:defaultValue="false" android:summary="@string/revanced_enable_wide_search_bar_in_you_tab_summary" android:dependency="revanced_enable_wide_search_bar" />SETTINGS: ENABLE_WIDE_SEARCH_BAR -->
|
||||
|
||||
<!-- SETTINGS: HIDE_LAYOUT_COMPONENTS
|
||||
<SwitchPreference android:title="@string/revanced_hide_cast_button_title" android:key="revanced_hide_cast_button" android:defaultValue="true" android:summaryOn="@string/revanced_hide_cast_button_summary_on" android:summaryOff="@string/revanced_hide_cast_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_floating_microphone_title" android:key="revanced_hide_floating_microphone" android:defaultValue="true" android:summaryOn="@string/revanced_hide_floating_microphone_summary_on" android:summaryOff="@string/revanced_hide_floating_microphone_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_gray_separator_title" android:key="revanced_hide_gray_separator" android:defaultValue="true" android:summaryOn="@string/revanced_hide_gray_separator_summary_on" android:summaryOff="@string/revanced_hide_gray_separator_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_search_term_thumbnail_title" android:key="revanced_hide_search_term_thumbnail" android:defaultValue="false" android:summaryOn="@string/revanced_hide_search_term_thumbnail_summary_on" android:summaryOff="@string/revanced_hide_search_term_thumbnail_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_snack_bar_title" android:key="revanced_hide_snack_bar" android:defaultValue="false" android:summaryOn="@string/revanced_hide_snack_bar_summary_on" android:summaryOff="@string/revanced_hide_snack_bar_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_toolbar_create_notification_button_title" android:key="revanced_hide_toolbar_create_notification_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_toolbar_create_notification_button_summary_on" android:summaryOff="@string/revanced_hide_toolbar_create_notification_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_trending_searches_title" android:key="revanced_hide_trending_searches" android:defaultValue="true" android:summaryOn="@string/revanced_hide_trending_searches_summary_on" android:summaryOff="@string/revanced_hide_trending_searches_summary_off" />SETTINGS: HIDE_LAYOUT_COMPONENTS -->
|
||||
|
||||
<!-- SETTINGS: HIDE_VOICE_SEARCH_BUTTON
|
||||
<SwitchPreference android:title="@string/revanced_hide_voice_search_button_title" android:key="revanced_hide_voice_search_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_voice_search_button_summary_on" android:summaryOff="@string/revanced_hide_voice_search_button_summary_off" />SETTINGS: HIDE_VOICE_SEARCH_BUTTON -->
|
||||
<SwitchPreference android:title="@string/revanced_hide_snack_bar_title" android:key="revanced_hide_snack_bar" android:defaultValue="false" android:summaryOn="@string/revanced_hide_snack_bar_summary_on" android:summaryOff="@string/revanced_hide_snack_bar_summary_off" />SETTINGS: HIDE_LAYOUT_COMPONENTS -->
|
||||
|
||||
<!-- SETTINGS: REMOVE_VIEWER_DISCRETION_DIALOG
|
||||
<SwitchPreference android:title="@string/revanced_remove_viewer_discretion_dialog_title" android:key="revanced_remove_viewer_discretion_dialog" android:defaultValue="false" android:summary="@string/revanced_remove_viewer_discretion_dialog_summary" />SETTINGS: REMOVE_VIEWER_DISCRETION_DIALOG -->
|
||||
@ -301,12 +305,13 @@
|
||||
<PreferenceScreen android:title="@string/revanced_preference_screen_player_buttons_title" android:key="revanced_preference_screen_player_buttons" android:summary="@string/revanced_preference_screen_player_buttons_summary">PREFERENCE_SCREENS: PLAYER_BUTTONS -->
|
||||
|
||||
<!-- SETTINGS: HIDE_PLAYER_BUTTONS
|
||||
<SwitchPreference android:title="@string/revanced_hide_autoplay_button_title" android:key="revanced_hide_autoplay_button" android:defaultValue="true" android:summaryOn="@string/revanced_hide_autoplay_button_summary_on" android:summaryOff="@string/revanced_hide_autoplay_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_captions_button_title" android:key="revanced_hide_captions_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_captions_button_summary_on" android:summaryOff="@string/revanced_hide_captions_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_collapse_button_title" android:key="revanced_hide_collapse_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_collapse_button_summary_on" android:summaryOff="@string/revanced_hide_collapse_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_fullscreen_button_title" android:key="revanced_hide_fullscreen_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_fullscreen_button_summary_on" android:summaryOff="@string/revanced_hide_fullscreen_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_previous_next_button_title" android:key="revanced_hide_previous_next_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_previous_next_button_summary_on" android:summaryOff="@string/revanced_hide_previous_next_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_youtube_music_button_title" android:key="revanced_hide_youtube_music_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_youtube_music_button_summary_on" android:summaryOff="@string/revanced_hide_youtube_music_button_summary_off" />SETTINGS: HIDE_PLAYER_BUTTONS -->
|
||||
<SwitchPreference android:title="@string/revanced_hide_player_autoplay_button_title" android:key="revanced_hide_player_autoplay_button" android:defaultValue="true" android:summaryOn="@string/revanced_hide_player_autoplay_button_summary_on" android:summaryOff="@string/revanced_hide_player_autoplay_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_player_captions_button_title" android:key="revanced_hide_player_captions_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_player_captions_button_summary_on" android:summaryOff="@string/revanced_hide_player_captions_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_player_cast_button_title" android:key="revanced_hide_player_cast_button" android:defaultValue="true" android:summaryOn="@string/revanced_hide_player_cast_button_summary_on" android:summaryOff="@string/revanced_hide_player_cast_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_player_collapse_button_title" android:key="revanced_hide_player_collapse_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_player_collapse_button_summary_on" android:summaryOff="@string/revanced_hide_player_collapse_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_player_fullscreen_button_title" android:key="revanced_hide_player_fullscreen_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_player_fullscreen_button_summary_on" android:summaryOff="@string/revanced_hide_player_fullscreen_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_player_previous_next_button_title" android:key="revanced_hide_player_previous_next_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_player_previous_next_button_summary_on" android:summaryOff="@string/revanced_hide_player_previous_next_button_summary_off" />
|
||||
<SwitchPreference android:title="@string/revanced_hide_player_youtube_music_button_title" android:key="revanced_hide_player_youtube_music_button" android:defaultValue="false" android:summaryOn="@string/revanced_hide_player_youtube_music_button_summary_on" android:summaryOff="@string/revanced_hide_player_youtube_music_button_summary_off" />SETTINGS: HIDE_PLAYER_BUTTONS -->
|
||||
|
||||
<!-- SETTINGS: OVERLAY_BUTTONS
|
||||
<PreferenceCategory android:title="@string/revanced_preference_category_overlay_buttons" android:layout="@layout/revanced_settings_preferences_category">
|
||||
@ -549,12 +554,12 @@
|
||||
<Preference android:title="Disable splash animation" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
<Preference android:title="Enable gradient loading screen" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
<Preference android:title="Enable tablet mini player" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
<Preference android:title="Enable wide search bar" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
<Preference android:title="Hide layout components" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
<Preference android:title="Hide navigation bar components" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
<Preference android:title="Layout switch" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
<Preference android:title="Remove viewer discretion dialog" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
<Preference android:title="Spoof app version" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
<Preference android:title="Toolbar components" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="@string/revanced_preference_screen_player_title" android:layout="@layout/revanced_settings_preferences_category">
|
||||
|
Loading…
x
Reference in New Issue
Block a user