feat(YouTube): add Player Flyout Menu patch (#2295)

Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
This commit is contained in:
johnconner122 2023-07-30 14:51:50 +05:00 committed by GitHub
parent 74fd7b6265
commit aea0af0597
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 110 additions and 65 deletions

View File

@ -1,8 +1,8 @@
package app.revanced.patches.youtube.layout.hide.watchinvr.annotations
package app.revanced.patches.youtube.layout.hide.player.flyoutmenupanel.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))])
@Target(AnnotationTarget.CLASS)
internal annotation class WatchInVRCompatibility
internal annotation class HidePlayerFlyoutMenuItemsCompatibility

View File

@ -0,0 +1,108 @@
package app.revanced.patches.youtube.layout.hide.player.flyoutmenupanel.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.ResourceContext
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.ResourcePatch
import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.shared.settings.preference.impl.PreferenceScreen
import app.revanced.patches.shared.settings.preference.impl.StringResource
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
import app.revanced.patches.youtube.layout.hide.player.flyoutmenupanel.annotations.HidePlayerFlyoutMenuItemsCompatibility
import app.revanced.patches.youtube.misc.litho.filter.patch.LithoFilterPatch
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
@Patch
@Name("Player flyout menu")
@Description("Hides player flyout menu items.")
@DependsOn([LithoFilterPatch::class, SettingsPatch::class])
@HidePlayerFlyoutMenuItemsCompatibility
@Version("0.0.1")
class HidePlayerFlyoutMenuPatch : ResourcePatch {
override fun execute(context: ResourceContext): PatchResult {
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
PreferenceScreen(
KEY,
StringResource("${KEY}_title", "Player flyout menu items"),
listOf(
SwitchPreference(
"${KEY}_quality",
StringResource("${KEY}_quality_title", "Hide Quality menu"),
StringResource("${KEY}_quality_on", "Quality menu item is hidden"),
StringResource("${KEY}_quality_off", "Quality menu item is shown")
),
SwitchPreference(
"${KEY}_captions",
StringResource("${KEY}_captions_title", "Hide Captions menu"),
StringResource("${KEY}_captions_on", "Captions menu item is hidden"),
StringResource("${KEY}_captions_off", "Captions menu item is shown")
),
SwitchPreference(
"${KEY}_loop_video",
StringResource("${KEY}_loop_video_title", "Hide Loop video menu"),
StringResource("${KEY}_loop_video_on", "Loop video menu item is hidden"),
StringResource("${KEY}_loop_video_off", "Loop video menu item is shown")
),
SwitchPreference(
"${KEY}_ambient_mode",
StringResource("${KEY}_ambient_mode_title", "Hide Ambient mode menu"),
StringResource("${KEY}_ambient_mode_on", "Ambient mode menu item is hidden"),
StringResource("${KEY}_ambient_mode_off", "Ambient mode menu item is shown")
),
SwitchPreference(
"${KEY}_report",
StringResource("${KEY}_report_title", "Hide Report menu"),
StringResource("${KEY}_report_on", "Report menu item is hidden"),
StringResource("${KEY}_report_off", "Report menu item is shown")
),
SwitchPreference(
"${KEY}_help",
StringResource("${KEY}_help_title", "Hide Help menu"),
StringResource("${KEY}_help_on", "Help menu item is hidden"),
StringResource("${KEY}_help_off", "Help menu item is shown")
),
SwitchPreference(
"${KEY}_speed",
StringResource("${KEY}_speed_title", "Hide Speed menu"),
StringResource("${KEY}_speed_on", "Speed menu item is hidden"),
StringResource("${KEY}_speed_off", "Speed menu item is shown")
),
SwitchPreference(
"${KEY}_more_info",
StringResource("${KEY}_more_info_title", "Hide More info menu"),
StringResource("${KEY}_more_info_on", "More info menu item is hidden"),
StringResource("${KEY}_more_info_off", "More info menu item is shown")
),
SwitchPreference(
"${KEY}_audio_track",
StringResource("${KEY}_audio_track_title", "Hide Audio track menu"),
StringResource("${KEY}_audio_track_on", "Audio track menu item is hidden"),
StringResource("${KEY}_audio_track_off", "Audio track menu item is shown")
),
SwitchPreference(
"${KEY}_watch_in_vr",
StringResource("${KEY}_watch_in_vr_title", "Hide Watch in VR menu"),
StringResource("${KEY}_watch_in_vr_on", "Watch in VR menu item is hidden"),
StringResource("${KEY}_watch_in_vr_off", "Watch in VR menu item is shown")
),
),
StringResource("${KEY}_summary", "Manage the visibility of player flyout menu items")
)
)
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
return PatchResultSuccess()
}
private companion object {
const val KEY = "revanced_hide_player_flyout"
const val FILTER_CLASS_DESCRIPTOR =
"Lapp/revanced/integrations/patches/components/PlayerFlyoutMenuItemsFilter;"
}
}

View File

@ -1,10 +0,0 @@
package app.revanced.patches.youtube.layout.hide.watchinvr.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
object WatchInVRFingerprint : MethodFingerprint(
"V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf("Z"),
strings = listOf("menu_item_cardboard_vr")
)

View File

@ -1,53 +0,0 @@
package app.revanced.patches.youtube.layout.hide.watchinvr.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.shared.settings.preference.impl.StringResource
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
import app.revanced.patches.youtube.layout.hide.watchinvr.annotations.WatchInVRCompatibility
import app.revanced.patches.youtube.layout.hide.watchinvr.fingerprints.WatchInVRFingerprint
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
@Patch
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
@Name("Hide watch in VR")
@Description("Hides the option to watch in VR from the player settings flyout panel.")
@WatchInVRCompatibility
class WatchInVRPatch : BytecodePatch(
listOf(
WatchInVRFingerprint
)
) {
override fun execute(context: BytecodeContext): PatchResult {
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
SwitchPreference(
"revanced_hide_watch_in_vr",
StringResource("revanced_hide_watch_in_vr_title", "Hide VR setting"),
StringResource("revanced_hide_watch_in_vr_summary_on", "VR setting is hidden"),
StringResource("revanced_hide_watch_in_vr_summary_off", "VR setting is shown")
)
)
WatchInVRFingerprint.result!!.mutableMethod.addInstructionsWithLabels(
0,
"""
invoke-static {}, Lapp/revanced/integrations/patches/HideWatchInVRPatch;->hideWatchInVR()Z
move-result v0
if-eqz v0, :shown
return-void
:shown
nop
"""
)
return PatchResultSuccess()
}
}