From 343c7dd2b60a28787f270fdc17256974da90501b Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:36:04 +0300 Subject: [PATCH 001/103] chore(YouTube): Remove `Duration filter` patch --- src/main/resources/youtube/settings/xml/revanced_prefs.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 18c494d9d..ca18949e3 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -222,11 +222,6 @@ - - - - - From 3407b4a581997b2560b6fec2e0ced504c77e7a71 Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Tue, 17 Sep 2024 18:40:11 +0900 Subject: [PATCH 002/103] refactor(BytecodeUtils): remove duplicate functions --- .../components/AccountComponentsPatch.kt | 35 +- .../components/ActionBarComponentsPatch.kt | 23 +- .../patches/music/ads/general/AdsPatch.kt | 27 +- .../fingerprints/NotifierShelfFingerprint.kt | 6 +- .../ShowDialogCommandFingerprint.kt | 4 +- .../components/FlyoutMenuComponentsPatch.kt | 29 +- .../components/LayoutComponentsPatch.kt | 36 +- .../HistoryMenuItemFingerprint.kt | 4 +- .../HistoryMenuItemOfflineTabFingerprint.kt | 6 +- .../fingerprints/SearchBarFingerprint.kt | 22 +- .../OldStyleLibraryShelfPatch.kt | 9 +- .../redirection/DislikeRedirectionPatch.kt | 19 +- ...DislikeButtonOnClickListenerFingerprint.kt | 4 +- .../BackgroundPlaybackPatch.kt | 42 +- .../MusicBrowserServiceFingerprint.kt | 17 +- .../music/misc/share/ShareSheetPatch.kt | 8 +- .../misc/splash/CairoSplashAnimationPatch.kt | 4 +- .../NavigationBarComponentsPatch.kt | 19 +- .../components/PlayerComponentsPatch.kt | 102 ++-- .../MiniPlayerConstructorFingerprint.kt | 6 +- .../MppWatchWhileLayoutFingerprint.kt | 4 +- .../MusicActivityWidgetFingerprint.kt | 4 +- .../PlayerViewPagerConstructorFingerprint.kt | 6 +- .../QuickSeekOverlayFingerprint.kt | 6 +- .../ShuffleClassReferenceFingerprint.kt | 4 +- .../AccessibilityNodeInfoPatch.kt | 60 --- .../TouchExplorationHoverEventFingerprint.kt | 8 - .../utils/fix/header/RestoreOldHeaderPatch.kt | 24 +- .../utils/settings/SettingsBytecodePatch.kt | 4 +- .../music/utils/settings/SettingsPatch.kt | 6 +- .../sponsorblock/SponsorBlockBytecodePatch.kt | 29 +- .../information/VideoInformationPatch.kt | 13 +- .../fingerprints/VideoLengthFingerprint.kt | 20 +- .../video/playback/VideoPlaybackPatch.kt | 4 +- .../patches/reddit/ad/general/AdsPatch.kt | 16 +- .../RecentlyVisitedShelfPatch.kt | 33 +- .../ScreenshotTakenBannerFingerprint.kt | 4 +- .../subredditdialog/SubRedditDialogPatch.kt | 9 +- .../FrequentUpdatesSheetScreenFingerprint.kt | 4 +- .../RedditAlertDialogsFingerprint.kt | 4 +- .../layout/toolbar/ToolBarButtonPatch.kt | 4 +- .../HomePagerScreenFingerprint.kt | 4 +- .../misc/openlink/OpenLinksExternallyPatch.kt | 4 +- .../utils/settings/SettingsBytecodePatch.kt | 8 +- ...AcknowledgementsLabelBuilderFingerprint.kt | 4 +- .../patches/shared/ads/BaseAdsPatch.kt | 4 +- .../BaseCustomPlaybackSpeedPatch.kt | 16 +- .../dialog/BaseViewerDiscretionDialogPatch.kt | 8 +- .../shared/drawable/DrawableColorPatch.kt | 20 +- .../shared/gms/BaseGmsCoreSupportPatch.kt | 4 +- .../fingerprints/CertificateFingerprint.kt | 20 +- .../patches/shared/litho/LithoFilterPatch.kt | 4 +- .../BaseMainActivityResolvePatch.kt | 5 +- .../shared/opus/BaseOpusCodecsPatch.kt | 17 +- .../shared/settingmenu/SettingsMenuPatch.kt | 9 +- .../BaseSpoofAppVersionPatch.kt | 5 +- .../ShowDialogCommandFingerprint.kt | 4 +- .../feed/components/FeedComponentsPatch.kt | 24 +- .../general/audiotracks/AudioTracksPatch.kt | 20 +- .../components/LayoutComponentsPatch.kt | 22 +- .../general/layoutswitch/LayoutSwitchPatch.kt | 7 +- .../GradientLoadingScreenPatch.kt | 4 +- .../general/miniplayer/MiniplayerPatch.kt | 17 +- .../MiniplayerModernConstructorFingerprint.kt | 8 +- .../NavigationBarComponentsPatch.kt | 18 +- .../SplashAnimationFingerprint.kt | 4 +- .../StartUpResourceIdFingerprint.kt | 6 +- .../general/toolbar/ToolBarComponentsPatch.kt | 78 ++- .../ActionBarRingoBackgroundFingerprint.kt | 4 +- .../DrawerContentViewFingerprint.kt | 21 +- .../fingerprints/SearchBarFingerprint.kt | 13 +- .../OpenLinksDirectlyPatch.kt | 10 +- .../youtube/misc/share/ShareSheetPatch.kt | 8 +- .../ambientmode/AmbientModeSwitchPatch.kt | 16 +- .../player/buttons/PlayerButtonsPatch.kt | 21 +- .../FullScreenButtonFingerprint.kt | 8 +- .../fingerprints/TitleAnchorFingerprint.kt | 6 +- .../player/comments/CommentsComponentPatch.kt | 11 +- .../components/PlayerComponentsPatch.kt | 39 +- .../QuickSeekOverlayFingerprint.kt | 6 +- .../DescriptionComponentsPatch.kt | 40 +- .../EngagementPanelTitleFingerprint.kt | 22 +- .../flyoutmenu/hide/PlayerFlyoutMenuPatch.kt | 27 +- .../CaptionsBottomSheetFingerprint.kt | 6 +- .../flyoutmenu/toggle/ChangeTogglePatch.kt | 20 +- .../fullscreen/FullscreenComponentsPatch.kt | 49 +- .../hapticfeedback/HapticFeedBackPatch.kt | 4 +- .../player/seekbar/SeekbarComponentsPatch.kt | 31 +- .../player/speedoverlay/SpeedOverlayPatch.kt | 208 ++++---- .../NextGenWatchLayoutFingerprint.kt | 8 +- .../RestoreSlideToSeekBehaviorFingerprint.kt | 1 + .../fingerprints/SpeedOverlayFingerprint.kt | 1 + ...t => SpeedOverlayFloatValueFingerprint.kt} | 3 +- .../SpeedOverlayTextValueFingerprint.kt | 13 +- .../shorts/components/ShortsAnimationPatch.kt | 4 +- .../shorts/components/ShortsComponentPatch.kt | 48 +- .../components/ShortsNavigationBarPatch.kt | 8 +- .../shorts/components/ShortsRepeatPatch.kt | 63 +-- .../shorts/components/ShortsTimeStampPatch.kt | 12 +- .../fingerprints/ReelFeedbackFingerprint.kt | 8 +- .../fingerprints/ShortsButtonFingerprint.kt | 12 +- .../ShortsTimeStampPrimaryFingerprint.kt | 8 +- .../swipe/controls/SwipeControlsPatch.kt | 11 +- .../utils/castbutton/CastButtonPatch.kt | 25 +- .../MenuItemVisibilityFingerprint.kt | 13 +- .../PlayerSeekbarColorFingerprint.kt | 6 +- .../YouTubeControlsOverlayFingerprint.kt | 10 +- .../utils/fix/bottomui/CfBottomUIPatch.kt | 24 +- .../utils/fix/cairo/CairoSettingsPatch.kt | 24 +- .../fix/shortsplayback/ShortsPlaybackPatch.kt | 24 +- .../SuggestedVideoEndScreenPatch.kt | 9 +- ...RemoveOnLayoutChangeListenerFingerprint.kt | 16 +- .../playercontrols/PlayerControlsPatch.kt | 32 +- .../PlayerControlsVisibilityHookPatch.kt | 4 +- .../fingerprints/MotionEventFingerprint.kt | 20 +- .../utils/playertype/PlayerTypeHookPatch.kt | 8 +- .../ActionBarSearchResultsFingerprint.kt | 4 +- .../BottomSheetRecyclerViewPatch.kt | 21 +- .../general/ReturnYouTubeDislikePatch.kt | 17 +- .../ReturnYouTubeDislikeRollingNumberPatch.kt | 14 +- ...ingNumberMeasureAnimatedTextFingerprint.kt | 13 +- .../shorts/ReturnYouTubeDislikeShortsPatch.kt | 20 +- .../sponsorblock/SponsorBlockBytecodePatch.kt | 51 +- .../RectangleFieldInvalidatorFingerprint.kt | 20 +- .../trackingurlhook/TrackingUrlHookPatch.kt | 10 +- .../information/VideoInformationPatch.kt | 17 +- .../fingerprints/VideoIdFingerprintShorts.kt | 12 +- .../video/playback/VideoPlaybackPatch.kt | 15 +- .../fingerprints/AV1CodecFingerprint.kt | 4 +- .../kotlin/app/revanced/util/BytecodeUtils.kt | 456 ++++-------------- .../fingerprint/LiteralValueFingerprint.kt | 4 +- .../MethodReferenceNameFingerprint.kt | 34 -- .../util/fingerprint/ReferenceFingerprint.kt | 34 -- 133 files changed, 1323 insertions(+), 1440 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/music/utils/fix/accessibility/AccessibilityNodeInfoPatch.kt delete mode 100644 src/main/kotlin/app/revanced/patches/music/utils/fix/accessibility/fingerprints/TouchExplorationHoverEventFingerprint.kt rename src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/{SpeedOverlayValueFingerprint.kt => SpeedOverlayFloatValueFingerprint.kt} (81%) delete mode 100644 src/main/kotlin/app/revanced/util/fingerprint/MethodReferenceNameFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/util/fingerprint/ReferenceFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/account/components/AccountComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/account/components/AccountComponentsPatch.kt index 9b4288ad1..294d02e12 100644 --- a/src/main/kotlin/app/revanced/patches/music/account/components/AccountComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/account/components/AccountComponentsPatch.kt @@ -14,12 +14,14 @@ import app.revanced.patches.music.utils.integrations.Constants.ACCOUNT_CLASS_DES import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.getTargetIndexWithReferenceOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow 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.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") object AccountComponentsPatch : BaseBytecodePatch( @@ -43,8 +45,14 @@ object AccountComponentsPatch : BaseBytecodePatch( MenuEntryFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val textIndex = getTargetIndexWithMethodReferenceNameOrThrow("setText") - val viewIndex = getTargetIndexWithMethodReferenceNameOrThrow("addView") + val textIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setText" + } + val viewIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "addView" + } val textRegister = getInstruction(textIndex).registerD val viewRegister = getInstruction(viewIndex).registerD @@ -64,9 +72,14 @@ object AccountComponentsPatch : BaseBytecodePatch( AccountSwitcherAccessibilityLabelFingerprint.resultOrThrow().let { result -> result.mutableMethod.apply { - val textColorIndex = getTargetIndexWithMethodReferenceNameOrThrow("setTextColor") - val setVisibilityIndex = - getTargetIndexWithMethodReferenceNameOrThrow(textColorIndex, "setVisibility") + val textColorIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setTextColor" + } + val setVisibilityIndex = indexOfFirstInstructionOrThrow(textColorIndex) { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setVisibility" + } val textViewInstruction = getInstruction(setVisibilityIndex) @@ -98,8 +111,12 @@ object AccountComponentsPatch : BaseBytecodePatch( TermsOfServiceFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = - getTargetIndexWithReferenceOrThrow("/PrivacyTosFooter;->setVisibility(I)V") + val insertIndex = indexOfFirstInstructionOrThrow { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL && + reference?.name == "setVisibility" && + reference.definingClass.endsWith("/PrivacyTosFooter;") + } val visibilityRegister = getInstruction(insertIndex).registerD diff --git a/src/main/kotlin/app/revanced/patches/music/actionbar/components/ActionBarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/actionbar/components/ActionBarComponentsPatch.kt index 7adeadfdc..af0f94b91 100644 --- a/src/main/kotlin/app/revanced/patches/music/actionbar/components/ActionBarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/actionbar/components/ActionBarComponentsPatch.kt @@ -15,10 +15,9 @@ import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.LikeDis import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.music.video.information.VideoInformationPatch -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.getTargetIndexWithReferenceOrThrow -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -26,6 +25,7 @@ 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 +import com.android.tools.smali.dexlib2.iface.reference.MethodReference import kotlin.math.min @Suppress("unused") @@ -48,7 +48,10 @@ object ActionBarComponentsPatch : BaseBytecodePatch( it.mutableMethod.apply { // hook download button - val addViewIndex = getTargetIndexWithMethodReferenceNameOrThrow("addView") + val addViewIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "addView" + } val addViewRegister = getInstruction(addViewIndex).registerD @@ -83,10 +86,15 @@ object ActionBarComponentsPatch : BaseBytecodePatch( removeInstruction(replaceIndex) // hide action button - val hasNextIndex = getTargetIndexWithMethodReferenceNameOrThrow("hasNext") + val hasNextIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_INTERFACE && + getReference()?.name == "hasNext" + } val freeRegister = min(implementation!!.registerCount - parameters.size - 2, 15) - val spannedIndex = getTargetIndexWithReferenceOrThrow(")Landroid/text/Spanned;") + val spannedIndex = indexOfFirstInstructionOrThrow { + getReference()?.returnType == "Landroid/text/Spanned;" + } val spannedRegister = getInstruction(spannedIndex).registerC val spannedReference = getInstruction(spannedIndex).reference @@ -124,7 +132,8 @@ object ActionBarComponentsPatch : BaseBytecodePatch( LikeDislikeContainerFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = getWideLiteralInstructionIndex(LikeDislikeContainer) + 2 + val insertIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(LikeDislikeContainer) + 2 val insertRegister = getInstruction(insertIndex).registerA addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt index d490534a5..9a1d8d21c 100644 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt @@ -22,19 +22,21 @@ import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.ButtonContainer import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.FloatingLayout import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.InterstitialsContainer +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.PrivacyTosFooter import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.shared.litho.LithoFilterPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithReferenceOrThrow +import app.revanced.util.getReference import app.revanced.util.getWalkerMethod -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow 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.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference @Suppress("unused") object AdsPatch : BaseBytecodePatch( @@ -87,7 +89,7 @@ object AdsPatch : BaseBytecodePatch( FloatingLayoutFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val targetIndex = getWideLiteralInstructionIndex(FloatingLayout) + 2 + val targetIndex = indexOfFirstWideLiteralInstructionValueOrThrow(FloatingLayout) + 2 val targetRegister = getInstruction(targetIndex).registerA addInstruction( @@ -103,7 +105,8 @@ object AdsPatch : BaseBytecodePatch( NotifierShelfFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val linearLayoutIndex = getWideLiteralInstructionIndex(ButtonContainer) + 3 + val linearLayoutIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(ButtonContainer) + 3 val linearLayoutRegister = getInstruction(linearLayoutIndex).registerA @@ -135,16 +138,20 @@ object AdsPatch : BaseBytecodePatch( AccountMenuFooterFingerprint.resultOrThrow().let { it.mutableMethod.apply { val constIndex = - getWideLiteralInstructionIndex(SharedResourceIdPatch.PrivacyTosFooter) - val walkerIndex = getTargetIndexOrThrow(constIndex + 2, Opcode.INVOKE_VIRTUAL) - val viewIndex = getTargetIndexOrThrow(constIndex, Opcode.IGET_OBJECT) + indexOfFirstWideLiteralInstructionValueOrThrow(PrivacyTosFooter) + val walkerIndex = + indexOfFirstInstructionOrThrow(constIndex + 2, Opcode.INVOKE_VIRTUAL) + val viewIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.IGET_OBJECT) val viewReference = getInstruction(viewIndex).reference.toString() val walkerMethod = getWalkerMethod(context, walkerIndex) walkerMethod.apply { - val insertIndex = getTargetIndexWithReferenceOrThrow(viewReference) - val nullCheckIndex = getTargetIndexOrThrow(insertIndex - 1, Opcode.IF_NEZ) + val insertIndex = indexOfFirstInstructionOrThrow { + getReference()?.toString() == viewReference + } + val nullCheckIndex = + indexOfFirstInstructionOrThrow(insertIndex - 1, Opcode.IF_NEZ) val nullCheckRegister = getInstruction(nullCheckIndex).registerA diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/NotifierShelfFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/NotifierShelfFingerprint.kt index e0ba63d86..d76a6847d 100644 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/NotifierShelfFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/NotifierShelfFingerprint.kt @@ -4,14 +4,14 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.ButtonContainer import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MusicNotifierShelf -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object NotifierShelfFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(MusicNotifierShelf) - && methodDef.containsWideLiteralInstructionIndex(ButtonContainer) + methodDef.containsWideLiteralInstructionValue(MusicNotifierShelf) + && methodDef.containsWideLiteralInstructionValue(ButtonContainer) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/ShowDialogCommandFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/ShowDialogCommandFingerprint.kt index b83d05c76..49e108d66 100644 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/ShowDialogCommandFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/ShowDialogCommandFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.music.ads.general.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.SlidingDialogAnimation -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.Opcode internal object ShowDialogCommandFingerprint : MethodFingerprint( @@ -16,7 +16,7 @@ internal object ShowDialogCommandFingerprint : MethodFingerprint( // 6.26 and earlier has a different first parameter. // Since this fingerprint is somewhat weak, work around by checking for both method parameter signatures. customFingerprint = custom@{ methodDef, _ -> - if (!methodDef.containsWideLiteralInstructionIndex(SlidingDialogAnimation)) { + if (!methodDef.containsWideLiteralInstructionValue(SlidingDialogAnimation)) { return@custom false } // 6.26 and earlier parameters are: "L", "L" diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt index 9bcd39621..34cc2b9a9 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt @@ -25,12 +25,11 @@ import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.music.utils.videotype.VideoTypeHookPatch import app.revanced.patches.music.video.information.VideoInformationPatch import app.revanced.patches.shared.litho.LithoFilterPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.getReference import app.revanced.util.getWalkerMethod -import app.revanced.util.getWideLiteralInstructionIndex import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.literalInstructionBooleanHook +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -88,7 +87,7 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( // region patch for enable trim silence TrimSilenceConfigFingerprint.result?.let { - TrimSilenceConfigFingerprint.literalInstructionBooleanHook( + TrimSilenceConfigFingerprint.injectLiteralInstructionBooleanCall( 45619123, "$FLYOUT_CLASS_DESCRIPTOR->enableTrimSilence(Z)Z" ) @@ -96,9 +95,9 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( TrimSilenceSwitchFingerprint.resultOrThrow().let { it.mutableMethod.apply { val constIndex = - getWideLiteralInstructionIndex(SharedResourceIdPatch.TrimSilenceSwitch) + indexOfFirstWideLiteralInstructionValueOrThrow(SharedResourceIdPatch.TrimSilenceSwitch) val onCheckedChangedListenerIndex = - getTargetIndexOrThrow(constIndex, Opcode.INVOKE_DIRECT) + indexOfFirstInstructionOrThrow(constIndex, Opcode.INVOKE_DIRECT) val onCheckedChangedListenerReference = getInstruction(onCheckedChangedListenerIndex).reference val onCheckedChangedListenerDefiningClass = @@ -118,7 +117,7 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( && reference.parameterTypes[0] == "Z" } getWalkerMethod(context, walkerIndex).apply { - val insertIndex = getTargetIndexOrThrow(Opcode.MOVE_RESULT) + val insertIndex = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT) val insertRegister = getInstruction(insertIndex).registerA @@ -142,7 +141,7 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( MenuItemFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val freeIndex = getTargetIndexOrThrow(Opcode.OR_INT_LIT16) + val freeIndex = indexOfFirstInstructionOrThrow(Opcode.OR_INT_LIT16) val textViewIndex = it.scanResult.patternScanResult!!.startIndex val imageViewIndex = it.scanResult.patternScanResult!!.endIndex @@ -175,8 +174,10 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( TouchOutsideFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val setOnClickListenerIndex = - getTargetIndexWithMethodReferenceNameOrThrow("setOnClickListener") + val setOnClickListenerIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setOnClickListener" + } val setOnClickListenerRegister = getInstruction(setOnClickListenerIndex).registerC @@ -189,8 +190,10 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( EndButtonsContainerFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val startIndex = getWideLiteralInstructionIndex(EndButtonsContainer) - val targetIndex = getTargetIndexOrThrow(startIndex, Opcode.MOVE_RESULT_OBJECT) + val startIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(EndButtonsContainer) + val targetIndex = + indexOfFirstInstructionOrThrow(startIndex, Opcode.MOVE_RESULT_OBJECT) val targetRegister = getInstruction(targetIndex).registerA addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt index 0c277ef54..f43d509f2 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt @@ -27,15 +27,17 @@ import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKA import app.revanced.patches.music.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.music.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MusicTasteBuilderShelf +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.PlayerOverlayChip import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.TopBarMenuItemImageView import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.patches.shared.settingmenu.SettingsMenuPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.getWideLiteralInstructionIndex -import app.revanced.util.literalInstructionBooleanHook +import app.revanced.util.alsoResolve +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -99,7 +101,7 @@ object LayoutComponentsPatch : BaseBytecodePatch( PlayerOverlayChipFingerprint.resultOrThrow().let { it.mutableMethod.apply { val targetIndex = - getWideLiteralInstructionIndex(SharedResourceIdPatch.PlayerOverlayChip) + 2 + indexOfFirstWideLiteralInstructionValueOrThrow(PlayerOverlayChip) + 2 val targetRegister = getInstruction(targetIndex).registerA addInstruction( @@ -176,8 +178,10 @@ object LayoutComponentsPatch : BaseBytecodePatch( if (SettingsPatch.upward0642) { TopBarMenuItemImageViewFingerprint.resultOrThrow().mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(TopBarMenuItemImageView) - val targetIndex = getTargetIndexOrThrow(constIndex, Opcode.MOVE_RESULT_OBJECT) + val constIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(TopBarMenuItemImageView) + val targetIndex = + indexOfFirstInstructionOrThrow(constIndex, Opcode.MOVE_RESULT_OBJECT) val targetRegister = getInstruction(targetIndex).registerA addInstruction( @@ -193,7 +197,7 @@ object LayoutComponentsPatch : BaseBytecodePatch( // region patch for hide sound search button SoundSearchFingerprint.result?.let { - SoundSearchFingerprint.literalInstructionBooleanHook( + SoundSearchFingerprint.injectLiteralInstructionBooleanCall( 45625491, "$GENERAL_CLASS_DESCRIPTOR->hideSoundSearchButton(Z)Z" ) @@ -227,8 +231,9 @@ object LayoutComponentsPatch : BaseBytecodePatch( parentResult.mutableMethod.apply { val constIndex = - getWideLiteralInstructionIndex(SharedResourceIdPatch.MusicTasteBuilderShelf) - val targetIndex = getTargetIndexOrThrow(constIndex, Opcode.MOVE_RESULT_OBJECT) + indexOfFirstWideLiteralInstructionValueOrThrow(MusicTasteBuilderShelf) + val targetIndex = + indexOfFirstInstructionOrThrow(constIndex, Opcode.MOVE_RESULT_OBJECT) val targetRegister = getInstruction(targetIndex).registerA addInstruction( @@ -263,14 +268,11 @@ object LayoutComponentsPatch : BaseBytecodePatch( // region patch for hide voice search button - SearchBarFingerprint.resolve( - context, - SearchBarParentFingerprint.resultOrThrow().classDef - ) - SearchBarFingerprint.resultOrThrow().let { + SearchBarFingerprint.alsoResolve( + context, SearchBarParentFingerprint + ).let { it.mutableMethod.apply { - val setVisibilityIndex = - getTargetIndexWithMethodReferenceNameOrThrow("setVisibility") + val setVisibilityIndex = SearchBarFingerprint.indexOfVisibilityInstruction(this) val setVisibilityInstruction = getInstruction(setVisibilityIndex) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/HistoryMenuItemFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/HistoryMenuItemFingerprint.kt index bbf6b50ce..b4a405384 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/HistoryMenuItemFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/HistoryMenuItemFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.music.general.components.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.HistoryMenuItem -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode @@ -16,7 +16,7 @@ internal object HistoryMenuItemFingerprint : MethodFingerprint( Opcode.RETURN_VOID ), customFingerprint = { methodDef, classDef -> - methodDef.containsWideLiteralInstructionIndex(HistoryMenuItem) + methodDef.containsWideLiteralInstructionValue(HistoryMenuItem) && classDef.methods.count() == 5 } ) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/HistoryMenuItemOfflineTabFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/HistoryMenuItemOfflineTabFingerprint.kt index e875e2be9..1453be5ea 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/HistoryMenuItemOfflineTabFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/HistoryMenuItemOfflineTabFingerprint.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.HistoryMenuItem import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.OfflineSettingsMenuItem -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode @@ -17,7 +17,7 @@ internal object HistoryMenuItemOfflineTabFingerprint : MethodFingerprint( Opcode.RETURN_VOID ), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(HistoryMenuItem) - && methodDef.containsWideLiteralInstructionIndex(OfflineSettingsMenuItem) + methodDef.containsWideLiteralInstructionValue(HistoryMenuItem) + && methodDef.containsWideLiteralInstructionValue(OfflineSettingsMenuItem) } ) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/SearchBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/SearchBarFingerprint.kt index fbcd0ec91..3ba4a400b 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/SearchBarFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/SearchBarFingerprint.kt @@ -1,8 +1,22 @@ package app.revanced.patches.music.general.components.fingerprints -import app.revanced.util.fingerprint.MethodReferenceNameFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.music.general.components.fingerprints.SearchBarFingerprint.indexOfVisibilityInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -object SearchBarFingerprint : MethodReferenceNameFingerprint( +object SearchBarFingerprint : MethodFingerprint( returnType = "V", - reference = { "setVisibility" } -) \ No newline at end of file + customFingerprint = { methodDef, _ -> + indexOfVisibilityInstruction(methodDef) >= 0 + } +) { + fun indexOfVisibilityInstruction(methodDef: Method) = + methodDef.indexOfFirstInstructionReversed { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setVisibility" + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/general/oldstylelibraryshelf/OldStyleLibraryShelfPatch.kt b/src/main/kotlin/app/revanced/patches/music/general/oldstylelibraryshelf/OldStyleLibraryShelfPatch.kt index de8629052..8201e0701 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/oldstylelibraryshelf/OldStyleLibraryShelfPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/oldstylelibraryshelf/OldStyleLibraryShelfPatch.kt @@ -8,8 +8,8 @@ import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKA import app.revanced.patches.music.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndexReversedOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -27,8 +27,9 @@ object OldStyleLibraryShelfPatch : BaseBytecodePatch( BrowseIdFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val stringIndex = getStringInstructionIndex("FEmusic_offline") - val targetIndex = getTargetIndexReversedOrThrow(stringIndex, Opcode.IGET_OBJECT) + val stringIndex = indexOfFirstStringInstructionOrThrow("FEmusic_offline") + val targetIndex = + indexOfFirstInstructionReversedOrThrow(stringIndex, Opcode.IGET_OBJECT) val targetRegister = getInstruction(targetIndex).registerA addInstructions( diff --git a/src/main/kotlin/app/revanced/patches/music/general/redirection/DislikeRedirectionPatch.kt b/src/main/kotlin/app/revanced/patches/music/general/redirection/DislikeRedirectionPatch.kt index 703c0072b..fca2cf297 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/redirection/DislikeRedirectionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/redirection/DislikeRedirectionPatch.kt @@ -11,11 +11,11 @@ import app.revanced.patches.music.utils.fingerprints.PendingIntentReceiverFinger import app.revanced.patches.music.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.getTargetIndexWithReferenceOrThrow +import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -41,13 +41,14 @@ object DislikeRedirectionPatch : BaseBytecodePatch( PendingIntentReceiverFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val startIndex = getStringInstructionIndex("YTM Dislike") + val startIndex = indexOfFirstStringInstructionOrThrow("YTM Dislike") val onClickRelayIndex = - getTargetIndexReversedOrThrow(startIndex, Opcode.INVOKE_VIRTUAL) + indexOfFirstInstructionReversedOrThrow(startIndex, Opcode.INVOKE_VIRTUAL) val onClickRelayMethod = getWalkerMethod(context, onClickRelayIndex) onClickRelayMethod.apply { - val onClickMethodIndex = getTargetIndexReversedOrThrow(Opcode.INVOKE_DIRECT) + val onClickMethodIndex = + indexOfFirstInstructionReversedOrThrow(Opcode.INVOKE_DIRECT) val onClickMethod = getWalkerMethod(context, onClickMethodIndex) onClickMethod.apply { @@ -70,7 +71,9 @@ object DislikeRedirectionPatch : BaseBytecodePatch( DislikeButtonOnClickListenerFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val onClickIndex = getTargetIndexWithReferenceOrThrow(onClickReference.toString()) + val onClickIndex = indexOfFirstInstructionOrThrow { + getReference()?.toString() == onClickReference.toString() + } injectCall(onClickIndex) } } @@ -84,7 +87,7 @@ object DislikeRedirectionPatch : BaseBytecodePatch( } private fun MutableMethod.injectCall(onClickIndex: Int) { - val targetIndex = getTargetIndexReversedOrThrow(onClickIndex, Opcode.IF_EQZ) + val targetIndex = indexOfFirstInstructionReversedOrThrow(onClickIndex, Opcode.IF_EQZ) val insertRegister = getInstruction(targetIndex).registerA addInstructionsWithLabels( diff --git a/src/main/kotlin/app/revanced/patches/music/general/redirection/fingerprints/DislikeButtonOnClickListenerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/redirection/fingerprints/DislikeButtonOnClickListenerFingerprint.kt index a405b7204..95a496b57 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/redirection/fingerprints/DislikeButtonOnClickListenerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/redirection/fingerprints/DislikeButtonOnClickListenerFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.music.general.redirection.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object DislikeButtonOnClickListenerFingerprint : MethodFingerprint( @@ -10,7 +10,7 @@ internal object DislikeButtonOnClickListenerFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Landroid/view/View;"), customFingerprint = handler@{ methodDef, _ -> - if (!methodDef.containsWideLiteralInstructionIndex(53465)) + if (!methodDef.containsWideLiteralInstructionValue(53465)) return@handler false methodDef.name == "onClick" diff --git a/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/BackgroundPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/BackgroundPlaybackPatch.kt index 8e95694bf..ed4e79c7f 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/BackgroundPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/BackgroundPlaybackPatch.kt @@ -10,15 +10,16 @@ import app.revanced.patches.music.misc.backgroundplayback.fingerprints.KidsBackg import app.revanced.patches.music.misc.backgroundplayback.fingerprints.MusicBrowserServiceFingerprint import app.revanced.patches.music.misc.backgroundplayback.fingerprints.PodCastConfigFingerprint import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.util.getStartsWithStringInstructionIndex -import app.revanced.util.getStringInstructionIndex +import app.revanced.util.getReference import app.revanced.util.getWalkerMethod +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow 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.OneRegisterInstruction -import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") object BackgroundPlaybackPatch : BaseBytecodePatch( @@ -51,26 +52,20 @@ object BackgroundPlaybackPatch : BaseBytecodePatch( // don't play music video MusicBrowserServiceFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val targetIndex = - getStartsWithStringInstructionIndex("MBS: Return empty root for client: %s") - - for (index in targetIndex downTo 0) { - if (getInstruction(index).opcode != Opcode.INVOKE_VIRTUAL) continue - - val targetReference = getInstruction(index).reference - - if (!targetReference.toString().endsWith("()Z")) continue - - val walkerMethod = getWalkerMethod(context, index) - - walkerMethod.addInstructions( - 0, """ - const/4 v0, 0x1 - return v0 - """ - ) - break + val stringIndex = MusicBrowserServiceFingerprint.indexOfMBSInstruction(this) + val targetIndex = indexOfFirstInstructionReversedOrThrow(stringIndex) { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL && + reference?.returnType == "Z" && + reference.parameterTypes.size == 0 } + + getWalkerMethod(context, targetIndex).addInstructions( + 0, """ + const/4 v0, 0x1 + return v0 + """ + ) } } @@ -97,7 +92,8 @@ object BackgroundPlaybackPatch : BaseBytecodePatch( } dataSavingSettingsFragmentFingerprintResult!!.mutableMethod.apply { - val insertIndex = getStringInstructionIndex("pref_key_dont_play_nma_video") + 4 + val insertIndex = + indexOfFirstStringInstructionOrThrow("pref_key_dont_play_nma_video") + 4 val targetRegister = getInstruction(insertIndex).registerD addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/MusicBrowserServiceFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/MusicBrowserServiceFingerprint.kt index df191491c..2823a0079 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/MusicBrowserServiceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/MusicBrowserServiceFingerprint.kt @@ -2,8 +2,13 @@ package app.revanced.patches.music.misc.backgroundplayback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.getStartsWithStringInstructionIndex +import app.revanced.patches.music.misc.backgroundplayback.fingerprints.MusicBrowserServiceFingerprint.indexOfMBSInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.StringReference internal object MusicBrowserServiceFingerprint : MethodFingerprint( returnType = "L", @@ -13,6 +18,12 @@ internal object MusicBrowserServiceFingerprint : MethodFingerprint( if (!methodDef.definingClass.endsWith("/MusicBrowserService;")) return@custom false - methodDef.getStartsWithStringInstructionIndex("MBS: Return empty root for client: %s") > 0 + indexOfMBSInstruction(methodDef) >= 0 } -) \ No newline at end of file +) { + fun indexOfMBSInstruction(methodDef: Method) = + methodDef.indexOfFirstInstruction { + opcode == Opcode.CONST_STRING && + getReference()?.string?.startsWith("MBS: Return empty root for client: %s") == true + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/misc/share/ShareSheetPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/share/ShareSheetPatch.kt index 204d168a0..8a3b9b0a5 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/share/ShareSheetPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/share/ShareSheetPatch.kt @@ -12,8 +12,8 @@ import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.BottomS import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.shared.litho.LithoFilterPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -40,8 +40,8 @@ object ShareSheetPatch : BaseBytecodePatch( override fun execute(context: BytecodeContext) { BottomSheetRecyclerViewFingerprint.resultOrThrow().mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(BottomSheetRecyclerView) - val targetIndex = getTargetIndexOrThrow(constIndex, Opcode.CHECK_CAST) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(BottomSheetRecyclerView) + val targetIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.CHECK_CAST) val targetRegister = getInstruction(targetIndex).registerA addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/music/misc/splash/CairoSplashAnimationPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/splash/CairoSplashAnimationPatch.kt index ae0465ae4..e5c9b45ee 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/splash/CairoSplashAnimationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/splash/CairoSplashAnimationPatch.kt @@ -8,7 +8,7 @@ import app.revanced.patches.music.misc.splash.fingerprints.CairoSplashAnimationC import app.revanced.patches.music.utils.integrations.Constants.MISC_PATH import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch -import app.revanced.util.literalInstructionBooleanHook +import app.revanced.util.injectLiteralInstructionBooleanCall @Patch( name = "Disable Cairo splash animation", @@ -31,7 +31,7 @@ object CairoSplashAnimationPatch : BytecodePatch( override fun execute(context: BytecodeContext) { CairoSplashAnimationConfigFingerprint.result?.let { - CairoSplashAnimationConfigFingerprint.literalInstructionBooleanHook( + CairoSplashAnimationConfigFingerprint.injectLiteralInstructionBooleanCall( 45635386, "$MISC_PATH/CairoSplashAnimationPatch;->disableCairoSplashAnimation(Z)Z" ) diff --git a/src/main/kotlin/app/revanced/patches/music/navigation/components/NavigationBarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/navigation/components/NavigationBarComponentsPatch.kt index adcd24adf..a2e16a724 100644 --- a/src/main/kotlin/app/revanced/patches/music/navigation/components/NavigationBarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/navigation/components/NavigationBarComponentsPatch.kt @@ -11,13 +11,12 @@ import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKA import app.revanced.patches.music.utils.integrations.Constants.NAVIGATION_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.ColorGrey +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.Text1 import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.util.getReference -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.getWideLiteralInstructionIndex import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -50,7 +49,7 @@ object NavigationBarComponentsPatch : BaseBytecodePatch( * Enable black navigation bar */ TabLayoutFingerprint.resultOrThrow().mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(ColorGrey) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(ColorGrey) val insertIndex = indexOfFirstInstructionOrThrow(constIndex) { opcode == Opcode.INVOKE_VIRTUAL && getReference()?.name == "setBackgroundColor" @@ -70,8 +69,9 @@ object NavigationBarComponentsPatch : BaseBytecodePatch( */ TabLayoutTextFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(SharedResourceIdPatch.Text1) - val targetIndex = getTargetIndexOrThrow(constIndex, Opcode.CHECK_CAST) + val constIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(Text1) + val targetIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.CHECK_CAST) val targetParameter = getInstruction(targetIndex).reference val targetRegister = getInstruction(targetIndex).registerA @@ -105,9 +105,12 @@ object NavigationBarComponentsPatch : BaseBytecodePatch( it.mutableMethod.apply { val enumIndex = it.scanResult.patternScanResult!!.startIndex + 3 val enumRegister = getInstruction(enumIndex).registerA - val insertEnumIndex = getTargetIndexOrThrow(Opcode.AND_INT_LIT8) - 2 + val insertEnumIndex = indexOfFirstInstructionOrThrow(Opcode.AND_INT_LIT8) - 2 - val pivotTabIndex = getTargetIndexWithMethodReferenceNameOrThrow("getVisibility") + val pivotTabIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "getVisibility" + } val pivotTabRegister = getInstruction(pivotTabIndex).registerC addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt index 8bc50eed1..32ef4bde4 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt @@ -60,16 +60,13 @@ import app.revanced.patches.music.utils.videotype.VideoTypeHookPatch import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT import app.revanced.util.getReference -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndex -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.getTargetIndexWithFieldReferenceTypeOrThrow import app.revanced.util.getWalkerMethod -import app.revanced.util.getWideLiteralInstructionIndex import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.literalInstructionBooleanHook -import app.revanced.util.literalInstructionViewHook +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall +import app.revanced.util.injectLiteralInstructionViewCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import app.revanced.util.transformFields @@ -145,8 +142,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( PlayerViewPager to "disablePlayerGesture" ).forEach { (literal, methodName) -> val viewPagerReference = playerViewPagerConstructorMethod.let { - val constIndex = it.getWideLiteralInstructionIndex(literal) - val targetIndex = it.getTargetIndexOrThrow(constIndex, Opcode.IPUT_OBJECT) + val constIndex = it.indexOfFirstWideLiteralInstructionValueOrThrow(literal) + val targetIndex = it.indexOfFirstInstructionOrThrow(constIndex, Opcode.IPUT_OBJECT) it.getInstruction(targetIndex).reference.toString() } @@ -156,7 +153,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( && getReference()?.toString() == viewPagerReference } val insertRegister = getInstruction(insertIndex).registerA - val jumpIndex = getTargetIndex(insertIndex, Opcode.INVOKE_VIRTUAL) + 1 + val jumpIndex = + indexOfFirstInstructionOrThrow(insertIndex, Opcode.INVOKE_VIRTUAL) + 1 addInstructionsWithLabels( insertIndex, """ @@ -198,8 +196,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( val relativeIndex = it.scanResult.patternScanResult!!.endIndex + 1 val invokeVirtualIndex = - getTargetIndexOrThrow(relativeIndex, Opcode.INVOKE_VIRTUAL) - val iGetIndex = getTargetIndexOrThrow(relativeIndex, Opcode.IGET) + indexOfFirstInstructionOrThrow(relativeIndex, Opcode.INVOKE_VIRTUAL) + val iGetIndex = indexOfFirstInstructionOrThrow(relativeIndex, Opcode.IGET) colorMathPlayerInvokeVirtualReference = getInstruction(invokeVirtualIndex).reference @@ -207,11 +205,11 @@ object PlayerComponentsPatch : BaseBytecodePatch( getInstruction(iGetIndex).reference // black player background - val invokeDirectIndex = getTargetIndexOrThrow(Opcode.INVOKE_DIRECT) + val invokeDirectIndex = indexOfFirstInstructionOrThrow(Opcode.INVOKE_DIRECT) val targetMethod = getWalkerMethod(context, invokeDirectIndex) targetMethod.apply { - val insertIndex = getTargetIndexOrThrow(0, Opcode.IF_NE) + val insertIndex = indexOfFirstInstructionOrThrow(Opcode.IF_NE) addInstructions( insertIndex, """ @@ -225,8 +223,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( } parentResult.mutableMethod.apply { - val colorGreyIndex = getWideLiteralInstructionIndex(ColorGrey) - val iPutIndex = getTargetIndexOrThrow(colorGreyIndex, Opcode.IPUT) + val colorGreyIndex = indexOfFirstWideLiteralInstructionValueOrThrow(ColorGrey) + val iPutIndex = indexOfFirstInstructionOrThrow(colorGreyIndex, Opcode.IPUT) colorMathPlayerIPutReference = getInstruction(iPutIndex).reference @@ -240,7 +238,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( mutableMethod.apply { val freeRegister = implementation!!.registerCount - parameters.size - 3 - val invokeDirectIndex = getTargetIndexReversedOrThrow(Opcode.INVOKE_DIRECT) + val invokeDirectIndex = + indexOfFirstInstructionReversedOrThrow(Opcode.INVOKE_DIRECT) val invokeDirectReference = getInstruction(invokeDirectIndex).reference @@ -401,9 +400,9 @@ object PlayerComponentsPatch : BaseBytecodePatch( reversed: Boolean ): Reference { val targetIndex = if (reversed) - getTargetIndexReversedOrThrow(swipeToDismissWidgetIndex, opcode) + indexOfFirstInstructionReversedOrThrow(swipeToDismissWidgetIndex, opcode) else - getTargetIndexOrThrow(swipeToDismissWidgetIndex, opcode) + indexOfFirstInstructionOrThrow(swipeToDismissWidgetIndex, opcode) return getInstruction(targetIndex).reference } @@ -411,7 +410,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( if (!SettingsPatch.upward0642) { SwipeToCloseFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = implementation!!.instructions.size - 1 + val insertIndex = implementation!!.instructions.lastIndex val targetRegister = getInstruction(insertIndex).registerA @@ -430,8 +429,9 @@ object PlayerComponentsPatch : BaseBytecodePatch( InteractionLoggingEnumFingerprint.resultOrThrow().let { it.mutableMethod.apply { val stringIndex = - getStringInstructionIndex("INTERACTION_LOGGING_GESTURE_TYPE_SWIPE") - val sPutObjectIndex = getTargetIndexOrThrow(stringIndex, Opcode.SPUT_OBJECT) + indexOfFirstStringInstructionOrThrow("INTERACTION_LOGGING_GESTURE_TYPE_SWIPE") + val sPutObjectIndex = + indexOfFirstInstructionOrThrow(stringIndex, Opcode.SPUT_OBJECT) swipeToDismissSGetObjectReference = getInstruction(sPutObjectIndex).reference @@ -440,7 +440,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( MusicActivityWidgetFingerprint.resultOrThrow().let { it.mutableMethod.apply { - swipeToDismissWidgetIndex = getWideLiteralInstructionIndex(79500) + swipeToDismissWidgetIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(79500) swipeToDismissIGetObjectReference = getSwipeToDismissReference(Opcode.IGET_OBJECT, true) @@ -468,8 +469,9 @@ object PlayerComponentsPatch : BaseBytecodePatch( it.getWalkerMethod(context, it.scanResult.patternScanResult!!.startIndex) dismissBehaviorMethod.apply { - val insertIndex = - getTargetIndexWithFieldReferenceTypeOrThrow("Ljava/util/concurrent/atomic/AtomicBoolean;") + val insertIndex = indexOfFirstInstructionOrThrow { + getReference()?.type == "Ljava/util/concurrent/atomic/AtomicBoolean;" + } val primaryRegister = getInstruction(insertIndex).registerB val secondaryRegister = primaryRegister + 1 @@ -592,7 +594,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( SwitchToggleColorFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val invokeDirectIndex = getTargetIndexOrThrow(Opcode.INVOKE_DIRECT) + val invokeDirectIndex = indexOfFirstInstructionOrThrow(Opcode.INVOKE_DIRECT) val walkerMethod = getWalkerMethod(context, invokeDirectIndex) walkerMethod.addInstructions( @@ -624,8 +626,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( // region patch for hide audio video switch toggle AudioVideoSwitchToggleFingerprint.resultOrThrow().mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(AudioVideoSwitchToggle) - val viewIndex = getTargetIndexOrThrow(constIndex, Opcode.MOVE_RESULT_OBJECT) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(AudioVideoSwitchToggle) + val viewIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.MOVE_RESULT_OBJECT) val viewRegister = getInstruction(viewIndex).registerA addInstruction( @@ -667,7 +669,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( DarkBackground, TapBloomView ).forEach { literal -> - QuickSeekOverlayFingerprint.literalInstructionViewHook( + QuickSeekOverlayFingerprint.injectLiteralInstructionViewCall( literal, smaliInstruction ) @@ -742,9 +744,10 @@ object PlayerComponentsPatch : BaseBytecodePatch( it.mutableMethod.apply { rememberShuffleStateObjectClass = definingClass - val constIndex = getWideLiteralInstructionIndex(45468) - val iGetObjectIndex = getTargetIndexOrThrow(constIndex, Opcode.IGET_OBJECT) - val checkCastIndex = getTargetIndexOrThrow(iGetObjectIndex, Opcode.CHECK_CAST) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(45468) + val iGetObjectIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.IGET_OBJECT) + val checkCastIndex = + indexOfFirstInstructionOrThrow(iGetObjectIndex, Opcode.CHECK_CAST) val ordinalIndex = indexOfOrdinalInstruction(this) val imageViewIndex = indexOfImageViewInstruction(this) @@ -888,7 +891,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( // region patch for restore old comments popup panels OldEngagementPanelFingerprint.result?.let { - OldEngagementPanelFingerprint.literalInstructionBooleanHook( + OldEngagementPanelFingerprint.injectLiteralInstructionBooleanCall( 45427672, "$PLAYER_CLASS_DESCRIPTOR->restoreOldCommentsPopUpPanels(Z)Z" ) @@ -905,7 +908,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( // region patch for restore old player background OldPlayerBackgroundFingerprint.result?.let { - OldPlayerBackgroundFingerprint.literalInstructionBooleanHook( + OldPlayerBackgroundFingerprint.injectLiteralInstructionBooleanCall( 45415319, "$PLAYER_CLASS_DESCRIPTOR->restoreOldPlayerBackground(Z)Z" ) @@ -922,7 +925,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( // region patch for restore old player layout OldPlayerLayoutFingerprint.result?.let { - OldPlayerLayoutFingerprint.literalInstructionBooleanHook( + OldPlayerLayoutFingerprint.injectLiteralInstructionBooleanCall( 45399578, "$PLAYER_CLASS_DESCRIPTOR->restoreOldPlayerLayout(Z)Z" ) @@ -943,11 +946,14 @@ object PlayerComponentsPatch : BaseBytecodePatch( viewId: Long ) { val miniPlayerPlayPauseReplayButtonIndex = - getWideLiteralInstructionIndex(MiniPlayerPlayPauseReplayButton) + indexOfFirstWideLiteralInstructionValueOrThrow(MiniPlayerPlayPauseReplayButton) val miniPlayerPlayPauseReplayButtonRegister = getInstruction(miniPlayerPlayPauseReplayButtonIndex).registerA val findViewByIdIndex = - getTargetIndexOrThrow(miniPlayerPlayPauseReplayButtonIndex, Opcode.INVOKE_VIRTUAL) + indexOfFirstInstructionOrThrow( + miniPlayerPlayPauseReplayButtonIndex, + Opcode.INVOKE_VIRTUAL + ) val parentViewRegister = getInstruction(findViewByIdIndex).registerC @@ -966,11 +972,14 @@ object PlayerComponentsPatch : BaseBytecodePatch( viewId: Long ) { val miniPlayerPlayPauseReplayButtonIndex = - getWideLiteralInstructionIndex(MiniPlayerPlayPauseReplayButton) + indexOfFirstWideLiteralInstructionValueOrThrow(MiniPlayerPlayPauseReplayButton) val constRegister = getInstruction(miniPlayerPlayPauseReplayButtonIndex).registerA val findViewByIdIndex = - getTargetIndexOrThrow(miniPlayerPlayPauseReplayButtonIndex, Opcode.INVOKE_VIRTUAL) + indexOfFirstInstructionOrThrow( + miniPlayerPlayPauseReplayButtonIndex, + Opcode.INVOKE_VIRTUAL + ) val findViewByIdRegister = getInstruction(findViewByIdIndex).registerC @@ -986,9 +995,12 @@ object PlayerComponentsPatch : BaseBytecodePatch( private fun MutableMethod.setViewArray() { val miniPlayerPlayPauseReplayButtonIndex = - getWideLiteralInstructionIndex(MiniPlayerPlayPauseReplayButton) + indexOfFirstWideLiteralInstructionValueOrThrow(MiniPlayerPlayPauseReplayButton) val invokeStaticIndex = - getTargetIndexOrThrow(miniPlayerPlayPauseReplayButtonIndex, Opcode.INVOKE_STATIC) + indexOfFirstInstructionOrThrow( + miniPlayerPlayPauseReplayButtonIndex, + Opcode.INVOKE_STATIC + ) val viewArrayRegister = getInstruction(invokeStaticIndex).registerC addInstructions( @@ -1005,8 +1017,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( methodName: String, fieldName: String ) { - val startIndex = getStringInstructionIndex(intentString) - val onClickIndex = getTargetIndexReversedOrThrow(startIndex, Opcode.INVOKE_VIRTUAL) + val startIndex = indexOfFirstStringInstructionOrThrow(intentString) + val onClickIndex = indexOfFirstInstructionReversedOrThrow(startIndex, Opcode.INVOKE_VIRTUAL) val onClickReference = getInstruction(onClickIndex).reference val onClickReferenceDefiningClass = (onClickReference as MethodReference).definingClass @@ -1016,7 +1028,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( onClickClass.methods.find { method -> method.name == "" } ?.apply { addInstruction( - implementation!!.instructions.size - 1, + implementation!!.instructions.lastIndex, "sput-object p0, $PLAYER_CLASS_DESCRIPTOR->$fieldName:$onClickReferenceDefiningClass" ) } ?: throw PatchException("onClickClass not found!") diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerConstructorFingerprint.kt index 3ac11537f..57ec8f975 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerConstructorFingerprint.kt @@ -3,13 +3,13 @@ package app.revanced.patches.music.player.components.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.ColorGrey import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerPlayPauseReplayButton -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue internal object MiniPlayerConstructorFingerprint : MethodFingerprint( returnType = "V", strings = listOf("sharedToggleMenuItemMutations"), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(ColorGrey) - && methodDef.containsWideLiteralInstructionIndex(MiniPlayerPlayPauseReplayButton) + methodDef.containsWideLiteralInstructionValue(ColorGrey) + && methodDef.containsWideLiteralInstructionValue(MiniPlayerPlayPauseReplayButton) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt index a7e57557d..8cc697b71 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.music.player.components.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerPlayPauseReplayButton -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.Opcode internal object MppWatchWhileLayoutFingerprint : MethodFingerprint( @@ -11,6 +11,6 @@ internal object MppWatchWhileLayoutFingerprint : MethodFingerprint( customFingerprint = { methodDef, _ -> methodDef.definingClass.endsWith("/MppWatchWhileLayout;") && methodDef.name == "onFinishInflate" - && methodDef.containsWideLiteralInstructionIndex(MiniPlayerPlayPauseReplayButton) + && methodDef.containsWideLiteralInstructionValue(MiniPlayerPlayPauseReplayButton) } ) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MusicActivityWidgetFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MusicActivityWidgetFingerprint.kt index 0eb77a374..32c5106e4 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MusicActivityWidgetFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MusicActivityWidgetFingerprint.kt @@ -1,13 +1,13 @@ package app.revanced.patches.music.player.components.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue internal object MusicActivityWidgetFingerprint : MethodFingerprint( customFingerprint = handler@{ methodDef, _ -> if (!methodDef.definingClass.endsWith("/MusicActivity;")) return@handler false - methodDef.containsWideLiteralInstructionIndex(79500) + methodDef.containsWideLiteralInstructionValue(79500) } ) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/PlayerViewPagerConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/PlayerViewPagerConstructorFingerprint.kt index 9a2116941..e1ad8bc6b 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/PlayerViewPagerConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/PlayerViewPagerConstructorFingerprint.kt @@ -4,14 +4,14 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerViewPager import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.PlayerViewPager -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object PlayerViewPagerConstructorFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(MiniPlayerViewPager) - && methodDef.containsWideLiteralInstructionIndex(PlayerViewPager) + methodDef.containsWideLiteralInstructionValue(MiniPlayerViewPager) + && methodDef.containsWideLiteralInstructionValue(PlayerViewPager) }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/QuickSeekOverlayFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/QuickSeekOverlayFingerprint.kt index 89714d3b2..1e2add9d4 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/QuickSeekOverlayFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/QuickSeekOverlayFingerprint.kt @@ -3,13 +3,13 @@ package app.revanced.patches.music.player.components.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.DarkBackground import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.TapBloomView -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue internal object QuickSeekOverlayFingerprint : MethodFingerprint( returnType = "V", parameters = emptyList(), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(DarkBackground) - && methodDef.containsWideLiteralInstructionIndex(TapBloomView) + methodDef.containsWideLiteralInstructionValue(DarkBackground) + && methodDef.containsWideLiteralInstructionValue(TapBloomView) }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt index 64f792f24..6fb14779c 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.player.components.fingerprints.ShuffleClassReferenceFingerprint.indexOfImageViewInstruction import app.revanced.patches.music.player.components.fingerprints.ShuffleClassReferenceFingerprint.indexOfOrdinalInstruction -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags @@ -19,7 +19,7 @@ internal object ShuffleClassReferenceFingerprint : MethodFingerprint( parameters = emptyList(), strings = listOf("Unknown shuffle mode"), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(45468) && + methodDef.containsWideLiteralInstructionValue(45468) && indexOfOrdinalInstruction(methodDef) >= 0 && indexOfImageViewInstruction(methodDef) >= 0 } diff --git a/src/main/kotlin/app/revanced/patches/music/utils/fix/accessibility/AccessibilityNodeInfoPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/fix/accessibility/AccessibilityNodeInfoPatch.kt deleted file mode 100644 index 5dd6b7a7b..000000000 --- a/src/main/kotlin/app/revanced/patches/music/utils/fix/accessibility/AccessibilityNodeInfoPatch.kt +++ /dev/null @@ -1,60 +0,0 @@ -package app.revanced.patches.music.utils.fix.accessibility - -import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction -import app.revanced.patcher.patch.BytecodePatch -import app.revanced.patches.music.utils.fix.accessibility.fingerprints.TouchExplorationHoverEventFingerprint -import app.revanced.util.containsMethodReferenceNameInstructionIndex -import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction -import com.android.tools.smali.dexlib2.iface.reference.MethodReference - -object AccessibilityNodeInfoPatch : BytecodePatch( - setOf(TouchExplorationHoverEventFingerprint) -) { - override fun execute(context: BytecodeContext) { - - /** - * The "getTouchDelegateInfo" method has been implemented in YT Music v6.44.52. - * For some reason this method sometimes returns null, which throws [IllegalArgumentException]. - * This is considered unimplemented code, so remove all methods associated with it. - */ - TouchExplorationHoverEventFingerprint.result?.let { - it.mutableMethod.apply { - // Target instruction is invoke-static, but can also be invoke-virtual. - // Therefore, the opcode is not checked. - val touchExplorationHoverEventMethodIndex = - implementation!!.instructions.indexOfFirst { instruction -> - val reference = - ((instruction as? ReferenceInstruction)?.reference as? MethodReference) - ((instruction as? ReferenceInstruction)?.reference as? MethodReference)?.definingClass == definingClass - && reference?.returnType == "Z" - } - - // Doesn't raise an exception, even if the target instruction is not found in this method - val touchExplorationHoverEventMethodName = - if (touchExplorationHoverEventMethodIndex > -1) - (getInstruction(touchExplorationHoverEventMethodIndex).reference as MethodReference).name - else - "UNDEFINED" - - val methods = it.mutableClass.methods - - methods.find { method -> - method.name == "getTouchDelegateInfo" - }?.apply { - if (!containsMethodReferenceNameInstructionIndex("isEmpty")) { - arrayOf( - "getTouchDelegateInfo", - name, - touchExplorationHoverEventMethodName - ).forEach { methodName -> - methods.removeIf { method -> - method.name == methodName - } - } - } - } - } - } // If this method has not been added, there is no need to remove it, so it will not raise any exceptions. - } -} diff --git a/src/main/kotlin/app/revanced/patches/music/utils/fix/accessibility/fingerprints/TouchExplorationHoverEventFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/fix/accessibility/fingerprints/TouchExplorationHoverEventFingerprint.kt deleted file mode 100644 index 97920323e..000000000 --- a/src/main/kotlin/app/revanced/patches/music/utils/fix/accessibility/fingerprints/TouchExplorationHoverEventFingerprint.kt +++ /dev/null @@ -1,8 +0,0 @@ -package app.revanced.patches.music.utils.fix.accessibility.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object TouchExplorationHoverEventFingerprint : MethodFingerprint( - returnType = "Z", - customFingerprint = { methodDef, _ -> methodDef.name == "onTouchExplorationHoverEvent" } -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/fix/header/RestoreOldHeaderPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/fix/header/RestoreOldHeaderPatch.kt index 907fdeb5f..c95ad1965 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/fix/header/RestoreOldHeaderPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/fix/header/RestoreOldHeaderPatch.kt @@ -1,16 +1,11 @@ package app.revanced.patches.music.utils.fix.header import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.music.layout.header.ChangeHeaderPatch import app.revanced.patches.music.utils.fix.header.fingerprints.HeaderSwitchConfigFingerprint -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getWideLiteralInstructionIndex -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import app.revanced.util.injectLiteralInstructionBooleanCall @Patch( description = "Fix the issues where new headers are used." @@ -31,19 +26,10 @@ object RestoreOldHeaderPatch : BytecodePatch( * TODO: Add a new header image file to [ChangeHeaderPatch] later. */ HeaderSwitchConfigFingerprint.result?.let { - it.mutableMethod.apply { - val targetIndex = - getTargetIndexOrThrow( - getWideLiteralInstructionIndex(45617851), - Opcode.MOVE_RESULT - ) - val targetRegister = getInstruction(targetIndex).registerA - - addInstruction( - targetIndex + 1, - "const/4 v$targetRegister, 0x0" - ) - } + HeaderSwitchConfigFingerprint.injectLiteralInstructionBooleanCall( + 45617851, + "0x0" + ) } } diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsBytecodePatch.kt index d78940ff1..e3a25fead 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsBytecodePatch.kt @@ -17,7 +17,7 @@ import app.revanced.patches.music.utils.settings.fingerprints.PreferenceFingerpr import app.revanced.patches.music.utils.settings.fingerprints.SettingsHeadersFragmentFingerprint import app.revanced.patches.shared.fingerprints.SharedSettingFingerprint import app.revanced.patches.shared.integrations.Constants.INTEGRATIONS_UTILS_CLASS_DESCRIPTOR -import app.revanced.util.getTargetIndexOrThrow +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction @@ -52,7 +52,7 @@ object SettingsBytecodePatch : BytecodePatch( */ SharedSettingFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val stringIndex = getTargetIndexOrThrow(Opcode.CONST_STRING) + val stringIndex = indexOfFirstInstructionOrThrow(Opcode.CONST_STRING) val stringRegister = getInstruction(stringIndex).registerA replaceInstruction( diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt index 217f28302..32c1d3c01 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt @@ -3,7 +3,6 @@ package app.revanced.patches.music.utils.settings import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatchOption import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.music.utils.fix.accessibility.AccessibilityNodeInfoPatch import app.revanced.patches.music.utils.settings.ResourceUtils.addPreferenceCategory import app.revanced.patches.music.utils.settings.ResourceUtils.addPreferenceWithIntent import app.revanced.patches.music.utils.settings.ResourceUtils.addRVXSettingsPreference @@ -22,10 +21,7 @@ import java.util.concurrent.TimeUnit object SettingsPatch : BaseResourcePatch( name = "Settings for YouTube Music", description = "Applies mandatory patches to implement ReVanced Extended settings into the application.", - dependencies = setOf( - AccessibilityNodeInfoPatch::class, - SettingsBytecodePatch::class - ), + dependencies = setOf(SettingsBytecodePatch::class), compatiblePackages = COMPATIBLE_PACKAGE, requiresIntegrations = true ), Closeable { diff --git a/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/SponsorBlockBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/SponsorBlockBytecodePatch.kt index adce2aba8..8845cc5e0 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/SponsorBlockBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/SponsorBlockBytecodePatch.kt @@ -14,13 +14,17 @@ import app.revanced.patches.music.utils.sponsorblock.fingerprints.MusicPlaybackC import app.revanced.patches.music.utils.sponsorblock.fingerprints.SeekbarOnDrawFingerprint import app.revanced.patches.music.video.information.VideoInformationPatch import app.revanced.patches.music.video.videoid.VideoIdPatch -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameReversedOrThrow +import app.revanced.util.alsoResolve +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow 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.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch( dependencies = [ @@ -55,10 +59,9 @@ object SponsorBlockBytecodePatch : BytecodePatch( /** * Responsible for seekbar in fullscreen */ - val seekBarClass = SeekBarConstructorFingerprint.resultOrThrow().mutableClass - SeekbarOnDrawFingerprint.resolve(context, seekBarClass) - - SeekbarOnDrawFingerprint.resultOrThrow().let { + SeekbarOnDrawFingerprint.alsoResolve( + context, SeekBarConstructorFingerprint + ).let { it.mutableMethod.apply { // Initialize seekbar method addInstructions( @@ -70,7 +73,9 @@ object SponsorBlockBytecodePatch : BytecodePatch( ) // Set seekbar thickness - val roundIndex = getTargetIndexWithMethodReferenceNameOrThrow("round") + 1 + val roundIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "round" + } + 1 val roundRegister = getInstruction(roundIndex).registerA addInstruction( roundIndex + 1, @@ -79,8 +84,9 @@ object SponsorBlockBytecodePatch : BytecodePatch( ) // Draw segment - val drawCircleIndex = - getTargetIndexWithMethodReferenceNameReversedOrThrow("drawCircle") + val drawCircleIndex = indexOfFirstInstructionReversedOrThrow { + getReference()?.name == "drawCircle" + } val drawCircleInstruction = getInstruction(drawCircleIndex) addInstruction( drawCircleIndex, @@ -115,7 +121,10 @@ object SponsorBlockBytecodePatch : BytecodePatch( ) // Draw segment - val drawCircleIndex = getTargetIndexWithMethodReferenceNameOrThrow("drawCircle") + val drawCircleIndex = indexOfFirstInstructionReversedOrThrow { + opcode == Opcode.INVOKE_VIRTUAL + && getReference()?.name == "drawCircle" + } val drawCircleInstruction = getInstruction(drawCircleIndex) addInstruction( drawCircleIndex, diff --git a/src/main/kotlin/app/revanced/patches/music/video/information/VideoInformationPatch.kt b/src/main/kotlin/app/revanced/patches/music/video/information/VideoInformationPatch.kt index 53cd1e098..5b3e02e5f 100644 --- a/src/main/kotlin/app/revanced/patches/music/video/information/VideoInformationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/video/information/VideoInformationPatch.kt @@ -26,10 +26,9 @@ import app.revanced.patches.music.video.videoid.VideoIdPatch import app.revanced.patches.shared.fingerprints.MdxPlayerDirectorSetVideoStageFingerprint import app.revanced.util.addFieldAndInstructions import app.revanced.util.getReference -import app.revanced.util.getTargetIndexWithFieldReferenceTypeReversedOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameReversedOrThrow import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode @@ -216,12 +215,10 @@ object VideoInformationPatch : BytecodePatch( ) VideoLengthFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val invalidateIndex = - getTargetIndexWithMethodReferenceNameReversedOrThrow("invalidate") - val rectangleIndex = getTargetIndexWithFieldReferenceTypeReversedOrThrow( - invalidateIndex + 1, - "Landroid/graphics/Rect;" - ) + val invalidateIndex = VideoLengthFingerprint.indexOfInvalidateInstruction(this) + val rectangleIndex = indexOfFirstInstructionReversedOrThrow(invalidateIndex + 1) { + getReference()?.type == "Landroid/graphics/Rect;" + } rectangleFieldName = (getInstruction(rectangleIndex).reference as FieldReference).name diff --git a/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoLengthFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoLengthFingerprint.kt index 09da6b37d..293b0f1ed 100644 --- a/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoLengthFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoLengthFingerprint.kt @@ -1,9 +1,14 @@ package app.revanced.patches.music.video.information.fingerprints -import app.revanced.util.fingerprint.MethodReferenceNameFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.music.video.information.fingerprints.VideoLengthFingerprint.indexOfInvalidateInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal object VideoLengthFingerprint : MethodReferenceNameFingerprint( +internal object VideoLengthFingerprint : MethodFingerprint( opcodes = listOf( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_WIDE, @@ -12,5 +17,12 @@ internal object VideoLengthFingerprint : MethodReferenceNameFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_WIDE ), - reference = { "invalidate" } -) \ No newline at end of file + customFingerprint = { methodDef, _ -> + indexOfInvalidateInstruction(methodDef) >= 0 + } +) { + fun indexOfInvalidateInstruction(methodDef: Method) = + methodDef.indexOfFirstInstructionReversed { + getReference()?.name == "invalidate" + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/video/playback/VideoPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/music/video/playback/VideoPlaybackPatch.kt index 4173158b0..1b064ec81 100644 --- a/src/main/kotlin/app/revanced/patches/music/video/playback/VideoPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/video/playback/VideoPlaybackPatch.kt @@ -13,7 +13,7 @@ import app.revanced.patches.music.video.information.VideoInformationPatch import app.revanced.patches.music.video.playback.fingerprints.PlaybackSpeedBottomSheetFingerprint import app.revanced.patches.music.video.playback.fingerprints.UserQualityChangeFingerprint import app.revanced.patches.music.video.videoid.VideoIdPatch -import app.revanced.util.getTargetIndexOrThrow +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -52,7 +52,7 @@ object VideoPlaybackPatch : BaseBytecodePatch( it.mutableClass.methods.find { method -> method.name == "onItemClick" } onItemClickMethod?.apply { - val targetIndex = getTargetIndexOrThrow(Opcode.IGET) + val targetIndex = indexOfFirstInstructionOrThrow(Opcode.IGET) val targetRegister = getInstruction(targetIndex).registerA diff --git a/src/main/kotlin/app/revanced/patches/reddit/ad/general/AdsPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/ad/general/AdsPatch.kt index de989f069..dd2595576 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/ad/general/AdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/ad/general/AdsPatch.kt @@ -12,12 +12,15 @@ import app.revanced.patches.reddit.utils.compatibility.Constants.COMPATIBLE_PACK import app.revanced.patches.reddit.utils.integrations.Constants.PATCHES_PATH import app.revanced.patches.reddit.utils.settings.SettingsBytecodePatch.updateSettingsStatus import app.revanced.patches.reddit.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexWithFieldReferenceNameOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow 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.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") object AdsPatch : BaseBytecodePatch( @@ -42,7 +45,9 @@ object AdsPatch : BaseBytecodePatch( // region Filter promoted ads (does not work in popular or latest feed) AdPostFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val targetIndex = getTargetIndexWithFieldReferenceNameOrThrow("children") + val targetIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "children" + } val targetRegister = getInstruction(targetIndex).registerA addInstructions( @@ -59,7 +64,10 @@ object AdsPatch : BaseBytecodePatch( // By removing the appending instruction no ad posts gets appended to the feed. NewAdPostFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val targetIndex = getTargetIndexWithMethodReferenceNameOrThrow("add") + val targetIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL + && getReference()?.toString() == "Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z" + } val targetInstruction = getInstruction(targetIndex) replaceInstruction( diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/recentlyvisited/RecentlyVisitedShelfPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/recentlyvisited/RecentlyVisitedShelfPatch.kt index d9338e274..8956f23e0 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/layout/recentlyvisited/RecentlyVisitedShelfPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/recentlyvisited/RecentlyVisitedShelfPatch.kt @@ -9,15 +9,15 @@ import app.revanced.patches.reddit.utils.compatibility.Constants.COMPATIBLE_PACK import app.revanced.patches.reddit.utils.integrations.Constants.PATCHES_PATH import app.revanced.patches.reddit.utils.settings.SettingsBytecodePatch.updateSettingsStatus import app.revanced.patches.reddit.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.getTargetIndexWithFieldReferenceNameOrThrow -import app.revanced.util.getTargetIndexWithReferenceOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow 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.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference import com.android.tools.smali.dexlib2.iface.reference.Reference @Suppress("unused") @@ -40,20 +40,31 @@ object RecentlyVisitedShelfPatch : BaseBytecodePatch( it.mutableClass.methods.find { method -> method.name == "" } ?.apply { - val recentlyVisitedFieldIndex = - getTargetIndexWithFieldReferenceNameOrThrow("RECENTLY_VISITED") + val recentlyVisitedFieldIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "RECENTLY_VISITED" + } val recentlyVisitedObjectIndex = - getTargetIndexOrThrow(recentlyVisitedFieldIndex, Opcode.IPUT_OBJECT) + indexOfFirstInstructionOrThrow( + recentlyVisitedFieldIndex, + Opcode.IPUT_OBJECT + ) recentlyVisitedReference = getInstruction(recentlyVisitedObjectIndex).reference } ?: throw PatchException("Constructor method not found!") it.mutableMethod.apply { - val recentlyVisitedObjectIndex = - getTargetIndexWithReferenceOrThrow(recentlyVisitedReference.toString()) + val recentlyVisitedObjectIndex = indexOfFirstInstructionOrThrow { + getReference()?.toString() == recentlyVisitedReference.toString() + } arrayOf( - getTargetIndexOrThrow(recentlyVisitedObjectIndex, Opcode.INVOKE_STATIC), - getTargetIndexReversedOrThrow(recentlyVisitedObjectIndex, Opcode.INVOKE_STATIC) + indexOfFirstInstructionOrThrow( + recentlyVisitedObjectIndex, + Opcode.INVOKE_STATIC + ), + indexOfFirstInstructionReversedOrThrow( + recentlyVisitedObjectIndex, + Opcode.INVOKE_STATIC + ) ).forEach { staticIndex -> val insertRegister = getInstruction(staticIndex + 1).registerA diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/screenshotpopup/fingerprints/ScreenshotTakenBannerFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/screenshotpopup/fingerprints/ScreenshotTakenBannerFingerprint.kt index 541efade0..6154e8669 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/layout/screenshotpopup/fingerprints/ScreenshotTakenBannerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/screenshotpopup/fingerprints/ScreenshotTakenBannerFingerprint.kt @@ -3,14 +3,14 @@ package app.revanced.patches.reddit.layout.screenshotpopup.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.ScreenShotShareBanner -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object ScreenshotTakenBannerFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, customFingerprint = { methodDef, classDef -> - methodDef.containsWideLiteralInstructionIndex(ScreenShotShareBanner) + methodDef.containsWideLiteralInstructionValue(ScreenShotShareBanner) && classDef.sourceFile == "ScreenshotTakenBanner.kt" } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/SubRedditDialogPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/SubRedditDialogPatch.kt index ebc2f2e65..83adfb7b0 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/SubRedditDialogPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/SubRedditDialogPatch.kt @@ -12,7 +12,7 @@ import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.Cancel import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.TextAppearanceRedditBaseOldButtonColored import app.revanced.patches.reddit.utils.settings.SettingsBytecodePatch.updateSettingsStatus import app.revanced.patches.reddit.utils.settings.SettingsPatch -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction @@ -39,7 +39,8 @@ object SubRedditDialogPatch : BaseBytecodePatch( FrequentUpdatesSheetScreenFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val cancelButtonViewIndex = getWideLiteralInstructionIndex(CancelButton) + 2 + val cancelButtonViewIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(CancelButton) + 2 val cancelButtonViewRegister = getInstruction(cancelButtonViewIndex).registerA @@ -53,7 +54,9 @@ object SubRedditDialogPatch : BaseBytecodePatch( RedditAlertDialogsFingerprint.resultOrThrow().let { it.mutableMethod.apply { val insertIndex = - getWideLiteralInstructionIndex(TextAppearanceRedditBaseOldButtonColored) + 1 + indexOfFirstWideLiteralInstructionValueOrThrow( + TextAppearanceRedditBaseOldButtonColored + ) + 1 val insertRegister = getInstruction(insertIndex).registerC addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/fingerprints/FrequentUpdatesSheetScreenFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/fingerprints/FrequentUpdatesSheetScreenFingerprint.kt index 33e648aac..ab8942a7b 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/fingerprints/FrequentUpdatesSheetScreenFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/fingerprints/FrequentUpdatesSheetScreenFingerprint.kt @@ -3,14 +3,14 @@ package app.revanced.patches.reddit.layout.subredditdialog.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.CancelButton -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object FrequentUpdatesSheetScreenFingerprint : MethodFingerprint( returnType = "Landroid/view/View;", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, customFingerprint = { methodDef, classDef -> - methodDef.containsWideLiteralInstructionIndex(CancelButton) + methodDef.containsWideLiteralInstructionValue(CancelButton) && classDef.sourceFile == "FrequentUpdatesSheetScreen.kt" } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/fingerprints/RedditAlertDialogsFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/fingerprints/RedditAlertDialogsFingerprint.kt index 44515f97b..a992cad69 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/fingerprints/RedditAlertDialogsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/subredditdialog/fingerprints/RedditAlertDialogsFingerprint.kt @@ -3,14 +3,14 @@ package app.revanced.patches.reddit.layout.subredditdialog.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.TextAppearanceRedditBaseOldButtonColored -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object RedditAlertDialogsFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, customFingerprint = { methodDef, classDef -> - methodDef.containsWideLiteralInstructionIndex(TextAppearanceRedditBaseOldButtonColored) + methodDef.containsWideLiteralInstructionValue(TextAppearanceRedditBaseOldButtonColored) && classDef.sourceFile == "RedditAlertDialogs.kt" } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/toolbar/ToolBarButtonPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/toolbar/ToolBarButtonPatch.kt index d71fc2f39..f2a305f20 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/layout/toolbar/ToolBarButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/toolbar/ToolBarButtonPatch.kt @@ -10,7 +10,7 @@ import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.ToolBarNavSearchCtaContainer import app.revanced.patches.reddit.utils.settings.SettingsBytecodePatch.updateSettingsStatus import app.revanced.patches.reddit.utils.settings.SettingsPatch -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -35,7 +35,7 @@ object ToolBarButtonPatch : BaseBytecodePatch( HomePagerScreenFingerprint.resultOrThrow().let { it.mutableMethod.apply { val targetIndex = - getWideLiteralInstructionIndex(ToolBarNavSearchCtaContainer) + 3 + indexOfFirstWideLiteralInstructionValueOrThrow(ToolBarNavSearchCtaContainer) + 3 val targetRegister = getInstruction(targetIndex - 1).registerA diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/toolbar/fingerprints/HomePagerScreenFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/toolbar/fingerprints/HomePagerScreenFingerprint.kt index 4f42a5df8..ecec1bce5 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/layout/toolbar/fingerprints/HomePagerScreenFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/toolbar/fingerprints/HomePagerScreenFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.reddit.layout.toolbar.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.ToolBarNavSearchCtaContainer -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object HomePagerScreenFingerprint : MethodFingerprint( @@ -12,6 +12,6 @@ internal object HomePagerScreenFingerprint : MethodFingerprint( parameters = listOf("Landroid/view/LayoutInflater;", "Landroid/view/ViewGroup;"), customFingerprint = { methodDef, _ -> methodDef.definingClass.endsWith("/HomePagerScreen;") - && methodDef.containsWideLiteralInstructionIndex(ToolBarNavSearchCtaContainer) + && methodDef.containsWideLiteralInstructionValue(ToolBarNavSearchCtaContainer) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/misc/openlink/OpenLinksExternallyPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/misc/openlink/OpenLinksExternallyPatch.kt index fb1850579..5a9e81681 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/misc/openlink/OpenLinksExternallyPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/misc/openlink/OpenLinksExternallyPatch.kt @@ -9,7 +9,7 @@ import app.revanced.patches.reddit.utils.compatibility.Constants.COMPATIBLE_PACK import app.revanced.patches.reddit.utils.integrations.Constants.PATCHES_PATH import app.revanced.patches.reddit.utils.settings.SettingsBytecodePatch.updateSettingsStatus import app.revanced.patches.reddit.utils.settings.SettingsPatch -import app.revanced.util.getStringInstructionIndex +import app.revanced.util.indexOfFirstStringInstructionOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow @@ -27,7 +27,7 @@ object OpenLinksExternallyPatch : BaseBytecodePatch( override fun execute(context: BytecodeContext) { ScreenNavigatorFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = getStringInstructionIndex("uri") + 2 + val insertIndex = indexOfFirstStringInstructionOrThrow("uri") + 2 addInstructionsWithLabels( insertIndex, """ diff --git a/src/main/kotlin/app/revanced/patches/reddit/utils/settings/SettingsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/reddit/utils/settings/SettingsBytecodePatch.kt index cf6aa5851..cd1513922 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/utils/settings/SettingsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/utils/settings/SettingsBytecodePatch.kt @@ -15,8 +15,8 @@ import app.revanced.patches.reddit.utils.settings.fingerprints.AcknowledgementsL import app.revanced.patches.reddit.utils.settings.fingerprints.OssLicensesMenuActivityOnCreateFingerprint import app.revanced.patches.reddit.utils.settings.fingerprints.SettingsStatusLoadFingerprint import app.revanced.patches.shared.fingerprints.SharedSettingFingerprint -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -39,7 +39,7 @@ object SettingsBytecodePatch : BytecodePatch( internal fun updateSettingsLabel(label: String) = acknowledgementsLabelBuilderMethod.apply { val insertIndex = - getWideLiteralInstructionIndex(LabelAcknowledgements) + 3 + indexOfFirstWideLiteralInstructionValueOrThrow(LabelAcknowledgements) + 3 val insertRegister = getInstruction(insertIndex - 1).registerA @@ -62,7 +62,7 @@ object SettingsBytecodePatch : BytecodePatch( */ SharedSettingFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val stringIndex = getTargetIndexOrThrow(Opcode.CONST_STRING) + val stringIndex = indexOfFirstInstructionOrThrow(Opcode.CONST_STRING) val stringRegister = getInstruction(stringIndex).registerA replaceInstruction( diff --git a/src/main/kotlin/app/revanced/patches/reddit/utils/settings/fingerprints/AcknowledgementsLabelBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/utils/settings/fingerprints/AcknowledgementsLabelBuilderFingerprint.kt index 6954a037c..6bccc6594 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/utils/settings/fingerprints/AcknowledgementsLabelBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/utils/settings/fingerprints/AcknowledgementsLabelBuilderFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.reddit.utils.settings.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.reddit.utils.resourceid.SharedResourceIdPatch.LabelAcknowledgements -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object AcknowledgementsLabelBuilderFingerprint : MethodFingerprint( @@ -12,6 +12,6 @@ internal object AcknowledgementsLabelBuilderFingerprint : MethodFingerprint( parameters = listOf("Landroidx/preference/Preference;"), customFingerprint = { methodDef, _ -> methodDef.definingClass.startsWith("Lcom/reddit/screen/settings/preferences/") - && methodDef.containsWideLiteralInstructionIndex(LabelAcknowledgements) + && methodDef.containsWideLiteralInstructionValue(LabelAcknowledgements) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt b/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt index 90e3f1a80..1988df271 100644 --- a/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt @@ -14,8 +14,8 @@ import app.revanced.patches.shared.ads.fingerprints.VideoAdsFingerprint import app.revanced.patches.shared.integrations.Constants.PATCHES_PATH import app.revanced.util.getReference import app.revanced.util.getWalkerMethod -import app.revanced.util.getWideLiteralInstructionIndex import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -75,7 +75,7 @@ abstract class BaseAdsPatch( internal fun MethodFingerprintResult.hookNonLithoFullscreenAds(literal: Long) { mutableMethod.apply { - val targetIndex = getWideLiteralInstructionIndex(literal) + 2 + val targetIndex = indexOfFirstWideLiteralInstructionValueOrThrow(literal) + 2 val targetRegister = getInstruction(targetIndex).registerA addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/shared/customspeed/BaseCustomPlaybackSpeedPatch.kt b/src/main/kotlin/app/revanced/patches/shared/customspeed/BaseCustomPlaybackSpeedPatch.kt index ca1e9b1de..b2e29869b 100644 --- a/src/main/kotlin/app/revanced/patches/shared/customspeed/BaseCustomPlaybackSpeedPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/customspeed/BaseCustomPlaybackSpeedPatch.kt @@ -8,14 +8,14 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patches.shared.customspeed.fingerprints.SpeedArrayGeneratorFingerprint import app.revanced.patches.shared.customspeed.fingerprints.SpeedLimiterFallBackFingerprint import app.revanced.patches.shared.customspeed.fingerprints.SpeedLimiterFingerprint -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithFieldReferenceTypeOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.NarrowLiteralInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference abstract class BaseCustomPlaybackSpeedPatch( private val descriptor: String, @@ -39,7 +39,9 @@ abstract class BaseCustomPlaybackSpeedPatch( """ ) - val sizeIndex = getTargetIndexWithMethodReferenceNameOrThrow("size") + 1 + val sizeIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "size" + } + 1 val sizeRegister = getInstruction(sizeIndex).registerA addInstructions( @@ -49,7 +51,9 @@ abstract class BaseCustomPlaybackSpeedPatch( """ ) - val arrayIndex = getTargetIndexWithFieldReferenceTypeOrThrow("[F") + val arrayIndex = indexOfFirstInstructionOrThrow { + getReference()?.type == "[F" + } val arrayRegister = getInstruction(arrayIndex).registerA addInstructions( @@ -73,7 +77,7 @@ abstract class BaseCustomPlaybackSpeedPatch( val limiterMinConstIndex = indexOfFirstInstructionOrThrow { (this as? NarrowLiteralInstruction)?.narrowLiteral == 0.25f.toRawBits() } val limiterMaxConstIndex = - getTargetIndexOrThrow(limiterMinConstIndex + 1, Opcode.CONST_HIGH16) + indexOfFirstInstructionOrThrow(limiterMinConstIndex + 1, Opcode.CONST_HIGH16) val limiterMinConstDestination = getInstruction(limiterMinConstIndex).registerA diff --git a/src/main/kotlin/app/revanced/patches/shared/dialog/BaseViewerDiscretionDialogPatch.kt b/src/main/kotlin/app/revanced/patches/shared/dialog/BaseViewerDiscretionDialogPatch.kt index 93473d2ba..79000567e 100644 --- a/src/main/kotlin/app/revanced/patches/shared/dialog/BaseViewerDiscretionDialogPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/dialog/BaseViewerDiscretionDialogPatch.kt @@ -7,10 +7,12 @@ import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.shared.dialog.fingerprints.CreateDialogFingerprint -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.getReference import app.revanced.util.getWalkerMethod +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference abstract class BaseViewerDiscretionDialogPatch( private val classDescriptor: String, @@ -22,7 +24,9 @@ abstract class BaseViewerDiscretionDialogPatch( } ) { private fun MutableMethod.invoke(isAgeVerified: Boolean) { - val showDialogIndex = getTargetIndexWithMethodReferenceNameOrThrow("show") + val showDialogIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "show" + } val dialogRegister = getInstruction(showDialogIndex).registerC val methodName = diff --git a/src/main/kotlin/app/revanced/patches/shared/drawable/DrawableColorPatch.kt b/src/main/kotlin/app/revanced/patches/shared/drawable/DrawableColorPatch.kt index cf7ee092d..c0c53cf1e 100644 --- a/src/main/kotlin/app/revanced/patches/shared/drawable/DrawableColorPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/drawable/DrawableColorPatch.kt @@ -6,9 +6,11 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.shared.drawable.fingerprints.DrawableFingerprint -import app.revanced.util.getTargetIndexWithMethodReferenceNameReversedOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference object DrawableColorPatch : BytecodePatch( setOf(DrawableFingerprint) @@ -17,26 +19,26 @@ object DrawableColorPatch : BytecodePatch( DrawableFingerprint.resultOrThrow().mutableMethod.apply { insertMethod = this - insertIndex = getTargetIndexWithMethodReferenceNameReversedOrThrow("setColor") + insertIndex = indexOfFirstInstructionReversedOrThrow { + getReference()?.name == "setColor" + } insertRegister = getInstruction(insertIndex).registerD } } - private var offset = 0 - + private lateinit var insertMethod: MutableMethod private var insertIndex: Int = 0 private var insertRegister: Int = 0 - private lateinit var insertMethod: MutableMethod - + private var offset = 0 fun injectCall( methodDescriptor: String ) { insertMethod.addInstructions( insertIndex + offset, """ - invoke-static {v$insertRegister}, $methodDescriptor - move-result v$insertRegister - """ + invoke-static {v$insertRegister}, $methodDescriptor + move-result v$insertRegister + """ ) offset += 2 } diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt index 082c25e90..542b491e0 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt @@ -18,14 +18,12 @@ import app.revanced.patches.shared.gms.fingerprints.CastContextFetchFingerprint import app.revanced.patches.shared.gms.fingerprints.CastDynamiteModuleFingerprint import app.revanced.patches.shared.gms.fingerprints.CastDynamiteModuleV2Fingerprint import app.revanced.patches.shared.gms.fingerprints.CertificateFingerprint -import app.revanced.patches.shared.gms.fingerprints.CertificateFingerprint.GET_PACKAGE_NAME_METHOD_REFERENCE import app.revanced.patches.shared.gms.fingerprints.GmsCoreSupportFingerprint import app.revanced.patches.shared.gms.fingerprints.GooglePlayUtilityFingerprint import app.revanced.patches.shared.gms.fingerprints.PrimeMethodFingerprint import app.revanced.patches.shared.gms.fingerprints.ServiceCheckFingerprint import app.revanced.patches.shared.integrations.Constants.PATCHES_PATH import app.revanced.util.getReference -import app.revanced.util.getTargetIndexWithReference import app.revanced.util.resultOrThrow import app.revanced.util.returnEarly import com.android.tools.smali.dexlib2.Opcode @@ -178,7 +176,7 @@ abstract class BaseGmsCoreSupportPatch( CertificateFingerprint.result?.mutableClass?.methods?.forEach { mutableMethod -> mutableMethod.apply { val getPackageNameIndex = - getTargetIndexWithReference(GET_PACKAGE_NAME_METHOD_REFERENCE) + CertificateFingerprint.indexOfGetPackageNameInstruction(this) if (getPackageNameIndex > -1) { val targetRegister = diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CertificateFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CertificateFingerprint.kt index 0632e3b1f..29d08c178 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CertificateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CertificateFingerprint.kt @@ -1,20 +1,28 @@ package app.revanced.patches.shared.gms.fingerprints import app.revanced.patcher.extensions.or -import app.revanced.patches.shared.gms.fingerprints.CertificateFingerprint.GET_PACKAGE_NAME_METHOD_REFERENCE -import app.revanced.util.fingerprint.ReferenceFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.shared.gms.fingerprints.CertificateFingerprint.indexOfGetPackageNameInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference /** * Method which the package name is used to check the app signature. */ -internal object CertificateFingerprint : ReferenceFingerprint( +internal object CertificateFingerprint : MethodFingerprint( returnType = "Ljava/lang/String;", accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL, parameters = emptyList(), strings = listOf("X.509", "user", "S"), - reference = { GET_PACKAGE_NAME_METHOD_REFERENCE } + customFingerprint = { methodDef, _ -> + indexOfGetPackageNameInstruction(methodDef) >= 0 + } ) { - const val GET_PACKAGE_NAME_METHOD_REFERENCE = - "Landroid/content/Context;->getPackageName()Ljava/lang/String;" + fun indexOfGetPackageNameInstruction(methodDef: Method) = + methodDef.indexOfFirstInstruction { + getReference()?.toString() == "Landroid/content/Context;->getPackageName()Ljava/lang/String;" + } } diff --git a/src/main/kotlin/app/revanced/patches/shared/litho/LithoFilterPatch.kt b/src/main/kotlin/app/revanced/patches/shared/litho/LithoFilterPatch.kt index 545556945..5536ceaec 100644 --- a/src/main/kotlin/app/revanced/patches/shared/litho/LithoFilterPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/litho/LithoFilterPatch.kt @@ -16,9 +16,9 @@ import app.revanced.patches.shared.litho.fingerprints.ByteBufferFingerprint import app.revanced.patches.shared.litho.fingerprints.EmptyComponentsFingerprint import app.revanced.patches.shared.litho.fingerprints.PathBuilderFingerprint import app.revanced.util.getReference -import app.revanced.util.getStringInstructionIndex import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode @@ -127,7 +127,7 @@ object LithoFilterPatch : BytecodePatch( val stringBuilderRegister = getInstruction(stringBuilderIndex).registerA - val emptyStringIndex = getStringInstructionIndex("") + val emptyStringIndex = indexOfFirstStringInstructionOrThrow("") val identifierRegister = getInstruction( indexOfFirstInstructionReversedOrThrow(emptyStringIndex) { opcode == Opcode.IPUT_OBJECT diff --git a/src/main/kotlin/app/revanced/patches/shared/mainactivity/BaseMainActivityResolvePatch.kt b/src/main/kotlin/app/revanced/patches/shared/mainactivity/BaseMainActivityResolvePatch.kt index 02e3c8135..e34e5d56f 100644 --- a/src/main/kotlin/app/revanced/patches/shared/mainactivity/BaseMainActivityResolvePatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/mainactivity/BaseMainActivityResolvePatch.kt @@ -7,7 +7,7 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.proxy.mutableTypes.MutableClass import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod -import app.revanced.util.getTargetIndexOrThrow +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import kotlin.properties.Delegates @@ -38,7 +38,8 @@ abstract class BaseMainActivityResolvePatch( // set onBackPressed method onBackPressedMethod = getMethod("onBackPressed") - onBackPressedMethodIndex = onBackPressedMethod.getTargetIndexOrThrow(Opcode.RETURN_VOID) + onBackPressedMethodIndex = + onBackPressedMethod.indexOfFirstInstructionOrThrow(Opcode.RETURN_VOID) // set onConfigurationChanged method onConfigurationChangedMethod = getMethod("onConfigurationChanged") diff --git a/src/main/kotlin/app/revanced/patches/shared/opus/BaseOpusCodecsPatch.kt b/src/main/kotlin/app/revanced/patches/shared/opus/BaseOpusCodecsPatch.kt index 6a8984cf2..8344971ad 100644 --- a/src/main/kotlin/app/revanced/patches/shared/opus/BaseOpusCodecsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/opus/BaseOpusCodecsPatch.kt @@ -7,11 +7,13 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.opus.fingerprints.CodecReferenceFingerprint import app.revanced.patches.shared.opus.fingerprints.CodecSelectorFingerprint -import app.revanced.util.getTargetIndexWithReferenceOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow +import com.android.tools.smali.dexlib2.Opcode 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.reference.Reference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference /** * This patch is generally not required for the latest versions of YouTube and YouTube Music. @@ -25,15 +27,14 @@ abstract class BaseOpusCodecsPatch( CodecSelectorFingerprint ) ) { - private lateinit var opusCodecReference: Reference - override fun execute(context: BytecodeContext) { - CodecReferenceFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - val targetIndex = getTargetIndexWithReferenceOrThrow("Ljava/util/Set;") - opusCodecReference = getInstruction(targetIndex).reference + val opusCodecReference = with(CodecReferenceFingerprint.resultOrThrow().mutableMethod) { + val codecIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_STATIC && + getReference()?.returnType == "Ljava/util/Set;" } + getInstruction(codecIndex).reference } CodecSelectorFingerprint.resultOrThrow().let { diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt index 3ed3ba57c..d6a487dfb 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt @@ -8,9 +8,11 @@ import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.shared.integrations.Constants.PATCHES_PATH import app.revanced.patches.shared.settingmenu.fingerprints.SettingsMenuFingerprint import app.revanced.patches.shared.viewgroup.ViewGroupMarginLayoutParamsHookPatch -import app.revanced.util.getTargetIndexWithFieldReferenceTypeOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference @Patch( description = "Hide the settings menu for YouTube or YouTube Music.", @@ -25,8 +27,9 @@ object SettingsMenuPatch : BytecodePatch( override fun execute(context: BytecodeContext) { SettingsMenuFingerprint.resultOrThrow().mutableMethod.apply { - val insertIndex = - getTargetIndexWithFieldReferenceTypeOrThrow("Landroid/support/v7/widget/RecyclerView;") + val insertIndex = indexOfFirstInstructionOrThrow { + getReference()?.type == "Landroid/support/v7/widget/RecyclerView;" + } val insertRegister = getInstruction(insertIndex).registerA addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/shared/spoofappversion/BaseSpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/shared/spoofappversion/BaseSpoofAppVersionPatch.kt index 9bcca0159..c8254ad5f 100644 --- a/src/main/kotlin/app/revanced/patches/shared/spoofappversion/BaseSpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/spoofappversion/BaseSpoofAppVersionPatch.kt @@ -6,7 +6,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patches.shared.fingerprints.CreatePlayerRequestBodyWithModelFingerprint import app.revanced.patches.shared.fingerprints.CreatePlayerRequestBodyWithModelFingerprint.indexOfReleaseInstruction -import app.revanced.util.getTargetIndexReversedOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @@ -20,7 +20,8 @@ abstract class BaseSpoofAppVersionPatch( CreatePlayerRequestBodyWithModelFingerprint.resultOrThrow().mutableMethod.apply { val versionIndex = indexOfReleaseInstruction(this) + 1 - val insertIndex = getTargetIndexReversedOrThrow(versionIndex, Opcode.IPUT_OBJECT) + val insertIndex = + indexOfFirstInstructionReversedOrThrow(versionIndex, Opcode.IPUT_OBJECT) val insertRegister = getInstruction(insertIndex).registerA addInstructions( diff --git a/src/main/kotlin/app/revanced/patches/youtube/ads/general/fingerprints/ShowDialogCommandFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/ads/general/fingerprints/ShowDialogCommandFingerprint.kt index 1edafb0b1..e747815bf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ads/general/fingerprints/ShowDialogCommandFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ads/general/fingerprints/ShowDialogCommandFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.ads.general.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.SlidingDialogAnimation -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.Opcode internal object ShowDialogCommandFingerprint : MethodFingerprint( @@ -16,7 +16,7 @@ internal object ShowDialogCommandFingerprint : MethodFingerprint( // 18.43 and earlier has a different first parameter. // Since this fingerprint is somewhat weak, work around by checking for both method parameter signatures. customFingerprint = custom@{ methodDef, _ -> - if (!methodDef.containsWideLiteralInstructionIndex(SlidingDialogAnimation)) { + if (!methodDef.containsWideLiteralInstructionValue(SlidingDialogAnimation)) { return@custom false } // 18.43 and earlier parameters are: "L", "L" diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt index 0e513c8f7..9207a4fab 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt @@ -33,11 +33,10 @@ import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.CaptionToggleContainer import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceName -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -113,8 +112,8 @@ object FeedComponentsPatch : BaseBytecodePatch( // region patch for hide caption button CaptionsButtonFingerprint.resultOrThrow().mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(CaptionToggleContainer) - val insertIndex = getTargetIndexReversedOrThrow(constIndex, Opcode.IF_EQZ) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(CaptionToggleContainer) + val insertIndex = indexOfFirstInstructionReversedOrThrow(constIndex, Opcode.IF_EQZ) val insertRegister = getInstruction(insertIndex).registerA addInstructions( @@ -126,8 +125,8 @@ object FeedComponentsPatch : BaseBytecodePatch( } CaptionsButtonSyntheticFingerprint.resultOrThrow().mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(CaptionToggleContainer) - val targetIndex = getTargetIndexOrThrow(constIndex, Opcode.MOVE_RESULT_OBJECT) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(CaptionToggleContainer) + val targetIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.MOVE_RESULT_OBJECT) val targetRegister = getInstruction(targetIndex).registerA addInstruction( @@ -198,7 +197,7 @@ object FeedComponentsPatch : BaseBytecodePatch( && reference.returnType.startsWith("L") } - val objectIndex = getTargetIndexOrThrow(Opcode.MOVE_OBJECT) + val objectIndex = indexOfFirstInstructionOrThrow(Opcode.MOVE_OBJECT) val objectRegister = getInstruction(objectIndex).registerA val jumpIndex = it.scanResult.patternScanResult!!.startIndex @@ -253,7 +252,9 @@ object FeedComponentsPatch : BaseBytecodePatch( ChannelTabRendererFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val iteratorIndex = getTargetIndexWithMethodReferenceName("hasNext") + val iteratorIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "hasNext" + } val iteratorRegister = getInstruction(iteratorIndex).registerC @@ -265,7 +266,8 @@ object FeedComponentsPatch : BaseBytecodePatch( && reference.parameterTypes == channelTabBuilderMethod.parameterTypes } - val objectIndex = getTargetIndexReversedOrThrow(targetIndex, Opcode.IGET_OBJECT) + val objectIndex = + indexOfFirstInstructionReversedOrThrow(targetIndex, Opcode.IGET_OBJECT) val objectInstruction = getInstruction(objectIndex) val objectReference = getInstruction(objectIndex).reference diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/audiotracks/AudioTracksPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/audiotracks/AudioTracksPatch.kt index bfa0c5270..a5a087b43 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/audiotracks/AudioTracksPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/audiotracks/AudioTracksPatch.kt @@ -7,7 +7,7 @@ import app.revanced.patches.youtube.general.audiotracks.fingerprints.StreamingMo import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexWithReferenceOrThrow +import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow @@ -15,6 +15,7 @@ import com.android.tools.smali.dexlib2.Opcode 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.reference.MethodReference @Suppress("unused") object AudioTracksPatch : BaseBytecodePatch( @@ -32,15 +33,14 @@ object AudioTracksPatch : BaseBytecodePatch( opcode == Opcode.CHECK_CAST && (this as ReferenceInstruction).reference.toString() == "Lcom/google/android/libraries/youtube/innertube/model/media/FormatStreamModel;" } - val arrayListIndex = getTargetIndexWithReferenceOrThrow( - formatStreamModelIndex, - "Ljava/util/List;->add(Ljava/lang/Object;)Z" - ) - val insertIndex = - getTargetIndexWithReferenceOrThrow( - arrayListIndex, - "Ljava/util/List;->isEmpty()Z" - ) + 2 + val arrayListIndex = indexOfFirstInstructionOrThrow(formatStreamModelIndex) { + opcode == Opcode.INVOKE_INTERFACE && + getReference()?.toString() == "Ljava/util/List;->add(Ljava/lang/Object;)Z" + } + val insertIndex = indexOfFirstInstructionOrThrow(arrayListIndex) { + opcode == Opcode.INVOKE_INTERFACE && + getReference()?.toString() == "Ljava/util/List;->isEmpty()Z" + } + 2 val formatStreamModelRegister = getInstruction(formatStreamModelIndex).registerA diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt index 297c3a878..dded8f631 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt @@ -27,9 +27,9 @@ import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_D import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.AccountSwitcherAccessibility import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceName -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -37,6 +37,7 @@ 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 +import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.util.MethodUtil @Suppress("unused") @@ -171,10 +172,13 @@ object LayoutComponentsPatch : BaseBytecodePatch( AccountSwitcherAccessibilityLabelFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(AccountSwitcherAccessibility) - val insertIndex = getTargetIndexOrThrow(constIndex, Opcode.IF_EQZ) - val setVisibilityIndex = - getTargetIndexWithMethodReferenceName(insertIndex, "setVisibility") + val constIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(AccountSwitcherAccessibility) + val insertIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.IF_EQZ) + val setVisibilityIndex = indexOfFirstInstructionOrThrow(insertIndex) { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setVisibility" + } val visibilityRegister = getInstruction(setVisibilityIndex).registerD @@ -209,8 +213,8 @@ object LayoutComponentsPatch : BaseBytecodePatch( // region patch for hide tooltip content TooltipContentFullscreenFingerprint.resultOrThrow().mutableMethod.apply { - val literalIndex = getWideLiteralInstructionIndex(45384061) - val targetIndex = getTargetIndexOrThrow(literalIndex, Opcode.MOVE_RESULT) + val literalIndex = indexOfFirstWideLiteralInstructionValueOrThrow(45384061) + val targetIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT) val targetRegister = getInstruction(targetIndex).registerA addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/LayoutSwitchPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/LayoutSwitchPatch.kt index 9b38b5f04..f4c8c6139 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/LayoutSwitchPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/LayoutSwitchPatch.kt @@ -10,8 +10,7 @@ import app.revanced.patches.youtube.general.layoutswitch.fingerprints.LayoutSwit import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -34,7 +33,7 @@ object LayoutSwitchPatch : BaseBytecodePatch( GetFormFactorFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val jumpIndex = getTargetIndexReversedOrThrow(Opcode.SGET_OBJECT) + val jumpIndex = indexOfFirstInstructionReversedOrThrow(Opcode.SGET_OBJECT) addInstructionsWithLabels( 0, """ @@ -56,7 +55,7 @@ object LayoutSwitchPatch : BaseBytecodePatch( LayoutSwitchFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = getTargetIndexOrThrow(Opcode.IF_NEZ) + val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.IF_NEZ) val insertRegister = getInstruction(insertIndex).registerA addInstructions( diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/GradientLoadingScreenPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/GradientLoadingScreenPatch.kt index b6d844a46..2bb8182cb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/GradientLoadingScreenPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/GradientLoadingScreenPatch.kt @@ -6,7 +6,7 @@ import app.revanced.patches.youtube.general.loadingscreen.fingerprints.GradientL import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.literalInstructionBooleanHook +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.patch.BaseBytecodePatch @Suppress("unused") @@ -29,7 +29,7 @@ object GradientLoadingScreenPatch : BaseBytecodePatch( GradientLoadingScreenPrimaryFingerprint to 45412406, GradientLoadingScreenSecondaryFingerprint to 45418917 ).forEach { (fingerprint, literal) -> - fingerprint.literalInstructionBooleanHook( + fingerprint.injectLiteralInstructionBooleanCall( literal, "$GENERAL_CLASS_DESCRIPTOR->enableGradientLoadingScreen()Z" ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt index b5a2529db..8482e06f7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt @@ -44,8 +44,8 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.indexOfWideLiteralInstructionOrThrow -import app.revanced.util.literalInstructionBooleanHook +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.AccessFlags @@ -170,7 +170,7 @@ object MiniplayerPatch : BaseBytecodePatch( } if (SettingsPatch.upward1925) { - MiniplayerModernEnabledFingerprint.literalInstructionBooleanHook( + MiniplayerModernEnabledFingerprint.injectLiteralInstructionBooleanCall( 45622882, "$INTEGRATIONS_CLASS_DESCRIPTOR->getModernMiniplayerOverride(Z)Z" ) @@ -181,11 +181,11 @@ object MiniplayerPatch : BaseBytecodePatch( // region Enable double tap action. if (SettingsPatch.upward1925) { - MiniplayerModernConstructorFingerprint.literalInstructionBooleanHook( + MiniplayerModernConstructorFingerprint.injectLiteralInstructionBooleanCall( 45628823, "$INTEGRATIONS_CLASS_DESCRIPTOR->enableMiniplayerDoubleTapAction()Z" ) - MiniplayerModernConstructorFingerprint.literalInstructionBooleanHook( + MiniplayerModernConstructorFingerprint.injectLiteralInstructionBooleanCall( 45630429, "$INTEGRATIONS_CLASS_DESCRIPTOR->getModernMiniplayerOverride(Z)Z" ) @@ -211,7 +211,8 @@ object MiniplayerPatch : BaseBytecodePatch( YtOutlinePictureInPictureWhite to YtOutlineXWhite, YtOutlineXWhite to YtOutlinePictureInPictureWhite, ).forEach { (originalResource, replacementResource) -> - val imageResourceIndex = indexOfWideLiteralInstructionOrThrow(originalResource) + val imageResourceIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(originalResource) val register = getInstruction(imageResourceIndex).registerA @@ -321,7 +322,7 @@ object MiniplayerPatch : BaseBytecodePatch( // region Enable drag and drop. if (SettingsPatch.upward1923) { - MiniplayerModernDragAndDropFingerprint.literalInstructionBooleanHook( + MiniplayerModernDragAndDropFingerprint.injectLiteralInstructionBooleanCall( 45628752, "$INTEGRATIONS_CLASS_DESCRIPTOR->enableMiniplayerDragAndDrop()Z" ) @@ -388,7 +389,7 @@ object MiniplayerPatch : BaseBytecodePatch( ) { resultOrThrow().mutableMethod.apply { val imageViewIndex = indexOfFirstInstructionOrThrow( - indexOfWideLiteralInstructionOrThrow(literalValue) + indexOfFirstWideLiteralInstructionValueOrThrow(literalValue) ) { opcode == Opcode.CHECK_CAST && getReference()?.type == hookedClassType } diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernConstructorFingerprint.kt index 47b8480c3..eba01fd68 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernConstructorFingerprint.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.general.miniplayer.fingerprints.MiniplayerModernConstructorFingerprint.constructorMethodCount import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.util.MethodUtil @@ -13,7 +13,7 @@ internal object MiniplayerModernConstructorFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, parameters = listOf("L"), customFingerprint = custom@{ methodDef, classDef -> - if (!methodDef.containsWideLiteralInstructionIndex(45623000)) // Magic number found in the constructor. + if (!methodDef.containsWideLiteralInstructionValue(45623000)) // Magic number found in the constructor. return@custom false classDef.methods.forEach { @@ -24,8 +24,8 @@ internal object MiniplayerModernConstructorFingerprint : MethodFingerprint( return@custom true // Double tap action (Used in YouTube 19.25.39+). - methodDef.containsWideLiteralInstructionIndex(45628823) - && methodDef.containsWideLiteralInstructionIndex(45630429) + methodDef.containsWideLiteralInstructionValue(45628823) + && methodDef.containsWideLiteralInstructionValue(45630429) } ) { private var constructorMethodCount = 0 diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch.kt index 51d27430c..20376d1a5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch.kt @@ -13,13 +13,16 @@ import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PAC import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.navigation.NavigationBarHookPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.literalInstructionBooleanHook +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall 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.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") object NavigationBarComponentsPatch : BaseBytecodePatch( @@ -48,7 +51,7 @@ object NavigationBarComponentsPatch : BaseBytecodePatch( // region patch for enable translucent navigation bar if (SettingsPatch.upward1923) { - TranslucentNavigationBarFingerprint.literalInstructionBooleanHook( + TranslucentNavigationBarFingerprint.injectLiteralInstructionBooleanCall( 45630927, "$GENERAL_CLASS_DESCRIPTOR->enableTranslucentNavigationBar()Z" ) @@ -85,7 +88,7 @@ object NavigationBarComponentsPatch : BaseBytecodePatch( AutoMotiveFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = getStringInstructionIndex("Android Automotive") - 1 + val insertIndex = indexOfFirstStringInstructionOrThrow("Android Automotive") - 1 val register = getInstruction(insertIndex).registerA addInstructions( @@ -103,7 +106,10 @@ object NavigationBarComponentsPatch : BaseBytecodePatch( PivotBarSetTextFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val targetIndex = getTargetIndexWithMethodReferenceNameOrThrow("setText") + val targetIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setText" + } val targetRegister = getInstruction(targetIndex).registerC addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/splashanimation/fingerprints/SplashAnimationFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/splashanimation/fingerprints/SplashAnimationFingerprint.kt index 59d0ec246..bc421d1c6 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/splashanimation/fingerprints/SplashAnimationFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/splashanimation/fingerprints/SplashAnimationFingerprint.kt @@ -2,13 +2,13 @@ package app.revanced.patches.youtube.general.splashanimation.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.DarkSplashAnimation -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue internal object SplashAnimationFingerprint : MethodFingerprint( returnType = "V", parameters = listOf("Landroid/os/Bundle;"), customFingerprint = { methodDef, _ -> methodDef.name == "onCreate" - && methodDef.containsWideLiteralInstructionIndex(DarkSplashAnimation) + && methodDef.containsWideLiteralInstructionValue(DarkSplashAnimation) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/splashanimation/fingerprints/StartUpResourceIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/splashanimation/fingerprints/StartUpResourceIdFingerprint.kt index c986eb741..339a27ecf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/splashanimation/fingerprints/StartUpResourceIdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/splashanimation/fingerprints/StartUpResourceIdFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.general.splashanimation.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object StartUpResourceIdFingerprint : MethodFingerprint( @@ -10,7 +10,7 @@ internal object StartUpResourceIdFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, parameters = listOf("I"), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(3) - && methodDef.containsWideLiteralInstructionIndex(4) + methodDef.containsWideLiteralInstructionValue(3) + && methodDef.containsWideLiteralInstructionValue(4) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt index acc992511..e68cf7155 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt @@ -39,16 +39,16 @@ 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.REGISTER_TEMPLATE_REPLACEMENT +import app.revanced.util.alsoResolve import app.revanced.util.doRecursively -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.getTargetIndexWithReferenceOrThrow -import app.revanced.util.getTargetIndexWithReferenceReversedOrThrow +import app.revanced.util.getReference import app.revanced.util.getWalkerMethod -import app.revanced.util.getWideLiteralInstructionIndex -import app.revanced.util.literalInstructionBooleanHook -import app.revanced.util.literalInstructionHook +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.patch.BaseBytecodePatch +import app.revanced.util.replaceLiteralInstructionCall import app.revanced.util.resultOrThrow import app.revanced.util.updatePatchStatus import com.android.tools.smali.dexlib2.Opcode @@ -106,7 +106,7 @@ object ToolBarComponentsPatch : BaseBytecodePatch( YtPremiumWordMarkHeader, YtWordMarkHeader ).forEach { literal -> - context.literalInstructionHook(literal, smaliInstruction) + context.replaceLiteralInstructionCall(literal, smaliInstruction) } // YouTube's headers have the form of AttributeSet, which is decoded from YouTube's built-in classes. @@ -125,13 +125,11 @@ object ToolBarComponentsPatch : BaseBytecodePatch( ) // The sidebar's header is lithoView. Add a listener to change it. - DrawerContentViewFingerprint.resolve( - context, - DrawerContentViewConstructorFingerprint.resultOrThrow().classDef - ) - DrawerContentViewFingerprint.resultOrThrow().let { + DrawerContentViewFingerprint.alsoResolve( + context, DrawerContentViewConstructorFingerprint + ).let { it.mutableMethod.apply { - val insertIndex = getTargetIndexWithMethodReferenceNameOrThrow("addView") + val insertIndex = DrawerContentViewFingerprint.indexOfAddViewInstruction(this) val insertRegister = getInstruction(insertIndex).registerD addInstruction( @@ -147,7 +145,7 @@ object ToolBarComponentsPatch : BaseBytecodePatch( setActionBarRingoMutableClass.methods.first { method -> MethodUtil.isConstructor(method) }.apply { - val insertIndex = getTargetIndexOrThrow(Opcode.IPUT_BOOLEAN) + val insertIndex = indexOfFirstInstructionOrThrow(Opcode.IPUT_BOOLEAN) val insertRegister = getInstruction(insertIndex).registerA addInstruction( @@ -172,7 +170,8 @@ object ToolBarComponentsPatch : BaseBytecodePatch( ActionBarRingoBackgroundFingerprint.resultOrThrow().let { ActionBarRingoTextFingerprint.resolve(context, it.classDef) it.mutableMethod.apply { - val viewIndex = getWideLiteralInstructionIndex(ActionBarRingoBackground) + 2 + val viewIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(ActionBarRingoBackground) + 2 val viewRegister = getInstruction(viewIndex).registerA addInstructions( @@ -281,16 +280,16 @@ object ToolBarComponentsPatch : BaseBytecodePatch( CreateSearchSuggestionsFingerprint.resultOrThrow().let { result -> result.mutableMethod.apply { - val relativeIndex = getWideLiteralInstructionIndex(40) - val replaceIndex = getTargetIndexWithReferenceReversedOrThrow( - relativeIndex, - "Landroid/widget/ImageView;->setVisibility(I)V" - ) - 1 + val relativeIndex = indexOfFirstWideLiteralInstructionValueOrThrow(40) + val replaceIndex = indexOfFirstInstructionReversedOrThrow(relativeIndex) { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.toString() == "Landroid/widget/ImageView;->setVisibility(I)V" + } - 1 - val jumpIndex = getTargetIndexWithReferenceOrThrow( - relativeIndex, - "Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;" - ) + 4 + val jumpIndex = indexOfFirstInstructionOrThrow(relativeIndex) { + opcode == Opcode.INVOKE_STATIC && + getReference()?.toString() == "Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;" + } + 4 val replaceIndexInstruction = getInstruction(replaceIndex) val replaceIndexReference = @@ -313,7 +312,7 @@ object ToolBarComponentsPatch : BaseBytecodePatch( // region patch for hide voice search button if (SettingsPatch.upward1928) { - ImageSearchButtonConfigFingerprint.literalInstructionBooleanHook( + ImageSearchButtonConfigFingerprint.injectLiteralInstructionBooleanCall( 45617544, "$GENERAL_CLASS_DESCRIPTOR->hideImageSearchButton(Z)Z" ) @@ -327,15 +326,15 @@ object ToolBarComponentsPatch : BaseBytecodePatch( // region patch for hide voice search button - SearchBarFingerprint.resolve( - context, - SearchBarParentFingerprint.resultOrThrow().classDef - ) - SearchBarFingerprint.resultOrThrow().let { + SearchBarFingerprint.alsoResolve( + context, SearchBarParentFingerprint + ).let { it.mutableMethod.apply { val startIndex = it.scanResult.patternScanResult!!.startIndex - val setVisibilityIndex = - getTargetIndexWithMethodReferenceNameOrThrow(startIndex, "setVisibility") + val setVisibilityIndex = indexOfFirstInstructionOrThrow(startIndex) { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setVisibility" + } val setVisibilityInstruction = getInstruction(setVisibilityIndex) @@ -349,12 +348,11 @@ object ToolBarComponentsPatch : BaseBytecodePatch( SearchResultFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val startIndex = getWideLiteralInstructionIndex(VoiceSearch) - val setOnClickListenerIndex = - getTargetIndexWithMethodReferenceNameOrThrow( - startIndex, - "setOnClickListener" - ) + val startIndex = indexOfFirstWideLiteralInstructionValueOrThrow(VoiceSearch) + val setOnClickListenerIndex = indexOfFirstInstructionOrThrow(startIndex) { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setOnClickListener" + } val viewRegister = getInstruction(setOnClickListenerIndex).registerC @@ -370,7 +368,7 @@ object ToolBarComponentsPatch : BaseBytecodePatch( // region patch for replace create button CreateButtonDrawableFingerprint.resultOrThrow().mutableMethod.apply { - val index = getWideLiteralInstructionIndex(YtOutlineVideoCamera) + val index = indexOfFirstWideLiteralInstructionValueOrThrow(YtOutlineVideoCamera) val register = getInstruction(index).registerA addInstructions( diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/ActionBarRingoBackgroundFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/ActionBarRingoBackgroundFingerprint.kt index 4288d5714..fd04fadfb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/ActionBarRingoBackgroundFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/ActionBarRingoBackgroundFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.general.toolbar.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.general.toolbar.fingerprints.ActionBarRingoBackgroundFingerprint.indexOfStaticInstruction import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ActionBarRingoBackground -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.Opcode @@ -13,7 +13,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference internal object ActionBarRingoBackgroundFingerprint : MethodFingerprint( returnType = "Landroid/view/View;", customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(ActionBarRingoBackground) && + methodDef.containsWideLiteralInstructionValue(ActionBarRingoBackground) && indexOfStaticInstruction(methodDef) >= 0 } ) { diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/DrawerContentViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/DrawerContentViewFingerprint.kt index 789f2b197..afda22c8d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/DrawerContentViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/DrawerContentViewFingerprint.kt @@ -1,9 +1,14 @@ package app.revanced.patches.youtube.general.toolbar.fingerprints -import app.revanced.util.fingerprint.MethodReferenceNameFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.general.toolbar.fingerprints.DrawerContentViewFingerprint.indexOfAddViewInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal object DrawerContentViewFingerprint : MethodReferenceNameFingerprint( +internal object DrawerContentViewFingerprint : MethodFingerprint( returnType = "V", parameters = listOf("L"), opcodes = listOf( @@ -12,5 +17,13 @@ internal object DrawerContentViewFingerprint : MethodReferenceNameFingerprint( Opcode.NEW_INSTANCE, Opcode.INVOKE_DIRECT, ), - reference = { "addView" } -) + customFingerprint = { methodDef, _ -> + indexOfAddViewInstruction(methodDef) >= 0 + } +) { + fun indexOfAddViewInstruction(methodDef: Method) = + methodDef.indexOfFirstInstructionReversed { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "addView" + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarFingerprint.kt index fd8eed5bb..facbc289b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarFingerprint.kt @@ -1,9 +1,12 @@ package app.revanced.patches.youtube.general.toolbar.fingerprints -import app.revanced.util.fingerprint.MethodReferenceNameFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -object SearchBarFingerprint : MethodReferenceNameFingerprint( +object SearchBarFingerprint : MethodFingerprint( returnType = "V", parameters = listOf("Ljava/lang/String;"), opcodes = listOf( @@ -12,5 +15,9 @@ object SearchBarFingerprint : MethodReferenceNameFingerprint( Opcode.IGET_BOOLEAN, Opcode.IF_EQZ ), - reference = { "isEmpty" } + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstructionReversed { + getReference()?.name == "isEmpty" + } >= 0 + } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/openlinksdirectly/OpenLinksDirectlyPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/openlinksdirectly/OpenLinksDirectlyPatch.kt index 0846f8970..676f2caef 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/openlinksdirectly/OpenLinksDirectlyPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/openlinksdirectly/OpenLinksDirectlyPatch.kt @@ -8,10 +8,13 @@ import app.revanced.patches.youtube.misc.openlinksdirectly.fingerprints.OpenLink import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.MISC_PATH import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow 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.reference.MethodReference @Suppress("unused") object OpenLinksDirectlyPatch : BaseBytecodePatch( @@ -32,7 +35,10 @@ object OpenLinksDirectlyPatch : BaseBytecodePatch( ).forEach { fingerprint -> fingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = getTargetIndexWithMethodReferenceNameOrThrow("parse") + val insertIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_STATIC && + getReference()?.name == "parse" + } val insertRegister = getInstruction(insertIndex).registerC diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/share/ShareSheetPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/share/ShareSheetPatch.kt index 58ec1dfb5..1e762dc4c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/share/ShareSheetPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/share/ShareSheetPatch.kt @@ -13,8 +13,8 @@ import app.revanced.patches.youtube.utils.integrations.Constants.MISC_PATH import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.BottomSheetRecyclerView import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -46,8 +46,8 @@ object ShareSheetPatch : BaseBytecodePatch( // Detects that the Share sheet panel has been invoked. BottomSheetRecyclerViewFingerprint.resultOrThrow().mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(BottomSheetRecyclerView) - val targetIndex = getTargetIndexOrThrow(constIndex, Opcode.CHECK_CAST) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(BottomSheetRecyclerView) + val targetIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.CHECK_CAST) val targetRegister = getInstruction(targetIndex).registerA addInstruction( diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/ambientmode/AmbientModeSwitchPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/ambientmode/AmbientModeSwitchPatch.kt index f0c43fd8d..0e4475e9b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/ambientmode/AmbientModeSwitchPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/ambientmode/AmbientModeSwitchPatch.kt @@ -10,10 +10,10 @@ import app.revanced.patches.youtube.player.ambientmode.fingerprints.PowerSaveMod import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.literalInstructionBooleanHook +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -46,12 +46,12 @@ object AmbientModeSwitchPatch : BaseBytecodePatch( ).forEach { (fingerprint, reversed) -> fingerprint.resultOrThrow().mutableMethod.apply { val stringIndex = - getStringInstructionIndex("android.os.action.POWER_SAVE_MODE_CHANGED") + indexOfFirstStringInstructionOrThrow("android.os.action.POWER_SAVE_MODE_CHANGED") val targetIndex = if (reversed) - getTargetIndexReversedOrThrow(stringIndex, Opcode.INVOKE_DIRECT) + indexOfFirstInstructionReversedOrThrow(stringIndex, Opcode.INVOKE_DIRECT) else - getTargetIndexOrThrow(stringIndex, Opcode.INVOKE_DIRECT) + indexOfFirstInstructionOrThrow(stringIndex, Opcode.INVOKE_DIRECT) val targetClass = (getInstruction(targetIndex).reference as MethodReference).definingClass @@ -87,7 +87,7 @@ object AmbientModeSwitchPatch : BaseBytecodePatch( // region patch for disable ambient mode in fullscreen - AmbientModeInFullscreenFingerprint.literalInstructionBooleanHook( + AmbientModeInFullscreenFingerprint.injectLiteralInstructionBooleanCall( 45389368, "$PLAYER_CLASS_DESCRIPTOR->disableAmbientModeInFullscreen()Z" ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/PlayerButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/PlayerButtonsPatch.kt index 81888b98b..922deb2b7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/PlayerButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/PlayerButtonsPatch.kt @@ -24,8 +24,8 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.FullS import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.PlayerCollapseButton import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.TitleAnchor import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -63,9 +63,10 @@ object PlayerButtonsPatch : BaseBytecodePatch( LayoutConstructorFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(AutoNavToggle) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(AutoNavToggle) val constRegister = getInstruction(constIndex).registerA - val jumpIndex = getTargetIndexOrThrow(constIndex + 2, Opcode.INVOKE_VIRTUAL) + 1 + val jumpIndex = + indexOfFirstInstructionOrThrow(constIndex + 2, Opcode.INVOKE_VIRTUAL) + 1 addInstructionsWithLabels( constIndex, """ @@ -124,9 +125,9 @@ object PlayerButtonsPatch : BaseBytecodePatch( // region patch for hide collapse button TitleAnchorFingerprint.resultOrThrow().mutableMethod.apply { - val titleAnchorConstIndex = getWideLiteralInstructionIndex(TitleAnchor) + val titleAnchorConstIndex = indexOfFirstWideLiteralInstructionValueOrThrow(TitleAnchor) val titleAnchorIndex = - getTargetIndexOrThrow(titleAnchorConstIndex, Opcode.MOVE_RESULT_OBJECT) + indexOfFirstInstructionOrThrow(titleAnchorConstIndex, Opcode.MOVE_RESULT_OBJECT) val titleAnchorRegister = getInstruction(titleAnchorIndex).registerA @@ -136,9 +137,9 @@ object PlayerButtonsPatch : BaseBytecodePatch( ) val playerCollapseButtonConstIndex = - getWideLiteralInstructionIndex(PlayerCollapseButton) + indexOfFirstWideLiteralInstructionValueOrThrow(PlayerCollapseButton) val playerCollapseButtonIndex = - getTargetIndexOrThrow(playerCollapseButtonConstIndex, Opcode.CHECK_CAST) + indexOfFirstInstructionOrThrow(playerCollapseButtonConstIndex, Opcode.CHECK_CAST) val playerCollapseButtonRegister = getInstruction(playerCollapseButtonIndex).registerA @@ -159,7 +160,7 @@ object PlayerButtonsPatch : BaseBytecodePatch( (instruction.value as? WideLiteralInstruction)?.wideLiteral == FullScreenButton } val constIndex = buttonCalls.elementAt(buttonCalls.size - 1).index - val castIndex = getTargetIndexOrThrow(constIndex, Opcode.CHECK_CAST) + val castIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.CHECK_CAST) val insertIndex = castIndex + 1 val insertRegister = getInstruction(castIndex).registerA @@ -180,7 +181,7 @@ object PlayerButtonsPatch : BaseBytecodePatch( PlayerControlsVisibilityModelFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val callIndex = getTargetIndexOrThrow(Opcode.INVOKE_DIRECT_RANGE) + val callIndex = indexOfFirstInstructionOrThrow(Opcode.INVOKE_DIRECT_RANGE) val callInstruction = getInstruction(callIndex) val hasNextParameterRegister = callInstruction.startRegister + HAS_NEXT diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/FullScreenButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/FullScreenButtonFingerprint.kt index 42acc32f1..09e41630f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/FullScreenButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/FullScreenButtonFingerprint.kt @@ -5,7 +5,7 @@ import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.CfFullscreenButton import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.FadeDurationFast import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.FullScreenButton -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object FullScreenButtonFingerprint : MethodFingerprint( @@ -13,10 +13,10 @@ internal object FullScreenButtonFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Landroid/view/View;"), customFingerprint = handler@{ methodDef, _ -> - if (!methodDef.containsWideLiteralInstructionIndex(FullScreenButton)) + if (!methodDef.containsWideLiteralInstructionValue(FullScreenButton)) return@handler false - methodDef.containsWideLiteralInstructionIndex(FadeDurationFast) // YouTube 18.29.38 ~ YouTube 19.18.41 - || methodDef.containsWideLiteralInstructionIndex(CfFullscreenButton) // YouTube 19.19.39 ~ + methodDef.containsWideLiteralInstructionValue(FadeDurationFast) // YouTube 18.29.38 ~ YouTube 19.18.41 + || methodDef.containsWideLiteralInstructionValue(CfFullscreenButton) // YouTube 19.19.39 ~ }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/TitleAnchorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/TitleAnchorFingerprint.kt index 263e4264d..a6c5b2eaa 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/TitleAnchorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/TitleAnchorFingerprint.kt @@ -3,12 +3,12 @@ package app.revanced.patches.youtube.player.buttons.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.PlayerCollapseButton import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.TitleAnchor -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue internal object TitleAnchorFingerprint : MethodFingerprint( returnType = "V", customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(PlayerCollapseButton) - && methodDef.containsWideLiteralInstructionIndex(TitleAnchor) + methodDef.containsWideLiteralInstructionValue(PlayerCollapseButton) + && methodDef.containsWideLiteralInstructionValue(TitleAnchor) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt index 132063250..8add5c0f8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt @@ -12,9 +12,9 @@ import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow import app.revanced.util.getWalkerMethod -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -56,14 +56,15 @@ object CommentsComponentPatch : BaseBytecodePatch( ShortsLiveStreamEmojiPickerOnClickListenerFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val emojiPickerEndpointIndex = getWideLiteralInstructionIndex(126326492) + val emojiPickerEndpointIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(126326492) val emojiPickerOnClickListenerIndex = - getTargetIndexOrThrow(emojiPickerEndpointIndex, Opcode.INVOKE_DIRECT) + indexOfFirstInstructionOrThrow(emojiPickerEndpointIndex, Opcode.INVOKE_DIRECT) val emojiPickerOnClickListenerMethod = getWalkerMethod(context, emojiPickerOnClickListenerIndex) emojiPickerOnClickListenerMethod.apply { - val insertIndex = getTargetIndexOrThrow(Opcode.IF_EQZ) + val insertIndex = indexOfFirstInstructionOrThrow(Opcode.IF_EQZ) val insertRegister = getInstruction(insertIndex).registerA diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt index 454c38629..6deb71687 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt @@ -48,11 +48,11 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.TapBl import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.video.information.VideoInformationPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.getWideLiteralInstructionIndex -import app.revanced.util.literalInstructionViewHook +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionViewCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -61,6 +61,7 @@ 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 import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") object PlayerComponentsPatch : BaseBytecodePatch( @@ -107,8 +108,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( YouTubeControlsOverlayFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(ScrimOverlay) - val targetIndex = getTargetIndexOrThrow(constIndex, Opcode.CHECK_CAST) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(ScrimOverlay) + val targetIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.CHECK_CAST) val targetParameter = getInstruction(targetIndex).reference val targetRegister = getInstruction(targetIndex).registerA @@ -144,7 +145,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( if (fingerprint == StartVideoInformerFingerprint) { hookInitVideoPanel(1) } else { - val syntheticIndex = getTargetIndexOrThrow(Opcode.NEW_INSTANCE) + val syntheticIndex = + indexOfFirstInstructionOrThrow(opcode = Opcode.NEW_INSTANCE) val syntheticReference = getInstruction(syntheticIndex).reference.toString() val syntheticClass = @@ -228,7 +230,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( DarkBackground, TapBloomView ).forEach { literal -> - QuickSeekOverlayFingerprint.literalInstructionViewHook( + QuickSeekOverlayFingerprint.injectLiteralInstructionViewCall( literal, smaliInstruction ) @@ -273,10 +275,10 @@ object PlayerComponentsPatch : BaseBytecodePatch( YouTubeControlsOverlayFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(FadeDurationFast) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(FadeDurationFast) val constRegister = getInstruction(constIndex).registerA val insertIndex = - getTargetIndexReversedOrThrow(constIndex, Opcode.INVOKE_VIRTUAL) + 1 + indexOfFirstInstructionReversedOrThrow(constIndex, Opcode.INVOKE_VIRTUAL) + 1 val jumpIndex = implementation!!.instructions.let { instruction -> insertIndex + instruction.subList(insertIndex, instruction.size - 1) .indexOfFirst { instructions -> @@ -341,11 +343,14 @@ object PlayerComponentsPatch : BaseBytecodePatch( YouTubeControlsOverlayFingerprint.resultOrThrow().let { result -> result.mutableMethod.apply { - val insertIndex = getWideLiteralInstructionIndex(SeekUndoEduOverlayStub) + val insertIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(SeekUndoEduOverlayStub) val insertRegister = getInstruction(insertIndex).registerA - val onClickListenerIndex = - getTargetIndexWithMethodReferenceNameOrThrow(insertIndex, "setOnClickListener") + val onClickListenerIndex = indexOfFirstInstructionOrThrow(insertIndex) { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setOnClickListener" + } val constComponent = getConstComponent(insertIndex, onClickListenerIndex - 1) if (constComponent.isNotEmpty()) { @@ -390,8 +395,10 @@ object PlayerComponentsPatch : BaseBytecodePatch( it.mutableClass.methods.find { method -> method.parameters == listOf("Landroid/view/View${'$'}OnClickListener;") }?.apply { - val setOnClickListenerIndex = - getTargetIndexWithMethodReferenceNameOrThrow("setOnClickListener") + val setOnClickListenerIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setOnClickListener" + } val setOnClickListenerRegister = getInstruction(setOnClickListenerIndex).registerC diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/QuickSeekOverlayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/QuickSeekOverlayFingerprint.kt index b07040639..1b7cb1ffa 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/QuickSeekOverlayFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/QuickSeekOverlayFingerprint.kt @@ -3,13 +3,13 @@ package app.revanced.patches.youtube.player.components.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.DarkBackground import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.TapBloomView -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue internal object QuickSeekOverlayFingerprint : MethodFingerprint( returnType = "V", parameters = emptyList(), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(DarkBackground) - && methodDef.containsWideLiteralInstructionIndex(TapBloomView) + methodDef.containsWideLiteralInstructionValue(DarkBackground) + && methodDef.containsWideLiteralInstructionValue(TapBloomView) }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/DescriptionComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/DescriptionComponentsPatch.kt index 3ef3d2681..c16e31639 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/DescriptionComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/DescriptionComponentsPatch.kt @@ -20,10 +20,14 @@ import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.recyclerview.BottomSheetRecyclerViewPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.alsoResolve +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow 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.reference.MethodReference @Suppress("unused") object DescriptionComponentsPatch : BaseBytecodePatch( @@ -54,23 +58,23 @@ object DescriptionComponentsPatch : BaseBytecodePatch( // In order to maintain compatibility with YouTube v18.48.39 or previous versions, // This patch is applied only to the version after YouTube v18.49.37. if (SettingsPatch.upward1849) { - RollingNumberTextViewAnimationUpdateFingerprint.resolve( - context, - RollingNumberTextViewFingerprint.resultOrThrow().classDef - ) - RollingNumberTextViewAnimationUpdateFingerprint.resultOrThrow().let { + RollingNumberTextViewAnimationUpdateFingerprint.alsoResolve( + context, RollingNumberTextViewFingerprint + ).let { it.mutableMethod.apply { val freeRegister = implementation!!.registerCount - parameters.size - 2 val imageSpanIndex = it.scanResult.patternScanResult!!.startIndex - val setTextIndex = getTargetIndexWithMethodReferenceNameOrThrow("setText") - + val setTextIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setText" + } addInstruction(setTextIndex, "nop") addInstructionsWithLabels( imageSpanIndex, """ - invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->disableRollingNumberAnimations()Z - move-result v$freeRegister - if-nez v$freeRegister, :disable_animations - """, ExternalLabel("disable_animations", getInstruction(setTextIndex)) + invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->disableRollingNumberAnimations()Z + move-result v$freeRegister + if-nez v$freeRegister, :disable_animations + """, ExternalLabel("disable_animations", getInstruction(setTextIndex)) ) } } @@ -106,13 +110,11 @@ object DescriptionComponentsPatch : BaseBytecodePatch( } } - EngagementPanelTitleFingerprint.resolve( - context, - EngagementPanelTitleParentFingerprint.resultOrThrow().classDef - ) - EngagementPanelTitleFingerprint.resultOrThrow().mutableMethod.apply { - val contentDescriptionIndex = - getTargetIndexWithMethodReferenceNameOrThrow("setContentDescription") + EngagementPanelTitleFingerprint.alsoResolve( + context, EngagementPanelTitleParentFingerprint + ).mutableMethod.apply { + val contentDescriptionIndex = EngagementPanelTitleFingerprint + .indexOfContentDescriptionInstruction(this) val contentDescriptionRegister = getInstruction(contentDescriptionIndex).registerD diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/fingerprints/EngagementPanelTitleFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/fingerprints/EngagementPanelTitleFingerprint.kt index 723f7803e..4fee2997d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/fingerprints/EngagementPanelTitleFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/descriptions/fingerprints/EngagementPanelTitleFingerprint.kt @@ -1,8 +1,22 @@ package app.revanced.patches.youtube.player.descriptions.fingerprints -import app.revanced.util.fingerprint.MethodReferenceNameFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.player.descriptions.fingerprints.EngagementPanelTitleFingerprint.indexOfContentDescriptionInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal object EngagementPanelTitleFingerprint : MethodReferenceNameFingerprint( +internal object EngagementPanelTitleFingerprint : MethodFingerprint( strings = listOf(". "), - reference = { "setContentDescription" } -) \ No newline at end of file + customFingerprint = { methodDef, _ -> + indexOfContentDescriptionInstruction(methodDef) >= 0 + } +) { + fun indexOfContentDescriptionInstruction(methodDef: Method) = + methodDef.indexOfFirstInstructionReversed { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setContentDescription" + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt index 6688bbcae..5b48b2606 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt @@ -16,12 +16,15 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.BottomSheetFooterText import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.literalInstructionBooleanHook -import app.revanced.util.literalInstructionViewHook +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall +import app.revanced.util.injectLiteralInstructionViewCall 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.reference.MethodReference @Suppress("unused") object PlayerFlyoutMenuPatch : BaseBytecodePatch( @@ -56,7 +59,7 @@ object PlayerFlyoutMenuPatch : BaseBytecodePatch( val smaliInstruction = """ invoke-static {v$REGISTER_TEMPLATE_REPLACEMENT}, $PLAYER_CLASS_DESCRIPTOR->$name(Landroid/view/View;)V """ - fingerprint.literalInstructionViewHook(BottomSheetFooterText, smaliInstruction) + fingerprint.injectLiteralInstructionViewCall(BottomSheetFooterText, smaliInstruction) } arrayOf( @@ -64,15 +67,17 @@ object PlayerFlyoutMenuPatch : BaseBytecodePatch( QualityMenuViewInflateFingerprint ).forEach { fingerprint -> fingerprint.resultOrThrow().mutableMethod.apply { - val insertIndex = getTargetIndexWithMethodReferenceNameOrThrow("addHeaderView") + val insertIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "addHeaderView" + } val insertRegister = getInstruction(insertIndex).registerD addInstructions( - insertIndex, - """ - invoke-static {v$insertRegister}, $PLAYER_CLASS_DESCRIPTOR->hidePlayerFlyoutMenuQualityHeader(Landroid/view/View;)Landroid/view/View; - move-result-object v$insertRegister - """ + insertIndex, """ + invoke-static {v$insertRegister}, $PLAYER_CLASS_DESCRIPTOR->hidePlayerFlyoutMenuQualityHeader(Landroid/view/View;)Landroid/view/View; + move-result-object v$insertRegister + """ ) } } @@ -95,7 +100,7 @@ object PlayerFlyoutMenuPatch : BaseBytecodePatch( SettingsPatch.updatePatchStatus(this) if (SettingsPatch.upward1839) { - PiPModeConfigFingerprint.literalInstructionBooleanHook( + PiPModeConfigFingerprint.injectLiteralInstructionBooleanCall( 45427407, "$PLAYER_CLASS_DESCRIPTOR->hidePiPModeMenu(Z)Z" ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/CaptionsBottomSheetFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/CaptionsBottomSheetFingerprint.kt index 5a1cbf5c5..4c086f4a2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/CaptionsBottomSheetFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/CaptionsBottomSheetFingerprint.kt @@ -4,13 +4,13 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.BottomSheetFooterText import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.SubtitleMenuSettingsFooterInfo -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object CaptionsBottomSheetFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(BottomSheetFooterText) - && methodDef.containsWideLiteralInstructionIndex(SubtitleMenuSettingsFooterInfo) + methodDef.containsWideLiteralInstructionValue(BottomSheetFooterText) + && methodDef.containsWideLiteralInstructionValue(SubtitleMenuSettingsFooterInfo) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/toggle/ChangeTogglePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/toggle/ChangeTogglePatch.kt index 9140067b6..3a2d60ae2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/toggle/ChangeTogglePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/toggle/ChangeTogglePatch.kt @@ -17,11 +17,10 @@ import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PAC import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.getReference -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow import app.revanced.util.indexOfFirstInstruction import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -139,13 +138,15 @@ object ChangeTogglePatch : BaseBytecodePatch( } val classRegister = getInstruction(iGetIndex).registerB - val stringIndex = getStringInstructionIndex("menu_item_cinematic_lighting") + val stringIndex = + indexOfFirstStringInstructionOrThrow("menu_item_cinematic_lighting") - val checkCastIndex = getTargetIndexReversedOrThrow(stringIndex, Opcode.CHECK_CAST) + val checkCastIndex = + indexOfFirstInstructionReversedOrThrow(stringIndex, Opcode.CHECK_CAST) val iGetObjectPrimaryIndex = - getTargetIndexReversedOrThrow(checkCastIndex, Opcode.IGET_OBJECT) + indexOfFirstInstructionReversedOrThrow(checkCastIndex, Opcode.IGET_OBJECT) val iGetObjectSecondaryIndex = - getTargetIndexOrThrow(checkCastIndex, Opcode.IGET_OBJECT) + indexOfFirstInstructionOrThrow(checkCastIndex, Opcode.IGET_OBJECT) val checkCastReference = getInstruction(checkCastIndex).reference @@ -154,14 +155,15 @@ object ChangeTogglePatch : BaseBytecodePatch( val iGetObjectSecondaryReference = getInstruction(iGetObjectSecondaryIndex).reference - val invokeVirtualIndex = getTargetIndexOrThrow(stringIndex, Opcode.INVOKE_VIRTUAL) + val invokeVirtualIndex = + indexOfFirstInstructionOrThrow(stringIndex, Opcode.INVOKE_VIRTUAL) val invokeVirtualInstruction = getInstruction(invokeVirtualIndex) val freeRegisterC = invokeVirtualInstruction.registerC val freeRegisterD = invokeVirtualInstruction.registerD val freeRegisterE = invokeVirtualInstruction.registerE - val insertIndex = getTargetIndexOrThrow(stringIndex, Opcode.RETURN_VOID) + val insertIndex = indexOfFirstInstructionOrThrow(stringIndex, Opcode.RETURN_VOID) addInstructionsWithLabels( insertIndex, """ diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/FullscreenComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/FullscreenComponentsPatch.kt index 8a7be9a31..852fab2a1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/FullscreenComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/FullscreenComponentsPatch.kt @@ -30,12 +30,10 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.FullS import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.QuickActionsElementContainer import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.getReference -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow import app.revanced.util.getWalkerMethod -import app.revanced.util.getWideLiteralInstructionIndex import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import app.revanced.util.updatePatchStatus @@ -80,8 +78,9 @@ object FullscreenComponentsPatch : BaseBytecodePatch( EngagementPanelFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val literalIndex = getWideLiteralInstructionIndex(FullScreenEngagementPanel) - val targetIndex = getTargetIndexOrThrow(literalIndex, Opcode.CHECK_CAST) + val literalIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(FullScreenEngagementPanel) + val targetIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.CHECK_CAST) val targetRegister = getInstruction(targetIndex).registerA addInstruction( @@ -94,7 +93,10 @@ object FullscreenComponentsPatch : BaseBytecodePatch( PlayerTitleViewFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = getTargetIndexWithMethodReferenceNameOrThrow("addView") + val insertIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "addView" + } val insertReference = getInstruction(insertIndex).reference.toString() if (!insertReference.startsWith("Landroid/widget/FrameLayout;")) @@ -115,9 +117,10 @@ object FullscreenComponentsPatch : BaseBytecodePatch( LayoutConstructorFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(AutoNavPreviewStub) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(AutoNavPreviewStub) val constRegister = getInstruction(constIndex).registerA - val jumpIndex = getTargetIndexOrThrow(constIndex + 2, Opcode.INVOKE_VIRTUAL) + 1 + val jumpIndex = + indexOfFirstInstructionOrThrow(constIndex + 2, Opcode.INVOKE_VIRTUAL) + 1 addInstructionsWithLabels( constIndex, """ @@ -159,7 +162,7 @@ object FullscreenComponentsPatch : BaseBytecodePatch( } val constIndex = containerCalls.elementAt(containerCalls.size - 1).index - val checkCastIndex = getTargetIndexOrThrow(constIndex, Opcode.CHECK_CAST) + val checkCastIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.CHECK_CAST) val insertRegister = getInstruction(checkCastIndex).registerA @@ -183,9 +186,11 @@ object FullscreenComponentsPatch : BaseBytecodePatch( YouTubeControlsOverlayFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val targetIndex = - getTargetIndexWithMethodReferenceNameOrThrow("setFocusableInTouchMode") - val walkerIndex = getTargetIndexOrThrow(targetIndex, Opcode.INVOKE_STATIC) + val targetIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setFocusableInTouchMode" + } + val walkerIndex = indexOfFirstInstructionOrThrow(targetIndex, Opcode.INVOKE_STATIC) val walkerMethod = getWalkerMethod(context, walkerIndex) walkerMethod.apply { @@ -209,14 +214,14 @@ object FullscreenComponentsPatch : BaseBytecodePatch( ClientSettingEndpointFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val getActivityIndex = getStringInstructionIndex("watch") + 2 + val getActivityIndex = indexOfFirstStringInstructionOrThrow("watch") + 2 val getActivityReference = getInstruction(getActivityIndex).reference val classRegister = getInstruction(getActivityIndex).registerB val watchDescriptorMethodIndex = - getStringInstructionIndex("start_watch_minimized") - 1 + indexOfFirstStringInstructionOrThrow("start_watch_minimized") - 1 val watchDescriptorRegister = getInstruction(watchDescriptorMethodIndex).registerD @@ -228,7 +233,7 @@ object FullscreenComponentsPatch : BaseBytecodePatch( ) // hooks Activity. - val insertIndex = getStringInstructionIndex("force_fullscreen") + val insertIndex = indexOfFirstStringInstructionOrThrow("force_fullscreen") val freeRegister = getInstruction(insertIndex).registerA addInstructions( @@ -244,9 +249,10 @@ object FullscreenComponentsPatch : BaseBytecodePatch( VideoPortraitParentFingerprint.resultOrThrow().let { it.mutableMethod.apply { val stringIndex = - getStringInstructionIndex("Acquiring NetLatencyActionLogger failed. taskId=") - val invokeIndex = getTargetIndexOrThrow(stringIndex, Opcode.INVOKE_INTERFACE) - val targetIndex = getTargetIndexOrThrow(invokeIndex, Opcode.CHECK_CAST) + indexOfFirstStringInstructionOrThrow("Acquiring NetLatencyActionLogger failed. taskId=") + val invokeIndex = + indexOfFirstInstructionOrThrow(stringIndex, Opcode.INVOKE_INTERFACE) + val targetIndex = indexOfFirstInstructionOrThrow(invokeIndex, Opcode.CHECK_CAST) val targetClass = context .findClass(getInstruction(targetIndex).reference.toString())!! .mutableClass @@ -328,8 +334,9 @@ object FullscreenComponentsPatch : BaseBytecodePatch( BroadcastReceiverFingerprint.resultOrThrow().let { result -> result.mutableMethod.apply { val stringIndex = - getStringInstructionIndex("android.intent.action.SCREEN_ON") - val insertIndex = getTargetIndexOrThrow(stringIndex, Opcode.IF_EQZ) + 1 + indexOfFirstStringInstructionOrThrow("android.intent.action.SCREEN_ON") + val insertIndex = + indexOfFirstInstructionOrThrow(stringIndex, Opcode.IF_EQZ) + 1 addInstruction( insertIndex, diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/hapticfeedback/HapticFeedBackPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/hapticfeedback/HapticFeedBackPatch.kt index c1568aef0..2712908f8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/hapticfeedback/HapticFeedBackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/hapticfeedback/HapticFeedBackPatch.kt @@ -13,7 +13,7 @@ import app.revanced.patches.youtube.player.hapticfeedback.fingerprints.ZoomHapti import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -65,7 +65,7 @@ object HapticFeedBackPatch : BaseBytecodePatch( var register = 0 if (name == "run") { - index = getTargetIndexOrThrow(Opcode.SGET) + index = indexOfFirstInstructionOrThrow(Opcode.SGET) register = getInstruction(index).registerA } diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt index 04a6e3b86..873b1bef4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt @@ -33,7 +33,11 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch.contexts import app.revanced.patches.youtube.utils.settings.SettingsPatch.updatePatchStatus import app.revanced.patches.youtube.video.information.VideoInformationPatch -import app.revanced.util.* +import app.revanced.util.getReference +import app.revanced.util.getWalkerMethod +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.patch.BaseBytecodePatch import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction35c @@ -42,6 +46,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.NarrowLiteralInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference import org.w3c.dom.Element @Suppress("DEPRECATION", "unused") @@ -151,11 +156,14 @@ object SeekbarComponentsPatch : BaseBytecodePatch( TotalTimeFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val charSequenceIndex = - getTargetIndexWithMethodReferenceNameOrThrow("getString") + 1 + val charSequenceIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "getString" + } + 1 val charSequenceRegister = getInstruction(charSequenceIndex).registerA - val textViewIndex = getTargetIndexWithMethodReferenceNameOrThrow("getText") + val textViewIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "getText" + } val textViewRegister = getInstruction(textViewIndex).registerC @@ -174,12 +182,12 @@ object SeekbarComponentsPatch : BaseBytecodePatch( // region patch for seekbar color PlayerSeekbarColorFingerprint.resultOrThrow().mutableMethod.apply { - hook(getWideLiteralInstructionIndex(InlineTimeBarColorizedBarPlayedColorDark) + 2) - hook(getWideLiteralInstructionIndex(InlineTimeBarPlayedNotHighlightedColor) + 2) + hook(InlineTimeBarColorizedBarPlayedColorDark) + hook(InlineTimeBarPlayedNotHighlightedColor) } ShortsSeekbarColorFingerprint.resultOrThrow().mutableMethod.apply { - hook(getWideLiteralInstructionIndex(ReelTimeBarPlayedColor) + 2) + hook(ReelTimeBarPlayedColor) } ControlsOverlayStyleFingerprint.resultOrThrow().let { @@ -237,7 +245,7 @@ object SeekbarComponentsPatch : BaseBytecodePatch( PlayerButtonsVisibilityFingerprint.resultOrThrow().let { it.mutableMethod.apply { val freeRegister = implementation!!.registerCount - parameters.size - 2 - val viewIndex = getTargetIndexOrThrow(Opcode.INVOKE_INTERFACE) + val viewIndex = indexOfFirstInstructionOrThrow(Opcode.INVOKE_INTERFACE) val viewRegister = getInstruction(viewIndex).registerD addInstructionsWithLabels( @@ -296,7 +304,7 @@ object SeekbarComponentsPatch : BaseBytecodePatch( // region patch for restore old seekbar thumbnails ThumbnailPreviewConfigFingerprint.result?.let { - ThumbnailPreviewConfigFingerprint.literalInstructionBooleanHook( + ThumbnailPreviewConfigFingerprint.injectLiteralInstructionBooleanCall( 45398577, "$PLAYER_CLASS_DESCRIPTOR->restoreOldSeekbarThumbnails()Z" ) @@ -310,7 +318,7 @@ object SeekbarComponentsPatch : BaseBytecodePatch( // region patch for enable cairo seekbar if (SettingsPatch.upward1923) { - CairoSeekbarConfigFingerprint.literalInstructionBooleanHook( + CairoSeekbarConfigFingerprint.injectLiteralInstructionBooleanCall( 45617850, "$PLAYER_CLASS_DESCRIPTOR->enableCairoSeekbar()Z" ) @@ -328,7 +336,8 @@ object SeekbarComponentsPatch : BaseBytecodePatch( SettingsPatch.updatePatchStatus(this) } - private fun MutableMethod.hook(insertIndex: Int) { + private fun MutableMethod.hook(literal: Long) { + val insertIndex = indexOfFirstWideLiteralInstructionValueOrThrow(literal) + 2 val insertRegister = getInstruction(insertIndex).registerA addInstructions( diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/SpeedOverlayPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/SpeedOverlayPatch.kt index 2c6f1ef1b..d4de67d25 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/SpeedOverlayPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/SpeedOverlayPatch.kt @@ -15,18 +15,15 @@ import app.revanced.patches.youtube.player.speedoverlay.fingerprints.NextGenWatc import app.revanced.patches.youtube.player.speedoverlay.fingerprints.RestoreSlideToSeekBehaviorFingerprint import app.revanced.patches.youtube.player.speedoverlay.fingerprints.SlideToSeekMotionEventFingerprint import app.revanced.patches.youtube.player.speedoverlay.fingerprints.SpeedOverlayFingerprint +import app.revanced.patches.youtube.player.speedoverlay.fingerprints.SpeedOverlayFloatValueFingerprint import app.revanced.patches.youtube.player.speedoverlay.fingerprints.SpeedOverlayTextValueFingerprint -import app.revanced.patches.youtube.player.speedoverlay.fingerprints.SpeedOverlayValueFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch +import app.revanced.util.alsoResolve import app.revanced.util.getReference -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameReversedOrThrow -import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.literalInstructionBooleanHook +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction @@ -35,6 +32,8 @@ 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 import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.util.MethodUtil @Patch(dependencies = [SharedResourceIdPatch::class]) object SpeedOverlayPatch : BytecodePatch( @@ -43,8 +42,8 @@ object SpeedOverlayPatch : BytecodePatch( NextGenWatchLayoutFingerprint, RestoreSlideToSeekBehaviorFingerprint, SpeedOverlayFingerprint, + SpeedOverlayFloatValueFingerprint, SpeedOverlayTextValueFingerprint, - SpeedOverlayValueFingerprint, ) ) { override fun execute(context: BytecodeContext) { @@ -52,36 +51,33 @@ object SpeedOverlayPatch : BytecodePatch( val restoreSlideToSeekBehaviorFingerprintResult = RestoreSlideToSeekBehaviorFingerprint.result val speedOverlayFingerprintResult = SpeedOverlayFingerprint.result - val speedOverlayValueFingerprintResult = SpeedOverlayValueFingerprint.result + val speedOverlayFloatValueFingerprintResult = SpeedOverlayFloatValueFingerprint.result val resolvable = restoreSlideToSeekBehaviorFingerprintResult != null && speedOverlayFingerprintResult != null - && speedOverlayValueFingerprintResult != null + && speedOverlayFloatValueFingerprintResult != null if (resolvable) { - // Legacy method. // Used on YouTube 18.29.38 ~ YouTube 19.17.41 - // region patch for disable speed overlay + // region patch for Disable speed overlay (Enable slide to seek) mapOf( RestoreSlideToSeekBehaviorFingerprint to 45411329, SpeedOverlayFingerprint to 45411330 ).forEach { (fingerprint, literal) -> - fingerprint.result!!.let { - fingerprint.literalInstructionBooleanHook( - literal, - "$PLAYER_CLASS_DESCRIPTOR->disableSpeedOverlay(Z)Z" - ) - } + fingerprint.injectLiteralInstructionBooleanCall( + literal, + "$PLAYER_CLASS_DESCRIPTOR->disableSpeedOverlay(Z)Z" + ) } // endregion - // region patch for custom speed overlay value + // region patch for Custom speed overlay float value - speedOverlayValueFingerprintResult!!.let { + speedOverlayFloatValueFingerprintResult!!.let { it.mutableMethod.apply { val index = it.scanResult.patternScanResult!!.startIndex val register = getInstruction(index).registerA @@ -98,13 +94,18 @@ object SpeedOverlayPatch : BytecodePatch( // endregion } else { - // New method. // Used on YouTube 19.18.41~ - NextGenWatchLayoutFingerprint.resultOrThrow().mutableMethod.apply { - val booleanValueIndex = getTargetIndexWithMethodReferenceNameOrThrow("booleanValue") + // region patch for Disable speed overlay (Enable slide to seek) - val insertIndex = findIGetIndex(booleanValueIndex - 10, booleanValueIndex) + NextGenWatchLayoutFingerprint.resultOrThrow().mutableMethod.apply { + val booleanValueIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "booleanValue" + } + val insertIndex = indexOfFirstInstructionOrThrow(booleanValueIndex - 10) { + opcode == Opcode.IGET_OBJECT + && getReference()?.definingClass == definingClass + } val insertInstruction = getInstruction(insertIndex) val insertReference = getInstruction(insertIndex).reference @@ -113,77 +114,107 @@ object SpeedOverlayPatch : BytecodePatch( "iget-object v${insertInstruction.registerA}, v${insertInstruction.registerB}, $insertReference" ) - val jumpIndex = findIGetIndex(booleanValueIndex, booleanValueIndex + 10) + val jumpIndex = indexOfFirstInstructionOrThrow(booleanValueIndex) { + opcode == Opcode.IGET_OBJECT + && getReference()?.definingClass == definingClass + } hook(insertIndex + 1, insertInstruction.registerA, jumpIndex) } - SlideToSeekMotionEventFingerprint.resolve( - context, - HorizontalTouchOffsetConstructorFingerprint.resultOrThrow().classDef - ) - SlideToSeekMotionEventFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - val scanResult = it.scanResult.patternScanResult!! + val (slideToSeekBooleanMethod, slideToSeekSyntheticMethod) = + SlideToSeekMotionEventFingerprint.alsoResolve( + context, HorizontalTouchOffsetConstructorFingerprint + ).let { + with(it.mutableMethod) { + val scanResult = it.scanResult.patternScanResult!! + val jumpIndex = scanResult.endIndex + 1 + val insertIndex = scanResult.endIndex - 1 + val insertRegister = + getInstruction(insertIndex).registerA - val slideToSeekBooleanIndex = scanResult.startIndex + 1 - slideToSeekBooleanMethod = getWalkerMethod(context, slideToSeekBooleanIndex) + hook(insertIndex, insertRegister, jumpIndex) - val jumpIndex = scanResult.endIndex + 1 - val insertIndex = scanResult.endIndex - 1 - val insertRegister = - getInstruction(insertIndex).registerA + val slideToSeekBooleanMethod = context.toMethodWalker(it.mutableMethod) + .nextMethod(scanResult.startIndex + 1, true) + .getMethod() as MutableMethod + + val slideToSeekConstructorMethod = + context.findClass { classDef -> classDef.type == slideToSeekBooleanMethod.definingClass } + ?.mutableClass + ?.methods + ?.find { method -> MethodUtil.isConstructor(method) } + ?: throw PatchException("Could not find constructor method") + + val slideToSeekSyntheticIndex = slideToSeekConstructorMethod + .indexOfFirstInstructionReversedOrThrow { + opcode == Opcode.NEW_INSTANCE + } + + val slideToSeekSyntheticClass = slideToSeekConstructorMethod + .getInstruction(slideToSeekSyntheticIndex) + .reference + .toString() + + val slideToSeekSyntheticMethod = + context.findClass { classDef -> classDef.type == slideToSeekSyntheticClass } + ?.mutableClass + ?.methods + ?.find { method -> method.name == "run" } + ?: throw PatchException("Could not find synthetic method") + + Pair(slideToSeekBooleanMethod, slideToSeekSyntheticMethod) + } + } - hook(insertIndex, insertRegister, jumpIndex) + slideToSeekBooleanMethod.apply { + val insertIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.IGET_OBJECT } + val insertRegister = getInstruction(insertIndex).registerA + val jumpIndex = indexOfFirstInstructionReversedOrThrow { + opcode == Opcode.INVOKE_VIRTUAL + } + + hook(insertIndex, insertRegister, jumpIndex) } - slideToSeekBooleanMethod.apply { - var insertIndex = getTargetIndexOrThrow(Opcode.IGET_OBJECT) - var insertRegister = getInstruction(insertIndex).registerA - var jumpIndex = getTargetIndexReversedOrThrow(Opcode.INVOKE_VIRTUAL) + slideToSeekSyntheticMethod.apply { + val speedOverlayFloatValueIndex = indexOfFirstInstructionOrThrow { + (this as? NarrowLiteralInstruction)?.narrowLiteral == 2.0f.toRawBits() + } + val insertIndex = + indexOfFirstInstructionReversedOrThrow(speedOverlayFloatValueIndex) { + getReference()?.name == "removeCallbacks" + } + 1 + val insertRegister = + getInstruction(insertIndex - 1).registerC + val jumpIndex = + indexOfFirstInstructionOrThrow( + speedOverlayFloatValueIndex, + Opcode.RETURN_VOID + ) + 1 hook(insertIndex, insertRegister, jumpIndex) + } - val constructorMethod = - context.findClass(definingClass)?.mutableClass - ?.methods?.find { method -> method.name == "" } - ?: throw PatchException("Could not find constructor method") - - constructorMethod.apply { - val syntheticIndex = getTargetIndexReversedOrThrow(Opcode.NEW_INSTANCE) - val syntheticClass = - getInstruction(syntheticIndex).reference.toString() - - val syntheticMethod = - context.findClass(syntheticClass)?.mutableClass - ?.methods?.find { method -> method.name == "run" } - ?: throw PatchException("Could not find synthetic method") - - syntheticMethod.apply { - val speedOverlayValueIndex = - indexOfFirstInstructionOrThrow { (this as? NarrowLiteralInstruction)?.narrowLiteral == 2.0f.toRawBits() } - val speedOverlayValueRegister = - getInstruction(speedOverlayValueIndex).registerA - - addInstructions( - speedOverlayValueIndex + 1, """ - invoke-static {v$speedOverlayValueRegister}, $PLAYER_CLASS_DESCRIPTOR->speedOverlayValue(F)F - move-result v$speedOverlayValueRegister - """ - ) - - insertIndex = getTargetIndexWithMethodReferenceNameReversedOrThrow( - speedOverlayValueIndex, - "removeCallbacks" - ) + 1 - insertRegister = - getInstruction(insertIndex - 1).registerC - jumpIndex = - getTargetIndexOrThrow(speedOverlayValueIndex, Opcode.RETURN_VOID) + 1 - hook(insertIndex, insertRegister, jumpIndex) - } + // endregion + + // region patch for Custom speed overlay float value + + slideToSeekSyntheticMethod.apply { + val speedOverlayFloatValueIndex = indexOfFirstInstructionOrThrow { + (this as? NarrowLiteralInstruction)?.narrowLiteral == 2.0f.toRawBits() } + val speedOverlayFloatValueRegister = + getInstruction(speedOverlayFloatValueIndex).registerA + + addInstructions( + speedOverlayFloatValueIndex + 1, """ + invoke-static {v$speedOverlayFloatValueRegister}, $PLAYER_CLASS_DESCRIPTOR->speedOverlayValue(F)F + move-result v$speedOverlayFloatValueRegister + """ + ) } SpeedOverlayTextValueFingerprint.resultOrThrow().let { @@ -200,11 +231,12 @@ object SpeedOverlayPatch : BytecodePatch( ) } } + + // endregion + } } - private lateinit var slideToSeekBooleanMethod: MutableMethod - // restore slide to seek private fun MutableMethod.hook( insertIndex: Int, @@ -220,14 +252,4 @@ object SpeedOverlayPatch : BytecodePatch( """, ExternalLabel("disable", getInstruction(jumpIndex)) ) } - - private fun MutableMethod.findIGetIndex( - startIndex: Int, - endIndex: Int - ): Int = implementation!!.instructions.let { instruction -> - startIndex + instruction.subList(startIndex, endIndex).indexOfFirst { - it.opcode == Opcode.IGET_OBJECT - && it.getReference()?.definingClass == definingClass - } - } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/NextGenWatchLayoutFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/NextGenWatchLayoutFingerprint.kt index f5ef60b0c..4e54b4a7e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/NextGenWatchLayoutFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/NextGenWatchLayoutFingerprint.kt @@ -2,8 +2,10 @@ package app.revanced.patches.youtube.player.speedoverlay.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.containsMethodReferenceNameInstructionIndex +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.iface.reference.MethodReference internal object NextGenWatchLayoutFingerprint : MethodFingerprint( returnType = "Z", @@ -13,6 +15,8 @@ internal object NextGenWatchLayoutFingerprint : MethodFingerprint( if (methodDef.definingClass != "Lcom/google/android/apps/youtube/app/watch/nextgenwatch/ui/NextGenWatchLayout;") return@handler false - methodDef.containsMethodReferenceNameInstructionIndex("booleanValue") + methodDef.indexOfFirstInstruction { + getReference()?.name == "booleanValue" + } >= 0 } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/RestoreSlideToSeekBehaviorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/RestoreSlideToSeekBehaviorFingerprint.kt index e27dac2f0..a6904c670 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/RestoreSlideToSeekBehaviorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/RestoreSlideToSeekBehaviorFingerprint.kt @@ -5,6 +5,7 @@ import com.android.tools.smali.dexlib2.Opcode /** * This value restores the 'Slide to seek' behavior. + * Deprecated in YouTube v19.18.41+. */ internal object RestoreSlideToSeekBehaviorFingerprint : LiteralValueFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFingerprint.kt index dd1fc9e7e..ad71e2e0d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFingerprint.kt @@ -5,6 +5,7 @@ import com.android.tools.smali.dexlib2.Opcode /** * This value disables 'Playing at 2x speed' while holding down. + * Deprecated in YouTube v19.18.41+. */ internal object SpeedOverlayFingerprint : LiteralValueFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayValueFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFloatValueFingerprint.kt similarity index 81% rename from src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayValueFingerprint.kt rename to src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFloatValueFingerprint.kt index c60dc03f8..d5557db6b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayValueFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFloatValueFingerprint.kt @@ -7,8 +7,9 @@ import com.android.tools.smali.dexlib2.Opcode /** * This value is the key for the playback speed overlay value. + * Deprecated in YouTube v19.18.41+. */ -internal object SpeedOverlayValueFingerprint : LiteralValueFingerprint( +internal object SpeedOverlayFloatValueFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, opcodes = listOf(Opcode.DOUBLE_TO_FLOAT), diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayTextValueFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayTextValueFingerprint.kt index 434305547..53de379db 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayTextValueFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayTextValueFingerprint.kt @@ -1,14 +1,21 @@ package app.revanced.patches.youtube.player.speedoverlay.fingerprints import app.revanced.patcher.extensions.or -import app.revanced.util.fingerprint.ReferenceFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal object SpeedOverlayTextValueFingerprint : ReferenceFingerprint( +internal object SpeedOverlayTextValueFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, parameters = emptyList(), opcodes = listOf(Opcode.CONST_WIDE_HIGH16), - reference = { "Ljava/math/BigDecimal;->signum()I" } + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + getReference()?.toString() == "Ljava/math/BigDecimal;->signum()I" + } >= 0 + } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsAnimationPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsAnimationPatch.kt index 153517b64..118a6eac0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsAnimationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsAnimationPatch.kt @@ -15,8 +15,8 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelF import app.revanced.patches.youtube.utils.settings.SettingsPatch.contexts import app.revanced.util.ResourceGroup import app.revanced.util.copyResources -import app.revanced.util.getWideLiteralInstructionIndex import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -38,7 +38,7 @@ object ShortsAnimationPatch : BytecodePatch( ReelFeedbackPause to "setShortsPauseFeedback", ReelFeedbackPlay to "setShortsPlayFeedback", ).forEach { (literal, methodName) -> - val literalIndex = getWideLiteralInstructionIndex(literal) + val literalIndex = indexOfFirstWideLiteralInstructionValueOrThrow(literal) val viewIndex = indexOfFirstInstructionOrThrow(literalIndex) { opcode == Opcode.CHECK_CAST && (this as? ReferenceInstruction)?.reference?.toString() == LOTTIE_ANIMATION_VIEW_CLASS_DESCRIPTOR diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt index a213ff0f0..e30dac5c8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt @@ -35,12 +35,12 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.Right import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.video.information.VideoInformationPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.getTargetIndexWithReferenceOrThrow -import app.revanced.util.getWideLiteralInstructionIndex -import app.revanced.util.literalInstructionHook +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.patch.BaseBytecodePatch +import app.revanced.util.replaceLiteralInstructionCall import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction @@ -48,6 +48,7 @@ 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 import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") object ShortsComponentPatch : BaseBytecodePatch( @@ -106,10 +107,11 @@ object ShortsComponentPatch : BaseBytecodePatch( ShortsButtonFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(ReelRightDislikeIcon) + val constIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(ReelRightDislikeIcon) val constRegister = getInstruction(constIndex).registerA - val jumpIndex = getTargetIndexOrThrow(constIndex, Opcode.CONST_CLASS) + 2 + val jumpIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.CONST_CLASS) + 2 addInstructionsWithLabels( constIndex + 1, """ @@ -128,9 +130,9 @@ object ShortsComponentPatch : BaseBytecodePatch( ShortsButtonFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = getWideLiteralInstructionIndex(ReelRightLikeIcon) + val insertIndex = indexOfFirstWideLiteralInstructionValueOrThrow(ReelRightLikeIcon) val insertRegister = getInstruction(insertIndex).registerA - val jumpIndex = getTargetIndexOrThrow(insertIndex, Opcode.CONST_CLASS) + 2 + val jumpIndex = indexOfFirstInstructionOrThrow(insertIndex, Opcode.CONST_CLASS) + 2 addInstructionsWithLabels( insertIndex + 1, """ @@ -152,11 +154,12 @@ object ShortsComponentPatch : BaseBytecodePatch( if (shortsPivotLegacyFingerprintResult != null) { // Legacy method. shortsPivotLegacyFingerprintResult.mutableMethod.apply { - val targetIndex = getWideLiteralInstructionIndex(ReelForcedMuteButton) + val targetIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(ReelForcedMuteButton) val targetRegister = getInstruction(targetIndex).registerA - val insertIndex = getTargetIndexReversedOrThrow(targetIndex, Opcode.IF_EQZ) - val jumpIndex = getTargetIndexOrThrow(targetIndex, Opcode.GOTO) + val insertIndex = indexOfFirstInstructionReversedOrThrow(targetIndex, Opcode.IF_EQZ) + val jumpIndex = indexOfFirstInstructionOrThrow(targetIndex, Opcode.GOTO) addInstructionsWithLabels( insertIndex, """ @@ -173,7 +176,7 @@ object ShortsComponentPatch : BaseBytecodePatch( move-result v$REGISTER_TEMPLATE_REPLACEMENT """ - context.literalInstructionHook( + context.replaceLiteralInstructionCall( ReelPlayerRightPivotV2Size, smaliInstruction ) @@ -242,7 +245,8 @@ object ShortsComponentPatch : BaseBytecodePatch( lateinit var subscriptionFieldReference: FieldReference parentResult.mutableMethod.apply { - val targetIndex = getWideLiteralInstructionIndex(ReelPlayerFooter) - 1 + val targetIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(ReelPlayerFooter) - 1 subscriptionFieldReference = (getInstruction(targetIndex)).reference as FieldReference } @@ -297,9 +301,9 @@ object ShortsComponentPatch : BaseBytecodePatch( TextComponentSpecFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = - getTargetIndexWithReferenceOrThrow("Landroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;") - + val insertIndex = indexOfFirstInstructionOrThrow { + getReference()?.toString() == "Landroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;" + } val charSequenceRegister = getInstruction(insertIndex).registerC val conversionContextRegister = @@ -342,11 +346,11 @@ object ShortsComponentPatch : BaseBytecodePatch( ) { resultOrThrow().let { it.mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(id) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(id) val insertIndex = if (reversed) - getTargetIndexReversedOrThrow(constIndex, Opcode.CHECK_CAST) + indexOfFirstInstructionReversedOrThrow(constIndex, Opcode.CHECK_CAST) else - getTargetIndexOrThrow(constIndex, Opcode.CHECK_CAST) + indexOfFirstInstructionOrThrow(constIndex, Opcode.CHECK_CAST) val insertRegister = getInstruction(insertIndex).registerA addInstruction( @@ -363,8 +367,8 @@ object ShortsComponentPatch : BaseBytecodePatch( ) { resultOrThrow().let { it.mutableMethod.apply { - val constIndex = getWideLiteralInstructionIndex(id) - val insertIndex = getTargetIndexOrThrow(constIndex, Opcode.CHECK_CAST) + val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(id) + val insertIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.CHECK_CAST) hideButtons(insertIndex, descriptor) } diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt index 776dd3191..1b91a281b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt @@ -10,10 +10,12 @@ import app.revanced.patches.youtube.shorts.components.fingerprints.RenderBottomN import app.revanced.patches.youtube.shorts.components.fingerprints.SetPivotBarFingerprint import app.revanced.patches.youtube.utils.fingerprints.InitializeButtonsFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.SHORTS_CLASS_DESCRIPTOR -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.getReference import app.revanced.util.getWalkerMethod +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference object ShortsNavigationBarPatch : BytecodePatch( setOf( @@ -51,7 +53,9 @@ object ShortsNavigationBarPatch : BytecodePatch( BottomNavigationBarFingerprint.result?.let { it.mutableMethod.apply { - val targetIndex = getTargetIndexWithMethodReferenceNameOrThrow("findViewById") + 1 + val targetIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "findViewById" + } + 1 val insertRegister = getInstruction(targetIndex).registerA addInstructions( diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsRepeatPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsRepeatPatch.kt index b7484a31c..8c16daabb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsRepeatPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsRepeatPatch.kt @@ -9,14 +9,18 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.youtube.shorts.components.fingerprints.ReelEnumConstructorFingerprint import app.revanced.patches.youtube.shorts.components.fingerprints.ReelEnumStaticFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.SHORTS_CLASS_DESCRIPTOR -import app.revanced.util.containsReferenceInstructionIndex import app.revanced.util.findMutableMethodOf -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndexOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode 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.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.util.MethodUtil object ShortsRepeatPatch : BytecodePatch( setOf(ReelEnumConstructorFingerprint) @@ -36,16 +40,15 @@ object ShortsRepeatPatch : BytecodePatch( } val endScreenStringIndex = - getStringInstructionIndex("REEL_LOOP_BEHAVIOR_END_SCREEN") + indexOfFirstStringInstructionOrThrow("REEL_LOOP_BEHAVIOR_END_SCREEN") val endScreenReferenceIndex = - getTargetIndexOrThrow(endScreenStringIndex, Opcode.SPUT_OBJECT) + indexOfFirstInstructionOrThrow(endScreenStringIndex, Opcode.SPUT_OBJECT) val endScreenReference = getInstruction(endScreenReferenceIndex).reference.toString() - val enumMethodName = ReelEnumStaticFingerprint.resultOrThrow().mutableMethod.name - val enumMethodCall = "$definingClass->$enumMethodName(I)$definingClass" + val enumMethod = ReelEnumStaticFingerprint.resultOrThrow().mutableMethod - context.injectHook(endScreenReference, enumMethodCall) + context.injectHook(endScreenReference, enumMethod) } } } @@ -54,8 +57,8 @@ object ShortsRepeatPatch : BytecodePatch( enumName: String, fieldName: String ) { - val stringIndex = getStringInstructionIndex(enumName) - val insertIndex = getTargetIndexOrThrow(stringIndex, Opcode.SPUT_OBJECT) + val stringIndex = indexOfFirstStringInstructionOrThrow(enumName) + val insertIndex = indexOfFirstInstructionOrThrow(stringIndex, Opcode.SPUT_OBJECT) val insertRegister = getInstruction(insertIndex).registerA addInstruction( @@ -66,35 +69,41 @@ object ShortsRepeatPatch : BytecodePatch( private fun BytecodeContext.injectHook( endScreenReference: String, - enumMethodCall: String + enumMethod: MutableMethod ) { classes.forEach { classDef -> classDef.methods.filter { method -> method.parameters.size == 1 && method.parameters[0].startsWith("L") && method.returnType == "V" - && method.containsReferenceInstructionIndex(endScreenReference) + && method.indexOfFirstInstruction { + getReference()?.toString() == endScreenReference + } >= 0 }.forEach { targetMethod -> proxy(classDef) .mutableClass .findMutableMethodOf(targetMethod) .apply { - for ((index, instruction) in implementation!!.instructions.withIndex()) { - if (instruction.opcode != Opcode.INVOKE_STATIC) - continue - if ((instruction as ReferenceInstruction).reference.toString() != enumMethodCall) - continue + implementation!!.instructions + .withIndex() + .filter { (_, instruction) -> + val reference = (instruction as? ReferenceInstruction)?.reference + reference is MethodReference && + MethodUtil.methodSignaturesMatch(enumMethod, reference) + } + .map { (index, _) -> index } + .reversed() + .forEach { index -> + val register = + getInstruction(index + 1).registerA - val register = - getInstruction(index + 1).registerA - - addInstructions( - index + 2, """ - invoke-static {v$register}, $SHORTS_CLASS_DESCRIPTOR->changeShortsRepeatState(Ljava/lang/Enum;)Ljava/lang/Enum; - move-result-object v$register - """ - ) - } + addInstructions( + index + 2, """ + invoke-static {v$register}, $SHORTS_CLASS_DESCRIPTOR->changeShortsRepeatState(Ljava/lang/Enum;)Ljava/lang/Enum; + move-result-object v$register + """ + ) + } } } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsTimeStampPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsTimeStampPatch.kt index cf5371223..dfdc55a3f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsTimeStampPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsTimeStampPatch.kt @@ -13,9 +13,9 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.MetaP import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelVodTimeStampsContainer import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT -import app.revanced.util.getWideLiteralInstructionIndex -import app.revanced.util.literalInstructionBooleanHook -import app.revanced.util.literalInstructionViewHook +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall +import app.revanced.util.injectLiteralInstructionViewCall import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -38,14 +38,14 @@ object ShortsTimeStampPatch : BytecodePatch( ShortsTimeStampPrimaryFingerprint to 45638282, ShortsTimeStampSecondaryFingerprint to 45638187 ).forEach { (fingerprint, literal) -> - fingerprint.literalInstructionBooleanHook( + fingerprint.injectLiteralInstructionBooleanCall( literal, "$SHORTS_CLASS_DESCRIPTOR->enableShortsTimeStamp(Z)Z" ) } ShortsTimeStampPrimaryFingerprint.resultOrThrow().mutableMethod.apply { - val literalIndex = getWideLiteralInstructionIndex(10002) + val literalIndex = indexOfFirstWideLiteralInstructionValueOrThrow(10002) val literalRegister = getInstruction(literalIndex).registerA addInstructions( @@ -81,7 +81,7 @@ object ShortsTimeStampPatch : BytecodePatch( invoke-static {v$REGISTER_TEMPLATE_REPLACEMENT}, $SHORTS_CLASS_DESCRIPTOR->$methodName(Landroid/view/View;)V """ - fingerprint.literalInstructionViewHook(literalValue, smaliInstruction) + fingerprint.injectLiteralInstructionViewCall(literalValue, smaliInstruction) } // endregion diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelFeedbackFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelFeedbackFingerprint.kt index 901af28bd..5081b1ff5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelFeedbackFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelFeedbackFingerprint.kt @@ -4,13 +4,13 @@ import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelFeedbackLike import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelFeedbackPause import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelFeedbackPlay -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue internal object ReelFeedbackFingerprint : MethodFingerprint( returnType = "V", customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(ReelFeedbackLike) - && methodDef.containsWideLiteralInstructionIndex(ReelFeedbackPause) - && methodDef.containsWideLiteralInstructionIndex(ReelFeedbackPlay) + methodDef.containsWideLiteralInstructionValue(ReelFeedbackLike) + && methodDef.containsWideLiteralInstructionValue(ReelFeedbackPause) + && methodDef.containsWideLiteralInstructionValue(ReelFeedbackPlay) }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsButtonFingerprint.kt index 6f7d94c0a..12e5e844c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsButtonFingerprint.kt @@ -6,15 +6,15 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelD import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelRightDislikeIcon import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelRightLikeIcon import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.RightComment -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue internal object ShortsButtonFingerprint : MethodFingerprint( returnType = "V", customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(ReelDynRemix) - && methodDef.containsWideLiteralInstructionIndex(ReelDynShare) - && methodDef.containsWideLiteralInstructionIndex(ReelRightDislikeIcon) - && methodDef.containsWideLiteralInstructionIndex(ReelRightLikeIcon) - && methodDef.containsWideLiteralInstructionIndex(RightComment) + methodDef.containsWideLiteralInstructionValue(ReelDynRemix) + && methodDef.containsWideLiteralInstructionValue(ReelDynShare) + && methodDef.containsWideLiteralInstructionValue(ReelRightDislikeIcon) + && methodDef.containsWideLiteralInstructionValue(ReelRightLikeIcon) + && methodDef.containsWideLiteralInstructionValue(RightComment) }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampPrimaryFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampPrimaryFingerprint.kt index 9e34f0119..d2a2fdfa0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampPrimaryFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampPrimaryFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.shorts.components.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object ShortsTimeStampPrimaryFingerprint : MethodFingerprint( @@ -10,8 +10,8 @@ internal object ShortsTimeStampPrimaryFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("I"), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(45627350) - && methodDef.containsWideLiteralInstructionIndex(45638282) - && methodDef.containsWideLiteralInstructionIndex(10002) + methodDef.containsWideLiteralInstructionValue(45627350) + && methodDef.containsWideLiteralInstructionValue(45638282) + && methodDef.containsWideLiteralInstructionValue(10002) }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt index 686c02dfc..1fcad075e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt @@ -23,8 +23,8 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch.contexts import app.revanced.util.ResourceGroup import app.revanced.util.copyResources -import app.revanced.util.getWideLiteralInstructionIndex -import app.revanced.util.literalInstructionBooleanHook +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import app.revanced.util.transformMethods @@ -90,7 +90,8 @@ object SwipeControlsPatch : BaseBytecodePatch( FullScreenEngagementOverlayFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val viewIndex = getWideLiteralInstructionIndex(FullScreenEngagementOverlay) + 3 + val viewIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(FullScreenEngagementOverlay) + 3 val viewRegister = getInstruction(viewIndex).registerA addInstruction( @@ -131,7 +132,7 @@ object SwipeControlsPatch : BaseBytecodePatch( // Since it does not support all versions, // add settings only if the patch is successful. SwipeToSwitchVideoFingerprint.result?.let { - SwipeToSwitchVideoFingerprint.literalInstructionBooleanHook( + SwipeToSwitchVideoFingerprint.injectLiteralInstructionBooleanCall( 45631116, "$INTEGRATIONS_SWIPE_CONTROLS_PATCH_CLASS_DESCRIPTOR->enableSwipeToSwitchVideo()Z" ) @@ -147,7 +148,7 @@ object SwipeControlsPatch : BaseBytecodePatch( // Since it does not support all versions, // add settings only if the patch is successful. WatchPanelGesturesFingerprint.result?.let { - WatchPanelGesturesFingerprint.literalInstructionBooleanHook( + WatchPanelGesturesFingerprint.injectLiteralInstructionBooleanCall( 45372793, "$INTEGRATIONS_SWIPE_CONTROLS_PATCH_CLASS_DESCRIPTOR->enableWatchPanelGestures()Z" ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/CastButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/CastButtonPatch.kt index 6db2ab6bb..39ac28f63 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/CastButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/CastButtonPatch.kt @@ -17,11 +17,14 @@ import app.revanced.patches.youtube.utils.integrations.Constants.PATCH_STATUS_CL 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.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.alsoResolve +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow 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 +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch(dependencies = [SharedResourceIdPatch::class]) object CastButtonPatch : BytecodePatch( @@ -39,12 +42,11 @@ object CastButtonPatch : BytecodePatch( override fun execute(context: BytecodeContext) { - val toolbarMenuItemInitializeResult = MenuItemInitializeFingerprint.resultOrThrow() - MenuItemVisibilityFingerprint.resolve(context, toolbarMenuItemInitializeResult.classDef) - - toolbarMenuItemInitializeMethod = toolbarMenuItemInitializeResult.mutableMethod - toolbarMenuItemVisibilityMethod = - MenuItemVisibilityFingerprint.resultOrThrow().mutableMethod + toolbarMenuItemInitializeMethod = MenuItemInitializeFingerprint.resultOrThrow() + .mutableMethod + toolbarMenuItemVisibilityMethod = MenuItemVisibilityFingerprint.alsoResolve( + context, MenuItemInitializeFingerprint + ).mutableMethod playerButtonMethod = PlayerButtonFingerprint.resultOrThrow().mutableMethod @@ -64,7 +66,9 @@ object CastButtonPatch : BytecodePatch( internal fun hookPlayerButton(context: BytecodeContext) { playerButtonMethod.apply { - val index = getTargetIndexWithMethodReferenceNameOrThrow("setVisibility") + val index = indexOfFirstInstructionOrThrow { + getReference()?.name == "setVisibility" + } val instruction = getInstruction(index) val viewRegister = instruction.registerC val visibilityRegister = instruction.registerD @@ -84,8 +88,9 @@ object CastButtonPatch : BytecodePatch( internal fun hookToolBarButton(context: BytecodeContext) { toolbarMenuItemInitializeMethod.apply { - val index = getTargetIndexWithMethodReferenceNameOrThrow("setShowAsAction") + 1 - + val index = indexOfFirstInstructionOrThrow { + getReference()?.name == "setShowAsAction" + } + 1 addInstruction( index, "invoke-static {p1}, $GENERAL_CLASS_DESCRIPTOR->hideCastButton(Landroid/view/MenuItem;)V" diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/MenuItemVisibilityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/MenuItemVisibilityFingerprint.kt index 18e37f62c..a52f69071 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/MenuItemVisibilityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/MenuItemVisibilityFingerprint.kt @@ -1,12 +1,19 @@ package app.revanced.patches.youtube.utils.castbutton.fingerprints import app.revanced.patcher.extensions.or -import app.revanced.util.fingerprint.MethodReferenceNameFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal object MenuItemVisibilityFingerprint : MethodReferenceNameFingerprint( +internal object MenuItemVisibilityFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Z"), - reference = { "setVisible" } + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + getReference()?.name == "setVisible" + } >= 0 + } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlayerSeekbarColorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlayerSeekbarColorFingerprint.kt index e14a7ad92..20063ed0e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlayerSeekbarColorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlayerSeekbarColorFingerprint.kt @@ -4,15 +4,15 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.InlineTimeBarColorizedBarPlayedColorDark import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.InlineTimeBarPlayedNotHighlightedColor -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object PlayerSeekbarColorFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(InlineTimeBarColorizedBarPlayedColorDark) - && methodDef.containsWideLiteralInstructionIndex( + methodDef.containsWideLiteralInstructionValue(InlineTimeBarColorizedBarPlayedColorDark) + && methodDef.containsWideLiteralInstructionValue( InlineTimeBarPlayedNotHighlightedColor ) } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/YouTubeControlsOverlayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/YouTubeControlsOverlayFingerprint.kt index 727b29ced..39a48fb61 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/YouTubeControlsOverlayFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/YouTubeControlsOverlayFingerprint.kt @@ -8,7 +8,7 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.Inset import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ScrimOverlay import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.SeekUndoEduOverlayStub import app.revanced.patches.youtube.utils.sponsorblock.SponsorBlockBytecodePatch -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode @@ -26,9 +26,9 @@ internal object YouTubeControlsOverlayFingerprint : MethodFingerprint( accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, parameters = emptyList(), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(FadeDurationFast) - && methodDef.containsWideLiteralInstructionIndex(InsetOverlayViewLayout) - && methodDef.containsWideLiteralInstructionIndex(ScrimOverlay) - && methodDef.containsWideLiteralInstructionIndex(SeekUndoEduOverlayStub) + methodDef.containsWideLiteralInstructionValue(FadeDurationFast) + && methodDef.containsWideLiteralInstructionValue(InsetOverlayViewLayout) + && methodDef.containsWideLiteralInstructionValue(ScrimOverlay) + && methodDef.containsWideLiteralInstructionValue(SeekUndoEduOverlayStub) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/CfBottomUIPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/CfBottomUIPatch.kt index 2ee24f0a1..66374cddf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/CfBottomUIPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/CfBottomUIPatch.kt @@ -1,16 +1,11 @@ package app.revanced.patches.youtube.utils.fix.bottomui import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.youtube.utils.fix.bottomui.fingerprints.FullscreenButtonPositionFingerprint import app.revanced.patches.youtube.utils.fix.bottomui.fingerprints.FullscreenButtonViewStubFingerprint -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getWideLiteralInstructionIndex -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import app.revanced.util.injectLiteralInstructionBooleanCall @Patch( description = "Fixes an issue where overlay button patches were broken by the new layout." @@ -32,19 +27,10 @@ object CfBottomUIPatch : BytecodePatch( FullscreenButtonPositionFingerprint to 45627640 ).forEach { (fingerprint, literalValue) -> fingerprint.result?.let { - it.mutableMethod.apply { - val targetIndex = getTargetIndexOrThrow( - getWideLiteralInstructionIndex(literalValue.toLong()), - Opcode.MOVE_RESULT - ) - val targetRegister = - getInstruction(targetIndex).registerA - - addInstruction( - targetIndex + 1, - "const/4 v$targetRegister, 0x0" - ) - } + fingerprint.injectLiteralInstructionBooleanCall( + literalValue, + "0x0" + ) } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/CairoSettingsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/CairoSettingsPatch.kt index 74b3ee248..c20fd4a11 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/CairoSettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/CairoSettingsPatch.kt @@ -1,16 +1,11 @@ package app.revanced.patches.youtube.utils.fix.cairo import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.youtube.misc.backgroundplayback.BackgroundPlaybackPatch import app.revanced.patches.youtube.utils.fix.cairo.fingerprints.CarioFragmentConfigFingerprint -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getWideLiteralInstructionIndex -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import app.revanced.util.injectLiteralInstructionBooleanCall @Patch( description = "Fixes issues where Cairo Fragment is applied." @@ -31,19 +26,10 @@ object CairoSettingsPatch : BytecodePatch( * for screenshots of the Cairo Fragment. */ CarioFragmentConfigFingerprint.result?.let { - it.mutableMethod.apply { - val targetIndex = - getTargetIndexOrThrow( - getWideLiteralInstructionIndex(45532100), - Opcode.MOVE_RESULT - ) - val targetRegister = getInstruction(targetIndex).registerA - - addInstruction( - targetIndex + 1, - "const/4 v$targetRegister, 0x0" - ) - } + CarioFragmentConfigFingerprint.injectLiteralInstructionBooleanCall( + 45532100, + "0x0" + ) } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/shortsplayback/ShortsPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/shortsplayback/ShortsPlaybackPatch.kt index 60da209b9..9788f3bec 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/shortsplayback/ShortsPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/shortsplayback/ShortsPlaybackPatch.kt @@ -1,15 +1,10 @@ package app.revanced.patches.youtube.utils.fix.shortsplayback import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.youtube.utils.fix.shortsplayback.fingerprints.ShortsPlaybackFingerprint -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getWideLiteralInstructionIndex -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import app.revanced.util.injectLiteralInstructionBooleanCall @Patch( description = "Fix issue with looping at the start of the video when applying default video quality to Shorts." @@ -26,19 +21,10 @@ object ShortsPlaybackPatch : BytecodePatch( * RVX applies default video quality to Shorts as well, so this patch is required. */ ShortsPlaybackFingerprint.result?.let { - it.mutableMethod.apply { - val targetIndex = - getTargetIndexOrThrow( - getWideLiteralInstructionIndex(45387052), - Opcode.MOVE_RESULT - ) - val targetRegister = getInstruction(targetIndex).registerA - - addInstruction( - targetIndex + 1, - "const/4 v$targetRegister, 0x0" - ) - } + ShortsPlaybackFingerprint.injectLiteralInstructionBooleanCall( + 45387052, + "0x0" + ) } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt index 702185779..a4b297c0b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt @@ -8,9 +8,9 @@ import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.fingerprints.RemoveOnLayoutChangeListenerFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow import app.revanced.util.getWalkerMethod +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @@ -36,9 +36,10 @@ object SuggestedVideoEndScreenPatch : BytecodePatch( it.getWalkerMethod(context, it.scanResult.patternScanResult!!.endIndex) walkerIndex.apply { - val invokeInterfaceIndex = getTargetIndexOrThrow(Opcode.INVOKE_INTERFACE) + val invokeInterfaceIndex = + indexOfFirstInstructionOrThrow(opcode = Opcode.INVOKE_INTERFACE) val iGetObjectIndex = - getTargetIndexReversedOrThrow(invokeInterfaceIndex, Opcode.IGET_OBJECT) + indexOfFirstInstructionReversedOrThrow(invokeInterfaceIndex, Opcode.IGET_OBJECT) val invokeInterfaceReference = getInstruction(invokeInterfaceIndex).reference diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/RemoveOnLayoutChangeListenerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/RemoveOnLayoutChangeListenerFingerprint.kt index 2c0f744e7..2c923219b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/RemoveOnLayoutChangeListenerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/RemoveOnLayoutChangeListenerFingerprint.kt @@ -1,15 +1,18 @@ package app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.fingerprints import app.revanced.patcher.extensions.or -import app.revanced.util.fingerprint.ReferenceFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.MethodReference /** * This fingerprint is also compatible with very old YouTube versions. - * Tested on YouTube v16.40.36, v18.29.38, v19.12.41. + * Tested on YouTube v16.40.36, v18.29.38, v19.16.39. */ -internal object RemoveOnLayoutChangeListenerFingerprint : ReferenceFingerprint( +internal object RemoveOnLayoutChangeListenerFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), @@ -18,5 +21,10 @@ internal object RemoveOnLayoutChangeListenerFingerprint : ReferenceFingerprint( Opcode.INVOKE_VIRTUAL ), // This is the only reference present in the entire smali. - reference = { "YouTubePlayerOverlaysLayout;->removeOnLayoutChangeListener(Landroid/view/View${'$'}OnLayoutChangeListener;)V" } + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + getReference()?.toString() + ?.endsWith("YouTubePlayerOverlaysLayout;->removeOnLayoutChangeListener(Landroid/view/View${'$'}OnLayoutChangeListener;)V") == true + } >= 0 + } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsPatch.kt index 324b69131..638c0fa83 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsPatch.kt @@ -16,8 +16,8 @@ import app.revanced.patches.youtube.utils.playercontrols.fingerprints.MotionEven import app.revanced.patches.youtube.utils.playercontrols.fingerprints.PlayerControlsVisibilityEntityModelFingerprint import app.revanced.patches.youtube.utils.playercontrols.fingerprints.PlayerControlsVisibilityFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.alsoResolve +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction @@ -50,13 +50,11 @@ object PlayerControlsPatch : BytecodePatch( // region patch for hook visibility of play control buttons (e.g. pause, play button, etc) - PlayerButtonsVisibilityFingerprint.resolve( - context, - PlayerButtonsResourcesFingerprint.resultOrThrow().mutableClass - ) - PlayerButtonsVisibilityFingerprint.resultOrThrow().let { + PlayerButtonsVisibilityFingerprint.alsoResolve( + context, PlayerButtonsResourcesFingerprint + ).let { it.mutableMethod.apply { - val viewIndex = getTargetIndexOrThrow(Opcode.INVOKE_INTERFACE) + val viewIndex = indexOfFirstInstructionOrThrow(opcode = Opcode.INVOKE_INTERFACE) val viewRegister = getInstruction(viewIndex).registerD addInstruction( @@ -70,11 +68,9 @@ object PlayerControlsPatch : BytecodePatch( // region patch for hook visibility of play controls layout - PlayerControlsVisibilityFingerprint.resolve( - context, - YouTubeControlsOverlayFingerprint.resultOrThrow().mutableClass - ) - PlayerControlsVisibilityFingerprint.resultOrThrow().mutableMethod.addInstruction( + PlayerControlsVisibilityFingerprint.alsoResolve( + context, YouTubeControlsOverlayFingerprint + ).mutableMethod.addInstruction( 0, "invoke-static {p1}, $INTEGRATIONS_CLASS_DESCRIPTOR->changeVisibility(Z)V" ) @@ -83,12 +79,10 @@ object PlayerControlsPatch : BytecodePatch( // region patch for detecting motion events in play controls layout - MotionEventFingerprint.resolve( - context, - YouTubeControlsOverlayFingerprint.resultOrThrow().mutableClass - ) - MotionEventFingerprint.resultOrThrow().mutableMethod.apply { - val insertIndex = getTargetIndexWithMethodReferenceNameOrThrow("setTranslationY") + 1 + MotionEventFingerprint.alsoResolve( + context, YouTubeControlsOverlayFingerprint + ).mutableMethod.apply { + val insertIndex = MotionEventFingerprint.indexOfTranslationInstruction(this) + 1 addInstruction( insertIndex, diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsVisibilityHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsVisibilityHookPatch.kt index b991ec65c..5f9fd61ff 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsVisibilityHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/PlayerControlsVisibilityHookPatch.kt @@ -9,7 +9,7 @@ import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH import app.revanced.patches.youtube.utils.playercontrols.fingerprints.PlayerControlsVisibilityEntityModelFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch -import app.revanced.util.getTargetIndexOrThrow +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @@ -31,7 +31,7 @@ object PlayerControlsVisibilityHookPatch : BytecodePatch( val staticReference = getInstruction(startIndex + 1).reference it.mutableClass.methods.find { method -> method.name == "" }?.apply { - val targetIndex = getTargetIndexOrThrow(Opcode.IPUT_OBJECT) + val targetIndex = indexOfFirstInstructionOrThrow(Opcode.IPUT_OBJECT) val targetRegister = getInstruction(targetIndex).registerA diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/MotionEventFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/MotionEventFingerprint.kt index 45d9d329d..743129ab4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/MotionEventFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/MotionEventFingerprint.kt @@ -1,9 +1,21 @@ package app.revanced.patches.youtube.utils.playercontrols.fingerprints -import app.revanced.util.fingerprint.MethodReferenceNameFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.utils.playercontrols.fingerprints.MotionEventFingerprint.indexOfTranslationInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal object MotionEventFingerprint : MethodReferenceNameFingerprint( +internal object MotionEventFingerprint : MethodFingerprint( returnType = "V", parameters = listOf("Landroid/view/MotionEvent;"), - reference = { "setTranslationY" } -) + customFingerprint = { methodDef, _ -> + indexOfTranslationInstruction(methodDef) >= 0 + } +) { + fun indexOfTranslationInstruction(methodDef: Method) = + methodDef.indexOfFirstInstructionReversed { + getReference()?.name == "setTranslationY" + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt index 9f208cdfe..4dc3d749a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt @@ -16,8 +16,8 @@ import app.revanced.patches.youtube.utils.playertype.fingerprint.PlayerTypeFinge import app.revanced.patches.youtube.utils.playertype.fingerprint.VideoStateFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.util.addFieldAndInstructions -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndexOrThrow +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction @@ -82,14 +82,14 @@ object PlayerTypeHookPatch : BytecodePatch( BrowseIdClassFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val targetIndex = getStringInstructionIndex("VL") - 1 + val targetIndex = indexOfFirstStringInstructionOrThrow("VL") - 1 val targetReference = getInstruction(targetIndex).reference val targetClass = context.findClass((targetReference as FieldReference).definingClass)!!.mutableClass targetClass.methods.find { method -> method.name == "" } ?.apply { - val browseIdFieldIndex = getTargetIndexOrThrow(Opcode.IPUT_OBJECT) + val browseIdFieldIndex = indexOfFirstInstructionOrThrow(Opcode.IPUT_OBJECT) val browseIdFieldName = (getInstruction(browseIdFieldIndex).reference as FieldReference).name diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ActionBarSearchResultsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ActionBarSearchResultsFingerprint.kt index 1a6452a6f..d14e8a9e5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ActionBarSearchResultsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ActionBarSearchResultsFingerprint.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.playertype.fingerprint.ActionBarSearchResultsFingerprint.indexOfLayoutDirectionInstruction import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ActionBarSearchResultsViewMic -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags @@ -16,7 +16,7 @@ internal object ActionBarSearchResultsFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "Landroid/view/View;", customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(ActionBarSearchResultsViewMic) && + methodDef.containsWideLiteralInstructionValue(ActionBarSearchResultsViewMic) && indexOfLayoutDirectionInstruction(methodDef) >= 0 } ) { diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/recyclerview/BottomSheetRecyclerViewPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/recyclerview/BottomSheetRecyclerViewPatch.kt index b04544925..560fd7437 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/recyclerview/BottomSheetRecyclerViewPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/recyclerview/BottomSheetRecyclerViewPatch.kt @@ -2,18 +2,16 @@ package app.revanced.patches.youtube.utils.recyclerview import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.youtube.utils.recyclerview.fingerprints.BottomSheetRecyclerViewBuilderFingerprint import app.revanced.patches.youtube.utils.recyclerview.fingerprints.RecyclerViewTreeObserverFingerprint import app.revanced.util.getReference -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.getWideLiteralInstructionIndex import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.reference.FieldReference object BottomSheetRecyclerViewPatch : BytecodePatch( @@ -35,15 +33,10 @@ object BottomSheetRecyclerViewPatch : BytecodePatch( * Therefore, we need to force this to be true. */ BottomSheetRecyclerViewBuilderFingerprint.result?.let { - it.mutableMethod.apply { - val targetIndex = getWideLiteralInstructionIndex(45382015) + 2 - val targetRegister = getInstruction(targetIndex).registerA - - addInstruction( - targetIndex + 1, - "const/4 v$targetRegister, 0x1" - ) - } + BottomSheetRecyclerViewBuilderFingerprint.injectLiteralInstructionBooleanCall( + 45382015, + "0x1" + ) } RecyclerViewTreeObserverFingerprint.resultOrThrow().mutableMethod.apply { @@ -54,7 +47,7 @@ object BottomSheetRecyclerViewPatch : BytecodePatch( && getReference()?.type == "Landroid/view/ViewTreeObserver${'$'}OnDrawListener;" } recyclerViewTreeObserverInsertIndex = - getTargetIndexReversedOrThrow(onDrawListenerIndex, Opcode.CHECK_CAST) + 1 + indexOfFirstInstructionReversedOrThrow(onDrawListenerIndex, Opcode.CHECK_CAST) + 1 } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt index 4095c72af..a580ea3ca 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt @@ -20,16 +20,15 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.video.information.VideoInformationPatch import app.revanced.patches.youtube.video.videoid.VideoIdPatch import app.revanced.util.getReference -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithFieldReferenceType -import app.revanced.util.getTargetIndexWithFieldReferenceTypeOrThrow import app.revanced.util.indexOfFirstInstruction +import app.revanced.util.indexOfFirstInstructionOrThrow 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 +import com.android.tools.smali.dexlib2.iface.reference.FieldReference import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") @@ -78,13 +77,15 @@ object ReturnYouTubeDislikePatch : BaseBytecodePatch( TextComponentContextFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val conversionContextFieldIndex = - getTargetIndexWithFieldReferenceTypeOrThrow("Ljava/util/Map;") - 1 + val conversionContextFieldIndex = indexOfFirstInstructionOrThrow { + getReference()?.type == "Ljava/util/Map;" + } - 1 val conversionContextFieldReference = getInstruction(conversionContextFieldIndex).reference - val charSequenceIndex1932 = - getTargetIndexWithFieldReferenceType("Ljava/util/BitSet;") - 1 + val charSequenceIndex1932 = indexOfFirstInstruction { + getReference()?.type == "Ljava/util/BitSet;" + } - 1 val charSequenceIndex1933 = indexOfFirstInstruction { val reference = getReference() opcode == Opcode.INVOKE_VIRTUAL && @@ -108,7 +109,7 @@ object ReturnYouTubeDislikePatch : BaseBytecodePatch( } val freeRegister = getInstruction( - getTargetIndexOrThrow(insertIndex, Opcode.IGET_OBJECT) + indexOfFirstInstructionOrThrow(insertIndex, Opcode.IGET_OBJECT) ).registerA addInstructions( diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/ReturnYouTubeDislikeRollingNumberPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/ReturnYouTubeDislikeRollingNumberPatch.kt index 29490b004..03931cb73 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/ReturnYouTubeDislikeRollingNumberPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/ReturnYouTubeDislikeRollingNumberPatch.kt @@ -17,14 +17,15 @@ import app.revanced.patches.youtube.utils.returnyoutubedislike.rollingnumber.fin import app.revanced.patches.youtube.utils.returnyoutubedislike.rollingnumber.fingerprints.RollingNumberMeasureTextParentFingerprint import app.revanced.patches.youtube.utils.returnyoutubedislike.rollingnumber.fingerprints.RollingNumberSetterFingerprint import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow 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.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.iface.reference.Reference @Patch(dependencies = [SettingsPatch::class]) @@ -60,7 +61,8 @@ object ReturnYouTubeDislikeRollingNumberPatch : BytecodePatch( rollingNumberClass.methods.find { method -> method.name == "" } ?.apply { - val rollingNumberFieldIndex = getTargetIndexOrThrow(Opcode.IPUT_OBJECT) + val rollingNumberFieldIndex = + indexOfFirstInstructionOrThrow(opcode = Opcode.IPUT_OBJECT) charSequenceFieldReference = getInstruction(rollingNumberFieldIndex).reference } ?: throw PatchException("RollingNumberClass not found!") @@ -103,7 +105,7 @@ object ReturnYouTubeDislikeRollingNumberPatch : BytecodePatch( """ ) - val ifGeIndex = getTargetIndexOrThrow(Opcode.IF_GE) + val ifGeIndex = indexOfFirstInstructionOrThrow(opcode = Opcode.IF_GE) val ifGeInstruction = getInstruction(ifGeIndex) removeInstruction(ifGeIndex) @@ -153,7 +155,9 @@ object ReturnYouTubeDislikeRollingNumberPatch : BytecodePatch( realTimeUpdateTextViewMethod ).forEach { insertMethod -> insertMethod.apply { - val setTextIndex = getTargetIndexWithMethodReferenceNameOrThrow("setText") + val setTextIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "setText" + } val textViewRegister = getInstruction(setTextIndex).registerC val textSpanRegister = diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/fingerprints/RollingNumberMeasureAnimatedTextFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/fingerprints/RollingNumberMeasureAnimatedTextFingerprint.kt index 80ceaec83..a15449332 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/fingerprints/RollingNumberMeasureAnimatedTextFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/fingerprints/RollingNumberMeasureAnimatedTextFingerprint.kt @@ -1,12 +1,15 @@ package app.revanced.patches.youtube.utils.returnyoutubedislike.rollingnumber.fingerprints -import app.revanced.util.fingerprint.ReferenceFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.MethodReference /** * This fingerprint is compatible with YouTube v18.30.xx+ */ -internal object RollingNumberMeasureAnimatedTextFingerprint : ReferenceFingerprint( +internal object RollingNumberMeasureAnimatedTextFingerprint : MethodFingerprint( opcodes = listOf( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT, @@ -14,5 +17,9 @@ internal object RollingNumberMeasureAnimatedTextFingerprint : ReferenceFingerpri Opcode.ADD_INT_LIT8, Opcode.GOTO ), - reference = { "Landroid/text/TextPaint;->measureText([CII)F" } + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + getReference()?.toString() == "Landroid/text/TextPaint;->measureText([CII)F" + } >= 0 + } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt index cdb6c8946..25fd45485 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt @@ -12,14 +12,15 @@ import app.revanced.patches.youtube.utils.fingerprints.TextComponentSpecFingerpr import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH import app.revanced.patches.youtube.utils.returnyoutubedislike.shorts.fingerprints.ShortsTextViewFingerprint import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow -import app.revanced.util.getTargetIndexWithReferenceOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow 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 +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch(dependencies = [SettingsPatch::class]) object ReturnYouTubeDislikeShortsPatch : BytecodePatch( @@ -37,9 +38,9 @@ object ReturnYouTubeDislikeShortsPatch : BytecodePatch( val startIndex = it.scanResult.patternScanResult!!.startIndex val isDisLikesBooleanIndex = - getTargetIndexReversedOrThrow(startIndex, Opcode.IGET_BOOLEAN) + indexOfFirstInstructionReversedOrThrow(startIndex, Opcode.IGET_BOOLEAN) val textViewFieldIndex = - getTargetIndexReversedOrThrow(startIndex, Opcode.IGET_OBJECT) + indexOfFirstInstructionReversedOrThrow(startIndex, Opcode.IGET_OBJECT) // If the field is true, the TextView is for a dislike button. val isDisLikesBooleanReference = @@ -51,7 +52,7 @@ object ReturnYouTubeDislikeShortsPatch : BytecodePatch( // Check if the hooked TextView object is that of the dislike button. // If RYD is disabled, or the TextView object is not that of the dislike button, the execution flow is not interrupted. // Otherwise, the TextView object is modified, and the execution flow is interrupted to prevent it from being changed afterward. - val insertIndex = getTargetIndexOrThrow(Opcode.CHECK_CAST) + 1 + val insertIndex = indexOfFirstInstructionOrThrow(Opcode.CHECK_CAST) + 1 addInstructionsWithLabels( insertIndex, """ @@ -73,14 +74,13 @@ object ReturnYouTubeDislikeShortsPatch : BytecodePatch( if (SettingsPatch.upward1834) { TextComponentSpecFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = - getTargetIndexWithReferenceOrThrow("Landroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;") - + val insertIndex = indexOfFirstInstructionOrThrow { + getReference()?.toString() == "Landroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;" + } val charSequenceRegister = getInstruction(insertIndex).registerC val conversionContextRegister = getInstruction(0).registerA - val replaceReference = getInstruction(insertIndex).reference diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/SponsorBlockBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/SponsorBlockBytecodePatch.kt index 3012c270e..9bda4f425 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/SponsorBlockBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/SponsorBlockBytecodePatch.kt @@ -19,11 +19,11 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.Inset import app.revanced.patches.youtube.utils.sponsorblock.fingerprints.RectangleFieldInvalidatorFingerprint import app.revanced.patches.youtube.utils.sponsorblock.fingerprints.SegmentPlaybackControllerFingerprint import app.revanced.patches.youtube.video.information.VideoInformationPatch -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexWithFieldReferenceTypeReversedOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow -import app.revanced.util.getTargetIndexWithMethodReferenceNameReversedOrThrow -import app.revanced.util.getWideLiteralInstructionIndex +import app.revanced.util.alsoResolve +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.resultOrThrow import app.revanced.util.updatePatchStatus import com.android.tools.smali.dexlib2.Opcode @@ -31,6 +31,7 @@ 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.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch( dependencies = [ @@ -74,13 +75,11 @@ object SponsorBlockBytecodePatch : BytecodePatch( ) } - val seekBarClass = SeekbarFingerprint.resultOrThrow().mutableClass - SeekbarOnDrawFingerprint.resolve(context, seekBarClass) - RectangleFieldInvalidatorFingerprint.resolve(context, seekBarClass) - - SeekbarOnDrawFingerprint.resultOrThrow().mutableMethod.apply { + SeekbarOnDrawFingerprint.alsoResolve( + context, SeekbarFingerprint + ).mutableMethod.apply { // Get left and right of seekbar rectangle - val moveObjectIndex = getTargetIndexOrThrow(Opcode.MOVE_OBJECT_FROM16) + val moveObjectIndex = indexOfFirstInstructionOrThrow(opcode = Opcode.MOVE_OBJECT_FROM16) addInstruction( moveObjectIndex + 1, @@ -89,7 +88,9 @@ object SponsorBlockBytecodePatch : BytecodePatch( ) // Set seekbar thickness - val roundIndex = getTargetIndexWithMethodReferenceNameOrThrow("round") + 1 + val roundIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "round" + } + 1 val roundRegister = getInstruction(roundIndex).registerA addInstruction( @@ -99,7 +100,9 @@ object SponsorBlockBytecodePatch : BytecodePatch( ) // Draw segment - val drawCircleIndex = getTargetIndexWithMethodReferenceNameReversedOrThrow("drawCircle") + val drawCircleIndex = indexOfFirstInstructionReversedOrThrow { + getReference()?.name == "drawCircle" + } val drawCircleInstruction = getInstruction(drawCircleIndex) addInstruction( drawCircleIndex, @@ -116,7 +119,9 @@ object SponsorBlockBytecodePatch : BytecodePatch( // Append timestamp TotalTimeFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val targetIndex = getTargetIndexWithMethodReferenceNameOrThrow("getString") + 1 + val targetIndex = indexOfFirstInstructionOrThrow { + getReference()?.name == "getString" + } + 1 val targetRegister = getInstruction(targetIndex).registerA addInstructions( @@ -131,8 +136,9 @@ object SponsorBlockBytecodePatch : BytecodePatch( // Initialize the SponsorBlock view YouTubeControlsOverlayFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val targetIndex = getWideLiteralInstructionIndex(InsetOverlayViewLayout) - val checkCastIndex = getTargetIndexOrThrow(targetIndex, Opcode.CHECK_CAST) + val targetIndex = + indexOfFirstWideLiteralInstructionValueOrThrow(InsetOverlayViewLayout) + val checkCastIndex = indexOfFirstInstructionOrThrow(targetIndex, Opcode.CHECK_CAST) val targetRegister = getInstruction(checkCastIndex).registerA @@ -144,14 +150,15 @@ object SponsorBlockBytecodePatch : BytecodePatch( } // Replace strings - RectangleFieldInvalidatorFingerprint.resultOrThrow().let { result -> + RectangleFieldInvalidatorFingerprint.alsoResolve( + context, SeekbarFingerprint + ).let { result -> result.mutableMethod.apply { val invalidateIndex = - getTargetIndexWithMethodReferenceNameReversedOrThrow("invalidate") - val rectangleIndex = getTargetIndexWithFieldReferenceTypeReversedOrThrow( - invalidateIndex + 1, - "Landroid/graphics/Rect;" - ) + RectangleFieldInvalidatorFingerprint.indexOfInvalidateInstruction(this) + val rectangleIndex = indexOfFirstInstructionReversedOrThrow(invalidateIndex + 1) { + getReference()?.type == "Landroid/graphics/Rect;" + } val rectangleFieldName = (getInstruction(rectangleIndex).reference as FieldReference).name diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/fingerprints/RectangleFieldInvalidatorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/fingerprints/RectangleFieldInvalidatorFingerprint.kt index 598513e7c..89415c67a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/fingerprints/RectangleFieldInvalidatorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/fingerprints/RectangleFieldInvalidatorFingerprint.kt @@ -1,9 +1,21 @@ package app.revanced.patches.youtube.utils.sponsorblock.fingerprints -import app.revanced.util.fingerprint.MethodReferenceNameFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.utils.sponsorblock.fingerprints.RectangleFieldInvalidatorFingerprint.indexOfInvalidateInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal object RectangleFieldInvalidatorFingerprint : MethodReferenceNameFingerprint( +internal object RectangleFieldInvalidatorFingerprint : MethodFingerprint( returnType = "V", parameters = emptyList(), - reference = { "invalidate" } -) + customFingerprint = { methodDef, _ -> + indexOfInvalidateInstruction(methodDef) >= 0 + } +) { + fun indexOfInvalidateInstruction(methodDef: Method) = + methodDef.indexOfFirstInstructionReversed { + getReference()?.name == "invalidate" + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/trackingurlhook/TrackingUrlHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/trackingurlhook/TrackingUrlHookPatch.kt index b2e2464b6..5012f0c09 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/trackingurlhook/TrackingUrlHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/trackingurlhook/TrackingUrlHookPatch.kt @@ -6,9 +6,12 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.youtube.utils.trackingurlhook.fingerprints.TrackingUrlModelFingerprint -import app.revanced.util.getTargetIndexWithMethodReferenceNameOrThrow +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow +import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference object TrackingUrlHookPatch : BytecodePatch( setOf(TrackingUrlModelFingerprint) @@ -22,7 +25,10 @@ object TrackingUrlHookPatch : BytecodePatch( internal fun hookTrackingUrl( descriptor: String ) = trackingUrlMethod.apply { - val targetIndex = getTargetIndexWithMethodReferenceNameOrThrow("parse") + 1 + val targetIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_STATIC && + getReference()?.name == "parse" + } + 1 val targetRegister = getInstruction(targetIndex).registerA var smaliInstruction = "invoke-static {v$targetRegister}, $descriptor" diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt index ddeab2fa5..b647bbb30 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt @@ -40,11 +40,10 @@ import app.revanced.patches.youtube.video.videoid.VideoIdPatch import app.revanced.util.addFieldAndInstructions import app.revanced.util.alsoResolve import app.revanced.util.getReference -import app.revanced.util.getTargetIndexOrThrow -import app.revanced.util.getTargetIndexReversedOrThrow import app.revanced.util.getWalkerMethod -import app.revanced.util.getWideLiteralInstructionIndex import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode @@ -232,9 +231,12 @@ object VideoInformationPatch : BytecodePatch( "videoInformationClass" ) - val literalIndex = getWideLiteralInstructionIndex(45368273) + val literalIndex = indexOfFirstWideLiteralInstructionValueOrThrow(45368273) val walkerIndex = - getTargetIndexReversedOrThrow(literalIndex, Opcode.INVOKE_VIRTUAL_RANGE) + indexOfFirstInstructionReversedOrThrow( + literalIndex, + Opcode.INVOKE_VIRTUAL_RANGE + ) videoEndMethod = getWalkerMethod(context, walkerIndex) @@ -364,10 +366,11 @@ object VideoInformationPatch : BytecodePatch( OnPlaybackSpeedItemClickFingerprint.resultOrThrow().let { it.mutableMethod.apply { speedSelectionInsertMethod = this - val speedSelectionValueInstructionIndex = getTargetIndexOrThrow(Opcode.IGET) + val speedSelectionValueInstructionIndex = + indexOfFirstInstructionOrThrow(Opcode.IGET) val setPlaybackSpeedContainerClassFieldIndex = - getTargetIndexReversedOrThrow( + indexOfFirstInstructionReversedOrThrow( speedSelectionValueInstructionIndex, Opcode.IGET_OBJECT ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoIdFingerprintShorts.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoIdFingerprintShorts.kt index b142dd735..0e419ab53 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoIdFingerprintShorts.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoIdFingerprintShorts.kt @@ -2,9 +2,11 @@ package app.revanced.patches.youtube.video.information.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.utils.PlayerResponseModelUtils.PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR -import app.revanced.util.containsWideLiteralInstructionIndex -import app.revanced.util.getTargetIndexWithFieldReferenceName +import app.revanced.util.containsWideLiteralInstructionValue +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.FieldReference /** * This fingerprint is compatible with all versions of YouTube starting from v18.29.38 to supported versions. @@ -19,9 +21,11 @@ internal object VideoIdFingerprintShorts : MethodFingerprint( Opcode.MOVE_RESULT_OBJECT ), customFingerprint = custom@{ methodDef, _ -> - if (methodDef.containsWideLiteralInstructionIndex(45365621)) + if (methodDef.containsWideLiteralInstructionValue(45365621)) return@custom true - methodDef.getTargetIndexWithFieldReferenceName("reelWatchEndpoint") >= 0 + methodDef.indexOfFirstInstruction { + getReference()?.name == "reelWatchEndpoint" + } >= 0 } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/playback/VideoPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/playback/VideoPlaybackPatch.kt index 23edbf025..6a17f77c8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/playback/VideoPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/playback/VideoPlaybackPatch.kt @@ -33,10 +33,9 @@ import app.revanced.patches.youtube.video.playback.fingerprints.QualitySetterFin import app.revanced.patches.youtube.video.playback.fingerprints.VP9CapabilityFingerprint import app.revanced.patches.youtube.video.videoid.VideoIdPatch import app.revanced.util.getReference -import app.revanced.util.getStringInstructionIndex -import app.revanced.util.getTargetIndexOrThrow import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstStringInstructionOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import app.revanced.util.updatePatchStatus @@ -112,7 +111,8 @@ object VideoPlaybackPatch : BaseBytecodePatch( // region patch for disable HDR video HDRCapabilityFingerprint.resultOrThrow().mutableMethod.apply { - val stringIndex = getStringInstructionIndex("av1_profile_main_10_hdr_10_plus_supported") + val stringIndex = + indexOfFirstStringInstructionOrThrow("av1_profile_main_10_hdr_10_plus_supported") val walkerIndex = indexOfFirstInstructionOrThrow(stringIndex) { val reference = getReference() reference?.parameterTypes == listOf("I", "Landroid/view/Display;") @@ -149,7 +149,8 @@ object VideoPlaybackPatch : BaseBytecodePatch( speedSelectionInsertMethod ).forEach { it.apply { - val speedSelectionValueInstructionIndex = getTargetIndexOrThrow(Opcode.IGET) + val speedSelectionValueInstructionIndex = + indexOfFirstInstructionOrThrow(Opcode.IGET) val speedSelectionValueRegister = getInstruction(speedSelectionValueInstructionIndex).registerA @@ -227,7 +228,7 @@ object VideoPlaybackPatch : BaseBytecodePatch( QualityMenuViewInflateFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = getTargetIndexOrThrow(Opcode.CHECK_CAST) + val insertIndex = indexOfFirstInstructionOrThrow(Opcode.CHECK_CAST) val insertRegister = getInstruction(insertIndex).registerA addInstruction( @@ -240,7 +241,7 @@ object VideoPlaybackPatch : BaseBytecodePatch( it.mutableClass.methods.find { method -> method.name == "onItemClick" } onItemClickMethod?.apply { - val insertIndex = getTargetIndexOrThrow(Opcode.IGET_OBJECT) + val insertIndex = indexOfFirstInstructionOrThrow(Opcode.IGET_OBJECT) val insertRegister = getInstruction(insertIndex).registerA val jumpIndex = indexOfFirstInstructionOrThrow { @@ -291,7 +292,7 @@ object VideoPlaybackPatch : BaseBytecodePatch( AV1CodecFingerprint.result?.let { it.mutableMethod.apply { - val insertIndex = getStringInstructionIndex("video/av01") + val insertIndex = indexOfFirstStringInstructionOrThrow("video/av01") val insertRegister = getInstruction(insertIndex).registerA addInstructions( diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/playback/fingerprints/AV1CodecFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/playback/fingerprints/AV1CodecFingerprint.kt index 30442651b..88e28d7fa 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/playback/fingerprints/AV1CodecFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/playback/fingerprints/AV1CodecFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.video.playback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.AccessFlags internal object AV1CodecFingerprint : MethodFingerprint( @@ -13,6 +13,6 @@ internal object AV1CodecFingerprint : MethodFingerprint( if (methodDef.returnType == "Ljava/util/List;") return@handler false - methodDef.containsWideLiteralInstructionIndex(1987076931) + methodDef.containsWideLiteralInstructionValue(1987076931) } ) diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index 702df1930..1065d8ec6 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -25,9 +25,9 @@ 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.WideLiteralInstruction import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31i -import com.android.tools.smali.dexlib2.iface.reference.FieldReference import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.iface.reference.Reference +import com.android.tools.smali.dexlib2.iface.reference.StringReference import com.android.tools.smali.dexlib2.immutable.ImmutableField import com.android.tools.smali.dexlib2.util.MethodUtil @@ -96,45 +96,51 @@ fun MutableMethod.injectHideViewCall( "invoke-static { v$viewRegister }, $classDescriptor->$targetMethod(Landroid/view/View;)V" ) -fun MethodFingerprint.literalInstructionBooleanHook( +fun MethodFingerprint.injectLiteralInstructionBooleanCall( literal: Int, descriptor: String -) = literalInstructionBooleanHook(literal.toLong(), descriptor) +) = injectLiteralInstructionBooleanCall(literal.toLong(), descriptor) -fun MethodFingerprint.literalInstructionBooleanHook( +fun MethodFingerprint.injectLiteralInstructionBooleanCall( literal: Long, descriptor: String ) { resultOrThrow().mutableMethod.apply { - val literalIndex = getWideLiteralInstructionIndex(literal) - val targetIndex = getTargetIndex(literalIndex, Opcode.MOVE_RESULT) + val literalIndex = indexOfFirstWideLiteralInstructionValueOrThrow(literal) + val targetIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT) val targetRegister = getInstruction(targetIndex).registerA - val smaliInstruction = if (descriptor.endsWith("(Z)Z")) - "invoke-static {v$targetRegister}, $descriptor" - else - "invoke-static {}, $descriptor" - - addInstructions( - targetIndex + 1, """ - $smaliInstruction + val smaliInstruction = + if (descriptor.startsWith("0x")) """ + const/16 v$targetRegister, $descriptor + """ + else if (descriptor.endsWith("(Z)Z")) """ + invoke-static {v$targetRegister}, $descriptor move-result v$targetRegister """ + else """ + invoke-static {}, $descriptor + move-result v$targetRegister + """ + + addInstructions( + targetIndex + 1, + smaliInstruction ) } } -fun MethodFingerprint.literalInstructionViewHook( +fun MethodFingerprint.injectLiteralInstructionViewCall( literal: Long, smaliInstruction: String -) = resultOrThrow().mutableMethod.literalInstructionViewHook(literal, smaliInstruction) +) = resultOrThrow().mutableMethod.injectLiteralInstructionViewCall(literal, smaliInstruction) -fun MutableMethod.literalInstructionViewHook( +fun MutableMethod.injectLiteralInstructionViewCall( literal: Long, smaliInstruction: String ) { - val literalIndex = getWideLiteralInstructionIndex(literal) - val targetIndex = getTargetIndex(literalIndex, Opcode.MOVE_RESULT_OBJECT) + val literalIndex = indexOfFirstWideLiteralInstructionValueOrThrow(literal) + val targetIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT_OBJECT) val targetRegister = getInstruction(targetIndex).registerA.toString() addInstructions( @@ -143,7 +149,7 @@ fun MutableMethod.literalInstructionViewHook( ) } -fun BytecodeContext.literalInstructionViewHook( +fun BytecodeContext.injectLiteralInstructionViewCall( literal: Long, smaliInstruction: String ) { @@ -160,14 +166,14 @@ fun BytecodeContext.literalInstructionViewHook( context.proxy(classDef) .mutableClass .findMutableMethodOf(method) - .literalInstructionViewHook(literal, smaliInstruction) + .injectLiteralInstructionViewCall(literal, smaliInstruction) } } } } } -fun BytecodeContext.literalInstructionHook( +fun BytecodeContext.replaceLiteralInstructionCall( literal: Long, smaliInstruction: String ) { @@ -184,7 +190,7 @@ fun BytecodeContext.literalInstructionHook( context.proxy(classDef) .mutableClass .findMutableMethodOf(method).apply { - val index = getWideLiteralInstructionIndex(literal) + val index = indexOfFirstWideLiteralInstructionValueOrThrow(literal) val register = (instruction as OneRegisterInstruction).registerA.toString() @@ -200,25 +206,17 @@ fun BytecodeContext.literalInstructionHook( } /** - * Get the index of the first instruction with the literal value or throw a [PatchException]. + * Get the index of the first [Instruction] that matches the predicate, starting from [startIndex]. * - * @throws [PatchException] if the literal index not found. + * @param startIndex Optional starting index to start searching from. + * @return -1 if the instruction is not found. + * @see indexOfFirstInstructionOrThrow */ -fun Method.indexOfWideLiteralInstructionOrThrow(literal: Long): Int { - val index = getWideLiteralInstructionIndex(literal) - if (index < 0) { - val value = - if (literal >= 2130706432) // 0x7f000000, general resource id - String.format("%#X", literal).lowercase() - else - literal.toString() - - throw PatchException("Found literal value for: '$value' but method does not contain the id: $this") +fun Method.indexOfFirstInstruction(startIndex: Int = 0, opcode: Opcode): Int = + indexOfFirstInstruction(startIndex) { + this.opcode == opcode } - return index -} - /** * Get the index of the first [Instruction] that matches the predicate, starting from [startIndex]. * @@ -227,7 +225,10 @@ fun Method.indexOfWideLiteralInstructionOrThrow(literal: Long): Int { * @see indexOfFirstInstructionOrThrow */ fun Method.indexOfFirstInstruction(startIndex: Int = 0, predicate: Instruction.() -> Boolean): Int { - var instructions = this.implementation!!.instructions + if (implementation == null) { + return -1 + } + var instructions = implementation!!.instructions if (startIndex != 0) { instructions = instructions.drop(startIndex) } @@ -240,6 +241,9 @@ fun Method.indexOfFirstInstruction(startIndex: Int = 0, predicate: Instruction.( } } +fun Method.indexOfFirstInstructionOrThrow(opcode: Opcode): Int = + indexOfFirstInstructionOrThrow(0, opcode) + /** * Get the index of the first [Instruction] that matches the predicate, starting from [startIndex]. * @@ -247,11 +251,14 @@ fun Method.indexOfFirstInstruction(startIndex: Int = 0, predicate: Instruction.( * @throws PatchException * @see indexOfFirstInstruction */ -fun Method.indexOfFirstInstructionOrThrow(startIndex: Int = 0, targetOpcode: Opcode): Int = +fun Method.indexOfFirstInstructionOrThrow(startIndex: Int = 0, opcode: Opcode): Int = indexOfFirstInstructionOrThrow(startIndex) { - opcode == targetOpcode + this.opcode == opcode } +fun Method.indexOfFirstInstructionReversedOrThrow(opcode: Opcode): Int = + indexOfFirstInstructionReversedOrThrow(null, opcode) + /** * Get the index of the first [Instruction] that matches the predicate, starting from [startIndex]. * @@ -278,9 +285,9 @@ fun Method.indexOfFirstInstructionOrThrow( * @return -1 if the instruction is not found. * @see indexOfFirstInstructionReversedOrThrow */ -fun Method.indexOfFirstInstructionReversed(startIndex: Int? = null, targetOpcode: Opcode): Int = +fun Method.indexOfFirstInstructionReversed(startIndex: Int? = null, opcode: Opcode): Int = indexOfFirstInstructionReversed(startIndex) { - opcode == targetOpcode + this.opcode == opcode } /** @@ -295,7 +302,10 @@ fun Method.indexOfFirstInstructionReversed( startIndex: Int? = null, predicate: Instruction.() -> Boolean ): Int { - var instructions = this.implementation!!.instructions + if (implementation == null) { + return -1 + } + var instructions = implementation!!.instructions if (startIndex != null) { instructions = instructions.take(startIndex + 1) } @@ -313,10 +323,10 @@ fun Method.indexOfFirstInstructionReversed( */ fun Method.indexOfFirstInstructionReversedOrThrow( startIndex: Int? = null, - targetOpcode: Opcode + opcode: Opcode ): Int = indexOfFirstInstructionReversedOrThrow(startIndex) { - opcode == targetOpcode + this.opcode == opcode } /** @@ -365,40 +375,59 @@ fun Method.findOpcodeIndicesReversed(filter: Instruction.() -> Boolean): List (instruction as? WideLiteralInstruction)?.wideLiteral == literal } } ?: -1 -fun Method.getStringInstructionIndex(value: String) = implementation?.let { - it.instructions.indexOfFirst { instruction -> - instruction.opcode == Opcode.CONST_STRING - && (instruction as? ReferenceInstruction)?.reference.toString() == value + +/** + * Find the index of the first wide literal instruction with the given value, + * or throw an exception if not found. + * + * @return the first literal instruction with the value, or throws [PatchException] if not found. + */ +fun Method.indexOfFirstWideLiteralInstructionValueOrThrow(literal: Long): Int { + val index = indexOfFirstWideLiteralInstructionValue(literal) + if (index < 0) { + val value = + if (literal >= 2130706432) // 0x7f000000, general resource id + String.format("%#X", literal).lowercase() + else + literal.toString() + + throw PatchException("Found literal value: '$value' but method does not contain the id: $this") } -} ?: -1 -fun Method.getStartsWithStringInstructionIndex(value: String) = implementation?.let { - it.instructions.indexOfFirst { instruction -> - instruction.opcode == Opcode.CONST_STRING - && (instruction as? ReferenceInstruction)?.reference.toString().startsWith(value) + return index +} + +fun Method.indexOfFirstStringInstruction(str: String) = + indexOfFirstInstruction { + opcode == Opcode.CONST_STRING && + getReference()?.string == str } -} ?: -1 + + +fun Method.indexOfFirstStringInstructionOrThrow(str: String): Int { + val index = indexOfFirstStringInstruction(str) + if (index < 0) { + throw PatchException("Found string value for: '$str' but method does not contain the id: $this") + } + + return index +} /** * Check if the method contains a literal with the given value. * * @return if the method contains a literal with the given value. */ -fun Method.containsWideLiteralInstructionIndex(literal: Long) = - getWideLiteralInstructionIndex(literal) >= 0 - -fun Method.containsMethodReferenceNameInstructionIndex(methodName: String) = - getTargetIndexWithMethodReferenceName(methodName) >= 0 - -fun Method.containsReferenceInstructionIndex(reference: String) = - getTargetIndexWithReference(reference) >= 0 +fun Method.containsWideLiteralInstructionValue(literal: Long) = + indexOfFirstWideLiteralInstructionValue(literal) >= 0 /** * Traverse the class hierarchy starting from the given root class. @@ -427,305 +456,12 @@ fun BytecodeContext.traverseClassHierarchy( inline fun Instruction.getReference() = (this as? ReferenceInstruction)?.reference as? T -/** - * Get the index of the first [Instruction] that matches the predicate. - * - * @param predicate The predicate to match. - * @return The index of the first [Instruction] that matches the predicate. - */ -fun Method.indexOfFirstInstruction(predicate: Instruction.() -> Boolean) = - indexOfFirstInstruction(0, predicate) - -/** - * Get the index of the first [Instruction] that matches the predicate, starting from [startIndex]. - * - * @param startIndex Optional starting index to start searching from. - * @return -1 if the instruction is not found. - * @see indexOfFirstInstructionOrThrow - */ -fun Method.indexOfFirstInstruction(startIndex: Int = 0, targetOpcode: Opcode): Int = - indexOfFirstInstruction(startIndex) { - opcode == targetOpcode - } - -fun MutableMethod.getTargetIndexOrThrow(opcode: Opcode) = - getTargetIndexOrThrow(0, opcode) - -fun MutableMethod.getTargetIndexOrThrow(startIndex: Int, opcode: Opcode) = - checkIndex(getTargetIndex(startIndex, opcode), startIndex, opcode) - -fun MutableMethod.getTargetIndexReversedOrThrow(opcode: Opcode) = - getTargetIndexReversedOrThrow(implementation!!.instructions.lastIndex, opcode) - -fun MutableMethod.getTargetIndexReversedOrThrow(startIndex: Int, opcode: Opcode) = - checkIndex(getTargetIndexReversed(startIndex, opcode), startIndex, opcode) - -fun Method.getTargetIndexWithFieldReferenceNameOrThrow(filedName: String) = - checkIndex(getTargetIndexWithFieldReferenceName(filedName), 0, filedName) - -fun MutableMethod.getTargetIndexWithFieldReferenceNameOrThrow(startIndex: Int, filedName: String) = - checkIndex(getTargetIndexWithFieldReferenceName(startIndex, filedName), startIndex, filedName) - -fun MutableMethod.getTargetIndexWithFieldReferenceNameReversedOrThrow(returnType: String) = - getTargetIndexWithFieldReferenceNameReversedOrThrow( - implementation!!.instructions.lastIndex, - returnType - ) - -fun MutableMethod.getTargetIndexWithFieldReferenceNameReversedOrThrow( - startIndex: Int, - returnType: String -) = - checkIndex( - getTargetIndexWithFieldReferenceNameReversed(startIndex, returnType), - startIndex, - returnType - ) - -fun Method.getTargetIndexWithFieldReferenceTypeOrThrow(returnType: String) = - checkIndex(getTargetIndexWithFieldReferenceType(returnType), 0, returnType) - -fun MutableMethod.getTargetIndexWithFieldReferenceTypeOrThrow(startIndex: Int, returnType: String) = - checkIndex(getTargetIndexWithFieldReferenceType(startIndex, returnType), startIndex, returnType) - -fun MutableMethod.getTargetIndexWithFieldReferenceTypeReversedOrThrow(returnType: String) = - getTargetIndexWithFieldReferenceTypeReversedOrThrow( - implementation!!.instructions.lastIndex, - returnType - ) - -fun MutableMethod.getTargetIndexWithFieldReferenceTypeReversedOrThrow( - startIndex: Int, - returnType: String -) = - checkIndex( - getTargetIndexWithFieldReferenceTypeReversed(startIndex, returnType), - startIndex, - returnType - ) - -fun Method.getTargetIndexWithMethodReferenceNameOrThrow(methodName: String) = - checkIndex(getTargetIndexWithMethodReferenceName(methodName), 0, methodName) - -fun MutableMethod.getTargetIndexWithMethodReferenceNameOrThrow( - startIndex: Int, - methodName: String -) = - checkIndex( - getTargetIndexWithMethodReferenceName(startIndex, methodName), - startIndex, - methodName - ) - -fun MutableMethod.getTargetIndexWithMethodReferenceNameReversedOrThrow(methodName: String) = - getTargetIndexWithMethodReferenceNameReversedOrThrow( - implementation!!.instructions.lastIndex, - methodName - ) - -fun MutableMethod.getTargetIndexWithMethodReferenceNameReversedOrThrow( - startIndex: Int, - methodName: String -) = - checkIndex( - getTargetIndexWithMethodReferenceNameReversed(startIndex, methodName), - startIndex, - methodName - ) - -fun Method.getTargetIndexWithReferenceOrThrow(reference: String) = - checkIndex(getTargetIndexWithReference(reference), 0, reference) - -fun MutableMethod.getTargetIndexWithReferenceOrThrow(startIndex: Int, reference: String) = - checkIndex(getTargetIndexWithReference(startIndex, reference), startIndex, reference) - -fun MutableMethod.getTargetIndexWithReferenceReversedOrThrow(reference: String) = - getTargetIndexWithReferenceReversedOrThrow(implementation!!.instructions.lastIndex, reference) - -fun MutableMethod.getTargetIndexWithReferenceReversedOrThrow(startIndex: Int, reference: String) = - checkIndex(getTargetIndexWithReferenceReversed(startIndex, reference), startIndex, reference) - -fun checkIndex(index: Int, startIndex: Int, opcode: Opcode): Int { - if (index < 0) { - throw PatchException("Target index not found. startIndex: $startIndex, opcode: $opcode") - } - return index -} - -fun checkIndex(index: Int, startIndex: Int, name: String): Int { - if (index < 0) { - throw PatchException("Target index not found. startIndex: $startIndex, name: $name") - } - return index -} - -fun MutableMethod.getTargetIndex(opcode: Opcode) = getTargetIndex(0, opcode) - -fun MutableMethod.getTargetIndex(startIndex: Int, opcode: Opcode) = - implementation!!.instructions.let { - startIndex + it.subList(startIndex, it.size - 1).indexOfFirst { instruction -> - instruction.opcode == opcode - } - } - -fun MutableMethod.getTargetIndexReversed(opcode: Opcode) = - getTargetIndexReversed(implementation!!.instructions.size - 1, opcode) - -fun MutableMethod.getTargetIndexReversed(startIndex: Int, opcode: Opcode): Int { - for (index in startIndex downTo 0) { - if (getInstruction(index).opcode != opcode) - continue - - return index - } - return -1 -} - -fun Method.getTargetIndexWithFieldReferenceName(filedName: String) = implementation?.let { - it.instructions.indexOfFirst { instruction -> - instruction.getReference()?.name == filedName - } -} ?: -1 - -fun MutableMethod.getTargetIndexWithFieldReferenceName(startIndex: Int, filedName: String) = - implementation!!.instructions.let { - startIndex + it.subList(startIndex, it.lastIndex).indexOfFirst { instruction -> - instruction.getReference()?.name == filedName - } - } - -fun MutableMethod.getTargetIndexWithFieldReferenceNameReversed(returnType: String) = - getTargetIndexWithFieldReferenceTypeReversed( - implementation!!.instructions.lastIndex, - returnType - ) - -fun MutableMethod.getTargetIndexWithFieldReferenceNameReversed( - startIndex: Int, - filedName: String -): Int { - for (index in startIndex downTo 0) { - val instruction = getInstruction(index) - if (instruction.getReference()?.name != filedName) - continue - - return index - } - return -1 -} - -fun Method.getTargetIndexWithFieldReferenceType(returnType: String) = implementation?.let { - it.instructions.indexOfFirst { instruction -> - instruction.getReference()?.type == returnType - } -} ?: -1 - -fun MutableMethod.getTargetIndexWithFieldReferenceTypeReversed(returnType: String) = - getTargetIndexWithFieldReferenceTypeReversed(implementation!!.instructions.size - 1, returnType) - -fun MutableMethod.getTargetIndexWithFieldReferenceType(startIndex: Int, returnType: String) = - implementation!!.instructions.let { - startIndex + it.subList(startIndex, it.size - 1).indexOfFirst { instruction -> - instruction.getReference()?.type == returnType - } - } - -fun MutableMethod.getTargetIndexWithFieldReferenceTypeReversed( - startIndex: Int, - returnType: String -): Int { - for (index in startIndex downTo 0) { - val instruction = getInstruction(index) - if (instruction.getReference()?.type != returnType) - continue - - return index - } - return -1 -} - -fun Method.getTargetIndexWithMethodReferenceName(methodName: String) = implementation?.let { - it.instructions.indexOfFirst { instruction -> - instruction.getReference()?.name == methodName - } -} ?: -1 - -fun MutableMethod.getTargetIndexWithMethodReferenceNameReversed(methodName: String) = - getTargetIndexWithMethodReferenceNameReversed( - implementation!!.instructions.size - 1, - methodName - ) - - -fun MutableMethod.getTargetIndexWithMethodReferenceName(startIndex: Int, methodName: String) = - implementation!!.instructions.let { - startIndex + it.subList(startIndex, it.size - 1).indexOfFirst { instruction -> - instruction.getReference()?.name == methodName - } - } - -fun MutableMethod.getTargetIndexWithMethodReferenceNameReversed( - startIndex: Int, - methodName: String -): Int { - for (index in startIndex downTo 0) { - val instruction = getInstruction(index) - if (instruction.getReference()?.name != methodName) - continue - - return index - } - return -1 -} - -fun Method.getTargetIndexWithReference(reference: String) = implementation?.let { - it.instructions.indexOfFirst { instruction -> - (instruction as? ReferenceInstruction)?.reference.toString().contains(reference) - } -} ?: -1 - -fun MutableMethod.getTargetIndexWithReference(reference: String) = - getTargetIndexWithReference(0, reference) - -fun MutableMethod.getTargetIndexWithReferenceReversed(reference: String) = - getTargetIndexWithReferenceReversed(implementation!!.instructions.size - 1, reference) - -fun MutableMethod.getTargetIndexWithReference(startIndex: Int, reference: String) = - implementation!!.instructions.let { - startIndex + it.subList(startIndex, it.size - 1).indexOfFirst { instruction -> - (instruction as? ReferenceInstruction)?.reference.toString().contains(reference) - } - } - -fun MutableMethod.getTargetIndexWithReferenceReversed(startIndex: Int, reference: String): Int { - for (index in startIndex downTo 0) { - val instruction = getInstruction(index) - if (!(instruction as? ReferenceInstruction)?.reference.toString().contains(reference)) - continue - - return index - } - return -1 -} - fun MethodFingerprintResult.getWalkerMethod(context: BytecodeContext, offset: Int) = mutableMethod.getWalkerMethod(context, offset) /** - * MethodWalker structural limitations cause incorrect class to be found - * - * MethodReference to find in YouTube 18.29.38: - * 'Lng;->d(Lou;)Z' - * - * Class found by MethodWalker in YouTube 18.29.38: - * 'Lcom/google/android/gms/maps/model/LatLng;' - * - * The reason this error occurs is because [BytecodeContext.findClass] checks whether className is included or not - * - * In ReVanced Patcher 19.3.1: - * fun findClass(className: String) = findClass { it.type.contains(className) } - * - * (Class 'Lcom/google/android/gms/maps/model/LatLng;' is returned because class 'Lcom/google/android/gms/maps/model/LatLng;' contains keyword 'Lng;') + * MethodWalker can find the wrong class: + * https://github.com/ReVanced/revanced-patcher/issues/309 * * As a workaround, redefine MethodWalker here */ diff --git a/src/main/kotlin/app/revanced/util/fingerprint/LiteralValueFingerprint.kt b/src/main/kotlin/app/revanced/util/fingerprint/LiteralValueFingerprint.kt index 293855da4..ea7cf3ebb 100644 --- a/src/main/kotlin/app/revanced/util/fingerprint/LiteralValueFingerprint.kt +++ b/src/main/kotlin/app/revanced/util/fingerprint/LiteralValueFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.util.fingerprint import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.containsWideLiteralInstructionIndex +import app.revanced.util.containsWideLiteralInstructionValue import com.android.tools.smali.dexlib2.Opcode /** @@ -29,6 +29,6 @@ abstract class LiteralValueFingerprint( opcodes = opcodes, strings = strings, customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionIndex(literalSupplier()) + methodDef.containsWideLiteralInstructionValue(literalSupplier()) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/fingerprint/MethodReferenceNameFingerprint.kt b/src/main/kotlin/app/revanced/util/fingerprint/MethodReferenceNameFingerprint.kt deleted file mode 100644 index f2252f881..000000000 --- a/src/main/kotlin/app/revanced/util/fingerprint/MethodReferenceNameFingerprint.kt +++ /dev/null @@ -1,34 +0,0 @@ -package app.revanced.util.fingerprint - -import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.containsMethodReferenceNameInstructionIndex -import com.android.tools.smali.dexlib2.Opcode - -/** - * A fingerprint to resolve methods that contain a specific method reference name value. - * - * @param returnType The method's return type compared using String.startsWith. - * @param accessFlags The method's exact access flags using values of AccessFlags. - * @param parameters The parameters of the method. Partial matches allowed and follow the same rules as returnType. - * @param opcodes An opcode pattern of the method's instructions. Wildcard or unknown opcodes can be specified by null. - * @param strings A list of the method's strings compared each using String.contains. - * @param reference A supplier for the method reference name value to check for. - */ -abstract class MethodReferenceNameFingerprint( - returnType: String? = null, - accessFlags: Int? = null, - parameters: Iterable? = null, - opcodes: Iterable? = null, - strings: Iterable? = null, - // Has to be a supplier because the fingerprint is created before patches can check reference. - reference: () -> String -) : MethodFingerprint( - returnType = returnType, - accessFlags = accessFlags, - parameters = parameters, - opcodes = opcodes, - strings = strings, - customFingerprint = { methodDef, _ -> - methodDef.containsMethodReferenceNameInstructionIndex(reference()) - } -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/fingerprint/ReferenceFingerprint.kt b/src/main/kotlin/app/revanced/util/fingerprint/ReferenceFingerprint.kt deleted file mode 100644 index 69cb6b057..000000000 --- a/src/main/kotlin/app/revanced/util/fingerprint/ReferenceFingerprint.kt +++ /dev/null @@ -1,34 +0,0 @@ -package app.revanced.util.fingerprint - -import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.util.containsReferenceInstructionIndex -import com.android.tools.smali.dexlib2.Opcode - -/** - * A fingerprint to resolve methods that contain a specific reference value. - * - * @param returnType The method's return type compared using String.startsWith. - * @param accessFlags The method's exact access flags using values of AccessFlags. - * @param parameters The parameters of the method. Partial matches allowed and follow the same rules as returnType. - * @param opcodes An opcode pattern of the method's instructions. Wildcard or unknown opcodes can be specified by null. - * @param strings A list of the method's strings compared each using String.contains. - * @param reference A supplier for the reference value to check for. - */ -abstract class ReferenceFingerprint( - returnType: String? = null, - accessFlags: Int? = null, - parameters: Iterable? = null, - opcodes: Iterable? = null, - strings: Iterable? = null, - // Has to be a supplier because the fingerprint is created before patches can check reference. - reference: () -> String -) : MethodFingerprint( - returnType = returnType, - accessFlags = accessFlags, - parameters = parameters, - opcodes = opcodes, - strings = strings, - customFingerprint = { methodDef, _ -> - methodDef.containsReferenceInstructionIndex(reference()) - } -) \ No newline at end of file From b27760a55c78ab9e66680cfc0cffb5d6fa67021d Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:47:36 +0300 Subject: [PATCH 003/103] chore: fix build error --- .../app/revanced/patches/music/utils/settings/SettingsPatch.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt index 32c1d3c01..640532be1 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt @@ -38,8 +38,10 @@ object SettingsPatch : BaseResourcePatch( private lateinit var customName: String lateinit var contexts: ResourceContext + internal var upward0627 = false internal var upward0636 = false internal var upward0642 = false + internal var upward0718 = false override fun execute(context: ResourceContext) { From e0223a3def983183b6e9e3f63b7497194f8d2860 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:47:50 +0300 Subject: [PATCH 004/103] chore(YouTube Music): Replace with a fingerprint that supports a wider range of versions --- .../components/PlayerComponentsPatch.kt | 105 +++++++++++++++--- .../EngagementPanelHeightFingerprint.kt | 26 +++++ .../EngagementPanelHeightParentFingerprint.kt | 28 +++++ .../MppWatchWhileLayoutFingerprint.kt | 30 ++++- .../ShuffleClassReferenceFingerprint.kt | 3 +- .../utils/resourceid/SharedResourceIdPatch.kt | 3 + .../music/utils/settings/SettingsPatch.kt | 2 + 7 files changed, 175 insertions(+), 22 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightParentFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt index 32ef4bde4..0a71b4f2b 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt @@ -13,6 +13,8 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.player.components.fingerprints.AudioVideoSwitchToggleFingerprint +import app.revanced.patches.music.player.components.fingerprints.EngagementPanelHeightFingerprint +import app.revanced.patches.music.player.components.fingerprints.EngagementPanelHeightParentFingerprint import app.revanced.patches.music.player.components.fingerprints.HandleSearchRenderedFingerprint import app.revanced.patches.music.player.components.fingerprints.HandleSignInEventFingerprint import app.revanced.patches.music.player.components.fingerprints.InteractionLoggingEnumFingerprint @@ -59,6 +61,7 @@ import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.music.utils.videotype.VideoTypeHookPatch import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT +import app.revanced.util.alsoResolve import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow @@ -102,6 +105,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( AudioVideoSwitchToggleFingerprint, + EngagementPanelHeightParentFingerprint, HandleSearchRenderedFingerprint, InteractionLoggingEnumFingerprint, MinimizedPlayerFingerprint, @@ -530,15 +534,12 @@ object PlayerComponentsPatch : BaseBytecodePatch( it.mutableClass.methods.find { method -> method.parameters == listOf("Landroid/view/View;", "I") }?.apply { - val bottomSheetBehaviorIndex = - implementation!!.instructions.indexOfFirst { instruction -> - instruction.opcode == Opcode.INVOKE_VIRTUAL - && instruction.getReference()?.definingClass == "Lcom/google/android/material/bottomsheet/BottomSheetBehavior;" - && instruction.getReference()?.parameterTypes?.first() == "Z" + val bottomSheetBehaviorIndex = indexOfFirstInstructionOrThrow { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL + && reference?.definingClass == "Lcom/google/android/material/bottomsheet/BottomSheetBehavior;" + && reference.parameterTypes.first() == "Z" } - if (bottomSheetBehaviorIndex < 0) - throw PatchException("Could not find bottomSheetBehaviorIndex") - val freeRegister = getInstruction(bottomSheetBehaviorIndex).registerD @@ -744,18 +745,20 @@ object PlayerComponentsPatch : BaseBytecodePatch( it.mutableMethod.apply { rememberShuffleStateObjectClass = definingClass - val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(45468) - val iGetObjectIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.IGET_OBJECT) - val checkCastIndex = - indexOfFirstInstructionOrThrow(iGetObjectIndex, Opcode.CHECK_CAST) - - val ordinalIndex = indexOfOrdinalInstruction(this) val imageViewIndex = indexOfImageViewInstruction(this) + val ordinalIndex = indexOfOrdinalInstruction(this) + + val invokeInterfaceIndex = + indexOfFirstInstructionReversedOrThrow(ordinalIndex, Opcode.INVOKE_INTERFACE) + val iGetObjectIndex = + indexOfFirstInstructionReversedOrThrow(invokeInterfaceIndex, Opcode.IGET_OBJECT) + val checkCastIndex = + indexOfFirstInstructionOrThrow(invokeInterfaceIndex, Opcode.CHECK_CAST) val iGetObjectReference = getInstruction(iGetObjectIndex).reference val invokeInterfaceReference = - getInstruction(iGetObjectIndex + 1).reference + getInstruction(invokeInterfaceIndex).reference val checkCastReference = getInstruction(checkCastIndex).reference val getOrdinalClassReference = @@ -890,12 +893,82 @@ object PlayerComponentsPatch : BaseBytecodePatch( // region patch for restore old comments popup panels - OldEngagementPanelFingerprint.result?.let { + var restoreOldCommentsPopupPanel = false + + if (SettingsPatch.upward0627 && !SettingsPatch.upward0718) { OldEngagementPanelFingerprint.injectLiteralInstructionBooleanCall( 45427672, "$PLAYER_CLASS_DESCRIPTOR->restoreOldCommentsPopUpPanels(Z)Z" ) + restoreOldCommentsPopupPanel = true + } else if (SettingsPatch.upward0718) { + + // region disable player from being pushed to the top when opening a comment + + MppWatchWhileLayoutFingerprint.resultOrThrow().mutableMethod.apply { + val callableIndex = + MppWatchWhileLayoutFingerprint.indexOfCallableInstruction(this) + val insertIndex = indexOfFirstInstructionReversedOrThrow(callableIndex, Opcode.NEW_INSTANCE) + val insertRegister = getInstruction(insertIndex).registerA + + addInstructionsWithLabels( + insertIndex, """ + invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->restoreOldCommentsPopUpPanels()Z + move-result v$insertRegister + if-eqz v$insertRegister, :restore + """, ExternalLabel("restore", getInstruction(callableIndex + 1)) + ) + } + + // endregion + + // region region limit the height of the engagement panel + + EngagementPanelHeightFingerprint.alsoResolve( + context, EngagementPanelHeightParentFingerprint + ).let { + it.mutableMethod.apply { + val targetIndex = it.scanResult.patternScanResult!!.endIndex + val targetRegister = getInstruction(targetIndex).registerA + + addInstructions( + targetIndex + 1, """ + invoke-static {v$targetRegister}, $PLAYER_CLASS_DESCRIPTOR->restoreOldCommentsPopUpPanels(Z)Z + move-result v$targetRegister + """ + ) + } + } + + MiniPlayerDefaultViewVisibilityFingerprint.resultOrThrow().let { + it.mutableClass.methods.find { method -> + method.parameters == listOf("Landroid/view/View;", "I") + }?.apply { + val targetIndex = indexOfFirstInstructionOrThrow { + val reference = getReference() + opcode == Opcode.INVOKE_INTERFACE + && reference?.returnType == "Z" + && reference.parameterTypes.size == 0 + } + 1 + val targetRegister = + getInstruction(targetIndex).registerA + + addInstructions( + targetIndex + 1, """ + invoke-static {v$targetRegister}, $PLAYER_CLASS_DESCRIPTOR->restoreOldCommentsPopUpPanels(Z)Z + move-result v$targetRegister + """ + ) + } ?: throw PatchException("Could not find targetMethod") + + } + + // endregion + + restoreOldCommentsPopupPanel = true + } + if (restoreOldCommentsPopupPanel) { SettingsPatch.addSwitchPreference( CategoryType.PLAYER, "revanced_restore_old_comments_popup_panels", diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightFingerprint.kt new file mode 100644 index 000000000..85111f705 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightFingerprint.kt @@ -0,0 +1,26 @@ +package app.revanced.patches.music.player.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object EngagementPanelHeightFingerprint : MethodFingerprint( + returnType = "L", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + opcodes = listOf( + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + ), + parameters = emptyList(), + customFingerprint = custom@{ methodDef, _ -> + methodDef.indexOfFirstInstruction { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "booleanValue" + } >= 0 + } +) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightParentFingerprint.kt new file mode 100644 index 000000000..334bbd436 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightParentFingerprint.kt @@ -0,0 +1,28 @@ +package app.revanced.patches.music.player.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction + +internal object EngagementPanelHeightParentFingerprint : MethodFingerprint( + returnType = "L", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + opcodes = listOf(Opcode.NEW_ARRAY), + parameters = emptyList(), + customFingerprint = custom@{ methodDef, _ -> + if (methodDef.definingClass.startsWith("Lcom/")) { + return@custom false + } + if (methodDef.returnType == "Ljava/lang/Object;") { + return@custom false + } + + methodDef.indexOfFirstInstruction { + opcode == Opcode.CHECK_CAST && + (this as? ReferenceInstruction)?.reference?.toString() == "Lcom/google/android/libraries/youtube/engagementpanel/size/EngagementPanelSizeBehavior;" + } >= 0 + } +) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt index 8cc697b71..d60e19839 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt @@ -1,16 +1,36 @@ package app.revanced.patches.music.player.components.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.music.player.components.fingerprints.MppWatchWhileLayoutFingerprint.indexOfCallableInstruction import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerPlayPauseReplayButton import app.revanced.util.containsWideLiteralInstructionValue +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference internal object MppWatchWhileLayoutFingerprint : MethodFingerprint( returnType = "V", opcodes = listOf(Opcode.NEW_ARRAY), - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("/MppWatchWhileLayout;") - && methodDef.name == "onFinishInflate" - && methodDef.containsWideLiteralInstructionValue(MiniPlayerPlayPauseReplayButton) + customFingerprint = custom@{ methodDef, _ -> + if (!methodDef.definingClass.endsWith("/MppWatchWhileLayout;")) { + return@custom false + } + if (methodDef.name != "onFinishInflate") { + return@custom false + } + + methodDef.containsWideLiteralInstructionValue(MiniPlayerPlayPauseReplayButton) && + indexOfCallableInstruction(methodDef) >= 0 } -) +) { + fun indexOfCallableInstruction(methodDef: Method) = + methodDef.indexOfFirstInstruction { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL && + reference?.returnType == "V" && + reference.parameterTypes.size == 1 && + reference.parameterTypes.firstOrNull() == "Ljava/util/concurrent/Callable;" + } +} diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt index 6fb14779c..537f12105 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt @@ -4,6 +4,7 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.player.components.fingerprints.ShuffleClassReferenceFingerprint.indexOfImageViewInstruction import app.revanced.patches.music.player.components.fingerprints.ShuffleClassReferenceFingerprint.indexOfOrdinalInstruction +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.YtFillArrowShuffle import app.revanced.util.containsWideLiteralInstructionValue import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction @@ -19,7 +20,7 @@ internal object ShuffleClassReferenceFingerprint : MethodFingerprint( parameters = emptyList(), strings = listOf("Unknown shuffle mode"), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionValue(45468) && + methodDef.containsWideLiteralInstructionValue(YtFillArrowShuffle) && indexOfOrdinalInstruction(methodDef) >= 0 && indexOfImageViewInstruction(methodDef) >= 0 } diff --git a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt index e911ff8b8..ebfedb344 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt @@ -7,6 +7,7 @@ import app.revanced.patches.shared.mapping.ResourceMappingPatch import app.revanced.patches.shared.mapping.ResourceMappingPatch.getId import app.revanced.patches.shared.mapping.ResourceType.BOOL import app.revanced.patches.shared.mapping.ResourceType.COLOR +import app.revanced.patches.shared.mapping.ResourceType.DRAWABLE import app.revanced.patches.shared.mapping.ResourceType.DIMEN import app.revanced.patches.shared.mapping.ResourceType.ID import app.revanced.patches.shared.mapping.ResourceType.LAYOUT @@ -57,6 +58,7 @@ object SharedResourceIdPatch : ResourcePatch() { var TouchOutside = -1L var TrimSilenceSwitch: Long = -1 var VarispeedUnavailableTitle = -1L + var YtFillArrowShuffle = -1L override fun execute(context: ResourceContext) { @@ -102,6 +104,7 @@ object SharedResourceIdPatch : ResourcePatch() { TouchOutside = getId(ID, "touch_outside") TrimSilenceSwitch = getId(ID, "trim_silence_switch") VarispeedUnavailableTitle = getId(STRING, "varispeed_unavailable_title") + YtFillArrowShuffle = getId(DRAWABLE, "yt_fill_arrow_shuffle_vd_theme_24") } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt index 640532be1..a3556c395 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt @@ -134,8 +134,10 @@ object SettingsPatch : BaseResourcePatch( val playServicesVersion = node.textContent.toInt() + upward0627 = 234412000 <= playServicesVersion upward0636 = 240399000 <= playServicesVersion upward0642 = 240999000 <= playServicesVersion + upward0718 = 243699000 <= playServicesVersion break } From 2f9c7a9d63765cdb903000ef1d88dd25c4dd585d Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:22:23 +0300 Subject: [PATCH 005/103] refactor(YouTube - Change start page): Change the actual start page instead of redirecting the Url --- .../general/startpage/ChangeStartPagePatch.kt | 46 ++++++++++++++----- .../fingerprints/BrowseIdFingerprint.kt | 15 ++++++ ...gerprint.kt => IntentActionFingerprint.kt} | 2 +- .../fingerprints/UrlActivityFingerprint.kt | 11 ----- .../youtube/settings/host/values/arrays.xml | 42 ++++++++--------- 5 files changed, 70 insertions(+), 46 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/BrowseIdFingerprint.kt rename src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/{ShortcutsActivityFingerprint.kt => IntentActionFingerprint.kt} (77%) delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/UrlActivityFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/startpage/ChangeStartPagePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/startpage/ChangeStartPagePatch.kt index bca0fe45e..7412b16bd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/startpage/ChangeStartPagePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/startpage/ChangeStartPagePatch.kt @@ -2,13 +2,20 @@ package app.revanced.patches.youtube.general.startpage import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patches.youtube.general.startpage.fingerprints.ShortcutsActivityFingerprint -import app.revanced.patches.youtube.general.startpage.fingerprints.UrlActivityFingerprint +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patches.youtube.general.startpage.fingerprints.BrowseIdFingerprint +import app.revanced.patches.youtube.general.startpage.fingerprints.IntentActionFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_PATH import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow 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.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.StringReference @Suppress("unused") object ChangeStartPagePatch : BaseBytecodePatch( @@ -17,22 +24,37 @@ object ChangeStartPagePatch : BaseBytecodePatch( dependencies = setOf(SettingsPatch::class), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( - ShortcutsActivityFingerprint, - UrlActivityFingerprint + BrowseIdFingerprint, + IntentActionFingerprint, ) ) { + private const val INTEGRATIONS_CLASS_DESCRIPTOR = "$GENERAL_PATH/ChangeStartPagePatch;" + override fun execute(context: BytecodeContext) { - mapOf( - ShortcutsActivityFingerprint to "changeStartPageToShortcuts", - UrlActivityFingerprint to "changeStartPageToUrl" - ).forEach { (fingerprint, method) -> - fingerprint.resultOrThrow().mutableMethod.addInstruction( - 0, - "invoke-static { p1 }, $GENERAL_CLASS_DESCRIPTOR->$method(Landroid/content/Intent;)V" + // Hook browseId. + BrowseIdFingerprint.resultOrThrow().mutableMethod.apply { + val browseIdIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.CONST_STRING && + getReference()?.string == "FEwhat_to_watch" + } + val browseIdRegister = getInstruction(browseIdIndex).registerA + + addInstructions( + browseIdIndex + 1, """ + invoke-static { v$browseIdRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->overrideBrowseId(Ljava/lang/String;)Ljava/lang/String; + move-result-object v$browseIdRegister + """ ) } + // There is no browseId assigned to Shorts and Search. + // Just hook the Intent action. + IntentActionFingerprint.resultOrThrow().mutableMethod.addInstruction( + 0, + "invoke-static { p1 }, $INTEGRATIONS_CLASS_DESCRIPTOR->overrideIntentAction(Landroid/content/Intent;)V" + ) + /** * Add settings */ diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/BrowseIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/BrowseIdFingerprint.kt new file mode 100644 index 000000000..f53490ac4 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/BrowseIdFingerprint.kt @@ -0,0 +1,15 @@ +package app.revanced.patches.youtube.general.startpage.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.Opcode + +internal object BrowseIdFingerprint : MethodFingerprint( + returnType = "Lcom/google/android/apps/youtube/app/common/ui/navigation/PaneDescriptor;", + parameters = emptyList(), + opcodes = listOf( + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT, + Opcode.RETURN_OBJECT, + ), + strings = listOf("FEwhat_to_watch"), +) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/ShortcutsActivityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/IntentActionFingerprint.kt similarity index 77% rename from src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/ShortcutsActivityFingerprint.kt rename to src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/IntentActionFingerprint.kt index c0bd15917..8d6292c7d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/ShortcutsActivityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/IntentActionFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.general.startpage.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint -internal object ShortcutsActivityFingerprint : MethodFingerprint( +internal object IntentActionFingerprint : MethodFingerprint( parameters = listOf("Landroid/content/Intent;"), strings = listOf("has_handled_intent"), ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/UrlActivityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/UrlActivityFingerprint.kt deleted file mode 100644 index 680ef6e29..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/general/startpage/fingerprints/UrlActivityFingerprint.kt +++ /dev/null @@ -1,11 +0,0 @@ -package app.revanced.patches.youtube.general.startpage.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object UrlActivityFingerprint : MethodFingerprint( - parameters = listOf("Landroid/content/Intent;"), - customFingerprint = { methodDef, classDef -> - methodDef.name == "startActivity" - && classDef.type.endsWith("/Shell_HomeActivity;") - } -) \ No newline at end of file diff --git a/src/main/resources/youtube/settings/host/values/arrays.xml b/src/main/resources/youtube/settings/host/values/arrays.xml index 40854ae62..f3a91f581 100644 --- a/src/main/resources/youtube/settings/host/values/arrays.xml +++ b/src/main/resources/youtube/settings/host/values/arrays.xml @@ -25,9 +25,9 @@ @string/revanced_change_start_page_entry_default @string/revanced_change_start_page_entry_search + @string/revanced_change_start_page_entry_shorts @string/revanced_change_start_page_entry_subscriptions @string/revanced_change_start_page_entry_explore - @string/revanced_change_start_page_entry_shorts @string/revanced_change_start_page_entry_library @string/revanced_change_start_page_entry_liked_videos @string/revanced_change_start_page_entry_watch_later @@ -39,30 +39,28 @@ @string/revanced_change_start_page_entry_movies @string/revanced_change_start_page_entry_sports @string/revanced_change_start_page_entry_browse - @string/revanced_change_start_page_entry_playables @string/revanced_change_start_page_entry_courses - - - open.search - open.subscriptions - open.explore - open.shorts - - www.youtube.com/feed/library - www.youtube.com/playlist?list=LL - www.youtube.com/playlist?list=WL - www.youtube.com/feed/history - www.youtube.com/feed/trending - www.youtube.com/gaming - www.youtube.com/channel/UC4R8DWoMoI7CAwX8_LjQHig - www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ - www.youtube.com/feed/storefront?bp=ogUCKAI%3D - www.youtube.com/channel/UCEgdi0XIXXZ-qJOFPf4JSKw - www.youtube.com/feed/guide_builder - www.youtube.com/playables - www.youtube.com/channel/UCtFRv9O2AHqOZjjynzrv-xg + ORIGINAL + + SEARCH + SHORTS + + SUBSCRIPTIONS + EXPLORE + LIBRARY + LIKED_VIDEO + WATCH_LATER + HISTORY + TRENDING + GAMING + LIVE + MUSIC + MOVIE + SPORTS + BROWSE + COURSES @string/revanced_change_shorts_repeat_state_entry_default From 2d3f7f403325535c3c694745c658641d5680e316 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:26:24 +0300 Subject: [PATCH 006/103] chore(YouTube): Replace with a fingerprint that supports a wider range of versions --- .../patches/shared/integrations/BaseIntegrationsPatch.kt | 4 ++-- .../components/fingerprints/ShortsToolBarFingerprint.kt | 6 ++++-- .../fingerprints/StandalonePlayerActivityFingerprint.kt | 3 +++ src/main/kotlin/app/revanced/util/BytecodeUtils.kt | 3 +++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt b/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt index 3a33da4e9..674b7ed36 100644 --- a/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt @@ -7,7 +7,7 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patches.shared.integrations.BaseIntegrationsPatch.IntegrationsFingerprint.IRegisterResolver import app.revanced.patches.shared.integrations.Constants.INTEGRATIONS_UTILS_CLASS_DESCRIPTOR -import app.revanced.util.resultOrThrow +import app.revanced.util.deprecatedOrResultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.ClassDef import com.android.tools.smali.dexlib2.iface.Method @@ -53,7 +53,7 @@ abstract class BaseIntegrationsPatch( ) { fun invoke(integrationsDescriptor: String) { - resultOrThrow().mutableMethod.let { method -> + deprecatedOrResultOrThrow()?.mutableMethod?.let { method -> val insertIndex = insertIndexResolver(method) val contextRegister = contextRegisterResolver(method) diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsToolBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsToolBarFingerprint.kt index f0de713d8..2cae4bf8d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsToolBarFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsToolBarFingerprint.kt @@ -8,7 +8,9 @@ import com.android.tools.smali.dexlib2.Opcode internal object ShortsToolBarFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - parameters = listOf("Z", "L", "L"), opcodes = listOf(Opcode.IPUT_BOOLEAN), - strings = listOf("Null topBarButtons") + strings = listOf("Null topBarButtons"), + customFingerprint = { methodDef, _ -> + methodDef.parameterTypes.firstOrNull() == "Z" + } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/fingerprints/StandalonePlayerActivityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/fingerprints/StandalonePlayerActivityFingerprint.kt index 2b643e64f..d42bea6d9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/fingerprints/StandalonePlayerActivityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/fingerprints/StandalonePlayerActivityFingerprint.kt @@ -8,7 +8,10 @@ import app.revanced.patches.shared.integrations.BaseIntegrationsPatch.Integratio * In 2023 supported was ended and is no longer available, * but this may still be used by older apps: * https://developers.google.com/youtube/android/player + * + * Deprecated in YouTube v19.38.xx+. */ +@Deprecated("Fingerprint is obsolete and will be deleted soon") internal object StandalonePlayerActivityFingerprint : IntegrationsFingerprint( customFingerprint = { methodDef, _ -> methodDef.definingClass == "Lcom/google/android/youtube/api/StandalonePlayerActivity;" diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index 1065d8ec6..e512a9236 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -33,6 +33,9 @@ import com.android.tools.smali.dexlib2.util.MethodUtil const val REGISTER_TEMPLATE_REPLACEMENT: String = "REGISTER_INDEX" +fun MethodFingerprint.deprecatedOrResultOrThrow() = + if (javaClass.annotations[0].toString().contains("Deprecated")) result else resultOrThrow() + fun MethodFingerprint.resultOrThrow() = result ?: throw exception /** From 71b11cf0c43439b130cb22331252c5940d9229cb Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:28:33 +0300 Subject: [PATCH 007/103] feat(YouTube Music - Settings): Add `Open default app settings` setting --- .../patches/music/utils/settings/SettingsPatch.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt index a3556c395..f1b4737ca 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt @@ -240,6 +240,14 @@ object SettingsPatch : BaseResourcePatch( } } + /** + * add open default app settings + */ + addPreferenceWithIntent( + CategoryType.MISC, + "revanced_default_app_settings" + ) + /** * add import export settings */ From e895e6f5c638df5e2233cc50dc82de9ccfe89df0 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:36:56 +0300 Subject: [PATCH 008/103] fix(YouTube Music - SponsorBlock): SponsorBlock does not skip segments at the beginning of a video when in the background --- .../MppWatchWhileLayoutFingerprint.kt | 10 +- .../ReturnYouTubeDislikeBytecodePatch.kt | 6 +- .../sponsorblock/SponsorBlockBytecodePatch.kt | 45 +++-- .../RectangleFieldInvalidatorFingerprint.kt} | 6 +- .../SeekBarConstructorFingerprint.kt | 2 +- .../information/VideoInformationPatch.kt | 160 +++++++++++++----- .../fingerprints/VideoIdFingerprint.kt | 2 +- .../video/playback/VideoPlaybackPatch.kt | 4 +- .../music/video/videoid/VideoIdPatch.kt | 38 ----- .../fingerprints/VideoLengthFingerprint.kt | 2 +- .../information/VideoInformationPatch.kt | 14 +- 11 files changed, 171 insertions(+), 118 deletions(-) rename src/main/kotlin/app/revanced/patches/music/{video/information/fingerprints/VideoLengthFingerprint.kt => utils/sponsorblock/fingerprints/RectangleFieldInvalidatorFingerprint.kt} (75%) rename src/main/kotlin/app/revanced/patches/music/utils/{ => sponsorblock}/fingerprints/SeekBarConstructorFingerprint.kt (82%) rename src/main/kotlin/app/revanced/patches/music/video/{videoid => information}/fingerprints/VideoIdFingerprint.kt (90%) delete mode 100644 src/main/kotlin/app/revanced/patches/music/video/videoid/VideoIdPatch.kt rename src/main/kotlin/app/revanced/patches/{youtube/video/information => shared}/fingerprints/VideoLengthFingerprint.kt (84%) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt index d60e19839..5da2c8242 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MppWatchWhileLayoutFingerprint.kt @@ -3,6 +3,7 @@ package app.revanced.patches.music.player.components.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.music.player.components.fingerprints.MppWatchWhileLayoutFingerprint.indexOfCallableInstruction import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerPlayPauseReplayButton +import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.util.containsWideLiteralInstructionValue import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction @@ -20,9 +21,14 @@ internal object MppWatchWhileLayoutFingerprint : MethodFingerprint( if (methodDef.name != "onFinishInflate") { return@custom false } + if (!methodDef.containsWideLiteralInstructionValue(MiniPlayerPlayPauseReplayButton)) { + return@custom false + } + if (!SettingsPatch.upward0718) { + return@custom true + } - methodDef.containsWideLiteralInstructionValue(MiniPlayerPlayPauseReplayButton) && - indexOfCallableInstruction(methodDef) >= 0 + indexOfCallableInstruction(methodDef) >= 0 } ) { fun indexOfCallableInstruction(methodDef: Method) = diff --git a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikeBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikeBytecodePatch.kt index 7c7223d9f..d1ce151c9 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikeBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikeBytecodePatch.kt @@ -12,7 +12,7 @@ import app.revanced.patches.music.utils.returnyoutubedislike.fingerprints.Dislik import app.revanced.patches.music.utils.returnyoutubedislike.fingerprints.LikeFingerprint import app.revanced.patches.music.utils.returnyoutubedislike.fingerprints.RemoveLikeFingerprint import app.revanced.patches.music.utils.returnyoutubedislike.fingerprints.TextComponentFingerprint -import app.revanced.patches.music.video.videoid.VideoIdPatch +import app.revanced.patches.music.video.information.VideoInformationPatch import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -22,7 +22,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Patch( dependencies = [ SharedResourceIdPatch::class, - VideoIdPatch::class + VideoInformationPatch::class ] ) object ReturnYouTubeDislikeBytecodePatch : BytecodePatch( @@ -70,7 +70,7 @@ object ReturnYouTubeDislikeBytecodePatch : BytecodePatch( } } - VideoIdPatch.hookVideoId("$INTEGRATIONS_RYD_CLASS_DESCRIPTOR->newVideoLoaded(Ljava/lang/String;)V") + VideoInformationPatch.videoIdHook("$INTEGRATIONS_RYD_CLASS_DESCRIPTOR->newVideoLoaded(Ljava/lang/String;)V") } diff --git a/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/SponsorBlockBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/SponsorBlockBytecodePatch.kt index 8845cc5e0..cd6ea4831 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/SponsorBlockBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/SponsorBlockBytecodePatch.kt @@ -6,14 +6,14 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch -import app.revanced.patches.music.utils.fingerprints.SeekBarConstructorFingerprint import app.revanced.patches.music.utils.integrations.Constants.INTEGRATIONS_PATH import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.music.utils.sponsorblock.fingerprints.MusicPlaybackControlsTimeBarDrawFingerprint import app.revanced.patches.music.utils.sponsorblock.fingerprints.MusicPlaybackControlsTimeBarOnMeasureFingerprint +import app.revanced.patches.music.utils.sponsorblock.fingerprints.RectangleFieldInvalidatorFingerprint +import app.revanced.patches.music.utils.sponsorblock.fingerprints.SeekBarConstructorFingerprint import app.revanced.patches.music.utils.sponsorblock.fingerprints.SeekbarOnDrawFingerprint import app.revanced.patches.music.video.information.VideoInformationPatch -import app.revanced.patches.music.video.videoid.VideoIdPatch import app.revanced.util.alsoResolve import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow @@ -29,8 +29,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch( dependencies = [ SharedResourceIdPatch::class, - VideoInformationPatch::class, - VideoIdPatch::class + VideoInformationPatch::class ] ) object SponsorBlockBytecodePatch : BytecodePatch( @@ -43,7 +42,6 @@ object SponsorBlockBytecodePatch : BytecodePatch( private const val INTEGRATIONS_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR = "$INTEGRATIONS_PATH/sponsorblock/SegmentPlaybackController;" - private lateinit var rectangleFieldName: String override fun execute(context: BytecodeContext) { /** @@ -59,6 +57,22 @@ object SponsorBlockBytecodePatch : BytecodePatch( /** * Responsible for seekbar in fullscreen */ + var rectangleFieldName = + RectangleFieldInvalidatorFingerprint.alsoResolve( + context, SeekBarConstructorFingerprint + ).let { + with (it.mutableMethod) { + val invalidateIndex = RectangleFieldInvalidatorFingerprint.indexOfInvalidateInstruction(this) + val rectangleIndex = indexOfFirstInstructionReversedOrThrow(invalidateIndex + 1) { + getReference()?.type == "Landroid/graphics/Rect;" + } + val rectangleReference = + getInstruction(rectangleIndex).reference + + (rectangleReference as FieldReference).name + } + } + SeekbarOnDrawFingerprint.alsoResolve( context, SeekBarConstructorFingerprint ).let { @@ -67,7 +81,7 @@ object SponsorBlockBytecodePatch : BytecodePatch( addInstructions( 0, """ move-object/from16 v0, p0 - const-string v1, "${VideoInformationPatch.rectangleFieldName}" + const-string v1, "$rectangleFieldName" invoke-static {v0, v1}, $INTEGRATIONS_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR->setSponsorBarRect(Ljava/lang/Object;Ljava/lang/String;)V """ ) @@ -100,14 +114,15 @@ object SponsorBlockBytecodePatch : BytecodePatch( /** * Responsible for seekbar in player */ - MusicPlaybackControlsTimeBarOnMeasureFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - val rectangleIndex = it.scanResult.patternScanResult!!.startIndex - val rectangleReference = - getInstruction(rectangleIndex).reference - rectangleFieldName = (rectangleReference as FieldReference).name + rectangleFieldName = + MusicPlaybackControlsTimeBarOnMeasureFingerprint.resultOrThrow().let { + with (it.mutableMethod) { + val rectangleIndex = it.scanResult.patternScanResult!!.startIndex + val rectangleReference = + getInstruction(rectangleIndex).reference + (rectangleReference as FieldReference).name + } } - } MusicPlaybackControlsTimeBarDrawFingerprint.resultOrThrow().let { it.mutableMethod.apply { @@ -121,7 +136,7 @@ object SponsorBlockBytecodePatch : BytecodePatch( ) // Draw segment - val drawCircleIndex = indexOfFirstInstructionReversedOrThrow { + val drawCircleIndex = indexOfFirstInstructionOrThrow { opcode == Opcode.INVOKE_VIRTUAL && getReference()?.name == "drawCircle" } @@ -137,6 +152,6 @@ object SponsorBlockBytecodePatch : BytecodePatch( /** * Set current video id */ - VideoIdPatch.hookVideoId("$INTEGRATIONS_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR->setVideoId(Ljava/lang/String;)V") + VideoInformationPatch.videoIdHook("$INTEGRATIONS_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR->setVideoId(Ljava/lang/String;)V") } } diff --git a/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoLengthFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/RectangleFieldInvalidatorFingerprint.kt similarity index 75% rename from src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoLengthFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/RectangleFieldInvalidatorFingerprint.kt index 293b0f1ed..3e779cccc 100644 --- a/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoLengthFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/RectangleFieldInvalidatorFingerprint.kt @@ -1,14 +1,14 @@ -package app.revanced.patches.music.video.information.fingerprints +package app.revanced.patches.music.utils.sponsorblock.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.patches.music.video.information.fingerprints.VideoLengthFingerprint.indexOfInvalidateInstruction +import app.revanced.patches.music.utils.sponsorblock.fingerprints.RectangleFieldInvalidatorFingerprint.indexOfInvalidateInstruction import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionReversed import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.Method import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal object VideoLengthFingerprint : MethodFingerprint( +internal object RectangleFieldInvalidatorFingerprint : MethodFingerprint( opcodes = listOf( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_WIDE, diff --git a/src/main/kotlin/app/revanced/patches/music/utils/fingerprints/SeekBarConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/SeekBarConstructorFingerprint.kt similarity index 82% rename from src/main/kotlin/app/revanced/patches/music/utils/fingerprints/SeekBarConstructorFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/SeekBarConstructorFingerprint.kt index cf5d9a27f..9edfd4c98 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/fingerprints/SeekBarConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/SeekBarConstructorFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.utils.fingerprints +package app.revanced.patches.music.utils.sponsorblock.fingerprints import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.InlineTimeBarAdBreakMarkerColor import app.revanced.util.fingerprint.LiteralValueFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/video/information/VideoInformationPatch.kt b/src/main/kotlin/app/revanced/patches/music/video/information/VideoInformationPatch.kt index 5b3e02e5f..be7131c77 100644 --- a/src/main/kotlin/app/revanced/patches/music/video/information/VideoInformationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/video/information/VideoInformationPatch.kt @@ -4,6 +4,7 @@ import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patcher.fingerprint.MethodFingerprintResult import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException @@ -12,31 +13,28 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableClass import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable import app.revanced.patcher.util.smali.toInstructions -import app.revanced.patches.music.utils.fingerprints.SeekBarConstructorFingerprint import app.revanced.patches.music.utils.integrations.Constants.SHARED_PATH import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.music.video.information.fingerprints.PlaybackSpeedFingerprint import app.revanced.patches.music.video.information.fingerprints.PlaybackSpeedParentFingerprint import app.revanced.patches.music.video.information.fingerprints.PlayerControllerSetTimeReferenceFingerprint import app.revanced.patches.music.video.information.fingerprints.VideoEndFingerprint -import app.revanced.patches.music.video.information.fingerprints.VideoLengthFingerprint +import app.revanced.patches.music.video.information.fingerprints.VideoIdFingerprint import app.revanced.patches.music.video.information.fingerprints.VideoQualityListFingerprint import app.revanced.patches.music.video.information.fingerprints.VideoQualityTextFingerprint -import app.revanced.patches.music.video.videoid.VideoIdPatch import app.revanced.patches.shared.fingerprints.MdxPlayerDirectorSetVideoStageFingerprint +import app.revanced.patches.shared.fingerprints.VideoLengthFingerprint import app.revanced.util.addFieldAndInstructions +import app.revanced.util.alsoResolve import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode 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 -import com.android.tools.smali.dexlib2.iface.reference.FieldReference import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.immutable.ImmutableMethod import com.android.tools.smali.dexlib2.immutable.ImmutableMethodImplementation @@ -44,10 +42,7 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter import com.android.tools.smali.dexlib2.util.MethodUtil @Patch( - dependencies = [ - SharedResourceIdPatch::class, - VideoIdPatch::class - ] + dependencies = [SharedResourceIdPatch::class] ) @Suppress("MemberVisibilityCanBePrivate") object VideoInformationPatch : BytecodePatch( @@ -55,8 +50,9 @@ object VideoInformationPatch : BytecodePatch( MdxPlayerDirectorSetVideoStageFingerprint, PlayerControllerSetTimeReferenceFingerprint, PlaybackSpeedParentFingerprint, - SeekBarConstructorFingerprint, VideoEndFingerprint, + VideoIdFingerprint, + VideoLengthFingerprint, VideoQualityListFingerprint, VideoQualityTextFingerprint ) @@ -64,6 +60,20 @@ object VideoInformationPatch : BytecodePatch( private const val INTEGRATIONS_CLASS_DESCRIPTOR = "$SHARED_PATH/VideoInformation;" + private const val REGISTER_PLAYER_RESPONSE_MODEL = 4 + + private const val REGISTER_VIDEO_ID = 0 + private const val REGISTER_VIDEO_LENGTH = 1 + + @Suppress("unused") + private const val REGISTER_VIDEO_LENGTH_DUMMY = 2 + + private lateinit var PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR: String + private lateinit var videoIdMethodCall: String + private lateinit var videoLengthMethodCall: String + + private lateinit var videoInformationMethod: MutableMethod + /** * Used in [VideoEndFingerprint] and [MdxPlayerDirectorSetVideoStageFingerprint]. * Since both classes are inherited from the same class, @@ -85,7 +95,6 @@ object VideoInformationPatch : BytecodePatch( private var videoTimeConstructorInsertIndex = 2 // Used by other patches. - lateinit var rectangleFieldName: String internal lateinit var playbackSpeedResult: MethodFingerprintResult private fun addSeekInterfaceMethods( @@ -108,7 +117,7 @@ object VideoInformationPatch : BytecodePatch( 4, """ # first enum (field a) is SEEK_SOURCE_UNKNOWN sget-object v0, $seekSourceEnumType->a:$seekSourceEnumType - invoke-virtual {p0, p1, p2, v0}, ${definingClass}->$seekMethodName(J$seekSourceEnumType)Z + invoke-virtual {p0, p1, p2, v0}, $definingClass->$seekMethodName(J$seekSourceEnumType)Z move-result p1 return p1 """.toInstructions(), @@ -193,6 +202,34 @@ object VideoInformationPatch : BytecodePatch( } } + /** + * Set current video information + */ + VideoIdFingerprint.resultOrThrow().let { + it.mutableMethod.apply { + val playerResponseModelIndex = it.scanResult.patternScanResult!!.startIndex + + PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR = + getInstruction(playerResponseModelIndex) + .getReference() + ?.definingClass + ?: throw PatchException("Could not find Player Response Model class") + + videoIdMethodCall = + VideoIdFingerprint.getPlayerResponseInstruction("Ljava/lang/String;") + videoLengthMethodCall = + VideoLengthFingerprint.getPlayerResponseInstruction("J") + + videoInformationMethod = getVideoInformationMethod() + it.mutableClass.methods.add(videoInformationMethod) + + addInstruction( + playerResponseModelIndex + 2, + "invoke-direct/range {p0 .. p1}, $definingClass->setVideoInformation($PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR)V" + ) + } + } + /** * Set the video time method */ @@ -209,45 +246,19 @@ object VideoInformationPatch : BytecodePatch( /** * Set current video length */ - VideoLengthFingerprint.resolve( - context, - SeekBarConstructorFingerprint.resultOrThrow().classDef - ) - VideoLengthFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - val invalidateIndex = VideoLengthFingerprint.indexOfInvalidateInstruction(this) - val rectangleIndex = indexOfFirstInstructionReversedOrThrow(invalidateIndex + 1) { - getReference()?.type == "Landroid/graphics/Rect;" - } - rectangleFieldName = - (getInstruction(rectangleIndex).reference as FieldReference).name - - val videoLengthRegisterIndex = it.scanResult.patternScanResult!!.startIndex + 1 - val videoLengthRegister = - getInstruction(videoLengthRegisterIndex).registerA - val dummyRegisterForLong = - videoLengthRegister + 1 // required for long values since they are wide - - addInstruction( - videoLengthRegisterIndex + 1, - "invoke-static {v$videoLengthRegister, v$dummyRegisterForLong}, $INTEGRATIONS_CLASS_DESCRIPTOR->setVideoLength(J)V" - ) - } - } + videoLengthHook("$INTEGRATIONS_CLASS_DESCRIPTOR->setVideoLength(J)V") /** * Set current video id */ - VideoIdPatch.hookVideoId("$INTEGRATIONS_CLASS_DESCRIPTOR->setVideoId(Ljava/lang/String;)V") + videoIdHook("$INTEGRATIONS_CLASS_DESCRIPTOR->setVideoId(Ljava/lang/String;)V") /** * Hook current playback speed */ - PlaybackSpeedFingerprint.resolve( - context, - PlaybackSpeedParentFingerprint.resultOrThrow().classDef - ) - PlaybackSpeedFingerprint.resultOrThrow().let { + PlaybackSpeedFingerprint.alsoResolve( + context, PlaybackSpeedParentFingerprint + ).let { it.mutableMethod.apply { playbackSpeedResult = it val endIndex = it.scanResult.patternScanResult!!.endIndex @@ -315,6 +326,49 @@ object VideoInformationPatch : BytecodePatch( } } + private fun MethodFingerprint.getPlayerResponseInstruction(returnType: String): String { + resultOrThrow().mutableMethod.apply { + val targetReference = getInstruction( + indexOfFirstInstructionOrThrow { + val reference = getReference() + (opcode == Opcode.INVOKE_INTERFACE_RANGE || opcode == Opcode.INVOKE_INTERFACE) && + reference?.definingClass == PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR && + reference.returnType == returnType + } + ).reference + + return "invoke-interface/range {v$REGISTER_PLAYER_RESPONSE_MODEL .. v$REGISTER_PLAYER_RESPONSE_MODEL}, $targetReference" + } + } + + private fun MutableMethod.getVideoInformationMethod(): MutableMethod = + ImmutableMethod( + definingClass, + "setVideoInformation", + listOf( + ImmutableMethodParameter( + PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR, + annotations, + null + ) + ), + "V", + AccessFlags.PRIVATE or AccessFlags.FINAL, + annotations, + null, + ImmutableMethodImplementation( + REGISTER_PLAYER_RESPONSE_MODEL + 1, """ + $videoIdMethodCall + move-result-object v$REGISTER_VIDEO_ID + $videoLengthMethodCall + move-result-wide v$REGISTER_VIDEO_LENGTH + return-void + """.toInstructions(), + null, + null + ) + ).toMutable() + private fun MutableMethod.insert(insertIndex: Int, register: String, descriptor: String) = addInstruction(insertIndex, "invoke-static { $register }, $descriptor") @@ -348,6 +402,24 @@ object VideoInformationPatch : BytecodePatch( "invoke-static { }, $targetMethodClass->$targetMethodName()V" ) + internal fun videoIdHook( + descriptor: String + ) = videoInformationMethod.apply { + addInstruction( + implementation!!.instructions.lastIndex, + "invoke-static {v$REGISTER_VIDEO_ID}, $descriptor" + ) + } + + internal fun videoLengthHook( + descriptor: String + ) = videoInformationMethod.apply { + addInstruction( + implementation!!.instructions.lastIndex, + "invoke-static {v$REGISTER_VIDEO_LENGTH, v$REGISTER_VIDEO_LENGTH_DUMMY}, $descriptor" + ) + } + /** * Hook the video time. * The hook is usually called once per second. diff --git a/src/main/kotlin/app/revanced/patches/music/video/videoid/fingerprints/VideoIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoIdFingerprint.kt similarity index 90% rename from src/main/kotlin/app/revanced/patches/music/video/videoid/fingerprints/VideoIdFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoIdFingerprint.kt index bc75a0302..5f901dc11 100644 --- a/src/main/kotlin/app/revanced/patches/music/video/videoid/fingerprints/VideoIdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoIdFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.video.videoid.fingerprints +package app.revanced.patches.music.video.information.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/video/playback/VideoPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/music/video/playback/VideoPlaybackPatch.kt index 1b064ec81..804897727 100644 --- a/src/main/kotlin/app/revanced/patches/music/video/playback/VideoPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/video/playback/VideoPlaybackPatch.kt @@ -12,7 +12,6 @@ import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.music.video.information.VideoInformationPatch import app.revanced.patches.music.video.playback.fingerprints.PlaybackSpeedBottomSheetFingerprint import app.revanced.patches.music.video.playback.fingerprints.UserQualityChangeFingerprint -import app.revanced.patches.music.video.videoid.VideoIdPatch import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow @@ -29,7 +28,6 @@ object VideoPlaybackPatch : BaseBytecodePatch( dependencies = setOf( CustomPlaybackSpeedPatch::class, SettingsPatch::class, - VideoIdPatch::class, VideoInformationPatch::class ), compatiblePackages = COMPATIBLE_PACKAGE, @@ -102,7 +100,7 @@ object VideoPlaybackPatch : BaseBytecodePatch( } } - VideoIdPatch.hookVideoId("$INTEGRATIONS_VIDEO_QUALITY_CLASS_DESCRIPTOR->newVideoStarted(Ljava/lang/String;)V") + VideoInformationPatch.videoIdHook("$INTEGRATIONS_VIDEO_QUALITY_CLASS_DESCRIPTOR->newVideoStarted(Ljava/lang/String;)V") // endregion diff --git a/src/main/kotlin/app/revanced/patches/music/video/videoid/VideoIdPatch.kt b/src/main/kotlin/app/revanced/patches/music/video/videoid/VideoIdPatch.kt deleted file mode 100644 index 85c190197..000000000 --- a/src/main/kotlin/app/revanced/patches/music/video/videoid/VideoIdPatch.kt +++ /dev/null @@ -1,38 +0,0 @@ -package app.revanced.patches.music.video.videoid - -import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction -import app.revanced.patcher.patch.BytecodePatch -import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod -import app.revanced.patches.music.video.videoid.fingerprints.VideoIdFingerprint -import app.revanced.util.resultOrThrow -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction - -object VideoIdPatch : BytecodePatch( - setOf(VideoIdFingerprint) -) { - private var videoIdRegister = 0 - private var videoIdInsertIndex = 0 - private lateinit var videoIdMethod: MutableMethod - - override fun execute(context: BytecodeContext) { - - VideoIdFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - videoIdMethod = this - videoIdInsertIndex = it.scanResult.patternScanResult!!.startIndex + 2 - videoIdRegister = - getInstruction(videoIdInsertIndex - 1).registerA - } - } - } - - fun hookVideoId( - methodDescriptor: String - ) = videoIdMethod.addInstruction( - videoIdInsertIndex++, - "invoke-static {v$videoIdRegister}, $methodDescriptor" - ) -} - diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoLengthFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/fingerprints/VideoLengthFingerprint.kt similarity index 84% rename from src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoLengthFingerprint.kt rename to src/main/kotlin/app/revanced/patches/shared/fingerprints/VideoLengthFingerprint.kt index 34b4eb74a..bd916f6a6 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoLengthFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/fingerprints/VideoLengthFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.youtube.video.information.fingerprints +package app.revanced.patches.shared.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt index b647bbb30..7c532cf12 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt @@ -31,7 +31,7 @@ import app.revanced.patches.youtube.video.information.fingerprints.SeekRelativeF import app.revanced.patches.youtube.video.information.fingerprints.VideoIdFingerprint import app.revanced.patches.youtube.video.information.fingerprints.VideoIdFingerprintBackgroundPlay import app.revanced.patches.youtube.video.information.fingerprints.VideoIdFingerprintShorts -import app.revanced.patches.youtube.video.information.fingerprints.VideoLengthFingerprint +import app.revanced.patches.shared.fingerprints.VideoLengthFingerprint import app.revanced.patches.youtube.video.information.fingerprints.VideoQualityListFingerprint import app.revanced.patches.youtube.video.information.fingerprints.VideoQualityTextFingerprint import app.revanced.patches.youtube.video.information.fingerprints.VideoTitleFingerprint @@ -158,7 +158,7 @@ object VideoInformationPatch : BytecodePatch( 4, """ # first enum (field a) is SEEK_SOURCE_UNKNOWN sget-object v0, $seekSourceEnumType->a:$seekSourceEnumType - invoke-virtual {p0, p1, p2, v0}, ${definingClass}->$seekMethodName(J$seekSourceEnumType)Z + invoke-virtual {p0, p1, p2, v0}, $definingClass->$seekMethodName(J$seekSourceEnumType)Z move-result p1 return p1 """.toInstructions(), @@ -565,7 +565,7 @@ object VideoInformationPatch : BytecodePatch( } ).reference - return "invoke-interface {v${REGISTER_PLAYER_RESPONSE_MODEL}}, $targetReference" + return "invoke-interface {v$REGISTER_PLAYER_RESPONSE_MODEL}, $targetReference" } } @@ -585,7 +585,7 @@ object VideoInformationPatch : BytecodePatch( annotations, null, ImmutableMethodImplementation( - 9, """ + REGISTER_PLAYER_RESPONSE_MODEL + 1, """ $channelIdMethodCall move-result-object v$REGISTER_CHANNEL_ID $channelNameMethodCall @@ -617,7 +617,7 @@ object VideoInformationPatch : BytecodePatch( insert( index, - "v${REGISTER_CHANNEL_ID} .. v${REGISTER_VIDEO_IS_LIVE}", + "v$REGISTER_CHANNEL_ID .. v$REGISTER_VIDEO_IS_LIVE", descriptor ) } @@ -631,7 +631,7 @@ object VideoInformationPatch : BytecodePatch( insert( index, - "v${REGISTER_CHANNEL_ID} .. v${REGISTER_VIDEO_IS_LIVE}", + "v$REGISTER_CHANNEL_ID .. v$REGISTER_VIDEO_IS_LIVE", descriptor ) } @@ -645,7 +645,7 @@ object VideoInformationPatch : BytecodePatch( insert( index, - "v${REGISTER_CHANNEL_ID} .. v${REGISTER_VIDEO_IS_LIVE}", + "v$REGISTER_CHANNEL_ID .. v$REGISTER_VIDEO_IS_LIVE", descriptor ) } From 8c3a5d2fd08cdca5cf66324cc2a44b722e7062cc Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:37:33 +0300 Subject: [PATCH 009/103] fix(YouTube - Hide feed components): `Hide carousel shelf` setting sometimes hides the library shelf --- .../feed/components/FeedComponentsPatch.kt | 3 ++ .../navigation/NavigationBarHookPatch.kt | 29 ++----------------- .../MobileTopBarButtonOnClickFingerprint.kt | 8 ----- ...ettingsActivityOnBackPressedFingerprint.kt | 14 --------- 4 files changed, 5 insertions(+), 49 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/MobileTopBarButtonOnClickFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/SettingsActivityOnBackPressedFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt index 9207a4fab..a896aef65 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt @@ -75,6 +75,8 @@ object FeedComponentsPatch : BaseBytecodePatch( ShowMoreButtonFingerprint ) ) { + private const val CAROUSEL_SHELF_FILTER_CLASS_DESCRIPTOR = + "$COMPONENTS_PATH/CarouselShelfFilter;" private const val FEED_COMPONENTS_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/FeedComponentsFilter;" private const val FEED_VIDEO_FILTER_CLASS_DESCRIPTOR = @@ -287,6 +289,7 @@ object FeedComponentsPatch : BaseBytecodePatch( // endregion + LithoFilterPatch.addFilter(CAROUSEL_SHELF_FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FEED_COMPONENTS_FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FEED_VIDEO_FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FEED_VIDEO_VIEWS_FILTER_CLASS_DESCRIPTOR) diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt index 92b600ca5..5ea1cb576 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt @@ -2,7 +2,6 @@ package app.revanced.patches.youtube.utils.navigation 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.getInstructions import app.revanced.patcher.patch.BytecodePatch @@ -12,13 +11,11 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.youtube.utils.fingerprints.InitializeButtonsFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.SHARED_PATH import app.revanced.patches.youtube.utils.mainactivity.MainActivityResolvePatch -import app.revanced.patches.youtube.utils.navigation.fingerprints.MobileTopBarButtonOnClickFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.NavigationEnumFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarButtonsCreateDrawableViewFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarButtonsCreateResourceViewFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarButtonsViewSetSelectedFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarConstructorFingerprint -import app.revanced.patches.youtube.utils.navigation.fingerprints.SettingsActivityOnBackPressedFingerprint import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.util.getReference @@ -41,13 +38,11 @@ import com.android.tools.smali.dexlib2.util.MethodUtil @Suppress("unused") object NavigationBarHookPatch : BytecodePatch( setOf( - MobileTopBarButtonOnClickFingerprint, NavigationEnumFingerprint, PivotBarButtonsCreateDrawableViewFingerprint, PivotBarButtonsCreateResourceViewFingerprint, PivotBarButtonsViewSetSelectedFingerprint, PivotBarConstructorFingerprint, - SettingsActivityOnBackPressedFingerprint ), ) { private const val INTEGRATIONS_CLASS_DESCRIPTOR = @@ -110,16 +105,11 @@ object NavigationBarHookPatch : BytecodePatch( val instruction = getInstruction(index) val viewRegister = instruction.registerC val isSelectedRegister = instruction.registerD - val freeRegister = implementation!!.registerCount - parameters.size - 2 addInstruction( index + 1, - "invoke-static { v$viewRegister, v$freeRegister, v$isSelectedRegister }, " + - "$INTEGRATIONS_CLASS_DESCRIPTOR->navigationTabSelected(Landroid/view/View;IZ)V", - ) - addInstruction( - 0, - "move/16 v$freeRegister, p1" + "invoke-static { v$viewRegister, v$isSelectedRegister }, " + + "$INTEGRATIONS_CLASS_DESCRIPTOR->navigationTabSelected(Landroid/view/View;Z)V", ) } } @@ -133,21 +123,6 @@ object NavigationBarHookPatch : BytecodePatch( INTEGRATIONS_CLASS_DESCRIPTOR, "onBackPressed" ) - - /** - * Since it is used only after opening the library tab, set index to 3. - */ - arrayOf( - MobileTopBarButtonOnClickFingerprint, - SettingsActivityOnBackPressedFingerprint - ).forEach { fingerprint -> - fingerprint.resultOrThrow().mutableMethod.addInstructions( - 0, """ - const/4 v0, 0x3 - invoke-static {v0}, $INTEGRATIONS_CLASS_DESCRIPTOR->setNavigationTabIndex(I)V - """ - ) - } } val hookNavigationButtonCreated: (String) -> Unit by lazy { diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/MobileTopBarButtonOnClickFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/MobileTopBarButtonOnClickFingerprint.kt deleted file mode 100644 index 48215f9c8..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/MobileTopBarButtonOnClickFingerprint.kt +++ /dev/null @@ -1,8 +0,0 @@ -package app.revanced.patches.youtube.utils.navigation.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -object MobileTopBarButtonOnClickFingerprint : MethodFingerprint( - strings = listOf("MenuButtonRendererKey"), - customFingerprint = { methodDef, _ -> methodDef.name == "onClick" } -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/SettingsActivityOnBackPressedFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/SettingsActivityOnBackPressedFingerprint.kt deleted file mode 100644 index 03fe1c87c..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/SettingsActivityOnBackPressedFingerprint.kt +++ /dev/null @@ -1,14 +0,0 @@ -package app.revanced.patches.youtube.utils.navigation.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.MethodFingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -object SettingsActivityOnBackPressedFingerprint : MethodFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - returnType = "V", - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("/SettingsActivity;") - && methodDef.name == "onBackPressed" - } -) \ No newline at end of file From 63c463ca2bebd43c85e79609275f72bf4176f242 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:38:35 +0300 Subject: [PATCH 010/103] fix(YouTube - Player components): The `Disable player popup panels` setting disables the engagement panel in Mix playlists on certain YouTube versions --- .../fingerprints/StartVideoInformerFingerprint.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/app/revanced/patches/shared/fingerprints/StartVideoInformerFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/fingerprints/StartVideoInformerFingerprint.kt index dec566143..ca8d33f53 100644 --- a/src/main/kotlin/app/revanced/patches/shared/fingerprints/StartVideoInformerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/fingerprints/StartVideoInformerFingerprint.kt @@ -12,5 +12,17 @@ internal object StartVideoInformerFingerprint : MethodFingerprint( Opcode.INVOKE_INTERFACE, Opcode.RETURN_VOID ), - strings = listOf("pc") + strings = listOf("pc"), + customFingerprint = custom@{ methodDef, _ -> + if (methodDef.implementation == null) + return@custom false + + methodDef.implementation!!.instructions + .withIndex() + .filter { (_, instruction) -> + instruction.opcode == Opcode.CONST_STRING + } + .map { (index, _) -> index } + .size == 1 + } ) \ No newline at end of file From ab222a672317ec7d00d566b1ca655b7b5c9a78cd Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:47:12 +0300 Subject: [PATCH 011/103] fix(YouTube - Settings): `Search bar in settings` can't find `RYD` and `SponsorBlock` settings --- .../integrations/BaseIntegrationsPatch.kt | 7 +- .../spoofappversion/SpoofAppVersionPatch.kt | 64 +++++++------------ .../doubletaplength/DoubleTapLengthPatch.kt | 12 +++- .../player/buttons/PlayerButtonsPatch.kt | 4 +- .../youtube/utils/settings/ResourceUtils.kt | 16 +++-- .../kotlin/app/revanced/util/BytecodeUtils.kt | 4 +- .../youtube/settings/xml/revanced_prefs.xml | 57 +++++++++++++++-- 7 files changed, 103 insertions(+), 61 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt b/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt index 674b7ed36..c00eb6273 100644 --- a/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt @@ -7,7 +7,8 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patches.shared.integrations.BaseIntegrationsPatch.IntegrationsFingerprint.IRegisterResolver import app.revanced.patches.shared.integrations.Constants.INTEGRATIONS_UTILS_CLASS_DESCRIPTOR -import app.revanced.util.deprecatedOrResultOrThrow +import app.revanced.util.isDeprecated +import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.ClassDef import com.android.tools.smali.dexlib2.iface.Method @@ -53,7 +54,9 @@ abstract class BaseIntegrationsPatch( ) { fun invoke(integrationsDescriptor: String) { - deprecatedOrResultOrThrow()?.mutableMethod?.let { method -> + if (isDeprecated()) return + + resultOrThrow().mutableMethod.let { method -> val insertIndex = insertIndexResolver(method) val contextRegister = contextRegisterResolver(method) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt index 5c53e03c1..54a4a0b0a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt @@ -2,11 +2,11 @@ package app.revanced.patches.youtube.general.spoofappversion import app.revanced.patcher.data.ResourceContext import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.youtube.utils.settings.ResourceUtils.addEntryValues import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.patch.BaseResourcePatch -import org.w3c.dom.Element -@Suppress("DEPRECATION", "unused") +@Suppress("unused") object SpoofAppVersionPatch : BaseResourcePatch( name = "Spoof app version", description = "Adds options to spoof the YouTube client version. " + @@ -17,31 +17,20 @@ object SpoofAppVersionPatch : BaseResourcePatch( ), compatiblePackages = COMPATIBLE_PACKAGE ) { + private const val ATTRIBUTE_NAME_ENTRIES = + "revanced_spoof_app_version_target_entries" + + private const val ATTRIBUTE_NAME_ENTRY_VALUE = + "revanced_spoof_app_version_target_entry_values" + override fun execute(context: ResourceContext) { if (SettingsPatch.upward1834) { - context.appendChild( - arrayOf( - "revanced_spoof_app_version_target_entries" to "@string/revanced_spoof_app_version_target_entry_18_33_40", - "revanced_spoof_app_version_target_entry_values" to "18.33.40", - ) - ) - + context.appendAppVersion("18.33.40") if (SettingsPatch.upward1839) { - context.appendChild( - arrayOf( - "revanced_spoof_app_version_target_entries" to "@string/revanced_spoof_app_version_target_entry_18_38_45", - "revanced_spoof_app_version_target_entry_values" to "18.38.45" - ) - ) - + context.appendAppVersion("18.38.45") if (SettingsPatch.upward1849) { - context.appendChild( - arrayOf( - "revanced_spoof_app_version_target_entries" to "@string/revanced_spoof_app_version_target_entry_18_48_39", - "revanced_spoof_app_version_target_entry_values" to "18.48.39" - ) - ) + context.appendAppVersion("18.48.39") } } } @@ -60,25 +49,16 @@ object SpoofAppVersionPatch : BaseResourcePatch( SettingsPatch.updatePatchStatus(this) } - private fun ResourceContext.appendChild(entryArray: Array>) { - entryArray.map { (attributeName, attributeValue) -> - this.xmlEditor["res/values/arrays.xml"].use { editor -> - editor.file.apply { - val resourcesNode = getElementsByTagName("resources").item(0) as Element - - val newElement: Element = createElement("item") - for (i in 0 until resourcesNode.childNodes.length) { - val node = resourcesNode.childNodes.item(i) as? Element ?: continue - - if (node.getAttribute("name") == attributeName) { - newElement.appendChild(createTextNode(attributeValue)) - val firstChild = node.firstChild - - node.insertBefore(newElement, firstChild) - } - } - } - } - } + private fun ResourceContext.appendAppVersion(appVersion: String) { + addEntryValues( + ATTRIBUTE_NAME_ENTRIES, + "@string/revanced_spoof_app_version_target_entry_" + appVersion.replace(".", "_"), + prepend = false + ) + addEntryValues( + ATTRIBUTE_NAME_ENTRY_VALUE, + appVersion, + prepend = false + ) } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/doubletaplength/DoubleTapLengthPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/doubletaplength/DoubleTapLengthPatch.kt index 65bc0860e..ad981948c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/doubletaplength/DoubleTapLengthPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/doubletaplength/DoubleTapLengthPatch.kt @@ -56,8 +56,16 @@ object DoubleTapLengthPatch : BaseResourcePatch( ) for (index in 0 until splits.count()) { - context.addEntryValues(arrayPath, lengthElements[index], entryValueName) - context.addEntryValues(arrayPath, lengthElements[index], entriesName) + context.addEntryValues( + entryValueName, + lengthElements[index], + path = arrayPath + ) + context.addEntryValues( + entriesName, + lengthElements[index], + path = arrayPath + ) } SettingsPatch.updatePatchStatus(this) diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/PlayerButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/PlayerButtonsPatch.kt index 922deb2b7..69e42d03f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/PlayerButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/PlayerButtonsPatch.kt @@ -30,8 +30,8 @@ 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.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.RegisterRangeInstruction import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction -import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction3rc @Suppress("unused") object PlayerButtonsPatch : BaseBytecodePatch( @@ -182,7 +182,7 @@ object PlayerButtonsPatch : BaseBytecodePatch( PlayerControlsVisibilityModelFingerprint.resultOrThrow().let { it.mutableMethod.apply { val callIndex = indexOfFirstInstructionOrThrow(Opcode.INVOKE_DIRECT_RANGE) - val callInstruction = getInstruction(callIndex) + val callInstruction = getInstruction(callIndex) val hasNextParameterRegister = callInstruction.startRegister + HAS_NEXT val hasPreviousParameterRegister = callInstruction.startRegister + HAS_PREVIOUS diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/ResourceUtils.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/ResourceUtils.kt index 26c3649ac..451cd2b86 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/ResourceUtils.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/ResourceUtils.kt @@ -50,23 +50,27 @@ object ResourceUtils { } fun ResourceContext.addEntryValues( - path: String, - speedEntryValues: String, - attributeName: String + attributeName: String, + attributeValue: String, + path: String = "res/values/arrays.xml", + prepend: Boolean = true, ) { xmlEditor[path].use { with(it.file) { val resourcesNode = getElementsByTagName("resources").item(0) as Element val newElement: Element = createElement("item") - for (i in 0 until resourcesNode.childNodes.length) { val node = resourcesNode.childNodes.item(i) as? Element ?: continue if (node.getAttribute("name") == attributeName) { - newElement.appendChild(createTextNode(speedEntryValues)) + newElement.appendChild(createTextNode(attributeValue)) - node.appendChild(newElement) + if (prepend) { + node.appendChild(newElement) + } else { + node.insertBefore(newElement, node.firstChild) + } } } } diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index e512a9236..686c14fa9 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -33,8 +33,8 @@ import com.android.tools.smali.dexlib2.util.MethodUtil const val REGISTER_TEMPLATE_REPLACEMENT: String = "REGISTER_INDEX" -fun MethodFingerprint.deprecatedOrResultOrThrow() = - if (javaClass.annotations[0].toString().contains("Deprecated")) result else resultOrThrow() +fun MethodFingerprint.isDeprecated() = + javaClass.annotations[0].toString().contains("Deprecated") fun MethodFingerprint.resultOrThrow() = result ?: throw exception diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index ca18949e3..2b399197c 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -206,8 +206,8 @@ - - + + @@ -220,7 +220,7 @@ - + @@ -603,11 +603,58 @@ + + + + + + + + + + + PREFERENCE_SCREEN: RETURN_YOUTUBE_DISLIKE --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PREFERENCE_SCREEN: SPONSOR_BLOCK --> From 72b61d1bc2bac38e38e9ae70a1e7b8a6d0fc03ee Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:47:47 +0300 Subject: [PATCH 012/103] feat(YouTube): Add `Hook YouTube Music actions` patch --- .../general/downloads/DownloadActionsPatch.kt | 2 +- .../general/music/YouTubeMusicActionsPatch.kt | 108 ++++++++++++++++++ .../fingerprints/AppDeepLinkFingerprint.kt | 27 +++++ .../youtube/utils/settings/SettingsPatch.kt | 6 + .../youtube/settings/host/values/arrays.xml | 6 + .../youtube/settings/xml/revanced_prefs.xml | 27 ++++- 6 files changed, 169 insertions(+), 7 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/music/fingerprints/AppDeepLinkFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/downloads/DownloadActionsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/downloads/DownloadActionsPatch.kt index f1fe0d3f1..9f426080b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/downloads/DownloadActionsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/downloads/DownloadActionsPatch.kt @@ -176,7 +176,7 @@ object DownloadActionsPatch : BaseBytecodePatch( SettingsPatch.addPreference( arrayOf( "PREFERENCE_SCREEN: GENERAL", - "PREFERENCE_CATEGORY: GENERAL_EXPERIMENTAL_FLAGS", + "SETTINGS: HOOK_BUTTONS", "SETTINGS: HOOK_DOWNLOAD_ACTIONS" ) ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt new file mode 100644 index 000000000..acf3b1d00 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt @@ -0,0 +1,108 @@ +package app.revanced.patches.youtube.general.music + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patches.youtube.general.music.fingerprints.AppDeepLinkFingerprint +import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.youtube.utils.gms.GmsCoreSupportResourcePatch.PackageNameYouTubeMusic +import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_PATH +import app.revanced.patches.youtube.utils.settings.ResourceUtils.addEntryValues +import app.revanced.patches.youtube.utils.settings.SettingsBytecodePatch +import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.patch.BaseBytecodePatch +import app.revanced.util.resultOrThrow +import app.revanced.util.valueOrThrow +import com.android.tools.smali.dexlib2.Opcode +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 +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import java.io.Closeable + +@Suppress("unused") +object YouTubeMusicActionsPatch : BaseBytecodePatch( + name = "Hook YouTube Music actions", + description = "Adds support for opening music in RVX Music using the in-app YouTube Music button.", + dependencies = setOf(SettingsPatch::class), + compatiblePackages = COMPATIBLE_PACKAGE, + fingerprints = setOf(AppDeepLinkFingerprint) +), Closeable { + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "$GENERAL_PATH/YouTubeMusicActionsPatch;" + + override fun execute(context: BytecodeContext) { + + AppDeepLinkFingerprint.resultOrThrow().let { + it.mutableMethod.apply { + val packageNameIndex = it.scanResult.patternScanResult!!.startIndex + val packageNameField = getInstruction(packageNameIndex).reference.toString() + + implementation!!.instructions + .withIndex() + .filter { (_, instruction) -> + instruction.opcode == Opcode.IGET_OBJECT && + instruction.getReference()?.toString() == packageNameField + } + .map { (index, _) -> index } + .reversed() + .forEach { index -> + val register = getInstruction(index).registerA + + addInstructions( + index + 1, """ + invoke-static {v$register}, $INTEGRATIONS_CLASS_DESCRIPTOR->overridePackageName(Ljava/lang/String;)Ljava/lang/String; + move-result-object v$register + """ + ) + } + } + } + + /** + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "PREFERENCE_SCREEN: GENERAL", + "SETTINGS: HOOK_BUTTONS", + "SETTINGS: HOOK_YOUTUBE_MUSIC_ACTIONS" + ) + ) + + SettingsPatch.updatePatchStatus(this) + } + + override fun close() { + if (SettingsPatch.containsPatch("GmsCore support")) { + SettingsPatch.contexts.addEntryValues( + "revanced_third_party_youtube_music_label", + "RVX Music" + ) + SettingsPatch.contexts.addEntryValues( + "revanced_third_party_youtube_music_package_name", + PackageNameYouTubeMusic.valueOrThrow() + ) + + SettingsBytecodePatch.contexts + .findClass { classDef -> classDef.type == INTEGRATIONS_CLASS_DESCRIPTOR } + ?.mutableClass + ?.methods + ?.first { method -> method.name == "getRVXMusicPackageName" } + ?.apply { + val replaceIndex = indexOfFirstInstructionOrThrow(Opcode.CONST_STRING) + val replaceRegister = + getInstruction(replaceIndex).registerA + + replaceInstruction( + replaceIndex, + "const-string v$replaceRegister, \"${PackageNameYouTubeMusic.valueOrThrow()}\"" + ) + } + } + + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/music/fingerprints/AppDeepLinkFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/music/fingerprints/AppDeepLinkFingerprint.kt new file mode 100644 index 000000000..d4d7d2330 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/music/fingerprints/AppDeepLinkFingerprint.kt @@ -0,0 +1,27 @@ +package app.revanced.patches.youtube.general.music.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.FieldReference + +internal object AppDeepLinkFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("L", "Ljava/util/Map;"), + opcodes = listOf( + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + Opcode.CONST_STRING, + ), + strings = listOf("android.intent.action.VIEW"), + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + getReference()?.name == "appDeepLinkEndpoint" + } >= 0 + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsPatch.kt index 3e1080232..7b3d48312 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsPatch.kt @@ -320,7 +320,13 @@ object SettingsPatch : BaseResourcePatch( updatePatchStatus(patch.name!!) } + private val patchList = ArrayList() + internal fun updatePatchStatus(patchName: String) { + patchList.add(patchName) contexts.updatePatchStatus(patchName) } + + internal fun containsPatch(patchName: String) = + patchList.contains(patchName) } diff --git a/src/main/resources/youtube/settings/host/values/arrays.xml b/src/main/resources/youtube/settings/host/values/arrays.xml index f3a91f581..0f97cb041 100644 --- a/src/main/resources/youtube/settings/host/values/arrays.xml +++ b/src/main/resources/youtube/settings/host/values/arrays.xml @@ -205,6 +205,12 @@ 17.41.37 17.33.42 + + YouTube Music + + + com.google.android.apps.youtube.music + @string/revanced_watch_history_type_entry_1 @string/revanced_watch_history_type_entry_2 diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 2b399197c..2459c5d8e 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -16,6 +16,27 @@ SETTINGS: HIDE_LAYOUT_COMPONENTS --> + + + + + + + + @@ -114,12 +135,6 @@ SETTINGS: LAYOUT_SWITCH --> - - + + SETTINGS: CHANGE_START_PAGE --> From 593601526bd10a6976d108d1d8689c44cf6331e9 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:11:25 +0300 Subject: [PATCH 017/103] feat(YouTube - Navigation bar components): Add `Hide navigation bar` setting --- .../NavigationBarComponentsPatch.kt | 8 + .../visual/VisualPreferencesIconsPatch.kt | 4 +- .../components/ShortsNavigationBarPatch.kt | 98 +++++---- .../BottomBarContainerHeightFingerprint.kt | 17 ++ .../BottomNavigationBarFingerprint.kt | 12 -- .../fingerprints/ReelWatchPagerFingerprint.kt | 12 ++ .../RenderBottomNavigationBarFingerprint.kt | 13 -- .../fingerprints/SetPivotBarFingerprint.kt | 16 -- .../navigation/NavigationBarHookPatch.kt | 22 +- ...InitializeBottomBarContainerFingerprint.kt | 29 +++ .../InitializeButtonsFingerprint.kt | 2 +- .../utils/resourceid/SharedResourceIdPatch.kt | 4 + .../kotlin/app/revanced/util/BytecodeUtils.kt | 6 + .../fingerprint/MultiMethodFingerprint.kt | 193 ++++++++++++++++++ .../util/patch/MultiMethodBytecodePatch.kt | 16 ++ .../youtube/settings/xml/revanced_prefs.xml | 10 +- ..._preference_screen_navigation_bar_icon.xml | 18 ++ 17 files changed, 388 insertions(+), 92 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/BottomBarContainerHeightFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/BottomNavigationBarFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelWatchPagerFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/RenderBottomNavigationBarFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/SetPivotBarFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeBottomBarContainerFingerprint.kt rename src/main/kotlin/app/revanced/patches/youtube/utils/{ => navigation}/fingerprints/InitializeButtonsFingerprint.kt (86%) create mode 100644 src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/util/patch/MultiMethodBytecodePatch.kt create mode 100644 src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_navigation_bar_icon.xml diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch.kt index 6d2e52943..df78e197b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch.kt @@ -12,6 +12,7 @@ import app.revanced.patches.youtube.general.navigation.fingerprints.TranslucentN import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.navigation.NavigationBarHookPatch +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow @@ -30,6 +31,7 @@ object NavigationBarComponentsPatch : BaseBytecodePatch( description = "Adds options to hide or change components related to the navigation bar.", dependencies = setOf( SettingsPatch::class, + SharedResourceIdPatch::class, NavigationBarHookPatch::class ), compatiblePackages = COMPATIBLE_PACKAGE, @@ -84,6 +86,12 @@ object NavigationBarComponentsPatch : BaseBytecodePatch( // endregion + // region patch for hide navigation bar + + NavigationBarHookPatch.addBottomBarContainerHook("$GENERAL_CLASS_DESCRIPTOR->hideNavigationBar(Landroid/view/View;)V") + + // endregion + // region patch for hide navigation buttons AutoMotiveFingerprint.resultOrThrow().let { diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt index b1b122c3e..8d8ae9350 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt @@ -140,7 +140,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_hide_shorts_comments_button" to "revanced_hide_quick_actions_comment_button", "revanced_hide_shorts_dislike_button" to "revanced_preference_screen_ryd", "revanced_hide_shorts_like_button" to "revanced_hide_quick_actions_like_button", - "revanced_hide_shorts_navigation_bar" to "revanced_preference_screen_navigation_buttons", + "revanced_hide_shorts_navigation_bar" to "revanced_preference_screen_navigation_bar", "revanced_hide_shorts_remix_button" to "M 380.054 557.441 L 380.054 371.244 L 546.045 464.343 Z M 564.57 719.47 L 674.24 719.47 L 674.24 609.8 L 704.361 609.8 L 704.361 719.47 L 814.031 719.47 L 814.031 749.591 L 704.361 749.591 L 704.361 859.261 L 674.24 859.261 L 674.24 749.591 L 564.57 749.591 Z M 254.476 548.617 C 214.463 541.558 184.342 521.573 164.449 488.894 C 144.638 456.166 140.789 420.184 152.949 381.36 C 165.176 342.575 190.038 311.715 227.315 289.053 L 494.766 126.709 C 532.073 104.098 570.902 96.25 610.91 103.23 C 650.922 110.289 681.043 130.274 700.937 162.954 C 720.748 195.683 724.598 231.664 712.438 270.486 C 700.208 309.272 675.349 340.132 638.071 362.795 L 611.529 378.905 C 620.859 378.905 629.048 379.519 639.759 381.394 C 679.772 388.454 709.894 408.441 729.787 441.119 C 749.599 473.848 753.458 509.804 741.297 548.628 C 740.399 551.192 738.146 553.135 735.508 554.105 C 732.889 555.07 729.635 555.337 726.716 554.942 C 723.791 554.547 720.894 553.426 719.047 551.717 C 718.097 550.855 717.311 549.7 716.972 548.469 C 716.637 547.253 716.687 545.732 717.135 544.229 C 727.42 511.824 724.26 482.161 707.614 454.824 C 691.047 427.438 666.17 410.921 632.649 405.042 C 617.329 402.332 602.042 401.447 597.748 401.286 C 588.341 400.876 581.445 396.779 578.706 391.277 C 577.322 388.498 576.914 385.175 577.67 381.95 C 578.419 378.757 580.362 375.39 583.44 372.342 C 585.934 369.904 625.142 343.69 626.109 343.043 C 657.431 324.065 678.071 298.507 688.285 266.062 C 698.57 233.658 695.41 203.995 678.764 176.659 C 662.196 149.273 637.321 132.757 603.801 126.876 C 570.275 120.918 538.038 127.419 506.748 146.447 L 239.296 308.79 C 207.974 327.768 187.315 353.34 177.102 385.785 C 166.816 418.19 169.977 447.853 186.622 475.189 C 203.191 502.575 228.065 519.091 261.587 524.971 C 274.985 527.341 292.192 528.737 292.956 528.82 C 301.857 529.82 308.076 531.673 312.016 534.059 C 316.058 536.507 317.963 539.807 318.027 543.091 C 318.118 549.524 311.511 556.846 303.613 562.158 C 300.08 564.526 269.166 586.237 268.118 586.974 C 236.812 605.95 216.165 631.507 205.952 663.951 C 195.667 696.356 198.827 726.021 215.474 753.356 C 232.041 780.741 256.915 797.258 290.436 803.138 C 323.96 809.097 356.201 802.588 387.488 783.567 L 507.965 707.501 L 507.781 737.418 L 399.469 803.306 C 362.163 825.916 323.329 833.799 283.327 826.784 C 243.309 819.766 213.153 799.764 193.301 767.061 C 173.45 734.356 169.639 698.351 181.798 659.526 C 194.027 620.74 218.888 589.881 256.165 567.219 L 282.707 551.108 C 273.378 551.107 265.189 550.493 254.476 548.617 Z", "revanced_hide_shorts_share_button" to "M 582.272 263.479 L 773.48 478.672 L 774.07 479.336 L 774.66 480 L 774.07 480.664 L 773.48 481.328 L 582.272 696.521 L 580.524 698.488 L 578.776 700.455 L 578.776 549.565 L 546.994 549.565 C 413.517 549.519 306.714 583.081 218.867 653.513 L 215.61 656.123 L 212.353 658.734 L 214.074 654.931 L 215.795 651.128 C 278.284 513.232 389.516 433.944 551.428 410.119 L 578.776 405.986 L 578.776 264.807 M 548.994 181.22 L 548.994 380.383 L 547.283 380.633 C 416.228 399.594 324.882 452.742 261.305 525.152 C 197.703 597.506 164.544 683.009 145.423 775.231 C 238.974 645.857 358.678 579.473 546.994 579.347 L 548.994 579.347 L 548.994 778.78 L 814.576 480 L 548.994 181.22 Z", "revanced_hide_shorts_shelf_history" to "history_key", @@ -179,7 +179,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_preference_screen_import_export" to "M 300.38 743.08 L 258.69 701.38 Q 208.69 649.85 185.27 594.88 Q 161.85 539.92 161.85 484.77 Q 161.85 397.69 206.77 324.96 Q 251.69 252.23 327.31 211.77 Q 333.69 208.85 340.19 209.5 Q 346.69 210.15 349.38 216.54 Q 352.08 222.15 349.5 228.15 Q 346.92 234.15 341.31 237.08 Q 272.46 272.85 232.54 339.27 Q 192.62 405.69 192.62 484.77 Q 192.62 536.77 211.65 584.42 Q 230.69 632.08 272.69 672.38 L 322.69 720.92 L 322.69 606.23 Q 322.69 599.38 326.96 595.12 Q 331.23 590.85 338.08 590.85 Q 344.15 590.85 348.81 595.12 Q 353.46 599.38 353.46 606.23 L 353.46 746.15 Q 353.46 758.38 345.35 766.12 Q 337.23 773.85 325.77 773.85 L 185.85 773.85 Q 179 773.85 174.73 769.58 Q 170.46 765.31 170.46 758.46 Q 170.46 751.62 174.73 747.35 Q 179 743.08 185.85 743.08 L 300.38 743.08 Z M 638.08 239.08 L 638.08 353.77 Q 638.08 360.62 633.42 364.88 Q 628.77 369.15 622.69 369.15 Q 615.85 369.15 611.58 364.88 Q 607.31 360.62 607.31 353.77 L 607.31 213.85 Q 607.31 201.62 615.04 193.88 Q 622.77 186.15 635 186.15 L 774.15 186.15 Q 781 186.15 785.27 190.42 Q 789.54 194.69 789.54 201.54 Q 789.54 208.38 785.27 212.65 Q 781 216.92 774.15 216.92 L 659.38 216.92 L 701.31 258.62 Q 743.92 300.54 766.08 346.69 Q 788.23 392.85 793.31 439.08 L 763.31 439.08 Q 757.46 396.54 739.08 358.42 Q 720.69 320.31 688.08 287.62 L 638.08 239.08 Z M 700.77 832.31 Q 695.54 832.31 691.54 828.81 Q 687.54 825.31 686.54 819.31 L 686.38 803.54 Q 660.23 798.31 640.38 786.42 Q 620.54 774.54 606.77 758.23 L 592.92 766.85 Q 587.92 769.62 582.42 768.62 Q 576.92 767.62 574.69 763.39 L 569.85 756.77 Q 566.08 751.77 567.08 746.38 Q 568.08 741 572.31 737.77 L 586.23 727.31 Q 576.62 701.23 576.62 678.5 Q 576.62 655.77 586.23 629.69 L 572.31 619.23 Q 568.08 616 567.08 610.62 Q 566.08 605.23 569.85 600.23 L 574.69 592.62 Q 576.92 588.38 582.42 587.77 Q 587.92 587.15 592.92 589.92 L 606.77 598.54 Q 620.54 582.69 640.38 570.69 Q 660.23 558.69 686.38 553.46 L 686.54 537.46 Q 687.54 531.46 691.54 527.96 Q 695.54 524.46 700.77 524.46 L 705.31 524.46 Q 710.54 524.46 714.54 527.96 Q 718.54 531.46 719.54 537.46 L 719.69 553.46 Q 745.85 558.69 765.69 570.69 Q 785.54 582.69 799.31 597.77 L 813.92 589.92 Q 818.92 587.15 823.65 587.77 Q 828.38 588.38 831.38 592.62 L 836.23 600.23 Q 840 605.23 839 610.23 Q 838 615.23 833 619.23 L 819.85 629.69 Q 829.46 655.77 829.46 678.12 Q 829.46 700.46 819.85 727.31 L 833.77 737.77 Q 838 741 839 746.38 Q 840 751.77 836.23 756.77 L 831.38 763.39 Q 828.38 767.62 823.27 768.62 Q 818.15 769.62 813.15 766.85 L 799.31 758.23 Q 785.54 774.54 765.69 786.42 Q 745.85 798.31 719.69 803.54 L 719.54 819.31 Q 718.54 825.31 714.54 828.81 Q 710.54 832.31 705.31 832.31 L 700.77 832.31 Z M 702.92 774.23 Q 743.08 774.23 770.92 746.38 Q 798.77 718.54 798.77 678.38 Q 798.77 638.23 770.92 610 Q 743.08 581.77 702.92 581.77 Q 662 581.77 634.15 610 Q 606.31 638.23 606.31 678.38 Q 606.31 718.54 634.15 746.38 Q 662 774.23 702.92 774.23 Z", "revanced_preference_screen_miniplayer" to "offline_key", "revanced_preference_screen_misc" to "M 658.231 466.308 L 495.231 303.308 L 658.231 140.307 L 821.231 303.308 L 658.231 466.308 Z M 184.615 416.615 L 184.615 184.846 L 415.615 184.846 L 415.615 416.615 L 184.615 416.615 Z M 543.385 775.385 L 543.385 544.385 L 775.154 544.385 L 775.154 775.385 L 543.385 775.385 Z M 184.615 775.385 L 184.615 544.385 L 415.615 544.385 L 415.615 775.385 L 184.615 775.385 Z M 215.384 385.846 L 384.846 385.846 L 384.846 215.615 L 215.384 215.615 L 215.384 385.846 Z M 660.462 425.308 L 780.231 305.538 L 660.462 185 L 539.923 305.538 L 660.462 425.308 Z M 574.154 744.616 L 744.385 744.616 L 744.385 575.154 L 574.154 575.154 L 574.154 744.616 Z M 215.384 744.616 L 384.846 744.616 L 384.846 575.154 L 215.384 575.154 L 215.384 744.616 Z M 384.846 385.846 Z M 539.923 305.538 Z M 384.846 575.154 Z M 574.154 575.154 Z", - "revanced_preference_screen_navigation_buttons" to "M 160 640 L 160 320 L 800 320 L 800 466.154 L 769.231 466.154 L 769.231 350.769 L 190.769 350.769 L 190.769 609.231 L 601.538 609.231 L 601.538 640 L 160 640 Z M 190.769 609.231 L 190.769 350.769 L 190.769 609.231 Z M 871.692 758.308 L 718.462 605.308 L 718.462 740 L 687.692 740 L 687.692 552.308 L 875.385 552.308 L 875.385 583.077 L 740.462 583.077 L 892.923 737.077 L 871.692 758.308 Z", + "revanced_preference_screen_navigation_bar" to "M 160 640 L 160 320 L 800 320 L 800 466.154 L 769.231 466.154 L 769.231 350.769 L 190.769 350.769 L 190.769 609.231 L 601.538 609.231 L 601.538 640 L 160 640 Z M 190.769 609.231 L 190.769 350.769 L 190.769 609.231 Z M 871.692 758.308 L 718.462 605.308 L 718.462 740 L 687.692 740 L 687.692 552.308 L 875.385 552.308 L 875.385 583.077 L 740.462 583.077 L 892.923 737.077 L 871.692 758.308 Z", "revanced_preference_screen_patch_information" to "about_key", "revanced_preference_screen_player_buttons" to "M 495.308 769.231 L 175.384 769.231 Q 152.154 769.231 136.077 753.154 Q 120 737.077 120 713.846 L 120 255.384 Q 120 232.154 136.077 216.077 Q 152.154 200 175.384 200 L 790.923 200 Q 814.154 200 830.231 216.077 Q 846.308 232.154 846.308 255.384 L 846.308 452.154 L 815.539 452.154 L 815.539 255.384 Q 815.539 244.615 808.616 237.692 Q 801.693 230.769 790.923 230.769 L 175.384 230.769 Q 164.615 230.769 157.692 237.692 Q 150.769 244.615 150.769 255.384 L 150.769 713.846 Q 150.769 724.616 157.692 731.539 Q 164.615 738.462 175.384 738.462 L 495.308 738.462 L 495.308 769.231 Z M 407.308 624.539 L 407.308 344.692 L 621.846 484.615 L 407.308 624.539 Z M 721.539 832.308 L 720.385 803.539 Q 694.231 798.308 674.385 786.423 Q 654.539 774.539 640.769 758.231 L 615.692 772.847 L 595.308 745.77 L 620.231 727.308 Q 610.615 701.231 610.615 678.5 Q 610.615 655.77 620.231 629.693 L 595.308 611.231 L 615.692 583.154 L 640.769 598.539 Q 654.539 582.692 674.385 570.692 Q 694.231 558.692 720.385 553.462 L 721.539 524.462 L 752.308 524.462 L 753.693 553.462 Q 779.846 558.692 799.693 570.692 Q 819.539 582.692 833.308 597.769 L 858.385 583.154 L 878.77 611.231 L 853.846 629.693 Q 863.462 655.77 863.462 678.116 Q 863.462 700.462 853.846 727.308 L 878.77 745.77 L 858.385 772.847 L 833.308 758.231 Q 819.539 774.539 799.693 786.423 Q 779.846 798.308 753.693 803.539 L 752.308 832.308 L 721.539 832.308 Z M 736.923 774.231 Q 777.077 774.231 804.923 746.385 Q 832.769 718.539 832.769 678.385 Q 832.769 638.231 804.923 610 Q 777.077 581.769 736.923 581.769 Q 696 581.769 668.154 610 Q 640.308 638.231 640.308 678.385 Q 640.308 718.539 668.154 746.385 Q 696 774.231 736.923 774.231 Z", "revanced_preference_screen_player_flyout_menu" to "M 392.385 741.231 L 392.385 710.461 L 800 710.461 L 800 741.231 L 392.385 741.231 Z M 392.385 495.385 L 392.385 464.615 L 800 464.615 L 800 495.385 L 392.385 495.385 Z M 392.385 249.308 L 392.385 218.538 L 800 218.538 L 800 249.308 L 392.385 249.308 Z M 208.299 772.846 Q 188.209 772.846 174.22 759.063 Q 160.231 745.279 160.231 725.577 Q 160.231 705.875 174.13 691.976 Q 188.029 678.077 207.731 678.077 Q 227.433 678.077 241.216 692.451 Q 255 706.825 255 726.462 Q 255 745.273 241.282 759.06 Q 227.563 772.846 208.299 772.846 Z M 208.299 527 Q 188.209 527 174.22 512.92 Q 160.231 498.839 160.231 480 Q 160.231 461.161 174.377 447.08 Q 188.523 433 208.387 433 Q 227.427 433 241.213 447.08 Q 255 461.161 255 480 Q 255 498.839 241.282 512.92 Q 227.563 527 208.299 527 Z M 207.231 280.923 Q 188.391 280.923 174.311 266.843 Q 160.231 252.763 160.231 233.923 Q 160.231 215.084 174.311 201.003 Q 188.391 186.923 207.615 186.923 Q 226.839 186.923 240.92 201.003 Q 255 215.084 255 233.923 Q 255 252.763 240.968 266.843 Q 226.936 280.923 207.231 280.923 Z", diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt index 1b91a281b..76d52e95d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt @@ -1,71 +1,83 @@ package app.revanced.patches.youtube.shorts.components 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.patch.BytecodePatch -import app.revanced.patches.youtube.shorts.components.fingerprints.BottomNavigationBarFingerprint -import app.revanced.patches.youtube.shorts.components.fingerprints.RenderBottomNavigationBarFingerprint -import app.revanced.patches.youtube.shorts.components.fingerprints.SetPivotBarFingerprint -import app.revanced.patches.youtube.utils.fingerprints.InitializeButtonsFingerprint +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.youtube.shorts.components.fingerprints.BottomBarContainerHeightFingerprint +import app.revanced.patches.youtube.shorts.components.fingerprints.ReelWatchPagerFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.SHORTS_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.navigation.NavigationBarHookPatch +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.BottomBarContainer +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelWatchPlayer +import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT +import app.revanced.util.fingerprint.MultiMethodFingerprint import app.revanced.util.getReference -import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValue +import app.revanced.util.injectLiteralInstructionViewCall +import app.revanced.util.patch.MultiMethodBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.reference.MethodReference -object ShortsNavigationBarPatch : BytecodePatch( - setOf( - BottomNavigationBarFingerprint, - InitializeButtonsFingerprint, - RenderBottomNavigationBarFingerprint - ) +/** + * Up to YouTube 19.28.42, there are two Methods with almost the same pattern. + * + * In certain YouTube versions, the hook should be done not on the first matching Method, but also on the last matching Method. + * + * 'Multiple fingerprint search' feature is not yet implemented in ReVanced Patcher, + * So I just implement it via [MultiMethodFingerprint]. + * + * Related Issues: + * https://github.com/ReVanced/revanced-patcher/issues/74 + * https://github.com/ReVanced/revanced-patcher/issues/308 + */ +@Patch(dependencies = [NavigationBarHookPatch::class]) +object ShortsNavigationBarPatch : MultiMethodBytecodePatch( + fingerprints = setOf(ReelWatchPagerFingerprint), + multiFingerprints = setOf(BottomBarContainerHeightFingerprint) ) { override fun execute(context: BytecodeContext) { + super.execute(context) - InitializeButtonsFingerprint.resultOrThrow().let { parentResult -> - SetPivotBarFingerprint.also { it.resolve(context, parentResult.classDef) } - .resultOrThrow().let { - it.mutableMethod.apply { - val startIndex = it.scanResult.patternScanResult!!.startIndex - val register = getInstruction(startIndex).registerA + // region patch for set navigation bar height. - addInstruction( - startIndex + 1, - "invoke-static {v$register}, $SHORTS_CLASS_DESCRIPTOR->setNavigationBar(Ljava/lang/Object;)V" - ) - } - } - } - - RenderBottomNavigationBarFingerprint.resultOrThrow().let { - val walkerMethod = - it.getWalkerMethod(context, it.scanResult.patternScanResult!!.endIndex) - - walkerMethod.addInstruction( - 0, - "invoke-static {}, $SHORTS_CLASS_DESCRIPTOR->hideShortsNavigationBar()V" - ) - } - - BottomNavigationBarFingerprint.result?.let { + BottomBarContainerHeightFingerprint.resultOrThrow().forEach { it.mutableMethod.apply { - val targetIndex = indexOfFirstInstructionOrThrow { - getReference()?.name == "findViewById" + val constIndex = indexOfFirstWideLiteralInstructionValue(BottomBarContainer) + + val targetIndex = indexOfFirstInstructionOrThrow(constIndex) { + getReference()?.name == "getHeight" } + 1 - val insertRegister = getInstruction(targetIndex).registerA + + val heightRegister = getInstruction(targetIndex).registerA addInstructions( targetIndex + 1, """ - invoke-static {v$insertRegister}, $SHORTS_CLASS_DESCRIPTOR->hideShortsNavigationBar(Landroid/view/View;)Landroid/view/View; - move-result-object v$insertRegister + invoke-static {v$heightRegister}, $SHORTS_CLASS_DESCRIPTOR->overrideNavigationBarHeight(I)I + move-result v$heightRegister """ ) } } + NavigationBarHookPatch.addBottomBarContainerHook("$SHORTS_CLASS_DESCRIPTOR->setNavigationBar(Landroid/view/View;)V") + + // endregion. + + // region patch for addOnAttachStateChangeListener. + + val smaliInstruction = """ + invoke-static {v$REGISTER_TEMPLATE_REPLACEMENT}, $SHORTS_CLASS_DESCRIPTOR->onShortsCreate(Landroid/view/View;)V + """ + + ReelWatchPagerFingerprint.injectLiteralInstructionViewCall( + ReelWatchPlayer, + smaliInstruction + ) + + // endregion. + } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/BottomBarContainerHeightFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/BottomBarContainerHeightFingerprint.kt new file mode 100644 index 000000000..776252b56 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/BottomBarContainerHeightFingerprint.kt @@ -0,0 +1,17 @@ +package app.revanced.patches.youtube.shorts.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.BottomBarContainer +import app.revanced.util.containsWideLiteralInstructionValue +import app.revanced.util.fingerprint.MultiMethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object BottomBarContainerHeightFingerprint : MultiMethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Landroid/view/View;", "Landroid/os/Bundle;"), + strings = listOf("r_pfvc"), + customFingerprint = { methodDef, _ -> + methodDef.containsWideLiteralInstructionValue(BottomBarContainer) + }, +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/BottomNavigationBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/BottomNavigationBarFingerprint.kt deleted file mode 100644 index c126985dc..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/BottomNavigationBarFingerprint.kt +++ /dev/null @@ -1,12 +0,0 @@ -package app.revanced.patches.youtube.shorts.components.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.MethodFingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -internal object BottomNavigationBarFingerprint : MethodFingerprint( - returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = listOf("Landroid/view/View;", "Landroid/os/Bundle;"), - strings = listOf("r_pfvc", "ReelWatchPaneFragmentViewModelKey") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelWatchPagerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelWatchPagerFingerprint.kt new file mode 100644 index 000000000..e4267393c --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelWatchPagerFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.youtube.shorts.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelWatchPlayer +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object ReelWatchPagerFingerprint : LiteralValueFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + returnType = "Landroid/view/View;", + literalSupplier = { ReelWatchPlayer } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/RenderBottomNavigationBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/RenderBottomNavigationBarFingerprint.kt deleted file mode 100644 index 9dc16d62a..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/RenderBottomNavigationBarFingerprint.kt +++ /dev/null @@ -1,13 +0,0 @@ -package app.revanced.patches.youtube.shorts.components.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint -import com.android.tools.smali.dexlib2.Opcode - -internal object RenderBottomNavigationBarFingerprint : MethodFingerprint( - returnType = "Landroid/view/View;", - opcodes = listOf( - Opcode.CONST_STRING, - Opcode.INVOKE_VIRTUAL - ), - strings = listOf("r_pfcv") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/SetPivotBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/SetPivotBarFingerprint.kt deleted file mode 100644 index ac218b155..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/SetPivotBarFingerprint.kt +++ /dev/null @@ -1,16 +0,0 @@ -package app.revanced.patches.youtube.shorts.components.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.MethodFingerprint -import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode - -internal object SetPivotBarFingerprint : MethodFingerprint( - returnType = "V", - accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, - parameters = listOf("Z"), - opcodes = listOf( - Opcode.CHECK_CAST, - Opcode.IF_EQZ - ) -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt index d1082cbfe..65d8819e7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch.kt @@ -8,9 +8,10 @@ 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.fingerprints.InitializeButtonsFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.SHARED_PATH import app.revanced.patches.youtube.utils.mainactivity.MainActivityResolvePatch +import app.revanced.patches.youtube.utils.navigation.fingerprints.InitializeBottomBarContainerFingerprint +import app.revanced.patches.youtube.utils.navigation.fingerprints.InitializeButtonsFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.NavigationEnumFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarButtonsCreateDrawableViewFingerprint import app.revanced.patches.youtube.utils.navigation.fingerprints.PivotBarButtonsCreateResourceViewFingerprint @@ -39,6 +40,7 @@ import com.android.tools.smali.dexlib2.util.MethodUtil @Suppress("unused") object NavigationBarHookPatch : BytecodePatch( setOf( + InitializeBottomBarContainerFingerprint, NavigationEnumFingerprint, PivotBarButtonsCreateDrawableViewFingerprint, PivotBarButtonsCreateResourceViewFingerprint, @@ -53,6 +55,10 @@ object NavigationBarHookPatch : BytecodePatch( private lateinit var navigationTabCreatedCallback: MutableMethod + private lateinit var bottomBarContainerMethod: MutableMethod + private var bottomBarContainerIndex = 0 + private var bottomBarContainerRegister = 0 + override fun execute(context: BytecodeContext) { fun MutableMethod.addHook(hook: Hook, insertPredicate: Instruction.() -> Boolean) { val filtered = getInstructions().filter(insertPredicate) @@ -124,6 +130,14 @@ object NavigationBarHookPatch : BytecodePatch( INTEGRATIONS_CLASS_DESCRIPTOR, "onBackPressed" ) + + InitializeBottomBarContainerFingerprint.resultOrThrow().mutableMethod.apply { + bottomBarContainerMethod = this + bottomBarContainerIndex = + InitializeBottomBarContainerFingerprint.indexOfLayoutChangeListenerInstruction(this) + bottomBarContainerRegister = + getInstruction(bottomBarContainerIndex).registerC + } } val hookNavigationButtonCreated: (String) -> Unit by lazy { @@ -138,6 +152,12 @@ object NavigationBarHookPatch : BytecodePatch( } } + fun addBottomBarContainerHook(descriptor: String) = + bottomBarContainerMethod.addInstruction( + bottomBarContainerIndex, + "invoke-static { v$bottomBarContainerRegister }, $descriptor" + ) + private enum class Hook(val methodName: String, val parameters: String) { SET_LAST_APP_NAVIGATION_ENUM("setLastAppNavigationEnum", "Ljava/lang/Enum;"), NAVIGATION_TAB_LOADED("navigationTabLoaded", "Landroid/view/View;"), diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeBottomBarContainerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeBottomBarContainerFingerprint.kt new file mode 100644 index 000000000..9991cae7d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeBottomBarContainerFingerprint.kt @@ -0,0 +1,29 @@ +package app.revanced.patches.youtube.utils.navigation.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.utils.navigation.fingerprints.InitializeBottomBarContainerFingerprint.indexOfLayoutChangeListenerInstruction +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.BottomBarContainer +import app.revanced.util.containsWideLiteralInstructionValue +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object InitializeBottomBarContainerFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + customFingerprint = { methodDef, classDef -> + AccessFlags.SYNTHETIC.isSet(classDef.accessFlags) && + methodDef.containsWideLiteralInstructionValue(BottomBarContainer) && + indexOfLayoutChangeListenerInstruction(methodDef) >= 0 + }, +) { + fun indexOfLayoutChangeListenerInstruction(methodDef: Method) = + methodDef.indexOfFirstInstruction { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.toString() == "Landroid/view/View;->addOnLayoutChangeListener(Landroid/view/View${'$'}OnLayoutChangeListener;)V" + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/InitializeButtonsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeButtonsFingerprint.kt similarity index 86% rename from src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/InitializeButtonsFingerprint.kt rename to src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeButtonsFingerprint.kt index 0b054f08d..98d93cf68 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/InitializeButtonsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeButtonsFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.youtube.utils.fingerprints +package app.revanced.patches.youtube.utils.navigation.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ImageOnlyTab diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index 82361b9f6..153c540bf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -31,6 +31,7 @@ object SharedResourceIdPatch : ResourcePatch() { var BadgeLabel = -1L var Bar = -1L var BarContainerHeight = -1L + var BottomBarContainer = -1L var BottomSheetFooterText = -1L var BottomSheetRecyclerView = -1L var BottomUiContainerStub = -1L @@ -94,6 +95,7 @@ object SharedResourceIdPatch : ResourcePatch() { var ReelRightLikeIcon = -1L var ReelTimeBarPlayedColor = -1L var ReelVodTimeStampsContainer = -1L + var ReelWatchPlayer = -1L var RelatedChipCloudMargin = -1L var RightComment = -1L var ScrimOverlay = -1L @@ -136,6 +138,7 @@ object SharedResourceIdPatch : ResourcePatch() { BadgeLabel = getId(ID, "badge_label") Bar = getId(LAYOUT, "bar") BarContainerHeight = getId(DIMEN, "bar_container_height") + BottomBarContainer = getId(ID, "bottom_bar_container") BottomSheetFooterText = getId(ID, "bottom_sheet_footer_text") BottomSheetRecyclerView = getId(LAYOUT, "bottom_sheet_recycler_view") BottomUiContainerStub = getId(ID, "bottom_ui_container_stub") @@ -202,6 +205,7 @@ object SharedResourceIdPatch : ResourcePatch() { ReelRightLikeIcon = getId(DRAWABLE, "reel_right_like_icon") ReelTimeBarPlayedColor = getId(COLOR, "reel_time_bar_played_color") ReelVodTimeStampsContainer = getId(ID, "reel_vod_timestamps_container") + ReelWatchPlayer = getId(ID, "reel_watch_player") RelatedChipCloudMargin = getId(LAYOUT, "related_chip_cloud_reduced_margins") RightComment = getId(DRAWABLE, "ic_right_comment_32c") ScrimOverlay = getId(ID, "scrim_overlay") diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index 183e3a29c..46adf69e0 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -16,6 +16,7 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableClass import app.revanced.patcher.util.proxy.mutableTypes.MutableField import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod +import app.revanced.util.fingerprint.MultiMethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.Method @@ -38,6 +39,8 @@ fun MethodFingerprint.isDeprecated() = fun MethodFingerprint.resultOrThrow() = result ?: throw exception +fun MultiMethodFingerprint.resultOrThrow() = result.ifEmpty { throw exception } + /** * The [PatchException] of failing to resolve a [MethodFingerprint]. * @@ -46,6 +49,9 @@ fun MethodFingerprint.resultOrThrow() = result ?: throw exception val MethodFingerprint.exception get() = PatchException("Failed to resolve ${this.javaClass.simpleName}") +val MultiMethodFingerprint.exception + get() = PatchException("Failed to resolve ${this.javaClass.simpleName}") + fun MethodFingerprint.alsoResolve(context: BytecodeContext, fingerprint: MethodFingerprint) = also { resolve(context, fingerprint.resultOrThrow().classDef) }.resultOrThrow() diff --git a/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt b/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt new file mode 100644 index 000000000..71592c695 --- /dev/null +++ b/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt @@ -0,0 +1,193 @@ +package app.revanced.util.fingerprint + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprintResult +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.ClassDef +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.StringReference + +private typealias StringMatch = MethodFingerprintResult.MethodFingerprintScanResult.StringsScanResult.StringMatch +private typealias StringsScanResult = MethodFingerprintResult.MethodFingerprintScanResult.StringsScanResult + +/** + * Represents the [MethodFingerprint] for a method. + * @param returnType The return type of the method. + * @param accessFlags The access flags of the method. + * @param parameters The parameters of the method. + * @param opcodes The list of opcodes of the method. + * @param strings A list of strings which a method contains. + * @param customFingerprint A custom condition for this fingerprint. + * A `null` opcode is equals to an unknown opcode. + */ +abstract class MultiMethodFingerprint( + val returnType: String? = null, + val accessFlags: Int? = null, + val parameters: Iterable? = null, + val opcodes: Iterable? = null, + val strings: Iterable? = null, + val customFingerprint: ((methodDef: Method, classDef: ClassDef) -> Boolean)? = null +) { + /** + * The result of the [MethodFingerprint]. + */ + var result = mutableListOf() + private var resolved = false + + companion object { + /** + * Resolve a list of [MethodFingerprint] against a list of [ClassDef]. + * + * @param classes The classes on which to resolve the [MethodFingerprint] in. + * @param context The [BytecodeContext] to host proxies. + * @return True if the resolution was successful, false otherwise. + */ + fun Iterable.resolve(context: BytecodeContext, classes: Iterable) { + for (fingerprint in this) { // For each fingerprint + if (fingerprint.resolved) continue + for (classDef in classes) // search through all classes for the fingerprint + fingerprint.resolve(context, classDef) + fingerprint.resolved = true + } + } + + /** + * Resolve a [MethodFingerprint] against a [ClassDef]. + * + * @param forClass The class on which to resolve the [MethodFingerprint] in. + * @param context The [BytecodeContext] to host proxies. + * @return True if the resolution was successful, false otherwise. + */ + fun MultiMethodFingerprint.resolve(context: BytecodeContext, forClass: ClassDef): Boolean { + for (method in forClass.methods) + if (this.resolve(context, method, forClass)) + return true + return false + } + + /** + * Resolve a [MethodFingerprint] against a [Method]. + * + * @param method The class on which to resolve the [MethodFingerprint] in. + * @param forClass The class on which to resolve the [MethodFingerprint]. + * @param context The [BytecodeContext] to host proxies. + * @return True if the resolution was successful or if the fingerprint is already resolved, false otherwise. + */ + fun MultiMethodFingerprint.resolve(context: BytecodeContext, method: Method, forClass: ClassDef): Boolean { + val methodFingerprint = this + + if (methodFingerprint.returnType != null && !method.returnType.startsWith(methodFingerprint.returnType)) + return false + + if (methodFingerprint.accessFlags != null && methodFingerprint.accessFlags != method.accessFlags) + return false + + fun parametersEqual( + parameters1: Iterable, parameters2: Iterable + ): Boolean { + if (parameters1.count() != parameters2.count()) return false + val iterator1 = parameters1.iterator() + parameters2.forEach { + if (!it.startsWith(iterator1.next())) return false + } + return true + } + + if (methodFingerprint.parameters != null && !parametersEqual( + methodFingerprint.parameters, // TODO: parseParameters() + method.parameterTypes + ) + ) return false + + @Suppress("UNNECESSARY_NOT_NULL_ASSERTION") + if (methodFingerprint.customFingerprint != null && !methodFingerprint.customFingerprint!!(method, forClass)) + return false + + val stringsScanResult = if (methodFingerprint.strings != null) { + StringsScanResult( + buildList { + val implementation = method.implementation ?: return false + + val stringsList = methodFingerprint.strings.toMutableList() + + implementation.instructions.forEachIndexed { instructionIndex, instruction -> + if ( + instruction.opcode != Opcode.CONST_STRING && + instruction.opcode != Opcode.CONST_STRING_JUMBO + ) return@forEachIndexed + + val string = ((instruction as ReferenceInstruction).reference as StringReference).string + val index = stringsList.indexOfFirst(string::contains) + if (index == -1) return@forEachIndexed + + add(StringMatch(string, instructionIndex)) + stringsList.removeAt(index) + } + + if (stringsList.isNotEmpty()) return false + } + ) + } else null + + val patternScanResult = if (methodFingerprint.opcodes != null) { + method.implementation?.instructions ?: return false + + method.patternScan(methodFingerprint) ?: return false + } else null + + methodFingerprint.result.add( + MethodFingerprintResult( + method, + forClass, + MethodFingerprintResult.MethodFingerprintScanResult( + patternScanResult, + stringsScanResult + ), + context + ) + ) + + return true + } + + private fun Method.patternScan( + fingerprint: MultiMethodFingerprint + ): MethodFingerprintResult.MethodFingerprintScanResult.PatternScanResult? { + val instructions = this.implementation!!.instructions + + val pattern = fingerprint.opcodes!! + val instructionLength = instructions.count() + val patternLength = pattern.count() + + for (index in 0 until instructionLength) { + var patternIndex = 0 + + while (index + patternIndex < instructionLength) { + val originalOpcode = instructions.elementAt(index + patternIndex).opcode + val patternOpcode = pattern.elementAt(patternIndex) + + if (patternOpcode != null && patternOpcode.ordinal != originalOpcode.ordinal) { + // reaching maximum threshold (0) means, + // the pattern does not match to the current instructions + break + } + + if (patternIndex < patternLength - 1) { + // if the entire pattern has not been scanned yet + // continue the scan + patternIndex++ + continue + } + return MethodFingerprintResult.MethodFingerprintScanResult.PatternScanResult( + index, + index + patternIndex + ) + } + } + + return null + } + } +} diff --git a/src/main/kotlin/app/revanced/util/patch/MultiMethodBytecodePatch.kt b/src/main/kotlin/app/revanced/util/patch/MultiMethodBytecodePatch.kt new file mode 100644 index 000000000..fa137319a --- /dev/null +++ b/src/main/kotlin/app/revanced/util/patch/MultiMethodBytecodePatch.kt @@ -0,0 +1,16 @@ +package app.revanced.util.patch + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.util.fingerprint.MultiMethodFingerprint +import app.revanced.util.fingerprint.MultiMethodFingerprint.Companion.resolve + +abstract class MultiMethodBytecodePatch( + val fingerprints: Set = setOf(), + val multiFingerprints: Set = setOf() +) : BytecodePatch(fingerprints) { + override fun execute(context: BytecodeContext) { + multiFingerprints.resolve(context, context.classes) + } +} diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index a7de91bba..f1a0682a8 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -55,7 +55,7 @@ SETTINGS: MINIPLAYER_TYPE_MODERN --> + + + SETTINGS: HIDE_NAVIGATION_COMPONENTS --> - From edb26b5afe73c9bc9309426c2b7a60ba38adfb30 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:17:18 +0300 Subject: [PATCH 019/103] refactor(YouTube Music - Flyout menu components): Unable to patch due to incorrect format --- .../components/FlyoutMenuComponentsPatch.kt | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt index 306a06ef6..3ec2960fa 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt @@ -104,31 +104,30 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( val onCheckedChangedListenerDefiningClass = (onCheckedChangedListenerReference as MethodReference).definingClass - val onCheckedChangedMethod = - context.findMethodOrThrow(onCheckedChangedListenerDefiningClass) { - name == "onCheckedChanged" - } - - val onCheckedChangedWalkerIndex = - onCheckedChangedMethod.indexOfFirstInstructionOrThrow { - val reference = getReference() - opcode == Opcode.INVOKE_VIRTUAL - && reference?.returnType == "V" - && reference.parameterTypes.size == 1 - && reference.parameterTypes[0] == "Z" - } + context.findMethodOrThrow(onCheckedChangedListenerDefiningClass) { + name == "onCheckedChanged" + }.apply { + val onCheckedChangedWalkerIndex = + indexOfFirstInstructionOrThrow { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL + && reference?.returnType == "V" + && reference.parameterTypes.size == 1 + && reference.parameterTypes[0] == "Z" + } - getWalkerMethod(context, onCheckedChangedWalkerIndex).apply { - val insertIndex = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT) - val insertRegister = - getInstruction(insertIndex).registerA + getWalkerMethod(context, onCheckedChangedWalkerIndex).apply { + val insertIndex = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT) + val insertRegister = + getInstruction(insertIndex).registerA - addInstructions( - insertIndex + 1, """ - invoke-static {v$insertRegister}, $FLYOUT_CLASS_DESCRIPTOR->enableTrimSilenceSwitch(Z)Z - move-result v$insertRegister - """ - ) + addInstructions( + insertIndex + 1, """ + invoke-static {v$insertRegister}, $FLYOUT_CLASS_DESCRIPTOR->enableTrimSilenceSwitch(Z)Z + move-result v$insertRegister + """ + ) + } } } } From 4248a48fd80177b99c85968da95e10f34719d434 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:17:48 +0300 Subject: [PATCH 020/103] chore(YouTube - Integrations): Skip patches even in versions where fingerprints are still used --- .../integrations/BaseIntegrationsPatch.kt | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt b/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt index 6d6b9c9ba..4821a5108 100644 --- a/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/integrations/BaseIntegrationsPatch.kt @@ -6,9 +6,9 @@ import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patcher.patch.BytecodePatch import app.revanced.patches.shared.integrations.BaseIntegrationsPatch.IntegrationsFingerprint.IRegisterResolver import app.revanced.patches.shared.integrations.Constants.INTEGRATIONS_UTILS_CLASS_DESCRIPTOR +import app.revanced.util.exception import app.revanced.util.findMethodOrThrow import app.revanced.util.isDeprecated -import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.ClassDef import com.android.tools.smali.dexlib2.iface.Method @@ -50,18 +50,21 @@ abstract class BaseIntegrationsPatch( ) { fun invoke(integrationsDescriptor: String) { - if (isDeprecated()) return + val method = result?.mutableMethod + ?: if (!isDeprecated()) { + throw exception + } else { + return + } - resultOrThrow().mutableMethod.let { method -> - val insertIndex = insertIndexResolver(method) - val contextRegister = contextRegisterResolver(method) + val insertIndex = insertIndexResolver(method) + val contextRegister = contextRegisterResolver(method) - method.addInstruction( - insertIndex, - "invoke-static/range { $contextRegister .. $contextRegister }, " + - "$integrationsDescriptor->setContext(Landroid/content/Context;)V", - ) - } + method.addInstruction( + insertIndex, + "invoke-static/range { $contextRegister .. $contextRegister }, " + + "$integrationsDescriptor->setContext(Landroid/content/Context;)V", + ) } interface IHookInsertIndexResolver : (Method) -> Int { From 9dd48465e6a82221feb82d30e32259a0435b2161 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:18:32 +0300 Subject: [PATCH 021/103] chore(YouTube - PlayerTypeHook): Add hooking on Shorts state (whether Shorts is open or not) --- .../utils/playertype/PlayerTypeHookPatch.kt | 33 +++++++++++++++---- .../fingerprint/ReelWatchPagerFingerprint.kt | 12 +++++++ 2 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ReelWatchPagerFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt index 56975e770..748a0f96d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt @@ -13,17 +13,21 @@ import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH import app.revanced.patches.youtube.utils.playertype.fingerprint.ActionBarSearchResultsFingerprint import app.revanced.patches.youtube.utils.playertype.fingerprint.BrowseIdClassFingerprint import app.revanced.patches.youtube.utils.playertype.fingerprint.PlayerTypeFingerprint +import app.revanced.patches.youtube.utils.playertype.fingerprint.ReelWatchPagerFingerprint import app.revanced.patches.youtube.utils.playertype.fingerprint.VideoStateFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelWatchPlayer import app.revanced.util.addStaticFieldToIntegration import app.revanced.util.alsoResolve import app.revanced.util.findMethodOrThrow import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstStringInstructionOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow 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.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.reference.FieldReference @@ -33,6 +37,7 @@ object PlayerTypeHookPatch : BytecodePatch( ActionBarSearchResultsFingerprint, BrowseIdClassFingerprint, PlayerTypeFingerprint, + ReelWatchPagerFingerprint, YouTubeControlsOverlayFingerprint ) ) { @@ -46,14 +51,28 @@ object PlayerTypeHookPatch : BytecodePatch( // region patch for set player type - PlayerTypeFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - addInstruction( - 0, - "invoke-static {p1}, " + - "$INTEGRATIONS_PLAYER_TYPE_HOOK_CLASS_DESCRIPTOR->setPlayerType(Ljava/lang/Enum;)V" - ) + PlayerTypeFingerprint.resultOrThrow().mutableMethod.addInstruction( + 0, + "invoke-static {p1}, " + + "$INTEGRATIONS_PLAYER_TYPE_HOOK_CLASS_DESCRIPTOR->setPlayerType(Ljava/lang/Enum;)V" + ) + + // endregion + + // region patch for set shorts player state + + ReelWatchPagerFingerprint.resultOrThrow().mutableMethod.apply { + val literIndex = indexOfFirstWideLiteralInstructionValueOrThrow(ReelWatchPlayer) + 2 + val registerIndex = indexOfFirstInstructionOrThrow(literIndex) { + opcode == Opcode.MOVE_RESULT_OBJECT } + val viewRegister = getInstruction(registerIndex).registerA + + addInstruction( + registerIndex + 1, + "invoke-static {v$viewRegister}, " + + "$INTEGRATIONS_PLAYER_TYPE_HOOK_CLASS_DESCRIPTOR->onShortsCreate(Landroid/view/View;)V" + ) } // endregion diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ReelWatchPagerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ReelWatchPagerFingerprint.kt new file mode 100644 index 000000000..7bb7d066b --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ReelWatchPagerFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.youtube.utils.playertype.fingerprint + +import app.revanced.patcher.extensions.or +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelWatchPlayer +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object ReelWatchPagerFingerprint : LiteralValueFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + returnType = "Landroid/view/View;", + literalSupplier = { ReelWatchPlayer } +) \ No newline at end of file From 50fb611c49324c72daf9c8f574ad66bc82ca92b1 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:19:06 +0300 Subject: [PATCH 022/103] chore(YouTube): No longer checks `PlayerType` or `VideoInformation` to determine if it's a Shorts video or not --- .../BackgroundPlaybackPatch.kt | 2 -- .../components/ShortsNavigationBarPatch.kt | 20 ++----------------- .../fingerprints/ReelWatchPagerFingerprint.kt | 12 ----------- 3 files changed, 2 insertions(+), 32 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelWatchPagerFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/BackgroundPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/BackgroundPlaybackPatch.kt index 825b4496f..827458cb7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/BackgroundPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/BackgroundPlaybackPatch.kt @@ -14,7 +14,6 @@ import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PAC import app.revanced.patches.youtube.utils.integrations.Constants.MISC_PATH import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.patches.youtube.video.information.VideoInformationPatch import app.revanced.util.findOpcodeIndicesReversed import app.revanced.util.getWalkerMethod import app.revanced.util.patch.BaseBytecodePatch @@ -31,7 +30,6 @@ object BackgroundPlaybackPatch : BaseBytecodePatch( description = "Removes restrictions on background playback, including for music and kids videos.", dependencies = setOf( PlayerTypeHookPatch::class, - VideoInformationPatch::class, SettingsPatch::class ), compatiblePackages = COMPATIBLE_PACKAGE, diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt index 76d52e95d..337a239fb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch.kt @@ -5,17 +5,14 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.youtube.shorts.components.fingerprints.BottomBarContainerHeightFingerprint -import app.revanced.patches.youtube.shorts.components.fingerprints.ReelWatchPagerFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.SHORTS_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.navigation.NavigationBarHookPatch +import app.revanced.patches.youtube.utils.playertype.fingerprint.ReelWatchPagerFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.BottomBarContainer -import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelWatchPlayer -import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT import app.revanced.util.fingerprint.MultiMethodFingerprint import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstWideLiteralInstructionValue -import app.revanced.util.injectLiteralInstructionViewCall import app.revanced.util.patch.MultiMethodBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -55,7 +52,7 @@ object ShortsNavigationBarPatch : MultiMethodBytecodePatch( addInstructions( targetIndex + 1, """ - invoke-static {v$heightRegister}, $SHORTS_CLASS_DESCRIPTOR->overrideNavigationBarHeight(I)I + invoke-static {v$heightRegister}, $SHORTS_CLASS_DESCRIPTOR->setNavigationBarHeight(I)I move-result v$heightRegister """ ) @@ -66,18 +63,5 @@ object ShortsNavigationBarPatch : MultiMethodBytecodePatch( // endregion. - // region patch for addOnAttachStateChangeListener. - - val smaliInstruction = """ - invoke-static {v$REGISTER_TEMPLATE_REPLACEMENT}, $SHORTS_CLASS_DESCRIPTOR->onShortsCreate(Landroid/view/View;)V - """ - - ReelWatchPagerFingerprint.injectLiteralInstructionViewCall( - ReelWatchPlayer, - smaliInstruction - ) - - // endregion. - } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelWatchPagerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelWatchPagerFingerprint.kt deleted file mode 100644 index e4267393c..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ReelWatchPagerFingerprint.kt +++ /dev/null @@ -1,12 +0,0 @@ -package app.revanced.patches.youtube.shorts.components.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelWatchPlayer -import app.revanced.util.fingerprint.LiteralValueFingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -internal object ReelWatchPagerFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - returnType = "Landroid/view/View;", - literalSupplier = { ReelWatchPlayer } -) \ No newline at end of file From 574cd9b73a0d7ee0a15907df4c6998aab36e79ac Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:19:56 +0300 Subject: [PATCH 023/103] chore(YouTube - Player components): Patch is broken in certain versions --- .../youtube/player/components/PlayerComponentsPatch.kt | 6 +++--- .../fullscreen/fingerprints/PlayerTitleViewFingerprint.kt | 3 --- .../fingerprints/EngagementPanelBuilderFingerprint.kt} | 4 ++-- 3 files changed, 5 insertions(+), 8 deletions(-) rename src/main/kotlin/app/revanced/patches/youtube/{player/components/fingerprints/EngagementPanelControllerFingerprint.kt => utils/fingerprints/EngagementPanelBuilderFingerprint.kt} (79%) diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt index 94fabf899..eca7754ce 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt @@ -12,7 +12,6 @@ import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.fingerprints.StartVideoInformerFingerprint import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.patches.youtube.player.components.fingerprints.CrowdfundingBoxFingerprint -import app.revanced.patches.youtube.player.components.fingerprints.EngagementPanelControllerFingerprint import app.revanced.patches.youtube.player.components.fingerprints.FilmStripOverlayConfigFingerprint import app.revanced.patches.youtube.player.components.fingerprints.FilmStripOverlayInteractionFingerprint import app.revanced.patches.youtube.player.components.fingerprints.FilmStripOverlayParentFingerprint @@ -34,6 +33,7 @@ import app.revanced.patches.youtube.player.components.fingerprints.WatermarkPare import app.revanced.patches.youtube.player.speedoverlay.SpeedOverlayPatch import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.controlsoverlay.ControlsOverlayConfigPatch +import app.revanced.patches.youtube.utils.fingerprints.EngagementPanelBuilderFingerprint import app.revanced.patches.youtube.utils.fingerprints.YouTubeControlsOverlayFingerprint import app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.SuggestedVideoEndScreenPatch import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH @@ -81,7 +81,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( CrowdfundingBoxFingerprint, - EngagementPanelControllerFingerprint, + EngagementPanelBuilderFingerprint, FilmStripOverlayParentFingerprint, InfoCardsIncognitoFingerprint, LayoutCircleFingerprint, @@ -158,7 +158,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( } } - EngagementPanelControllerFingerprint.resultOrThrow().let { + EngagementPanelBuilderFingerprint.resultOrThrow().let { it.mutableMethod.apply { addInstructionsWithLabels( 0, """ diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/PlayerTitleViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/PlayerTitleViewFingerprint.kt index 9529c1de9..1f8cc8b05 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/PlayerTitleViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/PlayerTitleViewFingerprint.kt @@ -1,12 +1,9 @@ package app.revanced.patches.youtube.player.fullscreen.fingerprints -import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.PlayerVideoTitleView import app.revanced.util.fingerprint.LiteralValueFingerprint -import com.android.tools.smali.dexlib2.AccessFlags internal object PlayerTitleViewFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "V", literalSupplier = { PlayerVideoTitleView } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/EngagementPanelControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/EngagementPanelBuilderFingerprint.kt similarity index 79% rename from src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/EngagementPanelControllerFingerprint.kt rename to src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/EngagementPanelBuilderFingerprint.kt index ffc7e9c97..45002b73e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/EngagementPanelControllerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/EngagementPanelBuilderFingerprint.kt @@ -1,10 +1,10 @@ -package app.revanced.patches.youtube.player.components.fingerprints +package app.revanced.patches.youtube.utils.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags -internal object EngagementPanelControllerFingerprint : MethodFingerprint( +internal object EngagementPanelBuilderFingerprint : MethodFingerprint( returnType = "L", accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, parameters = listOf("L", "L", "Z", "Z"), From a82c9bac56e875417e8d0632d5e4cb14a3e4c4aa Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:22:15 +0300 Subject: [PATCH 024/103] feat(YouTube - Hide feed components): Add `Hide related videos` setting --- .../feed/components/FeedComponentsPatch.kt | 76 ++++++++++++++++++- .../EngagementPanelUpdateFingerprint.kt | 21 +++++ ...inearLayoutManagerItemCountsFingerprint.kt | 19 +++++ .../utils/bottomsheet/BottomSheetHookPatch.kt | 39 ++++++++++ .../BottomSheetBehaviorFingerprint.kt | 9 +++ .../utils/resourceid/SharedResourceIdPatch.kt | 2 + .../youtube/settings/host/values/arrays.xml | 12 +++ .../youtube/settings/xml/revanced_prefs.xml | 4 + 8 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/EngagementPanelUpdateFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LinearLayoutManagerItemCountsFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/fingerprint/BottomSheetBehaviorFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt index a896aef65..1ed6fc011 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt @@ -7,6 +7,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWith import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patcher.patch.PatchException +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.patches.youtube.feed.components.fingerprints.BreakingNewsFingerprint @@ -19,32 +20,42 @@ import app.revanced.patches.youtube.feed.components.fingerprints.ChannelTabBuild import app.revanced.patches.youtube.feed.components.fingerprints.ChannelTabRendererFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ElementParserFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ElementParserParentFingerprint +import app.revanced.patches.youtube.feed.components.fingerprints.EngagementPanelUpdateFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.FilterBarHeightFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.LatestVideosButtonFingerprint +import app.revanced.patches.youtube.feed.components.fingerprints.LinearLayoutManagerItemCountsFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.RelatedChipCloudFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.SearchResultsChipBarFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ShowMoreButtonFingerprint +import app.revanced.patches.youtube.utils.bottomsheet.BottomSheetHookPatch import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.youtube.utils.fingerprints.EngagementPanelBuilderFingerprint import app.revanced.patches.youtube.utils.fingerprints.ScrollTopParentFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.FEED_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.integrations.Constants.FEED_PATH import app.revanced.patches.youtube.utils.navigation.NavigationBarHookPatch import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.CaptionToggleContainer import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.alsoResolve import app.revanced.util.getReference +import app.revanced.util.getWalkerMethod +import app.revanced.util.indexOfFirstInstruction import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow 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.Method 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 import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.util.MethodUtil @Suppress("unused") object FeedComponentsPatch : BaseBytecodePatch( @@ -55,7 +66,8 @@ object FeedComponentsPatch : BaseBytecodePatch( NavigationBarHookPatch::class, PlayerTypeHookPatch::class, SettingsPatch::class, - SharedResourceIdPatch::class + SharedResourceIdPatch::class, + BottomSheetHookPatch::class, ), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( @@ -67,12 +79,14 @@ object FeedComponentsPatch : BaseBytecodePatch( ChannelListSubMenuTabletSyntheticFingerprint, ChannelTabRendererFingerprint, ElementParserParentFingerprint, + EngagementPanelBuilderFingerprint, FilterBarHeightFingerprint, LatestVideosButtonFingerprint, + LinearLayoutManagerItemCountsFingerprint, RelatedChipCloudFingerprint, ScrollTopParentFingerprint, SearchResultsChipBarFingerprint, - ShowMoreButtonFingerprint + ShowMoreButtonFingerprint, ) ) { private const val CAROUSEL_SHELF_FILTER_CLASS_DESCRIPTOR = @@ -85,6 +99,8 @@ object FeedComponentsPatch : BaseBytecodePatch( "$COMPONENTS_PATH/FeedVideoViewsFilter;" private const val KEYWORD_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/KeywordContentFilter;" + private const val RELATED_VIDEO_CLASS_DESCRIPTOR = + "$FEED_PATH/RelatedVideoPatch;" override fun execute(context: BytecodeContext) { @@ -139,6 +155,62 @@ object FeedComponentsPatch : BaseBytecodePatch( // endregion + // region patch for hide relative video + + fun Method.indexOfEngagementPanelBuilderInstruction(targetMethod: MutableMethod) = + indexOfFirstInstruction { + opcode == Opcode.INVOKE_DIRECT && + MethodUtil.methodSignaturesMatch( + targetMethod, + getReference()!! + ) + } + + EngagementPanelBuilderFingerprint.resultOrThrow().let { + it.mutableClass.methods.filter { method -> + method.indexOfEngagementPanelBuilderInstruction(it.mutableMethod) >= 0 + }.forEach { method -> + method.apply { + val index = indexOfEngagementPanelBuilderInstruction(it.mutableMethod) + val register = getInstruction(index + 1).registerA + + addInstruction( + index + 2, + "invoke-static {v$register}, " + + "$RELATED_VIDEO_CLASS_DESCRIPTOR->showEngagementPanel(Ljava/lang/Object;)V" + ) + } + } + } + + EngagementPanelUpdateFingerprint.alsoResolve( + context, EngagementPanelBuilderFingerprint + ).mutableMethod.addInstruction( + 0, + "invoke-static {}, $RELATED_VIDEO_CLASS_DESCRIPTOR->hideEngagementPanel()V" + ) + + // BytecodeUtils.getWalkerMethod must be used here + // Otherwise, MethodWalker finds the wrong class in YouTube 18.29.38: + // https://github.com/ReVanced/revanced-patcher/issues/309 + LinearLayoutManagerItemCountsFingerprint.resultOrThrow().let { + val methodWalker = + it.getWalkerMethod(context, it.scanResult.patternScanResult!!.endIndex) + methodWalker.apply { + val index = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT) + val register = getInstruction(index).registerA + + addInstructions( + index + 1, """ + invoke-static {v$register}, $RELATED_VIDEO_CLASS_DESCRIPTOR->overrideItemCounts(I)I + move-result v$register + """ + ) + } + } + + // endregion + // region patch for hide subscriptions channel section for tablet arrayOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/EngagementPanelUpdateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/EngagementPanelUpdateFingerprint.kt new file mode 100644 index 000000000..4d378d659 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/EngagementPanelUpdateFingerprint.kt @@ -0,0 +1,21 @@ +package app.revanced.patches.youtube.feed.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object EngagementPanelUpdateFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, + parameters = listOf("L", "Z"), + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + opcode == Opcode.INVOKE_VIRTUAL && + getReference().toString() == "Ljava/util/ArrayDeque;->pop()Ljava/lang/Object;" + } >= 0 + } +) diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LinearLayoutManagerItemCountsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LinearLayoutManagerItemCountsFingerprint.kt new file mode 100644 index 000000000..0a4dc4688 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LinearLayoutManagerItemCountsFingerprint.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.youtube.feed.components.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +internal object LinearLayoutManagerItemCountsFingerprint : MethodFingerprint( + returnType = "I", + accessFlags = AccessFlags.FINAL.value, + parameters = listOf("L", "L", "L", "Z"), + opcodes = listOf( + Opcode.IF_NEZ, + Opcode.IF_LEZ, + Opcode.INVOKE_VIRTUAL, + ), + customFingerprint = { methodDef, _ -> + methodDef.definingClass == "Landroid/support/v7/widget/LinearLayoutManager;" + } +) diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch.kt new file mode 100644 index 000000000..3e43d3305 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch.kt @@ -0,0 +1,39 @@ +package app.revanced.patches.youtube.utils.bottomsheet + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.youtube.utils.bottomsheet.fingerprint.BottomSheetBehaviorFingerprint +import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch +import app.revanced.util.findMethodOrThrow +import app.revanced.util.resultOrThrow + +@Patch(dependencies = [SharedResourceIdPatch::class]) +object BottomSheetHookPatch : BytecodePatch( + setOf(BottomSheetBehaviorFingerprint) +) { + private const val INTEGRATIONS_BOTTOM_SHEET_HOOK_CLASS_DESCRIPTOR = + "$UTILS_PATH/BottomSheetHookPatch;" + + override fun execute(context: BytecodeContext) { + + // region patch for set player type + + val bottomSheetClass = + BottomSheetBehaviorFingerprint.resultOrThrow().mutableMethod.definingClass + + arrayOf( + "onAttachedToWindow", + "onDetachedFromWindow" + ).forEach { methodName -> + context.findMethodOrThrow(bottomSheetClass) { + name == methodName + }.addInstruction( + 1, + "invoke-static {}, $INTEGRATIONS_BOTTOM_SHEET_HOOK_CLASS_DESCRIPTOR->$methodName()V" + ) + } + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/fingerprint/BottomSheetBehaviorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/fingerprint/BottomSheetBehaviorFingerprint.kt new file mode 100644 index 000000000..73d6aa2cb --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/fingerprint/BottomSheetBehaviorFingerprint.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.youtube.utils.bottomsheet.fingerprint + +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.DesignBottomSheet +import app.revanced.util.fingerprint.LiteralValueFingerprint + +internal object BottomSheetBehaviorFingerprint : LiteralValueFingerprint( + returnType = "V", + literalSupplier = { DesignBottomSheet } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index 153c540bf..a8c77ce03 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -45,6 +45,7 @@ object SharedResourceIdPatch : ResourcePatch() { var ControlsLayoutStub = -1L var DarkBackground = -1L var DarkSplashAnimation = -1L + var DesignBottomSheet = -1L var DonationCompanion = -1L var DrawerContentView = -1L var DrawerResults = -1L @@ -152,6 +153,7 @@ object SharedResourceIdPatch : ResourcePatch() { ControlsLayoutStub = getId(ID, "controls_layout_stub") DarkBackground = getId(ID, "dark_background") DarkSplashAnimation = getId(ID, "dark_splash_animation") + DesignBottomSheet = getId(ID, "design_bottom_sheet") DonationCompanion = getId(LAYOUT, "donation_companion") DrawerContentView = getId(ID, "drawer_content_view") DrawerResults = getId(ID, "drawer_results") diff --git a/src/main/resources/youtube/settings/host/values/arrays.xml b/src/main/resources/youtube/settings/host/values/arrays.xml index 0f97cb041..6c1224f35 100644 --- a/src/main/resources/youtube/settings/host/values/arrays.xml +++ b/src/main/resources/youtube/settings/host/values/arrays.xml @@ -211,6 +211,18 @@ com.google.android.apps.youtube.music + + -1 + 0 + +1 + +2 + + + -1 + 0 + 1 + 2 + @string/revanced_watch_history_type_entry_1 @string/revanced_watch_history_type_entry_2 diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index dee0a077b..18f1eb368 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -241,6 +241,10 @@ + + + + From 1e74ff94811097370e4c0f0d05dc429601e8f05c Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:25:02 +0300 Subject: [PATCH 025/103] fix(YouTube Music - Disable Cairo splash animation): Some versions are recognized as unpatchable even though they can be patched --- .../misc/splash/CairoSplashAnimationPatch.kt | 71 ++++++++++++++++--- .../CairoSplashAnimationConfigFingerprint.kt | 21 +++++- .../utils/resourceid/SharedResourceIdPatch.kt | 2 + .../music/utils/settings/SettingsPatch.kt | 4 ++ .../utils/bottomsheet/BottomSheetHookPatch.kt | 2 - .../fingerprint/MultiMethodFingerprint.kt | 25 +++++-- 6 files changed, 105 insertions(+), 20 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/music/misc/splash/CairoSplashAnimationPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/splash/CairoSplashAnimationPatch.kt index 7e3fabb1c..5b345a176 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/splash/CairoSplashAnimationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/splash/CairoSplashAnimationPatch.kt @@ -1,19 +1,35 @@ package app.revanced.patches.music.misc.splash import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.misc.splash.fingerprints.CairoSplashAnimationConfigFingerprint import app.revanced.patches.music.utils.integrations.Constants.MISC_PATH +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MainActivityLaunchAnimation import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsPatch +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow import app.revanced.util.injectLiteralInstructionBooleanCall +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.reference.MethodReference @Patch( name = "Disable Cairo splash animation", description = "Adds an option to disable Cairo splash animation.", - dependencies = [SettingsPatch::class], + dependencies = [ + SettingsPatch::class, + SharedResourceIdPatch::class + ], compatiblePackages = [ CompatiblePackage( "com.google.android.apps.youtube.music", @@ -28,22 +44,57 @@ import app.revanced.util.injectLiteralInstructionBooleanCall object CairoSplashAnimationPatch : BytecodePatch( setOf(CairoSplashAnimationConfigFingerprint) ) { + private const val INTEGRATIONS_METHOD_DESCRIPTOR = + "$MISC_PATH/CairoSplashAnimationPatch;->disableCairoSplashAnimation(Z)Z" + override fun execute(context: BytecodeContext) { - CairoSplashAnimationConfigFingerprint.result?.let { + if (!SettingsPatch.upward0706) { + println("WARNING: This patch is not supported in this version. Use YouTube Music 7.06.54 or later.") + return + } else if (!SettingsPatch.upward0720) { CairoSplashAnimationConfigFingerprint.injectLiteralInstructionBooleanCall( 45635386, - "$MISC_PATH/CairoSplashAnimationPatch;->disableCairoSplashAnimation(Z)Z" - ) - - SettingsPatch.addSwitchPreference( - CategoryType.MISC, - "revanced_disable_cairo_splash_animation", - "false" + INTEGRATIONS_METHOD_DESCRIPTOR ) + } else { + CairoSplashAnimationConfigFingerprint.resultOrThrow().mutableMethod.apply { + val literalIndex = indexOfFirstWideLiteralInstructionValueOrThrow( + MainActivityLaunchAnimation + ) + val insertIndex = indexOfFirstInstructionReversedOrThrow(literalIndex) { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "setContentView" + } + 1 + val viewStubFindViewByIdIndex = indexOfFirstInstructionOrThrow(literalIndex) { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL && + reference?.name == "findViewById" && + reference.definingClass != "Landroid/view/View;" + } + val freeRegister = + getInstruction(viewStubFindViewByIdIndex).registerD + val jumpIndex = indexOfFirstInstructionReversedOrThrow( + viewStubFindViewByIdIndex, + Opcode.IGET_OBJECT + ) + addInstructionsWithLabels( + insertIndex, """ + const/4 v$freeRegister, 0x1 + invoke-static {v$freeRegister}, $INTEGRATIONS_METHOD_DESCRIPTOR + move-result v$freeRegister + if-eqz v$freeRegister, :skip + """, ExternalLabel("skip", getInstruction(jumpIndex)) + ) + } } - ?: println("WARNING: This patch is not supported in this version. Use YouTube Music 7.06.54 or later.") + + SettingsPatch.addSwitchPreference( + CategoryType.MISC, + "revanced_disable_cairo_splash_animation", + "false" + ) } } diff --git a/src/main/kotlin/app/revanced/patches/music/misc/splash/fingerprints/CairoSplashAnimationConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/splash/fingerprints/CairoSplashAnimationConfigFingerprint.kt index 54bf6c3e7..1050b4f56 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/splash/fingerprints/CairoSplashAnimationConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/splash/fingerprints/CairoSplashAnimationConfigFingerprint.kt @@ -1,10 +1,25 @@ package app.revanced.patches.music.misc.splash.fingerprints -import app.revanced.util.fingerprint.LiteralValueFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MainActivityLaunchAnimation +import app.revanced.patches.music.utils.settings.SettingsPatch +import app.revanced.util.indexOfFirstWideLiteralInstructionValue /** * This fingerprint is compatible with YouTube Music v7.06.53+ */ -internal object CairoSplashAnimationConfigFingerprint : LiteralValueFingerprint( - literalSupplier = { 45635386 } +internal object CairoSplashAnimationConfigFingerprint : MethodFingerprint( + returnType = "V", + customFingerprint = handler@{ methodDef, _ -> + if (methodDef.definingClass != "Lcom/google/android/apps/youtube/music/activities/MusicActivity;") + return@handler false + if (methodDef.name != "onCreate") + return@handler false + + if (SettingsPatch.upward0720) { + methodDef.indexOfFirstWideLiteralInstructionValue(MainActivityLaunchAnimation) >= 0 + } else { + methodDef.indexOfFirstWideLiteralInstructionValue(45635386) >= 0 + } + } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt index c3ad292b2..d2339902e 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt @@ -33,6 +33,7 @@ object SharedResourceIdPatch : ResourcePatch() { var InterstitialsContainer = -1L var IsTablet = -1L var LikeDislikeContainer = -1L + var MainActivityLaunchAnimation = -1L var MenuEntry = -1L var MiniPlayerDefaultText = -1L var MiniPlayerMdxPlaying = -1L @@ -79,6 +80,7 @@ object SharedResourceIdPatch : ResourcePatch() { InterstitialsContainer = getId(ID, "interstitials_container") IsTablet = getId(BOOL, "is_tablet") LikeDislikeContainer = getId(ID, "like_dislike_container") + MainActivityLaunchAnimation = getId(LAYOUT, "main_activity_launch_animation") MenuEntry = getId(LAYOUT, "menu_entry") MiniPlayerDefaultText = getId(STRING, "mini_player_default_text") MiniPlayerMdxPlaying = getId(STRING, "mini_player_mdx_playing") diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt index f1b4737ca..669b2a282 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt @@ -41,7 +41,9 @@ object SettingsPatch : BaseResourcePatch( internal var upward0627 = false internal var upward0636 = false internal var upward0642 = false + internal var upward0706 = false internal var upward0718 = false + internal var upward0720 = false override fun execute(context: ResourceContext) { @@ -137,7 +139,9 @@ object SettingsPatch : BaseResourcePatch( upward0627 = 234412000 <= playServicesVersion upward0636 = 240399000 <= playServicesVersion upward0642 = 240999000 <= playServicesVersion + upward0706 = 242499000 <= playServicesVersion upward0718 = 243699000 <= playServicesVersion + upward0720 = 243899000 <= playServicesVersion break } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch.kt index 3e43d3305..52205105d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch.kt @@ -19,8 +19,6 @@ object BottomSheetHookPatch : BytecodePatch( override fun execute(context: BytecodeContext) { - // region patch for set player type - val bottomSheetClass = BottomSheetBehaviorFingerprint.resultOrThrow().mutableMethod.definingClass diff --git a/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt b/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt index 71592c695..b25b53876 100644 --- a/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt +++ b/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt @@ -44,7 +44,10 @@ abstract class MultiMethodFingerprint( * @param context The [BytecodeContext] to host proxies. * @return True if the resolution was successful, false otherwise. */ - fun Iterable.resolve(context: BytecodeContext, classes: Iterable) { + fun Iterable.resolve( + context: BytecodeContext, + classes: Iterable + ) { for (fingerprint in this) { // For each fingerprint if (fingerprint.resolved) continue for (classDef in classes) // search through all classes for the fingerprint @@ -75,10 +78,17 @@ abstract class MultiMethodFingerprint( * @param context The [BytecodeContext] to host proxies. * @return True if the resolution was successful or if the fingerprint is already resolved, false otherwise. */ - fun MultiMethodFingerprint.resolve(context: BytecodeContext, method: Method, forClass: ClassDef): Boolean { + fun MultiMethodFingerprint.resolve( + context: BytecodeContext, + method: Method, + forClass: ClassDef + ): Boolean { val methodFingerprint = this - if (methodFingerprint.returnType != null && !method.returnType.startsWith(methodFingerprint.returnType)) + if (methodFingerprint.returnType != null && !method.returnType.startsWith( + methodFingerprint.returnType + ) + ) return false if (methodFingerprint.accessFlags != null && methodFingerprint.accessFlags != method.accessFlags) @@ -102,7 +112,11 @@ abstract class MultiMethodFingerprint( ) return false @Suppress("UNNECESSARY_NOT_NULL_ASSERTION") - if (methodFingerprint.customFingerprint != null && !methodFingerprint.customFingerprint!!(method, forClass)) + if (methodFingerprint.customFingerprint != null && !methodFingerprint.customFingerprint!!( + method, + forClass + ) + ) return false val stringsScanResult = if (methodFingerprint.strings != null) { @@ -118,7 +132,8 @@ abstract class MultiMethodFingerprint( instruction.opcode != Opcode.CONST_STRING_JUMBO ) return@forEachIndexed - val string = ((instruction as ReferenceInstruction).reference as StringReference).string + val string = + ((instruction as ReferenceInstruction).reference as StringReference).string val index = stringsList.indexOfFirst(string::contains) if (index == -1) return@forEachIndexed From 4502f6f11ff26722a55cf6f59786fb7116480b0c Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:26:56 +0300 Subject: [PATCH 026/103] chore(YouTube - Shorts Component): Always hide suggested actions if all sub-settings of the suggested actions category are enabled --- .../youtube/settings/xml/revanced_prefs.xml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 18f1eb368..4ea864c5b 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -503,14 +503,6 @@ - - - - - - - - @@ -518,6 +510,17 @@ + + + + + + + + + + + From f9709d3b5661abfe73b0ebc1273e8b521aa695be Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:27:41 +0300 Subject: [PATCH 027/103] feat(YouTube - Shorts Component): Add `Disable Like button animation` setting --- src/main/resources/youtube/settings/xml/revanced_prefs.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 4ea864c5b..0434a16ed 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -531,6 +531,7 @@ + From 2435c4f781596d0b370e8ca244a30dbdc793c696 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:29:21 +0300 Subject: [PATCH 028/103] feat(YouTube): Add `Hide shortcuts` patch --- .../youtube/layout/shortcut/ShortcutPatch.kt | 69 +++++++++++++++++++ .../kotlin/app/revanced/util/ResourceUtils.kt | 27 ++++++++ .../youtube/settings/xml/revanced_prefs.xml | 1 + 3 files changed, 97 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/shortcut/ShortcutPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/shortcut/ShortcutPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/shortcut/ShortcutPatch.kt new file mode 100644 index 000000000..85c977cc0 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/shortcut/ShortcutPatch.kt @@ -0,0 +1,69 @@ +package app.revanced.patches.youtube.layout.shortcut + +import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.booleanPatchOption +import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.findElementByAttributeValueOrThrow +import app.revanced.util.patch.BaseResourcePatch +import org.w3c.dom.Element + +@Suppress("DEPRECATION", "unused") +object ShortcutPatch : BaseResourcePatch( + name = "Hide shortcuts", + description = "Remove, at compile time, the app shortcuts that appears when app icon is long pressed.", + dependencies = setOf(SettingsPatch::class), + compatiblePackages = COMPATIBLE_PACKAGE, + use = false +) { + private val Explore by booleanPatchOption( + key = "Explore", + default = false, + title = "Hide Explore", + description = "Hide Explore from shortcuts.", + required = true + ) + + private val Subscriptions by booleanPatchOption( + key = "Subscriptions", + default = false, + title = "Hide Subscriptions", + description = "Hide Subscriptions from shortcuts.", + required = true + ) + + private val Search by booleanPatchOption( + key = "Search", + default = false, + title = "Hide Search", + description = "Hide Search from shortcuts.", + required = true + ) + + private val Shorts by booleanPatchOption( + key = "Shorts", + default = true, + title = "Hide Shorts", + description = "Hide Shorts from shortcuts.", + required = true + ) + + override fun execute(context: ResourceContext) { + + this.options.values.forEach { options -> + if (options.value == true) { + context.xmlEditor["res/xml/main_shortcuts.xml"].use { editor -> + val shortcuts = editor.file.getElementsByTagName("shortcuts").item(0) as Element + val shortsItem = shortcuts.getElementsByTagName("shortcut") + .findElementByAttributeValueOrThrow( + "android:shortcutId", + "${options.key.lowercase()}-shortcut" + ) + shortsItem.parentNode.removeChild(shortsItem) + } + } + } + + SettingsPatch.updatePatchStatus(this) + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/ResourceUtils.kt b/src/main/kotlin/app/revanced/util/ResourceUtils.kt index d159536e0..52e7a5e86 100644 --- a/src/main/kotlin/app/revanced/util/ResourceUtils.kt +++ b/src/main/kotlin/app/revanced/util/ResourceUtils.kt @@ -8,6 +8,7 @@ import app.revanced.patcher.patch.options.PatchOption import app.revanced.patcher.util.DomFileEditor import org.w3c.dom.Element import org.w3c.dom.Node +import org.w3c.dom.NodeList import java.io.File import java.io.InputStream import java.nio.file.Files @@ -240,3 +241,29 @@ fun String.copyXmlNode(source: DomFileEditor, target: DomFileEditor): AutoClosea target.close() } } + +internal fun NodeList.findElementByAttributeValue(attributeName: String, value: String): Element? { + for (i in 0 until length) { + val node = item(i) + if (node.nodeType == Node.ELEMENT_NODE) { + val element = node as Element + + if (element.getAttribute(attributeName) == value) { + return element + } + + // Recursively search. + val found = element.childNodes.findElementByAttributeValue(attributeName, value) + if (found != null) { + return found + } + } + } + + return null +} + +internal fun NodeList.findElementByAttributeValueOrThrow(attributeName: String, value: String): Element { + return findElementByAttributeValue(attributeName, value) + ?: throw PatchException("Could not find: $attributeName $value") +} diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 0434a16ed..62e42a8b0 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -830,6 +830,7 @@ + From 53692de1a91b8e282444cac7b8feded82b4e9491 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:54:01 +0300 Subject: [PATCH 029/103] chore: add python virtual environment to `.gitignore` --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index a88ac46b2..9f2e41679 100644 --- a/.gitignore +++ b/.gitignore @@ -124,6 +124,8 @@ node_modules/ # gradle properties, due to Github token ./gradle.properties + .DS_Store local.properties __pycache__ +venv From e203ad159e8717a2042a978e1c6cee04fa8ce745 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 16:31:28 +0300 Subject: [PATCH 030/103] feat(Custom branding icon): Add `MMT Orange`, `MMT Pink`, `MMT Turquoise` --- .../branding/icon/CustomBrandingIconPatch.kt | 3 + .../branding/icon/CustomBrandingIconPatch.kt | 3 + .../header/drawable-hdpi/action_bar_logo.png | Bin 0 -> 3665 bytes .../header/drawable-hdpi/logo_music.png | Bin 0 -> 9038 bytes .../header/drawable-hdpi/ytm_logo.png | Bin 0 -> 7156 bytes .../header/drawable-mdpi/action_bar_logo.png | Bin 0 -> 2285 bytes .../header/drawable-mdpi/logo_music.png | Bin 0 -> 5519 bytes .../header/drawable-mdpi/ytm_logo.png | Bin 0 -> 4527 bytes .../header/drawable-xhdpi/action_bar_logo.png | Bin 0 -> 4996 bytes .../header/drawable-xhdpi/logo_music.png | Bin 0 -> 12944 bytes .../header/drawable-xhdpi/ytm_logo.png | Bin 0 -> 18913 bytes .../drawable-xxhdpi/action_bar_logo.png | Bin 0 -> 7902 bytes .../header/drawable-xxhdpi/logo_music.png | Bin 0 -> 22501 bytes .../header/drawable-xxhdpi/ytm_logo.png | Bin 0 -> 18913 bytes .../drawable-xxxhdpi/action_bar_logo.png | Bin 0 -> 7997 bytes .../header/drawable-xxxhdpi/logo_music.png | Bin 0 -> 30415 bytes .../header/drawable-xxxhdpi/ytm_logo.png | Bin 0 -> 26578 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 457 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 2689 bytes .../mipmap-hdpi/ic_launcher_release.png | Bin 0 -> 3942 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 322 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 1721 bytes .../mipmap-mdpi/ic_launcher_release.png | Bin 0 -> 2393 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 658 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 3801 bytes .../mipmap-xhdpi/ic_launcher_release.png | Bin 0 -> 5513 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 1024 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 6090 bytes .../mipmap-xxhdpi/ic_launcher_release.png | Bin 0 -> 8932 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 1335 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 7565 bytes .../mipmap-xxxhdpi/ic_launcher_release.png | Bin 0 -> 8602 bytes .../ic_app_icons_themed_youtube_music.xml | 13 + .../revanced_extended_settings_key_icon.xml | 1038 +++++++++++++++++ .../drawable-hdpi/action_bar_logo_release.png | Bin 0 -> 2637 bytes .../splash/drawable-hdpi/record.png | Bin 0 -> 6374 bytes .../splash/drawable-large-hdpi/record.png | Bin 0 -> 10328 bytes .../splash/drawable-large-mdpi/record.png | Bin 0 -> 6411 bytes .../splash/drawable-large-xhdpi/record.png | Bin 0 -> 9619 bytes .../splash/drawable-mdpi/record.png | Bin 0 -> 4015 bytes .../splash/drawable-xhdpi/record.png | Bin 0 -> 8932 bytes .../splash/drawable-xlarge-hdpi/record.png | Bin 0 -> 14582 bytes .../splash/drawable-xlarge-mdpi/record.png | Bin 0 -> 8932 bytes .../splash/drawable-xxhdpi/record.png | Bin 0 -> 14582 bytes .../header/drawable-hdpi/action_bar_logo.png | Bin 0 -> 3749 bytes .../header/drawable-hdpi/logo_music.png | Bin 0 -> 9148 bytes .../header/drawable-hdpi/ytm_logo.png | Bin 0 -> 7156 bytes .../header/drawable-mdpi/action_bar_logo.png | Bin 0 -> 2321 bytes .../header/drawable-mdpi/logo_music.png | Bin 0 -> 5604 bytes .../header/drawable-mdpi/ytm_logo.png | Bin 0 -> 4527 bytes .../header/drawable-xhdpi/action_bar_logo.png | Bin 0 -> 5168 bytes .../header/drawable-xhdpi/logo_music.png | Bin 0 -> 13220 bytes .../header/drawable-xhdpi/ytm_logo.png | Bin 0 -> 18913 bytes .../drawable-xxhdpi/action_bar_logo.png | Bin 0 -> 8171 bytes .../header/drawable-xxhdpi/logo_music.png | Bin 0 -> 22751 bytes .../header/drawable-xxhdpi/ytm_logo.png | Bin 0 -> 18913 bytes .../drawable-xxxhdpi/action_bar_logo.png | Bin 0 -> 7906 bytes .../header/drawable-xxxhdpi/logo_music.png | Bin 0 -> 30204 bytes .../header/drawable-xxxhdpi/ytm_logo.png | Bin 0 -> 26578 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 457 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 2739 bytes .../mipmap-hdpi/ic_launcher_release.png | Bin 0 -> 4116 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 322 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 1710 bytes .../mipmap-mdpi/ic_launcher_release.png | Bin 0 -> 2449 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 658 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 3848 bytes .../mipmap-xhdpi/ic_launcher_release.png | Bin 0 -> 5739 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 1024 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 6388 bytes .../mipmap-xxhdpi/ic_launcher_release.png | Bin 0 -> 9329 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 1335 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 7444 bytes .../mipmap-xxxhdpi/ic_launcher_release.png | Bin 0 -> 8484 bytes .../ic_app_icons_themed_youtube_music.xml | 13 + .../revanced_extended_settings_key_icon.xml | 1038 +++++++++++++++++ .../drawable-hdpi/action_bar_logo_release.png | Bin 0 -> 2527 bytes .../mmt_pink/splash/drawable-hdpi/record.png | Bin 0 -> 6262 bytes .../splash/drawable-large-hdpi/record.png | Bin 0 -> 10370 bytes .../splash/drawable-large-mdpi/record.png | Bin 0 -> 6321 bytes .../splash/drawable-large-xhdpi/record.png | Bin 0 -> 9048 bytes .../mmt_pink/splash/drawable-mdpi/record.png | Bin 0 -> 3939 bytes .../mmt_pink/splash/drawable-xhdpi/record.png | Bin 0 -> 8920 bytes .../splash/drawable-xlarge-hdpi/record.png | Bin 0 -> 14778 bytes .../splash/drawable-xlarge-mdpi/record.png | Bin 0 -> 8920 bytes .../splash/drawable-xxhdpi/record.png | Bin 0 -> 14778 bytes .../header/drawable-hdpi/action_bar_logo.png | Bin 0 -> 3718 bytes .../header/drawable-hdpi/logo_music.png | Bin 0 -> 9125 bytes .../header/drawable-hdpi/ytm_logo.png | Bin 0 -> 7156 bytes .../header/drawable-mdpi/action_bar_logo.png | Bin 0 -> 2298 bytes .../header/drawable-mdpi/logo_music.png | Bin 0 -> 5577 bytes .../header/drawable-mdpi/ytm_logo.png | Bin 0 -> 4527 bytes .../header/drawable-xhdpi/action_bar_logo.png | Bin 0 -> 5107 bytes .../header/drawable-xhdpi/logo_music.png | Bin 0 -> 13152 bytes .../header/drawable-xhdpi/ytm_logo.png | Bin 0 -> 18913 bytes .../drawable-xxhdpi/action_bar_logo.png | Bin 0 -> 8034 bytes .../header/drawable-xxhdpi/logo_music.png | Bin 0 -> 22670 bytes .../header/drawable-xxhdpi/ytm_logo.png | Bin 0 -> 18913 bytes .../drawable-xxxhdpi/action_bar_logo.png | Bin 0 -> 7908 bytes .../header/drawable-xxxhdpi/logo_music.png | Bin 0 -> 30191 bytes .../header/drawable-xxxhdpi/ytm_logo.png | Bin 0 -> 26578 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 457 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 2703 bytes .../mipmap-hdpi/ic_launcher_release.png | Bin 0 -> 4031 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 322 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 1646 bytes .../mipmap-mdpi/ic_launcher_release.png | Bin 0 -> 2417 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 658 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 3896 bytes .../mipmap-xhdpi/ic_launcher_release.png | Bin 0 -> 5627 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 1024 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 6319 bytes .../mipmap-xxhdpi/ic_launcher_release.png | Bin 0 -> 9029 bytes ...uct_youtube_music_background_color_108.png | Bin 0 -> 1335 bytes ...uct_youtube_music_foreground_color_108.png | Bin 0 -> 7735 bytes .../mipmap-xxxhdpi/ic_launcher_release.png | Bin 0 -> 8398 bytes .../ic_app_icons_themed_youtube_music.xml | 13 + .../revanced_extended_settings_key_icon.xml | 1038 +++++++++++++++++ .../drawable-hdpi/action_bar_logo_release.png | Bin 0 -> 2772 bytes .../splash/drawable-hdpi/record.png | Bin 0 -> 6831 bytes .../splash/drawable-large-hdpi/record.png | Bin 0 -> 11369 bytes .../splash/drawable-large-mdpi/record.png | Bin 0 -> 6932 bytes .../splash/drawable-large-xhdpi/record.png | Bin 0 -> 11465 bytes .../splash/drawable-mdpi/record.png | Bin 0 -> 4295 bytes .../splash/drawable-xhdpi/record.png | Bin 0 -> 9761 bytes .../splash/drawable-xlarge-hdpi/record.png | Bin 0 -> 16181 bytes .../splash/drawable-xlarge-mdpi/record.png | Bin 0 -> 9761 bytes .../splash/drawable-xxhdpi/record.png | Bin 0 -> 16181 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 4056 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 4440 bytes .../drawable-hdpi/yt_wordmark_header_dark.png | Bin 0 -> 4046 bytes .../yt_wordmark_header_light.png | Bin 0 -> 4646 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 2556 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 2768 bytes .../drawable-mdpi/yt_wordmark_header_dark.png | Bin 0 -> 2560 bytes .../yt_wordmark_header_light.png | Bin 0 -> 2834 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 5589 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 6021 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 5530 bytes .../yt_wordmark_header_light.png | Bin 0 -> 6313 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 8810 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 9689 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 8517 bytes .../yt_wordmark_header_light.png | Bin 0 -> 10096 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 9117 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 9865 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 7677 bytes .../yt_wordmark_header_light.png | Bin 0 -> 10211 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 120 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 1580 bytes .../launcher/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3069 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3069 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 106 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 1191 bytes .../launcher/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1996 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 1996 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 140 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 1999 bytes .../launcher/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4015 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4015 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 197 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 2954 bytes .../launcher/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6838 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 6838 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 275 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 4010 bytes .../launcher/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8010 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 8010 bytes ...daptive_monochrome_ic_youtube_launcher.xml | 12 + .../revanced_extended_settings_key_icon.xml | 954 +++++++++++++++ .../product_logo_youtube_color_144.png | Bin 0 -> 10517 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 13489 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 1411 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 2237 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 6838 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 8010 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 921 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 1411 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 13489 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 16199 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 1996 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 3069 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 23801 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 33683 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 3069 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 4826 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 33683 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 26446 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 4015 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 6838 bytes .../splash/drawable/$avd_anim__0.xml | 48 + .../splash/drawable/$avd_anim__1.xml | 10 + .../splash/drawable/$avd_anim__2.xml | 10 + .../splash/drawable/$avd_anim__3.xml | 11 + .../splash/drawable/$avd_anim__4.xml | 11 + .../mmt_orange/splash/drawable/avd_anim.xml | 8 + .../mmt_orange/splash/values-v31/styles.xml | 7 + .../yt_premium_wordmark_header_dark.png | Bin 0 -> 4106 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 4489 bytes .../drawable-hdpi/yt_wordmark_header_dark.png | Bin 0 -> 4085 bytes .../yt_wordmark_header_light.png | Bin 0 -> 4677 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 2580 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 2768 bytes .../drawable-mdpi/yt_wordmark_header_dark.png | Bin 0 -> 2580 bytes .../yt_wordmark_header_light.png | Bin 0 -> 2851 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 5649 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 6081 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 5594 bytes .../yt_wordmark_header_light.png | Bin 0 -> 6378 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 8984 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 9906 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 8720 bytes .../yt_wordmark_header_light.png | Bin 0 -> 10289 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 8958 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 9654 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 7511 bytes .../yt_wordmark_header_light.png | Bin 0 -> 10066 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 120 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 2575 bytes .../launcher/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3174 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3174 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 106 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 1513 bytes .../launcher/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2011 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2011 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 140 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 2800 bytes .../launcher/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4108 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4108 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 197 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 5832 bytes .../launcher/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7034 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 7034 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 275 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 3890 bytes .../launcher/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 7431 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 7431 bytes ...daptive_monochrome_ic_youtube_launcher.xml | 12 + .../revanced_extended_settings_key_icon.xml | 926 +++++++++++++++ .../product_logo_youtube_color_144.png | Bin 0 -> 10845 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 13735 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 1464 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 2254 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 7034 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 8382 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 942 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 1464 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 13735 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 16447 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 2011 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 3174 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 24651 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 34809 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 3174 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 4964 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 34809 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 26318 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 4108 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 7034 bytes .../mmt_pink/splash/drawable/$avd_anim__0.xml | 48 + .../mmt_pink/splash/drawable/$avd_anim__1.xml | 10 + .../mmt_pink/splash/drawable/$avd_anim__2.xml | 10 + .../mmt_pink/splash/drawable/$avd_anim__3.xml | 11 + .../mmt_pink/splash/drawable/$avd_anim__4.xml | 11 + .../mmt_pink/splash/drawable/avd_anim.xml | 8 + .../mmt_pink/splash/values-v31/styles.xml | 7 + .../yt_premium_wordmark_header_dark.png | Bin 0 -> 4112 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 4497 bytes .../drawable-hdpi/yt_wordmark_header_dark.png | Bin 0 -> 4106 bytes .../yt_wordmark_header_light.png | Bin 0 -> 4724 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 2595 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 2792 bytes .../drawable-mdpi/yt_wordmark_header_dark.png | Bin 0 -> 2598 bytes .../yt_wordmark_header_light.png | Bin 0 -> 2863 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 5659 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 6092 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 5614 bytes .../yt_wordmark_header_light.png | Bin 0 -> 6392 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 9057 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 9957 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 8761 bytes .../yt_wordmark_header_light.png | Bin 0 -> 10325 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 8823 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 9609 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 7427 bytes .../yt_wordmark_header_light.png | Bin 0 -> 9922 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 120 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 2636 bytes .../launcher/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3200 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3200 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 106 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 1610 bytes .../launcher/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2047 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2047 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 140 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 2841 bytes .../launcher/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4193 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4193 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 197 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 5995 bytes .../launcher/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7241 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 7241 bytes ...veproduct_youtube_background_color_108.png | Bin 0 -> 275 bytes ...veproduct_youtube_foreground_color_108.png | Bin 0 -> 3860 bytes .../launcher/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8392 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 8392 bytes ...daptive_monochrome_ic_youtube_launcher.xml | 12 + .../revanced_extended_settings_key_icon.xml | 1038 +++++++++++++++++ .../product_logo_youtube_color_144.png | Bin 0 -> 11130 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 14022 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 1445 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 2283 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 7241 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 8392 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 951 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 1445 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 14022 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 16572 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 2047 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 3200 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 25290 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 35639 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 3200 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 5134 bytes .../product_logo_youtube_color_144.png | Bin 0 -> 35639 bytes .../product_logo_youtube_color_192.png | Bin 0 -> 26822 bytes .../product_logo_youtube_color_24.png | Bin 0 -> 4193 bytes .../product_logo_youtube_color_36.png | Bin 0 -> 7241 bytes .../splash/drawable/$avd_anim__0.xml | 48 + .../splash/drawable/$avd_anim__1.xml | 10 + .../splash/drawable/$avd_anim__2.xml | 10 + .../splash/drawable/$avd_anim__3.xml | 11 + .../splash/drawable/$avd_anim__4.xml | 11 + .../splash/drawable/avd_anim.xml | 8 + .../splash/values-v31/styles.xml | 7 + .../product_logo_youtube_color_144.png | Bin 8238 -> 8048 bytes .../product_logo_youtube_color_192.png | Bin 11340 -> 11150 bytes .../product_logo_youtube_color_24.png | Bin 1035 -> 845 bytes .../product_logo_youtube_color_36.png | Bin 1450 -> 1260 bytes .../product_logo_youtube_color_144.png | Bin 5241 -> 5051 bytes .../product_logo_youtube_color_192.png | Bin 7254 -> 7064 bytes .../product_logo_youtube_color_24.png | Bin 777 -> 587 bytes .../product_logo_youtube_color_36.png | Bin 1035 -> 845 bytes .../product_logo_youtube_color_144.png | Bin 11340 -> 11150 bytes .../product_logo_youtube_color_192.png | Bin 15941 -> 15751 bytes .../product_logo_youtube_color_24.png | Bin 1291 -> 1101 bytes .../product_logo_youtube_color_36.png | Bin 1838 -> 1648 bytes .../product_logo_youtube_color_144.png | Bin 18111 -> 17921 bytes .../product_logo_youtube_color_192.png | Bin 26258 -> 26068 bytes .../product_logo_youtube_color_24.png | Bin 1838 -> 1648 bytes .../product_logo_youtube_color_36.png | Bin 3841 -> 3651 bytes .../product_logo_youtube_color_144.png | Bin 26258 -> 26068 bytes .../product_logo_youtube_color_192.png | Bin 45744 -> 45554 bytes .../product_logo_youtube_color_24.png | Bin 3216 -> 3026 bytes .../product_logo_youtube_color_36.png | Bin 5241 -> 5051 bytes .../yt_outline_chevron_down_white_24.png | Bin 211 -> 161 bytes .../yt_outline_chevron_down_white_24.png | Bin 194 -> 144 bytes .../yt_outline_chevron_down_white_24.png | Bin 257 -> 207 bytes .../yt_outline_chevron_down_white_24.png | Bin 331 -> 281 bytes .../yt_outline_chevron_down_white_24.png | Bin 384 -> 334 bytes .../yt_outline_chevron_down_white_24.png | Bin 264 -> 214 bytes .../yt_outline_chevron_down_white_24.png | Bin 203 -> 153 bytes .../yt_outline_chevron_down_white_24.png | Bin 300 -> 250 bytes .../yt_outline_chevron_down_white_24.png | Bin 381 -> 331 bytes .../yt_outline_chevron_down_white_24.png | Bin 495 -> 445 bytes ...antum_ic_closed_caption_off_grey600_24.png | Bin 538 -> 488 bytes .../quantum_ic_fullscreen_exit_grey600_24.png | Bin 260 -> 210 bytes .../quantum_ic_fullscreen_exit_white_24.png | Bin 260 -> 210 bytes .../quantum_ic_fullscreen_grey600_24.png | Bin 305 -> 255 bytes .../quantum_ic_fullscreen_white_24.png | Bin 305 -> 255 bytes .../drawable-hdpi/revanced_copy_button.png | Bin 336 -> 286 bytes .../revanced_copy_timestamp_button.png | Bin 484 -> 434 bytes .../revanced_download_button.png | Bin 319 -> 269 bytes .../drawable-hdpi/revanced_speed_button.png | Bin 514 -> 464 bytes .../revanced_time_ordered_playlist_button.png | Bin 330 -> 280 bytes .../revanced_volume_muted_button.png | Bin 511 -> 461 bytes .../revanced_volume_unmuted_button.png | Bin 462 -> 412 bytes .../revanced_whitelist_button.png | Bin 504 -> 454 bytes .../yt_fill_arrow_repeat_white_24.png | Bin 381 -> 331 bytes .../yt_outline_arrow_repeat_1_white_24.png | Bin 439 -> 389 bytes .../yt_outline_arrow_shuffle_1_white_24.png | Bin 348 -> 298 bytes .../yt_outline_gear_white_24.png | Bin 657 -> 607 bytes .../yt_outline_screen_full_exit_white_24.png | Bin 260 -> 210 bytes .../yt_outline_screen_full_vd_theme_24.png | Bin 305 -> 255 bytes .../yt_outline_screen_full_white_24.png | Bin 305 -> 255 bytes ...antum_ic_closed_caption_off_grey600_24.png | Bin 342 -> 292 bytes .../quantum_ic_fullscreen_exit_grey600_24.png | Bin 286 -> 236 bytes .../quantum_ic_fullscreen_exit_white_24.png | Bin 286 -> 236 bytes .../quantum_ic_fullscreen_grey600_24.png | Bin 295 -> 245 bytes .../quantum_ic_fullscreen_white_24.png | Bin 295 -> 245 bytes .../drawable-mdpi/revanced_copy_button.png | Bin 266 -> 216 bytes .../revanced_copy_timestamp_button.png | Bin 369 -> 319 bytes .../revanced_download_button.png | Bin 264 -> 214 bytes .../drawable-mdpi/revanced_speed_button.png | Bin 383 -> 333 bytes .../revanced_time_ordered_playlist_button.png | Bin 249 -> 199 bytes .../revanced_volume_muted_button.png | Bin 369 -> 319 bytes .../revanced_volume_unmuted_button.png | Bin 346 -> 296 bytes .../revanced_whitelist_button.png | Bin 352 -> 302 bytes .../yt_fill_arrow_repeat_white_24.png | Bin 315 -> 265 bytes .../yt_outline_arrow_repeat_1_white_24.png | Bin 337 -> 287 bytes .../yt_outline_arrow_shuffle_1_white_24.png | Bin 254 -> 204 bytes .../yt_outline_gear_white_24.png | Bin 469 -> 419 bytes .../yt_outline_screen_full_exit_white_24.png | Bin 286 -> 236 bytes .../yt_outline_screen_full_vd_theme_24.png | Bin 295 -> 245 bytes .../yt_outline_screen_full_white_24.png | Bin 295 -> 245 bytes ...antum_ic_closed_caption_off_grey600_24.png | Bin 637 -> 587 bytes .../quantum_ic_fullscreen_exit_grey600_24.png | Bin 340 -> 290 bytes .../quantum_ic_fullscreen_exit_white_24.png | Bin 340 -> 290 bytes .../quantum_ic_fullscreen_grey600_24.png | Bin 364 -> 314 bytes .../quantum_ic_fullscreen_white_24.png | Bin 364 -> 314 bytes .../drawable-xhdpi/revanced_copy_button.png | Bin 402 -> 352 bytes .../revanced_copy_timestamp_button.png | Bin 601 -> 551 bytes .../revanced_download_button.png | Bin 365 -> 315 bytes .../drawable-xhdpi/revanced_speed_button.png | Bin 661 -> 611 bytes .../revanced_time_ordered_playlist_button.png | Bin 333 -> 283 bytes .../revanced_volume_muted_button.png | Bin 665 -> 615 bytes .../revanced_volume_unmuted_button.png | Bin 582 -> 532 bytes .../revanced_whitelist_button.png | Bin 592 -> 542 bytes .../yt_fill_arrow_repeat_white_24.png | Bin 458 -> 408 bytes .../yt_outline_arrow_repeat_1_white_24.png | Bin 505 -> 455 bytes .../yt_outline_arrow_shuffle_1_white_24.png | Bin 440 -> 390 bytes .../yt_outline_gear_white_24.png | Bin 902 -> 852 bytes .../yt_outline_screen_full_exit_white_24.png | Bin 340 -> 290 bytes .../yt_outline_screen_full_vd_theme_24.png | Bin 364 -> 314 bytes .../yt_outline_screen_full_white_24.png | Bin 364 -> 314 bytes ...antum_ic_closed_caption_off_grey600_24.png | Bin 884 -> 834 bytes .../quantum_ic_fullscreen_exit_grey600_24.png | Bin 375 -> 325 bytes .../quantum_ic_fullscreen_exit_white_24.png | Bin 375 -> 325 bytes .../quantum_ic_fullscreen_grey600_24.png | Bin 404 -> 354 bytes .../quantum_ic_fullscreen_white_24.png | Bin 404 -> 354 bytes .../drawable-xxhdpi/revanced_copy_button.png | Bin 494 -> 444 bytes .../revanced_copy_timestamp_button.png | Bin 770 -> 720 bytes .../revanced_download_button.png | Bin 480 -> 430 bytes .../drawable-xxhdpi/revanced_speed_button.png | Bin 939 -> 889 bytes .../revanced_time_ordered_playlist_button.png | Bin 416 -> 366 bytes .../revanced_volume_muted_button.png | Bin 899 -> 849 bytes .../revanced_volume_unmuted_button.png | Bin 779 -> 729 bytes .../revanced_whitelist_button.png | Bin 896 -> 846 bytes .../yt_fill_arrow_repeat_white_24.png | Bin 589 -> 539 bytes .../yt_outline_arrow_repeat_1_white_24.png | Bin 651 -> 601 bytes .../yt_outline_arrow_shuffle_1_white_24.png | Bin 605 -> 555 bytes .../yt_outline_screen_full_exit_white_24.png | Bin 375 -> 325 bytes .../yt_outline_screen_full_vd_theme_24.png | Bin 404 -> 354 bytes .../yt_outline_screen_full_white_24.png | Bin 404 -> 354 bytes ...antum_ic_closed_caption_off_grey600_24.png | Bin 1067 -> 1017 bytes .../quantum_ic_fullscreen_exit_grey600_24.png | Bin 478 -> 428 bytes .../quantum_ic_fullscreen_exit_white_24.png | Bin 478 -> 428 bytes .../quantum_ic_fullscreen_grey600_24.png | Bin 435 -> 385 bytes .../quantum_ic_fullscreen_white_24.png | Bin 435 -> 385 bytes .../drawable-xxxhdpi/revanced_copy_button.png | Bin 667 -> 617 bytes .../revanced_copy_timestamp_button.png | Bin 1028 -> 978 bytes .../revanced_download_button.png | Bin 605 -> 555 bytes .../revanced_speed_button.png | Bin 1227 -> 1177 bytes .../revanced_time_ordered_playlist_button.png | Bin 481 -> 431 bytes .../revanced_volume_muted_button.png | Bin 1134 -> 1084 bytes .../revanced_volume_unmuted_button.png | Bin 985 -> 935 bytes .../revanced_whitelist_button.png | Bin 1151 -> 1101 bytes .../yt_fill_arrow_repeat_white_24.png | Bin 655 -> 605 bytes .../yt_outline_arrow_repeat_1_white_24.png | Bin 721 -> 671 bytes .../yt_outline_arrow_shuffle_1_white_24.png | Bin 727 -> 677 bytes .../yt_outline_screen_full_exit_white_24.png | Bin 478 -> 428 bytes .../yt_outline_screen_full_vd_theme_24.png | Bin 435 -> 385 bytes .../yt_outline_screen_full_white_24.png | Bin 435 -> 385 bytes .../youtube/settings/host/values/strings.xml | 3 + 464 files changed, 6431 insertions(+) create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-hdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-hdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-hdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-mdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-mdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-mdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-xhdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-xhdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-xhdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-xxhdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-xxhdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-xxhdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-xxxhdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-xxxhdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_orange/header/drawable-xxxhdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-hdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-hdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-hdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-mdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-xhdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxhdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxxhdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_orange/monochrome/drawable/ic_app_icons_themed_youtube_music.xml create mode 100755 src/main/resources/music/branding/mmt_orange/settings/drawable/revanced_extended_settings_key_icon.xml create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-hdpi/action_bar_logo_release.png create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-hdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-large-hdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-large-mdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-large-xhdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-mdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-xhdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-xlarge-hdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-xlarge-mdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_orange/splash/drawable-xxhdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-hdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-hdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-hdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-mdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-mdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-mdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-xhdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-xhdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-xhdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-xxhdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-xxhdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-xxhdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-xxxhdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-xxxhdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_pink/header/drawable-xxxhdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-hdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-hdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-hdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-mdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-xhdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxhdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxxhdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_pink/monochrome/drawable/ic_app_icons_themed_youtube_music.xml create mode 100755 src/main/resources/music/branding/mmt_pink/settings/drawable/revanced_extended_settings_key_icon.xml create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-hdpi/action_bar_logo_release.png create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-hdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-large-hdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-large-mdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-large-xhdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-mdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-xhdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-xlarge-hdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-xlarge-mdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_pink/splash/drawable-xxhdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-hdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-hdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-hdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-mdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-mdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-mdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-xhdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-xhdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-xhdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-xxhdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-xxhdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-xxhdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-xxxhdpi/action_bar_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-xxxhdpi/logo_music.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/header/drawable-xxxhdpi/ytm_logo.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-hdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-hdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-hdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-mdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xhdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxhdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_background_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/ic_launcher_release.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/monochrome/drawable/ic_app_icons_themed_youtube_music.xml create mode 100755 src/main/resources/music/branding/mmt_turquoise/settings/drawable/revanced_extended_settings_key_icon.xml create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-hdpi/action_bar_logo_release.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-hdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-large-hdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-large-mdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-large-xhdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-mdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-xhdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-xlarge-hdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-xlarge-mdpi/record.png create mode 100644 src/main/resources/music/branding/mmt_turquoise/splash/drawable-xxhdpi/record.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-mdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-mdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-mdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-mdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xxhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xxhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xxxhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xxxhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/header/drawable-xxxhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-mdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-mdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-mdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-mdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xhdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xhdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xhdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xhdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml create mode 100755 src/main/resources/youtube/branding/mmt_orange/settings/drawable/revanced_extended_settings_key_icon.xml create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__0.xml create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__1.xml create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__2.xml create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__3.xml create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__4.xml create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/drawable/avd_anim.xml create mode 100644 src/main/resources/youtube/branding/mmt_orange/splash/values-v31/styles.xml create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-mdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-mdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-mdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-mdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-hdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-hdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-hdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml create mode 100755 src/main/resources/youtube/branding/mmt_pink/settings/drawable/revanced_extended_settings_key_icon.xml create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-mdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-mdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-mdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-mdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxxhdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxxhdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxxhdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__0.xml create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__1.xml create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__2.xml create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__3.xml create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__4.xml create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/drawable/avd_anim.xml create mode 100644 src/main/resources/youtube/branding/mmt_pink/splash/values-v31/styles.xml create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-mdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-mdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-mdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-mdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxxhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxxhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxxhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-mdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-mdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-mdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-mdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xhdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xhdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xhdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xhdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_background_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_foreground_color_108.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml create mode 100755 src/main/resources/youtube/branding/mmt_turquoise/settings/drawable/revanced_extended_settings_key_icon.xml create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-mdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-mdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-mdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-mdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxhdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxhdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxhdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxhdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_144.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_24.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_36.png create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__0.xml create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__1.xml create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__2.xml create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__3.xml create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__4.xml create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/avd_anim.xml create mode 100644 src/main/resources/youtube/branding/mmt_turquoise/splash/values-v31/styles.xml diff --git a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt index cff91ffde..1a4c02fa8 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt @@ -31,6 +31,9 @@ object CustomBrandingIconPatch : BaseResourcePatch( "MMT" to "mmt", "MMT Blue" to "mmt_blue", "MMT Green" to "mmt_green", + "MMT Orange" to "mmt_orange", + "MMT Pink" to "mmt_pink", + "MMT Turquoise" to "mmt_turquoise", "MMT Yellow" to "mmt_yellow", "Revancify Blue" to "revancify_blue", "Revancify Red" to "revancify_red", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/branding/icon/CustomBrandingIconPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/branding/icon/CustomBrandingIconPatch.kt index d6873e128..992a11db1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/branding/icon/CustomBrandingIconPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/branding/icon/CustomBrandingIconPatch.kt @@ -31,6 +31,9 @@ object CustomBrandingIconPatch : BaseResourcePatch( "MMT" to "mmt", "MMT Blue" to "mmt_blue", "MMT Green" to "mmt_green", + "MMT Orange" to "mmt_orange", + "MMT Pink" to "mmt_pink", + "MMT Turquoise" to "mmt_turquoise", "MMT Yellow" to "mmt_yellow", "Revancify Blue" to "revancify_blue", "Revancify Red" to "revancify_red", diff --git a/src/main/resources/music/branding/mmt_orange/header/drawable-hdpi/action_bar_logo.png b/src/main/resources/music/branding/mmt_orange/header/drawable-hdpi/action_bar_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e48f4381852c81f9359ef33ca6af054506266c GIT binary patch literal 3665 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 A4gdfE literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/header/drawable-hdpi/ytm_logo.png b/src/main/resources/music/branding/mmt_orange/header/drawable-hdpi/ytm_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..773cb809fb25706a720e748c2648d7d2f2c9534a GIT binary patch literal 7156 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 N002ovPDHLkV1nHJrW^nO literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/header/drawable-xhdpi/action_bar_logo.png b/src/main/resources/music/branding/mmt_orange/header/drawable-xhdpi/action_bar_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..02bde6ac64e44c5c3253b8033dbdcc9985fdd829 GIT binary patch literal 4996 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 z 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/header/drawable-xxxhdpi/logo_music.png b/src/main/resources/music/branding/mmt_orange/header/drawable-xxxhdpi/logo_music.png new file mode 100644 index 0000000000000000000000000000000000000000..fcfb8d5bf2f491c602b41693d411e4a4b6d14e5a GIT binary patch literal 30415 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/header/drawable-xxxhdpi/ytm_logo.png b/src/main/resources/music/branding/mmt_orange/header/drawable-xxxhdpi/ytm_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6cab734f6f5dff78f32bdcc1a10c825a7fc75dc5 GIT binary patch literal 26578 zcmd43{#5Q>3^gxD|JI3KWMREfjZ$;O?%)U5ab*0)^u4#oZwg+#kNb`*X{m z@SGPp=fx&xc4udHX0B@z`9(zz6O9B71_lOGL0(!N1_n<2{dpJ#>HTxGJr)}VMjS># zT0+wk_N)uJlUxT}E0V-AeB4DuIh`ivZt!kckFtD0cmO_r zlDPf*#XueMfj;D$e83X-j*;WvuA#Jf@AN8@;iMapNl(bm>|}06*WEwwyt|i|b*{#P zG3&Qx^XfM*9i^lMaVi`X1h~NeAKsR!IEs1K!)m*zII<6p0j^#O^v>kLak7JjgZWR2 z?Rh6guFUNvt~dXTuMxQc|2qq3DjWm`WJ_QE#8tBB2^s&7T{wm@Dzf2)^Zic@uL@zj z`5r}!`C>A8GT4Q$V*lrhUgG(gn9kViE!RcH#VX7bk%uQ!UnPn1MJeSI@5#h#rMkn{ z!)qk-q@@1udJV+{^l3TBy&)QgQ%C^GVym!Htr*)0UKqUaNcxFzB>#78z6XN&MQyiu zdcj^ni7cJ)%U@;5U7x~}>F6)v`~PPg6^=YT;7x%4R04?ck{D(F`gTc8{ zVQ?Z0B(9H6mra|~am#F<3m3e_QiKn1e54BbA8l4g^`HVynalCRqZ7iloh#>0B(Bls z%pR!!SKCu?D3)vdlx`+<-p5UN;GgcGh2Y7uFLz96sQ>dbfpjvPH~rq2%f~L>70Mw7 z3b#CSU2*?M-h5OX$CBh^AHKqQI;7xnF;??DDY>Hm`<4I{{y8_gM-IWI2*v8zlaQkg z8M(s$JAevhjD})E_IsSF-Ef{u$SN79b}X#q|IC-;3kv`09!@M_6i8p<&l}MvchPzH zL*f6c_2ZbH;gA+YOcPEHV)>BQstGVfFXDf%eK295TJdU^kBQl04^Cc9$n5aG60)6D zObGISk8l&;oDZodI9o;;garQWZ_~+>`A#b%j`BatP!Sq{S$W__E*X5v&4v`8C^lH| zebi4NYX%MLJyle{e*3Eux&w2`|*`2S?>$(P$aoGy}@DiE z?EWvYk$`XsxrqQD;p1En6(V^o3gI6yWCAlH^X}LmIi=wxsR5&)fi{jW_C3^Y~?w* ze4~?pu;APaEDg2xROvoNRLYY8FNYsL=P#-55iaeQW~SS5i&pj5SEgE=-jGJNOd=-B zXYQsxZ3zon3#_@1eHs+*5v%FrbS0f!fQ~r`1K{CeC3#ioCRz$IU*2uz4nEKu(YJU$ zf2qs+4q+E=h6mZrzcLeDWSCa76r@dARJb}*9xLpW{GlB>J27=+*+pozla-(PI$NLu>kiu>n6TqqVl2~!UEws>BQxkGhpc04WE`b?r9UgB44cl30F z+Nl?wf@P`1GoS3m>2D~;?4a5gO8}#2e zYjP&1J&7J8b>rU+Y77>D+|r8{i%zB!&~S+@;Y_h1yxeiJl_eR56K~0vhm&s&ozzHn$IZYI)H{dcT@DCg- z3H6P157zX*!-w)T)s_CJQ0Pf#flT@CQ6zJ1r!(#HRNpEAeGL}-2mo2J3QQqOgr$i< zvl=GXGqSm%#vG=NH~M?SsB11RPD;sodE3Q~|09=q%!3{F651O7A|mBb+E#>8pNZ6} zBnUrnTGs+7Zdbm?5&yXWqZ=vwO7!JOb+L0cfj%hqn2vo@X7;l5~iPMp7o*iLY1DBB?cK@p2Q^YkUVBRRxK$!EFA~s=+t#& z8kpN5Lo964jO9Gu`@HSI+!&Um+`a3Q_&82@yuVlLD>%yJOPA$&bOdfNR_+*&P(DiNGki z;y79Q9-k9Nz`&l!gy*NxPL2Y%dmPs-flPB+I#wLv8Wqr0?2pcZM!gv_j98vbPpbIK zZiUzS`f&OxG6lg-nmB-j$(x3=S)vCr4GuUeJ_wSS@*oz36^p|A88mIlc5p*St+Mp^ z36#FqJ)TN{yMl(}DFk_zMTGoi7NMnTtApRhYQzL;l&QFJ9^%a@3VYRIrV8O^kWl9X z7o5Mgk`H9=@_iqajfEiNFeU!!(ZQ2HBInxcR--owLx2P0)M31cxjIn{2CreJ7VrK+ z9f)0mt*7RP<%xTr?kH_f0%VF-E{=b&p2OHFCJUk;J#+X3>F%!cXT|no47>q|cdPuU zC1vT66|@NpP)dD6w`(=d&MawFq|lIyD@iiwA$&9Wt?Fz4j1)=dB^s6IG|>8JetmiJeFUR9SY%%Eouy zj7*A`9^Rom&jrSaH-;)B9xXgh^ttf-V6Grsq)p# zq%F^HJBl=T5Ck{@oGH*|@nOOUF0s+Fr}Cd^973vnfHF{Jfc_R-Axyb5zAv{akhJ;F zCHxTO1CSMz=w66d@$Lr7d0^W!J^QD0LNjn{_au9UZ^{mw1^CI^j-?wueY8V>;|>u} zI9KS(h?l=JrFXJWZG-Zs_aeQ|X<)cD6ag+6E^wx9UKH<%xE)m_lWPl) zkzTyk%*q!hAA@Qk3g!sn!P!r1gozME<%krwq1hiy=Tuqp%;D5LGq-B@H(e{P7khFg zlgHzH)oFFH0;?Qg1j;8%a?#2JFknX#z>mLHNTGpAakJm|shgbm=%isnL8`&k1mg0b zM<>~x4V`LkXNPpvac+V+MxA!*1|^&0KAZMk}6PX91K*ySwq3S@e>T;-pF_`*Squ&D@B6bEp0+hEvW7$9veVVJ1d8E_C-; z*U*uHc4cEg2?)Xqr~=5tac2Qr>7B^quu_O`;pPOTXv{ksMr7;m3B5=?tNNU9@~cn= zp5P;UjIpE*RUf(tUyyJU`&%~-FzTBq=m7kI0 zGbH2E$^t$F?Y14{Djgy&@b1kCu-{V6cIEo+5{Wlpeat{nLW_j*5TYFa;=1$J}LN!H!gh z_==g`+1DT|-qBzBAWaUq%vadS^%k+kU97Z^JHN4X^A+8Fd3D&j<9yX&blSeb!7X>+ z<0BH=FvPaBd)|0C_n?P(4hkh5&6btLzBZVRCe`}CoDAPAe$6A}|E6bcB(VSEJDxk5 z@{h8_v1|b@-+4WT)HZsvrI+NsO!W<&QGS!1`WPXx27+TH%D6PntrvFPjs(# z;8(H3H|uTg>yK_wTfoElh@$dd<$YJ^27241BvsXCdJQK*qM;GDd{h2iIkU{NegYNTn3p7Wiz@Ja7E8OWLO8=`^Rd>IIz?l6`QXnH4WM(W`nPCj0-y)8Tx4mZopBt6 zK@(Tu?i_vr9D;HyJ?W*{R&xUMQ@W8m#hL+;za=TZs{H;w1@;8c^zeNHi++A^(|e|M z)zz7Xb*HG_YhP7aIlAl+3o-M5Td3CeXl`yMXKCAWlGjEU=`nX(oPE+Z>0X}|t9UuZ z&%2j~Mt9#wpGk?4zobiN`#^_>J-VOPQUJct#F7fD0Dma_|1}bHEgvXp3qy{sVwqm9-UDz|09I;5pBRY$_f53}Fz<1$O#MU=cy9eN z(I1JQ>@q3B*LJ@htx*|Im=Q==pUG*a=sY2C0Qipy&3f`UIe?=7cq5a{l7z7Lehg0| z`p7@lg0B?O_f0Q-a+!LnmW!$b9G340lE?5C&9pcPa@}TF$ZNLUZzU1??5+4Juc3_> zG5a3@iDOVSqhWjzF0AceJ_XxmH}a0*VWCdBEgGh0JN`k1Pn)b+65NU5N*ZPBV9~4l zCea>b(?c_>)PqNTK&>#v*0!5uIs<62uu^mq1?3JjPvcjX$jzfAO~7w^J7On}(Fv^z z*fu3NGk*M8Dc)Wx`Avm(>XROP*skTJp0eKB7)>B_gvcAWuW8qvtDZvXC|F34@LiHsDMi2E3D^q)*S)~C%mX&Fu?P31w%e<>eQ=eLMgMI6@L1nTwrA`@7 zWlCgGU;Nd+TP)W5PJ9M!0aA#vf%^ZF{d`(DnL!@H&3_r>BDQJX zq&GmNG=S#gaC-Oi-mdEFu4iY5+-uZLT?0A=!3pM=>vK zi(Z*puWGX3G#8vMi3V$BHnvepb*{{+7tq@ywV=))&pYj99#Pc10kiKv&WxZWEc)Sm zU%GaObDPzzDxf{WSrRxrA>C}2dICF8LfVQN&{0>BM;~0NwWI@{KT(qLIwt;QP+@eO z*s{dHQpx%_aDHYLI^e5k)HCk)>YpGGgxt2FGeX~eC9>LN$1goMGuwitTco71<2l2?NwbUH z>j#tf_43+Sh_kELcRIQZwKi5OtnmfD{O5>_!Afb>f7OEITp6#kT<69u@Hb_P4Z4yO zz@kqIHqo}E|0KejJ3GXRm@!{BoP1MGpSVA7#m9uIsi|;d<$g$GGW%sE31+(F?;T!uKT$nlnJdD?85DOd6K z1{E)v1h33fh}`m_`!Y$C?BafYQD3o>CMOg3B@rl~-+g_PqHgTW*Q?lY>2@0Md?Q+` z>FmM#d0U+hy$+*A2ogDcWQsffBvVZiCi~7}q~wF%gLudrA4j_6WUsYqY&l-cHD{>< zXaCeu_>y%IK^tREke-vsz^~c`vV>xfN%hQC^pVrhY}74N_4%Bx#Fp!8e}_n(r3GN6Lp~jF zXgmWJ+dW{+wcBm!;|+JpI(cG{3?Rh6AZs$~2X5rOJs)VmUDe0?vWPIz*ldqUd(pEh z2lV&5vKe*qH>a)nzrDn&1c|Do=tsinZ7r=dZ;MJ!UJ8&jr)pxnPB8Hjx;T21=_sVe z+OabGkTyS*W9ojzBzQYlJ8fg9?Ydo92}Q~`==~)|8jz*Xzr#}JgK0d;fG6r_8M)G7 zF_~+|B3hR?q1Btd6ChS}aUkv24ciUG1J|*8TRgOq^RNT3wCKfCq)3%VBQTF?Tv6K- z4rU|XJkNom6A+h^;M*qG*1fL;kyc=e?)|L=N2Ad8x=qwSZRt)nXjl1pZv{(=QaIQWt-s$wut#v z|2A2kWqci>?Pjl*iWjGVlyJFkg9h^TeZE~j$x3W=jH~{H&&^d)Z zs;P;8qgKm;f8d9Ox+C3LT%LY*%!mL@YU_{DhC65tr<(O~dNOUX@7|XmjeVRUX^Xn> zfOeWp?{q>>z~sE`LgJqZ*$jR>pLD<4KttJmsE6CH*PWm%4&5ScPv;$3FY=LojU(=Z z@Y>BtJaxMDodtnA>CD!4c6L97zTQ4Q-@9l{q=3C=ul`}KDwb*&KCBc_562Ve zEkrFVswTC>t!)b7QN4UxhZjUf8HM1;kK!l)?Ij%Oyjz>A8xGc<|xl9+zfPVcd z1j&)HPf74_t8dEf)k2roLO}nb_53rOes|jO zj{veS`=iZaWVzJkwkG76dWidT_!*Jo8JAQhfVJFptVaxr(chK^d5E0O{#9gngk>mQ67 ze9*!j;fHupm-~;edd9|kpXYn~Ku-D69 zZj#JMqkJ*1<~G8F^+#XiD@eld)}U21OJ0G+Um0R7-@B!WNWeT(-#$&yGd?nbWjg&@ zElkzL>vK@BKV9-{)UP%ADDLl~;*}m^l`5FWd9D2`Um)w=%J^IdikJWPuXd94I*791 z>CtDOD^KC|eOodc!lv%^nfh>oFM5%a^&Pr+j2SJ^sb>Wk$GGGt1W&4D*HR`FKPOww zqEp_XcopL70_WKBmH$5ui@Vx^gY6 z_%(RpLHG#aQg~4B;I69^(1#~~TGHMY0)!hQix4(34=-adEOVFu6Gf=(;0vP5vF%vW-dwuw={7-}4}V^k{p9qpuM>!uwYh1V`09 zIBEXX8B008+$_>FYgbwRqyBW8FTcFJ+#snRe`h!M!k=jb*hu@!w%tGO_FRhs3+-^P zk*Q`e+iRDiNznqhm5xW2=k)uwNM>TglG5)hH{-e}{531r4wbdljnroHa|M;M$!$3G zA`;1CfIx}}+tPwMItf!sQxBFD>tC?5t9HioS_+5?L7|T^HhFLTPO8ols@TZ0T$A`N zwfVJvHi}*;`PT*t*;)WJTM59o^))8BFtAVm-0C~>SN!jmieh&j9DvH5exIM@4+8j zaMjrMJ7a^lDmFKKKo4&&OpvH_yMS=rPVjOiDBrriD`sMT(j_PIv5TicKEL{_(Kr*& zRr%!oKDBuF+|bWjoz5<5L=IL!`2C?!Qb^QHG^O^3=r7E%QLCCzJimXImP~GOY7~Xrgb(M>omlfD z1T+08Unp!nWHrLrcdd7pZQxTsWe_g+9l9L;PCBO-_V19VQXPb`5Q)kO8KrWvyU#28 ze0OM7B+No?Q;#z`c_P1I)z6HrbC^Q*T#x_V=u~2@;k%rIhZ9ftSjQg%Y`0KO{B9MA zSnt}(KMiz>Y3oTb>8^We?}`9YJ`Bkv{ihso6jjecAt3QMEk~)WT3YKG#7$|qeUUMG zqElm#!J_|*1^iygm^Hhb;3_o!tdp&_*&tm~0cmF%dkJKS(7I_s%QXZcijnk27l4-A zhg?!(&xB{yO=Oa_0Gfk4a$5BB9KsgVKYE3OcG~u>PHp>hd(YTLl2a|^U1;-5ro$AN zqx$)6ghG-jLQS0KRC>N2Rv(TZlBZ-mwTi}_%U06dXQ)Jl^|O|;maI{ zZw>C1F9_&F5Y`M`%57gUJbpdYnPyMDw!Y|y^bT*WY}TuOa3ZrNX%fC;(91Y6@j22y zxjnq1@*WCL$bLsp7!w~3<-{_dXT@GL{*JB>KZgWk&x!=Es)p~4uW74Kdlr|?E4k|4 zX60%PWJgh`mFAa>POtS`hTyBn^YbyyhMZA|j9)swK0h2m-xMPag<jy8II zn7KxYp+~eRx|$N+qecwiEHHDVT;vh<%zPp^98jn48MtLI`&U2~*%e~;8<6eHfGhT~ z*?5wfw+?GBcWi<3S2XF=*ls6odT($UeG9wk{R!L*H|cneT&q@7XPerI;o;eRR~W}F zN9-=xPro~cZllVj|5EGl;~|`8Omu{Hd&wd9AAJ?#HIlI^ghLZy<}rlm;_~S=!PBb} zc3;M}>lvkFvHM^#`FDUyl$ix)VSA%D7Mb2eRZHAEW^IA;Xl9;*(W zrcjadJ5t?@q7DyI`uiw`DTaT%J&@6Qg(w11e+ZfIB`jUp>J?y|^*;UzLdcC=?x@i% zr?O?KiZDN4>+pc{HnLK#7^n+$8~8l3cNvmc#<`|i)J!6FTWI)KQC%!rJI(MVcB5IU zhZ;3r^@j|2Xg+sy0iFZcAMe-|>;>g*jZ4clG*ps_qAxbJder6U*lEpi?8@`!iN zto3;kYh|ar&o~XYjM;RLf!~TKmgh=MDEQIhpf1_8n%mTz`i1ISS>ILvD$J#_gO`S? zQkwToU{FGpQJ3JuWxRj3N{ah%*Auec#_ui~=xp*J9(DLX;i9p%pFpjfBt&#Vzzx8V zpm-E}B;ln=Z0}ys}@>dixv0cwn9gkS-*n{|_YyJ*9nG_L` z-LD%`TY?oLa-)-dhyM9rC7R{sK|W&fKhk6lCAk+{X5@Fv5PEQqZLsBdl|dm&@h*n_ zZbE)OStmS)U8^3nVvn{)P69phL#zhAZ*5U7HKxm#DES zxmNS$Fl|vxN1I0t9R*wXFCc)-aZeBqVDw-?;177)pPqM1OH?QX=AqHZsW-BjVi=zHx%ZevAVh&__cc9 zoe%b`3;xuR?R$&QjPJaHak__HtQH>4;^SA1oOgtRaos}5+wGG=VXShkPxhsR5Ak8+ zC+@2^9;*9GD5@$*Y%^{9M>(5}-HbOK9cH2bx`O|3&^tvZAt0<}vx#(TT6x6pq~% zmWF~ChZigEz=FUVrqr10D)U#yuPTcEr`S-KJ!_g{v?3Y=OCHP>jr;nSF|NrmGwS>p zrA!K1wid_c7&98R&J8s>lOv-c_*jH-7C*=pRcMWM2={AaSJJcTRNwnGRjqfkXz`)EpX1=c%&hi!r0NA{TF^eRdnl`!uPRa}5cFjcl z)r3$oD9bnpW9{1@LH4wO1?Yt6`#nfmJ3ni>Dm8rL9>7#9U=V!^b4l}2A@tZ(@nw`& z$k9|4>PRuTRa%b|zz|a^{Fz!?Z#g$Ea?0z9UmGpG{Z3$aep-$Fj(2P#eRgJZ%E{=X zOlA|uF3=6!SN%)q;Egqqs)8qVy3eiN5Pqv$tq zyQ`2U$zMy4y{*TK0DyP!*&&_XgXYrj`w74^>i@D;pzyojs$r(9pa34gYHbx&Xm^6v zk{I=L!|g{=ml&YdXyz|RniSemGNuS!r@YUNfkU85#q}x}oq{&6$5wPJ90bKDiP#ch zer$#-pA2=*ra49j5p-gSt{~iopMUhAO z{k+Fc|MhvBXx7)u*;{jp8q=Vi^D~X6(q-|zEb$|A$uxG?5VDa{In(7z>&nV0E2cL8 ztt~m)D6RJH&QUex;JiX^Td^zXmk4|HAo%5=L))2NxEzL7Or`E~OHuhTox@*s!R*-s@Mn z*ZeUq69N`JEC5Z#VMC8Kt=YZHbD6omiNEvkTv@8LU_(3Y#OD}U?@GsNj$8@8bP^1E zu4pL&CCAhi(16uHUNlhLP2UK8rS8!g6$NSQt!#ko7r$nqxoRXwOBch}>q@!Mi=TJfaNn{xbuv#tG~!hjD~ z#7LtyZM|R;Iq&48aRW>Qf<Tt(OgYSm2?eOU>C(l8B*iDRmMiYlzCU=%l1 zg}W!+*lsYZ_#+sjzZU{@5vaO(R-)C3{8F~0ml3;vR^^Hz3ujs;1E(on)$*$V6y%Ki z(|L1u5=U@z?KoeNYb@%Q6=@77O03VkBvj7-T5j0m_f<~Fr&-u~BycG)ri${nhHdNo zJ~h@m5N4)USduEOF3I}N9r}WKAwhfUAQn^0SVk1-0Z)^JXcP|B+H%p@ce_TsH5D@6 zWD364(QKsEaBgC_g!#fx4Y)4Y)YTu>NSerUm8xD;qS!(y5i^FfTag-I6aoxb=hMwH z{B;0+l_u@ztda()q;7sah(f_@b<^3ST2MR{k80doA^>gQ95?|)K__I9ulfCW{F#3A zq^8`Hvn#w|LGkoVvjADQ`mk9T)}+;#h#<4{a10>=x+`s2ZF<{ug~g|9F-D8EK&b~L zAK=2&BOiFejP3Co2?l4TBN%@mJFc_VLc!U4Mv0GygQ92(4J)*IxMTF;VSc`j6reZ+F^=i+>G*) zlkYpby}}sYaOc7>Jn@J_T`}58NXkdltN}2io63JBMuO>E52{U@epzY>9Cy4Mt_3@)e$vv^IlEOZ(i4hR zL+8HJle#q0?Zo4h7SlXH9B-ts5UAh}(9%j*REW*rJ%ZI1`4c=WMH0W81M#tluPn=E z5P3(F?RSTU=aOhp)hUck?6$w?vPws%T3O>T8aVOF3wp&Ot+3dZ^y*2l>v1{fj{JKd zwvn-zBOt)5r}YyX?E<(%^pJBwyH7Adz5K9JCeQ zhX*BrKO*&BOR6I9L@f^Gm@r)tpA?~-)b$3;;s5$P_ovaf!)+jX`+VAEf9xprvnNa? za}BTEvZlNGW$HkUIdgA0z$@0}FK*R(G^=Vrz%fh~LTM#Kt4FBZ0(Y{Rln4>aJF_b> zQ#xzA?cHxB#7?*mLCv2T1rzbuB}ourM?yl}X+fr~@|>c1oKTm9XSvpv7+r~dJBF|M z*);<%FZYbNQ<84P^9?QuZ>gvWeIC50p!%5ugLvp$wJS+FZhAVCm60`Ffy;4r_ow38 z?Kl;&qbr7(&WGvv#kN=90NNlH@0I9QcJu@Grutnyu0tcx4_z-MyaN~KW8gxQnK3dQp>gmW=)B(H@DrBvv+gEFAhy+aSLC0`nP|Z<{Ag^i zkmCdT=_wp~p8b|w#_I;R2O88>pUXuM&IPe&dn;_Ktz?S2N?2$1}{y&rrpc z{`O)vJ0qeJE2|3)*XPw-{^_6!d?k+0EBq=~TUzj}dhNaX)#K@`CW?cVXwXJ8qjSU!fQ{>anhIU6oR0Q!(RI4=+cdWP1h0UMrDG z5s~>d^M|H#wn#WtPjzdc5e+vV_T-mTBZB44@%#}75n@r6YKI3zWp$Q5{$gv<_Gi0Q zVm42N>j@^ed?!;>m~=BQT?k}!!;RNj@OBnesIJIolKEWF;s`IEqcDN`p*o$h9bh#~z-z~N$Lbz`V;{&_-k z`ruY?U?UvDw2kA*6<5?x{->0b1YjWuj;b5IQ!OK*94)60xo%l)|#tU_m^evC`*nR z-60noi=oeKk^zpnAQrMhW$cc3Sg@0C>rP`;=d-1C`gZB%KZx9k>OQ1-fN}1=P{xV? zZ2e_o9GaoeNVaVhoy;_SY2EcZ{&BiZFTC}9k7?^S(HULpFIU3ibz*Hk)g6f&oYsf^ ztmN^m9Q0+qCO8FGfLsz)`j4mecc+e)q4iFt_`-$$g_T~{L$<8&tFlsne2xXSfL`NQ zmz%kt8p;PuuJi;0=$gbY?OSU#+Z5EioLN(%3aG}qf!483uanZ;E}@EKYclRULf5=5 z6p0}TMmP!b8*-xEQ71Iqsu`!p&3$|aYOmRSCg85XCjtX^km$Ai$IDTO> zFlNS#SL>dph;LV-6M59p2)V4pfum5m{5R>xo5+6+s9SL@(aD`R5_ymdRJ_B1g3z7T z)vIrbM{vK2Rh52V3i>`&6orBV5s4>oLPnlG-(E-SAE4Gi+EJltL@*4yZDGtp77q8< z)n=D`!}g+-8EK#dpm4OKNr6FrWU^J-6t0*wcMj08<8P#-TI+v4DSAA?+x#k)S60C6 zr+*n=<-GeLIC4w+4sfg21Z5T3;;qs<{7iv4qZe05NY$4o$8kg%&C#Irf4&q9xi!H7 zCDswov2-HQij!KWO_6wi{`(C@st!(j&Qjd(^pk*<#`x@xyL~{PUaHUAEnV3comjeD zg1_;1quXj*qz}fzXGeN%p-t~0Bc->i&|%M7Jn#zPyct2yJ}PQYc}64$N?-p-Y<8$! z!*}^aac(y#*-jNu;zm3e$i0ih38o9Ir`1fJ_)>x(58Y`!P=Q9V~y^{zcbQVcmvNEe0`0@jF z9*;ZpxxQxY6)AVptuAmtM+e z3Fmn&og2Yxt!RcXi~x!*2{TP}h{krG5joGLPXQ{l$uBHV~X2*GB7n=MsNzHV)q=vIGI@UfxBBlqAp>bdbR z$dd$0f+CO%ke1=NH(@Xw5txADyu_nO{57nkopkcy9TP&3&Rq+!C%v`sNP}Cy1wD&- z+ne-{9-BRZvYgF=$j17kgyrX`S5IqjpN7r!3Y znh_|(le4CaAi<7A86|gprPP5yr_wb(fJesyAJl)aS9XcKF$K7_jY;z*Gs}(0gpz1uMKtJya zZ8UBZ_zv%T%9caMT`6g6$zUTyO@~K?{G21Kd5Hsa?z@O&N~5IMb=!=w>5O8VE%Yjllric^=k_P(&B%o^;=;PBDX&-7Y}$DT)w2Q zSm5ro5I`FjUgW)yhw19^{L@5fv@;4)W-uJ%?&UhS>Sb2)mz{z<3hfNlcDqj zxe-&}Ga1>o;!ZD%p6=~qFNP-1?D_cw<=g#Wvj6LW|3ue!7oP2%irU6W(T>SrtxDWD zOgGgm0qs6WwjV}&!)HiZyNC$(m@yJPw*`=a5!NI=R^fg}G1GnuvfOL~SBYXFX+p+1 zI@318u8{Gtt+3i`{ft3h+>29Zi&p|~YjD?C|9!UYim(QKddK>M)=N47b11VT9~bl4dm`+}kE(!X1yX~KN4o$ow?PD`p zub1F~hmXix(hmv7Hw>Nf>BnYJ&^5ntOycoUbU;r~1=*#ZweZxWxv6kEwxcQuJ=) zDU2E<6*DwO)LODsO6=nbMM?PyWGM15uTb_k&bDXhD00g4l#nVRyHR$Xl({-KR4O#h z(>`MnDG9>!#o(BbAgorH$btZzXn`^&Yl*j8#y*-DJ7_wjn&t&m7ISj8pP9vJTC%5= zF`asKx<5g>Cb^b%B{eHrSRfufVfoYc$j_^k|5kb7J^iKth5#y zl;+R)lxooTmKdOpfs+h$Sk;d+2O}FO97a~rAUI0V7G9S74k!&*8r@W6Vtc2~9$qXy z-eB@=&*2f~V~|pp{*%yaaMF|2ORzP?8@c3|qi8@V=ewE!pp4nR<_#+Pyce)_2|Lqm zhNxr$8mv?mg8YylYY%yZT}pJT!)3zp;t*b?uNSA^BLBV?V*6~u+rusEgAbZbIHyK8 z*HD}|loq0noq7ZvIN;NOXEk1rkBi;8KBwO)m44X{n+xxJ{~RawdcS);tEx&&s;ZD; z;U^H2CUYHbH<7HNA^;TOZeFL%4sSLA58>^Bx@{0w@cLLj(n~~F_I++pqnA?RXQFs3 zCbNQdMpUkSdiugk|J~TtOnJcz*z2#5L0(1d4inPLl7iShoufNWX`(w8cZYOMbDdg_ z(5WqD@>uy+G>y(M`uzv}(bSS%LOxGF^K1qD>J9TR+?$%@r`S0vFKQbZH|(WO2b`^B zp`WMDnLZc6l%I9H+P0aaEpMh3x%^*!NW)CuyNe=S+~29l8rtu$Bq-_7u1reFC;M!j zt3R>*vM5u?!+vIAA&t$+tu;ZBDI5sSk=wvARhnso(a?E`^y!^T2N4~ zcuQg0Jh0rX$^<&mq4(F3Fh3d9A4xC_vL}1ImO594tc1W?nJ4m_a<@!Q_xP5B8MZy+ z$G=PqH=Py)Ojq%woGgdm0==%8=a+qh8crzyq4R;~5uM*N@!iQnZwFjA@0Iz_cXLiI z65cqVPz*UJmq~wwG#tbkE`cDWY zRR8ZP6Chr6@B3pT2aRvf5daukcaiaf<`z<(!*${*naz7IA>qt)qI?-Jx_{>(wk0zn zY|s;c*!^L*KX6`sY#HTrAzGM!npv5TpW)vU6<3-F%_Rfuw zU%!m=0CZmobtm&br^;j(T`e#E<`uXa<2v~T5K(%D{$^&QI9&e5+&wb<@QE+DJ+TBf z5vHv|cBbH?7&?4X!OE<=Za%GkI>vb5l+DX9Q&@LS8xCn(7$O6+SMY`JNS*W`^->vw zi~q>Y+66 z5%!JbPK&+0_WJ_fn#)-;UQtF=f3-m%oDjgpgKWHTpbf({pk zFbfzN=1K0R?-0Isc9@I(moy{^^ppcXJ2RdbDQAfQ80unw1VzA5u%@9ohyu^Wegb%? zV7V~-&dk?gS#gI^p;}eC57Xv=oMHJXt!JsPA~T%$%$I()WKW!s3aBbRm&*y@J?wYs zB;$KI*6Ge{MPrU`-JSOJC1eF@rjBDah8V_syf=_8DMve6Y5GjVp1O*Gq!Y*Ovknv3fe!6`Oy__P{?n@q` zr@|DyMnJh@QYzjO;k>fKPa;XuY(#{4_s&e|Si0h8oE*y(C}44%Gk7!7rcj%V+toE7He9 zYoH78!@OWxa|{`Oqld?Vm?&&yKUPox^>gR4Q=HU`!d=T&~cf1R+T zt|{`9?Gw!fd}y1TPZ#`(``#6>JHlOfZ`^qB*?!XuCbau_f6eqSo$k)AiBevG5bV@+ zIAL^!0hGe1Y#*&{LYbVgu7K0@V3~_PKc7d2coKcmg}Ct~jEVWxydao9ug7l+8KS)^ zA2j22sS#q{F-T^R){pFll+l1+`WOTwr+x{5T6%(SFiY|7N8vlcJBAC!p=dNA%xUOl zpw*i#u+qS1M_G3q7hOl`BbbL?uwbD&;$B$NY(S&=$hXp>ik%HVw=6GEFn9M;FE*d0 zXoUH%aEw3aS6Lryn(5EDcKTrjkw68V8k4o5J+WJjV zuUesg`SJN7u0)u^;dhN1z3?(3?_&{)rUZ5?Iq05Os zw?z=W35$gIp|MuzT3NC?x;&kc@0Bwd7sjWSh3A2>*tggaqz7w(udFaxS4bJ18dPm2 zBDVTimDy$Wem7vS@n+>h!0sB?&KY5fhvF#$8TO9734sr!V3YIG=iT%%X`rNf#Vw%h zy{hStC22ug-Q1nihA02o1KY{f{_UJtJOtD{xXlT`mS1Gp(Dk`HF7wYu`Cm)bhq!9k zl*EUob#8Q=I9#=$oL@VRbP{PxV?~`8?F|F(4BpBKwIPk3+S1*W#WdpWOEyO)BTJ0l zD+n-(+N4A!58iA-FV+S31zzJf0Pa~DRw@Q=OFYxqAA?_<_a~aBV>I3dkg8GBO`j~7 zZxfE2<;dL-94BDkP3;dNv-FHVu+{gFbnaS%MZzS{ZuLv$5_!zUn_A{+C5 zzq|x9+-@|_gaPYokwQ#j?O39-wa=ZA|ArXcFKB1mz!B*C>SPacfAZmsB7I%vl z$2ytbg0TJPM`|lRTJY84HO%-Xk4O-7hL_UzjLWT#SznH3&VW4)f@HLIZ%Q&W4qt!dw9_iq7mf^tE`a_^zWF6MhRc`1qr?-PTI9VUiKa+(lF@3q^B;y(`9QJw`NlWC0eq&}yCI`1 zh~twd4)6~7MrLvvzTtO+ziZ5A|9D{RxrPNZ%I%ZNLuK(>c^nq#7fpi#>fJ0f^?j`% z2%{GOgL%xz0(!B)L4C64!xM!2)bWKHb-#QZ*C7_fTuQo=6hqt0>;IUcyC0MyyP7qq z+SvzMri9cY`(pq{PWA!<5W0j?>$7t8^d2~+p{_z;{T%9A@++JLYy#5ekr|qUebt{p zLQ)jA!L!L$Fu6ghQrctX=zN-S*W*f8u94507tdP9YsQ@FWTabE(;ayM!n0OT=Ijc4 ze{BN+Gs1bFc?}PBqTW77aLg6`S-B5+bV-K7Bth>kFpo|yKKEA4SMMiZdFkh>KhfYEPp@BTxQt1kG~4+ zL`tc2>nZ!Nea+f+4ZdcBt>SW19=nskS{4IS1HQPzwL@p;VH72( z&*dyTZ^a)QG6^2QRM?FrgP+lX1vbLAVA$_LY7r(U*J#-R6*-ZoXSl?Nz92nLW>B1o z$5ZrRIw1PA@7j3x-Ly*->3{aeXSY&jzOodZ3qPwiOmza>lnVFjzAxmF)0oxl?cGr^ zm*yr$v3}fI&3o$+JVpYwaFo?G@)+ll_TTU&n4t&gHK!Mz6t60mJ$N}y(bE;t2#6%n zrNCZQ-cQvOwqf8p69A?#aj7v{-CSQ}5I8{#z|ujCaOGn3;^gL-w=CEafl3Xrc)ac+ zKz0eVOST>q?o?rwYYasy!h4H0*An{$aKvMT0XB*y^@(iFAzveFN3HkK@-8x3Iq^4T zci5vN2MWIqLR^22*4hVb21AtXu??E+wcVHP$`}SIeT@9@g-Y05dKjkpRl>6yOmR4Cc-!K{>?ZE9_*(OcS zSjD#eGxghbWK21(5(?ps0PTX!J(cwII(EZm`q6ZDMd)pmK0$2Lfz4FNIE)Nc&yp%1 zM_q{ZcB|zFT2-+Me?+}t$SV*0Jxk`a6y(L?LGIQB!KP1v5QeUz+R&zWce-|R)g@G~ z+Q`q@(I0$#Ah|~5f_+v@@82dGv8+FXze@qBmh=!l&{aZuVdvuvyFzphUvyfr*R^-I zkZlxug%b0?NBVJc^*FlN@Y~+JOORz46(LED`J`YfD3OCRbLA7G2#GspkrR2eRYjCv zHTM1HF4b`cCz@^ZqzOKS_F@5gGH9*Ub+=+;6ym6e}Tpz5H?mtMH*M z0o^JAz6yw2x%VyeZA(NY8=)ktq#0^Wl`I=WTrxddNr_gbjazR2{74r*SDe!qs>p6Z zZJ9KFpwdZj(xrzcZ~4#N6uTtmN-!DsTKlrXwKm>JmB`OE7;-Q-e)A9P1J&?P_H3Qn z7k4Qc3A3@geA4h46K{gJ>HDi!Z|_H#+v917BfPnhQOG@%HPUN^5e zD{}n2m=P_aKXts$>p(o7sFGiYG~Zni>+i70&z^6$SwN`v8DoGYJu#ucjN{9FU53ei zafifq;~Kp>+NL|L;bb-W(@Q_70!oF9YN^Q?<&bMaeakE{;|HO)^WWTIbQ;OI`mlRj zvG0HVvKyvTNRBsuM7(cJFtMpyu4CFTgl4r0Ueh$Ca{JepLzNQkzNIo>r&==oS$T7y z%F{1n$~Hv+8=ajQgWWG0KqGKj6TSqqTYwuCEaHN8^Z+T5Erf(Jq+-;kb>*9O)- z5aMBcvHMGyVUJI(Y)d8E6}O<|*a5ofdCdsAn@&u=g+u?56%?3ZUR+STV>;)Jl~c)i zTjke>w$f6@G~}Oo&}cWCtX?D|(Ds%=`kgn9zbfeqfu`N4479t-Oz4^C=SX6EyvnZI+<_Alb}th+}_6cNr>OGTb8dIz1>zQR&s1#miU9pSVOxaVOq;K z(DmNjYtKO=4BO%!ab6s_~PV9k+zwI?5cQP{YW|Qb{9SGBZbiYiQH@hg+}+k%S~)e?u`{*MM{p{ zyu~(Xj(uIT@UCq;DuABb3aU}Of!(}4K&+t%&dyt8=aTI(3dqI3BYl@S&=GGdM9fXQ zF7&*S3{JKDNZC!!RY!8HCS_8G=gDu$As8z&?eVu_{x_+_dRnQmRU*)B+MT}b+OR^8 z%!>3O^abWB`p{=3mGE?cV6;HZ5F2rD**z`M*7N=7z%e=%F!Whk^tY5cpB>dQmxg6D zx$e%;C!k*k$eu-I(`#J`$#0R^gtmIKZdS!95%EeWZPjToYX^?Dacs2^C_B(t9VYrG zG@6V4ZatxP`W%UOIvCNr1tGOvAE7FXrzv@F{X{||#wat|NBey(w(e8SZYL`m;QU}J z=WAsTW59r9Xh!t2-`|`F@ugPTTP8^L!-;9d=IAh~IT}uxNFc46^u@r24+Nj!fvB>s zT^QFQ-mT|;cjgy1fG|wAQkb9eDH87 zxD&_g%{TLDlsPeTONflIoJKK6(_aO%1WAU9tSWh?yifHW9qEObipL)^f>v23Y?iy5 zWHmAtXXl`SPeua>%mj6!c zw^Bk{F{!@B=za{W=Uvg29wFz+>EYT691W1ffdZ}y5dc<-eYZi(aCq#;9@)6udhcB8g}Rk8L34w;|!=zfx=GnG-(E#^F?`D z+$zL`vi=G}ZIc~?s)@i1;Pyt~uUd_@@CA2>y6JTJCBjjRH)-K#u{JzMs`$(1BG$u? zRGB{I1LwX5t8#)WAs&^#XFL%{VvG&COO{VAHMdA7T>OVAyK+fld8^MC63^j5GkOI`YL!{FCFW*B) z$lP+S)hkDDu{ZQ$Z0gW;EH>O~NmHkr%94q&jB!NT!?CsT!51b>UnuQ`atD(OXWn_t z<(SMqMYXj+K%!(y6Qh_8;6yqoiugG`6p01nLkk>8K^$Lk19zpxK0Lkh#7s-+EFRUvejSJJ31F|lsc9EWFrxT+159dTo Sd=mYQz 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 QA1G`*UHx3vIVCg!0P_1^0ssI2 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_foreground_color_108.png b/src/main/resources/music/branding/mmt_orange/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..99d1b74213650efe6fd06a6dbb34a00ec778f3d2 GIT binary patch literal 1721 zcmaJ>=|3BY7B#JAd(NkGGTmJr6aZ=fDJdxhCr3Mv zBP9O4CuEN<4d*o?B_*5aWM_kl!>$VwoY6t*a$8Hq-i-GWcuC!u(U z3{?aGyn36-8*`tU4xnEtvH7r#*rn%7?Jtk)|8d%f%4YMABL=4kdL+V$d;^wS*+^XV zag)cT0!+Hq_Sh})a^r|LoV~AO)E-pP{Zj#qka5PQr=H zO2MmN+7tbcmDk&k;b3&%)x?JL3{$-pK*xGoY!jJ|eFv$ct@4k_vw;4hhre{+{@6!_ znweB74X+^w#;!n!3C;tbU5MyTpH8B;J-{&i()pD+qkP7=?h9tTfZen_7+ChKa`hP7 zz)7F0S2b7OfL%-De~PQLxI%V3{MB-C`Vp!Xk}TC47NNyE3oxTq56!zF_**a1HL4`C zg!~OlLz{LTNAA~wYyB`wea|zdM<3bB1(xsOv)4->P6-5~l^_^Uq_4L%&kpmgw8DuL z3}>UkEPY5MU0s#Rk^V8eV*i;frh?N(@_YwdnJiE&{srx-nf-dra2Q>Td0JQic1R1T z2%HA+4c~Ife0w^wzgejxXzhOdcrJx{UFN&5uiY);wf+U_MdPXDct@KtO$$@$2!0R0 z2pRpz_IV{Idn~};!T*{Ei5dFg6If(i#mPip2*%CK6`g09A=+MloEg8DrLLOH+3;Ua zaH6}AF-+n3J0x%$*;2DJfo-3{c@cRrytb~VGUuaBCPuWT3RFsXmENCu6aZ6k?sQE* zAgX(|VArARi8f7~`Z8q#6>%ekyqnjMqk2Y(%vJM59&}&USvny7M8$-S6rO&3uL;^C zYHOb!UL_AkR;lrl9GC}7paxKD8njhHe<{74R99i#g*JKI9G=i}&eOr|;ne8i8rb|w z-nN*M88|PN&srELZ{Jm!QjJV3`-ASIOewY|ZI&uL2&*yatNk)F^bFFB5OJH|c$W*UyeRE^%J~C)7m|7jW6o{D$)YM1FgNLi z_4mIdTWHiVoWI=>^MLpaK_$1l)#Y#{vQy2wh|@=#23Ea05%rvGJR6Pcb6hWI!Ohs1 z$zNFvA2hDp0WMBuv*d7?R~AemriG%3D`P?Td0Bh$eq^DSGPX1&%G*GCNJB7e4^;*4fyBUGcV>;}OHy*mmF|Z|3O~{V**}U2%?H}i$cZYxVlH`j69&$}oR%{WK$;LWk8eamC|NRG{#ON1o4$4E(uDWh=b z##=C01!6FX-luY}qg+7+Sq>-ftVVV!Pt#C=x(uWEq3MR5+#6p^b+U>|G>C8F!PWXk z6!Z)6aP0eDZ>l9o^Fju#IL7-(RldJowptyq64enz43w-rT6RhI!mwBN)Xd&ae^2ml z3b5*4mIr5Crq*wzMV`fK2s^U6dPJ{kzX8uZ*qrQn*$cN6>(-t*a(ue8&>v6?@|DIf z(#DmruDgMc|KPzbo`s_1)H!^tbAZ8HRned75eGi50#_G0HK&}v+8dgGi!=qA;Br)H8mJ^RTASA+ftCq zV;n!Lpa%_Ma7U6kG7<%zHvrEOno0!Sp<_R5^pWEUpf`-+3sqJ+-PP!HFqMDTqgYMl zD6BVKcGYA+D}~nMF2jOb!iu!I7~KR-sL?)f6z@s2{~TOpou}Pn;^F7xGcQ1ZB>D}p z(fXu=!LRa^lk-4c5+WcdwyT#Mk`&44y}FjkP|!Km8q7Z8pIc~t2(@1Ha4D@HWxLL1 z3>h0X+7B1Hhr7mg*l3_WxZ6S~tG{n@Gi$`}!%b7~+g;`OvpaU;i2tKBteBf?8?F8v zDmJ3GeD~iJyq*lGPEInAxpPw6mc74lO?Z_W1^Q1S#BM@=jFq|zo=|3&A+}*2EZNO0 zS|KH4Q4}`_xj literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/launcher/mipmap-mdpi/ic_launcher_release.png b/src/main/resources/music/branding/mmt_orange/launcher/mipmap-mdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..237498d330b5ccda402669b957929f845112c285 GIT binary patch literal 2393 zcmV-f38wamP)&ZbEi9k0xwhJOe@6Vgv!DQlU^qd1%$@*h1}e9HD5nP76wvc6`xxsuk*J zXKZx_5C)2rM>`G-9emXX2+~@pg`!{~Eei<=Aqm+$HoL#){QGcU$?k>#^~@aZ-MgFr zp6}l8e)qfg2mkM|Man@%_2~BvVc{knRs+yWcKA*m=?Z@wJPe8f6g-^8O%c|qiM)<1 zAcan{h4hiHll#d7H0T|cmxTcvK+zI6m%N9ZL6(xa-~#z)@>k>@8Y3ffM$QIMxZGkP zxtyG+wn4yQay9uJ4UxNLjhqai`1i9=N3*Sl!N(uS*XlcLLa46i=KQhh$g&Qn>M9O8ZCN$G4I2)nx$MooT1}I+NKSO@aYPh29(&O&2fYa;C$p!lgQ z6cIdD!?njHayHjPiV-O;MDh77o+RHb;st4WGNLU3>DIs^a#pySijZj{801eh)lGyY=0rP$3$- z^KkHj3(vmgz~3%}P@Uo!{o+m<@astZe^H3y|61le;viKBL`4eQf`gpS<{B^*E06iHDN~CNqC(ta2ajPtGnT_b;D(EgEy}Q zlS&#fztWB(y9>WLZ-bk?+fpYp9SRtgwnX=am;r1Y%i;%QGzCsTTSpIW7&ij*=FfxO zZf9pUj2t-G*0(T+y?%sw=wo*Ji-huB-IEi9=bN{}r6|N2(aw(6;gN2J0Vb@D9BCqy(%-dFv z#fJ_2;&jO3eXrWE_?2>;>t=WHGhv1>)7t^$8`1ly$riEJ~9P+K6oB4eaMfzJa*|YvHyaBuAuhK2q@ZZ_;I7lw07$ZkXC7q8IZ-| z&mEc#m)nh@Wu>s00T>LuR!97&Gspmt5JR{iZ2=V6GY@|R)}x|N&_S9(Z17+hhP4gs z|LZ>NeEv^ZaIgvs_PfyC!{H6sFv}Z++s?Ek3d(5@7UKw04Nsz7=^(8ERiZ!T>OtJo zE)Nce1MThY*tlT>?z&?!z*M82xzDMNUNm+Ab1H4Py}F5R!)b`a`EDl;F;8OZlnK)6 zS0&znhH!P@(C(~V`uOqV`1Z<2@U7+d4{KJh#+U9{ zh_6mCaAJ{x+p3N-;BcnR9+VhoEvlX%o-i3uHlFt4k4+{jvdf1KMKs4|K#&2g;c9wB zVn__uLS@L@$A!9N$$j|QQ)@79;$*Cv)Pk|@(+oqAANB=4&a~xWQ++L#9X04yX0mPR zAdRuXwhUk@A!R4YgZkVT^l*)Mbktifwqo7db-4YukK^^@^{5FC0weh>=KqY>9Vm$7C&4~)`4e5TG2GV#kqB)!kF{e;Etx&3?#V6I445!_I-|xr# zxgSGOaWRg*@dh4!^l|RCKjz7-4xWNMOMtSZtv&;XT8iLul)>$EBTwnK;Y7%m&o%17 zneKAzZ5)n={#k;bpJHCXlUbUBU0={O%R#!3HNUYxiyUZ1kbB7M)s~E=RzE&5hsoNg z5m>u%2U^dyV^~d@7q(z#fEg`lg zMBT_@*3{@#kgU8??*VefDpEHQ-BH(xBEbMbr+peBE02<8q+V)VOROaodD`P$CyEpU z1Rd3Agt9$t7LG9N7&yy?3W{S76&txR8fq3W-8p&^x>(y|Tp+42OG^7jBfm(FBL@TjCfAYMNT#glqVTLAq#{+^2|X+5hFPyuUm$-=zD+8}*Qh7N`u;GW4L!1B%MjfR6qB{&WO5RzS<(Ha z46<$x2p$3~!SZR1_G_fv@dPPX(f1Ob5+*ZYU>QjSkr|OOaxWRAY}Q3ey#BLCbipf% z=m;nyw5vuB<#Ll?E+d|d%Q7GyG)B*oK~W|@TZ>UbEoNGr*#Y=3A`bWZmXZ(#00000 LNkvXXu0mjf*3X9w literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_background_color_108.png b/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..a95aff113feca8206ec73eadb36b4a7d5805841f GIT binary patch literal 658 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$!2}rUz?b^k_z!d4};uumf=j|m!#sdaC2R5uR zDC0f&{Q1dKxHkx~Uu-6&wu^ dtcl?e>xpMf67!xE%>bq~22WQ%mvv4FO#s-r!g2rr literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_foreground_color_108.png b/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..9f350554aee0eb3f8bd79425c22878ba63d6f807 GIT binary patch literal 3801 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 b`T0mF*>R>^8y+<9Uor!TF&M4m`0D=vrX55Y literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xhdpi/ic_launcher_release.png b/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xhdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..fc779f3e8e48b371fc7f885d13b280ec05a97d45 GIT binary patch literal 5513 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 +`pKIS6+ArC8g6) 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 LNkvXXu0mjfWnqKo literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_background_color_108.png b/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..d6cec4cce33552f4813eaa20c70111056576f08e GIT binary patch literal 1024 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4kn<;g^mjo85o$4d%8G=RLpsM*^&2v0>gm= zhLU>%8tN-&L~OcnNAtz<XX9Pxt iN5f<^K@50qkdZB5`cTZDeGr(l89ZJ6T-G@yGywp-Kw-E5 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png b/src/main/resources/music/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..095244242cf7a8c084ff0e1f31fd7456e94ee32f GIT binary patch literal 6090 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%0D^ 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 PE&zS)TQ@&y+D7~jnlmve literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/monochrome/drawable/ic_app_icons_themed_youtube_music.xml b/src/main/resources/music/branding/mmt_orange/monochrome/drawable/ic_app_icons_themed_youtube_music.xml new file mode 100644 index 000000000..e1fdba50d --- /dev/null +++ b/src/main/resources/music/branding/mmt_orange/monochrome/drawable/ic_app_icons_themed_youtube_music.xml @@ -0,0 +1,13 @@ + + + diff --git a/src/main/resources/music/branding/mmt_orange/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/music/branding/mmt_orange/settings/drawable/revanced_extended_settings_key_icon.xml new file mode 100755 index 000000000..085386494 --- /dev/null +++ b/src/main/resources/music/branding/mmt_orange/settings/drawable/revanced_extended_settings_key_icon.xml @@ -0,0 +1,1038 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/music/branding/mmt_orange/splash/drawable-hdpi/action_bar_logo_release.png b/src/main/resources/music/branding/mmt_orange/splash/drawable-hdpi/action_bar_logo_release.png new file mode 100644 index 0000000000000000000000000000000000000000..3e8f95fe090a2ae368117c11433c4b7c90002a69 GIT binary patch literal 2637 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 LbyTXAU=jZV1^YFM literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/splash/drawable-large-hdpi/record.png b/src/main/resources/music/branding/mmt_orange/splash/drawable-large-hdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..1774b3356fa823607a60dc0119fd70c2b737c943 GIT binary patch literal 10328 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 rVcN@z*anOGNz8M~$ literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/splash/drawable-large-mdpi/record.png b/src/main/resources/music/branding/mmt_orange/splash/drawable-large-mdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..f8eb1993b47b8f7b322f1b24dd06842daf68c452 GIT binary patch literal 6411 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
0rb?Ce{G7U9C@{{n5zB=GWnyKd`;0Fro1|6 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 + + diff --git a/src/main/resources/music/branding/mmt_turquoise/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/music/branding/mmt_turquoise/settings/drawable/revanced_extended_settings_key_icon.xml new file mode 100755 index 000000000..473bd9c8b --- /dev/null +++ b/src/main/resources/music/branding/mmt_turquoise/settings/drawable/revanced_extended_settings_key_icon.xml @@ -0,0 +1,1038 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/music/branding/mmt_turquoise/splash/drawable-hdpi/action_bar_logo_release.png b/src/main/resources/music/branding/mmt_turquoise/splash/drawable-hdpi/action_bar_logo_release.png new file mode 100644 index 0000000000000000000000000000000000000000..522e9763bb0ae7d0861a0fc2cae837495f89e126 GIT binary patch literal 2772 zcmV;_3M=)AP)3n}K=n z&%NJW<_!rDAV7cs0Rja0KZUACzb3w7R!EpWE`l->sSkTBQlXL*)p(_r5Q!OsPSqC< z-epi<>UEk8`lhlr9S%=}ETEI1eSLa$F~PCZNiN;oTNYwc2@6VLM2cfndXzHSof0O1 zIYICeL1309MyNt4tD?+ugAj8uWyZ6VR2LM)&V$%HSPcSmmcZd%eEb0CK}*1-V?69w zMis4$)=P=cF&Z*Mp+O_Tm@eRh`s{-ZovBBAIq-|f4Pe$eQEAN9%9nPZPFPl>KIs+| z%;^iq5>U7`(-Il98uS(zg)PhLq!e%LWfuD_0ApTaMAL_xf){VQXjifQu0jN6z9kU- zM`p1)tN44fu3DdV5j5x}IDW`OhhUfc37GUH4?Snmr$qc>$o^Ml8n&DeO;2u&yQVmT zn?;GaR#Y0+eoOz$4LK>LF4ZeE2wTXndDtfRK+D0TEFQYg(DI$hgmv8@(~uDzW6Z;# zQP};A#ldp*f-`X$XL#N@cy?Iy+Cvm*GZ^|QD2At8C#7`Xe1*guhn558c+!JIwI-xS>r zF%MglK99(GvFXc2R+UbP;cGSRCxlL!TblbjHE4x53_`G*y$2>?x5Msdmjd0CgAwL} zVOphO8;&ae(3)@(U=YHWj40VNM@_ZBTL#&{!kq^uVIjB6iG(FJ=VHgt)+jZzDKXtu z(>_KdMlovr*rM%&)I>AhHVEkj!l^(O2&V>i$&a11O=LGy1*SiY1F&yf6NC1wiEPk( zdxM&2rXvip@ng_wFe#0PttrsWtoT4TZoF2hdktp0W;N{qG|-;BhlPer99Hs=Of|I9 zkp>}yK}W!(H$fs#wPYCl`=EfY39;N64b`ArO+N(Af=&0~`O5;UKY=2|a0OQHFuTWE z<}E~G5u)Bmy7=2jHPPV)Arfd6=yNcsRUfx;I)3^YjdC(oqttJL>3}syiNzqWhR+06 zHA7(kjMd7U;?L{Gk4A~~&+%Hhe27-QGYMXk4gY_m^_M&Xx*81{Bv|4y)P!{{_8uG^ z4$)qw7PJ)Bb6a_6pOn&^7c4YrvPQ0X=WP6oxYOX2gfDmK1lDtfLPFr;u(7&38O8aL zK7YXNvBUp50sQJ@gKT^PdKHYS;-U9QDc!q3rcv*ksV0aQe|M0H$o@6DQ1^oqozcbY zF%yK-0o=j#DtWQb{wb#E-!mj;=Ka(yL})q@)A5n73_@_DZaX=}6tHl|N3Km~2R-J*v&eO1%J;X!z8CrU9vn)i-S3{SeU1sb~~W#$ThGpGnO8qCS&p=T(h-+V?iG49kK{B2mv75kGxxM4mL%yC** z+QZ1=?NEEdpmey?dMNzJ)dIUy?hgjt1U(PN;0BtWr#xfM$%&zQ>5*;Fdh9M&oP#aS zd?7z}VWqDP+6hVlV|Me3W(xv)6QAWV1*#`+E+C+dKvh5h22DAa9#vtvwBlR$(h|rXvli2H}i& zHpt;!9QYxjnf5(rp<&P9tth@jAsVG&RiQ4kLQPodD1&gBFanJEh=;97KleuD(6U2Y zj6$~^glM~|X`dmmrq7eEJoCO9HsfuB@T&`WOYuZ7=ZZCBhqU6IX_cW*_C@3%qF%R{b$x%sU{vSDaQtG)ZL#RyK+;hZP$9xSIAMlt|2U zznigg+UdC2*VSYTyk*cv(34<{!yB|mUijp3y>RrXg+{GVsHE|2t3j~kSY%nKn{zmE z`Z=C!ji(0T4&O8|=4YV$JY^q?pzSJCDZ%@_+8wMdr&hzNGl~XJ!sU)bJUQE4ARNA} zQ*vjVjmtRQ)qG>PhBcL{DW5@!;aZSfIX++aJYGYaxML8ul!ai-RM0m()jp0SWR`Vr zIx||M+|T9{>&_h3@xAaHK#jXX z3yoY2ONH<7lkcdSWc%BuN{v$goBY`4wpi2c1Y1yhzHo-`fS+{YZlA~IAo;PAvZKs} ziIm)12Pa?4-@=?bfq z3wBrs7C3Q*5y8Z$;FscX0EBEFE2oNAZfB*pk1o&Tu akpBR~o8E@2^&3k700008 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/splash/drawable-hdpi/record.png b/src/main/resources/music/branding/mmt_turquoise/splash/drawable-hdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..c459f1c5f7622a28bdf0a8656e00c6ee02343b9b GIT binary patch literal 6831 zcma)Bi&~O{}J(ne>`E@{t*riqmLR? zQQyz@Akx4yu=;C<1LY8DuF=u z0{M-p1Y%3Ht9gqFsfh^`Z-Ma&Y^C<&6RY=6Wx7;3!`BX6d?Y%o)FgTPMkVlx6s)4w%91*2>u*i4*sf^R*6g#nKuI})Q_sl z%+k~sS?oB~fd<)BCDl#8bW?^xb$f5jb${H}GZM6t9`~oxyg{HMVc{J}e%+jr!Z3jm z?Q3_2?C&k*u#PB-=dKhTb%G|gdFAEVZ%kYj4HifxH&DDZiZC@3~=b!f5Vwct5T55rjq(EwUeo3B5( zkxzm9gb?NeE?9xKk=4|AKW5K4hh0PJw9EL8_zhIS)w7isiCKh|mRlB;uX_ea$g$6W zv}L5JbL;?=|BEsM0hr+#{_EUN?t9mZREN%qqiVPT92<~^<~WRg$b(!0$Z8RYiL%G1 z+b6XWWd$eoG~yNSdGoQ6=&e0zC5A!H03cfpCWkHYofk&NU;jHzfO0`j} zpGBu@X?uf@QjON{{Tx2q;{1$7M5N2Yw+Pio}Ydj#7uIy$r0nbSZP&?2+apn zA*CRW+=)DvYA*p7kN|^{>&M^e`?n&etxQ;{50O>HpWB6zPlu2598Qx=dk0p>| z5~4Y7)#@gc07ZdQ2l3nMILaT907hsQ&v2D(O(hAo@+m^j_*0FS6`Q;736+O?y5#cH z9We{6v?%+C{S<5bXDqj0@R=wf=4Bv`$b`13v0CaC`9tco2Q(4w<;5fzOcBuHtCrwe zfo|{a9ak``dEM1M5v{ejd3#t{fb8`)P9W~V1{<_uk452!O|VbjbEhXWe9)D~ z5-05T=~fl7Vibr}f1H(1_fD^)N-y+O>Ny#yFx}@X>robMhkjlxPOL|lp*UTS?-VO< zvjj%TdxfIL?3+W>rEiN<_Q%?!Z1KE}O|G%mISqDg@_4^3y-zCaIh zyEb2z`xq;!D#@s$lm+DoLVdgO8xJprO6z|$2ha393H{Yi9DCZ+7rCYLBKQ~={R&7< z=`eJByv~KXzRs&(e>YQV<_LG#CnS|nTIC!L_WLce@;T1GYVIOn<7QxUi& zT4&r>x;woG+I6^BZ>%!8?<*gddJ^t6Wz5yiKiT8s_;b*#$8GIclY3F}5ZU|SWE#)8 zq+>5euH*DE#OeAEO}QPA_3qj{$R2Np&2V(2q$~6^CF3#Kd8aprIUZE_>;>Kp71S?$ zgvM66w$L|Q*rGZIof_GJZH25WM8N#4{&eFBhd3CU+fnO9_>t610<_ zCU;&3d!h?Ejkz?7s*rHYB5P)S2O344>FgQTrHZ+pqau+A94cng0FnbS;Fdp2N^PvJQ_bc`^RFp(6TsQNpKt zHc_5cCCjS^F-B49e`wbJ$Or45F64WhN8H-5plQD9ExLMR2xaJ2HI4s}wF7fYTV4Fb zYi0cInK`HOLvQxZWbWZtcq0x}$NEROW+aqfaO%LaxwFH)Gi`p}+{Gi3o4hSPG*7+p zi5zO7<-1ee-b1GhmiGPNr+C+u1c4OfCG1Cag~3emERiy)U- z)!Ndq+5ACCUw@B^r9(;Ov`_c^WO8q02$%952OaCZ`rQ_!wNCh@+w7+A&+S_@71+=%!D`IO9DJljoTjgrfbD!{Ule8#k%7+s^Vw5!_4^WEE5&HakKN({%~;ZRrMU0AXYzYi}x152DPB(J)d9&^K@Xczf(AW>i!8uFBI@iFVrD zqS+{C5;1R`=q&Mtv^W9XrYD;XcUyw|Nz5Pe_ZW05m0wX6rTnl)FgUdvk`*A$-cSmO z`35ZWp?t~~pj$KrxvEaf?8@VYBnQ7B6tqhW-&(*DBn^*MMvRkW-4l(hj|g!Jo3 zD6%{Z=uM+M-A(9A>U7EwZ|%f*C@0#iHndVN)aQ}WK1j{jc`Gev^7gVPq2bMrfs^)E zNc~Jy?1G00SMkcV%i-Uz6!mk@U(vBe@ToOKHYxq9jxVh=-&m4e*WW(BRPo+F!#@9c zVPdh`a%&#VZ81UCF=NSY=zp1JvUVS>v9C3YCXC%2i=;;u;Ii9_mc^FauW#Gy&%Ps# zOs1kBW+HN6uZdo9{XRBP*cl)l&BC}RWzA;ocED#X-#>_++=;Vp>N1yn((1SWORA$( zr?@xygUE;Itk0liT-?!>V* zb*|q&DIO9SkXM+Dg`l{{w)>IB+jwMo0?3BQw`qonKwg__k6&Den-Ry#ilozF%XQXF zxqyb`Jp2pXSPwaHfiNT0_wx0gyssZKwvrZ0CA)kvZb^~a z)oJT-J0T2G`7?pYh22M}fAcq98#ANGEzdg1PkzXNVTG0uZ{3&-4J107o|D@BXE zxpRvtk4I)%U98EqNj5(WpIJ1|l4x`cZ5w*Xi+Lvu6gXVE148yhK$JoA`JcP&+o*md zCPksd0Y)(dtT;7!l5qfGal1$h0*K&Je5=^I@feyE(_DEC)t0OJ*i!0L1O1mif7c>U z3N`P92x4#U%~3z60uzmp#l<}6$#3J|7+OQN(jgi(nc&7k zh#ZuSG^ue^X+JP0bM@+jH36mvoT3)qyVMH26R_{q^{0{u!xA8`t^&QFn3W5oI(;zy@u~ zc>|ulaSq;yHMlNtV6gxuI*RSu|Hs%;3xL)_mn@XHfP z2WEO}hpLx$c*`dOT*-LuC$+*#uepUSjM9~e`f&<-Oeg-cXMVq&*Vgc5Pp)^ekF7Mq z*nFA$$5UqhIdbLs24w|VvXwpQreuI{%Y48XLR0RV|2z-rRqn&~hSr0+>$E@5fZp!` z!W%xYSRJW8*c$$j2`5oCesG8oEUhE_^xOEH$#USpw>KG~T6D5j?^y>oqGMkZmRQZ$ zgETRgrB`RqKWfrDUfB)A;MipSOI!h@F_jg)e*<6F9)UjCK~bI&khJG{~Ra#Ys8vWRrlCfATl6) z;jo9TH!MY<&Inwr)%e5Dd=uEaNB=Swf-tP#R~zfViL{qNzh>+8H=RM0?)Hf=U*|+> zv3k{7@#@7+`lFgf;sL@^I`1MCg5;fH`1ms^)sI+bKUT(wT_b&oZe;{N+B>BJ8r%+u zx>%xO7LGh8U%NbT$(4*}V7uPBq+j^B!~ObDUCW{`W}Vir9F7e+^@9+kiCTBQIP4U1s1r!<*xG%1u~rRe=}-|; zxJMI9fTJXt1pl&g;&fuJ&#H9w54_(+#I=9J6f*Nx#U=@jWe}g-If*eg4b4ZGCyXf}S7)1$l`AiO z?L{D*z?JY@XvW5C-|KSpzb0H8O^IxPH@*;1rt3MS)3Wrn+~87~Y>e}BX%XpPZzrQ_ zI1a3$e3X0;)D%+ah3khpquDhjB9r44RT`V)7cY>Mp)>=2O`k+`lo8rigT&t zVncZ2W7VMpJwMZ*PX88JBe$%XyR1j91xl}CfZNh8UaZ+hjzY$rPY+4VOX`_!n^{$> zTI^PbRc9Y2iaR1>?fNTs@k6A&?*ntYlJ6>(JUstM!^Tho{=+?XVTC7>~P5;fzl&kzb`f?3kAcC;fpw!KjH%8h^^lsV|GuRk?&LGWP51>DnXBYKM~2FF)U! zt+2dl7e+lA&Qpnd0yEQ!zOPS>t_WXtwKXS9_%{=N2GrLuCTWIkgl)a`Uwg}G)%LrL zeP~grUMdPPg`R!d%o}72T?I0*u6@H6~t7Os7Ug{f)Hx8$pdhM#-j@ z1=1yG%Tedo)u#@#PoFV;EgRx_n$k(b5QRK!$O9L;SnYGah*ICXvXhVdZ86NYrz5Sj zGvRNm!PCm6#77um>K{T_Z04DWWWd9U8E^m+@!XY|7(>{DlJpsx*N0_ev2U*+Rc^RtoY(o3PJqX03rbT^+@LBoYofv_# zGZ3k!>h44GP~`hK8Uh4nwAO9zmc>5lJHH=2`j)Mmwbk~RY()xgk^0EBS1Fg`<*yBU zajDkG=f|Rrd@+{SWh>q~udv#s%Ki5dHY(30PtM28{OoP?3(vKRx#+F>g@M*DeJ(fZ z0|)kxb5#?3lKs% zVf~nX4;>T96Y{YT|JW6Ax1qweHuE5FoE^(_-GEAOwWC&VDpqO|JQSz}UDHX5s?Zqz zdbVaXZ2vvv&jg9a^`#JdvB23{|M(C+I6cd_BhQC3@Ze(zWq#Ylm{p=B;f^?k5cn4M zZ9r8cEuP%IT8g7Ux=$U@PWw<^ylX!ZAP5KDWq zbuJ}GAwNq_Z_k{=stS#`GR>yFwN&??Xv6sw82-9ETXjr*B#T+<1+5nz?vQ<^M)Jy! zwaf25jPL|35KeqdfX26mD+Y!7$+EN6+#oXIu`8s~{R!|4tdLnc7x3faSoXv^|5UpjfEmm9xr1$5?CK|bZsUF5 z%XV6x?yE=<#;yz%5DhMjc^?fgMR#Q0dsI%3y?n*#^Q#X}X2st%3DnKwmS=fm{z-!D zrfLM0#!z?0X+9|27h%H#H!b+!Asn#QEfTn+w=2LYojm@PXzK9OcocJ>k8`F7u68}4 zk`!bUPx!zg$|C4X#Vy8!v&r?j>sV?=mRyOa%5&NRB?2E8`#i6ap<+7L?SwGITTp%R zcVhGoTeojZNh89SLBzg7FzbL?k9(9BUc7kc$m~G*5c+JWoH=*xCpybst{0U?CGouo z=harcp80?OGb}5b0LWTCAS}+{|JbUi+Orp(-|NnE-?n-L{un(llEgP1j%}Eu5+Pgu^Ye?6^Zs%adWC^+u+nl9!BS36weYbg zojKnEbUq#JziTjUZopcEb8@uZ*%{7~67oGFiD--AVzs4t#`Th%AhGMDBxwoD3`|-`o!?E!#wsvz~ zyGe10X)|ZNDd--PtwD&N0!t%`z+KgG)?BtDPuUvTDtI19z^rYGCEpH*2r$Ol z!~@W1WNe9nnH;FXRKfg}10C^SQOYFcL@J8gkCYYPE2T>%Cfq+>_c<`sAB`|=)zD3; z_sIJ3NX@`q$YREeBSh}~4}Dx)z|E@$XIYB-eu@W%9l0&GJKSQK=&C<{C6Jab^|Hm} zrYyg>N?yJu@I%d5SbtK&1P9{=_I`9FlrCu7V9Uy38lldRnm+qh*|Cvd|Fg*W&=rNo z!kXM8hO}C-bbHW4j-fBXvl1raX|_KOB)y`Tp=Z^Wb1MnK`77z=e-^ z`fKspm$NUdR2!ubQ)*E2mr7Lw#Zus?LKv8#^|vsPhgX-7g#UP;%YwG|1VtUf1w{g_V4$&l&@2Di@Z!4{{c}rYA`M6XC>>1 F{{dpnGiLw* literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/splash/drawable-large-hdpi/record.png b/src/main/resources/music/branding/mmt_turquoise/splash/drawable-large-hdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..920b49c0631771fec71bc5b0167e94c3ffadec06 GIT binary patch literal 11369 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 bydfli>N*F^J&*tULi|oqPEEE>1{nH(vU@3> literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/splash/drawable-large-mdpi/record.png b/src/main/resources/music/branding/mmt_turquoise/splash/drawable-large-mdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..7076ceee6a1508169d154d128c75da94ea60d90f GIT binary patch literal 6932 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 BWAy+4 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/splash/drawable-large-xhdpi/record.png b/src/main/resources/music/branding/mmt_turquoise/splash/drawable-large-xhdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..92a28562cfc99d5249d02d5b0ae73230c69e96c8 GIT binary patch literal 11465 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/splash/drawable-xhdpi/record.png b/src/main/resources/music/branding/mmt_turquoise/splash/drawable-xhdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..833f1a0b460a89e5942c571b5659a037acd7256d GIT binary patch literal 9761 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..2e20c32132a63c4c87e6e0de4a052f01f6ccef5a GIT binary patch literal 4440 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 PCU{zEI;yoQ)=~chi+*0z literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..62d5f84031fa4146f9078ee28c8ada4a918042f7 GIT binary patch literal 4046 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 AJOBUy literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-hdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..af317f314de39877860d1f776eae48d4ad478cb5 GIT binary patch literal 4646 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 UQHUJ)$A3r+bWI=EK5|a@KlRT5(f|Me literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-mdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-mdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a6af8bd4868a36b871a4ea8fb32515d9c8c65366 GIT binary patch literal 2556 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 WU_K3o%{9~j00003H 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-xhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-xhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..eb45846298874d6c115cd9bd63316bafc8b62af7 GIT binary patch literal 6021 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-xhdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-xhdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..841821ed5af885dffdee71edd0028dee088efee3 GIT binary patch literal 5530 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 U($h!xe@JlN%BjefNE`e94^koRzyJUM literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b6ff22f83e37616110588e8d2d3a06e921f5f3 GIT binary patch literal 9689 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

l*wToBs zs;fKzm2d0g#VW$;)1{~SN{{pSyUbrAcW@u@%EhSO4>f)9ZEntV0D9LS>*aXbXG9Q< z1^n{v6Cc1pIz4Wn5}TcI9APU58< zqbUYxsc=F|SM8+@i;7QkfyW+O5k!=2D%92^MrDY-Z=WELa~IBfrSoFPAb;z(uFImxfX$TjJ+E&*8}=XChW#6^^Dx)+mf&9y-Ovm-6)7yg$yf?vZP0AT}dZO3PG z)p6=>iSvi@ydolJwkX`>imI|Q1b=Q6iRbeI2oKX}wNXYF8O>C3+fy(jqY!8Q&R+go zrJ@YsetnvUKcu-+^rkO^CWkyYVzfnay(8XBukjp;i7WiMQh#9^5?c-tx2P2K$i1wW z^dR$nnF`%vX-p!)ng++$`gYxN6@V&VeDz##wEXI?7$w|2%+Fpaiq=UT+1Lyej?zfe z#{4ycS}&6s1W8c2j&)q5#rw&!(8vCi-Rqs~qPI$Srmm0l7mfEWyK5iTE*v}c1VP1;!jqqmG<{yT`suYN-;!AGvtO;Wd#r_vXmSRj-yjlf&og zaQy zYSnDsz`#YX_VVjAmJ+tN%*@g|5-5cld9(nma zxe|Jt)Cv=b*qg7%XwJRqe+heCjn8*Qs*s3oO+Vxh?07fYq$j1K2jK3t*4?MKb+u9A_04xvEWnlLao1R={#-sYFzAIqZt^fupdt zM7wYTO*=rXV8DB8514_49Sp3M1+|5m~pi6Hg=h-3@Rg zj?ifr-g~Z4*Qho@exIVBR$U{cwqK1c7e9>b`K@22VsXoayg%`xN;&>p!xv3}EG}y# z3y|r-PFYYT?XiPrGqAhaNKN!I?juHND>LR`uDO@L0*%9a@9yckY%8t#(oSd&8x34j ze46B~i-g*h+7ZiN{#3RC64-ET3`|pbj#gsmPP4WrvrXq0< zktAbJy%nF6o>hPE_-GsX(#Ft66d&E}oz7Y4b>&Xo0&^CR{Vg>;X zDesM1q%J(Xymsaai;gLj1@lfqdKNCKZ12kRPne0ylA`#rY+(<0y^NN-ySx7Wr5AvN zYwIU{+~q;yXTzOu`cy`oXp76BuV-c3E7`tzPwio~l^*Fr4=R%a;fHnU(}y`7Y4f$; zzS?E$WaYkjv5@D~<;&IFVUTmsST_++MVw!UL{5f%)FCA`VX?Im03mKF|HTh)RqNhb zQ%bSSE_>SHWN7g8o->=sI=NZ}Ke5OKsSH^V8_PPL6;~TM|w96qi}$pM$2Q<@N2dDP2}?qsT>s*1(*vN;!*=Pu&rP z8<|BJ7M+Oy_Ic=2=9E(*zyKLn#hFi^cnnj1xNKdLo)3h{&%3$=`SCC`)B7YPB>}`L zwCXqgHZe}%l8d=&V$vhkCAn@lGC;dIsNxyGvVz- z8te$3MQ;1<0!|GAw$$ z=@Qs+DFo81ZxW5M9;>oOlx9(vv5<}7R{fFlNA_o96uL$cY#_ymYIeh!Nd$t?&$|u# zAuKTpNqH{|E!~ z8=7gLz6L#l%cV~qJxlmoq-F|kG!6sjX??bvnv1vIOC7iopfy@T#|Ooz{oeF_+GYC@ zP91-aMFFwNsqRZTX(adk*GC84MfTaK0aAur0Rcmy;}myQ@&80dHcU}HsAz(s1wbm(_0k3!tz(%p|_HoHIHTJIj_Y3gJJ zWz0K~jncFquzxBedCaMSKytFijfMn|uXA4+bgrCO4%)>|e{gD2>e$A;;~DEGrY9sM zl;%8PaG58hNvIo&#+Acc{6RB(rC4-S2)UWTXe2p1na_}gFj{$cKAT!5rxO|#>kmIaKfME1QW2#66{ zWtZsWwoOgU!+t|^)r^$u7JZ^_0{ZePj%AgUoSA|%`wOZ&z$Ihlq@UD2#N?DR89aq4 z@mPBRPYhlS;NF6C4g9trA`0tW9&NyX{n$@sZXtVNWNw>jATi}3xapw06-u~BDHh@z zQG)E5g>a7`m7f@1(@cdl(al!#{5{mmEY4_ijatCg&f~fLO7Gn0S%8v z?$8PI>#{e*x|kcd(})-je;vBC8-DZObp&bVG0WdEmw@SqO0|}Cs4sM#%LSqvu~PsrYhZtl(xPdgu~&C zQa;PO?by@<6ZR75FQdOiBOFA=WP6dTtG$89X1g^{%7CiKw=#|yvlD3h41XcN?Qap8 z#oC63>tx8uGg;P7n#DiThOPH9Xd$MRr3~V+kx1lTvzxxtgjyBKmwtHBR zw~`OD(hPCcuGccZ8xJ1OX@}P#D<@JkR8;Z@1i)0r5WT(I;gH7WzvF+C&-A;*)KOIf z)3@RoWGutaxYywUYsn99>BNTi{iRW(Z_l!pf>5zLibINLC#Y7Jvjf=gU%eZHQ!|L} zt*_#h!<8(abTgT=?@B=j&)yNn%OKT24=d;R02^Q5X18n-f>=2vC8bvhnf}7jb!W}o<7-8$i>4G5dbQo%=mo}uQ9gODxoQ>d0>=5fKV23v zLYBRwVEyu^f0U`E<-zBsCUgL^iHS*eN5|6$eSKm|XUL zRR%Arg00LHRvE=Vz8AG8WOuBntKm!MC+EilI>X=yGt_G%*!RRN532Z>u>a8xQy6qW z`LG(JS?s;#w%+Ny{;vktDUqrm*$96OLSaST`oH-YfPti%JCS^AJS-XhD4#P~kji)W zU~|l*(q4(NffF@BLuKb}ldnp7McbS>e-(mpNI#lVX%M8Q(gK_@>_c*K)+9Qdp~2sO zY7ZR$UY4<;hA+xhI~6;QtwR|s?IWgT!h-i(N?l=flW&uV9Vm$VKh`2WmGLzVXh-5x zVB!S;qFpb!{hyX3MSE+Qwvl2TpY8^|ICnyGbpZso7HBwtc%wxcds7B{VzxxsLmC>=(D$^gf$Hw)KdunbCS z03{otx0W<>h+-yS5${Q5Hz}5ui4txEJ_qbgG6o2V&rXjcVtDba%v!M*cDOJJ{IkheIbU;udJLSxK(V0Y9`Veq}(=8z~Ztuv}wj{lg zH;T}v!CVECmT(E+MPUuWs294!NEyp`2c_+ua5DAq1Je|Q%f=~yJ*REC#f|cBsC3<|$Can`^OboaGsU!ZA_D#YfywG%lcBQ+A zLRMW5r&O_?4*3uO34A1(&e`|H1#p%Jdj{D3H<6+bK32#vF! zskpy}qi@dh+m?TpwMDPSTn)FO3EuERp7umvyd#COln`~@YeZgCo0sM>*(%Lp@yqzI zC6k(>#=hMhBm;3oUN^BUMJF%i*EmU6t4c_zHZ?3xJiZjh!wL0lLp_~7RV8Ln2I~K} zYFwx&o_>stJm;&HN)gCgh%8WgoVy4uZ@5C%DD09;yILhD)KEQ-9*>2Z05{^i#KG@3 z{Zx>Igm5^+8(h(E+7i`*lY49+dlE-(YG_2}C5cEokmE#uP54oYdnArwPL>l_wYet8 z53dRL*ZZhyZ!+3B$D{|G9ww}A3&Q3jab2&`_7LB9gcLM$ch~A~o6Bvr#n_#i0ZEfI zeo3owvERG^y*|sJb)J)eOIdD$^w$txqFT)DEoN6PXHci|*w!U{UHc*akG2tzbN9nS zn{=nMeCku@Y0KzYV@f=OLT)=54Wt)aq%WnknN?sK`+dp~gFYBh0j@Y}efb3N*>1IF zX9x`w;Qv|b+X)YaE!AkaM`3yp0%1jjk$f!<-j0ffjh#n5x2J9*BqI4)9leg#Qnfr? zg9@xQ>l$s*wdfH$%I|&G)%D12=@#%AEwE8e*`ie!PR$hvp6_iK9_+4kLz-T<#-;TBRI>&}_U*w(4yXUN|~F}V>Z%Z=?2uEg)g$MK~K;~Ix>VBIaPDSMdYn$au`UjN0XFi z1-}?X`K{ysd(VRnjnBLc?W^B{KJ6$A1gK2Wiqt&}sZ`VV>X{YT#xO*JaZ@!GE{q62 z&MEG#ZVMebbJlTI%1H;66&0l`?<;L0X=0POeqs!UyDM4B-(C~Gp37zNp6k7EVD-RV zWZ$mKW!U~scV(a+)p|{T-y>bZAv=2VS;x&Gnr!y+ zR&J%T#x0>)I5f)FSe>rJ<`^&=e4wXM{jN))fpPGe;pYeU@-*8?+Ccz+Om&#y_&X?NDE6~- zBE8l-$$a5K4{3Xz&4a4Z)LSg04A)T_j8h}FCf4G7qS^+qE@){%3}hE_mHpsi@6rGD zpulB5kg(w((1H04Mgg&kH&*Tgm~#ZW%;vP@RP+*jIhMxRMDA5TV%w)1Uhg+xu0I$L ze-XGjOE%-9m-dU7dSA%X->_s|hK7G`!TaJDy8lJJV1UI?JXKupWF$V?!rv37ase`I zh0Pq6*=EZ^Y!N5;kgr4dg2xl0(tI70S-(k-o3&_Th{MHFd)8@|e8)6E+qv1l<9Oq! zqu6qKY}Uo;T7=mQAN2mF$x?s<-83i-LWqy-6JH@l>5P~xQw-hDqBdCvsrT}=quLt0 z&kr$;XeW~%sUjmc;+=zbigoarn?%sj5IM|HL$ME-FoY?mSN2?}4qn>>gx9&~$M|!C z%yH}D9k2ZmrNb0~qj#P0HMNeDtrhL9N%qy^u~h5Oj)Ss65Xb;QE)x$-q(NEFUsjpP zz7nkqa+dpD{r;DHik*bb!kRx!QbKXspZR*>>9>KHZL`B->-=@3DsQwi-ibFJ6~;gQmO5r$Y(%iO53LIMxB=}hSiXrQ&Gg@F00h{yU-VR+AU zka4)VnCYftN5w1_|MW?Pqf?d;1QVGs1+5TzLlyHV20!zuxGF&M3W?2aQYPOb6V4O) zUfe%YN6iO1KxbHwmZKckTjY2uM$uT0G2{C?Gm&fY@J^#ofaqMNpU-MuI7zDK;Xbt%f;I*~;w6 z805v66+QPFyhdsN>j$V8jH$AnSns#R+xi);&d<OLv4(9Fkm}ZWZkqjh9>Xo%MaeE zLF7-5@Rw*w-Sk*E5{go}TIiO796E&SY9zHWrXM~V93R*D3aDhn3Vg}_y^=6>F$ir3r0X8XL!%d`)w5$1qei+2Dk-k1rScpbf7 z?)F-O9|5noF1{_1xk*%Zok)}Q;zZ9*R8jY|kh*8@2VRyaMoo#~kAB_Yabn{*%1v#D zbc(*%(n=6lHJNR-J zE7&{_J#jK>@N(ZLKka@|j4(@Sx!Tl8wB)H56&$f0Tt+LCNX^&6h#?BjS8Yw1juP4C zAgNKNcZH1xohOnb-x1z_?M;MDR6e(#ep_#0#`#g$VS6C(ouoMQAIi@a7wj8Qi}CF5 zeZGhCc{atYp^(cZbJN&FZ>%jeVIM)Q&0E~IH~f&;R8;H7Fo3HS~Tq*Zp9bt6BELwGsOvoWHt6`FqO6Y2L$`!`n(wA*Wb@p z=xetq{c1zAZighV$93>*#=4C$VFP8GNGeB^pwwSsOF7wxtiCYdK%{qovODYkJdx${ zhC*K2J`xZCg#{Sd)KO+sDIAHwLF_b%%*%(kijHQ|ub3l^rtgKO4CQC^h27mDYIQjA z!DH)Cp*Mr39I)AzW;A_UD@SKPQJrr?Y)E?iv6kx>XSwvIEp-5uxK^;1C*@)?PP$Kr zN2z2dA0Z=!eq2iBP5=7VzM~=*f5))2WTNA|2N3pv%Wc|;=H)jco^L;Mv1x&k31jO9OBQL*75A$r z7FR9QgR8iq*`4>5G;3Kif?S|2X+sP4S;GBG16vW|{Rn53!zH&Zy+1_F{78Q-nnIr_ z__zFpq3Mp&c9n~VTp&WVb9j9GTm?HScjf`W`CdKqw-S~Ln0k); z+ynJD!$&?w^c<_rpHXjVTILk@*ZGpTj7N$7MipySk!xF70Rmx5TD)H3lbJ&lQq=nt zj)Ajpo9#_i&|OF=`5A%%-(qq@VeVLmLnY!S2umj7790Ss(78l$9C`V1*2+SdSn>gNVKuek*1oj6we7N3$+64HGJ-CyR(qPg7WEQDp_{DtOLq$Ey=UF_*% z9Q!XyWZ@dNTD#gcV!!7l)-txU!{oX)^u7_a_7|`zV~?$C5)Ut12yb zR)P}wv?qS>4!mx^FH76jp6**7Yy?`i&!UWAPxbBKHd#6Z^`(P2a!=PU8wzZ=hu~st zvJ@ghi0R<%!J7dtTL`%J$APjw^>+ODY`4imFQLBTIXKQ znf@ukQBv3Xl_k!pF|t#w>mogJ=v>o*ty@j6BeqPE&aRR)9M?PH8uKz5FF}JtQJ5@( zYOo3_g)VgY17oPsn*TzG@1^(~en5)v{oUZJ?x7*<-M{QQOHVsIw=3B?1v*Bsjst@8kVEGCo6cvhz*PGe zaWeOF>xQ2c!5&?SRq@Z^Ypz=<@Mf1Lzs`}=DYtS(uJe#0kv)5^KWE^0GvQj4wlLcz zPeD?3HaVM>zHzJXBBZvT`4+3dyw7xt!{7(U^#O+t`{9R-c8)`BU1stnuQ>ujXCv`& zQB>Faiig;FCw*C4Y|16C53%Ns@(0Xhz2w(rgj}-ft19@h%ixp@R;n{s%MMcGK3(fv z#yaH|VDKVF6frdU9(N>ZrYCivLvR^c7bHE-5`uo#arDFGU)~6}&lENDLX|u>k!yDr z#m%?R?FUz}I+0&}tsRS*;(}CP(hu+HXG;!@zkN1UG0@Dt$i{icazdyU!rCEGDssKx z>asy#zFC!!9(^IGAa#3twik(ct5w%Mo{`;5StK_-bCv89b2nJuefy=kK+1b-#mwv2 zR^ADK_FK>?RiF?U`lc;oo=LG%0V$pO*_VES!9IgiEM=W2pDnALn^jn;(S4W6Ub{Sb zA5yRD?=@TSE*m5AU`B_XYC&5}&@LlO9sb!x3fGaTzO=P;QRi350lkJ;c~Wd?Q@*sB z@dKG=AA5gJa3@xLHCNQh%oc@yx;d==1G+YG!e3m0j}ju~OTgZXO4+mdEg4Wbvq`1s@&C+{LHITo0zt$Z7R;EwSd)8rbQ7 z>hwbBguNP&mc{7vI>xYA{dPFc!;@;$5#QeF6qBiy8rrTuyFc&sQszbg$>lr;`Z}MF z-P#H1Y$4v#w*ICG`jiZVnRi(Qob@xh?A}DVY**_uG#yJ;e&jc1pXZPUQ>nc(ugp*c zm-=-XI?AOtH#q(_sQ=xv(44RBZLJA3vif3=OE#7iDR5-*W666D0T7z@6o_kyx8)>GFgJD^j@3Cuua%%(mjf>O0eKp>zzoqZa?rsPU3tqs!;l%Wb-Vec zWPx*GR8foRX;YWGU_NdSzk-WYmN(9P*&AoN{c{ZdB;rkFmx^{BFrn$!slc|=$Jl45 z_oeh`B976=SHcq(*49eBSB@6lXXTp%#pP*$@~0ZNLs6N0cpc?5gAz4Gt+M~Pe=Bh) zpK$b5#@qWrW&67U*_g_FC%m6>PRk#Rt8Xdb$e~|s6)K9>tfdLLSU=rD!iq7gB5sD) zKVZ`+-R&4#p<00Ewzq*14-Q_dx1<~SDZTyY0bWv=cX5fsx3@0qKO8r9)eBq{a$Fst z0$-VFbg^x&riV=W_WAg7?2y!;{ejVkKo%}n-^zl>kLCNQzb{5jWq=&5lNaAUR z(R=-Y;{3r@`uABGAFJfG2R^o>_Xn2L#OJk$P3r%GP%(%bE~tww*Xw(`k_@L4Ii3+L znSH4><;H)lRxKz~0#I?!7HLwnTluh%^s>73yIeZ#OS?;Te~4)>0#q}AYel&c{j<&x z<6N|r2>cqyNA2IR!5MC3Xi|75T`E%Uk0ZNu_58-Bg8#gO*YWaG^11(+tJh73PyS3R z2GDfosuCTh44_D@!fZ`HP-{4J)Xq+#KQ9jNpG<4n7`QIB7@c<6jhg4)Eyrgr5F0*z#r^?NR>AQT3%WSk(JvLap|m{lkuP zN*jXkuX1Cy@BJYQ0&ApyBt143dv~eyXX-IiiqF$cV3zkDu+pO2W4utj+2Q9NTGI-2 zq0TVQBHZC6kJDfp2G+)D9-Yfsuz}avJj-s1&i>|a|6x;fOvxr7&X+jQV!~C`_+9<5 zPG9{c#*o9@8gz+}K(-4uXB&FMrM=fhDWKw>*IlwHxRv}7y54x+;0F7|>{!-h90u#S z&Vi==!uL2_)S=G)m-TR-dn}bu?7XcrxSczkrqrvN41+YQG+vUkv|tJY9UW84V-K!a zvU={U2?rTg{m)kJ9yiazP?(num|M8*oUIE(ZBoSbZHo{^ly&%je>xrRd8&h`BfEfq z`$=A-7ETnYmdv<9F&zIUwCineq12*9tcy6cGYG!|{mFm}S>$Iva@^oxyju-a10$n3 zonS>LvXo7dpUBJ5i>0$(ReLlZwIVV)aa5DW@Glxg{Xn3E#R~n_tbkLChPAzYi?t2= zjUD>l0r~R`#d1ISuPtPyEW~C4BU7ec2e9wH>TgQnBUZ|sO8*+nBmeW@f3aZ!%T3bU zhB5QUQ--;WjX10R;862=1MxDIY7g-4(=r#aM9ch!NnO9RK~`~E>) z`(DE9blPmLAy24nY4m%B4(whdyg4)=JP=lv?Fc1rI#7!X#FNA>nlaWQ*k(&)G8}0860Mmsnm*Nicnn~ zMh!9rIN8tzO?6v%m{Ky#?zuf@>$O&XWdaIu`M;kuAqE(UMHHIl)-SrK3m&2&^V+bWZDL4%ULIMAbr|$UgAr2VmL#88`7}xx_ea@sn6-X8-W0^pG&!h z3JJ&ec=%gvUI!ol{0d(k0&0T0{WVH`so=+S3ZTCNevCfdm7GGTJ>(ODtYea#+G+5j zv0Y*DE)Qz+O`NrxYy!`Pr}iBKF3pKQIPYH8i4rdB$bUce1HF|X+=5*Kx8{USf(%~z zpv{YpyhWzZgrTPp#m_84ZnW#)biv~Adt}ck3{2>|hfVUqWNX87q9fpT^o2$$x(ml7 zRXPsgm%?1xFIJ80**}nEwOKv?ft*R`$e)9|QIT-=E{`t@jvd!()yzv3CYK7;krm%> z#F512f9Rs{!6X!?lR7g`r5*@ypz~LYrenuwC!UgOjFJjb3Ys1dL)%S2;PFQZLVM(@ z!c^qE{-}uW=nw6sYc;C}?0wrd&Z?zgKo8v0WNev7Iv>vWK5U9^p@q&i<=b;iK0IKP-|I#(R?e(CSHo4*`WEVEMnXG%8^^Gu0*6y$xdM!k9yg2YA0UW@y&7U7FGWSWBHk;X>qZAt3v%e zv%rVrBmo?{72@8{Sw%FF_RWH=DFoWYgLlh-M<3nqzOT&Pl`VvYL>Fdo3;SW&{@Y;6 znaBspJ!o8B!_XWbJN)A)4;FLI^&QgizR%rS@)K##>BB@gF%);b(7J6E8)Ej^g~mM0 ztoL)|6&h%u#-{1mP#fC<(aeD5}r-X}}*2 zi3{K59)FszF-M^7&{5v~*d_$hslP{51#gD-foR?p00#VF+-}uE)^>cIVsD!`71C>q znAbQ7!1S3MD6hU3JqCOL*4;)x`k%Ct+Qbf-!VE|sR$-M08g z`6@C&5!j>g_wV1FIuKzgX~tWS^nezHh@^Qph4ZeXgv4Zr)v=pzj1O!MoGTvj-^Ugk zg+F4e3aGbzlqy+YKSw>i#k3!*S`JxFiJ${Sip8DcA(o@q7W?&bV!C!)w}yGVXUk}c2Xk6ht0 zO6L$H2i+WOSoV3hsA}S87)B_kRyS|E=Rd0OEt=HrVbRSoY~|%K?aIwz@&|bapr2Yr z;&;P%@;G^!O5fS;oxVDF7YU6~{awPOxTavg`T_qq4IhH5)+OmGM8P^i#3%C)GcTKD z9fvh~?ent|8RS_W&pVkZ;c zt&c}pB@zH5F7X}WuYNHpvi{KWTp(ESiZFp7?v3JPRsIm$OU-JAp~|(qguNI8bM{m{ zBULUYJbI0PT!0UWZyK^8ig#_VV0w5-Zz<3>Qi|_rPKo&}x{{U_6?MhuJchekROp*J zG=H{4vHrO}0r#mv`J%4JUuyKTx9p{xn^5>ypB^y>iq1zfKWgh$FZSm{8iT!(wI6 Rd`^#e0hCpdDU&h@{vXxulJo!o literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-xxhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-xxhdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..3eed6df3c43ca94c38a3abdcd3d1c7cde97c7c3d GIT binary patch literal 10096 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-xxxhdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-xxxhdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1bc15a4e4e29458b47ac2299bd49328632607a72 GIT binary patch literal 9117 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 VzT5>jXe#})tfj86R;6MG`yXDqVjKVf literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_orange/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5a31bf3c39f04f26a82aada4180c03f9a0553b GIT binary patch literal 9865 zcmd6N^;^`>_ckoM%K{57-LQ1Gln5>z(jqA(Eh#Ati*X#livrG5>oYV9c-orawIv z7Q42pf~?*MsTP;flwubORcp6y1?xV%|Ly`dy`Qv}I63B89fAq?dy(t*hyzaB0}zV^a2e`TfQ z<~j$V$F{ffvP48A?QAnIvwT*3m81TTe{?6Axyi2_{%xvTmn11MX(-c#Jtq4C`GWO@ zitCZ;_6vFy+{6pGsHf^;;)*N^sb^r`QB5vMOx#9?gJccIvH;YlBz|Jf3)hR+Ly|qG zfjcSrfgIQ-{UNXwWlaSI{=N`+G#ru{c0j6fny5MFfLBYgt5|9SA-Z?cU}7$A><@wW z!hiu}3mJ)x6ss&x_@VZ6!5R>9i-FMU~lv`Vr#~8u;&i*9C#B8KsU}uQM zs>eX1EB1$9k`R0%X3lrZvHyv+K)~35I2kNAP0~u8ZemD)fRr#Zvl>4XQj8g)Ykkd% zeLhMD1jztF!y^(HSyVWHNEq~0$U(~m)sGM`s0xB_CbEIq9s&xXLkRw%wjP_eB9pgc z;++3bXc0%v!CVYnvx+2!Q%MjnJUbNHt=Jw{MA;*qP`Ic&)T-IZU zNkg*hN0!<+$PKulc1%S@1!az^0v^T+p+F#tBq&~5>8_FpyO&CYjS4?T!Vjq_#9nL941$!TY zbO6^c9teFXiK#mj5bE1qbq9lw(vp&hPsC(7B{W}q-F)~whw1ne>=J#-i9|Ase%9*1kyeL>`zpiF#uH+IdO zNslqIkx~Kir<&Rucv>SGrhwNQ(&Npet7f2utDYYb^yZ|rIFE>lPr040_glbW>OjC| zYL{fnEaoK?`tAvl~&;(_gyP!cX8s-Nf4)jnC0Nc@z zM)J`O=NH#4Jp%(*7e~jOgkJkM_(T1%)P4OUlZK|IrdEPfvGZ&~zwww0t>=EEx>Yj4 z+VHrh7-An4jBy+u9_pH##57I}nV6XTh}qS2C@P4?TIDF9W9PA}&e+HO%3Cv5nao)5 zl9f64t6C~cg)MtMn%xT!0g z^5YyNu+7ZO7-UZ*4h;?AyL)(CW=%xpR;En$M|0#${5Zb!aaJG7c&(%RHb^x);^ZVo zK#5{*dpV)eXP_$r+_ru6kR;{$5I>R^n9X~2P_`*jAZg-#d)9Q&qM7d5i-BiO`WMDk@qL!(Q1c z^?gfQLPbPG*p1k$jE;^*5)crK^*?z&QmS%NrzvLZ6)o+5aq#`V`Y`!Q51Wm=1ucB# zlhQw$f9>pk|Lt_My~d22FY<}?Vm13holm#AD3FCtvQS(7Yl_>3xjq^9d zRt=kxw<-);n-%v{(zKh=yXVP95{6F%^Vg+r_Sv=G%$vuXq_YgHmP9I~K7K_DOHJ2e zNH}2i=Zyy_Z*G*0)`LxqiJ~Y$U9&)^?cYvDieEAXl;ICdU(n0Uj5$JzD}EkX0jG;Gr4E;x3+-*Q z`1ns82|UY|TUJ>1J2xu-s{Fie89K)?OTzthlsHl(U%B<-F>mY7%|WM_LHfbLK}!Te zL6ylyfbs_4Ajgkw`)Z4&t`NKTm-FJ*cK2;o!1;5^qCbz8ld{l^iN(bL>O`)SCG(6y zQS%O?J+V%XKINAx`rggJ+n@?trVjh4+ui9ZUFvzK^jP(>PQzj!fwqp6A`81#dLx ziuQA+ywH}ds+aUi1#4XdV`>`z3)n(}&}eMPIhO=6}Vsle04Ic1Z{`ZtQnHH_(}(t{NaWLhqb%Kt<}$4c^$qo<)wZ1% zF>jV@UHa4RZH`liI;$FNDr%<9B#*ZdFPe7U;%*h@FMOsJNFr-bm(c50XB zyCr$orXnID1@6YRmR&q<=U4F*47QUx9Jy}arm=CrmAy~NS%gA;q$b!m(7~B_NstG^x-)BG5dopy;!KTAtm%$Pq;M~g4GI1bvYnt#Y zX6v=PY*PFZ4J_CBq%>pgbm$^4ZgPBy+rZQ}y3)@vd?Y`(dD=Bd%h>qh`S^B9SjXky zWrq0BQrgC*bV75Qr){=VYWFCL8J#bpfd3)pyB&&?wQVdN<7+G;miIDKSTxi9a=tlW zdqH`n9&rr%2vT{$$LYJmy3lL%oqpme*U-?PgSO+`SQroPe{Oo-v8HyCiNxx@a}Pk* z8nhSL_X23h{sfX)W^xC_97)CQH_rlOxaViBlIR!w#v{XSM5);cXOu#%Jh9QZ(4kR)}~ZepCBZSANL_YOv8ZJB=&cw@6x zo^)b7?yJ?kap$EU)>ojlz;C1|Us(tr>_a{+b+{;$DuPM*iI#F0=L)(CmFQ$iyj>^b zt!NR?eMK#WOmW7>{~IZ1I&rR~tQ<)Jo<08FUc&#i=w^iw zoZ944Wz=$VS#Xukm$;10s^2@z*cz&+$>=<9((UdvvrGKFOz1xM!B*0Li^^yt%OXA2 z=}oPYS$5OlUW0|U`=!wzu9OZEd=Z|>zCoR1X{kMjI$CMQi?)zB3zzMgcjl{`&nWiW zzGifvN*E@rFi-5Q8{SG!Gr3-YR z@rKR>L&_Ngr@^;*w>v90O|ZoFZ0?CU7D9zpx7H#>nN$6&uUshyAbJU*T2-^Gmn<>A zDO6@_Z>>ARS8vT!0u*N!UY2%Y%kAnCOjL0D0)g8(y|sUQ@>g2lZfKYmu+>youf&qp zY=}R$wX;)RE`J*P5u*8Nui`IJd}vKU~uGEFoocf}xgOJ+m;};QIrvA$w+0Qr&bc z0}hATp$gY)cnQZV>y*Q~t_c7L)I(nMq+JNTZNIHav>dUjbmP3kABE&8mjg}iF|*9N zaXQOj@bFgqhUf+%tq@R*ACkPhtgC0l`{w{87B5yH3mjPNpK!>~5Y%s|9$`w7s z`$DrkF|9^M0DV8U_|f6gL-TAjd618 zjs&>|Uf+o|1>v6Igp_GC_&GP}aY-=zaJo8J{+p`gK}Dg|TE#`1 zWf7ReaBS4}G3&_s6<^ByQJge6XL)tC=4H%AHtntRcEV|E?2%NfxSpT|keI65DS~A( zO>*960*G3BV(w0lS@o|KaO$_l%JFqMM*<>xq9IfCL-o_sGLF*LQp4ui$`qEMZfpO* z$*vkjnU?a$dol$2zx>Qy3Jfx#ffQs}PZuPrWt4h1TVeY|Hm@LKxnCa2z7|Gl}>Sr&_#<_GmxZ&1dr zb<{-^5?~fp9Sv@3F089l^*&k_*v|7vuMFINY4mQ5(#F6v?O>&0Zg1qXV*w~90QHr* z-tr#2Pw|aZzX0SLeb4~k1pr>e9e=(ytnm~U5hG6Dz?XPb%Z8 z+$K9lN6P5P$7Kox4pfbCz#>#S^y0!rC1=}&?e&vOmJ*E|yg1xRnp?HY=q?Gg*jbkc@%m7n(A%>GylGha3!3sLHW(@&V1pZk$XiH*&;ul#)qlF{&3j_Ps1=d8)&dX0ST-)YqXl2sqX&$2EfN8OgL z0%Y`;Np%vIC}7rEOHGg2Yt7yRMLrcEpZ9t@wx+C%O#O<*Aog>8O67C=;x2-v@J0*tVVilEVnZz5*G-$08QEF~VX`djhsB1AIJrj) z78*XqKc$o?s%f}zFX;}+YP#wDYgh&`G0BUI3!V-cfJ*9-TU{^rPqOvq5Q~~YQw%#Y zyd#Na(1A_ky^5WjchD<=A2Bh7~Kc0$jY)d(?4xt=CgFPF8nCLgz9!B@y34A?Mf87lkr z#GrY4c4!BW6f_ai_&UGxTkpw1th4a&3ul2HL{rNvO>;?A7t<9^L(O$Vdnv16Lsmo0_~{d3l|$cU>r{D3A$YwzQ|7-`uD^84*^ZhF|LD7Js|hg^7;l zayhQ}y-5s9FS4%i|8SOnDm%aMP@zZPJNcE3`VqWaRlxmwjWfg2(PTi7zsr zx>S-p82U+B5KfW=1eBnU3k)!BZ~ze!rTd>f`l#opH|oPhM5f+IwEDZIyn6TdrTbme z9Ok8-o~n__Y6c|WyT0DQ=jD2)J1Vk zE9Uga`?)cJ8-B8kw41Ajh6b;hJ|=<-!)z#bE~bpiS;FvXB_e{7D77sAE+_YiNB+~l ziywsprWL5goIV4IA@*oM%P3Fk+_Pp`c2I6cSq+HCy0=_sa;4S0{%OATF4n3>3MRS? zZT*`rYkaN<8|U#Nn?$*3yOIZ-@1v6mewlMFHallbY-lAPj6fxkyIJ93ThY7MWWB?> z2R{0XT?^ue zd`h}W$}_xGO+H#5Jhx)qsyLo@5wv-*pt6_7;F5I4?T~}tV9c!c+NFX?dsrjC{tP+H z2r+H~__k5I-#j`>Uuby7wvRUDDEV2yi{tLj`uPwqf+z{M>?ie7sBP= zn5&xEy#=+jCGy=Zwq&etJ^pEB7f3Uv_-2j!*iiB?4&NxXwF{Jc9Wxjm#i@jmRQj4j zh@w+bu(%cR;l#scu!bSUq3lnTL+VC@O`3Pv;HN^mfm_nDhxH*Prl6s*5+i%c- z8)IvW^=k^ZJ?H;UEVh*&{$I{PeDX!PtT7zcxFTQJ0wJQaPkUbTRkQl*fv$t2V@f?9 zW1aVFI1IDVtGJn#9v)o`#}lCI^+rSXDMBy!##hF3cQC6P&!DMl#^s`sP?{G95T6fV z9&dY+DIC&Og?;LiG>@%X140S)1sZ1fO zlTl%X)bFpTVXOG3t^*_&zxz~bAanOXcMsfw&&dHsmt$`voi8L$&^}Ad@)6{NJ9Son z+sp$pwZcOCOAbsdQg%&NhaI0+b%EAzBffQ=ut?iJ(rrYcP;_&!RjQc`+VF5Jt0-zc z1JsF=Nu{hlxpaF0H9N4&H~ZFz&|jYUU2vN%Sf)M z`N}(+tUCszY*?iQf{;$1Q%e)g|Dt5a#G=WrIJc?()luU$g}q9e3DC4N)Z&-X2IPsR zsc9Y<82<)OyH=U^d)|n=!k4~L?A|eT262?2HZt;KQ_~F1oCzSWQYn;LhKFk2xZ6ag zW0mCJwWxvP8Qg|cv-X;Nd=aAdaJPpSltp*jLz7@#=Gr>r_UE)h$uN*$M^kGe^6H^r z@XI9~2q?k8LUEz_yQnqBut9#BbPfz`ot&nmcW&-qAJ|A~F<3Y@92y*K#`it6{#;s$ z_z+2yjF!HyRL_$!xj!4((0!%Pq}cbNw4|gjyE|o;SfO>_E%k!W?V2`aQ~%J!LTl(T z9aK^L8_Na!oFcx(XVijqE9vMiXAy^3(W3$>=l=DsHki6pr>3nf0fW?gn3Z3g4v(@rejiAx;I`XZ_A56xmx18+!v}n478o)9XZ9}q_Axr=X9-pP zG)UDH_FcP5*+PakY4|%T)dI%^T4&zOv@|w@;4R~SD^(9H&w^KpjXZB22K%=IjDy_A z9)`w=w}joN2R7b-+9!uX3%ZZ%7-*p%8(c#Ls`-=RBhvMDOnRapL?q8;{rx+-iX~rT zTj6I6kJ$V8LCjnpMMQd)Iw@NWGH2hjz(P!E%5CkYKkI}KJAf(;BFgccA6xNrE zR)34)05K7S4K$Bd>aN88p=RcWoLhL4`7o&c`7dLg3yY^19dvs&pMAfs_efUO4g(4T zuBpw_U5eu~?gu>E^t{>$>V0y`;g2!1yS?;f0gGZuWOH+KQxp|;ll56z`buBr*Y$sH zsjbRe`8}~H0cvY&ixIRxO3+&Hcj%7*Dnb^ee)+Pc7)IZjG{oY~zYx=fyrTN^gt zGu<~yt?ey~fH27X_V~bAQ~&jRA?8g->xNE})UVz+yt#Ppy@zJr*;`~U>zZ;$O)TQ- zz7E7LS}3M0ovh2Wk+#JzUA2w3>j-|X;-s0-Cv z_JKQ{S6lf)&5W4&dg{tsV07Zf^1Y2@!93}COl`?+qojPxS~S4-DD&qUnx4>E*nF46 zNoonGTTFPG275Wnfehk#oju6qO*cn!mVS>7gtcVp?1g1#XE%i+;Ox#qwfSYnCMK@J zB?|o(2&`7XOxNF%FW`???|?Ty|K7cDCo(u1zTx2dCTjy%E#H^&n zbIN2|U3Vm)5GdJGKhcfK2lEdZ`x=^eSfGn4PS!KkoXk2oY#SCZOZsEjNn z?S8#rUdviw5pIaIwv8SbVW0q1jb@&!vyQUxmz)-^2IDVqnTBCoRRuA`X9=*1#IV>V z)s9pW?^a%r{Qq$&6CLbF4wa1oCvfXH73x`_+IvzMOfPFKsD!@t{eE0c4(iw5?7g0j z&RVN@TXS=BQ{540{PwQRtmg9RtC#5|2)w31PpN5UxG&|Y^wi>UX!q9V7J2erSA~Y< zKOIO>QBg~iqmB7Yk{>2C@(i>SbmsHv8cg_y3~`Llf@JmeXFnQh&IOFtFn5XUFmlGz+UEvovK_5Jsw zL+D++bolE7Z_M0TmY9kG7#K(d=QIp2L{v14HJ53}KE>1zU?5sS0q=WA4-*jN3g;X* z;q^G+npRF=rfQvpV(11^2p$DMBDWy;o;gCCJ2~boR9D5+?99ciJt1&42!1*fr+wcl z#{m}^Tc?Iw`2SjZLkcNjWM3l+Eoi}G4P}Y)ElgBb5&vuYmXCi^h&jS;xIbO=qEJ08 zG4$+T-jRaB^fSZ6b7CYif!QCr3v>i{&4qX}AwzBctJz><@m8N!=G?gtRS!d&8*Q^C$iUzq&CDJ8)ajyNhB$0Am{4|OmqVhcE^EjVyRHHisyUtvSvjGw=C ze0|-{s7gyDtXuQ|+2p;q7kJs9d`j&mH_X`Xv;y4hik`w4P%& zbuMt)d4D~j1VwD3l6iNh{mithziDv2gFqz_@$g3SDL`P_l}uP&W~u< zrqqrY==8rX7*kG{plnZ>peLBX9fTe`PWES+bYa?Wr`>bKU7*eWzcac#X#s@o^_^?FZ;tSj6f*d>AhCgZ-)t52w9x*CXc_{3net z%2AB(27AVJ$H)DN5Z4TKmDbeO(CF#G`OSV)W^RA3`p&_8&U-}z);|8XPmg%Gyn&(h zX#eGWyT;-~w1*G60$Ndg7gB_lQMv@J8+*@=4)LDIhdMMjIFsRM`moj5!!|qw4gedT z$LZ*^uPc#KhJzZ4U!c8}ti6q;c*gy`?aQF8#R5t$o%yN&F^Q8y;yCSH4idc_8e2RA zv*W55-uzhnMX(}fUXBgmc7{z&N9jhVWqr)3TjOl#c-^^hC-MbIvv-a29BaMs5}R7G z(v7oY%f1loccrmx_gDeYRQ{qLkdjQl008%$$C1J88<$D)qnkG&tnmC3MT=4ptr0K` z2byW0v_lJB7mR}eOsxK}FJyZ!Z0RW5y;Hnv>@f(t84cuZB>*(sX z<3_o`JNSl=h0l6Y=JeZafB?h0-a|&kvAY`RC16wfFpD_yM;cI>w7i z00*9smqQ>SB_Sig(I6WOBRvKSP&DKOARY{iKq}pK0C!lDx!XAxdh<*}iYdh_>G=R8 z$9Wt#IDX>}`tYk1fpdW<3Yqsxi|%0oa_I4e#wp#ymQh{Nz8p69q}y;bnjRnrksq)b|9S z>l}`K=tpFSM@We>*E|Ps_zrM5Y3e=zca~$}9t)?Gs&J?(5zD!#3>-GchXcS0Cx;G) zejI3%L^tQtba_CAV?Jp|7-ld`df@H?~KXn z3$FQe^eFV#qD$!xE1J)g(m5!HR}hLBDBLG%Y4qGI)xa^&#^xN?PiIXRKhWCvWm-C8 zTl;GZ3Gg5RFcnY9J2t83J5Vj`l9-x@GCTMixbhi0$av`&TF5Tk`$8e$MYs}T0;_}0 zWwBSSGFHt6url&k6URrzv8nwgWohqNmi+@ghWF#ty@wKhy)5c)wKPxbn+$qah!-o& z2I6cvybR*IA!zHr@Se1NCtg6hfnwtDkNcL2d$TXQ4TQXHOIEsWvtcfBkMxVUO(|J( z`BNZSx1+eVcR0U6lpe-!PcZ`B=yDOCl|~?*m8RSx0II?|n|*v&iIVzftj@{DS2ukQ zdvgrVaSxRks$_aSZ{mA9g|6%PnjJ3%8mX!ZCEvVM*o5)QeD+Cj6UjW6T87*Q`CyRn z!wvB}77D^u!*55sR1>hz*Vs|>vT=&YBi(ITQ=h>CC0Z5qRkK*q#f9FDp7lq&o146H zv+9gCh1b3llM?Q=?}U3QO|S;ua(mV)xp&!oXtE*OEBO2PWJWrPzU7=3cmJ}UWVghq`dx-7gpc(Ad5DEB{a#Fv z>SmEX!(It+kZYLt0=m-ru%3i|P2hyObhS1%T8A+GGE;Nl*}@^?65-`l&Z}+5Ds^x~ zft9J6>C1~34Gj#AlPN_rU;A?Ff4h6kt2NK!##}RJL)Cp|=Rlmp_;5_aygm$X?DJh{ zDyWa6w3VZ>Q3CFC&nhj-r!M$-Zf{=aS-yR|rh(-|Ts^fu6x*QG+|zu#gIOm#_@|Y3 z?CG_x%rX0hB|EbekJeCmSoMbYs0wLP?1eosWzqj0 zck~x5Tos^eY{kCW*?J$=q*Q@Y7uymdw zYmj2GcgR~Ul)lLR?9~*^Jfx{<^=%~ZQ?7`}qt03*bm(d(QK8K+FXFew`#V0_zG1G7 z%M*=DOm8wBb*aXy*?#-_hBxCi-|Hf;$;-@%;B3LtX==h`kbW@NWvYx9pCsU4zAu77 z6FzSAU`G3gM^%evJ_st{U@N5ZdRfW(d0 zoL{b?N>HQk_CGr8)_x$DLmXs}DZx)Nrw@OMzgG&+7^z0k+cw&k%$QCN7{;cjR3G}F zyM0%zqIds;>Qd43elI9F`DFB9n3wF3eM3xAgopd$E)eN^u@q4G;-C$LSspBU(oQii zhxpUxo?woC?DO})Z(T*D=Ij_z+oLO${3awg?J-Tk%e0AWC6ynuOBk@#+%*DW1{l6R zRo$BW(LKAg} z=+2dipj=9^iAmC|K1JI+#xS%n<^Zz-vRGT_jgS zW&F=0KgU(ZVW0x=nmd+UskOR|M@hP?PvS4AX(l5aJ~NZhA2}B+9YrHpXQbDZ8Z|XG z^u7?txpm9-zSM@fnw}s%Qrq4k)X-B_s!iD+<&&+{n@B9_;Rz36I^3>zt2}_x9oDm0 zWNFCnUrNd1)U>izbZx;5gd54UuixM(cnX-V7ZGCT9p2t~gAu85tGJHRlLGtvbgrcO z#>lJxyT0K*m`8ZjS!$Q^PT5Wrv8mme{6Y5zd z!6gS$1y=P5n1!dyQ()!D ze;>AP6*GHsI}cu5OqI{T2P+sO3=+mlgZPFx4YfMXh$Mrcf6Pb6rI;j=VEMojGiMj+sj)gMx70T9*VT}Af73h|n z45=%EHs|aQCe2c_Oc;kHav90~1PNL*Y{#2SxwKR!2??BBzdqY|Ah)3drhecadyHl1hh$|;^-ZbP02Q6+Jl=;*SWw>361?BIGaU?+mH~OSX;=Jg=aK~>w&)%ll zFL_+SuaIko%Gdo)o+6+pnr#$dg#PPyX(}RX{Q1GHD@`} zrqO?W&vg1yhbH-H3reh%?SAa%YNO7L^2yEVg*qux$Nb=zOJ((PXI|&#I8{v_i#J;4 zHqR_B9XZ-lryKcR(jN~M^XK9|axC~V^T-N3!~Abll$v__3sTY;=J#cv><*R}g>QJ2 zmRD}v(0B)CKq(uYj%)`Uv=e8Hhwq$c{zVWOCvV8GP54>8;wXoxfI!6JO7+=IOM$+! z`Mfke&lpp|B}&hnoC6^N6U0iP7kITltPZu604Z-H+_-#D!EUcD#qT z8KF!?!cCi>te!+~Z#iQZ9bh?&b?Ej+9^eIg!+HD!J)Fp!0ik7aV+%-iP{cBzibQMlaWg`E)Hb#mv)(wB-bG*+ghfl|auYcdr zlyOk;`;+}X1k%m=*)}M{W=s{BXQB%>)zzo}BQwf3cHBEUne^f#_sb`wLbOxLftfG^_j(2`Gd#UML4!H&H9uk zai4530ds|>L%#W5BaH<>Yf4_e@zqC~o%7sD|7Ck}V|~SEuwD?SGMy_|``Q)ZIf1TV z0}x&rBh4JPSkj3%9% zm7!t3H3k2?f8CMA=i+8RWFs)pqjN)sv&Rf&kR9AsCai9phj>~!xmJ%gG1AN0zj`cI zqj(unSmI>fbSFRF9;Ic+UzsD;)-+C*BL5m{3J3I9u&V6fB&w<$_Hrw!O7w{gM(I^v z=&H2aPLUnVfIwxW2ZDV_uHUka-R;s3*3!SZ(*t-ISpqgDTeE_TUjC@a!`|`n zL1nInEuXw$XC|H638@Wm?p%c1q@dVo_C-3b7J>y9vkp4Qw7r(%&dtoKv41#NJ#6rM zRa?Vh>%^QyC5YxeuMoW}6Mp=eJX<+oUz!)vVpC2d)aLPgd$avDy6FxszOJ??^~sU4 ze+5(sKCx#}VpmQidx(vFXgzv!vd)6td|8?_!irmTj=H*@Ge-X|-koqZ^VH012Gv@j zHz%B#wbU8h_}0eCn-rcg3nhg=wyRa4Z18PRB3!k&-Cd1iT=W{3$@Uv3lkHX(&kjfl z$=eRK16_vlFW{CO^Xe-ozAAB$3fZhX1qr=7F@O1h1JcANw)f@uiu=Kf7{OcZcsc_ z_X`C2+_8kmrxW=53Zed)kwAK-^5pEh@9PPw!FO%rRG^*jRP@XomG!FZhL@9X=Eh2` z7)TxmOBk>76hHTlZT&gcd6z~xEKz-a}4Q~=*u)cShu zaA_=cPx%P}XO$PRQyv&*@JHMZ*1vGJI_JhdCdBZ=*OIg|cQzV`Y+@yPrHSe#t4Av} z=n5`K+xdQUlU7tOiqWsg-@CUZRLGjk?*}-(mX2ia63l<$j$IveiXj8|Bm`={u|C>|P1)E=fFltjr z2pZRPxB!OxPWar-a1gP28}ju6%2ST1Uz1{1O>tDp2Ui_2nLP))OcV;s3R}`)^75>Z zRBnhygm0~iP5lDW8>7$ga+Ne9dIO(xk<|KA8>Xs-4>JI6a5U3s6P6oE)-~y~~FG5Yp)Mic}`_ zMomqPFz@A%xjm2z3q0aP^>JR+da}Jty`EW2=-yvnwxdy+cLkiM=ZYSUcJ#);g@vBY z5TsyBG+$S+XNy1loU-B9`Xe``;E<4sOf*1O_pSHP+>ZQNjdBnw`^|PQuZiyD@dm;++WB_|@17)7Yn!b%_l)2j~(9oTlJh#Rc z=w=GrsUeZZd0Bx*z@Y&uA$#hi2gtJ=lq#I9aC|iCc6&yH0m3iQLfsBdJiUhhN` z#D4~01mvsJ{Uf3<&F&_dA)&<0S())KTa(-Js2xc!py2mU3l?_rui5tWQ6wMd&XQC`W{_J+}AXck!$n ztN4tvzyDUpvaAN^Pzz8-*pJDh**|751u{IK>64A z#~YQyR;9kAUd3C7chp}3g?@87Ar=hX-Ak?Bh)9M`?WYNAAUY1VyAVashR;8;ahBrd z75?Kq{iR%o`=Iji^xO=pH2~A>MoM-e)aE`<(7FO$JMG9b5PN#|=(OwX+gwW(Ip~WwaphBoal4HoOE#vxeP>K@Ff7pJ*;sRN) zd9(siw>0RC2oq*;c;pfvp@T$kA^C-8<00l{EmDl7>Q9YqYw0HG8sD))7U%g1aKaR!eaZ0bgJgb8(*<4YMY;im&jmbL2_mx-- zNe&#F>dY8(ju~=n}wVYaUyDIQeDWUrm>vDa;@3g#yy*TL?&j1Tf=V zP}EuzQKANRSf!A@^)Xt@Gj0j*MCQbI=+FzwFBiPmP!xNPT=mD84z2w5*Lp9ul-Qhd zBXK!pNbE3*B)>L4T!6!Y?d|Q0+==?R_0u|SXGApg`-sG|t&~aZJJB}f$XT6lRaz2; z4%2gIHJl_X1>Yqs`P8*jCfyUc<~jY;W-_b|x1<*ESx$MXc9uHxuSjesOhie)!MO^-$2Wz%xN!4hBJ;9gimgZ{!7 zJ->NteG9}ci|`j#mXFTUzb}FkXd*vU+H>YL3}`Pum~IM)K7)h6)z8US1Zt2*!N}Eh zq|~jnN-?up4;+}5y|5ir84AD_m`t!Y7zH6L4^_Eq>1-xnI)1kf;Fv(XoW=RY+z;A& z{3OlAL3e@uU(2gEeZGq3e`|2Un(Zs7H|7ohh-}C3zOWLwt39T5GS)}BcOttg>by&o z-Fe)8M#bR!iWMX957*CyVfz;*vTwZF8~B?+tWP;Kmc4OyG_b4V-=O0%@()FMgFv_Z zKg6!?I$P**&YlzRf<#TpZBE^|jp?LK-tU5F4Vvmgqk7?>$lla_X7Tmwb}#(=FUTEa z)XF6ukxUIg&-affn%`}jV#G@R^xu}0k%pf#vWrcFlzDrM&u9@3RsR8(a(T6N2+C+< zcDNi~Nw!@HxJ^?Wf-UZI$e{IA^R%u1&iE$25=Y!nNx+3(qGPPs?J_PKU*sOnqR0b6AjQZ?tH zNYNs@%;FRNY8^0uS(i#mX3DdtvJ$)K`2(7k0zSsDls}9kizvc7oEE@ zD9&Cbc8}YY(|Ko>zXT$69HPcxC2^!_{&NQpJ9BN|&x)6yqoviOI~LNZYbY^D9!s>3 z#c%;`4ERM1fdf8xRPVtJ*?n67BDGEd79Jp1r;N~Ch=gl#s$ZO(0e~PKBujrkgV0xL z#EM>F2Qfw5L70L+sAqrK9cOSLD^Ps~|> zMtbPxVb`Tq?DaQx;4;BZs*$>I17IB?)9 zoD4ulvmAzDF~Z~cP0`%Q>Q0VRbsj6`Ei4FOjs*^utMMp)Ga~o?)RQ=5$A_-nB-Xyp z0S14GB3atT@kc5FJsz_biuWCr#6| z{;Jm=u30R?#(S@VYyQ%aEWqXV$swaTZ}M?v>99lE{)AGL6Z^*T-+BPj4TrJL_^%Sy zR*wRb%qDsVwZeGdV-WPReoexm9ROVSFy2hO5^}YaItDt-Y!(YWu*d|4tQG!eA}OB; z67<65RZ=}che^$12#t@6`oR8}ZBI5p=>w$Mb=v|>^GqQB9XiYXl7fW#>?Lx|dA3Ue zkZ-SpJ&|1AEX@inC3Np|-in5?<+~uSx{iMScTDo9NpBuDz@iRv;5Lxrj?Vo6?T}i^ zci(tl<3MJDG^!TGfqnke2LQ0gIh>Ae{FWhUIbzEcBHb35Uu+d=4n$MD_Tr1J(MM(4 z;pKAxJ%aDI?EC#SiJ@Cd9_`FV$l)nO^f s7CMj8U}l-iHOr1>{~!69LpyF-dYpoSIq;O-6uic4`VTC{}_pm-^+MS??-5Foe& zhbP|`&;Rh77kAyYX00=K_MF-G%$^;mtD{OnNJof)fkC3K27HTwfw_x*@4?4KKPMMX zwlFX_tJQ&u@BK^;rii!zO}M>V*b zjT)62yV|Y9T*QUov`<-q^R!BtZ_0kkzW98-lZp-yNc#m-s*jmDS;^s$>*v{vba=4FK$m z5l^k+DBjEry;hkvI;-?D#x;zG;O~XtAj|*Pufc=6E25?oHjG=t~}P?ma}!>;Q7^<^kRY zs5|uc$R-;5H&Ft~}iu!r}q-uq1 z^LIyEW;HzWGMZd(0N_hFrW7U)qAB&E*QAtfig`7G`61Vk6Yz~|Azqpk2hqU1<+nE5 z>gRblf;T3VdYniryff6%(UCO{{B^Vx97f6_j+)GnOA98a4e5RrP5cIZ3V zE7c?h|BoRdA>R!XiA29qiHeE_c+!~B$_8Ap&C+q^%(?vi8l10Hf!jGzJ3ti&q^>vZ z45%wTGHRnX6cLlnZ~2t=PRSN!?BzrR0`U-eA)UzZhSknVy? z$~Z6_+0JydKr?S;HYQrLiY5OPaF1dg1GiX&RiGCBtdd5YKfM|FmoL|Mnpf$4ol6jv zcw`iW&s1J9a5#Lj(WlutOZ@O(ejJw^?ylH#t|Voj(smUGuh$`W=VKm5#kgk)h7gN6 zhP96t7A08-0SQVyJmRUCE!oocNml%6xUJ+IMBUJJKKD6zD%?%tp0)|h6Sma!fhR%C z6+2lPupfrGq~O+yXBgeCvbqi80JZJx*dlclZ*Fc1`Td#ejqxtA@koE*Y6BSs6tE+j zOnEwHO-fxv81FXoY$eP0kx2Sx1O$y?a^8DGLx(x~c9Lb}WV5%ocNel#8yF|3(Ee!e zu^)29qDGSo&rsr1qM|bNy`~cdXUM@`6{`ZsVTEyAuh#MGaUzca^vHTW+$q6b z@%DJ`^7)cF=`SoPMtHmT_dzwJmI0@<$(PfHiLpU{<}vAd4ZELYd=rI+L>I*S#ymzu z#Kj$FJbrI{T+$<61p4x^9KIJ@<>iF<9-AVKf|9D=On;1u8b+l>mE4K$BOxHC{$edS zlKv|*{%*=E#;g41-)fQpnU@DUOJD7B;qM6&=*4wh4bpxL#4D|!Y^hCMbbse*`w93Q zED*WZTYEpDobH|dODVvUEu!`~h_#`|ag)*4H&s)jQA%&$ujxMqt9(xv|J*l$V(`F4 z=~eT~+6%WFKCgV0mt+YQ=TgM1k?8mmYkB5Lc{QgdyV8Gwj~nT+JH@j2$vFP~*7o@L zcv{RMR0RJ@LE-U|25+eG`^%yHP5tf5?={wI-0-yZhUD{XhNbV^-PDYvF?BJ5g_4|6Qe-JC{FNwhWY-P=gp=JwUZa=q?`6?ccv&YNf@Kj4v$xZohn9yh7| zPagd}9zYGLH&>4unY;ly6ZcE=HjWQq2YdSz^N=oo71brCz`g4ftuM9i;t*k>_s6qU z$2kynLfugqa{;!+EglCbCl>B3?~e6#cZZd3(D|5oU`d#~A3l%q(7*x8JIoUw$!VHM z;o+Ay%SAO04b&x`{Y{b;+N(M}yPzc6hWdA>c4`M&_vO-cg32;4c51J^I^_3^A7-^*y`NE_{{hCgC)fPNz6makGTFZCVd>rPRafBAP<~_mY4<8SR-W z86u3?@dD=*mL~G1REVzH5fx?O2q1eS@|SJ?c|6Qj>ci^jeVI2&8{-5PPKwZJO8 z?N%=p737AR@_wO)rf_rKbpVg@?o%&z*XR91GC%K)Y8O%jEQ73}+7p5e%6O5A%cPd^ z9~(>yPJW4#-x$L_)<_XG3-bNPv)X(yh0$rV#nE=RCJk?l?~XI?SiXn5mFOCbjE=`xJ_?q!+%@3l;>~d5+Mewo8oe9w9CS%>-?-e#iF43>+HdTgZuM-r z`0Z%#=}*0w{QhT~k4<`eZcr7iSu$lwo2_VtF4sj(ZY~`o=9DQ$gW$^s_i)2x?g>X= zd0+cjoeJm=68Y0O+DaqF^DDp=Sbs(3`e%KuZ(ZaXv3=>B6!}=`w@%ibUI;9VUe~zO z+Woo7!0MO8^b%CLdEFx@MKD-}>Xx85e)oN_;*KUuQVyBY9pBBjLr~3V_6)s=Cjo)0 zCYmo9GIYYakcI0*@O4RX+pv!tZaB?5#l)}pQwvA}w?`zOUWNK?WA6Q}`GiYC$5xU_ z&8bFHta9JZZERirKF^K=%I+5>gF2OH+rmy&miE!qWIMe)AodW%f_&Imq2-#@QNsKt z&KF0N?0?lqCNHy83$^i%qWX7U?*_QLI+m9&fZy8A-* zz+nTvxz0&h*;y7DAw|IMW)fL_OrW~P@bzbc{4&H!m^NYJPJiO*waRgE@juhf?f~RbFanc3m6*aC&hmOcfCY;qeIy!maoqg-zwsXC*dUzSyTJ)m7gRBYt4s3Th#vq{(>!&0-V zE#FH(!<&QSguSF3Q-H7CWcD6Knbk^v#?CDxzNyYCFHu1}9=Q z__GksEswo|lae$R$eD_$ZCTIExR>$Z+p8lgH75iv~g)m z#JTBR3tkVvifhpZySYTq%Qm*QUi&m@d@jPec%N>^&Y0BP?vO0Zfc!HF`U-dL1kjjB zsroq8e;v;gLtU%paEklTI)ij6(Ae0r8Qai(QmO5!a2cK|e{Xt=;!eF44fQ=j)QxZQwdZc< z!(H$i>v}Pd(kZKmojr0p5Fiz2qd~2$P9XuU%6p1uBRqMwM}4+XrEw)kK>}G-KoIwhpZR z_BhOK(H}EPdhJf}GUVCJ&CR8Yl0_@oZGk?9(}CpIc`2^TaqAfWcvL%(MRzjD_)WEm znTR?Scbu$;W-K4I4$^v>blZN7I?Xo4-^TM18`fWAcXQLBWcX=$^F`w%^NV&%B2gt8AV>$$*VdEKkf_{VDDAUuU}FKVN1h7$iAOJ z&FO^Ee@(Q4mApNI(zJsx8QCtaU(W}ZWzMgnE--*??iGfI3Ng<&S)j^|E}zjBtn zu0cLs$Ui0Bgr$RBi+jiy|6qoOq91qxHUBHonGhLmS^^zh8g4#*9o<14=~^|^fat;g z0~`m>&6*1wiiY%)sCj-gc!#!GLzWWtseis}A4@+^H4gQulR00Zd@J}vNvzh88&8>q zdra9mKtDYw_{MzFsv=AKPS-{1yBSA9&TDc15d&Q5%F=9SJi!-IKO<^BY}gTQXJh{Q z^~;DzrG}2M%j~y~V#X=BS#p_IHCkEaxYL=(mPAVDM2l-U8Wrx{&-inxSBLx$znF%>}fkNy>!uoX>+!1MK)w| zB^UOOG2_-K{}1lD%@vH%V-(GCBaN>>Ru$fbds$;LGpi!DzZ!<$5k_nOF8tw_K>djT zo0o~EsUor%9PIS%-xt|YLgocynjwOK!?!Lc9>1x-IuoV-c4xY}##yHG;x_jC6hbhi zn!O?};sW(yUY_$(c-_6d+-UumNXX4RItb!W`Ys(-u(kcr;kGyRXJ*=#+pfQ? zsT2ccKtf)Blp8N6;S|gbYZ!wBJ-&}Ga!8S`EH5vwfYe$w)V71yZ#RSy5ale@FNEdA z2Ec0(A0dgS+m0$PwfRu^Ad5^UtIe#eaPo+N1X6y5sO?43)@e1&wCegfxak;#9j>;E z?>Ae$lUAojasZ=$FF%I-*e2>V|DlY`$f7P}+ah4QW>>fpYvXUD;&69yI_pob7;ama z()S613@=tFsrCDfDb7}aLOrv2;}?80oB`0{l+{A$SeEHvnZ<#GJ3Y|nTv%?CB@K0(IR`5`Hl?uv|hjVvLfT~2Gc zq>SnTBCw^^{UBG*`l!tr^b}w5K1t^x)|iR;$!p?{SoTw zk9eT-zb;uv%Tea%G*`@1!vA%aSDJ!glHZ)`hHEkmM`MQ84g*?-Arc+Va{aoa+Fp!O z6>9k#AArC(^imuPv>h||NNjzJA$gU~hyQI|>R4&9#kV2j;s}0k;y5lX-d5QWpNx`GaASS;KO4%Vp!GNG|@6>e*Q z6vI}!Lvx6E`BS?)uD@tWKfbs*dH5<++o8r5xA{g`sy|jkmt{3 zh{hWA;VPtV9Nfc@WYlEp)3q}=KboZ@X|fM?v{|V78!N?PSC5DY3C?dT@+P%6mTI{m z7#)!C)JEpdNF_;)=V}#F+g54V1%Qx{P<5oYcE&RZv`*OUjW)G1#dpSToLv)+N&gZz zgD>&%)OxY+MP-BYlP1g}$ zY)I~KTfxnFh0mSI^qK{S32wMWm;w7Lk)xUC7b^y8PRrZNvTaw*dv9aIqc`Sc;PI_^yvUh zyJexGR3Lm?3s;8g_Azne<4lWVNOp;96^cRA$6GAV#mLzsi*j2%!Mt7uj*a-aOXOO4 zQ2x8eWcY!w-S9wSp7p{|Y1t3eE`~oSrYcb+!^BdV33;O~@ab@#P z7kj78Ntj&Y_9a{h-b(8+SZf?Q9?uMOh4wLe#Lo|Y1U7B>kHR#({Fv&A1^zDs}8N1yBP zHp4zm3!Ayz-W&=A-)3z`UVR*yN-av={05M{^coODej1m88X{bvKSd>aXqRg}m5~g8 z1N6g*9j0B7viVLn{{{ggE-tIheT%L2ci>oX#p%1SknwFpb?FEyYU-gM;pK0e>P>A6 z1E8O-UdpGXP0I;6&2kYGe+Hp<)i9_wG&kp?|-6{C$QPeSEmHxvm09N`sD@>#XuZj}x3t0g=kaE1aA^ zxFv=hrqS6Xh36%n>sbPN zSsSP2CW0YmK{p>HcUo!BPVU=ndQwu~3fdR1?HZz(C1@^@tf6xCrb(9q(3{8(a-rZw zwf`MO9oGJ452M$$Gc3I}U#c$|2q?_WiU0D2;+Z{?fS{vG+@@%wFD6i`L|NcS;4P-2 z^!F#kKmx6283!*^rregm2H-n0O}=(@W|R z5(cOh`rtSUL;bxL0&r3~m}q(IIz-=-9(fIl+4-gW81v`I*d45Q%jYyx^3A?l?Z4Kt zW4??0-1t^eQ85eQ>*C;`z9Z8ZkRTUF8ScF`kVuqQHkzA{*2FuCfRAB!Zf76DR7egQ zhJHEQ^7!gpEO^OyP8RkHd6|E&y;p5!kbe-lnapcQ@4_CjSx8mgKTxCivn3*d>=-v4 z5Ni;&%Ij{j{2>gL92eI0{(!$H=qu=(O<(M#NePg~fp?h;>|Um+#eAgd_>L|EE`tAzYf)5scnsiMpGIn@{{C=9NC4MDgUGcxl?~JAi z6mh7|w#M&51af!(d3oyKv3_nvVzlaV2HBH$it-F1K$E8K_kTFpKT zt_zHE4NPPoIYEAW4}6vdTt-Der4JpGQR{J-ORU|v_MMY8Nj2K^hxZ?Jb(yn5t_W}T zE}uY0UB?zVfiwKup2A(c-H&sj>Q9OvgsgW{NSk+{5JK;(7)-nD_abOM>3%@N-g{MHMehFX(S$*5ls?Z&PmRMP>u7mf#jF+1fg9M zwRQ~ou?9u|p~XGwLu+M_((9fgMD8V|_wluI;(H!C#--WMq>M{sMZ@nv_6LL6ElLBf zHli2!m5saKz82~J`lv%7pI)f2xouTqcq#jU8SLOT_eXI^tle=hW=oeyqsbOj zME>X8t7 z7X?x1a}0cyp*!kF_sp;qR-J0>i~D;EQQFfvRI5Tcby_u4mp7IO>sk9=T>DJ8G3R>K z5*O=Uhi22av6^-hPQBS|n>%NJ5x6hw-WjrH9W+V)H$clVtiMa^Zsjt7cOyI7=3^s?qD?rCnov|;>1xvlx)zLeaWm261fu6C5%_B@A6-J8&;+T{SetzuElwcRI| zIz~sn8$>)k{8yIGFyD~3Y~POaQT4nqn?xl8AzNLiU#>IBvoC9mj!7xH*yb4n7Oc*rKMaIpbzOEI@>7j_xJ~&Kx41u;jmGO_ zWnOc8p6=5F^5&k4$6N;(*@F`^8@)k&&DC)H+Bq28k2pCWfpm$E4HZ zAHj6%j)ht6dgbX3Z6^VIw*qweiu?||`+vL-bp((7S*Y6~$zwH2bQK`6`Z>ZCz)fDrb1pL>23j2RnhLV;4rZXaY^s)mm6inw?_I&f0-J&7tNm^*Co&Y z>j2MHgRp{r=>Sh)6LDdSs+_F;gwwZ+seIMnzqc)|T7vR^p+OU%v^M4hdUkPV-J0{+N(RT>V-m@tmcdaZ1$u$4SNC}?%@!SS( zaR&%lKFFqyyU^zwTeP3k{oGYvQB|>HqNZU&4NLftOkdvz)b6UQtV}k93PaT8Ov$cV zz1BBxq##FtI_LJh}mnZD#&r)RrMycKNeYHifBElpn~ouC?K zYLh9fVPgYli@(V>mefwMZPOh1<@;mW!a!KJ_yeFQ>i)-MxO3tHEITW!1?$;5U{-BS z)5nuVE@rK2>z?blfiW=u>P_8EiNW};Sa;FdOBqw)jvKz(&*B^BA_08Y#-Wa7RqK?< z+hw`P^vwQ(heE#)Hdxo+cDIc-f%J0tCn6*vI0^>-wS6=bWliNt2)YF;;OSAfzU7{#ooA-yO;GT?I#hz^+PG@1cd6 zR__n!qqHtB)1ga=h(A@YeDShkaVyRu*f(+dpH&%udpr<0i+0pV9V%GN z?S=n3c%T2mA%z3*P3%9k5u#@*(5vZVR)BnuYv(L4CAl7b2QFh@;Xs|^{|p`$ry{;Y z?2Fp?6D_$m001}!Q;HO44~{>*bRSUN9-X!=hhtZ>tV2P5Lxt^yg+HxHUUvC5OeaUh z{p z2c)F{+!iOEVq#Y7{>pfzl91@WE6biWd8C&ywY@^Xi#<%7otAt)bWjhp!3iVWD8{NFsfl z)h10KEy)JfbB}}NneM^{_;z6tc4UhWgAYvrbCb%HAzq!*2g(6VdsJn1Th&_^-AUu{}0RE4XpqG literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/adaptiveproduct_youtube_background_color_108.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/adaptiveproduct_youtube_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..42a6d56e53d5177809f46b8e0cf87d9ba51abd03 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz8AyKBd8P@Zm;-!5T%{EB{?9ZL1ab{LT^vIy sZoNHd$Oz;eTJY6Bm&<+ukck~UNKIE`V4Pi>xBw*Y>FVdQ&MBb@0NLglHUIzs literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..61553bfd1567829e259b7f0cf073f4f19efd4e4c GIT binary patch literal 1580 zcmb7E`#Tc~7+$htO_<9jcbZCaPI4SXBQ`UMxopzWI7a3AAa}CP8ICxN%q^U`6}Dws z<soR?y8a%vwSMuiH@{7~YkQ!{9c>M2Iv&(Wwb*@4Fx3j7}%os`B z!fKlYw$|7l$M;_!zY3nUjoTPa;#<;k+`?bPe)aL)%Jq^RexRA!6l$Gb$@oy%;l^aQ zK5ND!w6X+F``6i3PUXaQKT8K9adj3uF_+X>c6BBm)l@!yY!Gl&B!8|9QM-D@(f(gpzP`n?k(1b zjnuN5TwFzWti9!_)O8WY&^*Pcqb)Vxv=|N1aa|a269JjECMRoVvPjTgy_NiHm^mqv zN=H0OXIqg=UFt%|78)L{O$LR2d7Ipa!LFUVGXEg@iu}vmUqHl;8j(l$b5&crQcSDV znU7W~d3}q~lt+gsDfeFXmMY_`f*x<)l*~JO62#1~8}2VXWDbn5a3>H!>9jywV`B6X zW}sg=k4|~}(=+mGJdO)*Lemp}Mu&d2Xodra@2YuQny2sW9dAHY@4b{lDS_Ge zH`SS{^bAmSuEULUfO$pEgTlepSG#k6ZE~HOBsKirje(41;(F7b2C^1$TOV>MSZO|+ zB^cSg0E?TpupqaQRvC;2y%^_xt)jt>t&wKJm3Ib#UjHoNP@CHyAEbONBTWv0X4j98 zPjejY<_p9RkG!WO(AwU1DGPu+Tbyd;o)v=)A$;dfxc_qX{J8o`K3iwS zORxVP%iq$R?2|-YC_pL$TepIEJ=hqVj-jO3Fv4fKEzXQ`&p^Sc#Hf{i?LAc$1G-o= zw(oERBK-6O;@Z%YsAe3}9&!ZPvZlyna@|35@?RAD6tfl!-vz+$sKRZ`hCkBlAmG)q zF&eH*2?yXN_(f77>&GjNg5=O;FGa9U6LMR8wr(uuMmdf189R1_#Hdo>b%JIm@`3$T zzR*ItmCE{vgp4A2I4F*K#{llGp-ueb?Psl_DGCAezNS;d7hOO=sF17T6@9lXJ0Y2t zeaI^X{RYtZ^R6c~``6+4PiLW>3Gx~4$!V7u6Jek?(w1BUHCbVKQN;BMx{r)ceB|xu zE8+h{*%Qtk*h+&aK^2Rl_!B92p^jbe;aLmq3es}LY*rNUnr}>CB_8TKscNvUT^m~UNvStpmj z&NfO;`{u*;Q4a0uuIz75+li`6{lpAAZNKBP!rgmnIgWvnscSb+M!0_?(l^-{8PJag g=+6FRm&{+=fb$p3R+R#c6u%odJG!A*4u6pU11FBylK=n! literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d1d9e781c03c851ccfa55625fba712db12beb2 GIT binary patch literal 3069 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 LNkvXXu0mjfp}fmc literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d1d9e781c03c851ccfa55625fba712db12beb2 GIT binary patch literal 3069 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 LNkvXXu0mjfp}fmc literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-mdpi/adaptiveproduct_youtube_background_color_108.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-mdpi/adaptiveproduct_youtube_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..51f2f5bcc1be7ca150b568f458c3b58e80e39324 GIT binary patch literal 106 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xhdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..304504f96ba8513795d16f2372821ea4bb3bfb2f GIT binary patch literal 4015 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 Vwsj4EwJHDr002ovPDHLkV1jxh@Xi1L literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xhdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..304504f96ba8513795d16f2372821ea4bb3bfb2f GIT binary patch literal 4015 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 Vwsj4EwJHDr002ovPDHLkV1jxh@Xi1L literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..c6edf6ec9855211ecda175b33869196c05c3d0de GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4rZW8hROCXK#DoQC&X1sLGS-eBS9dy*3-o? vq~g}wgN;BA!{G%#gXJGGg))LTGzT@zvy&MZueR6efvoa$^>bP0l+XkKKp+^@ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb4b0fffb27c0a81192fb703f6024991f2d3600 GIT binary patch literal 2954 zcmd6p`8%6gAI1%BsWrAp)sn{tGDA>mpQxqQ zylRQ1krr*Wl%TCWC`G8Xj52M!kL&#>=DDutm*={lb3W%j-}`$`vLpVIgs7sZfPjF6 z4G!ZhAn*(3@D(`*e7UlG>9v4>n3E0WBH^~z>Xc`a$Cner8y~S|gR6LF@q`#{@K}vu zya}RBx)jFY@(TTz6^_;`xR$wBIy3ZIIT%c|Q?xW^A4^wg4XX4%`p3{~6lwBEKz;rc z$Z5GhDzbsrbbh`6M4P_mT0vT_@jCxr*yved@;|$G7Vh*T&jSemmWMM;_S#pl{We|v zx5xfw-;13@%Zawg{a*gZ*|Du}75L!R?;N^IY-VV|?nF`A0^e%MARZTh1{ImJd>4~* zd)LOikOl=8_z#)OU7=osW?OyBKC%ok>vQ%{=ZBz#OXYR|3-W}2p}MqIPW+FeNo>*lLByv1e+i@Z~}(~D<4=IXzT-)~wEYS|dQ9GK(q zTob}O5)a8W5n0FA5ie!kiS26f(09muIn^;hZVOeU7WZInKw}um+58vA1az>EtmaO*}F?+3oV!nnX z-N?cXa?H}U&Qg7Lui6A9w!1d(*kJTt?|4_SI%1n&k96fK>GW?KX4yim;Sx-a=4oq0 ztBPISwAR5|BH2OIDpA3cSr5pN9|O}%-LRji~aoV=CA|R zmKuXFx}zYCDte-&#`D77IPGnuLn)IQDDI)@^$C4hJ-%mbUa^Iu6aMYRC|7MKGOZ%b zmQF3l3DU@K&xGZQy&50QoEz2+InMY}mL}%sM=QB~SwqI=DwXV~cAqt91k{imD9lgvDNFi`6fiFn9|%s_{T^Z8%?n*@3|i)3>a%F}G6s|F(# zQY~2glKtxYG*|!J0Bl{n-CXo5sokRQ&;On?BKjj!yvxw3n0%e?y$H7y;T5-4u4^=V z5Rj5lZe=E{9|h*ABgpFKCXG&ikViBYV!_TZ=Y+|X zv#b8}!iFBSPB)HFgDyBtZi1kfyBC`ZuU`?LA}+|CGYEq@!knA?gmOUmlSK@67G?I2 zLsC1{oX!_i6m&?x^_c#|jde?-3#@1MLJEs|`Y!GZI6{k$S5H6uQ5m{)s*N;LLiNfc zB+-^iM8i8ggmN}{@<{7}prEe6xHrY_?LRIvejc3cfb#-o!*GmFXORzGaMuEL{^+E1zyhm~5gSPdhP@Dif0L}ik?mp+@GReJy2bD(?x+an z_be2JEHb@W%R`>c;)2(ro36hZN+bM^Qg_uFX6L>~1df=ksnoH47H&Jyxm8l^u@NM3 z{H|23EC75vLOCR+&sSf(D_^(idKs%V;?=Xc0m}NRVWJKSD)U6a{rnPL`^fC5vTn!) zM|MZY^liGF|~vYiG>BTZ3z-Mv04+hKrV=kxc|)}54H z(@^S~vtfy0pY3};UTeVW|1&e%+NHd22}+RH03~CeiW4vJ$_L>LJr-7S-8%7BY2nSw z!G9h+qzI83R6xkaXku{pFZF%W!1k8JKjxX`TY-RBHj}@m(4%{Q)ES7pNv6u)q+Gjo zSPp2H@BR@}*&5u=8zn*#!SktTsO|lYk^gl5SGk>fEetL`2L)AD zc|6FBS_3NvjKdTqwvYMG4;!5^!Is&xIN#79fN$_UUcHUuULAIm4_=O5{mjgtY+mt(QH+E2pd2 zI^uxUPk)2@9!_z%s>Xbvfl&nw7iYRdV1;TRH76RX?~Hjp5m#}d%8}CdAoH&=_ynSK z_^@wWr9KV}BQeu;fI*f}&;`|kQA8;T02x>PI@G=+Bz!p>rlqwnj>@AFsTJfGZLkb+_ zhi`FKhvp9E?B>@r>lt>>ajc7t=oC{YaXzB;Jn;bmT&axi%4EDy|E|D2Ksu= zd!Omj%C+L3TgOXEl&gvzx(7KU5+VRL?b5g>Fe)6#2JYA^{G9wZp)Hz>n%U;+`WPdkAKO#bfHwSMUE1kP{h^ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6a247917a2d8ceff85ca3eeaceac90c424dd07da GIT binary patch literal 6838 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 k8L4@2r9z2Co(n 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 k8K04e4GpAc6m1-<_>jRb+*)1EGl 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxxhdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2fa41fcbef6c067850402c655fa20210a7cd15 GIT binary patch literal 8010 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 IGUfsQ2Q-gwGXMYp literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxxhdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_orange/launcher/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2fa41fcbef6c067850402c655fa20210a7cd15 GIT binary patch literal 8010 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 IGUfsQ2Q-gwGXMYp literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml b/src/main/resources/youtube/branding/mmt_orange/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml new file mode 100644 index 000000000..aec9f0686 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_orange/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/branding/mmt_orange/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/branding/mmt_orange/settings/drawable/revanced_extended_settings_key_icon.xml new file mode 100755 index 000000000..7702377fc --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_orange/settings/drawable/revanced_extended_settings_key_icon.xml @@ -0,0 +1,954 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..22337c0fa3cbd028b6e3574522d9e81e57d75ecc GIT binary patch literal 10517 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 H?IQjUXtP9G literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..374c506cbaf5c7fe0186e020ecb6eeabe4a0286a GIT binary patch literal 13489 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 E0n6u`lmGw# literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..3404cf59dc6b7e816e43892437480c87b5343d1c GIT binary patch literal 1411 zcmV-}1$_F6P)OQ%r^@3yOZi!*=Ts-FlCM@K6o4$8nNr%hBnJWtsPk7%xfqzI0=b2O7 zEjjlNgOU z3OlQJV$I527(1HaaJgV|%5Xk=2v-Zts7kQII4T2YKEJPSVDQ|m!EGT@$GIV$`~G0= zY(Zt!7Q9qhg@VEYBx!Z1KU0e+AsV0L^dn8(hvI}mEKx?{E3*<-QWO)qs(7-{2|2lo z_aoj80>Fm&_;|=xT*P!b9HOul`T00sa|pd9+p)4{5Le7`;(f~!ji}4(#9OIjq6=?P z#7h*$8j4sD@7f`Oh1uiyCScSSj)bT|RA;y1?88GCZ~{h$ z8YfcAQF(k6T|*iu6b`IQ@4(gk9+bv9@z0n{ zOb(LpE$AnRmldT?lY2R_ZXEvASd(6S)< z=YI!_S`Zb5@{P}+WXsbiKIg#xYne1IAXYVkR~|6n$kGv*DA)raMWSoH2(m&7_CRiN zxq^o`3*uv^M9e;&LZQI0)rw=awYYHL6!hx^RAw2(SQ;E#fW6I`c)<{fWM#le>S96N z?*81sDL@buFc=J|cykvzcWuS58^=(XOzWhlU+Ygq#pQIo+8P0^B4}85v!Dy1r$8C0cD+EV*jRaq{Q^o-Y4K(M>_6rNJQPBfW<18lzh~}g19=62=@xv zD(s?elL>EsvOaI!n`4oaWD)QCtw)E_##Fr9se+ESkVrC1P)E7J8uW5H zhp@}IR0#kj`uh4rAr^}TM~@!C`jS4?`}Uz%~Ra>hlpqm+S=M-9kSr$$yyvduosDG55l5U;n4+h+TT>z-Mkn(+GyLL zSW!#2%2aHp-M(3jGtU8yW6AHCh;QOE(T%Ql$YZq7#z%?PVwgDla#!x6SecU$2G?wP zWTDAieoq}?8Dy?@a-D{{kGMyqfmbxKs<~kwiTT3Q_gUCBB9|t23p^LkIe}?{NGaDx zr9>{`<{LZ*SFh7bY9H6r4O~gCCeEj&_}M;HD`O&trh?+>7R3{nMX|(?VoCzIpx8uW zxN`DA(0KH`egFUGn5ppOse9vt)l6`yLe11qdPzk7q{r!q&sJvQ96#v+{{m96;jNuS RVN?JB002ovPDHLkV1mC^q4fX& literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-hdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..cceb29fa83ae5f6efbb24619ef34fda072bf6466 GIT binary patch literal 2237 zcmV;u2txOXP)h8OQ&y2e7~bvdAf`z=#q{w9JrdC!!XyGh(YXwzbp4U`uM%IvuT@8k4jgGMTi= zv~{#;tva2|)X-cSA-0oRt;qzhFcXajS}KQ}0n9GQy|Dd1-+sGYuCTi-1pSYX@8P=N z_uJ=rpZEB_0QgY}vonKP%%^419;T(y;%H`C6isBIRnwYim9)#Wa@viC>MK1g{h|qj z5hjquqqMKna%lo1ecou0CXlCSuhQNlr1beLpTSh`e2exYns~^c5)b}?cGOod`UFO( zZ?JfpmZ5Y^p03k=MYz8?nx4xmFao8p_&qIO>6ki|(smH=wxc<|G-^4n2(^L5TeO8r z$JA;r?c3pzu~i+GX7S><@(7Gj5_S^v2BqV(kz9KN;p~Jv>*yL=O48b}C1PqOA`PJ$M_?OMmZ`9in&Z=E$`CT&3vYcy6caO<})+?xi z!9g^&bs}wcJQ{1NmAX5eKoy#7IKQM7#}~CDj;X4ikVEnPCb@TEP^4r$pP zXwYs)bM0LeAKi~_+qPoWmsg^x?l!KJzYAt6*!Y=Fx~4d*8JRInm=|e5e#`*6yF&19 ziv|X*2de|`mBecwVwSWk-_6ES7JH=bsoL7Rv3%Jg6h2Xih=>Rz&YFdsoTZ3}GU4wh ziqWTw#Gp=x9p-k-2pt(I{`*%_XJfq_U#O+{|*awZ8I4waUo z)G`N|VIi0uW_6@1hGS~dN0mk!7m@ah1VB$;4a(sOg7FCnt+65zI=~t z>;3S3LnUy*!NFMfwe>jt?lI)A{UUapy@@9-%tpm0v5qU!b2`lc*3Y?(kCuFlb;d!| z^#)9II#8H2blc;sWGh`>sN-HQG8l?^d3ml-94_&mSX^8jmM(o1aq&sm_sU;!pgJC( zkBmU7u^oW{#NeNqq4%&Vt`jD1yWad*hkk~p!S~Rt6*|9#;aC#yN#=aKU^9-Fyo1b) zS@`PPjVQV@7cJdJS7=5Cbz@tjQF$sBvR zE0!TRBnZ#H_BP6U(y$;@i-gb)<#Pg(8ezrSnd+Qp)gX*t?kYl$g3qdXiY?lCJgDuPG~viBs86KUb4o3;#NJv#jBo6Cm)~kmAuS* zl2}%+$wy355+XP)eD6va_I{X(ZkyiW9(B(9LHd92^Ta+hsOwD+746;cFc}(_0!Q4w zJpcnfq)7pjjoOq-Rx3R{Jt!?HK}&rdtkB}+%zG$WSczb5p97Y6*3}<`Ki^8juN(A8 z(0WDJCSZ3Q^~skc4;hb*jg5Hmg%|MjlY5XmFBu;!X~B2W{!6HS7gUwigrAhB;)fLm z#Cr!Nx+7rn)ML^mOD)NaWo7T6oyhf}AAVtBxe=%ye#nzV@5DHf;|=#S4hcJ1 zS)4h28XGrm!l6ICjKW0^;a@q;Se8($ev0CMIp3U!^<}g0+#Nj<8G6C&n?UHf>y$8w z$3*gY)GO%?T3D>@$|^#DbUGbcTU&8p|9*UP!&gvymutUdGj?Y*BRQN?rRpV_n+|hs zT71rgGHy{4^*$$vv81p#!QP|ESo2sjj3GGnkBj)=(j{0d7F;-g9^1G77|#_wC5JE67VMog|$?;orTNknxm{ES= z5(15}h>s3a<||Qydi++9VntK89=j{TajTDB@;!}@r_Bt*BT{h(d!PDWTS=bw$qP z;jSIDDPQqVKyt5g&qFimxKKn22yErzxC3ZBy%`>Qli)D%^AmO9{U*J>}H6 zU?MdvWddA5`>fv1k?gl=tT8oQ9)XF}gz`G8sWf@FX(}ZziLEEp`;O-L@@Xx=N&LZj ztNWoO`j8UqO!R4hL$00000 LNkvXXu0mjf9YRII literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..6a247917a2d8ceff85ca3eeaceac90c424dd07da GIT binary patch literal 6838 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 k8)q$~{&Da9 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 IGUfsQ2Q-gwGXMYp literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..c212559301bf12ad3969642ef67b789a8a6b11eb GIT binary patch literal 921 zcmV;K17`e*P)2aMeG>qCX;0@0S3q_@;C!Y&?x*7fa0ZWE|OD> ziLs-X+`}Mu%%KS-)Ec1p0XA336k}q1kl&P~PM-dw|9j^Pb81+C(8@*pU$K%wJ~Bvy z3=E4xp1&faY|-=p6srYRiv@m;zv@6bmtH~F6?lhBg-xg{ z?7`BcAlm$v(So=|TcKauIaqDZnfNs@gzT9a*tV?pUKecpJRoyAFj+n zsDl$w-J`-LmW>>Vdxlpml1mf~dM+;Ox=x!kI2;ZfICL1Fciu)tT^ej!A1W4pz=MK* zd=txmz{CNy;DSU;y3jYVBpH!%R8#={W$ei)oG z7ry=p5e%9;%AYq6yG~SKucZ`s8z*7@lnz{9(v1BXL-27YG02Xyv-k+xJxYQjkN{G+ zMumlWQ4|Glo0@RtXgMz64mRZV;eBrgw!U!Ue1{E=sJdXFMFRX$pkg7ygML5mc^;!~ z-)fvxZehW61rI+tk@qYekA7I;P=jE;V_{r0DY?<0-(rFYtEvj0&xdnoPQzKb5#@#5 z7*Z#pygmmdZ&ERp3RztF2;zbo3E&~6$Vv_(naPM#Hbm27l6)}pd-fd5wPjJ&h7_OfJn*)5TA7*>kQ=@H0>sa&;qItJ{Zc&&6I2TSU= zJQnP(G-v)A2Ps||>PNq5@)F5o!EP}*-d9a*k(Ecp1yKP6p`F}kSMo8JG_x8Xa$4ja v-WaxJI1=9Y&|5M5Z_8{_&`OTsZwv4nI1(wYUbZh|00000NkvXXu0mjfMYEx) literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-mdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..3404cf59dc6b7e816e43892437480c87b5343d1c GIT binary patch literal 1411 zcmV-}1$_F6P)OQ%r^@3yOZi!*=Ts-FlCM@K6o4$8nNr%hBnJWtsPk7%xfqzI0=b2O7 zEjjlNgOU z3OlQJV$I527(1HaaJgV|%5Xk=2v-Zts7kQII4T2YKEJPSVDQ|m!EGT@$GIV$`~G0= zY(Zt!7Q9qhg@VEYBx!Z1KU0e+AsV0L^dn8(hvI}mEKx?{E3*<-QWO)qs(7-{2|2lo z_aoj80>Fm&_;|=xT*P!b9HOul`T00sa|pd9+p)4{5Le7`;(f~!ji}4(#9OIjq6=?P z#7h*$8j4sD@7f`Oh1uiyCScSSj)bT|RA;y1?88GCZ~{h$ z8YfcAQF(k6T|*iu6b`IQ@4(gk9+bv9@z0n{ zOb(LpE$AnRmldT?lY2R_ZXEvASd(6S)< z=YI!_S`Zb5@{P}+WXsbiKIg#xYne1IAXYVkR~|6n$kGv*DA)raMWSoH2(m&7_CRiN zxq^o`3*uv^M9e;&LZQI0)rw=awYYHL6!hx^RAw2(SQ;E#fW6I`c)<{fWM#le>S96N z?*81sDL@buFc=J|cykvzcWuS58^=(XOzWhlU+Ygq#pQIo+8P0^B4}85v!Dy1r$8C0cD+EV*jRaq{Q^o-Y4K(M>_6rNJQPBfW<18lzh~}g19=62=@xv zD(s?elL>EsvOaI!n`4oaWD)QCtw)E_##Fr9se+ESkVrC1P)E7J8uW5H zhp@}IR0#kj`uh4rAr^}TM~@!C`jS4?`}Uz%~Ra>hlpqm+S=M-9kSr$$yyvduosDG55l5U;n4+h+TT>z-Mkn(+GyLL zSW!#2%2aHp-M(3jGtU8yW6AHCh;QOE(T%Ql$YZq7#z%?PVwgDla#!x6SecU$2G?wP zWTDAieoq}?8Dy?@a-D{{kGMyqfmbxKs<~kwiTT3Q_gUCBB9|t23p^LkIe}?{NGaDx zr9>{`<{LZ*SFh7bY9H6r4O~gCCeEj&_}M;HD`O&trh?+>7R3{nMX|(?VoCzIpx8uW zxN`DA(0KH`egFUGn5ppOse9vt)l6`yLe11qdPzk7q{r!q&sJvQ96#v+{{m96;jNuS RVN?JB002ovPDHLkV1mC^q4fX& literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..374c506cbaf5c7fe0186e020ecb6eeabe4a0286a GIT binary patch literal 13489 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 E0n6u`lmGw# literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..d22d44f0db973d2b1490fa7cc530a7dd4a26be10 GIT binary patch literal 16199 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 PkO!$LJwxUznEL-eG!;?_ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xhdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..1464d4906e33214209b4e0ec971926a19c664ad3 GIT binary patch literal 1996 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 LNkvXXu0mjfp}fmc literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..5e270616cce2a209ac58d89235edb7dd866629b3 GIT binary patch literal 23801 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 a(TPJTnFdzeY%CznY2cc=8bmeg=l=)d$6|;8 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..ded4192bb95d421dc493f631fcfbef70053cc453 GIT binary patch literal 33683 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d1d9e781c03c851ccfa55625fba712db12beb2 GIT binary patch literal 3069 zcmV4W1K)L;DZsVQV^z4DoCqC!HQZGiw@{01#K-3wPOnd zj(`a0ATY%T@lkvLp+*G61cmSj+PCS%D&(w7u8lKEsISxlZHbIBYsujuS|bu7IC zj|)Um5?I_xP9)Pv+1HX?ftfrn@jUqq+0~%yX@~{AM7}_wnv|MO zqDul%oFo<-$Z<+V&&L z4~2x4sT3)PA|1C>T^U!6L2Aqqw+d7$t{q$^@4i}0>QEqxBfZsr*;Fd7JxJir=%{zQ zqRUVm$#bMDzgEQ&NZU53ZEY7F#S}>bdrO|<3Z#wF)^^dZi&0S-K8SDj)C}3(kc|5_ zx>}oINgIJEj)=04>}g{wPeaCTzo1AC1KjppOh)BDH*o~gW@)Lq-9>qR^lZ$eRn234$UYdjYiB!Ijvktvsr_WixM#BSSZSyG>D@$HLJ&Z5i&D* z6aQRg`qtJFm31QQYoweIsCK_LUV7eyMcYGSh>xo_phTQfh!87s_Y zGjuu~Cf+j%@9)}zS+l30CI2WstOkZ1h{CS3$!KckBm|(3IqM zu-x(V8pP#-gM%^iH?y$k(@fkkegsf_1k2C)V@6gYvdcJz6f?22CO>VH(%T&!Q-=HW z%_uN=+>X*j8!fFz?vX!DTHUS7kbm@Q7G#BdCX9`Z#kg@}5f&bauioE+v&~^xR~CvS zpAg&-S_fYpGf2Cii3+a8-BFhi))ItWWxi;p4+MHfD{-^!B8s?Hw+%|gnj#`1u;7tL z@Xq$#7!(}}6r92Da`brWP%83k`a1q~4B+7bwRn2i34D}RrHE6=oXGGy#0RfmYbt?9LxdW4@-o~Wq2>z58gn3^l<9H=AaZ$jkf@gE4XmK&= z;_2wFqpL2~8uC416qC!bW5=RTXgI$5U?+0?`{DJ15RCExL&Wvgb8<1v2zHb@5BbQV0pej=4U6s z*wAV$N0I!rW;~E`9uxbRQA`(f0sd|d`aK6NRIQ0(x!OSazMYNsJZQCA7>!1J^6@9! zNkAPNEn~9hlT28fc8)G}+2Y$)(3%>|TD*Na4xbveh;mIKlYCuPllDl+;I^u&3hURc z!`quS12JK!rWm_!uEx?4C(tjj#!(!$rl`(udjEmyj<4$uip>1xXsk za&mHVuz2xey!4l46z2xaG&JFOMhSkEbQU@v1{Z7l)fjZ3Bo0%u;_*t6A7cI36I!ZW zL2-{0NUWy5z8*Vw?7$skr(*ZceH3RDRu8;{wYQ$e;IJ|!_p!B}EvRes$J!IA$T-*+ z*&M`*<+wo{fg+GB((ZQ1%%g~tpP!GFD^_5^ya$2EFbp0Lj=i^Dz~e(sppV2G`(BAx zf2ukH3%?nF`MJS}qSeH(&Q0P7PKiLWg1uWI?j$+S-o5|Dtl!SXx;1YyhaH7S<6Dq9 zrU2t(&RY(&bE)PQ4fdQ*MEd?1yjkI^bp0L}ap#Iavb^8nZlX6KR#QfB5_d%UAv?Vsb5c(sK-c(_I1-4-?<)FZ?*EeT%&7px&}u?i z=K*m9qDh`lk>$Y^hIky-K%95-B%WKg42vG0PpcV7ar$8AP1SgA zq?+5baw#RZIWiD4kLuBvfhLx;Kg2^&G_eZw8R@p?8!Z0d2nob8mGRL>A7av!S=jQ{ ze}Kf1xYs~OA5)4ciDx>_Z3>y&(53u6=Ti0%EkqNGKr|)sH+gEtC0N>2iN=No#aaYb zt0^fd#;dDVVeSLJR!$m|9If1(UpnL>hW0IWbSWO-!Q93fe6DI@vmk*yQsfe>q8vY- zt8DxF`YKZ%Sy@?l_~H3jz3Q)WlM;aez8pxhx!M*)2eleY@roq3dCYUUjWe)mVM`tK zhA3J3F`blq(_KbDNCXZYI*f?E22@s7V#j;$;n4;2P*$r!bab40l;xi>HffL^;)CH~ z7nO?UW(_h66LIf1{jk4Qi#Up-dYU&Oix-|UR+TExb~v1$|L$Wf{$bhc8pMbi8qFv# zkn~DmKy+ff&ARL%S5QIISeIQpj`gY?D}O+q*_cgwVF2wlNLyyB zZR-&22IP6;HSNXICWj2|S4w7#XKw?W)$mb2mr zI&BRM+}9rq?+EG%GRWSP0?4&WZ`CPr1Wvn{J?L&#bhpji6oEyoP7CcNNM^i}e2C&y zDm9&i%K?`zcTKED()AZC zT@4iK`YXDe1;x7lk~e2Tv99!*!2V=B8AJ*$k+Nc;gzU!G1OopDK88pVXU+&^00000 LNkvXXu0mjfp}fmc literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxhdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..d699dc653ffce97011ebd1566a39769d067da2d3 GIT binary patch literal 4826 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 AF8}}l literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..ded4192bb95d421dc493f631fcfbef70053cc453 GIT binary patch literal 33683 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..ccdd55661e2cad99ac7381fdc340b9a86ffc2aab GIT binary patch literal 26446 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..304504f96ba8513795d16f2372821ea4bb3bfb2f GIT binary patch literal 4015 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 Vwsj4EwJHDr002ovPDHLkV1jxh@Xi1L literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_orange/splash/drawable-xxxhdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..6a247917a2d8ceff85ca3eeaceac90c424dd07da GIT binary patch literal 6838 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 k8 + + + + + + + + + + + + + + diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__1.xml b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__1.xml new file mode 100644 index 000000000..d429418bf --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__1.xml @@ -0,0 +1,10 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__2.xml b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__2.xml new file mode 100644 index 000000000..be41663af --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__2.xml @@ -0,0 +1,10 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__3.xml b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__3.xml new file mode 100644 index 000000000..b91965d0c --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__3.xml @@ -0,0 +1,11 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__4.xml b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__4.xml new file mode 100644 index 000000000..bd8a269b3 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/$avd_anim__4.xml @@ -0,0 +1,11 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/drawable/avd_anim.xml b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/avd_anim.xml new file mode 100644 index 000000000..6a569c5b9 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_orange/splash/drawable/avd_anim.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/src/main/resources/youtube/branding/mmt_orange/splash/values-v31/styles.xml b/src/main/resources/youtube/branding/mmt_orange/splash/values-v31/styles.xml new file mode 100644 index 000000000..c7462f74a --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_orange/splash/values-v31/styles.xml @@ -0,0 +1,7 @@ + + + + diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..d947faf4bcb91bd3b028a1e97cd18e9aad32da33 GIT binary patch literal 4106 zcmai1=|2;IA9j|UNv^rCFyuaR&xDdWLI}CfB^#0)VYZ>oF)@lYR|tjNLRjuQXDQh* zU6PwQet!SJ@Au;SeO^2-p6By?o;Od54aA&-6~IbIN5^r)!qn~zyU)&o<=ojX83d-& z(Q!@OFa_B^a{p6sA>4jiu&;Bzt~RMA8AYsP3AtVm}IEyYzEL$wY{Y1lf&)?TyPfX>Rd9#!sg-G)oce0kv+qlWa z&zOvXD?KmMuTKSd71|0gU_5ki730R<=Hwdmz7%GOH|%zC3IqXQU?;NS(1o_WX@^vY z09JOg<$no`Z2lDyfi4T_p+a@6$Y`i!xNoJF$kxr&-I$>D$$+#H5Ien@3dcZ9KRm9W zgjoa7dofA%z5f~YIx8F;&pm7mf7z04KZ;N-`5>@n6Ra_9@j9JODi^cN9ah=Z%x2hw zSc<7mGLcZmS?pCzuE3dl4z6&#$qdt=8k>W^gu0zBovfNp{#WGkfRK%MvOP9Qbv!eT z6=?a{kyVf#PzDpPG-9@< z<89v4bMuQ>?*_I-P|*J3p^6x|Pe?ClH99~NXr0A2O9uP^-%of9(7VM)cIicKjW9sG zWDvB%Bn;8c1obn;o9Ki#=UvhOXlzq$D&m4dwB(ziG9$x|AWDFvP6*2y$2p0XnT6Ce zBOCeish0CMk$bt!!~C7UVInw#b+HU1Xk3QQonk0IYOA(;Y1}kfeNhe`cdd z-j+Sq->-6CH(yH#Hz9Q^AxI>V8Hm9B-0J^eXiy^l*ZZ2ii^Lki_8+5K_X{Z@*QSA- zai5m2v*w#_GIm$G4h3dmT5VUyO|*+#gC#_1<+Xd}ap$BAf%y+Eeb-&vSY&QzyN_^3 z5t5$srX8{bz-Z!2@bhNwK}iP2pl=VO!lqwLwnaXeuZJNP!hdNTJfz-{bgNrd`ioWD zr-l8)XWQk#oN^jnq`bjHHF=T+(E@t6&<9X^QFk6A zYSD+CjA`NqZInb6%Y9+R=9;bt6&T?xi%wD?mYW#^kFw#=rmWKFy>;?#=>Rco6yN#Q z_3EtkQFZ@l%z^lZCOeU||7EJ@2i(f@4U`jtJ0UpM2^mDI#NGA)hi2ztpB`s8tMJ6# z)AO^bZ~^Ce3hoJ3oY&=QW%BB;V}(W{t|p?uRIs_CF3C{aCsx)$lPf8PD?mD2o;2O+ z;GxF`U~uEyLA*X*p9`V)l?*P)s9g}L(0+fvg4aibVByTS1CTG)w}>4yJh5^>JUtS; zIHYtQvqr4s*OZc_TnVB!kufJYs1$~}e zkz_XVk}dhIdBO&3o?xTRi7O^l@zzyKob0<5;xl}IpNNgK25@Yv?v5q6NIb}7jAenf zu*_OdggQA>CC3O)Egi=l2GMho*X-g>1EgORI*i)|Fm7MotwilJ)iWNlA2N_P`Qcim ztfWCBvka(v7rTupHmC5n_;ap8dG>C){LB zmkqvSz#+EQw|lbz9S|^lx3@3qG679<{-+0aEb#m_7VJItadYEw^%{>5pSzHew}B3q zSHJ-^L)YYc>=UMy7`h+r7vIh&q7E+_QZ_!p@->(mIpzJd3`2QJ>Z?pzAO4je8;P^) zJq>KlZwtoh|8bU(Q4;(en$k8b+r!0<+he@FWFMLH^$od|^VxpSI6mdP<1LyRFRHyf74Og!pCio%-~J8VYB;3AQ+H)lYgRBf&kkAll=Ymsssk-S-EB)((KweuD$ zxX_yd9JgzanA$o$PW2iThwnDI8>G?vK(2HH@VPq-TnXz*PI0?QKgZ0AOaJMlWuZdh zI##)OKn*6yKfak;|=wUp_%yuJiL+*5AK+TCC&{kZvm#lP^|mt>0X3-t^^) z!|QHymZ3hicB_V<@-#h|=g!anRY0@m7c_oftesvB6X2^lDqgCB7!Rg;cMX*XCJ#97 zL4`jquwO7S4YlNV zRqTP-9ftXpKE}J(BGghxw?g{AS=LO`#7H&LecewIbV#V>5$Vp2M;{O-#1>KVW5#eC@qxyDNKVj-(#jEk4W1 zvGn`GsTR9gut|E)thP~k*9Y>&x2|c$@Is3Tx!NL|ZI3JC&UcISEdp>+WMbcx1gG=v z$_+FN9*pi&ZDyqk%+-D2NZ@_QWJpoN&?GpWb#@&UBo*qIU-mho`Df;wMYNm*xCsCo z5igpG?0or3J^uP12k*Rrw~=Qa%n6zwEc(MsY_}H{T(7Ov)5Gr$=(m)v#K?!(CdJJm z6QDM5&hVTc3AU48vl2nk)e+*3_fTK;!7uO0A)uy}DK7}qTRwix!B#0J8&tjh z@0%sOHNQ8Jv=Vf7UgcE=KS2DzVf*S?!Wye5`=oeNp;y-x{>fwbKuOlc%IK zm;oj5S!P*|gldm=#NZXdz>3YCG-aR7SoLME2a)pv&#y?aj&Y|iq5+f~+_qO#o-Uqu7HyhLM~N>FL}AvDJWR`HM&cCA6wt(^KemYr?>6Np72oB zfnBGjjmd|G5S1}oqH+_W8LE+H_Pxg8Z>AGvhbrzj>IAavs=^qWr42M4Sh;>@M~gP! zc_SE>{XSwCp(g+9<^ZtBdL2hp78lZmW_xxxs||JDfR|)V@Q`$JYRvBjCBnAo zRmY1n415I7RKj+1yrL9gGHaaqX#C_FTEL3;EE}$RX{IMp>3vf2hE33g8VCfSd5d%8 zGjLJ3$@ComOPOzQb$H9$6~m~aKk#b`+sQEw&YU~}yjw&gc07o5vtG_h@;w)fj12?a z5>zV{FsD9OD&pvpIP1fCser|a6 zM#qokpsjI5N;OAe_NJV4h;}N2xxi>qrnTkH!0wn)CXDAw|3aH+){dM1&|GTaWD&{r z9K~88+d*VzNS=W9vHfnzj!f(RNSgKt0Xat^w+2WjgqhcJm)7a~qW>C;Np#Y;e%Tj4 zn0pW)@+J2bBFlimGq=`JU$p5rP)9C1A>OB?OiBrlzvn8+cs^hL!P_{u)xBIf#@#(` z{Gz`pwqxW7A_{%y1Xu94bo2$FOadcBSSv{OX6L^v)_qo}H%B%BMP+lFPf`@rX<$eP zlM-O}%isau5Ugo0zzR^tkuVg}vMdfXd~2Tg(WoCMW4Y2EIopphIs#q6bVAa8VwT_# z{sFc>c;ldJaj1A`$Z00V>V<;(aj=Zu6lfB5;ey8PXd>$Icft^1nvfivS@rP=1^`U3x`IS#!1qKE{)XSbp#It$IA3vC?t`;#7>^R1dyc~C|4r?5`(4=XW_igu#h z6P}JX^W7*d#AF92?F+etn!r>C`>9;}!w<7!kyw$kXePDugX-@zdDv0Xw0&X2amEJq z80M$HZC>B{*QumUyVETZLQk={;UnkMMfjH?DT~OzQO;K{wmp^PAooc;1 z=Q=yqK>PXmg{-H>OeOHoqGhLvQhIC$=xZbXE;epn%Cpx+J|7=P_{uV`pz{19Rqj=o zxd36PwKsrDUNqIeCqUCxDk}<~4qdp|-EPu7>aGPCh6Z98%wJo>VAkyI^u^j3Io0>A zyk4aaVk1=-uGUe4tVM^`1Z9`foNl2~dp}0FrXK5%dJ~`Yguxr1_ibPWwN3br+|P+S z@uf!XG>GO$e*feXlZv(Os{kt#o~|sxW_Fy$_&0PKH}%szA53Rb-!a5&Vtb?;ja)|# z6-g;ZhK0S+-NDN{b$F>Gp*XJ2bSgQjIt)h6q^_#Ye0mu4wg>;p*|(N}3Cn+6>Cljn zLr9l}uhy&9u$x`{RJk^xUZEs%fyiJUVc89N`x&6l4v1J4>gB;Vt#7Q zrB}C}leJ}|$f+>tI>z`~yyxng;)i;UA|=LcX9C!T#Q@Gka&6l(Vwr>cU6V&Yyk3g| zTTmj%0AltD9`^SYB3lK;jQx<2W9%ycSZU&dSeSS-AyXeS07@``u0J?5A+fAXLf*HQEu zm3v3Q6B zrivQh{sr&*!}HwV?mg$8^E~&Qn`mmHO9QwMAR;27(bv;5`-cPnMvsE*-^PxC(}{@a zP4%@jEMD5}6;Zyl{MPz$w#YAALeL?_lvD~*8u1r`J-$E1(jO9(#90&<|?o?$O zfZ?vDa6gCA8$}nAveR8KVeft6(M(gP)liM?Ax9D)voJaFXvV!+K4sHZ-~7V|p*wyk zB8qB>R~)I$z-I)SCb3B~CmHR~ClNh(mAEE2!o**8;uCxRAZHyWU2Tf3v|+vjkRa=S zmtmNaQs*YSr32DRMO%QZKf1-i$PIiXquqeT(o##Mcl~}u_76ghQ-2>6zyL!>0m*#o zlwLZAzz;9Nm$5v~ayc3?Qa!G&!c3#iw)7<=?fmC)=rJ%slija`I-rURvTgS(wc6|?z>Q!Q#b2Oyt?b~lS=lY7C9_0jZIQukxSDkllP0eL@XZb;f ztac=Wk!}Oo7e?0_F_hF)rimd8275jG%QkA~X@b9EUSI}Z2me57hMaN3Q+W2X_d@1^dHS|HwhCW39VTN@JlU|D$4%4z?-0|3(R5-)m-jxgfJhH+r>B*Gp6cH zs)x#P;<5B^#Mf$?Q*_P@NjT}hFrveygg$pFJKFlgNWEop_ z+8+D;(baIjF|3`&hCJc-)jSKN|4M`=OVIR$%xl zvq$9)f{%aL+r;g~yb_#KWnP@Mvaq1m`T}BNs-UDX;*fSt5oe-! zA@$KAxq}Ub%TmfF10dz(i_jtT6=CSi>3k1#jLtt~^}&6gn|q1v?X?pZ7CyQRRkbVr z5clzn|9lyeR<@eyy`4l$>RI#lt?aIC&WRD{K)I~04~^W~eHp3ZXNw>bH}#IK8{$F{ z&)Pe1j(-;x@V)|FeY$f#Xz9Yw!1d3%k*W0|zrR-($2*&kM&2s%WQC}~#CTX|*lFz2 zkuGL~BuGK!NBe+6A)dh?NYzKB8USl4jw_JX2B?3awI)bdL%og#<>HA)~HaL8j_#xsP1)m*9UW}*#zs;qO+mEmU;gv(> z`?(qUyc3Su^4vtWn(z7D!2$-J7aSD~Ro#w)#;G8##K*5=dlLK+>I!Nx zknsz1#3I1q8mZFu%%-5o{mFWT#|JwZ$p`t|G7j-EMpKK46(RWA=3YVXo{KhIaro1U z{a%eW<}e_)8WUM}I)al|Ud|4ccVhd4XX+WaH9(7fSi?lNY!9X4?r9F&rB^Th81(`#Lsx3*PjxvE$D!ne>({x0r=BSFD)*Gdv3&CN1Bqgq2$>J=(iENGsK8A>WM2I5 zR=480#s;sY;mn`#nPT(tTe5YKlRvm^Io@w2^}Og_ufOA9eCRDH>4uVU-DU+}Ly+Fw zSFStIw=(To&IpfAuZqhgY-+gjEbAW-NS_T2S90#UQk5pGD&4{%kEL= zmlb`h6}C$$t|%JmKs2DT^(hH~7=jU9l`A8&h?Ve?nT0FlW=vXhN6N4XM}}>yJM0c; z1lS?ES^CQ}o&a|}iW(fu66ea)$Q1y-$IK!EC?x*9Tmi#&w)W5P2}LO{`(T2vV$QQW znqra83T994+LLsW4jk9VL%exvc1n*s(h8CeJw$e8GW9I(_J^WF@Rm(p*Twj; zt_Mxc5(0LwsxaHR$Ee0*y^}z{KJTs>=mkcy~QpS!jVQ(>&wUJ4^d3E@%cnbaj~UZoyqG>JfXn8=*HVQ z^+{F(t!im)jY%btimHWW*Ee%gi0dk@bHJ`x7Aw>tMMYgKxEX-$kg;|NbjD>W!ktpr zWdqxcy_~KTczNO>C3k8(FLBB>eYXN_=hLBA=h^f0JCZQUeiQo2;4|9Fr-iwVN=ER^ zZzBFNx#@%og}E-}S#YsBGSCg8r?@q|j-{jI>l z6Cl5PWI<|S#DJgDXQtWr-UlB7FS3~{o5DYJ&>VkeXrL+Vi3g5)XmL@kUv$ShqRCjAOX8^rb0#`YxDa^eSo`pR~g-1t0(HECWpZF(&s+vaMvjJ_Z-LM1+pbTub9p zdJ*t~WUElg&0<@92d+f5|0j64#}Xi4?^R>GM5&y`NQb^%WJ!0X!t1x(!TA^u;Yd-AQ zpz|<$GFc5V0pI8GQDvZB(|4Q+m}i$+`uY1|@lUfwZQ8V4jk-;_7vyd8m~ORn zc$7zF;*`6t%Brlxmkt~*9tY&6OaZVIo9d{tNSexr%{OUc_rq(TI9Yjl&(_vfUomWq z@m?I?jzp(SQfvCa1GstYyY4n$JhsuG**L(KnuCp&`F;ZZBn=t1=2!(C^7~uU>393_ z;YKQa(n!FMS!c1B#BI6pg;EaZo&#S>SfXIiSUt%J!Wv8aHd%q?HII>jZ za5#{V5Mh#-oOTI7Ksq6j7n3;SdBNY&ZO!RFR5}#+?wLrpB~B7@Z3E*4xRdq6?YIXT zl&|A+rSQ9xqawfTGRVj3GDpb;lZ5U|xbmoSo@Opdzl<|V70-!&DP~lR9%^b<|KuD9{35ju@4@&CIR)5w1w3{D&=&=lujcRtRFrbWCAy&?J}j8rr0WeE)YH>?zsE=kLy^Zc&9SCc|!6;2g|5_P#Bk!Q0$*6 z6dlu(l9U7fEv3bGXN+>y9V&bo+8G(_Dw3EA!z1Ccb4@zz$RRT#>37KzTbOqEJtRG? zuNp|##LbA8Bh8{uuFS(%tgi%?F)CY@xT&0Ww8_afli7D$ftFh9y7A{tY?YsL^RTqc zy{;acIr&oWlP45NUnE^*?M2vq^3&*5qZOd9o3*dFCN|VQDw$~Z+2V7ZG|GtaI;XDH z4b`_dueEx5n7X*{)7RJ!LQE__;>4)KzEcjy7e?0BNXZd#f3C)pLSLe>7R8>L@%P>sZJsIbSHw(D^h0iFIlWh zsgD%j5sVI73p~(RK^^WvDt`>EIwD^dKIYkCKVSt;Y_7x~LQF!0IFVTIsKd|l82#Od z4$N=gt)u?c)qA~^4qTmGxn-Q`3KU4zfs>>5^X{{5YRL~UGVZ~>(C&wlKY`c0C%ET0 zs^Z!Xll<12HuXo75o`TIl`2t|rqL;?+V*B+aTc&)a{2*Ej=G6EK<+l>IgNwmi{;}{Sg6QL3^C?j0`9aBv?SF(u3dgyMGS1y+j4DbKm7Af7 zmrCjV3aN^_EAJMopfDJk6`ANnKfC*;5}2@hASjLNBh35(;|9Zq>KdDHlQ; zDtEe_Kf_e%ecp&`y}vDi#_brK^Wus%?p)3U-7s^NEiy-`v!6dpSS4K0QOte|m~q}@ z;_QoVpgs-(X}GN@o1gLq$MVgo^Saj@Iavi%UBu?vkC$EK(2A99k4qL}@Z?xI%{%ZA zd+VdyZ0>Rj6VdXutQZE0zD%vShJ5fzGMxpH$&eZ4S=Dg;|65jQt}F80k|Ul++vR`f SjQ>}$5b0~1Xw_*xi~b)Q>WyRo literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..21a2d3d0ad82e53b3a227231cfb4993aaf2cf41c GIT binary patch literal 4085 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-hdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..e246d29574b2a0892f9f3769540958066f7b1cb4 GIT binary patch literal 4677 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-mdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-mdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..d94b6ef64dee4cbece62b2a6d95974e0efed7c1d GIT binary patch literal 2580 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..e4aa2badd19a194d88d56bba827c8339db2ac0eb GIT binary patch literal 6081 zcmbW5^-~lM(Es76qr2I9Drw)bv$~+8hEZ1)_*U3AOlq``5GUH1!K)m zu5FdR!CuY+3K}-_^@>D{T$N66n*I|Kd}DO3Qpb^n%Xv>#w-$2$IQhC`jGJ3ZYJ6n} zy&IJ4vp3!<=EUo>7BneyCc_n9!2f^KH)()vR?+gasA-BK+yTPh%7+5G%*OMahBSB$ zjF1TEnc5URn891FNTG;;TNY$U3Ep zz?&|b2t++?Nv0eRI#W(ll#kTUo7PS7SJD>*@JBqsO;-*hyCvkNP3B+lH6;vUy8zPw zst6!1Gu)}15da(6aPb|T5l~4Zmr+$z_cD6K4dKGD=X?_R z3lBl)GR)m=8HdMH7KQ>H0D2;dKQKq;Bq%ir71#K$gC}h}Snl zJG`a@yBKYVW|&(AFb`My&$Zx=Jy)-lXNwn2ic)#FfnGAR#lJbRGq-9~!koDmsL7

i9P#X(fCj1q=vI6(n4dqJ5pkIGL; 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 JwXzNDe*p4mmeBwJ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..06d965d4fab0b68aa5432193946e18fee0e19cd5 GIT binary patch literal 5594 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xhdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..f090464babb8db3bb5000c04cd733b73c63ed6c4 GIT binary patch literal 6378 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 dr2NQY8@Qe31cbkrC%soX_bQLsZOAwoTI(#g49 zdZEq)mt4-wbIC}>%Q7{%TN<7Wej{{|VrBucivT;5Hbw!g(VCx)%)==m=tU@dqZ6x$ zFa#~)CjzVTvoo*?K3Ty77ls3!D5U<(^Wv4v^4hGw!2cAT8(i@PE)Ta#GkK(m%uFpm zA-t3jjE<76!|&%6BjE?=6cV!S?(ibtBHQ&|&XHEQ?6W(wUJBvMH@*Z#Sus=b0|=+E z(meU0V)_?C!w-;6iRPKOl)MB3a2J5b;!XiVi{3EG8!=1EaD(1 zil}L!uQL==1b+u74iQfnFH41yVr`JNa3$GkmFLOVCYi+j*N=#(;QA^lTL=hGw2m=JrF_xEA*lIM*#`=nFeq|+qWjRC7#sIaVh+?8#vXhgim-plM)mfMMP~7|H3ugwG3BmJxPEYS1 z!Y&TDGsnR-4usjRcp?208oh?b6F5k8P();J<|rgR3R*C~^Zu+MwSnLl3FPWcW-gs} zwD#E0k_tP$mDJ^%<7{v-1?5{M5E>|atK~+Vw6*805R*J_6o3Kl!dj2|JB3Qoag?4p zl}B|lmm|9|ZQkcP++-lm9=}_X^%OA&Hbb1a^GmwcSCD)>KcGTZO869dV1 zSPD|U+8zrddT(l|?1+5ddMw2BT?$~q#m-HlHUg1A0W4&C2kS6_c|u6Eet!*PJyId6jwU=H$zQV%QTJvC))!c(1-lphc!|5W_bTy!ap3T5`YU zDId$Ea4GF-lP-!`S(Q<0Dp8;{`DktKRIFFk4&#PaK6#bZ{~&V0Zz9Kk$thkvA3tUE z6D_TebW4#I{&f3l-W=h?{FQZRY-)Z)duElQ9;`c9L^(8CCt}8}(Sh9=lRSB>jNx40 zyAm^3E2ejSpetymt{zw^URI(rvX}T;UiDlmM3Y9Aefxt1q_Ckt;r46dzY<68a+w#6 z?_D>oqrPB6!`g_u=$18T-=O9S8(M9H4UPpHJzDeQ<7$kmkLF{%y_MI0hht|Md!TBL zQGH53sxjJfQBf=@+$%;YdPtIsG$2{VPlIQg$T{gS)a?F^Afvu@^H|tZ@zH9TM%S1? zi5&_?i1(T^>8c(C0IGkad2N!aogS(7PsD`|8dmYT?lMrwN`gxNS>DJNgTWRifKfpvW@qIA|#2WTDIoglj!X!X*@+ghWhz2u??gMKfO z&$)(hBeaNl)v&>S zgQ|5#>-v(K?@fk}Fd#>)4rBAn-bRadgDa(Gz6VZiClY*dxP)1?P(7GH3ETiSzqMnL zrhr6WL@nG+RLDejgBHkXKE+ptBpe+C_U4WQGS)DX7ceY!XfjB7hD(=!KL=%TdH0JI zb7(}_!3WegrE2;O?AKp?zt2)sm}(j83vRHJiG}h&*PyLAC-FnIWgEx2d!gW+a7(31|^fzT6G5y48d{tlL91STH)x)U) zxhW%9SqvjmGxHQvoZ9hVb9`01tsPL%?x%ij6O*|2bB&I!t^+$Ize2LK4?fP_MX7xAtxZImJ_;QKv$FJU;CIbD_dRb{YJ?Qi=emc(`QM{NTs|8_pCeoTzk))j4VTC!ri)R6Cj)*!!kfz0pE zD>^CP@C|op5-jJaBc)7l`xe$W>bmy%k(6ua>LH9~ha* zvU9Nicpsz{f5~+nqF*|!`vtyIVFX!h%br7=Bh2q#4|}MG9J#tF=~PDa?OB1trOXZ2 z?{K;dA{hevNn4dbv>_uz;4t4`_c+U9M7DzemA~+gc{GnZ1xYv~OEdgOO^j_y` z`gTPEd*$ariZmGOqIcdU5uXLa&@`q6$9^Slix!|KMXUz|8l>s?YjK!_!XF=Gq2(W& zX`olSZf=Da{IT~*l`WSm7C2pa9fqXWk!c;PhtsZvBU2Iz=9A|+61ftFR~rjyfi%UG zbmo~EQ~6`wOvf&ZUustrAn;N@LKalI7l;Mncfs2Rf4hchTkdM5H+P(xORR5(*?z6} zBciT6^?RAF9SRILCTqf$7QV;WQ3tu|U7CxdJ5)b1K+p4{yyKOvBcmt%&)Hx<e^1 zq!LJB;~S@~8)t&=wb{_;8XK|JEJTT#=kgLt&ZDgxtH=(F>3qSnC7fjFadY87CYySe zmV+3w0iAf`@%$kUZhR02BlBO<3OV0RO*I`!=S!D&3r_VXBq3$R`X-Pe%szn8ITu2s zNGe!yM3E{jQ30ym^7m0yqm)DtCcEzccRA`f2e}tgIj+1Hkgc?DJe68q1^15_4i@-T zqsLyZtyWLLQzn09Rk!YT`z2{e2I2*Jt1c=)Sku%*n{Mh{KORHqfAYBBa`^A#CtvmY zjqU;)lZTHYUjQ3bkMYLAbF=D>ZUjLmGi-RPB6!IL1(Bg78a+K7*42OWBK+j{eD^nw zNaT)uI}FkRS){ihpyV(T>2-#4(f_jfVh*IotoIsP7NS^p{2m#smL6ZMWnFZdQ37el zChmfT7LyqJyn=P#;i{#0oqoL5Y>3}sPqY#E*BeQYF$hDL zsZBe?vfAnq^jb;men5JvDaoSUX;x&)S&dW5ihZp9{5}n=zz>>H=BR-8#`zY zm>ze;>y+&4gfyb_AZiCh1Crl;sM~FTIR?i&G8Kv9tO#EY>u@SrHC+wMSkU6jbqraz zPrq|^Xrl1lfP}a68LJ7#3j4_r(x(tAPUvh?p5VopY->(_w!Y16#@W@?Tn&@sG95QX z%-x$Vbp z@xP&49{EHYB~((8W{o^$8S+U46&ciB5@5>%Bm-S&Coc+5GhS?Wi;sr-bt! z>!mPPT_OLgX|~MhFVW?6*6(&aIkj<5m_eU$;gNb=`pWN1q{{VlkYf35<$5VfRWWwV zd90&~FOf}|Mx>^U-!D7f(*It7#wzi%?mOZYPiVdkK)lymn~G_q60*rO|1fBmX&z2T zEl9QsqtcnrN-jW5_A9QGZ5^)C^=_Ru{S_+KIhotFni{jp>bP+<(?5|6#6mu(fGU3w z<$KJ6OzsPR;mp2)y+XGf{Nsy^Uw7-1=*4+jD|#?;RI1m75mwpN%-h8W$r0K*TLuYz z(T@_ONtAVYm0pThU4g2Kj;A%f-8`EZw)VPuK;_T)5&?}&qKL=#IcE!uK`J{9mG`~MXUz2ZS@ODWo^>)_ zc#i`yv3IdtB~uarxYg9;QcO2jg1zGX8t)?jpqUOl6hQsgbBtR$bhKb;zQ}zY^eAHp zZmkmca;f5zI;M2xG+XNv$J+9}n+i6iqlV;PkHH%jw<}0PB=JAVT|COMH)MOgfCJaC z6+f{d>Kd8PBwTtX;e!kF^MwhyLtJ=FT&l`8pB;Tvk$rJ%Tcf>0_@LY~ObGy2S@(=( z;%zwNkLoAFHp45olv9BO)*5|sw;qY^Kpk)!U!~NAhmuAjA+^k)yj4bK{qwc6-HbtM zWXgH(Z>vxDEycLBgfE7i^7GgFNa~6U^^YW0hi#4i&b6tW8B-LFe8D_F*?tka3nlem z%^%_#%BQJ8q2Y{4m2nGOS1jJ1rk8SQt&6D>^c}? zJpV+ES-pm9;Xdw5fErb3Dru0$Gg!kixgNC`TJqxnak%O%0LtG(uS=4Fyiyadb}Ow_ zSW(&X?;g@Ej}{1<@$=3>*i$%Zh=CwNT&t`46>6Enp9>1&r8?tIZe8j&931izow~aT ze>n+Pe^{_7yAw&U45bLHrR=%dsiy>4VL75NTL_y42>KUKqUP=1;+7%0V`W$SWc+lA zbX-K7N~UXMxZDzf)PwWQ_H#ont$qSy<#h;z8usbJ=SL;>_Yq$ER7y&zNkjCjKYpZz z)u^@@TV5UgM)RH1zutQ9w}}~@JmgZ>h4#0FpL=o%Q{9WZkNp4`*^j>t?7cz&7}c%NYtv*VW_tn z6~{HLVvI9myx^#3SjNNCj@$Jkw42>T1<(hL?gw|Tw=u}KX5x8dl4+Ds``c~QezKW0 z?2F)8HgHa5(WyvJqf?@4F|8hVVl|UU$IXHYhI^u(w-+IZVAv`+Wz}!Q@ZEn%nHkeI zaggEs3~yJYln0ihh@=NXp2<`nzUTc-3oYfmYobXJ?sm%KHK6CapOBVXB!1f5-MW|W-XT~s z*Y=~iNrbt};Hrv7(f5$!2Skw05s7HK;S>N zf!jtGzMIW)&s(SRLT492K+^R~?w?Dzp-V!v(Y2t&Vx-0M&?zlJZvH{s)g0zY!vLxH zhNIzW?RNa_qg2~upn{F@;8(@be|Q%`uq9^M^j`5au&hhNlLGUx(y><6X|+H})o|(? z=<_0j_U=Vma>YgnNXSVGm91!Zx-W>5M9%zwWQ73ZqW?xM(*Uf??(~-H-=lu`B|>5$ zhSp`jRci8gXf2pZit7n)m;6UxOXcuJ-S40--avP)k^^y@9 z50jf5AeoHXP!S6RY(7jisi!KUd2RyA6@9270bc6kL zgmrF(`N@0XcV!Q2w5#P5P-ji%X#m6t@x=}^VofrtJIF;AW(lZJ?z*z;-eV%>iwHBklBcz@6CWg0ESccF+7ots&Y1` z1t&5w9jED|qsxGD4cy3T(4HCm`MV(C;w8yL>IDe^#&Y9-Jki`>cW(b@cl-G*P*_nx z(5a5w@U9p2-e5h12{Qa-;IE$6aqdonMG9_U&8gg^h~G44q5~ff8MLeU!wK^%zzMwC1>` z4OsMUsMuB7t~^)C7g-a-gEW|H`sDfPln2M27^H`j#}W@bhH0)gNBGu;!!uWV-UXuN zpp*Th{=WLtS+8W;e2v)|!8NWu^{MWbYbaX)eb#vm1KG)@kuM;eW7f#ql1o$HXJAKC z7w_3U^+CL20n$nd3L+()X!^;DnA`b&REf+mhqP;G3+H~(5p0Wj=3dX?ioGj;_#CgH zEqDJu@|{*&ZWgQ84Wvll@^QESLA{{6f1d_iLRtMJe1dPs)+2aHXJfHJbwZBlIlSzV zf6u=9>31iz|92~JD>5fN$dV7o9IAJgQc!GIC<^!;mGCZJ5SMZ4-3fQm18;X}9!G=g zctfeL;-+F@exKKC+{5w0$4^u+wr0I`b`=vUGy_|&ad+G$m*6GO*gl!u@VoT zb1z4_!KPU%^M zzmMzavSmIUXMj@V8d}1X1WfIzl_R-KeGkp#*cDo9D)3&Nep|)ua+Ot+Mps=g&~xFu zbTPI-7VG}AD!-vsdi90y*`?f$a7$gMcB7D2#a)M@y(=F|>eIM*U)o)&8y_j6$L^{w74~E~Lg>2HPoYa(U2HE&FO&Yvd5Oy_)F% zeQ}l7RV7syX|>fjemZ9qH^xYNM$f$^Y68~N({5;93p#FyZ4^4R)O4 z&m6PW8;3p1s0-dD`i%*Dj;A>#P7-T4U9NN?-J!~EwWY;_W5}!_=I@0X;0}UE$%$*p zyg0I|+ObW($C`2ok13|~-BXKb`eO8AEC-A+rD2L$Idaok<_7zbt2~A|xNK}^N$-0j zOh0zdyX@RM#|${BOL1UZDNTB4qA%-|w+UY#cVBP4ecaWqq|UtpSAMN7KH6wq`i3~m zLs?!{P^|LsO@ijGo#$2H5-A3)F|pwjC`$n?!ExUMKkvHJy;>J-6AG}86N>9l$`>y< zp3D0A;rfwp`92~}s9ScIZDK?K+AQY5j6ONr?c^(&XsmFq;4@(oehGjsl~!f%W_Xl% zG9}U}-nDb&lKVpgS!bYc`2mux)4)HUdr(S5Gp7lbi5A_3?;G}RJe?bEuH|D5vKwQk zfJ>vZQv-D$@MlllE4+~MmxX=ZKz$;R&-|t!XO1DLVch}lnipcDGakLW4`Sj(IQo|a zC!>#zJd>_^uGsgI>F`IW&F?dB0iZnbgx-fUGd+v5t_eOJyIkl5ErX2n4X6`QP~>6Y(M85tSqupQE9j6NQrfCIY0QUdgdg{rc#)WlhQ! zL>aHRet6aq3+&aZ-Ot+wP2dNF12&jI=&hBQ7|FJRZxS442nOP@h4Gl;M^$X-9r3;k z*o!tA{-?5rxKW0OqFX+T)C#X`5>YxK08oTsYn3dQqK_>V&bQ92sP&C?^=BRWmu>Zb z9yJPJxhV=-#0eL?;m;ltn6ZeB0wPYi8Q^;X=oTEI}s2&SRZfeaRHH>SGm75yTM8&@TIp-wf3|@j^lgP{ydP+Ae_g~Z z{sh|tJAPOP{j;?}iszS~L`BcY%_#~JPsd(S%6X`ewZiz7G0t2gl^K_miC{1ZI4$hQ&Q*|L0o~I##-&GFUoG&Wv???xHF5zHu?EKouBVH znIJKo3~M@^#spveoEV^UY9Qsz6Nfd!$T0~9kzZ#i(HGs{JWKTN2NPt&r+D$U?4{MR zwHwc-kHp?KlGk*Vre{c%lj)d{A|(%S-r$w+^Vv)R94WpR=a5ZKzdLVcn=qu1yDa-| zRy?1Oj#)Hij(_Hy{>t~pu`kyk)I>g5Hdu`dyVF7*tuRmSd6@hpN(i$oT2Y*(`T_iH tf1HAnEI2cHvMuC)l<}d0`RNJMkH#U0NXj|xIpgJps-mVst=zlt{{xWWLOK8d literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..726025b57dde245c7f13d472b06ee9422bed1278 GIT binary patch literal 9906 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..19b69d6dd9b3fc6e25c1eee1a3e68dc0590c88b7 GIT binary patch literal 8720 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxhdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..efbbcc63a038dde422f8c0bb99233893dfd5956a GIT binary patch literal 10289 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 UX$kku3J9ktt0vR%(e&&806?`P(EtDd literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..69e9de7fb4193aab1ceae1fe9fb8a230f1af2829 GIT binary patch literal 8958 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 W5^26G@-Y2Rvg)fhN@WV>VgCcJ4Gw4k literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5458c7bae421fe099c3aea43c8d1cf4b763358 GIT binary patch literal 9654 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e0217b18835fc34ddc9f31ad6bc100fdcb6cf00f GIT binary patch literal 7511 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_pink/header/drawable-xxxhdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..7980eba145c8c0b27dc8b65638619e73425c4d47 GIT binary patch literal 10066 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..5a39528574f12987b5a2ecadb2a014ff789223be GIT binary patch literal 2575 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 M07*qoM6N<$f`v8i3IG5A literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-hdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..500e9911cd8933fa7bb25e62d3814230a7fb0b42 GIT binary patch literal 3174 zcmV-s44LzZP)ecpV`m=GrOW+nmItj)de&P?XrJ?ETz z?tS+?4Wfvw-si`&=tK4=`;q66nPfKEi!_h|JGqZMK-QAG$?aqnSzYt>7spvf1rZmB zqU5o-oE%MFNXoH}3MZjpPV2k&Fb6k{ik8RRzS&(fMFT(l=Rxa{Wzq^#)k>gHvT052OB+$h%H+@Z z<0{Ly{!xml_cbhT_Z)?egWr6K;*w&Fzjgw0bMx?v3opd*5trhB+bgm2%TM?{Y0CTT z?7EEx{AlxaNOUH^sd4g1i*sx_xY~UI?D``p(^fKlPvA*L)t)S5g>M?t+QnpnT@`%R zQB>4VsoU*#x|{}shYZ1zCC}pSd*&!^ccR%2J=+~qsQ4gRYnj($xYT|J*y4QFX6Q!;O zBFV8MR{U}5ACQug8W3-!uG8sISa>c*UvVj#Tdb)3U>$atffr-S(O;j60(&O(6w0lk zEs=s8TRN_E4nmyXfj6~VdBO=WMqa8IvXXB0xlbTjSC*@ts?d=@KDb;iSS&p;bm&mz z7xcxtmsX?cgchaAn-F7gqR5qt1Sf;JS0E`RMqOm@ho5V6v0V2ltaQ#EFnBFCVrZd2 zt8_Faxg5NJOjepzAQ*uJB2r9D3H1S^n0UK3_#XJh#A zVMtC%!{*ms!!BCUv+*CIP;W+GM-GfG#YjxSAR06ogV!`y=Zo^Bf-aui`Oy;u(alPRw%uQU1Z)57(1n^{gBJQ+~$9paJ zqkyhtZN(8!vl>we(bqG};A0##bB69^z@CeIYf;JG=mjcT2&3T0trMUgTcUL zvj|s@y$pvN>#>v5mA6y(pw?K2e#k*j2gehyp@>Klrv};jU<_Za)>oqvb)2MxWeNR| z2qZ&%s^?f8!Xc1AJ||3Paye|+FeLU!VE`|~e^Z*V((n-moGfRur(-m8CX?Qdw=`db zW0bRrK!0Q9q-(OBLAV6+L9EGSGAZf6p~HtzxoIc#Jz}v;zZNk@7jvdO#5+v^E+;wD z#kT(F%~7yayN#A4IbX;~kWoz4Ux+lEPAAM}Ge(UXNyWZV;!Bo02XnQrVP^cZuoGvGRhfU225-kfpO@I8f7fV5f*zATpEv+h?9vpb;f$kPkbIz^(!b&59Ku# z*e3$XHrs9mNgBm+s;a6mYt}3*TrdyFPryyC0odI10LB~}qKM)2iX#c6WZIv^RpECD zi?BfZ9>wXYyrvSh-A*8}n&#$ayt-x$E*mx;Z@l_0P>_MA9XH@{>ogQL=P7|$VvIn9 zYSN#;a`RgJ$}}GvQIBl(^KKs$fn<|*mqS(_MVx*6_MxP>7}IaPk%^59zs&E0%_rvK z)}v#Ucq8H{@8>@eXK(BQ%r-B*a`b8h_+c zT2z_#U|PaIF;n*nGHEqEX*UrNMRkGcXIHdinZ zTd=@27E6!ajX_O?$^}K2cM2g^V`pyjs(BLzFc812+07|y8YPP;wu&}lK?1okB;xP| z;_6+y@Zh|8n0ePUAU7MSnTdF_Wfo>1odk<5sg>1u#F5;l*t`n7X%89B6n@Y*U5H9<6Ab)X_}3=QN$IlnV*)AH zrb9+-f(6^QRlt&(gocI&tXaJpcTB$(-yPE+Gc(8gF8N{&C!R-ei6$RKw%+`u=w4bU zHpFkk|cjEi~l3odt zkl8EOZ(Xe+8yIA?Dsf(gLT3)j^*iu@?sXX4$sD61HhiB7chS9`@YdT1ban&Pk2X*R zEdSH2TIg!B!TQ&pmdHa~O%~YANK}?byHFg#9E$U?x2~XdkoMs@QZ_XH)F6G9z6YR< zKvYn&w3%d=&Cj|3N}s)b4?w$D*yw8e>1wi88I~)qrvXYR&I)fm0PVS$4-b)Yr{0+k z>7(?uU33@|IjWt#nZ;YS3-1RfkutKKX^=k2Et(zP$J(Jl0{#KHXX6Gk3KQt4LHcro zw{IOHsBI7o+B+DuWnpa`*~O`fYWT!?*>l)2g5D=Wkt!*Y%pW9)RCP733n6YbIaqN7 zowf!B?z6XrcLeVj3?)ye6hO{ZMypPVBM92XT7&M^NOyalRS{Uk>a@^Nf@H=e#`#Zi4ZE38AdcRlIs z1C~w&3U&4oUBQB4oqfn#u%K8cdrV*knM=lzf+q4?vX1P+#{>fZ2RSaHvTxCyt^fc4 M07*qoM6N<$f`v8i3IG5A literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/adaptiveproduct_youtube_background_color_108.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/adaptiveproduct_youtube_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..51f2f5bcc1be7ca150b568f458c3b58e80e39324 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz3?z5#SpFYKF$egBxJoJL{hw(h2;?exx;Tbp s+`!^E`948?v>YBMoP7lS{=52Fv1k&LqMQFCVjG3Kb{^&YO1Lf#o`)oDB#Da_JhRJN8b}1TL_-daP>j;cWkC zXcWOAN#4>#EO~K~apT{W_3@^S?-=Rr0>7CYoFu-TdlP+*()wD*&L0f*_!X0F?!Q%U zZ|Rg|`Qb50;Ab_}%ec+zsmJn2G=UY`Hm5;%7a-5ki5wM{U_dFGKOx?{Ci*~G&z@7T zQz1mvqQP4@sw8^gniWn(Ddw*tI9Y?7qFaxYwk~+uuM8!T0tlTk|e!6CM7U#{WHFh^e5DR~)o zijsK)?7Hw9T-3?wKhy3RGhmiHtqJ030+Qj5_usprF9l;K$aNJkq^{_#R*}psLV7#0IjAEBvd|5W2iF z{N8jl{is@lvj3Q8*(N)5=n%mu*ru>Kz7ijXDJ&*@7UhlWWxF}E1;}Zi@lyPALT0Ix z7St@iMqh(K-pBG((q9<LdS9`U%l_#zpRBY|X77JT}`Nc3=hFjd1_ z#{R;J>}bxYFdl-jadQ9U$pUFNZ5(>sD7*Wgwug{ik7O`!d9jpkS9TjJa?cq|Q#geti7 z_W@GT$WbW2?Z}3*MNT4IJ+ve*i#ezsWB_DbWhN9nJ(nB{{)ph4XcbK4qJ?Sl&wljM zcFnO1f?rwJ);C2mN$o{_&clc+!r0_ug5(8o{hw9sDnhp2$J&p3EM3mKB%`Q$zzyjp z?cR8sMP=f(-CzR%%12n}^6r8B;%nQQrx^GbZ@^8@m##BUfWW#2jvCNm!j!7PEI;cF zaz#$2j^<|iI#qA(nW3!jQw_#O)mn_7uD>h141&IrR>tu_)nH-g&}|-C z#17>%4tt$3>Z&-Uvr43mz{*XQK)`Zg1t%tfV}@W|&98cUXB5p{3zw$W9yiG_ENu<4 zgs(`clG#U<)XF85ItjRlY55N8d%es6aSu=EoWf1*a`rU@$z>DJ!jJ!g3>Za_Qj6uM zOf+vrCbGklHps>FI%#BE2L#c!^_=asI(3rqo1eHXNwkmrl9ihEp_geKP~NdR*txh($ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c0cced3126d18591da175bd882365fec298d485c GIT binary patch literal 2011 zcmV<12PF83P)1Aca^6dx)SwWQoy0&_Icb zAPN#N6$KPDY=RLEJ0(prnAb%x~Tsn9BZ(bXOdK*B|B5o*|O^Wz9G8B}N zN65|O*EB|q3>hICK;hE6Z;|6ke-AelB7Qx&iiU`nbVIiR6mH~2gwG;dNn0b}8o8Jh zL%eEB9nfU}#i#MImh7W8G(Pr`6KTXrt$JtFX#m9!1^M4aB5KU`+8UwhkLdZDZR6}Kb zAlgJ@0D%yqWirG5PU@bd6h(o-aC;O=&Bc(tf)bWYXag&IDXgg^lU)WwNu9B)dO$4G zCEiHUm(E?q<-bqxdK@mdhlXhHiTFqge%~_$i#!8RgqvK!xx#6JXbgBkHGsV@YZ_VG z=tAMy%b2@h3VuF#6d$f$hpRU#aPjOl)f-oE9gE$AG41Aym|6M~_BnF#D7|ozhJ?|G z@jlG~56G%g*TT%>l_iQ9Sp&1ssnbIkHhegK%>M!}4C_lH7=cP9nk!tGD)Q9^WR_=O zYk4lFdwb)ep%4yu!(oVjC9F+koG6y^(q77S!Q=757H`40mq)>3v9RtzLP7#EGc%E# zl8W71w&IlG1~TH>BH1P0R?y62MW!nqosEh3)N~kjw%XVU4TOc0Tb_}w@NY(RLy}is zez@Ik*lae88$SWtcm4oJx(z)pPr?T4F5EIZ)O(^mkr-L_G>%owLl#mPQj&`e!egS{ z#NO}6${4M!Zg{;E&R8EaIvZB2O*KZ~ACcOorlNn}zKF5dFf)G5nC!iG-VD#v)EDcFFH&QuIhGGI4f#eTz|^hKQ79s+KN0n=HKNlX{? z7~qGOBUY zkSdcqQ?zp9Ktd`uHWn|99H}Pwmr6x|ERIAY5as2{NfA>N?29{w zsZkr4%+2+ta-#gmt&1> z2cC$22ggx{_}aJXRZ%DggmjRk7cx?b_|vCOVb=V)$eBC|D-++sYWHM3RMB2dUJ-vX z`aGssSL1b49@;3axyUhx5=NKA06D7+D`XCk(dWDTeDoTcg%t=hJuEcEPb|fh&T$P&YD_%VuHgZQLN8DnBZb(m8o${sE zOG`_!e%(4XQDaWnaVT*O#@hQM))S@PQ)zNyW87|Zjai7D95<31e!Qw4&uiVL9dYY| z(P%)?`Ri~v9jb7N_dg2?Fe7&cX3dxiv}=L6)@*byOILf=z<$3FRm`^a7!~;eT5@-m z%;iEod%Y@D&HfF|d0xhm7OB?;*$>-GN|Bh<67liPuy@a1WWPKae;q%Kg4xC}V_}TIYCd7P%ueexC<``oN8h{}~j^n3rLsK63Hf|1<@RF<5YKIt6cviln zh~)A(r86QU7|ZNdH|w&g&+$BoN*XiU^eykPP<%ua8O2gq#S7+8{P(^xf9rOvBIV)2{}rN5GzL(kdl*Xh?%}S$ zcY};bVa&M(L$t`#ni`Lsf-d`*4=0%qvPvDKwcK^c^Ri98@@=@|x>cTt_>6d-40|T( zg!H_K|3s_SM6C;NpAkn{96-u5tEPm+{D?dCydO1kpgQ;k@>r)Q*_5M`{FWqatxqTg zwR*r0dg3}gv4O>#JZG?%Wj3lz^yG&jr!}xa_;9uh2s*A4{yF>s0002ovPDHLkV1gF1vU>mk literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..c0cced3126d18591da175bd882365fec298d485c GIT binary patch literal 2011 zcmV<12PF83P)1Aca^6dx)SwWQoy0&_Icb zAPN#N6$KPDY=RLEJ0(prnAb%x~Tsn9BZ(bXOdK*B|B5o*|O^Wz9G8B}N zN65|O*EB|q3>hICK;hE6Z;|6ke-AelB7Qx&iiU`nbVIiR6mH~2gwG;dNn0b}8o8Jh zL%eEB9nfU}#i#MImh7W8G(Pr`6KTXrt$JtFX#m9!1^M4aB5KU`+8UwhkLdZDZR6}Kb zAlgJ@0D%yqWirG5PU@bd6h(o-aC;O=&Bc(tf)bWYXag&IDXgg^lU)WwNu9B)dO$4G zCEiHUm(E?q<-bqxdK@mdhlXhHiTFqge%~_$i#!8RgqvK!xx#6JXbgBkHGsV@YZ_VG z=tAMy%b2@h3VuF#6d$f$hpRU#aPjOl)f-oE9gE$AG41Aym|6M~_BnF#D7|ozhJ?|G z@jlG~56G%g*TT%>l_iQ9Sp&1ssnbIkHhegK%>M!}4C_lH7=cP9nk!tGD)Q9^WR_=O zYk4lFdwb)ep%4yu!(oVjC9F+koG6y^(q77S!Q=757H`40mq)>3v9RtzLP7#EGc%E# zl8W71w&IlG1~TH>BH1P0R?y62MW!nqosEh3)N~kjw%XVU4TOc0Tb_}w@NY(RLy}is zez@Ik*lae88$SWtcm4oJx(z)pPr?T4F5EIZ)O(^mkr-L_G>%owLl#mPQj&`e!egS{ z#NO}6${4M!Zg{;E&R8EaIvZB2O*KZ~ACcOorlNn}zKF5dFf)G5nC!iG-VD#v)EDcFFH&QuIhGGI4f#eTz|^hKQ79s+KN0n=HKNlX{? z7~qGOBUY zkSdcqQ?zp9Ktd`uHWn|99H}Pwmr6x|ERIAY5as2{NfA>N?29{w zsZkr4%+2+ta-#gmt&1> z2cC$22ggx{_}aJXRZ%DggmjRk7cx?b_|vCOVb=V)$eBC|D-++sYWHM3RMB2dUJ-vX z`aGssSL1b49@;3axyUhx5=NKA06D7+D`XCk(dWDTeDoTcg%t=hJuEcEPb|fh&T$P&YD_%VuHgZQLN8DnBZb(m8o${sE zOG`_!e%(4XQDaWnaVT*O#@hQM))S@PQ)zNyW87|Zjai7D95<31e!Qw4&uiVL9dYY| z(P%)?`Ri~v9jb7N_dg2?Fe7&cX3dxiv}=L6)@*byOILf=z<$3FRm`^a7!~;eT5@-m z%;iEod%Y@D&HfF|d0xhm7OB?;*$>-GN|Bh<67liPuy@a1WWPKae;q%Kg4xC}V_}TIYCd7P%ueexC<``oN8h{}~j^n3rLsK63Hf|1<@RF<5YKIt6cviln zh~)A(r86QU7|ZNdH|w&g&+$BoN*XiU^eykPP<%ua8O2gq#S7+8{P(^xf9rOvBIV)2{}rN5GzL(kdl*Xh?%}S$ zcY};bVa&M(L$t`#ni`Lsf-d`*4=0%qvPvDKwcK^c^Ri98@@=@|x>cTt_>6d-40|T( zg!H_K|3s_SM6C;NpAkn{96-u5tEPm+{D?dCydO1kpgQ;k@>r)Q*_5M`{FWqatxqTg zwR*r0dg3}gv4O>#JZG?%Wj3lz^yG&jr!}xa_;9uh2s*A4{yF>s0002ovPDHLkV1gF1vU>mk literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/adaptiveproduct_youtube_background_color_108.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/adaptiveproduct_youtube_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..caa231027579cc8b80d4f575cbafb6283fb07d45 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$!8A$H?clSP!Vh->Lag|cg`#;l25Xg1$ba4!+ txb^lRBQKD5Xu)^?Tt4#!Kqm2^!f3k$1LNd1Pj`Xzc)I$ztaD0e0ssVw8$Wy0iGmR{el>3a=F^<~Lki6XItD8qm*XPm+zrIZ_9-#Tx%%d;eb$;zV zaggLeF<2A=;QkcRAH$9LHG*Tm97tZQ@H)_6W3_ z4YHDdMA6eEw$7RtZ8KQi|bIL<>*F_kyMe)ma%P=ycuCB*n9e`BonwD-(Tjcc;*KBMC$IH7S2bWITywA)%SWu&tW zy}SJL)>0#(cax$4;?vv0A~|6IrWu1qMlkDqxKpJPPpM;`%5DB#;eb@|ir8*_Q@PQ@ zTN?@AX<0L+?pKcv?TMHwz z+wL5frciBDvFpLZxqI-cbcs`*xIwu(H{x1aw8uAX7~-dKkPa4o2->`4qITuJ&9?$V zCJVgqS@K&A#@*^kN}ia^Te766iRtqWkEn|zM+YxElMWa;P9-t=h$Cw2fhw_vJ`YC8 z3H#Ta?uAVMxgE4C8KWGeMF3T0+Fu`5FKBXs_4hRjr4Y$C2Q>(-g=D5QZ-xHI;=x#^ z#I}c&5YmjAXqgEp&4A%3Hi6y;3| zh)}RSHF&q!JWGa`(+3E%5PeQRUoxe3DMro#XZ_Hj7QEqyqW5)(8h!eZ6!M{F*S2MC z6PoL!^SpnGTNrW(z?-&%>NtNl4qS{*+K#u!q6aXW=WpYEw1P*wP{z$_k&*0NB`5p| z!S|1PV;rrapnzf^E#BI2w0_u+v&=*VD7 z!7d0&XLTFYftcc2F$VZQxd!SQ0^avA6e_@dY(E__GdWe2(^VPd*jkdMea0yF;zhfa zl?yH`2wA+Wd)AtZ(Wv&dH^<)0%ycTP{roGQp&V;y3z=^`>gX$$$2Y~;Etd4TRSDYMsCGID8^M06{k0lK!4#*A*&g%Ptn#5y)x1uoi2@z46 zMZ_768=>P#+@UaLniZ;x-&+73}6>Q)?z>lydFR zQp;&OxNZ`GTAWw?rLh)UKzZDQNGg~af&6-@!di|Kj)1uKvN_*#1uN8@xaTBfI%Z#2 zdlCft+#=LK*9(0;iI5HJvFcyo)00*>FK=zrN{n!1)SJzE4%5)s0{8kmgjsSuLDnH9Tt*|M=QoR=J1G zffX5*hN^D6I!*cGU`gOZ)auhF^y1IjeB0Om5xQ|J3g zbOtk8X=G6-(sXtDV!wQY=llF_VOA9#FYz?y=h%JBo#P*D7R!G3%^y}E;+51jxQ zm|YM_n5 zngD4zL+J&vy+-(=wxT}uPCteX#pBxl2oUh+(~(xFfKqjmr)y;8#1=z```2TEKJ?|( z8Lg`N2lj}2kK4mQOeM&vXs4b;JCoM`lQ(@4)U$<0I1N&z58B(R4oB)BNtUi7mJMkV zlB-K1Sxo%3ec2~zevcB`wzrI6p(P82S$zMRp5x)kj+cww=Ru}oWQGNKrhYH7xMpKY IHTDSo2lu!#4gdfE literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b1c006e0dbdd91616a4cd13db3e0fb1ec83bf3c1 GIT binary patch literal 4108 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 KMNUMnLSTaWdkq8t literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b1c006e0dbdd91616a4cd13db3e0fb1ec83bf3c1 GIT binary patch literal 4108 zcmV+n5cBVeP)c=s9x&^6Q(DvA< z)YaB{#AsDeL1+=Ng0iBZRm-j)l+y();Q$FC1~DJxb7uDczcUjj$t0O%=1y+H{5a3K zcP=@ZoB#8^&-=XZz4y5`Sd_e?vqo}LL>o^#omQyBJ{w2V{|9n{c7S$-R!KWZ+fUm^ ztEjB__;YS8hh-c3z_qC-C8cF-AA2T=5E zZf4T1q)nws@Ms{1?4WI+ZJ{%2bZ{^j6bDdviM@a}n>Jd<29aa5O|)`4LQaV)QF8!A zkK^VF+AXwcI%YxMraesiBc0K195I=wIDq0`#m!G?=NJd9&tGZ3q7z>7el!nL9YEnV znBGg9VH_BGY@;oqBQ$uMf+-H5@FTeSPuk5ihmH+lT(n1NKc^#<>PD1^JAmSUhZ~)+ z^7r9{<`Xy530u7%BSXX-K;f0I|AMx}I52!sNL@xpXnqkk5pe*;SN{Gq?God_@aHw! zztRbsPlQF-4xspxxmimaZXu^H6q2r{6F%~O92j9u^C|vC+$d8x)x;P2o45Hi7%&5N z0KfP$ZeFI1G7g-Y=x=}7r^SF6PzdsU;W}D^aUe!3Z7#!+8f3rdw*!1#PG96S4#e=& zM7xYmc*FZKH2UQLimw4zG5=H!JH2t7HlsfSbI1;$_)0akSam86xcx!d(X>!g)Q|>Y zim#tjo*xsxZ=})FKF#_h)GSCd+*4(e6$zx3H0zT-Ll8ZwwVf^APciz*OopOf*N%F1 z0L9m;=KHi*=ouIq557Ss^tg)JR|wLQa!mYzBkiPNkM!6B*!p!bMb}7&`g;Cgqw5J% z*$aYR)ak7UXxTL;e)vd3X&IED4q)roHC)SHM$|&Q$GbaJnBmj38{I+>e^7TXyi2px z1$3QgD`l_2=lmcS&^*b=L#pxrLjYaq|29KWr@JkJ^#I*EVw(6in+->gH-abPwW>Pb z|MX5X1#d<>R=MV5_sRS4KTXSVkNZMY+NyDaVYbhFdhn5^(zX-9dca%Um~!8a#6MDT z9J4P!53^>Mz~ypb`}Vi6cFj{5m0JvFQan6CVv7z{;W%DtTa1$WDc*xT^)`D8UQhWe zu8)5T$Jjsekz)1G^fnva`M!OFP7a{>x?@f2J*H4w*Muo&7vsT)9zb4R9>w;cp`n3J zcoVml-h=vM$B{oS*Ek+XCE9Q~a`8-kDbm_f;Wk2$PTmH)$Buo@gZO3Aizv6fha8ON zsAuW^pmm~-JMg-OAl)u#8ZF27VeZ^HhWKr5ZD?W-KS9 zwWs37y36o(%Tk=nf%yo&u&NVg`?NL)>;bw<+4LJ_6BB}8L{o1_O-;ph^XKE$En6}D zyop9{5J^1EYPRY!=Sw(}bQBJcf=p+5yY0Kgwo0_H_gKsk(pXv> zbTp^55jj8SW`g&VIn?;;a6U3dW-&B94^R9E@uGH&9>6Z4 zha)rqTLSfltn6$ox_L3ytlfywnQ1t5paKQ9bnIkkIWK8B%F{QaA+FKr4P8-4N^&J& zUj4=R-=@16SMwN>YORzZP4#K+?E!54N;_}TzM1sZ0|HS`u-ol8?X=VIor|WkWxMd^ z>l=}sl7lpR8rIm~#_@z26r%u{?IXJ6bLt5+{>x)endzF0k#RQs$^IT^3@LDS%RQow zW{=yb$EW@?(PKfDLrzd{C@d<%lBG-W+sB_m&5`4%=3Jt{mWSWlKEg%G_hC!gdmIB? z>KwFxJB2uW_^_@(vdVMo&vEbx4dPN-&Y7}TI-XzpMv($j_- zfYWrqO!^aoy5b+8$BY?+^Ut4#oG}I1xc(WopbX?Vv#{Q_3;Po)Fo8W|OnW9YHY*GT zq5(RqZ6q#iKMRF%X?Vf$E(hpD4$$4576pk* zvww&L4$$$@bA`TWn|gpAf*x}C2WUC-jyvu^`5#_DtILhr1J&#eWARJdo47XR*LXMO zWBs%-X9&c88bBR<43WmqyMm8sJQ>IKo(YVvG{>9Y{C#e|i9D&s~ z%g!09^xJd2`$HdvB>#HS=GR`sBo5F=YZ}6wGc?f!rUj+kAs>ReqMju?=iGDg;Dh%g zKRXRgEp5oBoYidQU(Ol62x-nRk3-~P^CoVEa)7ZWG2GDghT`H0xZ}1TqqcI75z|L8 z-_P|F;7wq6NkfzNAaX%J11$nO*Zn#0hTCS6iIX?Q*(no zd-kC0p~sM!Kf!3fHH_m`wknjl=ivACKf#2iuQ0T9?+KbEYarg|tiW9;@RpOP(%^8w)_;g*3HEzwtNk=T~T_f z@|?4Z~mCjTE6q^`uz z?3O$%#+?r<&Y0S4u`|Y`8RLggqgGF;f2+&Ab;FsHmxsk0W<%1o0nigT?ta! zlY0m`4m3Mj@qF6r_-E&GY+`%NN2W$!PIiGadgxt1M?(dO5xq|662w(kOnS*{wd1{c?aFqlxUw zn8|3M)pGPZJ9lE?!W;4MLl2;!XfkRO+c{lo#=5p!ad+JhklT{&3pt(fPP{zWk@_L# zq}-1(+fL+r@+dujulGlyfi&NzGpV43U3Mi}sMVi1aRRGWJ%KAPzr+}5^Trjk%^$7@qmf))T>4xB?$=sLe-4G==vg%`5Dc-iop+YHDfJ>J{&I z@7|5l(mS#2XQjw1WO&I)VAS^J_Kz{QpLp_gxRkeaxnb+e-2NbLOM47Ic07w5&uHW! zelWxrf0y>^0m8JRbdf-tA{a7hP}#Uis5b6mX!ev^An|0J(j+?Qd-LIm~gQ zG}H#i(A@6;mGiY6{(-ilq5}7>Sb;@9x*pjDnaC*`W#slZdL|Drx3|P|1cv5*2kfF* zY8+6w(dEW%Z@htd*IkcQkN?4F^)+#B;}-NMTnkWU&D=f|q_s5nI)JfA>p@X3+uIXr z^))p$c=XXn@V#rki_bo<$JlX2Z1r`R!U6N0=DUsDKD9li$ANYbbNf)(;nTdM2M86i zHl5x?&_FBOwQCm^FTMr8TCq$w4kJA|5r;gDSnN3mFE-wZZ#SOBpSD>ww-1F5tpgpP zdJrmPZ7MCTDlXL>wR&S6=ecK5GV@|=e}@AlLyph`dO1kI?M+uAuQ{iOkfT3k&~y7x zkj5RgH#!`^E};_csv>SGhYuYx23J2udP(v3?cIyJmo7!=ZHtgI_N&OtNi!x}q84o^ z@tkJdwcxf}I=2snO+Kv+0(*cc_iarfanyLMUANv?KG1r-TK&nBC$agJP577ZUWezO z^RDAK99>V#j#{Rit@bw9bPtIS3+DEr&`INNA(=5ZI*+N&DuK)G!uB`c!rJF!kEwP* z2h8P0g;-5NPN=GFfV=Kf?}5Z3i>EGkCIrS&152uaD$>i=gy+>jU zkVn}1pYZK>qqiO)^z4|fn8g?v(oP!oNUsi{=Tz-a?}3RiF!aikUf(;@=i`A4MgL$Z zisx>p2}F!Oxwp5_p@$S%weDQAK`-NB2RH8jb zaHNfv8$!Oi7_tKdf3XVq=$T@@tRO~bq{%ftjY6hh4iNkT&5*C91;4U#Y9cMJ^=Z>D z`t1P0FVZVav}zjb30@5b^!^wT)_N8PX030i^3$pMN)yF=g`Ix4d_Q3?DAEbB7rBMO zfI?6pz7xJCX8@wOGBjVRI z7?NVIv+V~F=>dWG){dUxZZb`mHNy^bgN)YmAEC{s_w5EjB((`y<6Sr8-AfqUL}==nPfqRTXg+3pc%9 zbsy+nP2G}NPSK-&hxnj4zz-dvD&i_+eI-p!iB|PStyW5G-KD&R!gt)O8EppD0fEpN zs#|n6O%-J|c%Mm=L&D9XbQ_Tb*K=?hO!Z{SE{bl68X1;xKv(Dx6_iy?Q_Uw-*-@3f z@@OitRzQ=({AsjOMYZC?w4*dV{jUem^$fJ~_X-MbPQjnB0RA8GMG;mYpggz$0000< KMNUMnLSTaWdkq8t literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..c6edf6ec9855211ecda175b33869196c05c3d0de GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4rZW8hROCXK#DoQC&X1sLGS-eBS9dy*3-o? vq~g}wgN;BA!{G%#gXJGGg))LTGzT@zvy&MZueR6efvoa$^>bP0l+XkKKp+^@ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d0f0959366a1936d85fbba47f053d57ff25f8c GIT binary patch literal 5832 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0d37191b98853c6e80c02bf038427360c50b7056 GIT binary patch literal 7034 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 Yf5`2iOBSdGsQ>@~07*qoM6N<$f`B-B7ytkO literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..0d37191b98853c6e80c02bf038427360c50b7056 GIT binary patch literal 7034 zcmV-=8-?VFP)`$xtitCvS^*P>n=10ts$JWy|f=SJ4oA4JD^!n;ohC4ETe{q z77)df!lFB^pJwOM&Z4E!;%K3yigtvykM=cfyJp`|R3$7Ul86!z1ryJr4{b1QkanF- zYflPkJ8A!+eIVBqR3*!ZAnXN1(R5@nkaivIa@sjGJ@YMXBkfJvW{T;!RE8^IDIkg_ zhDCqcjkMu32}|LKguAu0S7}=)rdp{CC&EfV6iz0KakN`$Ka;u$VjFDPZpiS!%d|NZ()UV@j?k5WC>-fgiO2b0np_*4M0#s~rHMz< zP0vkwGrEA{8P7so_Vu)A_c{$BpNWiZjj<msbRy9d(3)l)PPjzQq8qCME& zVXa*~5XCcz#d6vON`*l%{FL@fdZQA0qkOfh?P(VeMB&JI&a9N+J`qne zER^9aWCGF>=67jE&ZBQ6C%Ph3iFHT>MDa*h{XLq|+X@e)cQ%wFI^!`9rNmeQs{6Lbzl?<31lr>l1c5kxQMLj}Puj}0n>Q9QB${!^N9+5~jyePyG z`~+6q#y`g+7l%yctgDQ62}#>GnF}@g`Oy2w3PZ_#bagVA$Kyp&Q5jHk0!T@qF!Q46g2nWVZvgCJ**m3$fU?9`no_k>brj2mY2<`!`XBoRlWHP=hNN z8=cCqCuRPD#bxSU`(rYhP*zcml7mMvZroKEbonokozW57w&ufGTF&>|*x~YxBS)f^ zn98uu^;?W|UIx265iy<^SUpx`y3%o}yEo3aWa8zRPn9F;J2I$6p@^(Bm$S53R$iP& zgI`^GADL~J!?AU9pk;YwHS)64F#E|rp?B}zh>5YFrluPE_U^^1RjcsqU*^D(*%S77 z8@%4Ynz;}ac-T7te=NHV=Gqu|P5%GR>@`uiz!&j*@VIR`Uc+u=AvGGqnjHMuhhFHk z+4=@O5WUZ@S&UKd+8=4wqXl1M{`>_PIB=lijU;SYt@IR~I^p6=F2RKt{Q{deZ^41@ ze}p4Buuh}XRD#D`W6`auGdv7ir$YTG|LyFW3=FC5gJi20ZDWku(Lp6O#1v*RmZ2?4URhtNlh) zkU__?h$8a)pc?vwRI>UmE4*PpzpI z-7CA|&(6u1@3{%Zro+soT+xyjou&=HPmSSAl82{h@=Pt=K(~n-Mvq62o;@1$K=l!^ zh-GDE;j+svMS4ay)~s3zm)U{%IRB92V6SQu_M)@ZhI8F#!RBEC-b5(#A-`j*wc%$q zJ#e+T2X@8m!q+I_>qY!{tAw$|Y>#T~{xlCHPrV7(2bcIE-Y6v{1$W$eCtiE~ZFKL_ ziQZ_BpQjM1V`y%X*D^xrY`(ElVG=Y+IGt2H@-WSU&AHodpKopn?nHhN_ z*&B&AL?d3Wh>qd=6j~>l?p!$d>k{qZ@mo6AGWH79;R=l@<6|C{8 zuv$)jcO2|wY%qO~Ppmu9JtiG_?hJO}Pw&<@g#1pD+kpY@UO3N^f&Wv+j7*U{W>n7h zSfgE^^gs+>GU6=H+lnZB33g6S4j!616$@W_1*H`=^hSs35^U8IIk1IIf0^xZ{KN4k zoB`%Vg5*Uuw+-XVuE36}M=**V*aJ8csRFuO(~3gfCq(Zfo@c6hr!QLSf$AedvREv9 zjh+}e>~fS>mSF4V^@w+*!>kF(&W|IWe=awDiXz(q{M3|#bXQ6f6Fw(lG*bkVRg;dP zo<2yYhg)U-jJ>pYWf~-ckY%rH*d}sFgWvyI#BWa)5!Ke#G8ylQSx?Nu+$Fn; zQ<3K|L~=eT`Kw=H&ARt7@S+|{ci)E^(&BNHZe_T2F6KFw@`*5}$!TIUX?D5S8=(kcr{YVnb8~Ysc<>5cZ+g)~9B`fE^x zpT#|a<&Jl7!g3<01l!@VV^Z05_^^69E@qFf0A=Csi9{=+8TG3`HH~C3Lay~lYj~jg zh>*-?bEETV;%j8kF_u67jCl_=u}%i1Jf-^{Sb{B~%Y?IPvT=>KFRYeIylu|sD<<+4 z!&XZ9Y?se{9!MU_AJzE0k^g+!;kx-W5s{6Jo#V~LQ>LvL6F(Q5?As_HiZ6f!+cyo8 zQ`HH7bl!?(?z?f!R7r1C9j+2mG~@d}H%=GR5D}f6PkSB1hX34eK283VF{4jVfkCme zl`*3-YgtesElwFTx)R%~W?&?;D54VOb;ArrGcin{W!`HBE%+sUZA5E_uu~DSh@Cp0 zR%3P`Aud*FY<0{i0n1HWP;5KMPcv6Zm;-Sq%)u3pBtnG_5iwUdDTjApCh0!`A zv&@UhyOjenjbnKmK)g|Mz4^2rr_85`&&lD(w-~!IB>oA!<=Bi`vpXnnlvb0B`<&yj z)-@Hm43!1+Y+(}8L^GXYsG`2SkQIo!rL8?seZ&(<4s`l_S_+fl7{wbo*fl@Ka!Jg) zNU(a)-J7GVuMV`UFJngCtIxtUI1d%pVr;^<=s;g2)4DoFPNsW9Jdkm&b2Io7Z2$Q* zSKWM?$Rvr)o#oBObn{!dJ>f6-B4M{809jYv9KHnmoD*H}jB^TJ@Z5|;rbF~bx?g9M zD+0<>uML_*ra@w3V{z@ZBk{r7Wf(hQn37=EYF<$qI~S?Sm{GsDS$M^<0acdjphBA6 zm5AHRM&iTj-{UfLRK|>SOrC_W3B0&Sz1Ju08NwPuJdzAP4j4E9d7ZoA^_5Fd;Yn0? zgz)cW%*cvZERFd9?pP{feT32RbFn#bd(dM>xmBI;m~$dlxTm1R<{6Za9)<7mSK5bKQe#EVjIh%-9(8tj$A*+71CH z*jA4Py=uB*l<8a?vFyhul#zoewoY)0fS%-qZr)Kt=v6>I-2c^zR zrHAH2CQqeTwbJwnj@XLO!<3EmpvH{&4cGRj#apYf+Vmw~Qx`kVAmY0)mNRz(CLCw=4~6ASSb26UK(w;fv;rrgTRejuo0Mk#pEIRP`gm(vfG z>megb76IulGYeNFq+N93g-Ffm1(#cP-uoj$%3(5G<+WhAbru#o)+z&!fh^(|L_~@1 z1Wc~F7H6B{QGs^%#?5TBG6)J0P{*Vs^y}Rn$1Cb~zW5;`>d26m;_ZUTF|Xi&?NC68 zwGY`1l2wz25uTnXWp35p7y=4Ynoq&o217t0M0#YUrKQNMk*>5l7K7k-3+U1sVEVgZc$6KqcPikkB;4AZh24{#IHS^#9{ulF}`8$%c zeyY`~NHfcVdRbUM3B9nsat5v`8$dx&JOPXc2_l{&u_buQz6`TX8>3Cn6oP7=Z>3Nd%;CXx;luuy4dTkI4vdh)!bmHZg zmtf@Zp~(O02Z|?Co!;QzSJ6ilm=0i?cL0`GPQ}3Te#{t50VT{bE+pbP5Lbjp?Taza z@;tl!c6y#Ty?7oU`wb5iBoeaZM6}(zc45Z!8JPayz39}rH!_nG>ck_Ho+YLVtaROj zKRRzic2#B&A&X7Iyl8V`K5mYmho?**Bioy$>`~K^=kZ~9pkNT;)YQ~q^_y>E&{gB{ z+KPARb^|n7RX=EK(oE-_ZZ_Gsw|)nCS=K>4vQSCajESIY-0G61^hZj@j%KZ zd4t9guOlJrz<~ppGiMI&`1Q?5O^Ty<((Am=G1TIqX+P$8M&KXizeC@Oo~-dOWHs+M zd?D-G4tsH*{dwGJUWyEF2F0W9kkv5n9fXE4qD7P7p#NMUW5h)38b+7S;Ve65vH zk9eKR%1W$Uu>w~Oxen_$e5NGIk_Y*au^n0P{!#TK$^!UAS3*#UvW)G>Ar1ZFp2TW) zf^#UHldm2&D4OvJXuDQMExttg`|rQUV>4&s-n%CuBexTBa+B)3j*RUTnu;*hI{-^7 zA5ae140dd%Ag%~A?MpDh@^>VA<0&3>A$}O5XvPo_kwn?;cH^B58!%?vEm-p6a>eUd zw2gymqAX)OWmw_93p1S)Aq(DvAKTfE(M*(Op}ic^5av$+@)OWEv_kbVdhmIjL&e2- z_HTc~FK@g7<&{+wPoCm+1o15eIEpdoj4!Gl#n`eTu(@M{3Rz`VCl)&1#HF^`%ApK0 zwiCv}5kxDZ8C5_`hDun-(|Mu>-#pf5pMHwp-1S@hdG<^>sSODoV(UVdjO`RLWX<-D z!2I%iaDGJ(rRNp+*p3gKU_@5YQ7zsIx(??I=|=OH^Su`XnZL<(>ix1k5#JuyQW+mTg( z!Hn%3ww2%+$8rp}&ciW^Ne=9c5aIZ!(@K2-NeKH^y^K8S=CM|<#-OXmhb}~zctj(0=}w)1 z7}Mn0m>bo*$ibH=7Ze=8+&Ob`$HbeE>abBf>O7VYImDnp?ATQOFzzV3PC4Wtm_)f+ z8QXam=g0jCuTzS-NK-@^fo#;YqEO!h32$m;L?B*AMDpQ>>O9u-&pt=toSet|of4&pKU65ME+j})&%8QTdg;DsfA8aY)!n`sd-ts!1V z=CNK_umEF54ac|pWFD)#pK#Q$#ozIa$1LaV$g9c@B4qKSV{dFr;ujbn|7SdD+N>O= zAcrbMSjei6XhSqoho6AxnvSzrtKR90s_H7g#%~PYJl4(~J8=Jf51gFGa;WoI^^p@& zC!#NIthfSk?hZkPEO|)X3ywE1z%~mXqnuu+VA)afN9M8qwQ?n{95M>))_tlZ%Jt{5{3*r%xGzRxfccIuWPKC=10J$3z+L87km*fF zc4Un01j1?BXh=X?Xxr3FosifW`T1Wc;_&sF>f<+$_1I&$XUgqJ&&@zio;r`!5K1lc zoSfRg&KLEq+gWelf}tIr!~%Rtual|ln1~WY6QT`2PHPRiDETTbQSbCYR$3xfzy2z= z=jSUz5yALO?v;70cQ#<`_*<}K(K5yB_zu8q47J%!s4&aAsHR0AUPspLJmpx1VX;r) zs4}(_HtTjm#S%>$el&P^pFJs4lBHW{Cr?UhN2Gb>At?FVwxMUw?np}$uVF$p^P+FR z`34IYEm9V@%kQLRq%`VvPDP$9m}|D;GFNYyJ^U`6q9bK&ha#1AJ5%Fd#B-*Pk%bIp z5;V#ra!PJVmsKg{}`FKU3rbkS8r4 z)>h4kCt$`euVyA56K`JsaYM^+Z7q#mK38XtQ zhvql>Xb=@hn@ig_Nwa70(+eG=7m{OuqvoN!1`2cOeO77LjS}d9hIHwfRT@MI($>=E z&C;v~66l4h>4ju4X^dK95aCRr_X%h^E2vD7y|RC^xL&<8h)`BhJU3|9%@XXG{DZWk z>ZL&hB5f;e954ZeFdte%E!#P+Q)>(&jQ^$gc~83zh!zcYFqExeF;=}Zh!9p%Jma+M zfNANp@;x-;bl1p1+EUsyXj&v7Dz%u!B$`{PFbHR)4JT=B8Z<%WK=olh^aJxDSs!w> zT4NBVJVf!lqFo0~iv=W5L?2T`XYsP1T4NAqET(v-Yu7EJr8!W2rqCjOTXX~>Z6?yZ8J)1tB?>f0SSC#G66S|rW`(Gpev+JMrv&oGD0dKfp2gtixD)# z6X^$OixFDegp`mANYLKsFq)AQwLj7Z!&*Z;LaPW!&|KveG~*2F_Cr4VE3~#~6b<`NKZW|WUZlZYPF&3># zo9MYCzCN`*nN$QtJ96pncG zcA?EZP<`l)^68EK#Y@>f?fVfJ*Z}b(t(aXH7q4lLj#fcz6AbZv4(k4oD3$t)u$<(M$hMIZ*(mn z9~6=tw>Oz~Gc7~vA{aS?U@2_@h106j5TPI}1muH4%48v%-)^Nv+M!pH*U0h8D=3^6 zZLw(&!b(6sC?rY#`_pcu4X4SVWH=(nDa$dlasvDo3Ma5 z<+O8XdPbhNC6CpTr`~L)Xu|sRx3CvbeJCbLwENHo)8s@oxz47wC-Q(=c|e;yCQ_DI z$n!?)p0^e5M3jI|g@Q_9(VZsCNW^5@k%T)r>OR!N1Jd1=rK1v-WFeP47F+Ba3MOLL zh)1-58iJxqVj=t3ay84NWof0Vrlg?IQjwj Yf5`2iOBSdGsQ>@~07*qoM6N<$f`B-B7ytkO literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_background_color_108.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..0f70382dfc1a18e61fcec4de1247bd56987b52b3 GIT binary patch literal 275 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f877a5da5aa097e5b52586e6c7976d34317958c2 GIT binary patch literal 7431 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_pink/launcher/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f877a5da5aa097e5b52586e6c7976d34317958c2 GIT binary patch literal 7431 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml b/src/main/resources/youtube/branding/mmt_pink/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml new file mode 100644 index 000000000..aec9f0686 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_pink/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/branding/mmt_pink/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/branding/mmt_pink/settings/drawable/revanced_extended_settings_key_icon.xml new file mode 100755 index 000000000..142d75dc8 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_pink/settings/drawable/revanced_extended_settings_key_icon.xml @@ -0,0 +1,926 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..9ff63e277d551746b8f67997ab50ffb4a4390fde GIT binary patch literal 10845 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..30158ad2eeb67509b40cb8e60c823632c5601fa7 GIT binary patch literal 13735 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..76bb83cce707c134ca0ef00e46255756d0f5240e GIT binary patch literal 1464 zcmV;p1xNacP)2#0l?6~**K*}OhUAE?3CK!^;d{0^+c1#~lr1bHo91Karbb>Tpkr@w1 zYMK4;DW!50&YAmVhT&)NGshTGP)iFhv40B0X>>C_Gu-L4h=!=~92G@ecLtjY z)&(H%we`^Ys&M|7diVy0qf;@0nvqxV&hTn@34=JLYy#PZ%JXP(ATE%h3!{d3ZJ5n< zXLMX|MnT~QIa z{DW@kTG=GC7oKJOqICOivRWy1NfxtNG?tW{jN=ubqoa5RmfzZlChH|}&L;N9qsmZ> zZIPMCB}03QaVGBM78~w_WLyZjKNSnM@r2S2IP+%gYOy8PDLy z+Im#3xrXA~d(f(GhqpzIm3@nGao}yNvChK{bjUFz4jJ!fWHRxV95Iv0gxJ_vd{Xiu zB6p-=$*nCo>-PsN3Nzw{W~0oo0ej5Zv_$aY;1WF>ini7N8*IuyAOP#K*CH)H1F0Q_ z*srO@uyPnWlLm#ot8l>d0-3rkUE!2yHsk?r(vy;%Bfu-S*cAWXWwhTFY>2m=GMW5_ zDwPU-1_KUMSK>_BcQ_mIG4c#6pr%~9qcY$l?Kj9(9i{vTmacG0D;sLJ)u#q80fL~y z<;%@@^{tI)f3qHELQ9Y`kN~Asz$Kq+$k*&ckx)%$H11;D&W1eLggf3&5Cj;FMtoaW zgOrRkynJ{Lb_N$AdRUJU%AMl@KOx@leH>Q&g(zAq-I!sT*$|%&WFqATMTLi`y{!%J zmTpIR&Q_c^?!ZgBbod(m(COWU541=xMI5b`w3GM0h!-`xuuWNqnbs)y(}u!*DvPj(1|{u7c*yvu z;sS4UcXx|MdU|?LQSm8OXD);BN)L*{vJf^DhJK+R2el{hxX*hyO^aY8LZoYD)5u;% z-}XaPJkND!_-cZ2^=bYz#IJGikIb;vz(*WfYABzG>9_5q__&||E zW(>BbBW|-%ntlKO=NNmWb?U+RU^N~-s!(D7NiTxLpY(W1;=NS|X^NlpfPVoCGvi-? SAT3=00000v literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-hdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..29545c0d9958cc12e7a56a4d34f526a7827591e6 GIT binary patch literal 2254 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 Yf5`2iOBSdGsQ>@~07*qoM6N<$f`B-B7ytkO literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-mdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-mdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc3035e8b269162b3f1815bba5afc9fdce95f75 GIT binary patch literal 8382 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-mdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-mdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..b096c4e6d418e8cacc4657b5952454e51a95c371 GIT binary patch literal 942 zcmV;f15x~mP)ld(XZ1yH7zB%uHK2kHtDN zmrN(qNI?hLMmCZSJsmIKN@pZQ3_xKKJ4zOlanctBLu4I!jDaL*7{&ykcnOPhWTMeA zdGwOI8RVMTG@)6g0gCTsagnqe9e)P-rqG#?+}Hp8<72aHL;!2#BL1()XOLC~c_j_Q zBFpn;GRzjQ&ks#ipehPH2;egYF^vPY@w0&S&NvXevSm$Fvu!MBn7EJPUat@DJ3I05 z=OA2)9lQM54B|mI8Fl-aTA~S+qnE8HyCsBS3fpWt>aN$|Rzn?pE(cb%&&8R(op?I5 zAIp%$Am1hmQY_jU{o2mPYO~M8;LtGAX3aoZ*;Zs^WS}^21)BAD@Hc%%-oRq4(H0|C zAI2T^33NCO%OXH0-C~g(qHxf2&}E;`N1MDzO-;q#LkH1bNAVr@1QuPwxqhh-=)x{H?HHf;Qvig?W>4f0n8YCq;v0=k{*zI-%0_L8PGG%%S7A(!eo}TltJ@3bIEerYHMexLY$33N; zhQ%1~T5yarv+)reqm&Vy9|Z{@iEBbATo+B#@Z!xYTsV9R)%69~Jar{r$8}(b^DIuQ zkC2Kf*4rU;NPsa3YBWUnm&b#;+x2M9xs37~1;|WH$E_)i$c(SRO{JCM4*16&KjWZD z$_2#0l?6~**K*}OhUAE?3CK!^;d{0^+c1#~lr1bHo91Karbb>Tpkr@w1 zYMK4;DW!50&YAmVhT&)NGshTGP)iFhv40B0X>>C_Gu-L4h=!=~92G@ecLtjY z)&(H%we`^Ys&M|7diVy0qf;@0nvqxV&hTn@34=JLYy#PZ%JXP(ATE%h3!{d3ZJ5n< zXLMX|MnT~QIa z{DW@kTG=GC7oKJOqICOivRWy1NfxtNG?tW{jN=ubqoa5RmfzZlChH|}&L;N9qsmZ> zZIPMCB}03QaVGBM78~w_WLyZjKNSnM@r2S2IP+%gYOy8PDLy z+Im#3xrXA~d(f(GhqpzIm3@nGao}yNvChK{bjUFz4jJ!fWHRxV95Iv0gxJ_vd{Xiu zB6p-=$*nCo>-PsN3Nzw{W~0oo0ej5Zv_$aY;1WF>ini7N8*IuyAOP#K*CH)H1F0Q_ z*srO@uyPnWlLm#ot8l>d0-3rkUE!2yHsk?r(vy;%Bfu-S*cAWXWwhTFY>2m=GMW5_ zDwPU-1_KUMSK>_BcQ_mIG4c#6pr%~9qcY$l?Kj9(9i{vTmacG0D;sLJ)u#q80fL~y z<;%@@^{tI)f3qHELQ9Y`kN~Asz$Kq+$k*&ckx)%$H11;D&W1eLggf3&5Cj;FMtoaW zgOrRkynJ{Lb_N$AdRUJU%AMl@KOx@leH>Q&g(zAq-I!sT*$|%&WFqATMTLi`y{!%J zmTpIR&Q_c^?!ZgBbod(m(COWU541=xMI5b`w3GM0h!-`xuuWNqnbs)y(}u!*DvPj(1|{u7c*yvu z;sS4UcXx|MdU|?LQSm8OXD);BN)L*{vJf^DhJK+R2el{hxX*hyO^aY8LZoYD)5u;% z-}XaPJkND!_-cZ2^=bYz#IJGikIb;vz(*WfYABzG>9_5q__&||E zW(>BbBW|-%ntlKO=NNmWb?U+RU^N~-s!(D7NiTxLpY(W1;=NS|X^NlpfPVoCGvi-? SAT3=00000v literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..30158ad2eeb67509b40cb8e60c823632c5601fa7 GIT binary patch literal 13735 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ada0e93b98ebb5e9f369cb459c82bf617c5337 GIT binary patch literal 16447 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..c0cced3126d18591da175bd882365fec298d485c GIT binary patch literal 2011 zcmV<12PF83P)1Aca^6dx)SwWQoy0&_Icb zAPN#N6$KPDY=RLEJ0(prnAb%x~Tsn9BZ(bXOdK*B|B5o*|O^Wz9G8B}N zN65|O*EB|q3>hICK;hE6Z;|6ke-AelB7Qx&iiU`nbVIiR6mH~2gwG;dNn0b}8o8Jh zL%eEB9nfU}#i#MImh7W8G(Pr`6KTXrt$JtFX#m9!1^M4aB5KU`+8UwhkLdZDZR6}Kb zAlgJ@0D%yqWirG5PU@bd6h(o-aC;O=&Bc(tf)bWYXag&IDXgg^lU)WwNu9B)dO$4G zCEiHUm(E?q<-bqxdK@mdhlXhHiTFqge%~_$i#!8RgqvK!xx#6JXbgBkHGsV@YZ_VG z=tAMy%b2@h3VuF#6d$f$hpRU#aPjOl)f-oE9gE$AG41Aym|6M~_BnF#D7|ozhJ?|G z@jlG~56G%g*TT%>l_iQ9Sp&1ssnbIkHhegK%>M!}4C_lH7=cP9nk!tGD)Q9^WR_=O zYk4lFdwb)ep%4yu!(oVjC9F+koG6y^(q77S!Q=757H`40mq)>3v9RtzLP7#EGc%E# zl8W71w&IlG1~TH>BH1P0R?y62MW!nqosEh3)N~kjw%XVU4TOc0Tb_}w@NY(RLy}is zez@Ik*lae88$SWtcm4oJx(z)pPr?T4F5EIZ)O(^mkr-L_G>%owLl#mPQj&`e!egS{ z#NO}6${4M!Zg{;E&R8EaIvZB2O*KZ~ACcOorlNn}zKF5dFf)G5nC!iG-VD#v)EDcFFH&QuIhGGI4f#eTz|^hKQ79s+KN0n=HKNlX{? z7~qGOBUY zkSdcqQ?zp9Ktd`uHWn|99H}Pwmr6x|ERIAY5as2{NfA>N?29{w zsZkr4%+2+ta-#gmt&1> z2cC$22ggx{_}aJXRZ%DggmjRk7cx?b_|vCOVb=V)$eBC|D-++sYWHM3RMB2dUJ-vX z`aGssSL1b49@;3axyUhx5=NKA06D7+D`XCk(dWDTeDoTcg%t=hJuEcEPb|fh&T$P&YD_%VuHgZQLN8DnBZb(m8o${sE zOG`_!e%(4XQDaWnaVT*O#@hQM))S@PQ)zNyW87|Zjai7D95<31e!Qw4&uiVL9dYY| z(P%)?`Ri~v9jb7N_dg2?Fe7&cX3dxiv}=L6)@*byOILf=z<$3FRm`^a7!~;eT5@-m z%;iEod%Y@D&HfF|d0xhm7OB?;*$>-GN|Bh<67liPuy@a1WWPKae;q%Kg4xC}V_}TIYCd7P%ueexC<``oN8h{}~j^n3rLsK63Hf|1<@RF<5YKIt6cviln zh~)A(r86QU7|ZNdH|w&g&+$BoN*XiU^eykPP<%ua8O2gq#S7+8{P(^xf9rOvBIV)2{}rN5GzL(kdl*Xh?%}S$ zcY};bVa&M(L$t`#ni`Lsf-d`*4=0%qvPvDKwcK^c^Ri98@@=@|x>cTt_>6d-40|T( zg!H_K|3s_SM6C;NpAkn{96-u5tEPm+{D?dCydO1kpgQ;k@>r)Q*_5M`{FWqatxqTg zwR*r0dg3}gv4O>#JZG?%Wj3lz^yG&jr!}xa_;9uh2s*A4{yF>s0002ovPDHLkV1gF1vU>mk literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xhdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..500e9911cd8933fa7bb25e62d3814230a7fb0b42 GIT binary patch literal 3174 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 M07*qoM6N<$f`v8i3IG5A literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..5c895e1b2147b0e4c207eee3127cb12fd4c3686b GIT binary patch literal 24651 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 NML`2zENA-m{{T2V-5dY_ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..5bfb522e9d1c97bbdbe2c11be63ab00cea9c7f2d GIT binary patch literal 34809 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..500e9911cd8933fa7bb25e62d3814230a7fb0b42 GIT binary patch literal 3174 zcmV-s44LzZP)ecpV`m=GrOW+nmItj)de&P?XrJ?ETz z?tS+?4Wfvw-si`&=tK4=`;q66nPfKEi!_h|JGqZMK-QAG$?aqnSzYt>7spvf1rZmB zqU5o-oE%MFNXoH}3MZjpPV2k&Fb6k{ik8RRzS&(fMFT(l=Rxa{Wzq^#)k>gHvT052OB+$h%H+@Z z<0{Ly{!xml_cbhT_Z)?egWr6K;*w&Fzjgw0bMx?v3opd*5trhB+bgm2%TM?{Y0CTT z?7EEx{AlxaNOUH^sd4g1i*sx_xY~UI?D``p(^fKlPvA*L)t)S5g>M?t+QnpnT@`%R zQB>4VsoU*#x|{}shYZ1zCC}pSd*&!^ccR%2J=+~qsQ4gRYnj($xYT|J*y4QFX6Q!;O zBFV8MR{U}5ACQug8W3-!uG8sISa>c*UvVj#Tdb)3U>$atffr-S(O;j60(&O(6w0lk zEs=s8TRN_E4nmyXfj6~VdBO=WMqa8IvXXB0xlbTjSC*@ts?d=@KDb;iSS&p;bm&mz z7xcxtmsX?cgchaAn-F7gqR5qt1Sf;JS0E`RMqOm@ho5V6v0V2ltaQ#EFnBFCVrZd2 zt8_Faxg5NJOjepzAQ*uJB2r9D3H1S^n0UK3_#XJh#A zVMtC%!{*ms!!BCUv+*CIP;W+GM-GfG#YjxSAR06ogV!`y=Zo^Bf-aui`Oy;u(alPRw%uQU1Z)57(1n^{gBJQ+~$9paJ zqkyhtZN(8!vl>we(bqG};A0##bB69^z@CeIYf;JG=mjcT2&3T0trMUgTcUL zvj|s@y$pvN>#>v5mA6y(pw?K2e#k*j2gehyp@>Klrv};jU<_Za)>oqvb)2MxWeNR| z2qZ&%s^?f8!Xc1AJ||3Paye|+FeLU!VE`|~e^Z*V((n-moGfRur(-m8CX?Qdw=`db zW0bRrK!0Q9q-(OBLAV6+L9EGSGAZf6p~HtzxoIc#Jz}v;zZNk@7jvdO#5+v^E+;wD z#kT(F%~7yayN#A4IbX;~kWoz4Ux+lEPAAM}Ge(UXNyWZV;!Bo02XnQrVP^cZuoGvGRhfU225-kfpO@I8f7fV5f*zATpEv+h?9vpb;f$kPkbIz^(!b&59Ku# z*e3$XHrs9mNgBm+s;a6mYt}3*TrdyFPryyC0odI10LB~}qKM)2iX#c6WZIv^RpECD zi?BfZ9>wXYyrvSh-A*8}n&#$ayt-x$E*mx;Z@l_0P>_MA9XH@{>ogQL=P7|$VvIn9 zYSN#;a`RgJ$}}GvQIBl(^KKs$fn<|*mqS(_MVx*6_MxP>7}IaPk%^59zs&E0%_rvK z)}v#Ucq8H{@8>@eXK(BQ%r-B*a`b8h_+c zT2z_#U|PaIF;n*nGHEqEX*UrNMRkGcXIHdinZ zTd=@27E6!ajX_O?$^}K2cM2g^V`pyjs(BLzFc812+07|y8YPP;wu&}lK?1okB;xP| z;_6+y@Zh|8n0ePUAU7MSnTdF_Wfo>1odk<5sg>1u#F5;l*t`n7X%89B6n@Y*U5H9<6Ab)X_}3=QN$IlnV*)AH zrb9+-f(6^QRlt&(gocI&tXaJpcTB$(-yPE+Gc(8gF8N{&C!R-ei6$RKw%+`u=w4bU zHpFkk|cjEi~l3odt zkl8EOZ(Xe+8yIA?Dsf(gLT3)j^*iu@?sXX4$sD61HhiB7chS9`@YdT1ban&Pk2X*R zEdSH2TIg!B!TQ&pmdHa~O%~YANK}?byHFg#9E$U?x2~XdkoMs@QZ_XH)F6G9z6YR< zKvYn&w3%d=&Cj|3N}s)b4?w$D*yw8e>1wi88I~)qrvXYR&I)fm0PVS$4-b)Yr{0+k z>7(?uU33@|IjWt#nZ;YS3-1RfkutKKX^=k2Et(zP$J(Jl0{#KHXX6Gk3KQt4LHcro zw{IOHsBI7o+B+DuWnpa`*~O`fYWT!?*>l)2g5D=Wkt!*Y%pW9)RCP733n6YbIaqN7 zowf!B?z6XrcLeVj3?)ye6hO{ZMypPVBM92XT7&M^NOyalRS{Uk>a@^Nf@H=e#`#Zi4ZE38AdcRlIs z1C~w&3U&4oUBQB4oqfn#u%K8cdrV*knM=lzf+q4?vX1P+#{>fZ2RSaHvTxCyt^fc4 M07*qoM6N<$f`v8i3IG5A literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxhdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..f35eaa1750dd9fb4c134f99b15f9c322e44ab648 GIT binary patch literal 4964 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..82870e8af3ed879481cfe313ea40ce902c0a634e GIT binary patch literal 26318 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 KMNUMnLSTaWdkq8t literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxxhdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_pink/splash/drawable-xxxhdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..0d37191b98853c6e80c02bf038427360c50b7056 GIT binary patch literal 7034 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 Yf5`2iOBSdGsQ>@~07*qoM6N<$f`B-B7ytkO literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__0.xml b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__0.xml new file mode 100644 index 000000000..c125b6bb0 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__0.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__1.xml b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__1.xml new file mode 100644 index 000000000..d429418bf --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__1.xml @@ -0,0 +1,10 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__2.xml b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__2.xml new file mode 100644 index 000000000..be41663af --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__2.xml @@ -0,0 +1,10 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__3.xml b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__3.xml new file mode 100644 index 000000000..b91965d0c --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__3.xml @@ -0,0 +1,11 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__4.xml b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__4.xml new file mode 100644 index 000000000..bd8a269b3 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/$avd_anim__4.xml @@ -0,0 +1,11 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/drawable/avd_anim.xml b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/avd_anim.xml new file mode 100644 index 000000000..6a569c5b9 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_pink/splash/drawable/avd_anim.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/src/main/resources/youtube/branding/mmt_pink/splash/values-v31/styles.xml b/src/main/resources/youtube/branding/mmt_pink/splash/values-v31/styles.xml new file mode 100644 index 000000000..c7462f74a --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_pink/splash/values-v31/styles.xml @@ -0,0 +1,7 @@ + + + + diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..23697c23f0645f01ab853e41bae868c337badf11 GIT binary patch literal 4112 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 JQJn!2^?$M5-S+?h literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0c7bdd8c497b69b871170962b6a87e9aedff2f GIT binary patch literal 4497 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 YswMk9o-d62LoHY;3YzlOvR0A*14{6CD*ylh literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..303e022d6f00f68c51cab407fbd3431256c12073 GIT binary patch literal 4106 zcmaKv_dgYm|Hb9H_KmnUiR{R@%HE1gwlXhQx^FAvDkFR43W;kc*Se%+uWO5ICL&yN zMOXIf=GyDq=O6g~@H*$0^Ei*kdHwc$Wo~K!V&r9{qM`yp4fQSmIqu&X($oIadqrA5 zsi;`Sq53-3!A{%x49_{Hcm}%Kv*T!V69(A=S;0Cr^hQ@Wz&44bN975O!cw;H7?$_b4(m2Nft-ZfDCPWv$X&Iow$tr&u0{&=sOg;#};-t za9j}T_Vd9{=>_8H{BFb^YwTyZ95*xV|6@?oM5}2#`zEd2fgFZX9nErTsX6jl~?rNG-Dd*8+4{>#3@}=+{pKkWdOD9jk_;~ z^=JV5zfLQNE%oU5Vv~aZxnrOI3KO<&MH{xSYhg8UPKmaHa;{lcPlKK_5KPW8e0) zT~QHrF=ciL$WJdi37mRdY8BGwvqrtfpWrgRC#0c@S0#`kKE2*8W|pJ?rU($;<1n?b zFWtM1Wq4h~EEPS`Th|Cj9o1B^^~0)(;+10aV&0gs>?Luc6v&F#5H35QE)M~-+}MNl z)N-mmwUN2)Z`9Xk3T@IAoO$RA-=&g?){NuS+jY5P#Q_#|Tn+2@##ItDjPm;+02J8| z9$3-=ek+qV4ZYA%8r+(#e=>CHJ3MF+Tk7}SQ{_mnwn4S60DD#WVWO&HW_NO?pNq^N0&D62K4|CYN$qG~+I7C*kZcj+bNzr+%S?*790 z&f=xjmZ$Pn<3pc$k&=k41`mS8^;|`0nQ5NTsT339`$n}W4uQgwu3wK)vzzEBQH-Em z^+2ANl2BhPk@T;$v5r>Z4@01N)Ejkjxul39!CYxHI*4edDj)X3aqpAS}=|E zUZb0tiWv(Z4cs{6Qxg*^H9$KMfaHNWb%md3CK71DNhcU*>! z{bRAkpRbafk@Zi9+7Y;hNMW-S4KbVH=AD2GqsebLm1A&<(mQlRe9ow`JJB-=+T{@q zYxMDPUE3|Mis809ju)MliT2Sxr?2r5p-53;tgZ%WlH6833p$wPQR2e5%K9;BcPZ;T z@!H|a*vQq!Q3IcuxQxZUQC657hQ%t=#^tzKB9eOglD6-$VZK^#*=B8oDwbtfqmLb6 zP%*gE)ztwOSR++NFBkP9{2yoU{2fVN|NE_6s4n;@ljKn2Sa&sRsnF`T_PMpn^9bLD zm8H_f^%aGm&9QzX-Qn)-VKtOwlL*vBKA^B5R`bl`TV!E0 z>sah6-f$B9?#s3GAlntdAS!=#*!#uK(~b|DMaMJo$gnZ;N1!iIK8%wcHU5_HWe{E4 zoRS`N(P%y_W|rP~Y-ZfM@6cC3O84icM5nZ%^MjHa+Cv+#zCXov)VVGEd9M$q60Wca zxDF;W-Qq62v8pO+7qvZ^y+9|wdjGRyzkJX#}e$Jl8j14GJ;-h>4?O7y|&km)P_gt*h?WgDlAQl;dq?sqTI z9c}tyonT25v$WXrR_JE#i;0boI%s>Uo2Ux*D<7Fa1D=MBe(!ryXY(tdf=!kbD1!r{ z|wqo@@f?-k+^0d_LIs}A2QTS>1SDWgg{M8J`a5RDrs}&H2OW}OpY^Y@2vu9q-y|G90 zl+`+hb6!Y8yo>94V$S@GUoc`3^BRq`_%u{lB_5DovCDtci)%FfYgZdo;gK)cInmit zO6o~une!P}zUa1`vdjX%g{|t8WCf6Rgs-$Gs=X*VRpMu$5oz=p0rDrfHvmA`3=q)Z z-o$t;y(rJZ3p6xNFP$Ly&V`D$r_{Uog#OKSWH%sU%T7w$+Z`F1wlQ5pYhKu569~6f zmC)_n1yui&In&u@vKm=w%5A(t)Di`I$@Ie28XVOE*qwREbl5T=+FY3O>w0p$f_1pV zxxK!+VIr`anOHyDPN67DsyPZn3PK;1sqbSc$8+qKzC?PJNf8Gr4`QaK2ad!yd-}&( z(!R+u%+95Qg%^7o|B!B}g>K7}gBf%Iw~6E&bNFDd?OUs-({(0KX{|4^F~7`gyc_-R zQOW#xj^{{pZrW`=LUsDw08t_`N5PDCB+`U>^)M5_qYR3OD14x>U?-MWg}KpYQ=K`< z`A4MZbdfp#9;H((C0bTNwm$n~FxO`KcKDc~p#8}*m+pwzGCuQqWidGv5&1B9ANZ~# zF)t6Dl|_50D&hMzQtyPaBkCNqA${(qCEN%5VboG>X=xRPw!#??myKqE4v8|+O?D(N z8iGhWl6^(lApO=hCdGLzV@Myn1B9`S!mDCuP9?`Rb1u5q(%=7Eu~o;znFwka=GmV> zoHpqWwH<1<_)IoVxb;66Y9TX9`iv$MjG(tzjHXEsEuRlOnN?l#CI_rZNp_Z-Zst`2 zy$)3N4b8`?@8M*P6RLCJ!J{F!oaR;P#CJjRB@_{ZPeD4>O01Uky_jFGqI==oyi3NN zcVa-*3k6ah7ht>A-#1$dz06*$qqY^`zo;cQ2_{DH$ItER0tHeVT9Tgh&Zw2*+>?%e ztWM(JWvL-dkU@l<1m@nByaPBi8arDsMz)px3H|1|RP)B}vScey9d=jatlYZE_g3c!@9Z@?;~i*{ z?XQORl($qu{NxP{?U_GVI{gKjGw`7ZXbh^cHuVEc`_@hS!MC^c%Q_f0n-K5CYwwQ* zq+~Kf*4O=@mWch~F~nr~I9iJwu?~5ftcW|~pUrbM(A&t&Fg^!yJk z1(fW9Y(-?%we)B) z^UhfpL9xH@?n;-c1wxlG=jb$2_LfXrsegai@j(^YzuQ@=^FO=VCIeZL^3ps^;pt#@ z49EMz(hbt&esd)KcPPh>e3GUMo``wd<7D(18m;qbF(*g%@zl*H5(h)kM^UdbUwbujWxQ_BbBcP<8*xq^`}j}x4bphzdCsRO4!d@!@l-?H86uxUsY z5xCQ>Iq}JjW%lpS$Fm(MfTWI+QlW#GXoGz~KJIf+QO;9YJI8pw0R6w$nsO6K zVxdDZv}1OXoixQ&DkVx9HPv?o4)Wv5Y9zW--69`p!m8&?I|s|?6_ zZ_>M15iqi1g^N_s6^z2s-Q2pjFL5os$ep52yYgz2pdBPm*@bsUsfcY|Ax7*;BZxEs zrUMICBo9$`>FhV=aVqPOfvS+CRZZ4ls*f*hXqFD$+>Am_r%Anw5YzszPKdX#*SxJx z1==G?D+|X^X)dMQ9olEuTsjk_xL39#3-F4;1vxGDIevLup8_aF7Eq%Dcf_3jp^FGv zf^;68vEg@1C`f>VxhD779C-7g55oasFsolhki-mmbLp|h9Cn`&Gtk>L#2|fZnGpS& zolt9&``TNj?6JKxC|yPomgXi@(MLcwEi>_NNoMJ)D_!k;G5WN{Kzsam1A*HN1_s(A zI$>jZ54jdUxkfhpY=<&jnZN7yXJe_%UrbSY22&}m=QX1FTj68vWgP#-RcHO#H(eYi z#06a~+DV>s7o6GQZUu0zp6lfLoVc`lxnV*yJNL1bM9z`ZTyi{8Yj+aV<;V7`SYj=^ zR_&9?QS4DaE}i}`Y6x<`#RcSBQCtlT=id&hexer|riiL6wb69rzd4e?=TOuW;Fk!%X=B58Kx>Mss8h`{HuTI*^bCm$#WkD0fP#3Jie@4R`XFD<56GNP zw!H9U2jy3)M(T@MV^P&_k;D0ycNi9u9BFzF)Vn_WQOw^nJJR)!O1fNhGM3zaz)Vt< zhe?@o{^>9rrI5YTc3mbd%pCuJWd0vc*RURIS$1(NhO$5O{m1xJ(0iu(Rl4w){{v*# B{7?V@ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-hdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..160f8456c9b45ad5071d309a3709399311310e75 GIT binary patch literal 4724 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-mdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-mdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e26dc7429473610fcec575e5f3647583710f0b8d GIT binary patch literal 2595 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 IM6N<$f(s4oqyPW_ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-mdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-mdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9f944bc0049cde62bb896c19ba55e7daf7342e GIT binary patch literal 2863 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 N002ovPDHLkV1mS=Y<&O# literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a7826dff27d165bc419fe1ab4acb3a08f895e2b5 GIT binary patch literal 5659 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..79b932e71d83ad9778d8290cf82f1146477f744f GIT binary patch literal 6092 zcmbVQ^-~mp)}>*ArMs6BSV~H|OL9r+kdjVmWa);L?oMeI35lh<1SO@y2Rn$d6K}CC>t#GiO`z1#3XA~65wAYGq z`u-M21pt3CgSJuaFQhHu#q#*}VJNSMuw#>@&GrxUu<0o;#LxsI&^xB9IJV*=(8AGp zMN78?cD)t8>d?`LY+bV-mvMBUvqZAGpoTS3Gu_QgJ%zsaJFFl{)r$F~HFI(|<5%mp z-tgsp*Kv*aiPTjlM||o3R*@vTKnd2KJN)BtrbRG8ES|3RN^ih>9(g4l*%%#+>WfpH z7LWqdsKTwnJZQZ~z5;^1LU==bhHi_F3>xE7eVMKxEU$FnqxhLwcF&Jll-i3JNlC;7 zwN-Vli6oQVh~SQ>gX$K~L(;Y6^tsSDpkx?`a5I1ykOVu9%tbsH5P*8dMTS<7t#mM_ zn86H1vyuqKM~aMDjeHi2g2jMlKSdS$*p@02%L4MDTc~3mEIWVCw8!*0B4#DK;^&*K zXjd;~0c(j{0XTOkbxe2ymCjfCVcarChQBWr!D^#@ixjA2eIIcsWS8lh@SdAK|q12*d|IkH#&eF1i506{%a&N9z_jWc})u=O~MHp*dCcI#$OEZ zC1(q?=IgG9lBg=ks`t&PL6LG63LozLeKQ7MTUc0R9j|w(e6P+bXf}{5)%_~r!5KLt z_jLew?4}9-SMxI0?bS)qmXG+IHC!x8!+q48oSYoH-E~!&@<0nn))xxuV34nEo;vbH z7?_(se9Po9ZAEVfE^87?Ms69-TIiqRll2R498sj@F<6T-F7#N`J=~AOwu5?6U^8kdu(?>%(A&V@M z>!SwSFH$w2tU0R8k!m|eV*#)m7+1IOw9R zkRbNe*B_5)xo}|NG{piT;p3#ggvqv%9cRahO?MtDQ?H7zudn{~&@y?K5k@G~qs!o$&(w2jZGaVXjU%s^++GL6N(8?|jbZgH`8AEv>8gIY61b9JLyZkG4F9ssLqv`zZNTSqw&(1kct zrH}}9wa_{kB?W@HsPSIcezwQb*DXwb*|h&vMF$N{xwCnxtyZrtftjd=FYpNbl2lpk z624HbVxRfV@D(N5$6%COR+;)MVq(Hi85iR3 zwK>8-9C_PHN=j^nWojKpuEdGaKIblN`SbM>dtaKf#$t(CSg$(dympgF_fAfblUt}Y zXM>dn%6XvUSh9opbJd!7xu}@8%SBr-^B4cp3I*L@yQAiyuI)eZ|gb?CE=#G@Nx#CeLdb(R|b zwg|PnoHFO$Q|TP~D$F^L*-Y$3ayEYY#6CVfO&{6qZ6;al7}>s7Juo02_(mi(E9;6Y zT&GZq(4Qrf*=BBDUS5J<{)49s zhkj67t5>Lq#u%6WOB$qI`$rBOvor!LvQ1%HkLeMDnZ(4zIb4GCtX;(U{em>c0fGrku?7g^kX01#N@V=Hj1c&@Qh;}C2{%-^n7hDFc=*CfMaZI z{POhl^mPZj3Qh3AHO@DMeyY82=WX4Q&(|#%>z2Z2->Us#(dX7$D&hnui_DChOpGAC z?;jiZ!UbUslruWXM;W5Cej{>uRuxM8WF-5oZ?m7=+=oS+noK9apY~!IR3=-g7xwrX zyQ7tD>w`aRYQ%-GSq5g59?}zdveeTq_J^@@U~$AAW*vXD2tXh13_zSVDH1gl_arOy*~+& zk&z=hHN56uShr~0-=>`_1|JytYTG+F-2KMLK%wtgl=tt(nZ;3QFL&SUJsrEE?>JT) z1IOO7*n(zmhx55O5@M8GHX0(=8Ens0phC(8G`?A4?D&#{(<>Z8i zAFm(&EawBpBQa8jy=8!oZi5Ps;^}f8f(_WncQ}nX$v#hE{OC)PgsXMS4%S76@iGs@ zPYBVaud06JmtvjVwx2o6#i-AM=ZH9GhugvR6c%X#`>WSDv4l^OIszVrF32LoaMU*A zclY$<34HXE$#%cMkVW8a6hD2+)j)vO@5OpkZnAN~Wd!5E=H1}W0Ll6FAsYZHbc

{%oEr0t)2LiLIH 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 POONteNlURo-YWb*V~K~C literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5da3bed4a6b1c3454721d847c06be2799cdd00d9 GIT binary patch literal 5614 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 Ig8AqF0}lcG82|tP literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xhdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..c2eff15ce513a9e88cf24b91bc3cc2ccef452bbe GIT binary patch literal 6392 zcmbW6_dgrn_s6}dl^RuhmfA(B86#%xJ!)^Y_a;`0Sglc%#vWC%R}o^AT1ALai9L&$ zwRe4e{)O)k_nx2bI_LGc=icW@)YDNV1uy_`aBxV~)m|Gs*wcq*OGNO{zrfg3;o#79 ztG`w-3bEeLCl04l?i#!o$+!^;NqdsOv`Pdk;<-iz7Rm;i6+|DL5MR=mC|jK+CX}p| z46#Lr@V$_YDESb=Dyutf)uc}TOQxK z$5tK`$hz&=oYh^My!oJ5tj9wIfc*bV(j7&1*W%XpQkWV*T)iF67MYOUSaF=|H&PgoU9lXCy%op|r)>c!D`wOKNIB1K z{rTTgZ3I7g;m5^c&cN!KJsi0%!~8f}ZxIs?y%80MC`SG@Lk%A?!Xr|<|Tocw)!9i)JOkseA75&E-c_lCy&)^@wJ7NVgA-DZ? zAAH>R-PxI$f1~ES6Br*>IT<%4TV?(9+K&1yM`jK?sstA*#F*RjWIbx-_$u7J#|h+B zV$&TN%92_x7d?<7xiSA^XL54V9JJ(0MMVV{77-z28~T@W9zbJ&Ww0O+30 z1YwN+k!;`Bk9vAEK0#RhM_3AyxWA=1M0`|I&`zY1uN<8BlaEocepQ1Z3@N^T@UAv# zd0AzZObLaa=6`=S&*@O5nS=J;CFz%ac6ed|VxrKq&RLKna8M{J^7tZbrL|&779|EP z$6T;)_=9#HX&I#iZ$(`?TXC&Gy?)M&xtWr*;Y@-L%77Q<-OF{~Y6pl^!`g~*QXMGY z++>jN#fW=b-+THHo(Jp(#)eqdrtNRW3qLbLX&#R=3lto*P5zyEG28LgbjQ!UFP}Jn z8_0h6NBi^gZ9Gd#!h1YIKT|%DP@=cT@fsQ$wbP{xz{5z7TEIZ`N(U$KFdW1nQ4}gf z0+}QvYRqTC9S@T&2u@^4ria@IE~L^&Bh#P2mpS3f&mV-bVoFNt$nuV~TtNkb-pUr} zo*v2275JPg`_ITLU&6-lK-*&143W6Jm9duYG$@7vb zJS@keG8M~b<*b$YQxK@T@L9U(l6f+eqcTm#&;nMX8)m0-XAn^NqRnmu^)&%m3i=ObOX!hsN zkhvbI^HB{~>#s)xAZ*lTj(5$)w7C)7IcBvWz|+j6Wc6L9lcgrYnS)DW44de$ z(>%l$$Xx_B6LN6ps<`Dh2S8snn;YBWM-25e1#AW1n7 z=p;WTSy%fo z64D`{N0gVFmv_sybcmPNO@;WE-7B<_F+Dv^4dkvRP?9V|-4i6vPAVAfZEn)Ix)Bcz zO{xAuFLwzdg$9K!N;U_?tp1I*B4!4|<9Mv<1XZrq_}>qsKg#m;SN5luP?7HIzi7hB2@10II* zd_9wyX$&s}eF8W-jbA6H#WaJu{fH*l?0C*9zzdHeCGfES_@nbU-lDnF;?}tptrfuq zwTJ#p=lq${hwX+emX`_Ptvg~@M{{8u?pLbmvn#(xy)f=; zy=@llj_MJixk*;Cbt9{nx{`E%UZXOwksaTksdGYpw6s$mkuUGd1)CLKNZJ@s1npA(o$^Xx!Bb%>`GfsOs*AG2xG?9UXyBz zeBd&Se^0_E`#pPC&w?DZX=>K-wqY~}WU^!v-fgrPP`DA@;M*x zF^Bg*u}S}(M_*RT!rY^qYJSN{GGN5T(jg>9kDAhcf@(5oF^S*a2jAg|&-6NQ1EP=I zXR4w5XW(&#+olySN+!APx|7F~fBC=SO|5D5&60_~Kb6LLniED&nRj3`gHpj<4L~g( z`{Y+qY*yAAS9kk9;-<>^$uL_wx2pGScZZRaz3PJ{$T6wo^w_VWsxocuXq}_J+LR2X z?Sq8H5L@SGb9VW=MlW;5Z_ub2_Ui(tYv*!05gr%Hc=LTc%8~f=$zq+&lvNba>1~9p z&T`z3qj3#QO-X?E@W@Ep!R0c&c(nVy=Ka4r_Lk>QDZc(J)$7$;jR(48h0i(81A zBwajHjBKM^ti@^__WL#t3H}3nGxZZgoVH$)1&bU<3MWrgSl?p`+!{@3Z(`+$&q@CYBn@COB zLwLj}^jNc53i=c-S=$CLhY?ud!;ip9E1jAk-NGYkpFV|$*cRTVNaGA8eb z)bcvJq1W?pH=54Fx7oe{i&10K0HK;$yR2**R{t$zhI?%;7vDX&+XE5${;hxwX9c3; zsf$?8o$RdHv=y#N^5*Wvd=7 zonCN3_TZZEZu)c9Txl#;fj( zf7y8gNXC+X2`XW6l5v*$Qt@mVU*^{IeA?mWc1ZgzgN7N!Qxgj$N!K^_$Lv5N)s5M+ zFN`-l)dvEkx8z{882rj+i6y+UEfcH%#YnvDBW1nS$3F5neQ$lpm7XWa6k$HGk25@6 z;N|ek4$RL~cYYNd0`Q`f11%tsPjO=?*iN} z)HCF4`n7s3TJrMpP7@+T)ft3r<%9I~^`&BCf=ttLCh3MpL%w2{>>eVX5`puQPei)~ zJu|dmu{E4GJLNb;Tv|3V%J(($lz1|;fa9gyj#rMcp3`-e)#HMU;dd+U8S&ev8x zZ;Xu_X)uc`TOZ3vC(3jAuQyG2-b^3iF4V)3lP zRIS(g`MdOt54-BdDwWmOeKO}0YT$PI>qWQnK})QOGgm@qRmiH8>$~Zn`t|VGKMsV3;$wI@36&;tf3P)Ck!`+m z1ZXnOzsl2dY1iAE3wafPuj}O0{$2FDhoj#jKCRP5uxy$=fw2cEB4J*yO1W79} z+vxlvhI}Kh;(~zn^TJ;_|TadfNi1L%TEk!CU)Oo1YSXEh~Gq zf0a6a7Cm(#$0$tMyZYUDRjWC-A@H{Ju?~-D#MfI{qj-5o9c^uz)DdpM?#pN<2@hDu zzhOS%+W`yFZsEI;QxSKrmcg2?xd z5P&Rmu37hB=V0~fL_=M*ehq77$F-Zc-7np2REvzK36$mjxpZynkNOR)U_>zonxgt< zvRK{zYHS{pmj#{wY`n_#?nfgutHXF)gCL|!hpZUma?^(ki%H%dto|0|)NxVJ<&U&v zLfDV}@S5yUI#Bh|9XoAe>>1=t6y2MA*8r5JLME%feY z;#FzNrMG5yZOVbMC{LjRn!`Gs^>*Y%o6+hvK|$SA#phV_NQB*G>N3qC$-1o4@P zG$eO9>I|8J0#l5mL{#p?cTAHGXjm#rtV4=^o0m2q6-3VU&@`&qU4SI5(h=rTCmwDQI9+h1$_e#h$E!}EvXf}m@rM01RQ zc5~pQQIoceo{4w5^l0neLH;v$N(8kyJ8-+mkVin^&)uG-*-u;CxJ){zfJg1ifK9}M zjMrJ8A#!9HyGfDfiXr^s4SAN7PD^VnR*PQ2F2fI?#oodERuG`GKi^vCWPgF3iZ^~N zC+UuhMMXy=FMrLZvVDst7)KE{AIpP=fpRcgFqfq>$jxQ&hJ(q_W!iq(?!--qMw0gz zi@J)Pbw8&xL84LZp3J>rpBkn@vgE6N}!oiMi|>SN0*C7$qgLSy^CPdtOX@P zUv>5)xK)mDtKzfc^TxnNuj6pDuzsdlAN11-bohvC!${Jqp5&!$zJ|a5iCq1v2Gm%E zmGWhb)@#gM+)Xm z&J&AYui`cKbab4KDi5(jFs7#Ho=$>L-XG#j?sVs`T)Lbh3Tq<%bG#)Ryk|a^DG9=3 zCvtD6PSXd<0e_F;&ZVROGJ)J;#Zddn$;p(yW8$%9A@$Q`)Y)5pgh zGh7m(mY?_Ve*8;(GKHHcHQx}$RS-zy)?fH!b6avL{$j&-9n>%qAomSTd%17mF~~Y5 z)~4+mf48hSuuk6_x9x?gXTvG$A{i`KYS~6;+sX~jbQ97i-`u8l&HGBpl&j*7Zl2U9 zUa5{seNuXV;$Xoo=579O{Dw@+&alLugx)HKE!DP+gVHlV&GiUjEiTj4c6Yj##r9Xgv*rz;AZX$eZS#V#A z{gi{wcps93@F5>h)vexwJy*Sr`a0kP*j0I;#436gb*i37-Dp47|B!!SU5vkVfZ*hq zzubz@1G9C?bZxc!^L z()WPXi%+@_7;o~V1l%ttj>g$uV^U9KZZI9&TU6MN0gbHfpkqe(M)El8%Yh? zQh=X62))s@$LtjoYWxUc`QZbfAu99RjjLEDoW=t3ym*$IY7Rh^2N<2psd|G#k6pa= wmJF+slq|*vbj+&*{=Y>40OUEzrzqSrts|`z7ZdbDMFU4&S?6`FqHXm50Z4CtumAu6 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ff65d77b65a753007429d179402e4d701bc74300 GIT binary patch literal 9057 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 F{|Cf*fSdpT literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..8fddcd918e26fcee002bc2c744495538bd3e95aa GIT binary patch literal 9957 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 F{{vrB4x#`6 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxhdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..c409055b6fb4ff04e656631ab55dd09bbcf6e764 GIT binary patch literal 10325 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 xB5Q>Z_@ku~@NVcGDFRZY6Oa%V^OSF)87> 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/mmt_turquoise/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3ce8784bf980ccf1427142e1a321b747a7500d GIT binary patch literal 9609 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/adaptiveproduct_youtube_background_color_108.png b/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/adaptiveproduct_youtube_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..42a6d56e53d5177809f46b8e0cf87d9ba51abd03 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz8AyKBd8P@Zm;-!5T%{EB{?9ZL1ab{LT^vIy sZoNHd$Oz;eTJY6Bm&<+ukck~UNKIE`V4Pi>xBw*Y>FVdQ&MBb@0NLglHUIzs literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png b/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..a173b5e5e6aefc844a9c649e9a3d0373d640bd96 GIT binary patch literal 2636 zcmbtW`8N~{7xwiQB3q*DB+4GfFtW{9LK(}95!sh4L&!FEjj`)RLI@%IPEv?6+4syK zyO|7QXKan_)8FvkbMC#rJonz`oadf-4l2v16B$ zhlYlMT~7-PM_F&oUNw5N%tg1IG`nQM3f5qYjCaO8$=- zAUq!99s_g=p+ADUj9bypCAo>Q^xUw{TO~z0$)$qUrp#cY$;jCa%6eEjQpVV2^7Q-} ze?a?|-@6^+@bTtx*w*G>LjT=! z!a}h!wg+>Cr_}+jJ}Y&W<5rK%hKvi@L-NXNd_#?7!#9p%ukF-;g(nSIx75Ygz$}cV zAK(v5O&)xtR2Dp}aDVk{)f+(FXS|X-6#79q=d6Rg!Xl*_Bo4^>MkwcK(TtH9KX*de z`Lk)sV(ykTuNdAs(N)OnIQqIc(n_X->737CiQDpb;}+ht8^(VQ@GT#|%Gdv<} z2|0nwp*q39RwVAoWsPKvXBOho@ys0cumr zjbOhrQk;$<}rJF zo()kip;VpP9_wflAc$U;HxsVW7!kc18I6rD7AfhnVRA`(pA1?F2E$OL>Bjap5-{s9 z)$`s;Qvn_8>)GEf2b0;VM&nj#qWtfswJ*Z0rm>n6`$0$U=E$gG3kQ!}t;1xD0#$shdyIe4SA;=?G#uvM=P7vbDD}50dnsQgX z*vqItM+5?W@Ta4cvMh%XU1wp z$DJ{cIMYta9!Su1-Xu`GHnp)qw%+)1Jz>MDYaEEDUjynzAgtN6GW%YF{nug?)TaGD zcp?sgdWWj-sBSJQ^?;N`tA(1h3Tb94dGt=$h8XY{@3lb#;q+DB(@Tl>dB+#bcM|7| zm^RJfnJdLVv%aeK2vwyk(f`RE0&{`SG6G$7-RnUsY}p6}(@Xf<4(wdk18qyopH}l* z9O%x#Z;$ORmPo8|YDgqr>idH*^BbvvLb!YVReF1hZb5wheenxYM?jlr=LdR+Dml^R zm6kqxHAYKkBpveQwnAZGBkBVACmpS%8DdRm=ve$A$2@&&qd9p?JDX9MI5%2i0>e|l zodZ%Sc5wtUCsPeu_Ar1Ng@Rqcm-HK)Q9UK6p6PANR%K$qrXN@oMJvUUWU;Vz5C~b9 zmf7)5h!zA2aG9!OVZ`xQjE3Y?8?{Vp#;h5y<98UUaS`sjOpO_jzz+NZ_sLy3Q^$Gr z)KZE8JsE}~l@w|qleGEaq?HHjk##Tq2U5EbBKiB&?oXyDdQ((F_#a@vGG5S$(GlJb1p z30CMXiW%sb833N-jkBE_C?s7%O?f>bVrsR{th!p(7+Wn1@|5-V`elo~*fYYTs6k1= z9F#NVgTr1bEl(tWo$GdSOh95(vZAW{m-{O66K4E_0xOQvm>I^tkIF)|@J!I|G1~Si zlaOZ8k=xgL4_jWy9PPMyJCmf7Q)w;j^f!y8rw(3oO`rH2)4ZwC?%QD z$nY>DKQK_NQlYO-?#y@lfy*jzoj);{Kr=)JEhi$ZO-jX={nU1S6()G!+?97|h_*bX z3)16xclIbLR$l$MMM|uJ6|#9H5NVciy|b*Tfg#47g~iI#Q^;|J&BhYe`aSHp&F=dc zc|>%RN0Bz@$4#F^@yRFjO$IXr1zD+3V*4eP1N9dffs`l(4#=h;$a_NqcNqTENX_-U zcHveqvydih6-=vhOEa#3b#64T%xQ76(33wGe{BD6p2}ufgOmxp5cdvs>pJGf`gdz-HgGan6K3&+`Qn zs-SNpyaA9H;2@0g%YO*iq{aI(ESO{MtQyYKd0(?H)Gep9I0QdJMqbE-KjD*%$1YC$ z6sS+}O)PvJiV)<+HZ30k`R1#Uwr*}yKUD-KqMW2nGK(6)%w=Y2IT!< literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0669abf9c82d25039486f634f3aeb0c0e455b5c6 GIT binary patch literal 3200 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 IM6N<$fb%7 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-mdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..651a02fd7d0e4135752dfabf15576ad4bd0ac7d9 GIT binary patch literal 2047 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xhdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..6bc5440cb31e88f0241199a6f48afefcbdb09f1b GIT binary patch literal 4193 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png b/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..c6edf6ec9855211ecda175b33869196c05c3d0de GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4rZW8hROCXK#DoQC&X1sLGS-eBS9dy*3-o? vq~g}wgN;BA!{G%#gXJGGg))LTGzT@zvy&MZueR6efvoa$^>bP0l+XkKKp+^@ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png b/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..3c547f94ba5827a100e45273e60bd934e0de8e72 GIT binary patch literal 5995 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/ic_launcher.png b/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..83ce3c6fbd327ba8ec39b1013548523c22bf68a6 GIT binary patch literal 8392 zcmX9^bzD@>*Iry;=?<4>X+cnW=?)3$R8SwZ;bKa?1t$;yz>=u0 zByZqtahQwmmp0Ydn{QfUSCgF-#;22^VQOReB$gXtG&Z-_Iu`?Tt~4+wKSY=lIuOoS z_|{(5&H0$)T-N)E1l^Y2HYva(RNh=qG2NguQlsabLb?^-K0;(}6`Wr*`r5}M6_KqfpMs3E zBsISmGE#q+srvr;i&YRe2#d_--`HgiQ96~FfuafOB;|)jdnIcV!@;F<2e38x({+f|wk-BFgZb9#L zjzwu8XfP6rLQ!Z|nfFa)Q6aKUvg3h7{~{REj7=l(s6`9ak~95kWx(#~LP4JCz0M z-fRia(#TgeGS7saMHp8L3`nRW;($76AydC>(ZqDNk1oK-H%C+CsfKj}vI7ywl%tB|k^$5!R5c7tf0sY{G=E z;Av6rlaDb~DEvcXq@hO`CxVkCiV)Lg^YJ1ZX>Ko=T^z+A=zHcqr|*G1Q7MtVgvEU? z@YCc)_76kuq8@W(^Def)e&tp-l0QQ(6McC-u@U4@^B*bwjcz z=;`!{Ys8b3NMz2%vPYOGqL)4MHwH||bm3)osUf#jeES5=1pd;r6O=b zfRaXA+9U9R`9{m(UzY2_Jv>L|XMe`Yr z84xJ?vGPz8?qDD7RaVPuhRabsZ1UY}rZSqupdtC5P{kr3QFJ%hDkRet5EF<`i0`}R z%$2^D-+y$WClQ>XeGIn{X&~~!Q(7JDOfOlqKp1jI5b)X)f+>jiI%f+c06hZq`gsMp zm6&=uf$<+Dl>I6>@^42Og4QzZYqnu-lTlVXkiL4qP;HiN2IX9N%rKVP>b`lUdKuIq zB_@_iTuBqhMK2~9F&*Ncxba2iRFvwVlTr`)3n=@0v%iuXf}V8?xaOP98lvAZAKtk*R3maI&7VagI?d2+R>5TS`sD8wV}vv>d2 z)soLrK_Z75)aHj87&_bPDm~i8vK`0otozBg5c&q+Hw{gltbnAR9+hx<2dKNR34T4i zWxx#?Fi8OIb=Ho_@UfEh2&iVL?WAHBBUQ5UKfQDvScmElB5~{@v`uz)&U|rqWfV^SwG@d)Xg^c*aQM zC@!c=6_6BK%lVTQHfrh1Rp0?rHTqS{_hWpSDtOJcG5EK`Mgntu5wAe6I_)3je>noI zh-aW-vCBe4Esl|@5~=j#ZyVzzqLY7L6fbh!U103uSl4!|T(>HY?ORuFp1}D&6@uMN zOrxPg`4(&4-dXkAQ*d}aUy#k5IMPOPWwo7$9od*vb;&}Mb9p9qx_0iPt6vR@@0-^VEz0byFLGGEfqku%S9n1}LDA_Y6ZH2` z{@X;v+snm}y4ln*cn)6T-{L#jD5$d$l6Hf|W)IssovP60(A;GX%A%2CYO9=?#GB=L zS)VME#3Z+MXSerZt6NKcnn^0GIlxD9YbYypsDkeTn`v@t>g~da4HE`q^( z4nFCSn~t|}x2SU$|NTcu-^D8Lcma>DK_l5% zLh1=>?R2EWc~I$vTL_9Pv~S&$tt&Zph`v31t3ud>`*^9UO3X$7@W(1nzm%h(UTOtw z;fzyi*CB|3^Y`OlPPPI%Z(A-4UV>Jb({E$&ud|`$GA?*x{P$Qt%&GvQ+3~Hx&1_W3 z7IMFbhBP(vq`-EX`N4q)3&H-({$X)^&=rXH!bh$Cd`aT;)8UZR=YfHU#*2^lvPhc} zhx`<*vi2-WaxoXG?ZETzYMRyz z+P`iTb2@+1cuiN#n$(_Lns|4$ua5@5hB!8W+)oYi&IU@qXhCozWT@QC^Evcj24~joG%T=(xw% zCP|ur%6W?Gjopr$yOgp2vLan(@sCPY`2I$Kh2G9*r5;q!r*=nuo&CvPd^|4oB~y9N zZE#)5I6XTD$LdNTh4ySlW8f z=A4G^b-S#hik`%)&$l-r2k}&luinC%Kmpm*b@%!v{i}7Q_x<#H`!4?$X3^uOc3_cU zHWGauouHp+yV!_~w~If&k8Y?(veh1i^AalNPw$N+>86nG&rBfY-*Yn;5hcAA9zhi-8H$(2AF|-={9YzgA9!d}y;u5M}4!vPb!IH@xDv zwzhurYsz^2ia4-m($(_KhpIue!;#70iO$b8F#DZ9Ekz5>J1H`$HEhA}lh11Kc)a+P zW~Ig0s!y;N;t`x5;6({|a>9$DOwxd60@JJ3L{38d($d0vZrfpaboqqBauc6)FtUN; z%a=@PUrxOVA=F8PY!^H&zC`K4wb8GgcQK~4PmI;wgp=a8#)_u)BsL?#$##x9epMV@ zbdFHpqoX6`Q&rI0fft4WWa6`NPE2nFMr|tP5|>%p)h8jU4DkD(&R=CCz(5ZGv!Go1 z(wpCDJmUUq22P(2wI&(9ZULZO=!75rQf-oKSm%ynEVZ-INb)Z(C|{9C!8WePlki_b z(CE5k5*MAoDbzL~<>HxQppe+A2SC1?*Abs9-{(o2-!LDt5ss>VN}rUHw=Fi5lGl-v z8-M-R>(|LW*8wqFl6yEZyV{?-HF!(>*4^O`3;V|U_b))Fam$ZQ;(#vZPnN8SX5j<) z^+5D-jadKSVAt8Moz(`dc9(nLtJnxm0YO2VUIf?lfq^hHLUnyY;Mi9%NxTS~AFK%y z|2fI{ls#qPi~eA;v=`(+B)`zL@4boO6rhn=FYejb_0Xd=!0j40jcj3$vXM~_z7pG>R-9VX>|AVirFmjHh%=Vs1}RJ^&o{xDna?yJrTPg(qm{w3Yf6{vE(I$~;1 z2yrdqrMXaX_T)9Q%}KZg1;!P{wqYOLKY41Pe^wCNE9nF1eW*D^l_5uKI;@h^E&;j8 zd2+a&Y$|cxIX~@w+19@~<#kNXgvVmX{FJ0232QYa@w-2vuktsG9;%`6j@;ZOv}5%S z5zoGrMQ++cKEmhhMnUDh;&K;dp1WAu#h>>QV|2){UVPBe(+e^G&`jKZ(?u!nQxV=O zpS$cDJUOFERs8Qx`fFYwDaBtWg%|qtEp?;sykqC%x6Z5^+Md&PF}H)DJ<2Yp%cQkl z(TYmzMIYl6UcxO{s~^Iz&Hc#!Fck=`;dwSQ7OTW};%txfM)$JKT-0YIr;iN+pd7)j zQpZ>DS~cg3uOgxS5atfw11uzOx`brV0?KA@;o%=qIuK2U1%kh1??hT}e-jDaVeyKy z_r*qT1)wS3`i67{;zB4{)^6k2+KB_Zm*|AlfXg!3TIr40}c-aAVZU`_NM7hR82!TKSYwy2IG? z70U=psp1TfORkE?ncol3it~)6=ej?G2s(L|q|tO`W#LwGonh6?*%ef4;daV^8sOnh zANV4V2&Y<%jwM7BZBby@6ZCwD&DX*Wj z{_2jVypjIT_b{AY3FByB+)5W|Tuei!CJBogFO#NB@|@i>7VE0hF!7*@dtAT5psZ)v zKs4T#AEefnOz@W&5C%?WdvzaHR9*&R=x=4@%aqLz>!nRO&bh)4ppsB2+26ZCVlN*CjhkD|ISpY&j{ z1zW4R^``8`NTOnlZ>`w&b?t1H!bd>w5i8OIj<_@1q;O~~jhxN^F9&cuoK3QQ>}TH@FAx@?rSP@&GYsvWn4WFT znFh>!Jivgctn72FY!4p_>G&sRvp85zfH{Z6|p;;BpN zrRH?($8M~J>*7wQD4^4P9r4lo`8Z@+z{$m|+Thd+_0RE-UHjtI8rLO|X)XtHk$BYP zfsdxvm(aK}=B+pvEgl$7emx~|c@=1si4Xnsqo#&}RO*;s{6tdwdY}65JzGByzY=QQ z>(?EEur{6f-{`!|fUuVR$6pt>-@i7k%Xt6R{8Vz_>Kepv+{*P(?F;sPey1Qkf2f zY!kKDQr+XO7kv;}UPKw1V*~2_YQD+jLe|UP9GvaOI437IX=J9rG;5Z1(yQ&~c{ieS zcf0%s{9Gz8L8Cl9f1~QYB8tPw>D=7hyxR5;-B8wDrAhs@NZs}NE|v7=LH4`={F37^ zrewO&4ra`$-fPPZ`(abhdT0V{3G}A;-bKk8-QN$j+ zyicn9uH5{NnvGd2pT)0@oX_uhWzDzWEsu%U;4wKD(8Kj=8~tOccbS>wx?Vqo{ERyNT*+>EkO-HWqx&hP}RXG@Tm zH{OMvR~Bxi_}I@eAY;{cxZ|S`0S?5umS6nHO+vpCjhQB-&c1Prq|b z2%TIAm>Cm3at|Vn(<8@GTA?^Px;oS6Gp(T#TlQu=(RiU_kU9Hvip$}>ECdF>gmy%# zlt(>-_?1mW$J2|gt!Zqpm-kJ>5N(Ug{|xXyVc<$eg^zB^FGu&zRh8L~wLVNwPOb#s z9Q92ZTa-H6@-XS{)K3|^-;gUK`Qb+{08>I89&+*`N2ZbUhKDxaO$W0QPOh3IG$*su z+|)uqH#s79>mz6dX5uN>&NUKqJT9GR*9W?p-AjDlHb*H^&rH1}B)mKZ#GA)Bfa~{3 zs+l8kdwO2t#G9bzZUaSzdBacwxwMF-@WFwKamLAqX=F~s(d8m1u%~Ie4hDQ3_(=-m z++I}gokUPhrE$6J6NO)5qlk)%ju>j*Djf`t&%ipXUfI?~aRRJmoo|2y^hT4tk$nDK zOu0&}fsL!ydA0^@{1i>X6mWb=6>#)PD$g?mKF`chM{o9bX90*;N%sYUhp~)Q`i$)U zkp5K1)IDvDdDj@-)_8|B%Kq=wCRoc2*BP#sTPPLQXma0AcP^TzW^p!N%Y~aL>#M?i5J3agQ=2aS6_CV5!ec>6RZJ2Xl zZX%cQd2*j(N%-Z#165b06f?9P%?cluU_5kcoLaaqV98H{H51+kxJ$yC&sD=$vX`X% z(9f8>R|5DNP6UyXxm4{BQcUs*_%H3TRroDqy0haN{WBZ^tce(ISc>e&JZXKz0nK<| z?ux(5LkVAugK=X767BY<5t!Kw?1i-mt?YbK980E=Z=ZQxQ8?RcxexPwMu8QmsU?)bq=Po|d z4(|hx$+4nJeMhr_Es8=9MVTCostJ?!_IlYIw-?yrdtPh~_`zFAN z^T0lJ9JL&O+&SmCOT~j=%w{kle;QlryK*^UZOqDaioCbAVBq>;Cl_ij z)w`#~ELD`1!>7MphJPsVJzkMtXkN46yB+r17!QsCJA#A~jzy7Od8s&wp879bVhk}` zPG0yx?3Uce5Jy@iK`T%mqb2x!&yS>iIH5(>*I({oKMbwUhFlr@gW7$M-x37ocwTu_ zk;idF2O4X9C%*(Sd17K&6e^_9ru_^Wxz+!K?5I%%1Cqc8x^Hr2R7nKK>T5%l9XD|- za|9S9Jk;oS_^z!W-hhR9L4H<`2#BcI{{L?KGbgn?ri^F|tRpcw4E$g?!m6vbxNrU_K${ z<-;#8F*gELRt_lZnNd5vMSbLI98TB22iCdLxQN(Q!|f@{tRGmZ{Vl{9)(s!qxWg6L2>Q(a)ns>fCZ_4Yesg`O0 z>Gtc7NuVpwZBr=b9`7GXM@97gE%N-MQh-#$ATg`^Wh;PogqooR%QCquzI;rR80`{r zIs$n>U;ah`U`iN+6iuR}ecm0dKT{2dY>_$Rir6quz9&e)kzye1x1l>drwfOaqDjmj3jQ_W`Ot+t zbPV!o=JR}ul4M`kM}nyehr6DBDPNzYt`33e3WJ5^!{uZi6EF&uDsS(J5cCv4F!9NT zKXML;_n>vteE(I4i0=Od>I1-8gD6d`eN9Wb4iRoqYfl7?BBX?@AEa3LBtk*mFQ@!3 zH^#Lx9rKkHPKlAstJq7ZJ|{}%_Ut1)FtU9VUpz9)>CS7f zvQVhte<)o<;o8Tj?>_MgHf z=eRpVm-c(!AC*hUoTGa?RZJLz@_3qMXhstpsR@+PWLi(33Dbyn(mc9)!)?%|qs9+u zGpN+%?(7ty3YWKm%hIVyJ+lT&mv=_eI5{I0|ONb$Y9Y(64T zi4>ObdkotnWR=gN$X^%Ja;+j-7Z|>lu^36tG0vJ4feL-4l=>5&I;M>*{uLE5icr@T z5G*@tLF4vgR0hM&PBd)&ks_}ys{;wkF({R?dAO`RPi~BHEUf#sDEYta3|SoWu@qdw zT4Pla>0*KG5l~vh!Y+=zA<$B}jwy_X$>Fx>68cIAasLO9E}syl=#cwn2h#3~?^`6e za<1BK6ap+PY^&=@HazBIwt*WU9+N&b8sE~tt!cCweQW?C+rfT6C-GTQxFl&IFMHGL zLklTg=s$o=+(KdE6}KI6IsMuirMi83#c&jRUAV#!qn@RK%zFqSbV-8$hqayuOSUO{ z{=@4#5z(kDrVfzrquH0oM9dm62VWaM7A{ds71YsR%Xg8PZKYwYzliz%eJP*d9Ev7# z`4IahsZ8?uU!X@sYp@e?xxWu3oW-M;34+#d>&3|Om5C|EWO@REwOLeuNZGgK$;Vzj zY_ldX7&nA?KJAf(o!$gfOt9*BJ*LPVSPPgFMktUw_RH708EwyBJ086IHl5ZQoTGd# z&b&$XgGX58H64Bb)vX3>xfs1EhduG;8%9MrAl82CDt1VKP3%td`9luKlx(yMvb5= z6v@SXi;Lh)h|&NZ%c~}t7HPoT>f)MuIK?;GBA3Ufb`%{>k zQF0NN8*bu49U4zrfQ0Ol2>idk?9G)E*4GBp6u8dDui{w#F1{}t@Yr%7c=%r;I0uL> zV2e8Dn&<}emkb0C)!pC%7&Rs1iPyc)|!1dXTwdh|Z#)hrrlRIXuF#T`b~{pNFR zA%bm2p@@-;D291Z3?`#J3TBty5S}BNV}OULe-Zx4u{z+{^#UFyRyn>@;IBDGdM(;* zq5zeX9c8tCVaT9Ba!H*!=>)xyj-}C1lS$ZEZBb1vR_Rtcb`|>w)=mRr<1;E47C3mP(%Ksf_pE5c5AXDJ4mYO={!0kOzIjlmt33%K2SapMr zlSEMSoBg=?2KdXQ#z?Zlsj85c*$JH)4kCdQ;UjYROba8%m7}E@01u>~wP^cJRNfrs Q4+Vg_vbNF>g*PGp2j6lj#{d8T literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/ic_launcher_round.png b/src/main/resources/youtube/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..83ce3c6fbd327ba8ec39b1013548523c22bf68a6 GIT binary patch literal 8392 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 Q4+Vg_vbNF>g*PGp2j6lj#{d8T literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml b/src/main/resources/youtube/branding/mmt_turquoise/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml new file mode 100644 index 000000000..aec9f0686 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_turquoise/monochrome/drawable/adaptive_monochrome_ic_youtube_launcher.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/branding/mmt_turquoise/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/branding/mmt_turquoise/settings/drawable/revanced_extended_settings_key_icon.xml new file mode 100755 index 000000000..5265f69ea --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_turquoise/settings/drawable/revanced_extended_settings_key_icon.xml @@ -0,0 +1,1038 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..b5b84787d09662bb9a54a9dd88170b437c8f1ac4 GIT binary patch literal 11130 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7093f75be8c2342a8b49ab68ff64e6fbe44211 GIT binary patch literal 1445 zcmV;W1zP%vP)_Tl?u_wxO`&+~l0 z-{*N13=ktmPaMN$204wCekz$k3Yy4fvVlBF);3@MP5PRlNf1Ruv3Z7ELFSS%q!x6M zb>t56FvU4#G7|a~L@{}6%E%`?6NASoaveq0c!!}8RuF|mvw5Ff?U}fD*ha3QFo$;- zh>(IPCYjAaa;9hE-s1$hh@$@X4)36kAfK2Y$*G=+p~D$+POzu|K|VJfC5Or~!4OO3 z`@2u)YkMFubHBt0WGz{<7rhqp?WSYi(Ey>U{7+%`hZfB4*?oHXLossBd?j5O2Sb)} zy4+~F@)vHojfju)JBBXb1a97jddmeRK|DSvjE%RXl-qAyb9)4Fuz<}g(hmg@lVmYr z#meO{$424wFUMgrCqvifK;qU?#J{uFB{Ll{lgGipw(D@6*Mo5e-_x35rJxEO z-6i*tTn7>0fYoYcm?*F$CSutO%kgdXQ9PPx#+h<@y5&0G>LD1Po(=2QWr&`T0r#bA zzGpQfSG343lZ&$7yGiA13*9cp3Weq5=A!(-K9ojV@axjo(Ruc~C$OU?jYHzQZy>&8 z0o2QlP`h1zTPGq!!wfy$Rl?3>&r}%Dlqi^6i1Arj9#I0f+YPfh0oge@n3y&KUoI(u zeWVphqtoch1jJC7A?q=8*PMd;`faTN-zpXomuW=ctGZ|{gTa8g^9oUO@;LJA&*RL- zkD)eQ1&lF>nKd0r``&@EU=m%(%*6XHkuXLqw1FLqcN`j_EaVTdR&sJOa-W)sG@Bh& zZ*IZEkB@>rWf+uUNr=s!41KZ%jw8G+ED@u_B^FBe_U{f(rxPZV2}_EKuyS4={&@aH zbR4LL(%A*oY(m^~&%(U9m~q7o5FY8lS4ThSCptBq){%cBf+X$Ki10xW6%~bcyB+)Y z?#1UvYLHdA8*z&Zp)!_~wsv$>9YWjsawwxEnFxy}5yS`_Jmd(_Q_O`64OqYWHLN{d zk4Y8p!H_+L7n2_D3zu+X<96IE+X;*^`<@Dmt0HIsNqC^S^<1#KyBptES0iuQEF8-j zkEt78g_6d+pRv>R)6e*~=xucVa27hA;u_AQ1`#CHfkt>;CRPy_U2Sg02b(ry*`_jN z9@>t~`2|qpVu5S_pnd0l*jBv-mr(~L-K1s93r>olT2iWmh!7DT_s}Y`_3P{EP`tPZ z+nsHgQn3}r31j6rhx6>8u&vz!`zPNpULJvB;B~1@jA*FUF%J=!NvRS6(P(XL^$4-q zY}m7BH|7`S<08+Tsl|(d;lqITTj>1m7+M#ugX8xrbWw`$SuEj_n=C!2-R4~5wH zBwW1M2z#3im6cW4@!3a6&B%hW!wJLqQBW91_Ad^i?ZaJkPYQ4PLFGkjCH?S(nJ+<; zSPEHt$&b336J2j=gwC9bRIBOEi7g2l+)#OiC~2BwB^Xk(O{0aJy>b6QrLY2;tC6lt zVmI46GXUJ3m~9mEsjuIs>R3ZcX>z|HYss3u2oOZ2QXefMrHC79$Qn|;29(sn77|fX zNzNgM(o*uj`&6xh-Wc)+h)%Ceh(dwbZH*00000NkvXXu0mjf$M?2n literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-hdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9d5b25744688203a3273189f13561f65d35921 GIT binary patch literal 2283 zcmV&izc$I<+jH*TrAgSZdpDaH_|2T$ z@B4DId;dA-JKwqAy#hkW$dvI$I;4|LBDv9QPBzCG&fvjFZv}QVI+#fj$_`e4E!+gch4blGKu@AXQ+St z3L{Zl=bn&9Dt&mJx>ZCme64)Vz33&3yu}s8P%plr zAYZ-q>s${-`UTg1T%&0!lO#z-yQ>RkqXB}@C$gz8Uu%WXQU{r*^N2VIMm?xA81Ous zMIv<_VnkVOvNWa-z~saw4A-~O%-sgp=O-XotcpiNjDx;=CuK=l5k{TKbXdjhKyfy;Bj=$BSo+jbSglr! zN=m|%DU)H1vEv^HN+Id2FbN_e9?yepjRLy6foKbiKN^p)6bD>o$0#BN2qp^6(7}%R zjD%hCh9ci2YNE5P8_`w^bUGc}Za2ESx?s24QBY8b(!U=-V!RcX>n@<_jrSp3sfM5@ z0g@Y%DIDQHpAP%(KO#IMi9)kR{lt)=Xwj)j;}tSZDZaVYh4edW1;rA$2rl z@*29`kR#0qpKv#MZX7y4u7KOw4#66xeoD~r-pXDU#_QHBWk>@z6UMMOgTa9Gj0`-I z|1j$6n{jMgF-+H5U`!hgA(p+4~Ni5$q9Hojjc_q*5p3!JTettgej!bkUn&ABH8nhI@ z3DMQ*@eZ9MnT#;bo`I;RWQNX*kw<9@Zsda z^RcR`3L7_Uz}i2oL~8B~*vr-->}RxBN@vca?zxxIxU~#IN*V-1 z&;@T_4zniq7{iZ8H4$dkqoJ`$sUlbq-=fsk)?(|HEtogwQPk8lBFUDHs9!t|*+Dm$ zoFLS-$+hoe)IPBauJe~E^y1Y|3>k_Rudt(JJl6uoW-;OLM<-En>J%Cp8t}!56Ij0d z8LTf_!<$2}MAD795>}KP$U_`@p0#NQoX@`ud2}>{Xzw{8gEg?0|JNyWF^lO?;^_qj zZ@*o2wqerU$vFMRDTtN?jEId?)+B+A!^PB_xiwiAz1bTaI}o>iR?YKL27x+(A0rYWw%)Bxd67`(gzJZ(8F(mH8VJePA6{>BY_$|;>alR#Fw3c{{gd?7^?a@F$n+w002ovPDHLk FV1l<5Wy$~m literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-mdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-mdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..c15d438501632d02a6b2e19a7d2780527b05db6f GIT binary patch literal 7241 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 Q4+Vg_vbNF>g*PGp2j6lj#{d8T literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-mdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-mdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..f74fcf1efb303a88685f07e38905b5d941d3b879 GIT binary patch literal 951 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_144.png new file mode 100644 index 0000000000000000000000000000000000000000..3e89b394d3add9210124ebc2b6c27e5789126505 GIT binary patch literal 14022 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..c185b67663868d222dd9d26f89250e3443ff4da0 GIT binary patch literal 16572 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 LQ>9`B)4=}+Z3**? literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xhdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..651a02fd7d0e4135752dfabf15576ad4bd0ac7d9 GIT binary patch literal 2047 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxhdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxhdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..0669abf9c82d25039486f634f3aeb0c0e455b5c6 GIT binary patch literal 3200 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png new file mode 100644 index 0000000000000000000000000000000000000000..16e81232448d88cfd337ce3175e8b9112788c5c6 GIT binary patch literal 26822 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_24.png new file mode 100644 index 0000000000000000000000000000000000000000..6bc5440cb31e88f0241199a6f48afefcbdb09f1b GIT binary patch literal 4193 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable-xxxhdpi/product_logo_youtube_color_36.png new file mode 100644 index 0000000000000000000000000000000000000000..c15d438501632d02a6b2e19a7d2780527b05db6f GIT binary patch literal 7241 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 + + + + + + + + + + + + + + diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__1.xml b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__1.xml new file mode 100644 index 000000000..d429418bf --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__1.xml @@ -0,0 +1,10 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__2.xml b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__2.xml new file mode 100644 index 000000000..be41663af --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__2.xml @@ -0,0 +1,10 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__3.xml b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__3.xml new file mode 100644 index 000000000..b91965d0c --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__3.xml @@ -0,0 +1,11 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__4.xml b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__4.xml new file mode 100644 index 000000000..bd8a269b3 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/$avd_anim__4.xml @@ -0,0 +1,11 @@ + + diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/avd_anim.xml b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/avd_anim.xml new file mode 100644 index 000000000..6a569c5b9 --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_turquoise/splash/drawable/avd_anim.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/src/main/resources/youtube/branding/mmt_turquoise/splash/values-v31/styles.xml b/src/main/resources/youtube/branding/mmt_turquoise/splash/values-v31/styles.xml new file mode 100644 index 000000000..c7462f74a --- /dev/null +++ b/src/main/resources/youtube/branding/mmt_turquoise/splash/values-v31/styles.xml @@ -0,0 +1,7 @@ + + + + diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-hdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-hdpi/product_logo_youtube_color_144.png index 59d9c788b5102f201c79c554fbed9a5323ed8e2d..969e420481e61994b69e6428f5357365ed8b34e4 100644 GIT binary patch delta 20 bcmZ4I@WF0E;>J!kc}@mTS3j3^P6RdP`(kYX@0Ff!3KFxNG*3^6pfGBC6L1@U$PsvQH u#H}HB`4t|Z1`W6kC7HRY#U+Wk1qeL~=(bpG`g$3tiNVv=&t;ucLK6U}#W|e- diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-hdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-hdpi/product_logo_youtube_color_192.png index 842de2040c82244878053afb5107140f1e6671d1..7de09c0fe0cd41321f09f0669e09890c2889061c 100644 GIT binary patch delta 20 bcmX>T(HA};abu^7HYbCptDnm{r-UW|RhI{U delta 210 zcmeARKNB$_QH_DKz$3Dlfx)&Jgc;jkaB?#+FtC?+`ns~eV3!qSRBun!E!Y^Zrd_XE z;u=wsl30>zm0Xkxq!^40j7)S5%yo?{Lk!KW3=FM|Ewv2{tPBj;-|960O+jeL%}>cp vtHiCLY{N7gpau=N4JDbmsl_FUxdjM43h1^dF5UhZsENVT)z4*}Q$iB}zv?+; diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-hdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-hdpi/product_logo_youtube_color_24.png index 04e2ba7c02c0bbf9b91dd5f278b6f6371b8bc629..93bd0313b6d6087c99f523ea29e43b7bc459a02a 100644 GIT binary patch delta 22 dcmeC?ILo%-Ipb!2rdUQ!22WQ%mvv4FO#oFY2OIzZ delta 212 zcmX@h*3GfuIinf_XMsm#F$05bGYB)bzu@F%U|?V`@$_|Nf59#*U@i1@Z>;R*r;PE8 z^{OSV5hW>!C8<`)MX5lF!N|bKMAyJv*T^!&(9Fuz(#p_6+rYrez#wL&coonXgofPw xl+3hB+!}PhtUm_SpaHj`Br`X)xFj*R0HH?#-Il6{eUd;;44$rjF6*2UngHPTI~D){ diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-hdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-hdpi/product_logo_youtube_color_36.png index d197ce496e308edf63a2c4fea37f64360d49633a..432a24c5a8e22b7835eaed14dfd400d493d5b6a6 100644 GIT binary patch delta 22 ecmZ3*{f2YHVy4ZfnH-on89ZJ6T-G@yGywo#I|sc0 delta 212 zcmaFExr%$kVkR{P&H|6fVg?4=W)Nm;_2(k{(@arkU>Vj^sDIRg-lLN z^{OSV5hW>!C8<`)MX5lF!N|bKMAyJv*T^!&(A>(vz{JNf_s diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-mdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-mdpi/product_logo_youtube_color_144.png index defe1077aa750e5745b53044122394e595579935..20661ce6b0f1405b2fc8c6029954535060756e5f 100644 GIT binary patch delta 20 bcmeyVv0HsY;>ONEVNM25S3j3^P6J!rX-)=DS3j3^P6RdP`(kYX@0Ff!3KFxNG*3^6pfGBB|+HqtgQure@se0ZZB&=iD*-29Zx vv`X9>Ce7n)0&38J+fb63n_66wm|K9*qkwM9(Qb`cpe6=SS3j3^P6zopr08*s~asU7T delta 210 zcmX@j(#f_VlTnqkz$3Dlfx)&Jgc;jkaB?#+FtC?+`ns~eV3!qSGST>EpF25?@lL&J ziEBhjN@7W>RdP`(kYX@0Ff!3KFxNG*3^6pfGBC0-HPSXPure^v*mU9_&=iD*-29Zx vv`X9>BHtG{0X1mAZ79jiO)V}-%q>9ZQ9!qa?^oblpe6=SS3j3^P6Xl`X-Y-MbuZD3$!V8AH9${lD7LPKtT xN@iLmZVd%aLcf6;G~hOrWag$8mn7yEAoM7p+oB$BtOC@;;OXk;vd$@?2>`}sH=6(e diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xhdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xhdpi/product_logo_youtube_color_144.png index 7ca77f4df9b3aee31921daaf99669f08e8dd801e..7de09c0fe0cd41321f09f0669e09890c2889061c 100644 GIT binary patch delta 20 bcmX>T(HA};abu^7HYbCptDnm{r-UW|RhI{U delta 210 zcmeARKNB$_QH_DKz$3Dlfx)&Jgc;jkaB?#+FtC?+`ns~eV3!qS9ZQ9!pvcp vtHiA#N#*Yvpau=N4JDbmsl_FUxdjM43h1_&8r}gqoPoj9)z4*}Q$iB}n2$JU diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xhdpi/product_logo_youtube_color_24.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xhdpi/product_logo_youtube_color_24.png index 032f1289704c40a403870f60cbf34a6552caab7d..0ac890ca95e6004e748cd5da930cc6ebb0b490f4 100644 GIT binary patch delta 22 dcmeC?I?J&knQ3!3(?dp122WQ%mvv4FO#oTG2b}-_ delta 212 zcmX@h(ap6XnMsX-v%n*=n1R8z8H5?zUvP3WFfg!}c>21szhIXYWaYkiv1R(^M5f1# z^{OSV5hW>!C8<`)MX5lF!N|bKMAyJv*T^!&(A>(v)XLCM+rYrez@Yxj@drR-5E^px yQ!>*kackh4SRVt_paHj`Br`X)xFj*R0HH?#-ImCfIH0Q;7(8A5T-G@yGywqd7dpHE diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xhdpi/product_logo_youtube_color_36.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xhdpi/product_logo_youtube_color_36.png index 2deaa90117eb69263cd43cfff8c21856195b88f2..ab2bd90a688914a4273f2ce19b08d9c471310399 100644 GIT binary patch delta 22 dcmZ3-_km}F6Z7UQW>scR22WQ%mvv4FO#oAX2Jrv@ delta 212 zcmeysvyN|r6SEovXMsm#F$05bGYB)bzu@F%U|?V`@$_|Nf59#*$f{Ai?d#Lc4$SJz z^{OSV5hW>!C8<`)MX5lF!N|bKMAyJv*T^!&(A>(v)XKy_+rYrez+htZAp@W>2o1UU xDVb@NxHUXrtLg!2(16=el9`)YT#}eufY76WZp(Jz=wP5G22WQ%mvv4FO#p2ZIgtPW diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xxhdpi/product_logo_youtube_color_144.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xxhdpi/product_logo_youtube_color_144.png index 85cab5838f3083f7b7b1ba285699a6e4487acc66..ab87706ac0bf051849fb3d8d9eefa09cff880bf7 100644 GIT binary patch delta 22 dcmdnr%h=e%I3aOk=X6(222WQ%mvv4FO#o$U2wngH delta 212 zcmZqdVcg%#I3ZDufwRCPvY3Ivwi$#O+h1^UGcYi)mw5WRvcF)L73ARUm5G19F@C0N zy=sYTL`h0wNvc(HQ7VvPFfuSQ(KRsFHL?sbG`BLaurf5(HZZUUv xB{QuOw}zY#PmcmMXuxeK$;?eHE=kNSK~tRRPa*z#$X8{>0Q z>s3o!BT7;dOH!?pi&B9UgOP!eiLQaUu90Pkp}CcTg_W^|wt<0_fkA9P-#?%!2o1UU yDVb@NxHafp+U5k*paHj`Br`X)xFj*R0HH?#-InU()8_&;F?hQAxvXscR22WQ%mvv4FO#oAX2Jrv@ delta 212 zcmeysvyN|r6SEovXMsm#F$05bGYB)bzu@F%U|?V`@$_|Nf59#*$S&00<9Btl1G74F zy=sYTL`h0wNvc(HQ7VvPFfuSQ(KRsFHL?sbG`BJ^w=%TQHZZU!} delta 210 zcmX>s(~tRNTX4)>oW8{>0Q z>s3o!BT7;dOH!?pi&B9UgOP!eiLQaUu90Pkp}Cczft7)!wgHedSgtpBF3=Q&hTQy= w%(P0}8m<+qDgrfVz-=hW%uOvWNz5%k=utqor7?}=A5as6r>mdKI;Vst0CT=OEdT%j diff --git a/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png b/src/main/resources/youtube/branding/xisr_yellow/splash/drawable-xxxhdpi/product_logo_youtube_color_192.png index 0f6c5a2e71f6d8e4264c2d9b968abc245aec540b..0ae02ab001febbe4bcba419713f3174057f8768f 100644 GIT binary patch delta 22 ecmdn+l~tRROMlZcYYIS3j3^P6ONEVNM25S3j3^P6RdP`(kYX@0Ff!3KFxNG*3^6pfGO)BVG1fLPure^%)o-B;GzFm{H$Npa vtrE9})0Z0N12t&CZ79jiO)V}-%q>9ZQ9!q4&hdo~Kurvuu6{1-oD!M<42?QB diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/yt_outline_chevron_down_white_24.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/yt_outline_chevron_down_white_24.png index 075578341e85bf1af0924bee97d33ddb6e91b150..8a170e6b07313fd121d5602eb35981903915bb7f 100644 GIT binary patch delta 9 Qcmcc2xR7yz%EYi*01_nwj{pDw delta 57 zcmZ3;c$sm6iauw7M`SSrgTNdRW>hU}oXkrghb7(7*O7r?V?Xzw JMAnIl4FImy4~hT) diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/yt_outline_chevron_down_white_24.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/yt_outline_chevron_down_white_24.png index 199c7c89b93d6238cc936c29c98881fbc4fcb999..83b64b09ed1b99c67a44ef2163e282f6e3a7718f 100644 GIT binary patch delta 9 QcmX@aIDv73%EYi701*TOTmS$7 delta 57 zcmbQhc!+U=iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIl`2ctU4k!Qs diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/yt_outline_chevron_down_white_24.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/yt_outline_chevron_down_white_24.png index 2176d1095af698586a3c5498c6ba9e6ea00efe62..706dffc6d0b60ebc4937894947cac93e19d3e831 100644 GIT binary patch delta 9 QcmZoVM%xNb!1@J*w6hZ Jk#(ZtIslFU4*>uG diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xxhdpi/yt_outline_chevron_down_white_24.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xxhdpi/yt_outline_chevron_down_white_24.png index 7e210f49c35065087586cbf81de3bd48c21fe020..0f95178bc5247b1e9d6ae19f815d17da039ce41e 100644 GIT binary patch delta 9 QcmX@jG?Qt9%EYj*01_($`2YX_ delta 57 zcmbQqbed^`iauw7M`SSrgQ5ipGrCSQOkiMOU@Q)DcVbv~PUa<$!;&U>cv7h@- JBI`uO9{`iS4_N>J diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xxxhdpi/yt_outline_chevron_down_white_24.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xxxhdpi/yt_outline_chevron_down_white_24.png index 325c0e2e6e29db27a58c3c56620e613440196e59..409e468b0ef36d197959718b6e71bacae4fe8099 100644 GIT binary patch delta 10 RcmZo*KF2gcd1I(HBLEZ3133Ty delta 59 zcmX@d)WAGJ*?@twz$3DlfkDR`gc+CGPFu;qz`$4> diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-hdpi/yt_outline_chevron_down_white_24.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-hdpi/yt_outline_chevron_down_white_24.png index cc9857401f721ef0e759c86ab6f9a248b17ebbd3..841f74500584fa86434a9e03d9cc5d2b5c0e9e4c 100644 GIT binary patch delta 9 QcmeBRy2dy`Wn$PS01+|+uK)l5 delta 57 zcmcb{*ugYGMW3_4BeIx*L0}FDGpe1nGGSm~U@Q)DcVbv~PUa<$!;&U>cv7h@- JBI`uOtpKX<52^qF diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-mdpi/yt_outline_chevron_down_white_24.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-mdpi/yt_outline_chevron_down_white_24.png index 221be027b9a9b516d3207596bfa183dfdc4c9337..2cc43530bc18e36108caae1c56111da2678ef977 100644 GIT binary patch delta 9 QcmX@jIFoUL%EYiz01=%7cK`qY delta 57 zcmbQqc$#s7iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIl6##qs4nqI{ diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-xhdpi/yt_outline_chevron_down_white_24.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-xhdpi/yt_outline_chevron_down_white_24.png index fda1975316fcd412daa28aa4ac548a8cd6701ad7..a396bb487730bf33093d94fc965a9f5c1739b2b3 100644 GIT binary patch delta 9 QcmZ3(^owzV%EYj1027u38vp&U>cv7h@- JBI`uOn*gBu4}t&y diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/yt_outline_chevron_down_white_24.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/yt_outline_chevron_down_white_24.png index 1e590d18b6800e37d789c61ec27b0ba523aa03cc..a4554b9367a87c2117269ac6bf2e1c484aec7119 100644 GIT binary patch delta 10 Rcmey%bed^`^2SgNMgSOx1Frx8 delta 59 zcmX@j^p|OZvH=5Ufk$L91B0Rk2s64)GfZG$U|=i`a(7}_cTVOdki(Mh=&U>cv7h@- JBI`uOjR2`E51s%3 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/quantum_ic_fullscreen_exit_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/quantum_ic_fullscreen_exit_white_24.png index e8264dfb1b3b0414966683fde5fd3056709df95f..0eebd1426e322afa30b990043e0cf4a93af21d1f 100644 GIT binary patch delta 9 QcmZo+y2Lm^Wn$Pm01)m2qW}N^ delta 57 zcmcb_*upeHMW3_4BeIx*L0}FDGpe1nGGSm~U@Q)DcVbv~PUa<$!;&U>cv7h@- JBI`uOjR2`E51s%3 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/quantum_ic_fullscreen_grey600_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/quantum_ic_fullscreen_grey600_24.png index b4fda997b12dafa0fcb6651aa7c663e329e23f81..77f34b5dbf47af4df5316af0141139bcf679cafe 100644 GIT binary patch delta 9 QcmdnU^q+Bp%EYkS02Av3DgXcg delta 57 zcmey*xRGgsiauw7M`SSrgTNdRW>hU}oXkrghb7(7*O7r?V?Xzw JMAnIl_W->K5G4Qr diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/quantum_ic_fullscreen_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/quantum_ic_fullscreen_white_24.png index b4fda997b12dafa0fcb6651aa7c663e329e23f81..77f34b5dbf47af4df5316af0141139bcf679cafe 100644 GIT binary patch delta 9 QcmdnU^q+Bp%EYkS02Av3DgXcg delta 57 zcmey*xRGgsiauw7M`SSrgTNdRW>hU}oXkrghb7(7*O7r?V?Xzw JMAnIl_W->K5G4Qr diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_copy_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_copy_button.png index 927583ecf607000374917fbfa588f9c89d31970e..32b55f4443a065d91e7e86a70e4dd3597aa46152 100644 GIT binary patch delta 9 Qcmcb>G>>V5%EYi=01|)%2mk;8 delta 57 zcmbQobb)Dtiauw7M`SSrgTNdRW>hU}oXkrghb7(7*O7r?V?Xzw JMAnIle*vy=5CZ@J diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_copy_timestamp_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_copy_timestamp_button.png index 918455b430d28253c9145253f64e047d9f086432..fbe9363cb761c76bdacefb192a65786317cd5a45 100644 GIT binary patch delta 10 RcmaFDyoq^&^2X49MgSM11Lgn# delta 59 zcmdnQ{DgUevH=5Ufk$L91B1XE5N1?6Yh}W~z`$4>&U>cv7h@- JBI`uOHvp#Z56}Pr diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_speed_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_speed_button.png index 8db5c39c62271ec3a6986461fec6988a772462bf..c8aa0cf492ccbae654dafffc4cbab2d89e133f7d 100644 GIT binary patch delta 10 RcmZo-xxhR@d1L5WMgSEA1Hk|Q delta 59 zcmcb>+{7|L*?@twz$3Dlfk9vn2s5gkwK8E~U|=i`a(7}_cTVOdki(Mh=hU}oXkrghb7(7*O7r?V?Xzw JMAnIl-vO)25Ags1 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_volume_muted_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_volume_muted_button.png index f73cd1ed7bd40407035438c559f4deba76aedb30..c159a73be49c48b8550d0184776d6eb79c5e75dc 100644 GIT binary patch delta 10 Rcmey*e3p5F^2X3ri~t$G1UCQx delta 59 zcmX@h{GWM(vH=5Ufk$L91B1XE5N1?6Yh}W~z`$4>hU}oXkrghb7(7*O7r?V?Xzw KMAnUpoQwd%WDiIH diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/yt_outline_gear_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/yt_outline_gear_white_24.png index 362e44846941b9c8288f1512512efc1424202996..72dfbb678e6d96b757b50d4c86f03e99bf423fda 100644 GIT binary patch delta 10 RcmbQpdY@&2^2SgbCIA&d191QV delta 59 zcmcc5GLdzHvH=5Ufk$L91B1XE5N1?6Yh}W~z`$4>&U>cv7h@- JBI`uOjR2`E51s%3 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/yt_outline_screen_full_vd_theme_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/yt_outline_screen_full_vd_theme_24.png index b4fda997b12dafa0fcb6651aa7c663e329e23f81..77f34b5dbf47af4df5316af0141139bcf679cafe 100644 GIT binary patch delta 9 QcmdnU^q+Bp%EYkS02Av3DgXcg delta 57 zcmey*xRGgsiauw7M`SSrgTNdRW>hU}oXkrghb7(7*O7r?V?Xzw JMAnIl_W->K5G4Qr diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/yt_outline_screen_full_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/yt_outline_screen_full_white_24.png index b4fda997b12dafa0fcb6651aa7c663e329e23f81..77f34b5dbf47af4df5316af0141139bcf679cafe 100644 GIT binary patch delta 9 QcmdnU^q+Bp%EYkS02Av3DgXcg delta 57 zcmey*xRGgsiauw7M`SSrgTNdRW>hU}oXkrghb7(7*O7r?V?Xzw JMAnIl_W->K5G4Qr diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_closed_caption_off_grey600_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_closed_caption_off_grey600_24.png index 9a9a3ab0b8a2d05f436483bca5338093736fc3b8..aea913be0ed25ec2f8f3345e338c30b3d85f4fad 100644 GIT binary patch delta 9 Qcmcb{w1jDb%EB;401_7iD*ylh delta 58 zcmZ3&bd70(iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw KMAnUp%!~k!Dh>w# diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_fullscreen_exit_grey600_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_fullscreen_exit_grey600_24.png index 938ae850e7aa920dcb9f573332b41f87daaf54bb..05b181ddf1fe09fcef7091973445b57cb24cb30d 100644 GIT binary patch delta 9 QcmbQo^oDVQ%EYh}01~JJ@c;k- delta 57 zcmaFEIFD(9iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIlrvZgi4!r;X diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_fullscreen_exit_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_fullscreen_exit_white_24.png index 938ae850e7aa920dcb9f573332b41f87daaf54bb..05b181ddf1fe09fcef7091973445b57cb24cb30d 100644 GIT binary patch delta 9 QcmbQo^oDVQ%EYh}01~JJ@c;k- delta 57 zcmaFEIFD(9iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIlrvZgi4!r;X diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_fullscreen_grey600_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_fullscreen_grey600_24.png index a1ffad66530fa0fbe0408f9e203ffffd01411529..dd0dbdd7ba7039c19f764ea50231dc140f62ac84 100644 GIT binary patch delta 9 QcmZ3^^p$af%EYjX024t33;+NC delta 57 zcmey$xSVN%iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIlR{)7j4%h$y diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_fullscreen_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/quantum_ic_fullscreen_white_24.png index a1ffad66530fa0fbe0408f9e203ffffd01411529..dd0dbdd7ba7039c19f764ea50231dc140f62ac84 100644 GIT binary patch delta 9 QcmZ3^^p$af%EYjX024t33;+NC delta 57 zcmey$xSVN%iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIlR{)7j4%h$y diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_copy_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_copy_button.png index ae6d26ddb475068205eac8d000cf61af2482c668..a4c1f7a420dee29e45092fdd404c10dbf31d0f79 100644 GIT binary patch delta 9 QcmeBTy1_U>Wn$PC01;FJwEzGB delta 57 zcmcb?*u^wKMW3_4BeIx*fm;}a85w5Hkzin8U@Q)DcVbv~PUa<$!;&U>cv7h@- JBI`uO?Erj#4uJpw diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_copy_timestamp_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_copy_timestamp_button.png index 8b3b6d3965520ad06dd73ba224efaac38c2fc379..11f6caa466bba0c24e8feb4e5b128169cb1a06bd 100644 GIT binary patch delta 10 Rcmey!w4Z5$^2SgZMgSL=1B(Cv delta 59 zcmdnb^pR&U>cv7h@- JBI`uOtpIzS4toFq diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_speed_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_speed_button.png index 62be6a185c73d0d5a21c371f09059a5cc26e09c8..4d29921ecf6fcb4b935ebb3fe4301d613ba6933d 100644 GIT binary patch delta 10 Rcmey*be3s?^2SgtMgSPE1GNAE delta 59 zcmX@h^q*;hvH=5Ufk$L90|U1(2s1Lwnj^u$z`$4>{ diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_time_ordered_playlist_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_time_ordered_playlist_button.png index 97aa46f6e077de48392a1816d52227a87d832eb3..7e1ede97df4a686023c276202ab11e628bbe52c4 100644 GIT binary patch delta 9 Qcmey#c${&9%EYk602HeP0RR91 delta 57 zcmX@k_>*yhiauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIl%K(r_4$S}n diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_volume_muted_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_volume_muted_button.png index 571c33a78f2141f75f7ccced829805a45b2de89a..8021c10cca4bd7fa4cee8b832959c50e4849858b 100644 GIT binary patch delta 10 Rcmey!w4Z5$^2SgZMgSL=1B(Cv delta 59 zcmdnb^pRU}oXkrghb7(7*O7r?V?Xzw KMAnUp?2G`A`VJES diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_whitelist_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_whitelist_button.png index 6c7c8072e41200b86965718145a8ba931cc918f3..33eb897c122b8a1184556a70281c7af83489661d 100644 GIT binary patch delta 10 RcmaFBw2oU}oXkrghb7(7*O7r?V?Xzw KMAnUpyo>;ovJNEx diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_fill_arrow_repeat_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_fill_arrow_repeat_white_24.png index b2b2e6f440432c340bed49c78832c4206bf45cbe..dfdfac8993ea3185f0df5cce9653517bfb98f536 100644 GIT binary patch delta 9 QcmdnZ)X6kKWn$P<01+Dl$p8QV delta 57 zcmeBV+RZdUMW3_4BeIx*fm;}a85w5Hkzin8U@Q)DcVbv~PUa<$!;&U>cv7h@- JBI`uO7XWqG4wV1^ diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_arrow_repeat_1_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_arrow_repeat_1_white_24.png index 4a75adfae25db676d06b0510a564d9bb705d9371..0ad8dd95da40c2ebcb30d48ae0cb5a1f040025a0 100644 GIT binary patch delta 9 Qcmcb}G@ogL%EYkW01}Y|3jhEB delta 57 zcmbQwbdhO-iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIl{{VlE4%Ywx diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_arrow_shuffle_1_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_arrow_shuffle_1_white_24.png index dd1ef8145ee79f7abe95a5b6befbcbad9d23ae4b..3848d2379363ec22f72e45c53c12ea70204094f2 100644 GIT binary patch delta 9 Qcmeyzc!qI;%EYi002KfP5C8xG delta 57 zcmX@Z_>Xadiauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIls{xXI4%`3$ diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_gear_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_gear_white_24.png index 2b6815f58f5d3de144d58fd4f780db0c722bb8ed..92e3f1ec4eae65132fb37f9593e5f7cc77afecc7 100644 GIT binary patch delta 10 Rcmcc0yqI}{^2X2xMgSIf1GxYI delta 59 zcmZ3?e3f~EvH=5Ufk$L90|U1(2s1Lwnj^u$z`$4>U}oXkrghb7(7*O7r?V?Xzw JMAnIlrvZgi4!r;X diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_screen_full_vd_theme_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_screen_full_vd_theme_24.png index a1ffad66530fa0fbe0408f9e203ffffd01411529..dd0dbdd7ba7039c19f764ea50231dc140f62ac84 100644 GIT binary patch delta 9 QcmZ3^^p$af%EYjX024t33;+NC delta 57 zcmey$xSVN%iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIlR{)7j4%h$y diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_screen_full_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/yt_outline_screen_full_white_24.png index a1ffad66530fa0fbe0408f9e203ffffd01411529..dd0dbdd7ba7039c19f764ea50231dc140f62ac84 100644 GIT binary patch delta 9 QcmZ3^^p$af%EYjX024t33;+NC delta 57 zcmey$xSVN%iauw7M`SSr1Gg{;GcwGYBf-GHz*rpQ?!>U}oXkrghb7(7*O7r?V?Xzw JMAnIlR{)7j4%h$y diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/quantum_ic_closed_caption_off_grey600_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/quantum_ic_closed_caption_off_grey600_24.png index 6c2e3d6e597d649841582ba2411a15b8cad34214..57aea85763483e1075c0ff6e6be84377f787ffe6 100644 GIT binary patch delta 10 Rcmey%a++m=^2SgNCIA?y1GE4D delta 59 zcmX@j@|R_TvH=5Ufk$L91A~|<2s3&HseE8yU|=i`a(7}_cTVOdki(Mh=&U>cv7h@- KBI`y)Mn(XnR}P#2 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/quantum_ic_fullscreen_exit_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/quantum_ic_fullscreen_exit_white_24.png index d631ae0d3403bf1f2b9a8b12fc4c84c9f961e32d..659800f494058ae545cad298661c1a3ab804a434 100644 GIT binary patch delta 9 Qcmcb@w1{bf%EYjL020Im6aWAK delta 58 zcmZ3)bcJbxiauw7M`SSrgP1A^GkON8d|+T;U@Q)DcVbv~PUa<$!;&U>cv7h@- KBI`y)Mn(XnR}P#2 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/quantum_ic_fullscreen_grey600_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/quantum_ic_fullscreen_grey600_24.png index e4702e744478b8c55d3a1bf0995eee8fe274ceda..aaa5d8d2abc5c52e81d2f867e0aae95245a94835 100644 GIT binary patch delta 10 RcmaFEw2Nti^2ShcMgSKx1AG7g delta 59 zcmdnR^oD7IvH=5Ufk$L91A~|<2s3&HseE8yU|=i`a(7}_cTVOdki(Mh=LhFvH=5Ufk$L91A~|<2s3&HseE8yU|=i`a(7}_cTVOdki(Mh= delta 59 zcmZ3^a+76(vH=5Ufk$L91A~|<2s3&HseE8yU|=i`a(7}_cTVOdki(Mh=&U>cv7h@- JBI`uOUjUOt4`u)W diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/revanced_volume_muted_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/revanced_volume_muted_button.png index a80d65d2834bfcdfdd749a8d84c83a7deb01710c..d00bace28ef1918c77cd5356ee8a1569d092cb7d 100644 GIT binary patch delta 10 RcmbQq`kZBg^2SgXCIA)T1Bn0t delta 59 zcmaFPGLvk@s~-;W diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/revanced_volume_unmuted_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/revanced_volume_unmuted_button.png index e9c207ab3458174f6538a249c1a93a92d6ef9ae2..5ee0b5dbeed3e9992bfb9b37dba8cc8f5f16760c 100644 GIT binary patch delta 10 RcmX@cGKFP=^2X4Qi~tr}1P%ZI delta 59 zcmbQja*SnyvH=5Ufk$L91A~|<2s3&HseE8yU|=i`a(7}_cTVOdki(Mh=GLL0~^2X5Li~tuS1S|jm delta 59 zcmbQoa)D)nvH=5Ufk$L91A~|<2s3&HseE8yU|=i`a(7}_cTVOdki(Mh=_d1I&{GXNBZ162S3 delta 59 zcmcb@*2X?T*?@twz$3Dlfk8|agc&`9R6Z~;FfbMexjQkeJ16rJ$YDu$^mSxl*x1kg LCy{ldqA@c7qe2e7 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/yt_outline_screen_full_exit_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/yt_outline_screen_full_exit_white_24.png index d631ae0d3403bf1f2b9a8b12fc4c84c9f961e32d..659800f494058ae545cad298661c1a3ab804a434 100644 GIT binary patch delta 9 Qcmcb@w1{bf%EYjL020Im6aWAK delta 58 zcmZ3)bcJbxiauw7M`SSrgP1A^GkON8d|+T;U@Q)DcVbv~PUa<$!;&U>cv7h@- KBI`y)Mn(XnR}P#2 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/yt_outline_screen_full_vd_theme_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/yt_outline_screen_full_vd_theme_24.png index e4702e744478b8c55d3a1bf0995eee8fe274ceda..aaa5d8d2abc5c52e81d2f867e0aae95245a94835 100644 GIT binary patch delta 10 RcmaFEw2Nti^2ShcMgSKx1AG7g delta 59 zcmdnR^oD7IvH=5Ufk$L91A~|<2s3&HseE8yU|=i`a(7}_cTVOdki(Mh= delta 59 zcmX@g^qpyfvH=5Ufk$L91B0Rk2s64)GfZG$U|=i`a(7}_cTVOdki(Mh=xGN6+ diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/quantum_ic_fullscreen_exit_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/quantum_ic_fullscreen_exit_white_24.png index ec962d35e65464b602cee323c5d8224f53bacea4..a74831b0e5f922bf3273358ec90384fea63a3735 100644 GIT binary patch delta 10 Rcmey)bd+g=^2SglMgSNO1DyZ> delta 59 zcmX@g^qpyfvH=5Ufk$L91B0Rk2s64)GfZG$U|=i`a(7}_cTVOdki(Mh=xGN6+ diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/quantum_ic_fullscreen_grey600_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/quantum_ic_fullscreen_grey600_24.png index 87eb4b20eed662e8299f217e4255cfc78a7d8416..92da603e381a16a2f42de391624a9b845b365333 100644 GIT binary patch delta 10 RcmbQj{D^6S^2ShmMgSFD19boZ delta 59 zcmaFFG=+JBvH=5Ufk$L91B0Rk2s64)GfZG$U|=i`a(7}_cTVOdki(Mh=+Qc?N*?@twz$3DlfkDv%gc)6@8743=FfbMexjQkeJ16rJ$YDu$^mSxl*x1kg LCy{ld;(8_kqf8Gc diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_download_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_download_button.png index 7414a3d623104e9f95fd8b34d2966a928ce232ea..9a07c87d6fd5b89a555e62955f9c515f7a46c4b2 100644 GIT binary patch delta 10 RcmaFBypDN-^2X3^MgSL61KI!p delta 59 zcmZ3-{D66avH=5Ufk$L91B0Rk2s64)GfZG$U|=i`a(7}_cTVOdki(Mh=1LuLBP| diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_speed_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_speed_button.png index 976cfda936abf82848f8cc7aa05f1096c0a31056..3bf00876ff7187fd51a5598a3dd958dd07d59400 100644 GIT binary patch delta 10 RcmZ3@{*!Hj^2X3GW&jsz1H=FT delta 59 zcmey#wwir{vH=5Ufk$L91B0Rk2s64)GfZG$U|=i`a(7}_cTVOdki(Mh=zsNR0d1I&^GXNAy155w_ delta 59 zcmcb}*33RZ*?@twz$3DlfkDv%gc)6@8743=FfbMexjQkeJ16rJ$YDu$^mSxl*x1kg LCy{ldq5(4iqcsk# diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_volume_unmuted_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_volume_unmuted_button.png index 9dc60eef6db2c162ed4adad7aaa10de1114fd12a..55a0e86bd7e02b420579162a7983fd18b343a907 100644 GIT binary patch delta 10 RcmeBXyU991d1L4{CIA)L1K|Jw delta 59 zcmcb~+RZjW*?@twz$3DlfkDv%gc)6@8743=FfbMexjQkeJ16rJ$YDu$^mSxl*x1kg LCy{ld;tnPNr*aQM diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_whitelist_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_whitelist_button.png index c75eb21bfa5e5150ffb6897b85210df4d56cf86c..420b0002a2aa02e4cc6449d74facb94e47ecea41 100644 GIT binary patch delta 10 RcmZo*KgTvfd1I(HGXNA01494+ delta 59 zcmX@d*1$eN*?@twz$3DlfkDv%gc)6@8743=FfbMexjQkeJ16rJ$YDu$^mSxl*x1kg LCy{ldqAoK4q0 delta 59 zcmX@g^qpyfvH=5Ufk$L91B0Rk2s64)GfZG$U|=i`a(7}_cTVOdki(Mh=xGN6+ diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/yt_outline_screen_full_vd_theme_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/yt_outline_screen_full_vd_theme_24.png index 87eb4b20eed662e8299f217e4255cfc78a7d8416..92da603e381a16a2f42de391624a9b845b365333 100644 GIT binary patch delta 10 RcmbQj{D^6S^2ShmMgSFD19boZ delta 59 zcmaFFG=+JBvH=5Ufk$L91B0Rk2s64)GfZG$U|=i`a(7}_cTVOdki(Mh=%m5gA1V#V= delta 59 zcmey#zM5l#vH=5Ufk$L91A~q?2s19VowkyJfq}6&$lZxy-8q?;Kn_c~qpu?a!^VE@ MKZ&dx6>l&D0NJJxm;e9( diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/quantum_ic_fullscreen_exit_grey600_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/quantum_ic_fullscreen_exit_grey600_24.png index 80336495b2257306609d9b500da9893904d15a19..c8f95d9d7bc7aab409130dd1b16b4fa218002b43 100644 GIT binary patch delta 10 Rcmcb|yoPy#^2X3kMgSKp1JnQj delta 59 zcmZ3(e2;m8vH=5Ufk$L91A~q?2s19VowkyJfq}6&$lZxy-8q?;Kn_c~qpu?a!^VE@ LKZ&dx6}uS$(54V3 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/quantum_ic_fullscreen_exit_white_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/quantum_ic_fullscreen_exit_white_24.png index 80336495b2257306609d9b500da9893904d15a19..c8f95d9d7bc7aab409130dd1b16b4fa218002b43 100644 GIT binary patch delta 10 Rcmcb|yoPy#^2X3kMgSKp1JnQj delta 59 zcmZ3(e2;m8vH=5Ufk$L91A~q?2s19VowkyJfq}6&$lZxy-8q?;Kn_c~qpu?a!^VE@ LKZ&dx6}uS$(54V3 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/quantum_ic_fullscreen_grey600_24.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/quantum_ic_fullscreen_grey600_24.png index 4f4c275c5299b3080bfc17c5a54eadd761c291f4..69678d1f9c623f2cc9986845fb8372c5b96d81c5 100644 GIT binary patch delta 10 RcmdnY+{ipZd1GiCBLEZ615*G1 delta 59 zcmZo<-po8f*?@twz$3DlfkDR`gc+CGPFu;qz`$4>-V^2Sg}762E%1Cam# delta 59 zcmdnP@s4AHvH=5Ufk$L91A~q?2s19VowkyJfq}6&$lZxy-8q?;Kn_c~qpu?a!^VE@ LKZ&dx6{T4K*+UQG diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/revanced_volume_unmuted_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/revanced_volume_unmuted_button.png index 3a0a8d9d0c68f1e3d1bc15addf8c84829674dcd0..8be2cec9180bab2046a2fe8f296915efcee6800e 100644 GIT binary patch delta 10 Rcmcb~zMOr6^2X2>W&jrn1J3{e delta 59 zcmZ3^ev^HIvH=5Ufk$L91A~q?2s19VowkyJfq}6&$lZxy-8q?;Kn_c~qpu?a!^VE@ LKZ&dx72B8r&>|2a diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/revanced_whitelist_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/revanced_whitelist_button.png index f4e230bd3d893ad430291241ff90ab15cbe70379..9906823d1af1fa0680411631aa432c1c9851aa2e 100644 GIT binary patch delta 10 Rcmey*ah79(^2Sgt762I%1H=FT delta 59 zcmX@h@tP delta 59 zcmcc1($6|U*?@twz$3DlfkDR`gc+CGPFu;qz`$4>MMT MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Blue Revancify Red From 71e72336cac50b295cf47e26a51ce1ef51860212 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 17:08:45 +0300 Subject: [PATCH 031/103] chore(Python): Update prefixes --- src/utils/remove_unused_strings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/remove_unused_strings.py b/src/utils/remove_unused_strings.py index 744899bac..c5750f4cf 100644 --- a/src/utils/remove_unused_strings.py +++ b/src/utils/remove_unused_strings.py @@ -16,6 +16,7 @@ ) PREFIX_TO_IGNORE = ( "revanced_icon_", + "revanced_spoof_app_version_target_entry_", "revanced_spoof_streaming_data_side_effects_", ) From 32b11553500b6653dcab3e5aa365a46b3621eb40 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:34:17 +0300 Subject: [PATCH 032/103] chore(YouTube - Custom branding icon): Revert YouTube Minimal --- .../revanced_extended_settings_key_icon.xml | 2057 +--------- .../afn_blue/splash/drawable/avd_anim.xml | 101 +- .../revanced_extended_settings_key_icon.xml | 2257 +---------- .../afn_red/splash/drawable/avd_anim.xml | 101 +- .../revanced_extended_settings_key_icon.xml | 3311 +---------------- .../revanced_extended_settings_key_icon.xml | 1063 +----- .../revanced_extended_settings_key_icon.xml | 1055 +----- .../yt_premium_wordmark_header_dark.png | Bin 0 -> 585 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 585 bytes .../drawable-hdpi/yt_wordmark_header_dark.png | Bin 0 -> 585 bytes .../yt_wordmark_header_light.png | Bin 0 -> 585 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 447 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 447 bytes .../drawable-mdpi/yt_wordmark_header_dark.png | Bin 0 -> 447 bytes .../yt_wordmark_header_light.png | Bin 0 -> 447 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 748 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 748 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 748 bytes .../yt_wordmark_header_light.png | Bin 0 -> 748 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 1066 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 1066 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 1066 bytes .../yt_wordmark_header_light.png | Bin 0 -> 1066 bytes .../yt_premium_wordmark_header_dark.png | Bin 0 -> 1407 bytes .../yt_premium_wordmark_header_light.png | Bin 0 -> 1407 bytes .../yt_wordmark_header_dark.png | Bin 0 -> 1407 bytes .../yt_wordmark_header_light.png | Bin 0 -> 1407 bytes .../revanced_extended_settings_key_icon.xml | 25 + 28 files changed, 357 insertions(+), 9613 deletions(-) create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_premium_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_dark.png create mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_light.png create mode 100644 src/main/resources/youtube/visual/icons/yt_alt/drawable/revanced_extended_settings_key_icon.xml diff --git a/src/main/resources/youtube/branding/afn_blue/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/branding/afn_blue/settings/drawable/revanced_extended_settings_key_icon.xml index ede82d9f1..c420684c3 100644 --- a/src/main/resources/youtube/branding/afn_blue/settings/drawable/revanced_extended_settings_key_icon.xml +++ b/src/main/resources/youtube/branding/afn_blue/settings/drawable/revanced_extended_settings_key_icon.xml @@ -1,2032 +1,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:height="48dp" + android:viewportWidth="740" + android:viewportHeight="740"> + + + + diff --git a/src/main/resources/youtube/branding/afn_blue/splash/drawable/avd_anim.xml b/src/main/resources/youtube/branding/afn_blue/splash/drawable/avd_anim.xml index c9061c82a..951215995 100644 --- a/src/main/resources/youtube/branding/afn_blue/splash/drawable/avd_anim.xml +++ b/src/main/resources/youtube/branding/afn_blue/splash/drawable/avd_anim.xml @@ -1,5 +1,96 @@ - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/youtube/branding/afn_red/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/branding/afn_red/settings/drawable/revanced_extended_settings_key_icon.xml index bc9942311..97c066bd8 100644 --- a/src/main/resources/youtube/branding/afn_red/settings/drawable/revanced_extended_settings_key_icon.xml +++ b/src/main/resources/youtube/branding/afn_red/settings/drawable/revanced_extended_settings_key_icon.xml @@ -1,2232 +1,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:height="48dp" + android:viewportWidth="740" + android:viewportHeight="740"> + + + + diff --git a/src/main/resources/youtube/branding/afn_red/splash/drawable/avd_anim.xml b/src/main/resources/youtube/branding/afn_red/splash/drawable/avd_anim.xml index c9061c82a..877e9452b 100644 --- a/src/main/resources/youtube/branding/afn_red/splash/drawable/avd_anim.xml +++ b/src/main/resources/youtube/branding/afn_red/splash/drawable/avd_anim.xml @@ -1,5 +1,96 @@ - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/youtube/branding/mmt/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/branding/mmt/settings/drawable/revanced_extended_settings_key_icon.xml index 085d98c17..13a1298ec 100644 --- a/src/main/resources/youtube/branding/mmt/settings/drawable/revanced_extended_settings_key_icon.xml +++ b/src/main/resources/youtube/branding/mmt/settings/drawable/revanced_extended_settings_key_icon.xml @@ -1,3288 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + android:height="48dp" + android:viewportWidth="326" + android:viewportHeight="326"> + + + + diff --git a/src/main/resources/youtube/branding/revancify_blue/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/branding/revancify_blue/settings/drawable/revanced_extended_settings_key_icon.xml index c088bcfcc..5f052277f 100644 --- a/src/main/resources/youtube/branding/revancify_blue/settings/drawable/revanced_extended_settings_key_icon.xml +++ b/src/main/resources/youtube/branding/revancify_blue/settings/drawable/revanced_extended_settings_key_icon.xml @@ -1,1034 +1,33 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:android="http://schemas.android.com/apk/res/android" + android:name="vector" + android:width="48dp" + android:height="48dp" + android:viewportWidth="384" + android:viewportHeight="384"> + + + + + diff --git a/src/main/resources/youtube/branding/revancify_red/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/branding/revancify_red/settings/drawable/revanced_extended_settings_key_icon.xml index 98cfb9ccc..668ea4cc6 100644 --- a/src/main/resources/youtube/branding/revancify_red/settings/drawable/revanced_extended_settings_key_icon.xml +++ b/src/main/resources/youtube/branding/revancify_red/settings/drawable/revanced_extended_settings_key_icon.xml @@ -1,1026 +1,33 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:android="http://schemas.android.com/apk/res/android" + android:name="vector" + android:width="48dp" + android:height="48dp" + android:viewportWidth="384" + android:viewportHeight="384"> + + + + + diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba804ae05b9e52b6623327b0195af6a83b15230 GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9Drb3m9;?W~mvP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxqF^2jv*C{Z*SerJ!Bxl`r!7e_rB@}<}N5< zc5C33Xyi?3F>t)ayUWpyL;A>E1%t-wyGOKoV;nx^ulnp6&dJCBFyYaI85}@^VPI2% z`$Ww}P3GKsj(`8v6!g>uLWdd-Ij<`2F|amJ)*)(dnm_Sgq52+Tia} zuvN0PIL>tGw8--tufAJf%wNYVwa!xZ>Dv>IHaGe11XmQFn!nHPTn@Xyh5qp9-KbmqoVZ4hxHiYGvlSnk)ZA~^i0i}R0Z1Q6jX$oXp*;KE QjZ%=Pr>mdKI;Vst02J@<+W-In literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba804ae05b9e52b6623327b0195af6a83b15230 GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9Drb3m9;?W~mvP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxqF^2jv*C{Z*SerJ!Bxl`r!7e_rB@}<}N5< zc5C33Xyi?3F>t)ayUWpyL;A>E1%t-wyGOKoV;nx^ulnp6&dJCBFyYaI85}@^VPI2% z`$Ww}P3GKsj(`8v6!g>uLWdd-Ij<`2F|amJ)*)(dnm_Sgq52+Tia} zuvN0PIL>tGw8--tufAJf%wNYVwa!xZ>Dv>IHaGe11XmQFn!nHPTn@Xyh5qp9-KbmqoVZ4hxHiYGvlSnk)ZA~^i0i}R0Z1Q6jX$oXp*;KE QjZ%=Pr>mdKI;Vst02J@<+W-In literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba804ae05b9e52b6623327b0195af6a83b15230 GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9Drb3m9;?W~mvP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxqF^2jv*C{Z*SerJ!Bxl`r!7e_rB@}<}N5< zc5C33Xyi?3F>t)ayUWpyL;A>E1%t-wyGOKoV;nx^ulnp6&dJCBFyYaI85}@^VPI2% z`$Ww}P3GKsj(`8v6!g>uLWdd-Ij<`2F|amJ)*)(dnm_Sgq52+Tia} zuvN0PIL>tGw8--tufAJf%wNYVwa!xZ>Dv>IHaGe11XmQFn!nHPTn@Xyh5qp9-KbmqoVZ4hxHiYGvlSnk)ZA~^i0i}R0Z1Q6jX$oXp*;KE QjZ%=Pr>mdKI;Vst02J@<+W-In literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba804ae05b9e52b6623327b0195af6a83b15230 GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9Drb3m9;?W~mvP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxqF^2jv*C{Z*SerJ!Bxl`r!7e_rB@}<}N5< zc5C33Xyi?3F>t)ayUWpyL;A>E1%t-wyGOKoV;nx^ulnp6&dJCBFyYaI85}@^VPI2% z`$Ww}P3GKsj(`8v6!g>uLWdd-Ij<`2F|amJ)*)(dnm_Sgq52+Tia} zuvN0PIL>tGw8--tufAJf%wNYVwa!xZ>Dv>IHaGe11XmQFn!nHPTn@Xyh5qp9-KbmqoVZ4hxHiYGvlSnk)ZA~^i0i}R0Z1Q6jX$oXp*;KE QjZ%=Pr>mdKI;Vst02J@<+W-In literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3542f98f51990460642b2844e4dfa82aa7dfeed9 GIT binary patch literal 447 zcmV;w0YLtVP)k0n6~7;azXA_8S@kOmNS`0XUsxMEHk0n6~7;azXA_8S@kOmNS`0XUsxMEHk0n6~7;azXA_8S@kOmNS`0XUsxMEHk0n6~7;azXA_8S@kOmNS`0XUsxMEHw{PIJDkBa%i&&98v6is^If7_|=&*O?oGB@ttnCZRz zp3rLV-~U`oDkd5A=2Vw{^MB8|;s5E=La}$udD9PgoD#chFEnA^FP4y?ZHa3Fotb); z1nk@+rOY)WVsRUbjR%(%2&a2v{nvlQq&eq8d^Mp2-&o7_Kv3F|Rrn&pn81M3W^Dhd0&uQUv z=9ycoyhDyb}!7-lKYv;Chh zXU0FS5zf9+z_w)WrR@=K^fukTm&WJze`6a-{ZM(^J6ygUlFG_FOUyfHh+4Z<7vqU z^QZpUykLuG)O|L|7-p3<>t}gIE^EG{WmB%U=cbWZ)*jDwZ}PUDIkaq+{uI4GjmDeJ z{mjlK&RlhW;a{T=;cd>Av9q%J?CSDfzOu|c9l~FKt>x`Qq0sZwXZjkR4q-$}B0%Pc a%zB2RfF0twpX+~vWISE{T-G@yGywobPeV2U literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..c12303a7d3d152646a2da7ac566e1175de9d55bf GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9E$svykh8Km+7D9BhG zw{PIJDkBa%i&&98v6is^If7_|=&*O?oGB@ttnCZRz zp3rLV-~U`oDkd5A=2Vw{^MB8|;s5E=La}$udD9PgoD#chFEnA^FP4y?ZHa3Fotb); z1nk@+rOY)WVsRUbjR%(%2&a2v{nvlQq&eq8d^Mp2-&o7_Kv3F|Rrn&pn81M3W^Dhd0&uQUv z=9ycoyhDyb}!7-lKYv;Chh zXU0FS5zf9+z_w)WrR@=K^fukTm&WJze`6a-{ZM(^J6ygUlFG_FOUyfHh+4Z<7vqU z^QZpUykLuG)O|L|7-p3<>t}gIE^EG{WmB%U=cbWZ)*jDwZ}PUDIkaq+{uI4GjmDeJ z{mjlK&RlhW;a{T=;cd>Av9q%J?CSDfzOu|c9l~FKt>x`Qq0sZwXZjkR4q-$}B0%Pc a%zB2RfF0twpX+~vWISE{T-G@yGywobPeV2U literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..c12303a7d3d152646a2da7ac566e1175de9d55bf GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9E$svykh8Km+7D9BhG zw{PIJDkBa%i&&98v6is^If7_|=&*O?oGB@ttnCZRz zp3rLV-~U`oDkd5A=2Vw{^MB8|;s5E=La}$udD9PgoD#chFEnA^FP4y?ZHa3Fotb); z1nk@+rOY)WVsRUbjR%(%2&a2v{nvlQq&eq8d^Mp2-&o7_Kv3F|Rrn&pn81M3W^Dhd0&uQUv z=9ycoyhDyb}!7-lKYv;Chh zXU0FS5zf9+z_w)WrR@=K^fukTm&WJze`6a-{ZM(^J6ygUlFG_FOUyfHh+4Z<7vqU z^QZpUykLuG)O|L|7-p3<>t}gIE^EG{WmB%U=cbWZ)*jDwZ}PUDIkaq+{uI4GjmDeJ z{mjlK&RlhW;a{T=;cd>Av9q%J?CSDfzOu|c9l~FKt>x`Qq0sZwXZjkR4q-$}B0%Pc a%zB2RfF0twpX+~vWISE{T-G@yGywobPeV2U literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..c12303a7d3d152646a2da7ac566e1175de9d55bf GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9E$svykh8Km+7D9BhG zw{PIJDkBa%i&&98v6is^If7_|=&*O?oGB@ttnCZRz zp3rLV-~U`oDkd5A=2Vw{^MB8|;s5E=La}$udD9PgoD#chFEnA^FP4y?ZHa3Fotb); z1nk@+rOY)WVsRUbjR%(%2&a2v{nvlQq&eq8d^Mp2-&o7_Kv3F|Rrn&pn81M3W^Dhd0&uQUv z=9ycoyhDyb}!7-lKYv;Chh zXU0FS5zf9+z_w)WrR@=K^fukTm&WJze`6a-{ZM(^J6ygUlFG_FOUyfHh+4Z<7vqU z^QZpUykLuG)O|L|7-p3<>t}gIE^EG{WmB%U=cbWZ)*jDwZ}PUDIkaq+{uI4GjmDeJ z{mjlK&RlhW;a{T=;cd>Av9q%J?CSDfzOu|c9l~FKt>x`Qq0sZwXZjkR4q-$}B0%Pc a%zB2RfF0twpX+~vWISE{T-G@yGywobPeV2U literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..aece8cfd9408c50f24550499e119c2252c2d9294 GIT binary patch literal 1066 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 R@KElTB4R*@KhG~V>pz(CX$b%T literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba37b7c0cefea1be77e7beb17f5851f0315d9aa GIT binary patch literal 1407 zcma)6i!&Q`9RDRvh?IJaRXv)}_PC(5)rS~Ci6lfZ(UMBh8M>xxuVKwPgwe)h^_ZGh z&@0nm@hYksNk&C?r7g8w#3Mb#nl@zVf3WY}_xru?`@Z-6+&4EgB+v+Hg#-W? z5efd`IxYOd2tAz)pSrBCQwCQFQP%-*4*J572Cp)%&I!359_R;nqc+Pr1D5DZ_64B5 zaJME74glPo=F_Ed#2dW_?l7cAyH6S#_V zx9n_jTWg=)si;RBQ`XHS&+X1l@gRzeo~4~e3+5zman96to!&4Bibv9UltCz2*M z(#2`kR5Wm!1XH(&lKvp40PU5FIZLhb+kaLiQAGVg_f-j(GfnHnQkj?yvzdN!2@2!QVWXV zLEwSCbnGTm>b*))PRoyFf%#}{ZMFZ@48EGP&(wY=Hxq{5@(`+-gCpdz6EGZj9D#m6YMIRRQp+09Yx5J|t-4iE69ZNvL)S3RCvB6U##$)Wz z9gS`@td5bd7KsbX$PyD4_r_++l3MiA=@ZngE6s;%L%J_ok%X1|N}#aVyfK7wVI*Qf z-`YS}>aw8!)l8%vaPFbhhuO`d4JXZ90Bv_$=>j}C-R)in0epYHZt{ZKMn~pEXUfJ#-Y>MpJwgi({M~svPhjz3d-O zem=X0sz&hm4q$pQm?G+!YcvVY2B9Pl&an&XmcSioyi*G;61W~=5tZgH3eCVkI997W z8+QaU!(X9cqG%lLaXsB?gv3vbe_cNm;Ew5Aw!A%57_nGegMX5N(vX1O9?nhIyQjEQ z6+;~ha$G1NF;XV(dcrS=V(h?y*I{{ouV{=EmIOd5-&JqsFri+4{(_J28HJQbas))% zT?Rfph~qC+>t05*VH1|kBH*gdXpn1pB8MYXJCb0Jn^DS_V?QTF!z+1My`xZu0-Z>z zEB1yU z8jO9fD5S&cD&Wj~7Lm@oSRbW4JqM(;LxVxb&LYkbL8fx0z?F*1zX!oU6TLzmvmXmkNuE<^P6({ R@KElTB4R*@KhG~V>pz(CX$b%T literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba37b7c0cefea1be77e7beb17f5851f0315d9aa GIT binary patch literal 1407 zcma)6i!&Q`9RDRvh?IJaRXv)}_PC(5)rS~Ci6lfZ(UMBh8M>xxuVKwPgwe)h^_ZGh z&@0nm@hYksNk&C?r7g8w#3Mb#nl@zVf3WY}_xru?`@Z-6+&4EgB+v+Hg#-W? z5efd`IxYOd2tAz)pSrBCQwCQFQP%-*4*J572Cp)%&I!359_R;nqc+Pr1D5DZ_64B5 zaJME74glPo=F_Ed#2dW_?l7cAyH6S#_V zx9n_jTWg=)si;RBQ`XHS&+X1l@gRzeo~4~e3+5zman96to!&4Bibv9UltCz2*M z(#2`kR5Wm!1XH(&lKvp40PU5FIZLhb+kaLiQAGVg_f-j(GfnHnQkj?yvzdN!2@2!QVWXV zLEwSCbnGTm>b*))PRoyFf%#}{ZMFZ@48EGP&(wY=Hxq{5@(`+-gCpdz6EGZj9D#m6YMIRRQp+09Yx5J|t-4iE69ZNvL)S3RCvB6U##$)Wz z9gS`@td5bd7KsbX$PyD4_r_++l3MiA=@ZngE6s;%L%J_ok%X1|N}#aVyfK7wVI*Qf z-`YS}>aw8!)l8%vaPFbhhuO`d4JXZ90Bv_$=>j}C-R)in0epYHZt{ZKMn~pEXUfJ#-Y>MpJwgi({M~svPhjz3d-O zem=X0sz&hm4q$pQm?G+!YcvVY2B9Pl&an&XmcSioyi*G;61W~=5tZgH3eCVkI997W z8+QaU!(X9cqG%lLaXsB?gv3vbe_cNm;Ew5Aw!A%57_nGegMX5N(vX1O9?nhIyQjEQ z6+;~ha$G1NF;XV(dcrS=V(h?y*I{{ouV{=EmIOd5-&JqsFri+4{(_J28HJQbas))% zT?Rfph~qC+>t05*VH1|kBH*gdXpn1pB8MYXJCb0Jn^DS_V?QTF!z+1My`xZu0-Z>z zEB1yU z8jO9fD5S&cD&Wj~7Lm@oSRbW4JqM(;LxVxb&LYkbL8fx0z?F*1zX!oU6TLzmvmXmkNuE<^P6({ R@KElTB4R*@KhG~V>pz(CX$b%T literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_light.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba37b7c0cefea1be77e7beb17f5851f0315d9aa GIT binary patch literal 1407 zcma)6i!&Q`9RDRvh?IJaRXv)}_PC(5)rS~Ci6lfZ(UMBh8M>xxuVKwPgwe)h^_ZGh z&@0nm@hYksNk&C?r7g8w#3Mb#nl@zVf3WY}_xru?`@Z-6+&4EgB+v+Hg#-W? z5efd`IxYOd2tAz)pSrBCQwCQFQP%-*4*J572Cp)%&I!359_R;nqc+Pr1D5DZ_64B5 zaJME74glPo=F_Ed#2dW_?l7cAyH6S#_V zx9n_jTWg=)si;RBQ`XHS&+X1l@gRzeo~4~e3+5zman96to!&4Bibv9UltCz2*M z(#2`kR5Wm!1XH(&lKvp40PU5FIZLhb+kaLiQAGVg_f-j(GfnHnQkj?yvzdN!2@2!QVWXV zLEwSCbnGTm>b*))PRoyFf%#}{ZMFZ@48EGP&(wY=Hxq{5@(`+-gCpdz6EGZj9D#m6YMIRRQp+09Yx5J|t-4iE69ZNvL)S3RCvB6U##$)Wz z9gS`@td5bd7KsbX$PyD4_r_++l3MiA=@ZngE6s;%L%J_ok%X1|N}#aVyfK7wVI*Qf z-`YS}>aw8!)l8%vaPFbhhuO`d4JXZ90Bv_$=>j}C-R)in0epYHZt{ZKMn~pEXUfJ#-Y>MpJwgi({M~svPhjz3d-O zem=X0sz&hm4q$pQm?G+!YcvVY2B9Pl&an&XmcSioyi*G;61W~=5tZgH3eCVkI997W z8+QaU!(X9cqG%lLaXsB?gv3vbe_cNm;Ew5Aw!A%57_nGegMX5N(vX1O9?nhIyQjEQ z6+;~ha$G1NF;XV(dcrS=V(h?y*I{{ouV{=EmIOd5-&JqsFri+4{(_J28HJQbas))% zT?Rfph~qC+>t05*VH1|kBH*gdXpn1pB8MYXJCb0Jn^DS_V?QTF!z+1My`xZu0-Z>z zEB1yU z8jO9fD5S&cD&Wj~7Lm@oSRbW4JqM(;LxVxb&LYkbL8fx0z?F*1zX!oU6TLzmvmXmkNuE<^P6({ R@KElTB4R*@KhG~V>pz(CX$b%T literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/visual/icons/yt_alt/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/visual/icons/yt_alt/drawable/revanced_extended_settings_key_icon.xml new file mode 100644 index 000000000..d135324c6 --- /dev/null +++ b/src/main/resources/youtube/visual/icons/yt_alt/drawable/revanced_extended_settings_key_icon.xml @@ -0,0 +1,25 @@ + + + + + From 49cf0fd5c1bf1289944b0e5e78444ae9c23ced60 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 17:27:08 +0300 Subject: [PATCH 033/103] feat(YouTube - Shorts components): Add `Hide stickers` setting --- src/main/resources/youtube/settings/xml/revanced_prefs.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 62e42a8b0..e2d1fc208 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -500,9 +500,10 @@ - + + @@ -512,7 +513,7 @@ - + From 18482b2e6b57d2eea95527a05e9d86674446c052 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 17:28:18 +0300 Subject: [PATCH 034/103] fix(YouTube Music - Player components): `Remember shuffle state` setting does not remember the correct state --- .../components/PlayerComponentsPatch.kt | 211 ++++++------------ .../ShuffleClassReferenceFingerprint.kt | 40 ---- .../fingerprints/ShuffleOnClickFingerprint.kt | 30 +++ .../utils/resourceid/SharedResourceIdPatch.kt | 2 - .../kotlin/app/revanced/util/BytecodeUtils.kt | 2 +- 5 files changed, 102 insertions(+), 183 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleOnClickFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt index 1cead791f..cecb66c69 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt @@ -35,15 +35,14 @@ import app.revanced.patches.music.player.components.fingerprints.PlayerViewPager import app.revanced.patches.music.player.components.fingerprints.QuickSeekOverlayFingerprint import app.revanced.patches.music.player.components.fingerprints.RemixGenericButtonFingerprint import app.revanced.patches.music.player.components.fingerprints.RepeatTrackFingerprint -import app.revanced.patches.music.player.components.fingerprints.ShuffleClassReferenceFingerprint -import app.revanced.patches.music.player.components.fingerprints.ShuffleClassReferenceFingerprint.indexOfImageViewInstruction -import app.revanced.patches.music.player.components.fingerprints.ShuffleClassReferenceFingerprint.indexOfOrdinalInstruction +import app.revanced.patches.music.player.components.fingerprints.ShuffleOnClickFingerprint import app.revanced.patches.music.player.components.fingerprints.SwipeToCloseFingerprint import app.revanced.patches.music.player.components.fingerprints.SwitchToggleColorFingerprint import app.revanced.patches.music.player.components.fingerprints.ZenModeFingerprint import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.music.utils.fingerprints.PendingIntentReceiverFingerprint import app.revanced.patches.music.utils.integrations.Constants.COMPONENTS_PATH +import app.revanced.patches.music.utils.integrations.Constants.INTEGRATIONS_PATH import app.revanced.patches.music.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.mainactivity.MainActivityResolvePatch import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch @@ -61,6 +60,7 @@ import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.music.utils.videotype.VideoTypeHookPatch import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT +import app.revanced.util.addStaticFieldToIntegration import app.revanced.util.alsoResolve import app.revanced.util.findMethodOrThrow import app.revanced.util.getReference @@ -73,11 +73,10 @@ import app.revanced.util.injectLiteralInstructionBooleanCall import app.revanced.util.injectLiteralInstructionViewCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow -import app.revanced.util.transformFields +import app.revanced.util.transformMethods import app.revanced.util.traverseClassHierarchy import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation import com.android.tools.smali.dexlib2.iface.MethodParameter import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -88,7 +87,6 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.iface.reference.Reference import com.android.tools.smali.dexlib2.immutable.ImmutableField import com.android.tools.smali.dexlib2.immutable.ImmutableMethod -import com.android.tools.smali.dexlib2.util.MethodUtil import kotlin.properties.Delegates @Suppress("unused", "LocalVariableName") @@ -101,7 +99,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( PlayerComponentsResourcePatch::class, SettingsPatch::class, SharedResourceIdPatch::class, - VideoTypeHookPatch::class + VideoTypeHookPatch::class, ), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( @@ -126,13 +124,16 @@ object PlayerComponentsPatch : BaseBytecodePatch( QuickSeekOverlayFingerprint, RemixGenericButtonFingerprint, RepeatTrackFingerprint, - ShuffleClassReferenceFingerprint, + ShuffleOnClickFingerprint, SwipeToCloseFingerprint, ) ) { private const val FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/PlayerComponentsFilter;" + private const val INTEGRATIONS_VIDEO_UTILS_CLASS_DESCRIPTOR = + "$INTEGRATIONS_PATH/utils/VideoUtils;" + override fun execute(context: BytecodeContext) { // region patch for disable gesture in player @@ -735,155 +736,85 @@ object PlayerComponentsPatch : BaseBytecodePatch( // region patch for remember shuffle state - val MUSIC_PLAYBACK_CONTROLS_CLASS_DESCRIPTOR = - "Lcom/google/android/apps/youtube/music/watchpage/MusicPlaybackControls;" + ShuffleOnClickFingerprint.resultOrThrow().mutableMethod.apply { + val accessibilityIndex = + ShuffleOnClickFingerprint.indexOfAccessibilityInstruction(this) - lateinit var rememberShuffleStateObjectClass: String - lateinit var rememberShuffleStateImageViewReference: Reference - lateinit var rememberShuffleStateShuffleStateLabel: String + // region set shuffle enum - ShuffleClassReferenceFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - rememberShuffleStateObjectClass = definingClass - - val imageViewIndex = indexOfImageViewInstruction(this) - val ordinalIndex = indexOfOrdinalInstruction(this) - - val invokeInterfaceIndex = - indexOfFirstInstructionReversedOrThrow(ordinalIndex, Opcode.INVOKE_INTERFACE) - val iGetObjectIndex = - indexOfFirstInstructionReversedOrThrow(invokeInterfaceIndex, Opcode.IGET_OBJECT) - val checkCastIndex = - indexOfFirstInstructionOrThrow(invokeInterfaceIndex, Opcode.CHECK_CAST) - - val iGetObjectReference = - getInstruction(iGetObjectIndex).reference - val invokeInterfaceReference = - getInstruction(invokeInterfaceIndex).reference - val checkCastReference = - getInstruction(checkCastIndex).reference - val getOrdinalClassReference = - getInstruction(checkCastIndex + 1).reference - val ordinalReference = - getInstruction(ordinalIndex).reference - - rememberShuffleStateImageViewReference = - getInstruction(imageViewIndex).reference - - rememberShuffleStateShuffleStateLabel = """ - iget-object v1, v0, $iGetObjectReference - invoke-interface {v1}, $invokeInterfaceReference - move-result-object v1 - check-cast v1, $checkCastReference - """ - - rememberShuffleStateShuffleStateLabel += if (getInstruction(checkCastIndex + 1).opcode == Opcode.INVOKE_VIRTUAL) { - // YouTube Music 7.16.53+ - """ - invoke-virtual {v1}, $getOrdinalClassReference - move-result-object v1 - - """.trimIndent() - } else { - """ - iget-object v1, v1, $getOrdinalClassReference - - """.trimIndent() - } - - rememberShuffleStateShuffleStateLabel += """ - invoke-virtual {v1}, $ordinalReference - move-result v1 - - """.trimIndent() + val enumIndex = indexOfFirstInstructionReversedOrThrow(accessibilityIndex) { + opcode == Opcode.INVOKE_DIRECT && + getReference()?.returnType == "Ljava/lang/String;" } + val enumRegister = getInstruction(enumIndex).registerD + val enumClass = (getInstruction(enumIndex).reference as MethodReference).parameterTypes.first() - val constructorMethod = - it.mutableClass.methods.first { method -> MethodUtil.isConstructor(method) } - val onClickMethod = it.mutableClass.methods.first { method -> method.name == "onClick" } + addInstruction( + enumIndex, + "invoke-static {v$enumRegister}, $PLAYER_CLASS_DESCRIPTOR->setShuffleState(Ljava/lang/Enum;)V" + ) - constructorMethod.apply { - addInstruction( - implementation!!.instructions.lastIndex, - "sput-object p0, $MUSIC_PLAYBACK_CONTROLS_CLASS_DESCRIPTOR->shuffleClass:$rememberShuffleStateObjectClass" - ) - } + // endregion - onClickMethod.apply { - addInstructions( - 0, """ - move-object v0, p0 - """ + rememberShuffleStateShuffleStateLabel + """ - invoke-static {v1}, $PLAYER_CLASS_DESCRIPTOR->setShuffleState(I)V - """ - ) - } + // region set static field - context.traverseClassHierarchy(it.mutableClass) { - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL - transformFields { - ImmutableField( + val shuffleClassIndex = indexOfFirstInstructionReversedOrThrow(accessibilityIndex, Opcode.CHECK_CAST) + val shuffleClass = getInstruction(shuffleClassIndex).reference.toString() + val shuffleMutableClass = context.findClass { classDef -> + classDef.type == shuffleClass + }!!.mutableClass + + val shuffleMethod = shuffleMutableClass.methods.find { method -> + method.parameterTypes.firstOrNull() == enumClass && + method.parameterTypes.size == 1 && + method.returnType == "V" + } ?: throw PatchException("target not found") + + val smaliInstructions = + """ + if-eqz v0, :ignore + sget-object v1, $enumClass->b:$enumClass + invoke-virtual {v0, v1}, $shuffleClass->${shuffleMethod.name}($enumClass)V + :ignore + return-void + """ + + context.addStaticFieldToIntegration( + INTEGRATIONS_VIDEO_UTILS_CLASS_DESCRIPTOR, + "shuffleTracks", + "shuffleClass", + shuffleClass, + smaliInstructions + ) + + // endregion + + // region make all methods accessible + + context.traverseClassHierarchy(shuffleMutableClass) { + transformMethods { + ImmutableMethod( definingClass, name, - type, - AccessFlags.PUBLIC or AccessFlags.PUBLIC, - null, + parameters, + returnType, + AccessFlags.PUBLIC or AccessFlags.FINAL, annotations, - null + hiddenApiRestrictions, + implementation ).toMutable() } } - } - - MusicPlaybackControlsFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - addInstruction( - 0, - "invoke-virtual {v0}, $MUSIC_PLAYBACK_CONTROLS_CLASS_DESCRIPTOR->rememberShuffleState()V" - ) - val shuffleField = ImmutableField( - definingClass, - "shuffleClass", - rememberShuffleStateObjectClass, - AccessFlags.PUBLIC or AccessFlags.STATIC, - null, - annotations, - null - ).toMutable() - - val shuffleMethod = ImmutableMethod( - definingClass, - "rememberShuffleState", - emptyList(), - "V", - AccessFlags.PUBLIC or AccessFlags.FINAL, - annotations, null, - MutableMethodImplementation(5) - ).toMutable() - - shuffleMethod.addInstructionsWithLabels( - 0, """ - invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->getShuffleState()I - move-result v2 - if-nez v2, :dont_shuffle - sget-object v0, $MUSIC_PLAYBACK_CONTROLS_CLASS_DESCRIPTOR->shuffleClass:$rememberShuffleStateObjectClass - """ + rememberShuffleStateShuffleStateLabel + """ - iget-object v3, v0, $rememberShuffleStateImageViewReference - if-eqz v3, :dont_shuffle - invoke-virtual {v3}, Landroid/view/View;->callOnClick()Z - if-eqz v1, :dont_shuffle - invoke-virtual {v3}, Landroid/view/View;->callOnClick()Z - :dont_shuffle - return-void - """ - ) + // endregion - it.mutableClass.methods.add(shuffleMethod) - it.mutableClass.staticFields.add(shuffleField) - } } + MusicPlaybackControlsFingerprint.resultOrThrow().mutableMethod.addInstruction( + 0, + "invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->shuffleTracks()V" + ) + SettingsPatch.addSwitchPreference( CategoryType.PLAYER, "revanced_remember_shuffle_state", diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt deleted file mode 100644 index 537f12105..000000000 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleClassReferenceFingerprint.kt +++ /dev/null @@ -1,40 +0,0 @@ -package app.revanced.patches.music.player.components.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.patches.music.player.components.fingerprints.ShuffleClassReferenceFingerprint.indexOfImageViewInstruction -import app.revanced.patches.music.player.components.fingerprints.ShuffleClassReferenceFingerprint.indexOfOrdinalInstruction -import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.YtFillArrowShuffle -import app.revanced.util.containsWideLiteralInstructionValue -import app.revanced.util.getReference -import app.revanced.util.indexOfFirstInstruction -import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.Method -import com.android.tools.smali.dexlib2.iface.reference.FieldReference -import com.android.tools.smali.dexlib2.iface.reference.MethodReference - -internal object ShuffleClassReferenceFingerprint : MethodFingerprint( - returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = emptyList(), - strings = listOf("Unknown shuffle mode"), - customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionValue(YtFillArrowShuffle) && - indexOfOrdinalInstruction(methodDef) >= 0 && - indexOfImageViewInstruction(methodDef) >= 0 - } -) { - fun indexOfOrdinalInstruction(methodDef: Method) = - methodDef.indexOfFirstInstruction { - opcode == Opcode.INVOKE_VIRTUAL && - getReference()?.name == "ordinal" - } - - fun indexOfImageViewInstruction(methodDef: Method) = - methodDef.indexOfFirstInstruction { - opcode == Opcode.IGET_OBJECT && - getReference()?.type == "Landroid/widget/ImageView;" - } -} - diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleOnClickFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleOnClickFingerprint.kt new file mode 100644 index 000000000..608e713ea --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleOnClickFingerprint.kt @@ -0,0 +1,30 @@ +package app.revanced.patches.music.player.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.music.player.components.fingerprints.ShuffleOnClickFingerprint.indexOfAccessibilityInstruction +import app.revanced.util.containsWideLiteralInstructionValue +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object ShuffleOnClickFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Landroid/view/View;"), + customFingerprint = { methodDef, _ -> + methodDef.containsWideLiteralInstructionValue(45468) && + methodDef.name == "onClick" && + indexOfAccessibilityInstruction(methodDef) >= 0 + } +) { + fun indexOfAccessibilityInstruction(methodDef: Method) = + methodDef.indexOfFirstInstruction { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "announceForAccessibility" + } +} + diff --git a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt index d2339902e..db57d3732 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt @@ -59,7 +59,6 @@ object SharedResourceIdPatch : ResourcePatch() { var TouchOutside = -1L var TrimSilenceSwitch: Long = -1 var VarispeedUnavailableTitle = -1L - var YtFillArrowShuffle = -1L override fun execute(context: ResourceContext) { @@ -106,7 +105,6 @@ object SharedResourceIdPatch : ResourcePatch() { TouchOutside = getId(ID, "touch_outside") TrimSilenceSwitch = getId(ID, "trim_silence_switch") VarispeedUnavailableTitle = getId(STRING, "varispeed_unavailable_title") - YtFillArrowShuffle = getId(DRAWABLE, "yt_fill_arrow_shuffle_vd_theme_24") } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index 46adf69e0..05b26d759 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -83,7 +83,7 @@ fun MutableClass.transformFields(transform: MutableField.() -> MutableField) { */ fun MutableClass.transformMethods(transform: MutableMethod.() -> MutableMethod) { val transformedMethods = methods.map { it.transform() } - methods.clear() + methods.removeIf { !MethodUtil.isConstructor(it) } methods.addAll(transformedMethods) } From f3b67174da909ab07d4b04bef14d5d7ae672cc3b Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 17:30:25 +0300 Subject: [PATCH 035/103] feat(YouTube - Custom Shorts action buttons): Add `Cairo` --- .../actionbuttons/ShortsActionButtonsPatch.kt | 6 + .../ic_remix_filled_white_24.webp | Bin 0 -> 3224 bytes .../ic_remix_filled_white_shadowed.webp | Bin 0 -> 3224 bytes .../ic_right_comment_shadowed.webp | Bin 0 -> 2704 bytes .../ic_right_dislike_off_shadowed.webp | Bin 0 -> 2574 bytes .../ic_right_dislike_on_32c.webp | Bin 0 -> 1900 bytes .../ic_right_dislike_on_shadowed.webp | Bin 0 -> 1900 bytes .../ic_right_like_off_shadowed.webp | Bin 0 -> 2562 bytes .../drawable-hdpi/ic_right_like_on_32c.webp | Bin 0 -> 1980 bytes .../ic_right_like_on_shadowed.webp | Bin 0 -> 1980 bytes .../ic_right_share_shadowed.webp | Bin 0 -> 2792 bytes .../ic_remix_filled_white_24.webp | Bin 0 -> 1934 bytes .../ic_remix_filled_white_shadowed.webp | Bin 0 -> 1934 bytes .../ic_right_comment_shadowed.webp | Bin 0 -> 1664 bytes .../ic_right_dislike_off_shadowed.webp | Bin 0 -> 1652 bytes .../ic_right_dislike_on_32c.webp | Bin 0 -> 1354 bytes .../ic_right_dislike_on_shadowed.webp | Bin 0 -> 1354 bytes .../ic_right_like_off_shadowed.webp | Bin 0 -> 1690 bytes .../drawable-mdpi/ic_right_like_on_32c.webp | Bin 0 -> 1362 bytes .../ic_right_like_on_shadowed.webp | Bin 0 -> 1362 bytes .../ic_right_share_shadowed.webp | Bin 0 -> 1778 bytes .../ic_remix_filled_white_24.webp | Bin 0 -> 4526 bytes .../ic_remix_filled_white_shadowed.webp | Bin 0 -> 4526 bytes .../ic_right_comment_shadowed.webp | Bin 0 -> 3922 bytes .../ic_right_dislike_off_shadowed.webp | Bin 0 -> 3740 bytes .../ic_right_dislike_on_32c.webp | Bin 0 -> 2500 bytes .../ic_right_dislike_on_shadowed.webp | Bin 0 -> 2500 bytes .../ic_right_like_off_shadowed.webp | Bin 0 -> 3716 bytes .../drawable-xhdpi/ic_right_like_on_32c.webp | Bin 0 -> 2518 bytes .../ic_right_like_on_shadowed.webp | Bin 0 -> 2518 bytes .../ic_right_share_shadowed.webp | Bin 0 -> 3896 bytes .../ic_remix_filled_white_24.webp | Bin 0 -> 7536 bytes .../ic_remix_filled_white_shadowed.webp | Bin 0 -> 7536 bytes .../ic_right_comment_shadowed.webp | Bin 0 -> 6726 bytes .../ic_right_dislike_off_shadowed.webp | Bin 0 -> 6042 bytes .../ic_right_dislike_on_32c.webp | Bin 0 -> 3938 bytes .../ic_right_dislike_on_shadowed.webp | Bin 0 -> 3938 bytes .../ic_right_like_off_shadowed.webp | Bin 0 -> 5984 bytes .../drawable-xxhdpi/ic_right_like_on_32c.webp | Bin 0 -> 4024 bytes .../ic_right_like_on_shadowed.webp | Bin 0 -> 4024 bytes .../ic_right_share_shadowed.webp | Bin 0 -> 6294 bytes .../ic_remix_filled_white_24.webp | Bin 0 -> 10650 bytes .../ic_remix_filled_white_shadowed.webp | Bin 0 -> 10650 bytes .../ic_right_comment_shadowed.webp | Bin 0 -> 9164 bytes .../ic_right_dislike_off_shadowed.webp | Bin 0 -> 8296 bytes .../ic_right_dislike_on_32c.webp | Bin 0 -> 5480 bytes .../ic_right_dislike_on_shadowed.webp | Bin 0 -> 5480 bytes .../ic_right_like_off_shadowed.webp | Bin 0 -> 8400 bytes .../ic_right_like_on_32c.webp | Bin 0 -> 5416 bytes .../ic_right_like_on_shadowed.webp | Bin 0 -> 5416 bytes .../ic_right_share_shadowed.webp | Bin 0 -> 8976 bytes .../cairo/drawable/ic_right_comment_32c.xml | 404 +++++++++++ .../drawable/ic_right_dislike_off_32c.xml | 588 +++++++++++++++ .../cairo/drawable/ic_right_like_off_32c.xml | 600 +++++++++++++++ .../cairo/drawable/ic_right_share_32c.xml | 684 ++++++++++++++++++ 55 files changed, 2282 insertions(+) create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_remix_filled_white_24.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_remix_filled_white_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_comment_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_dislike_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_dislike_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_dislike_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_like_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_like_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_like_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_share_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_remix_filled_white_24.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_remix_filled_white_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_comment_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_dislike_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_dislike_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_dislike_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_like_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_like_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_like_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_share_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_remix_filled_white_24.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_remix_filled_white_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_comment_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_dislike_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_dislike_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_dislike_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_like_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_like_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_like_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_share_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_remix_filled_white_24.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_remix_filled_white_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_comment_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_dislike_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_dislike_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_dislike_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_like_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_like_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_like_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_share_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_remix_filled_white_24.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_remix_filled_white_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_comment_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_dislike_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_dislike_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_dislike_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_like_off_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_like_on_32c.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_like_on_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_share_shadowed.webp create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_comment_32c.xml create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_dislike_off_32c.xml create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_like_off_32c.xml create mode 100644 src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_share_32c.xml diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/actionbuttons/ShortsActionButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/actionbuttons/ShortsActionButtonsPatch.kt index 624cf8f38..7a7c6fe7d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/actionbuttons/ShortsActionButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/actionbuttons/ShortsActionButtonsPatch.kt @@ -23,6 +23,7 @@ object ShortsActionButtonsPatch : BaseResourcePatch( key = "IconType", default = DEFAULT_ICON, values = mapOf( + "Cairo" to DEFAULT_ICON, "Outline" to "outline", "OutlineCircle" to "outlinecircle", "Round" to DEFAULT_ICON, @@ -80,6 +81,11 @@ object ShortsActionButtonsPatch : BaseResourcePatch( ) } + if (iconType == DEFAULT_ICON) { + SettingsPatch.updatePatchStatus(this) + return + } + context.copyResources( "youtube/shorts/actionbuttons/shared", ResourceGroup( diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_remix_filled_white_24.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_remix_filled_white_24.webp new file mode 100644 index 0000000000000000000000000000000000000000..a14d4adc6d3a38a43611b293dbd63591eb8e8f3c GIT binary patch literal 3224 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 Jav6&N@E@UI$58+P literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_remix_filled_white_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_remix_filled_white_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..a14d4adc6d3a38a43611b293dbd63591eb8e8f3c GIT binary patch literal 3224 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 Jav6&N@E@UI$58+P literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_comment_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_comment_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..7f272fe2486fe7f71ff237235842046c51ad1118 GIT binary patch literal 2704 zcmaKsXIK+i7sqcx3kXXULQz7fiYy%|N=IZxst}4m=okncq)CE+qTtF(FQF)HDbkxr zmktWb3I+v1g+-)DFNW-(AKVZ7zUR(4^SkH#pL@@pd1lNEE?kIX0sy0@ZDMJnYy}~Z zfn56gWuT*D(hq~C0M>sLX`vF{JJ8=uUmIm*ZG&QX4`9&vZjR0YzCY+cBc$4X{X_do z>OU3#KgsCg8sH2`)*u)0hc<_L;)0mV{Rc}NvC|Jecf{8NeFGtl$r1ZsG1GzA1!4*J zf3efQ*xA?rNS^>{&f&d+j`ljTqth|FdRv%7cLd}DAOM&FeV~1GerOJv&qDx|w*a6? z{F!sg0H84z03`WmP9zTi)))X9Ui{4cd?vn*{*K?5qlF^e%?*I{VgOjI0pJ`3fXViI z4GRCGHxyJ7fco-*hCA>At^frLfH!akzd|Gjy;NDCq-AJwk&6aeHLnamCG;k2y4}rs zN(nu+{d_o}3U50$&5$=f>^0SJUBO~YLkqK`s2mlS4(2`GUJTr1xdR&}W|Uj{-ZUwC z$%PjC9Vy0D?bDM#dB&=0fPIJ#-U~PqIui*wdqqCs0-2fQZ@ocCLAav=ExbJPqwRIV zdAq(dlXI$W)LnDw!%_>x$oRF6vPxx6dYU)$SS8ifn~!^>Qmm^4OeZtm+VZ z5fuK(jYgkRj?C`&&AFDxX*r#7f5PJFna|a1tq5!dvYOPu)orqnoOjrqaX54V+Gn-1 zlv<8Ok0W)(c(gPPFXBWLi7>c`k<3*XBO9#~(2=;D#OD-)@~F3rBRVQ5vKd%c<&7d_ z(R3wtQx?2RMD7mF+MezuZ6r(dwMdo4q3Q7iT~xwlBNwr=(>p@-2qgUo@m$l)1^Kmi z8<#kk*eZwTS5o=Au|J8OO$zp+yL%4 z=W$CjPBVtxRap^B?Dr5cFqe6T8Yjy-5)nu^(u3Pjk{Hq6v^6auS>m8B&#+≈=8RFu^lq650^M2z3)2jE2c`PqY{d= zMVxU{mY(c!E?VYd$YcbTzT_`^Lmaa~R|pL)FF!3C>M!W@$E;!ik z+EAKH#6QT8n0g#KHeu(Wm{3XK;mHjEmv2-Y*n^%7w=v7L&njd}u(QhE4+I(*@_A(g-soI;D>19G9^7ba>IM+2E0kv!~}l_1J$$0l-8J#9c#@irrk zg?#uye>O6*nqr8&ZCriEr%A7NX;<~~Ej+QnUe?n*JGe-f>C&kzyKuQ-Y5Mw`-P_#V z&0jEe-1s=FiB|0h(1UN_Ns;7@KxJz-ZYH6E4P9~bFJiJ@RY=`UnF+q?8_N9jb?bV? zQ{l$pp&&Z&NN1^lAelDTQ@mg|YP8K>@vT^Yj`g_KxZ9Z-h4pbFVIl#jx*o4urENJ8 zy3Z4`SS3mQu<0cgFTz~(qV&(%oT%cwlHSF`14*s*Mp! zSKMRvaZ|ARhc371lHARAe+w`5V$+%B_xmzP=f#^(>aFyLF?_V1^)h#VyD$FOWJS!i zqK8!f<&xy1p-MX3B(WR!>v@|N^{6vXZ*P)po34uUMz1k^8q98va?jfFd(D%_@(aw; z`xaN~`-EOs|4)Y%sxNzvQN?HHIpim!6gLWPS2vSb1r2lk@DX%5yeU`CPtfn|VBl1q zTO<09?y-j8Qlidn&00G6oT|$fVbmY-&KEaoTxp)YTqmKx8LO{5MQ-)15WBMh!U}YowtgY|T>9R24 zEQu}d(d8M;^ji&1MujZg>EhaZJ{|G#r-R|YSZbV55Z(VEJ2}8G+MmK2ewN*{mXylH zx9&$qa5|r!Q)^;6cEC#muuuxaOG`tuEGLnYYvExLcy*> z>7(DK@751#IQR>Inczic_d1)EV$!IN1mz2EI3zccgbofiCB-asXzX}+JQcMLxS!Lv zDKM{+G*nlng*lP+ zinV?;lxcq}IW`O!Y*64i>s?lWvYy4iSDKFYV^pUTO5*(-^trmMrg&B;RvT3np(Oox zY~YJaeEyUio0mz#u#?829>~f29B+Bc0ws0%LYF?fX7jU-&s1o-y&XtTev+3(`$q5q Hk_f;*$@6*) literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_dislike_off_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_dislike_off_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..6ee3b5eb559ad6c343e7c4fa47bf47adeb7d415d GIT binary patch literal 2574 zcmaKuc|2768^;eLh8W6Hnl3YQOMQ}nb43Mxie;D z8&`!;wv-~3Wl*-Ov1i0+<{tG&_mBJgJ>T;@=ly-2&+EIK^ZK6GvA4Fc5EcUfr{kt} zj&}OaAOhN;AN+nX55<2UP6&*GzP*|kF_Dd(q3>~!C>p7-+lcp*3;WD0y(6WMjX;L9I7J@>0JavT}7m=Z(DV;)m!s6p~WUy$4A3?G^ij= zkgC(Ye$6xuldCeVxu>T2bag-0sQiq_IRkuxkAQ`Mr(leecToX*1_@a8T?X{okU!&vgo@~4RI z7Nu}{!(N85)2UAsDls`5qbd?l#`>Pj%}KIBl)K&Ic#4fPNVDBYp|PV_G`gcoJhesb zxwU_@PD)I(Bthj)&JG+@xH1%}%!M%1lY6lJwE+HDw(!7p!zOm>A=IwU2^7#?sjwMB zQo)4fhFYNGw-r_Dx&5|3dCKR;WAvo=F)wtizG+Qwf|tm2Dr&n_5R3|?7PHeQu?yvz zB}rXE9UbW-Pvi|p_{@=lDgcN775Bx(C!y;^W^Kz;1M;;bZuA&e%OwEwzy>!79S@Is zT&-KvB9L{wxZsw>%k5!2eB$VggaMbq9QZ`bBuS&4IX7xuP6Fuj0UaKD`f^k)9lvqjZ|C~gFLbo>yAkHO zS3bv4<*7_vVX?v<5}&Oya4Xf+IaSuU@b`OChp#D;=46Yc%ttgUNZ)20WYohoFDpCj z-jCVy@Yi8|_1>Dow{K)1p_+3*W;)Eox=L|#F~~L$W)pBrQb%h$Q_?B5~&1}rFj)CmTU`v^Oe3oxJ3z^R|&_v6) zQ;nkf{>*ox^D7KrXEnc_J$#Y1vd}>{7q=$7`}3TgjM)I0_&NXpzmbRm@PyjQ1BC+W z+TgJ=){#pwQ$iwTT`JBXAVM|qqVvJ`q6}GA>l7+U)60JhG6MM&(s7c*>^@%cy1?eE zHAvcll(>Do>2>_(=iW6tty^*MMoGRLkFk#VCOPiOX2C|%XRS96bEj7i4l))Mp`*`u z?r~Y1lx4=cR^wOhS|@{zjE7MNqW4 zvrdgJ^5>a{Lw>Osq`T6`yCM_L+3cTCi9}x4j_JOy@a)h7c-P<>S)=*B2@L>vUme6> zp1q8s%{x5yR~%x-AIL*pUrKper}yQ2d447_=NqS4J8uLd&@hF_7JU@0n=Re&L0!6U z;6&i~$*@_95w>QJU7ngBUzx^XS^CH0aLY{!UM_ z;3sRoJOw|Ex^wJ?a{BIw6+bm;x3d8~FlV2Y)PalAt_oRw$PL}5ls2Sm@$fN1oxcdX zt=^Mg)Bi*T?fzVz`~G2d%HC`dZp_C~k@(MIE=3TRgJ^hcC zMuS)T%{dK*2kuUiQ3*Z%JqkDp#)ERUZsMg2eDZ7;ydNWRx4q^G;nHulG|2j9bPw|h zwyu1UwxN^vHqK$2$uH+^`)Btt6{FSOzdy1 zB$M-JCti9--uT2wepC1h=TfVu+E_MGC9tCK@$Ips=L>lw{8Q`c+`Opjv^DfD=$vKQ zO;!3`XZ^yv@pDFxoZ14`Jec|Ang`VibM6e~zxx^+2Z`sa7Z^+s_$zm`Pqr4l7l+O6 z2+&D_e~Nu89oNrtXwrpLe&FY4RJ}*0>m{KF-331A?XlWP+*MO~@(3an(8>_YZ}sIS zoa2lbjWN@B&#UFA5lN(cYJ^S z<(+r{##g9rdxxs+XU@b5(tIuME3n8%p3$@l#6wn)Z{%vHu@@x+YF%g$7& zz?W1yR8IIJ$HLJ&T`x$;ei~yn9a)bW4hy*#5WJh-DH-}=V^qS-_E>Sr=R39fRelY5 zNl1$E6;q?`1M7+s5jhKbiK16(D|V@W=CkT#*;oYC(RXdMgU%SAgg>w(P_J?7&rP>+ z$VS_Zn?2!|V5;r2>F-vSB9-fAMkTGN*$=bD76#NzsDM?m;PPr(t*p#uS-hRkAq2*o m*|#E({1|g>u~Ls$W-VUo&$ORkO37Uv`@~wsS=ns;DE$Mv(^rH5 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_dislike_on_32c.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_dislike_on_32c.webp new file mode 100644 index 0000000000000000000000000000000000000000..3aaf383d113818b3271643df888c06231ad408bd GIT binary patch literal 1900 zcmaKsdpuNW7{}i+qj6~%GD6yh$YmS%d&;_-)-vvwr76Z(M4D*_(YRlRU6*QwF-R^` zky}#POlreU>y}+vQzBNV@DYO#WA;q_(f+Z!&wHNdeBbB!ectzZ&pDstiFa}$Ap!7n zv?KTuEc~Sa00xljf4uPa_JlqdGzG9eQA9wc=$La9PiH%ISF9U_-Lm>sj;8v zUn8XAkABjQ;Qm$d|4B(w7&R1^Vq75HZEu z(;i|H#Mpf{{hliN1y&)w3o<4r`sJCXTe z)c{zm0RS)joC_%hpd%9irSZ=>jVb_SGXS_V_&N9anZ%x=ocg#N0*Yc}G5{;}0H6W@ z*fRux)VCjNQ23ADuuw@A>gxW-yct8zmgTbIoWXQ_%eziPdyH#j7XS&vGP zEQJdT2i1I(VKZnuGdwW>Z|JCWuz9gW++3 zTp1n)EcLFZ6J(AS;hJ})S{iZDU8-YEyX-8*SpzXQVIeX<9ZV));Hc<^aheiU)aoQc z3mhAr2s#0sYLVBiT2e~X)5PT#YA6Ua$k|zQIiyJ+euc%+P3vUNS9a@H(o}RY>p0BK z4;0zmsc-gfWg-ARF1z1LP4QA*hq4{K)BY0d$<7d0Q;?VANMFjLGLUI0eZ|79D-&Iu z65A4f#9sf&KL|t8*j#QeV^3??`=2H5z5Z(lrhB>E+5t=$lm~<7$7m`yRDmt}nc~QY z)wN7I%%g4UZho=RFVpGcs0F5++WP9U+vEG%M{Jyll}nO2<0vOG;|Mat0q#gzmx(a{ zu4?tX@A2o!bFJT1U0%gut~TlOW&cE2yxbyXKb%hIp~{rC9(diEo*8m`OzzXdFKq?v z4_5r~dwi16C-LDd_Uv*NN?ya{feiFVz&gPJXqE>on63fz5gjvBWY|}$smb*KEF5t= zMRJMLu!>l38w+Bc`FflE!FU-NX|r&ks2pZ(ys@-7v0*c5(aY&No9-IAiQLqm=M)}L zBwnZ63(0)uO7CU?*QUy5+J?(%-w70+6$*vni*UBzs({TRNXbWSe&_nF&55f-Q|6gt2J*YWA6DVUL@Z-eJi0{{6%DTGmKGkq!o zf1_HO=)NbCioC@7YQ9e@Vo~UjJ;Qv9D%e3aEgbVR3oLeZq51WcU=B~2PrrPhOF9`} zSqZK+yEk+&3LC9xwTAn6U2qo?;m!%JSUr;t5kn+*Xx>PCFa05;xF97&%zDDjra;s`Y!HQD<7izt&<)q9@MqO z^_~yHIa;k#7JfrVV^*cccR6yl(Yfi(;;8VpFK@ZrBemkurdPElvnivKWaIyh_{a(` zbEPb>U*Vy8r4u$%D;#eklSXFxV}_0q4wHjx9pA}CZ?*?Ty_kD?(10~bq=;2GcN~m< z&8HJ(>>thhxrCUA7W3o+AFu#ra jtxllvw7SklctV0aBo*O}uJJp+HTTN*f<#8fBmjQ{Xw2@S literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_dislike_on_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_dislike_on_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..3aaf383d113818b3271643df888c06231ad408bd GIT binary patch literal 1900 zcmaKsdpuNW7{}i+qj6~%GD6yh$YmS%d&;_-)-vvwr76Z(M4D*_(YRlRU6*QwF-R^` zky}#POlreU>y}+vQzBNV@DYO#WA;q_(f+Z!&wHNdeBbB!ectzZ&pDstiFa}$Ap!7n zv?KTuEc~Sa00xljf4uPa_JlqdGzG9eQA9wc=$La9PiH%ISF9U_-Lm>sj;8v zUn8XAkABjQ;Qm$d|4B(w7&R1^Vq75HZEu z(;i|H#Mpf{{hliN1y&)w3o<4r`sJCXTe z)c{zm0RS)joC_%hpd%9irSZ=>jVb_SGXS_V_&N9anZ%x=ocg#N0*Yc}G5{;}0H6W@ z*fRux)VCjNQ23ADuuw@A>gxW-yct8zmgTbIoWXQ_%eziPdyH#j7XS&vGP zEQJdT2i1I(VKZnuGdwW>Z|JCWuz9gW++3 zTp1n)EcLFZ6J(AS;hJ})S{iZDU8-YEyX-8*SpzXQVIeX<9ZV));Hc<^aheiU)aoQc z3mhAr2s#0sYLVBiT2e~X)5PT#YA6Ua$k|zQIiyJ+euc%+P3vUNS9a@H(o}RY>p0BK z4;0zmsc-gfWg-ARF1z1LP4QA*hq4{K)BY0d$<7d0Q;?VANMFjLGLUI0eZ|79D-&Iu z65A4f#9sf&KL|t8*j#QeV^3??`=2H5z5Z(lrhB>E+5t=$lm~<7$7m`yRDmt}nc~QY z)wN7I%%g4UZho=RFVpGcs0F5++WP9U+vEG%M{Jyll}nO2<0vOG;|Mat0q#gzmx(a{ zu4?tX@A2o!bFJT1U0%gut~TlOW&cE2yxbyXKb%hIp~{rC9(diEo*8m`OzzXdFKq?v z4_5r~dwi16C-LDd_Uv*NN?ya{feiFVz&gPJXqE>on63fz5gjvBWY|}$smb*KEF5t= zMRJMLu!>l38w+Bc`FflE!FU-NX|r&ks2pZ(ys@-7v0*c5(aY&No9-IAiQLqm=M)}L zBwnZ63(0)uO7CU?*QUy5+J?(%-w70+6$*vni*UBzs({TRNXbWSe&_nF&55f-Q|6gt2J*YWA6DVUL@Z-eJi0{{6%DTGmKGkq!o zf1_HO=)NbCioC@7YQ9e@Vo~UjJ;Qv9D%e3aEgbVR3oLeZq51WcU=B~2PrrPhOF9`} zSqZK+yEk+&3LC9xwTAn6U2qo?;m!%JSUr;t5kn+*Xx>PCFa05;xF97&%zDDjra;s`Y!HQD<7izt&<)q9@MqO z^_~yHIa;k#7JfrVV^*cccR6yl(Yfi(;;8VpFK@ZrBemkurdPElvnivKWaIyh_{a(` zbEPb>U*Vy8r4u$%D;#eklSXFxV}_0q4wHjx9pA}CZ?*?Ty_kD?(10~bq=;2GcN~m< z&8HJ(>>thhxrCUA7W3o+AFu#ra jtxllvw7SklctV0aBo*O}uJJp+HTTN*f<#8fBmjQ{Xw2@S literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_like_off_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_like_off_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..8025cd0ab6512fb60281d5d7c0315ed55aa77667 GIT binary patch literal 2562 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_like_on_32c.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-hdpi/ic_right_like_on_32c.webp new file mode 100644 index 0000000000000000000000000000000000000000..4c889a2558a5c01933ee0c4aeb9518fcb73c1620 GIT binary patch literal 1980 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_remix_filled_white_24.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_remix_filled_white_24.webp new file mode 100644 index 0000000000000000000000000000000000000000..970ddeaeb711a8da9fee24bef3de25a76c268767 GIT binary patch literal 1934 zcmaKsc|4oh8pn?%jXf?#y4lrQgj6h55uuuDt!*u(3nE1$mZX?ULbcOjsHL|vHB4)Y z(onQDf|gL1L3P25y%TyVnobENL?ZKQ|LFWN_de%6&-*>k`F+lL&UxR@<3~7n@EbS) z0q(9oCw%M!6#xJzsOx-s2zb0tw-hu4Qr%l#7Mdc*QWN|}+^q z+-Len52;p%K5GXp{!#J&gYpr?#BfNm2zA2*Xmcnh4Tv>JpV?%K!#=aq7AH~TsF22I zixZCd;USKI*o5>q4*MI2$0cm(vmuQW`8;iFuPxg;of0wjxIgrkgZgfe2>gHtaNRmT zG=_|F2LSsO0A%vM#KH;zU|#`X``DM5VF>_;%K$XI{1W?eCvj&J&VE`>7V^@OkpL`J z0H7QMfch%{6i$AcgWUhfO&6Nl4dq3F8VQ^SM4$@@AQprJONeZsk7^AtxFbG?LZqQp zOQ_^=J;JG1;?#6%#Q58h26EB<#F;|cu5teRClATv4HetF7ed`4%=L}Zjs{OEbzrhJ zw)v)2{~%C6U+x>iDew}#gP$bt#7cx+;S1$WFzcX~!fsnZOS03|2!^-CI3EGe z&V;EhbeAf-Bxt&PYjw~MAuFvqxQ^Kd%Q>{eFrR2pm_Cg{VNr`GK^C`Ic9EbaZt#yZ zsSJ9j?3pWe*3_-_3)&VtfaYoyNw*x6PHi2e_|E!cc9}H)OSO*_R|4Pu!XbmY?@?uk zORSeJdk>Z-Yf?F^>a1nir>{_2olMe>@ndnUrQ(?H|1A{Rd4>?$C+?@{vE+>XF(d}n z1F5K*8GC3#cEH414sue;jXX6|J=dtPBlQ87Rn*#} zsFWT;zrCFDCMWN(dI{;Iv#iyCG|%R#1#zD$Wbos z(SfOfte6vjc!0fQ5#|KQJBbFiR?RecB9=fbl zxA)@012$tllTScj2z#CL@a1=>qzXnBZz;<`RYZ563{*wbz)wLfvDNf>hzdL{6~Q^4LJmTzduQ zb7z?2OjAjpSdLL7<}IN`@CQ2W%mQYis8A@isUuN_*Q?Lrpm4pwkV>H=Mjvng1~im7OQy7&59l-0iChV$y3v|fMvsob^GlSd~K$Fr@lH)SQ$ zW}U;5GsTX^`B6qJRaBQ!A3mz5Xqj7JhA;Hj`+ALRbhhkJ$*4;0U0;O6L9sdw(^gLw zRBLx2CGy|UMTJBSzGd5db(Lgez)_4Zn>d$^=O(29#Z0C+%s3%M(pXPIlN!@~+{(x2cD(A-&#zSMkH%v9GzC z(_U#`$*rIw+rJI{(9}xEvUfw3Znra1AM?GGZ2s%Uh(qpib6#v%W!?0^Z_ynO-r&^Y zNBeD43>dMn4q}#j8%c3Qy;&@Bx7+Za$K6F32+NUkmwGb>h|31pZTiM;qy0lw9J|xO z-Mqk)Yp05>qjxWo36Yqb9@UGD_t|v!_CEYP&O^YxLGgHGnZ z>>Q><&*{*KuREgWCTzVv`VBr$o&9j#bEe$1yp(b2fUH(> zFFQyepgNk{pgn8R&NW?OmuCFUG9;_FiX9$58!BU5{y8OXc|{+qFtN#L`{~71bd`4C zMLD((t`5D4^fqN*cU?fIMf048`;u}Fgu;C6OhwbDlpjS{juL0_h`O;`@6)dpQAckG zTF&__=j*{#e#>#smbXk_e<2^0e}T5FBRYg@jMd|?_Jxo2UbYM5CKsFu&}y`a86!3R TsJCR1yA*GjR+*s!74W|R2b&f9 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_remix_filled_white_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_remix_filled_white_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..970ddeaeb711a8da9fee24bef3de25a76c268767 GIT binary patch literal 1934 zcmaKsc|4oh8pn?%jXf?#y4lrQgj6h55uuuDt!*u(3nE1$mZX?ULbcOjsHL|vHB4)Y z(onQDf|gL1L3P25y%TyVnobENL?ZKQ|LFWN_de%6&-*>k`F+lL&UxR@<3~7n@EbS) z0q(9oCw%M!6#xJzsOx-s2zb0tw-hu4Qr%l#7Mdc*QWN|}+^q z+-Len52;p%K5GXp{!#J&gYpr?#BfNm2zA2*Xmcnh4Tv>JpV?%K!#=aq7AH~TsF22I zixZCd;USKI*o5>q4*MI2$0cm(vmuQW`8;iFuPxg;of0wjxIgrkgZgfe2>gHtaNRmT zG=_|F2LSsO0A%vM#KH;zU|#`X``DM5VF>_;%K$XI{1W?eCvj&J&VE`>7V^@OkpL`J z0H7QMfch%{6i$AcgWUhfO&6Nl4dq3F8VQ^SM4$@@AQprJONeZsk7^AtxFbG?LZqQp zOQ_^=J;JG1;?#6%#Q58h26EB<#F;|cu5teRClATv4HetF7ed`4%=L}Zjs{OEbzrhJ zw)v)2{~%C6U+x>iDew}#gP$bt#7cx+;S1$WFzcX~!fsnZOS03|2!^-CI3EGe z&V;EhbeAf-Bxt&PYjw~MAuFvqxQ^Kd%Q>{eFrR2pm_Cg{VNr`GK^C`Ic9EbaZt#yZ zsSJ9j?3pWe*3_-_3)&VtfaYoyNw*x6PHi2e_|E!cc9}H)OSO*_R|4Pu!XbmY?@?uk zORSeJdk>Z-Yf?F^>a1nir>{_2olMe>@ndnUrQ(?H|1A{Rd4>?$C+?@{vE+>XF(d}n z1F5K*8GC3#cEH414sue;jXX6|J=dtPBlQ87Rn*#} zsFWT;zrCFDCMWN(dI{;Iv#iyCG|%R#1#zD$Wbos z(SfOfte6vjc!0fQ5#|KQJBbFiR?RecB9=fbl zxA)@012$tllTScj2z#CL@a1=>qzXnBZz;<`RYZ563{*wbz)wLfvDNf>hzdL{6~Q^4LJmTzduQ zb7z?2OjAjpSdLL7<}IN`@CQ2W%mQYis8A@isUuN_*Q?Lrpm4pwkV>H=Mjvng1~im7OQy7&59l-0iChV$y3v|fMvsob^GlSd~K$Fr@lH)SQ$ zW}U;5GsTX^`B6qJRaBQ!A3mz5Xqj7JhA;Hj`+ALRbhhkJ$*4;0U0;O6L9sdw(^gLw zRBLx2CGy|UMTJBSzGd5db(Lgez)_4Zn>d$^=O(29#Z0C+%s3%M(pXPIlN!@~+{(x2cD(A-&#zSMkH%v9GzC z(_U#`$*rIw+rJI{(9}xEvUfw3Znra1AM?GGZ2s%Uh(qpib6#v%W!?0^Z_ynO-r&^Y zNBeD43>dMn4q}#j8%c3Qy;&@Bx7+Za$K6F32+NUkmwGb>h|31pZTiM;qy0lw9J|xO z-Mqk)Yp05>qjxWo36Yqb9@UGD_t|v!_CEYP&O^YxLGgHGnZ z>>Q><&*{*KuREgWCTzVv`VBr$o&9j#bEe$1yp(b2fUH(> zFFQyepgNk{pgn8R&NW?OmuCFUG9;_FiX9$58!BU5{y8OXc|{+qFtN#L`{~71bd`4C zMLD((t`5D4^fqN*cU?fIMf048`;u}Fgu;C6OhwbDlpjS{juL0_h`O;`@6)dpQAckG zTF&__=j*{#e#>#smbXk_e<2^0e}T5FBRYg@jMd|?_Jxo2UbYM5CKsFu&}y`a86!3R TsJCR1yA*GjR+*s!74W|R2b&f9 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_comment_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_comment_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..40b471ab44abcc1ac0d1ed5d09a0bd1c6e915d95 GIT binary patch literal 1664 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_dislike_on_32c.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_dislike_on_32c.webp new file mode 100644 index 0000000000000000000000000000000000000000..93c5fb71512a59fd0430c6239ff1ffbbca9bb747 GIT binary patch literal 1354 zcmWIYbaQiJWnc(*bqWXzu!!JdU|=u+VtFv~baoCn!3g9sFrEOBEI_H;ypp0IcPE92 z$S4K&2Mmlr2nLDC#RU)+RuZV{+ck*V%eq)q;1}dfNi9wWD)|7!Dn&rcfo>83vPIG% zYz+`Q3BtAkvCB&eN`PttK=2?(*InG6iuTNxN6ZXv`}7BDdI zw=ghlJC6`Ugh@eSQ6ktl79h!#md3#FX*mM}ZzKbQ@C612u4u3vkig+K1)!7+&|UdJ zn9h*HkjkLI;K`83kj$V5WElY?)sVr=(I>zoj1g$+1f|>CvaE~afB3v=pQ*DtLruC} zZ>rvrqlS~8TBKz;MmcoNEIz-udfJW;=T>_$D;z{IaWDJ_A`d72Z`=bx+a#oTqUbUE%3doSH!^BAeMtA;&zj`M_Tq|%OTyln63*uKDlO;s-@kqC zcXlmH_~#!F&i!o;w6N+;7H3ncTH)vY#fkx#e-yp}L$`pBVJ@SV0x;O^bcH&c7A{nj zU}KPAIe{u^ZmdKcx%><>nrP*y-iWm^>`z3FRZ@Rrhi_&P(PQUr$8NPO1`J}ak z<#%Up*@rnTlP68L+M6=hg+lD?OOSPQ@CA34fWNw zlWy&M{wRUZ`|+9CGaUCfx@9gfUmK8;W2P+qS~qH9^|W^kZ*nDsPX2wsq#OJ{akaIs z>(eBh)he;qgt{|0l&WUy<^Excu<1 w_-o&ri+nnd)O;@tHtkh>8qayx&@OiW)#RQZ0e6Jf>wo)fd{HmkJb{4$02W{F`2YX_ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_dislike_on_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_dislike_on_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..93c5fb71512a59fd0430c6239ff1ffbbca9bb747 GIT binary patch literal 1354 zcmWIYbaQiJWnc(*bqWXzu!!JdU|=u+VtFv~baoCn!3g9sFrEOBEI_H;ypp0IcPE92 z$S4K&2Mmlr2nLDC#RU)+RuZV{+ck*V%eq)q;1}dfNi9wWD)|7!Dn&rcfo>83vPIG% zYz+`Q3BtAkvCB&eN`PttK=2?(*InG6iuTNxN6ZXv`}7BDdI zw=ghlJC6`Ugh@eSQ6ktl79h!#md3#FX*mM}ZzKbQ@C612u4u3vkig+K1)!7+&|UdJ zn9h*HkjkLI;K`83kj$V5WElY?)sVr=(I>zoj1g$+1f|>CvaE~afB3v=pQ*DtLruC} zZ>rvrqlS~8TBKz;MmcoNEIz-udfJW;=T>_$D;z{IaWDJ_A`d72Z`=bx+a#oTqUbUE%3doSH!^BAeMtA;&zj`M_Tq|%OTyln63*uKDlO;s-@kqC zcXlmH_~#!F&i!o;w6N+;7H3ncTH)vY#fkx#e-yp}L$`pBVJ@SV0x;O^bcH&c7A{nj zU}KPAIe{u^ZmdKcx%><>nrP*y-iWm^>`z3FRZ@Rrhi_&P(PQUr$8NPO1`J}ak z<#%Up*@rnTlP68L+M6=hg+lD?OOSPQ@CA34fWNw zlWy&M{wRUZ`|+9CGaUCfx@9gfUmK8;W2P+qS~qH9^|W^kZ*nDsPX2wsq#OJ{akaIs z>(eBh)he;qgt{|0l&WUy<^Excu<1 w_-o&ri+nnd)O;@tHtkh>8qayx&@OiW)#RQZ0e6Jf>wo)fd{HmkJb{4$02W{F`2YX_ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_like_off_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_like_off_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..fcba929e5b03743c1d917eef0228b1121ed62d42 GIT binary patch literal 1690 zcmaKrdpwj`7{|{rVWtZ)BgthHnkK5Dk+e3kT1MqE zXhV~ANzo@I)FdT7YsPKJHN-^ByYKLa{%H3(@AJIh^E|)LInQ~|=XE$?WtAxbfQzLW z$(f|@iUt52fL(Rhl>ACqP%?=6j<^ZcJ&~5bGRoA%oyJ_#*3J|#z#aP791E1Ye*sva&$0< z*&AlO?{`f8jwyjbBK=iZbA(O{5$z>1(djn%1UQ|7-%_wE0S0gY$AOvX{O}yM^GpEr z=K&DUSkIAf0q`gR0EM3QoO(V0((wSWU$5uZze%81kk{&RNH~g7sQ}Ct0kGK(0J%2+ zpxsw%aQKhjaBxWp?&~}}d;tyk030|00ssZ+&*>9OV zeiOAXZp*lxs`mWy^!FJ=8(frnl(l0iH$zE2mwt zMHM?t4UkcYx@L+EG2)vK@=%G}-Fz{v!$@W&P#j^{N2<&oK=@9j!h0{#Ghdp=dk(vEYv|{SW zKV#e(IYrYnG3z!m;f9Bb%m#ZTGR<^?ns;#&5WoP6@XXJk<$}Xm1k-ElA^FbSn({5t zXxIF+>N)r;H9O@rZ@)3_+H5);Z839Iey}9I#GN!uH4?vE;%~V%nl-#Di64fXQBy?W!^T(`pf|tF+7tQi!R>EWW~x>;L$0v$^ia*aWBLG2$TVN2m%hi zbYr4?viVLmHOvM_oH(*N8pYe6Hy0No_^|2Led}evl_#CrD>r9-wKfi#ylqr8(b6-A zu)^fUjTMYTRQL~UN{nh5evFMB6%LUT zg6Jn<)>}ThbLFL;_MVJpm11es$WONwXx^9T4bOEb9Ma)n<9>k>fd&LY5hzI_PrjBF z3QZ`ff!!3I-+KYXV&6Ml=gEag!*>SplMSz}S)tbIDMW!Z-T5(xxo!9T%FJ_-&1^nr za?d#eR%l1mG^x@uc7ckY9nCCq^B?JZ3oTjNn`Il0VykDZS`aYu5nXTU2EXB*H zWv)#*#NCO_4f%V^4&Z3*pSj`ed(FoJBy3(?k}@7{!=*=0HQ9}MlKT$^FVQ>j@yybe zS=)NqlLg&}qg+N&fm0E8)0gM;1-p9slP}pWomQF}D&?unHb_`-UP9$FO5<7b&M_G; z>e@6G)onXU?i{*?-U!W^+7~c?3)31%{+ci6tDlBg%uY5YQ^!2vdq&Naqf{V z6yu=nQBlUV0cl34+5qjLoWI_6$jZNg_@9xvC!ZP~*{$Zdqbj{=aggZ(ovmcg5v6(C a8?>snM;g2@F3hvBiYVNoR};+n3c$Z9DxA9j literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_like_on_32c.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-mdpi/ic_right_like_on_32c.webp new file mode 100644 index 0000000000000000000000000000000000000000..a2149ca246dbe622eefa8c70fa4d9da045ead9b7 GIT binary patch literal 1362 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 R)TU%b%~w0q+cTj{@?TDj%I^RG literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_remix_filled_white_24.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_remix_filled_white_24.webp new file mode 100644 index 0000000000000000000000000000000000000000..335520b1177536e48b3941e6a9e090e6387a17c8 GIT binary patch literal 4526 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_dislike_off_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_dislike_off_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..83b9c1da8c23db1cb7042292711cf96295c6a929 GIT binary patch literal 3740 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 OaR=Ks;Z|bL0`Ok|QYonb literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_dislike_on_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_dislike_on_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..6c4a4610244c53284355da3474b73f5d873aa325 GIT binary patch literal 2500 zcmaKsc|2768^^z*WyYG3K_({CRZ~K)wKB2{Ly8d@HNUbAvJVk;X)%^iH(XKnWN9#> ztYxaP3kfr!h1T;@=ly-2&+GerzUREoArkQTColj`ni<Ife>t4)r7hv5d!0-o4H)Kl#u)hXw}(LmHcPrk)_0 zKDUNrH>JOecaO%Eb^nyo$}M~ka4uYM;j&W$<4Ir z+9|p*zpvmOtR zq_2d$Xjn$ysovZ1`I8N25P2K+o}Mr2m9{^C|LZr*c>0ktv@2F73a*X1XBqRD)m^JcwjQNsN*VD*5Ie%3h;g=myx>mfrk+vt3It-D9^cA>3sWF0wYgN)rf1{8Eb z&knTw+B|;%(Ng7eKCclqw4kzdbk8;`b4qISF?qSWG%TS>5~;*duL}${!Vbn+bRCGH zr(FNLXZw;9qnoT8`n6ZD*aAp+I9Qw3FR#=UQuo0^O}+cBem}9Dd7v{j38O;S$xj)? zSiRXox>cIWN#2nuQ*Wp0CYU9wgtqzr$uU|1b z$}y!++=&!j>pk}`EhJsN-1|FxCi~I;q*+DHVVjRz&AxLJIof;uv!v4Rs_tH% z;l^!V9*-+6k9N2HGPcIi(D+SM+$v)*&h2J-OpFmM#Y^s^F-vg`u>nATN#*O%H>#lk zGKH{4zz7(sNyixH=8FHZJxxr=#mQ)67;>(m8&?={IHEr!eYy8FbLeo6Br%c{agB%O z=@(V5sB#&jC*@95hbgQUuG}7NSt?UuzBz0mQ023D2dA?aC4pbRKxjs2Rh1XIsML05 zDjRX8If58oz>8lk2A&935QJGYf1nO7!4D&MpkK0RLxmE-RUhI z$a|Ln;0uytw}o&9;Y#^W9OvRgXVkfit;S165+}||*a@09@7dD6Day22Ny--Y%6qKw z&n^w%fB4$mB?k6A3~h8d3C9MSzrRF1)-3Lg&HT=T%VM91VVBFqd92aE@NHfr5)_Pu z_$(3Kw;OSMO5Sd4UUlP>NIr5}U8m44vLU2&49hzuMmP{V_!d}QPWid)8sIMjy19suj4vb=qz17JkYtWlx;mJv$m6)WOhbSB35XK zuB2Vq1)Ht%FDL1LolqH}a%gMcdLrMxT+C*b$le$}D{*XErB0UOxFr8J&Ra|_ z4>@Z^wu|+=DEUUsTj^fX_|KNQ);~X1>ae zdVQUJ`mgU=B7S;0m%|*y*|xGD_|^|kyzd%5+?=5^p@K{;EUGNOK+*WTuRkuhrqQEe zeok9NFDYMIz0wIW>RQIq=3nRv;+ni~JmlOx&O=RCUVkNBaYYL za7fa{mSNkJF8m}eO!pdn}%1+KUykYU?2!L^mV>4S@wEtu2N(l{rTl$51Rgd=G?R6(_WUP z3`V%&7tJFfN=t85q&6)YOg8OAFW+Pcjknk~4>HF@Enr-SWh;CJ$Lvvw7ay;Z4i~8@ zAqb~R1UD(PQ94dgv^?5)H-_MJf_lwy4t8w#_RcF*%iEFPW)%y_%zekwU~_nbPSpI% z_)S7MW~c4Q0QucqfPYev0um!q_AC{_moJdNpZL9afFXXfKw&Ma(3{opBI?MNKBdh~ OaR=Ks;Z|bL0`Ok|QYonb literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_like_off_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_like_off_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..e59653ed1849a4a4bafc675c1ae5dd1a939aa009 GIT binary patch literal 3716 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_like_on_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_like_on_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..3db533ee9dfecb0252fd6733eb5e2473265548e4 GIT binary patch literal 2518 zcmaKsc|4SB8^`ZSBGWXMh{*nCXDr!L7+H^sk!_?J#^_8LnyC-V|0=kq)mTPv&X?Etu1q8(fu4BZ3( z04T^!e?GPr77pz&Xb52Kn{g{t@*`a!W317#ZthrFzEJ>!+E2rIQv!a`zeY&4%J`)n z(D+xy|4(km`%t_g$s**6WN2|{PrD%A<@<}3H`(hKn{0C6g@6l?#$l7m$1xTV;~`e| z{ReyfgS`XDoBDW2W8!!2;^tbLwt2c8J|t%+sON`V3QzzBSOfIt`Jpjn{sjOSt^mN3 z^gHL32|#@`0OId{=M?h*Kt=&T>-nAgeJ24pGVbSeTcNmxKmdUC7XS!%07QBL5b*d} zgTnvVn=Dk4g7)PPHD7QJ_yAd83rN5lXhNg|y;Ny{ww~V z6L~R;jSOs?ZEW3S&gG>-g<_XP9^NMn8kCQ(Yn!xaZC4nv6BH}v=O99KSAA zQ9s{<*v}85G1w}nbl7Tm!=PRLbCvP8>yKc;8>USvU()Xu1fK5JBdzLqIxUNRPMZqb z5^#O%lcGB{_Tk|No)>i5&F#ITtI?b-_9cmb<u3tFGBpYI>w|QvSDIY$7_#hvb=3WI!2Z7naGzz zes#-~5xZtnTK{d`StP#S_^e&URq(5YEJ6{B zn5C-*0F(0JDP_ie*n<9Y)kYo$-%`{Mx%UN+61(E_+$->9@DGo5o#hPb z>L;JANoC@1JRWn(4x$Qo+K()aMG|Gss%NLMsWz=Fq*KP zxLH*YQR}hzJyUZgLvy}m(;Wg;Pf&;G9v>PKBITovCI(f+x3;SK z-qq(t9$gQePs=&;r`-mtL4jr|z9G8m+9uWb9gk>VXN~ac?kf@9#oeG6Yw_Nns9Ai1&ii+{(6WXz9!ncw!`30&&xcK-0Ls^W?e2ZnV+fH-} zu|gEy*}gLi5tSldmLI8|0^-$l3Ztz%K+UrqjMIA(U;`t1S=>wj{VQeDp)Yk&0%XHf z&43v=q#}GBou7{gi_6#nLu1W&gWfFVbek519lA(eoq5y4YT+U1~5-l?@9YLW9FRR_z*0;@7GIfQ*w=`%I zI->Gz^*y;!{Qmn!+*V>bz9TC7)m&y@H*UVxTsIh^HpTHqG&6(6KIFHn_{hZ9-nJ6Xl69li43C3NJMLluYfro>y&Zx`>h_a5Qg z&!v;4ObZT{)UG=_Euqd(h|{EMY>BMp9z1!~NMfHyP0yY^W#jfKN~MD&$8et5 zK<|O*vYScUANXM;iI<+@nEVk;#MI5EtT1)+>_|1YI1V-^qMXlF0*)#;NK&HEIRvs)bWTwu4$?q{7PO63R6XREg_~F*CnLp`N*=k zztRT!aH_4dCi{xnz5oyT%J0^_9AV%i+DKQT|{XGeZC z;vJ5!SX;b)_W`+vJ(u8W5^~Oz`x5J5$bJd3h$9Fy_x3Y$g(tLUzXx^O7}g9NUJGp* zM##VUk3R-;;0y&>J(@C~#%&du4(wcxNInIS>MPafC!e}{#uW#l{O-1~HB84mwzgh( zY8u!=3Hg{UmPoWibn^-AFhRbPF0Jo6l=n86R{qL_7I6C-Lp?eo!ZF!&lqhktrY|~r ztkuo_{liR=o}p%z=!>icAwt;U@!4zVsV5{e8-#o58dTrKrcj@d)ZEY#x}>iP;Y)dv z#Bl1IQQybKoI1r%30?3T9B)DkRjRnULSbn-$GS4v%lgb?X zD*08HYQCc8I9)PaU6}g$i`MckKa9QeZQE{^^5qoN!+VQ;mYg>KrJjy5bbE;~d`&*U zH~x0^^fUG0sLIA99Zv_+e<^X{*XT{_9+c3LkwKB%ybm+VZ@PwF?IWvUd@>}-qt~j~ zWNim@NQQlh9QC2!^17khEqT@R40?K0SE-0}hgC-kS@NpbZGlg?H7D~z zP)+M7hej!J;cN5gxhdw_5I4W@QJSq{_5)Mxt>uZ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_share_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xhdpi/ic_right_share_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..800cce93e1ea4daada9f77289694ad70cfad42f2 GIT binary patch literal 3896 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 MfqP&@aP_P8AD2}5DgXcg literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_remix_filled_white_24.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_remix_filled_white_24.webp new file mode 100644 index 0000000000000000000000000000000000000000..c2ee4badf89dfc156953f2d9a365ce8659f6b706 GIT binary patch literal 7536 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 Ic>6{7KX(cW@Bjb+ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_remix_filled_white_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_remix_filled_white_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..c2ee4badf89dfc156953f2d9a365ce8659f6b706 GIT binary patch literal 7536 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 Ic>6{7KX(cW@Bjb+ literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_comment_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_comment_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..b58b8c935303d3b29c0a249fc99ad9e3f1a9a504 GIT binary patch literal 6726 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 Tw7h4g<*G>F=Y4SfOZI;NY^(wT literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_like_on_32c.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxhdpi/ic_right_like_on_32c.webp new file mode 100644 index 0000000000000000000000000000000000000000..d56e5f992d9003e237cfd4298235968661d19738 GIT binary patch literal 4024 zcmaKvc|4Te`^Rs)G8rC{HIyy85JHy8PDDtQJ!BbsG#He9UqTX!Q1&(Z*!K*{F6)@F z?_wA;-|2b&c)ovpf4_6?>$>0Px<0RSu5<1`&g(YRQdh441AwWTs)31t?BmM-0EiRK z^6y6r0x{?#Ar1kOzCWIvm~wUV_B7N`<$7%Pgo|nsAR+d@o3*W%`#wVTC{Z(%apes4@7%o{tP6M7ATc zfWv>W&4012yXPN$EK#H2>f-Zftv~J0?m+f##zw?9HPP4sFTfDc0960%pExEq=qCV> zJq7@>#D8Np?*QOi7yvNO{2SxR1px3H0H{O$8~gW6+^s#W|DKMV=t-YH2Y`b@0JvfX z01P7laM}Ft9MSzBwQ&(s?8LgD#O?sN0QLYEpar-Awty&+ZWBMM1aL=1*Ff_r1##BB z*RHcS`paAukvTR_;-*p3)3$pVqtBmbkJ+G|BpPl&s}ynlAk|_G{fhe>44d%SlK9An z4^x^WGXQ*o8Q1!6(v%^$nXjlDzf5}Cy^%?HETSwR2;Nn zOIVx4I}T^cLa(CoS9*7To!3LLm>l?m3)8ovwl7OEzs!Th&Z2i)8B9k@twG@{%hlPGpXlEo!iY|#p{8j_kUR`k?|EY% z;QFd69H0p0E}piw*orOn;Ow&w7)@QL{4ntkj>NDzyWq>Uj9OlNC*RqSF@~J;|3Opy|w^tZ+8fZ%L3mGmOu-17m zTyxYigJBuXW)alGme>Ep1BAfE?207y$zBZPJIR3i#R8qjq5Q`@t?1WBcoL=93JLkmJ75hm4qEQ^mw z$v__|xi3jkc7|-L482J10(zCBwIozn#{du;FI`WqAVlIfC|aP5Bbqx!3($I=46tM* z26K~1`O-!UCsAHjQR%6Der0)1vrUtH%MtoTT)LuYN$$XOjo&{5RJ5)BI z{!TEke0EBJ0mOTh%Yt}U81MlfNCd3_E8w04Q>5xAZf+(yJ_{}~@|y6a0A;`!3^(5D zJ(EFkX1Dy7FW*4!w4S6n1=R#P94t&;-wT|2L2-)M&sis=FJ!Po0kVB48or9C#IIos zf{L*uJ4!=JD5`e&$^uGBqNNc(w&Z^(c8G7Y>_KG1Bk-fdb6Z*0Ik7ypTtc|QCtv@;HNPW_aLqA9wK*~B{CcLI3G~Gs@A`#{*IAyp+ixOE=NME>vgEl25+LqZ$NE{t z@HK-Tw6X$Ep&LrVo&bQ~?+r{80kY|&vuw97nF&D{zN@on$hR!phdfY;5C3E?W^LFhxhC3|HV)o4|+pLf@|)3rnxg ztw8-suC2^_SqeN49w{ppNou@5;oHbh$*v!m8t+!gp2>^oL`3Si%|X` z4LV|8wa4tNsZavBylShYmL``M-PhU;UliHZ2kOEq${GuW^?w)GR!xJ)+a%j~1@)xA zS80rnJi6VUlTL;nB^ib;(E6JliW#+-#n~+iw+V;uF*kG@s-;cIg|1k26XX`Knlt zzrB(|p7|DdtNSw!NNld=J^g0$Tn!t3(vX5(UA0_U#

bUt6r~u_Zcz*!%AI9g^uTrw1z27qv=+>)I8C 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

bUt6r~u_Zcz*!%AI9g^uTrw1z27qv=+>)I8C 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 uRuqG literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_remix_filled_white_24.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_remix_filled_white_24.webp new file mode 100644 index 0000000000000000000000000000000000000000..09d18ebd5b5c933e916ec9a1209706129861c3ec GIT binary patch literal 10650 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_remix_filled_white_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_remix_filled_white_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..09d18ebd5b5c933e916ec9a1209706129861c3ec GIT binary patch literal 10650 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_comment_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_comment_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..b44137aad712e3382e3a313a38fef71059f0c69d GIT binary patch literal 9164 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_dislike_on_32c.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_dislike_on_32c.webp new file mode 100644 index 0000000000000000000000000000000000000000..56d8f864ba051bb13e1206ec799c5b0851c3882d GIT binary patch literal 5480 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

@OkksC|9Ko9l;nYOrebE^vdv{%&dgIBDEH+ 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 WaJeZR(MyLwtItW{ctZ%k*8T%|xzVNo literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_like_on_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_like_on_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..c2b56b0984fbfc598a90cfe3d8c1a3211c9ed559 GIT binary patch literal 5416 zcmaKwXIv9Y_s2K%-g{6Is&oiNKzawIi2{oBD!qwFOK1X0FVd?B(tGF~0X0awDxwq- zslkAB0?8BaeQ}=`&;LKO=j?aR`R&Y^**E*y+XlM25LN)N)X_AxFjcUk0sugYVDP^$ z11&An2@qijfF}NU5<<$`Cn(^yo+iZV-hBx93IHPXzngXr=!gRVj)i|?{G|Xu9}57;sefbto{67BfWzO@kq|tQt1AHft^xqsdjP;Z z4FFWuf9DA9|ELW@NO2SD@+EXPzzc8zAbsx%<4am!TyjGQp*p4L}n zjZuSlyF8x}!_9rY1b-QfcjC|j3We(Jc!TPF9Nm)#?GSiT(8NiE1Vg(H8WQGwiC5s_{5!Y9Iflgh{*EX;gqTpTb6+?iE z!^cx6XdHKp{7!Tvt<^IIO>nttxub2#GA!ISXZ-@l;M02eX)zU2A`W_L^qvSAGo(_2 zCC_61D%%|OI}bmA@Za1}&N6bEBORT|mb4vInA=-h0>2IN$*Z6NpNLbB!x#9BQOKK2 zdVd}dM(KTMVOPb__Q7qE;>Vk3EoGl3?{a6wx@F|}-ed^-iLft{Fkv)}5 zJx_({0y}r#t*m@-wo01B+Ni=j*Jb9YFo?~G%jW6IukdDm9lhKpW?%b2t@(SFIGg%R zPHzy%X>v#CWFn}|pgOD}e2QtTCRH`8;w{^Ae&PZDdscE=Gj4`4@|1oQkz+-qUU7?h zjUPZQZ+K~SEeG5wofda;Fw$QfDcj2k_3x;ibCa}9KD4h1|Ivb|Pd}V*P15jcfR^{J zxlnU>+VwmWM9Ss
@OkksC|9Ko9l;nYOrebE^vdv{%&dgIBDEH+ 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 WaJeZR(MyLwtItW{ctZ%k*8T%|xzVNo literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_share_shadowed.webp b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable-xxxhdpi/ic_right_share_shadowed.webp new file mode 100644 index 0000000000000000000000000000000000000000..5a9476c23653f8168049907778ad35c2a5dcc50e GIT binary patch literal 8976 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 PaxkxLj^F8i0Ra9FTD5~X literal 0 HcmV?d00001 diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_comment_32c.xml b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_comment_32c.xml new file mode 100644 index 000000000..8919e0a6f --- /dev/null +++ b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_comment_32c.xml @@ -0,0 +1,404 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_dislike_off_32c.xml b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_dislike_off_32c.xml new file mode 100644 index 000000000..54f0a62ce --- /dev/null +++ b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_dislike_off_32c.xml @@ -0,0 +1,588 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_like_off_32c.xml b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_like_off_32c.xml new file mode 100644 index 000000000..abbd8382d --- /dev/null +++ b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_like_off_32c.xml @@ -0,0 +1,600 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_share_32c.xml b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_share_32c.xml new file mode 100644 index 000000000..12f19f0ef --- /dev/null +++ b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_share_32c.xml @@ -0,0 +1,684 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From e8fec183def4c20a2c9ee7e7d285e034a9b15a05 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:56:02 +0300 Subject: [PATCH 036/103] chore(Translations): Update translations --- .../music/settings/host/values/strings.xml | 9 +- .../translations/bg-rBG/missing_strings.xml | 7 +- .../music/translations/bn/missing_strings.xml | 7 +- .../translations/cs-rCZ/missing_strings.xml | 9 +- .../music/translations/el-rGR/strings.xml | 11 +- .../music/translations/es-rES/strings.xml | 3 + .../music/translations/fr-rFR/strings.xml | 9 +- .../translations/hu-rHU/missing_strings.xml | 5 +- .../music/translations/hu-rHU/strings.xml | 2 + .../translations/id-rID/missing_strings.xml | 3 + .../music/translations/in/missing_strings.xml | 3 + .../translations/it-rIT/missing_strings.xml | 7 +- .../translations/ja-rJP/missing_strings.xml | 6 + .../music/translations/ko-rKR/strings.xml | 15 +- .../translations/nl-rNL/missing_strings.xml | 7 +- .../music/translations/pl-rPL/strings.xml | 9 +- .../music/translations/pt-rBR/strings.xml | 9 +- .../translations/ro-rRO/missing_strings.xml | 7 +- .../translations/ru-rRU/missing_strings.xml | 3 + .../music/translations/ru-rRU/strings.xml | 4 +- .../translations/tr-rTR/missing_strings.xml | 3 + .../music/translations/uk-rUA/strings.xml | 11 +- .../music/translations/vi-rVN/strings.xml | 35 +- .../translations/zh-rCN/missing_strings.xml | 7 +- .../translations/zh-rTW/missing_strings.xml | 5 +- .../youtube/settings/host/values/strings.xml | 93 +++-- .../translations/ar/missing_strings.xml | 20 +- .../youtube/translations/ar/strings.xml | 109 ++++-- .../translations/bg-rBG/missing_strings.xml | 19 +- .../youtube/translations/bg-rBG/strings.xml | 79 +++- .../translations/bn/missing_strings.xml | 83 ++++- .../youtube/translations/bn/strings.xml | 15 - .../translations/de-rDE/missing_strings.xml | 67 +++- .../youtube/translations/de-rDE/strings.xml | 13 - .../translations/el-rGR/missing_strings.xml | 19 +- .../youtube/translations/el-rGR/strings.xml | 129 +++++-- .../translations/es-rES/missing_strings.xml | 9 +- .../youtube/translations/es-rES/strings.xml | 73 +++- .../translations/fi-rFI/missing_strings.xml | 83 ++++- .../youtube/translations/fi-rFI/strings.xml | 15 - .../translations/fr-rFR/missing_strings.xml | 19 +- .../youtube/translations/fr-rFR/strings.xml | 109 ++++-- .../translations/hu-rHU/missing_strings.xml | 102 +----- .../youtube/translations/hu-rHU/strings.xml | 216 ++++++++--- .../translations/id-rID/missing_strings.xml | 83 ++++- .../youtube/translations/id-rID/strings.xml | 15 - .../translations/in/missing_strings.xml | 83 ++++- .../youtube/translations/in/strings.xml | 15 - .../translations/it-rIT/missing_strings.xml | 18 +- .../youtube/translations/it-rIT/strings.xml | 84 ++++- .../translations/ja-rJP/missing_strings.xml | 18 +- .../youtube/translations/ja-rJP/strings.xml | 117 ++++-- .../translations/ko-rKR/missing_strings.xml | 9 +- .../youtube/translations/ko-rKR/strings.xml | 159 +++++--- .../translations/pl-rPL/missing_strings.xml | 12 + .../youtube/translations/pl-rPL/strings.xml | 107 ++++-- .../translations/pt-rBR/missing_strings.xml | 25 +- .../youtube/translations/pt-rBR/strings.xml | 77 +++- .../translations/ru-rRU/missing_strings.xml | 32 +- .../youtube/translations/ru-rRU/strings.xml | 69 +++- .../translations/tr-rTR/missing_strings.xml | 67 +++- .../youtube/translations/tr-rTR/strings.xml | 13 - .../translations/uk-rUA/missing_strings.xml | 18 +- .../youtube/translations/uk-rUA/strings.xml | 108 ++++-- .../translations/vi-rVN/missing_strings.xml | 19 +- .../youtube/translations/vi-rVN/strings.xml | 343 ++++++++++-------- .../translations/zh-rCN/missing_strings.xml | 51 ++- .../youtube/translations/zh-rCN/strings.xml | 27 +- .../translations/zh-rTW/missing_strings.xml | 24 +- .../youtube/translations/zh-rTW/strings.xml | 78 +++- 70 files changed, 2091 insertions(+), 1048 deletions(-) create mode 100644 src/main/resources/music/translations/ja-rJP/missing_strings.xml create mode 100644 src/main/resources/youtube/translations/pl-rPL/missing_strings.xml diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index b329e98e4..975e7684e 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -31,10 +31,12 @@ Tap on the continue button and disable battery optimizations." Enables the custom filter to hide layout components. Enable custom filter Invalid custom filter: %s. - Custom speeds must be less than %sx. Using default values. - Invalid custom playback speeds. Using default values. + Custom speeds must be less than %sx. + Invalid custom playback speeds. Add or change available playback speeds. Edit custom playback speeds + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables captions from being automatically enabled. Disable forced auto captions Disables Cairo splash animation when the app starts up. @@ -87,6 +89,7 @@ Info: Enable Zen mode in podcasts Changes the player background color to light grey to reduce eye strain. Enable Zen mode + Reset to default values. Restart to load the layout normally Refresh and restart Export settings to file @@ -317,7 +320,7 @@ Some features may not work properly in the old player layout." The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing. Color changed. Color: - Invalid color code. Color reset to default. + Invalid color code. Color reset. Change segment behavior Enable SponsorBlock diff --git a/src/main/resources/music/translations/bg-rBG/missing_strings.xml b/src/main/resources/music/translations/bg-rBG/missing_strings.xml index 4333d26db..b2b03a1e0 100644 --- a/src/main/resources/music/translations/bg-rBG/missing_strings.xml +++ b/src/main/resources/music/translations/bg-rBG/missing_strings.xml @@ -19,7 +19,9 @@ Tap on the continue button and disable battery optimizations." Bypass image region restrictions Change from in-app share sheet to system share sheet. Change share sheet - Invalid custom playback speeds. Using default values. + Invalid custom playback speeds. + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation Disable swipe to change tracks in the miniplayer. @@ -44,6 +46,7 @@ Info: Enable swipe to dismiss miniplayer Also enables Zen mode for podcasts. Enable Zen mode in podcasts + Reset to default values. Export settings to file Failed to export settings. Settings were successfully exported. @@ -125,7 +128,7 @@ Some features may not work properly in the old player layout." The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing. Color changed. Color: - Invalid color code. Color reset to default. + Invalid color code. Color reset. Change segment behavior Enable SponsorBlock diff --git a/src/main/resources/music/translations/bn/missing_strings.xml b/src/main/resources/music/translations/bn/missing_strings.xml index f7912b645..9d4d2191a 100644 --- a/src/main/resources/music/translations/bn/missing_strings.xml +++ b/src/main/resources/music/translations/bn/missing_strings.xml @@ -27,7 +27,9 @@ Tap on the continue button and disable battery optimizations." Select which page the app opens in. Change start page Invalid custom filter: %s. - Invalid custom playback speeds. Using default values. + Invalid custom playback speeds. + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation Disables redirection to the next track when clicking the Dislike button. @@ -59,6 +61,7 @@ Info: Add Trim silence switch Also enables Zen mode for podcasts. Enable Zen mode in podcasts + Reset to default values. Restart to load the layout normally Refresh and restart Export settings to file @@ -250,7 +253,7 @@ Some features may not work properly in the old player layout." The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing. Color changed. Color: - Invalid color code. Color reset to default. + Invalid color code. Color reset. Change segment behavior Enable SponsorBlock diff --git a/src/main/resources/music/translations/cs-rCZ/missing_strings.xml b/src/main/resources/music/translations/cs-rCZ/missing_strings.xml index 977ad6d6f..548b90a4f 100644 --- a/src/main/resources/music/translations/cs-rCZ/missing_strings.xml +++ b/src/main/resources/music/translations/cs-rCZ/missing_strings.xml @@ -28,10 +28,12 @@ Tap on the continue button and disable battery optimizations." Change start page List of component path builder strings to filter, separated by new lines. Invalid custom filter: %s. - Custom speeds must be less than %sx. Using default values. - Invalid custom playback speeds. Using default values. + Custom speeds must be less than %sx. + Invalid custom playback speeds. Add or change available playback speeds. Edit custom playback speeds + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation Disables redirection to the next track when clicking the Dislike button. @@ -63,6 +65,7 @@ Info: Add Trim silence switch Also enables Zen mode for podcasts. Enable Zen mode in podcasts + Reset to default values. Export settings to file Failed to export settings. Settings were successfully exported. @@ -274,7 +277,7 @@ Some features may not work properly in the old player layout." The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing. Color changed. Color: - Invalid color code. Color reset to default. + Invalid color code. Color reset. Change segment behavior Enable SponsorBlock diff --git a/src/main/resources/music/translations/el-rGR/strings.xml b/src/main/resources/music/translations/el-rGR/strings.xml index d683f2faa..820702ae3 100644 --- a/src/main/resources/music/translations/el-rGR/strings.xml +++ b/src/main/resources/music/translations/el-rGR/strings.xml @@ -16,7 +16,7 @@ Το MicroG GmsCore δεν είναι εγκατεστημένο. Εγκαταστήστε το. Αντικατάσταση του domain για την φόρτωση εικόνων όπου είναι μπλοκαρισμένες σε ορισμένες περιοχές ώστε να μπορούν να ληφθούν μικρογραφίες βίντεο, εικόνες δημοσιεύσεων, κλπ. Παράκαμψη μπλοκαρίσματος φόρτωσης εικόνων - Αλλαγή του μενού κοινοποίησης σε αυτό του συστήματος σας αντί του YouTube. + Αλλαγή του μενού κοινοποίησης σε αυτό του συστήματος σας αντί του YouTube Music. Αλλαγή μενού κοινοποίησης Διαγράμματα Εξερεύνηση @@ -30,10 +30,12 @@ Χρήση προσαρμοσμένου φίλτρου για απόκρυψη στοιχείων διεπαφής. Χρήση προσαρμοσμένου φίλτρου Μη έγκυρο φίλτρο: %s. - Οι ταχύτητες πρέπει να είναι μικρότερες από %sx, επαναφέρθηκαν. - Μη έγκυρες ταχύτητες αναπαραγωγής, επαναφέρθηκαν. + Οι ταχύτητες πρέπει να είναι μικρότερες από %sx. + Μη έγκυρες ταχύτητες αναπαραγωγής. Ρύθμιση των διαθέσιμων ταχυτήτων αναπαραγωγής. Επεξεργασία ταχυτήτων αναπαραγωγής + Για να ανοίγουν οι συνδέσμοι YouTube Music στο RVX Music, ενεργοποιήστε το «Άνοιγμα υποστηριζόμενων συνδέσμων» και τις υποστηριζόμενες διευθύνσεις ιστού. + Άνοιγμα ρυθμίσεων προεπιλεγμένων εφαρμογών Απενεργοποίηση της αυτόματης ενεργοποίησης υπότιτλων. Απενεργοποίηση αυτόματων υπότιτλων Απενεργοποίηση των εφέ θέματος Cairo κατά την εκκίνηση της εφαρμογής. @@ -84,6 +86,7 @@ Λειτουργία zen σε ηχητικές εκπομπές Προσθήκη μιας γκρι απόχρωσης στο παρασκήνιο της οθόνης αναπαραγωγής για να μειωθεί η καταπόνηση των ματιών. Ενεργοποίηση λειτουργίας zen + Επαναφέρθηκε στην προεπιλεγμένη τιμή. Επανεκκίνηση ώστε να φορτωθεί σωστά η εφαρμογή Ανανέωση και επανεκκίνηση Εξαγωγή ρυθμίσεων σε αρχείο @@ -314,7 +317,7 @@ Η διεύθυνση που χρησιμοποιείται για επικοινωνία με τον διακομιστή του SponsorBlock. Μη το αλλάξετε αν δεν ξέρετε τι κάνετε. Το χρώμα άλλαξε. Χρώμα: - Μη έγκυρος κωδικός χρώματος, επαναφέρθηκε. + Μη έγκυρος κωδικός χρώματος. Το χρώμα επαναφέρθηκε. Αλλαγή συμπεριφοράς τμημάτων Ενεργοποίηση του SponsorBlock diff --git a/src/main/resources/music/translations/es-rES/strings.xml b/src/main/resources/music/translations/es-rES/strings.xml index a96ce7e94..5e17f78f0 100644 --- a/src/main/resources/music/translations/es-rES/strings.xml +++ b/src/main/resources/music/translations/es-rES/strings.xml @@ -34,6 +34,8 @@ Pulsa el botón de continuar y desactiva las optimizaciones de la batería."Velocidades de reproducción personalizadas no válidas. Utilizando valores predeterminados. Agregar o cambiar las velocidades de reproducción disponibles. Editar velocidades de reproducción personalizadas + Para abrir los enlaces de YouTube Music en RVX Music, activa \'Abrir enlaces soportados\' y activa las direcciones web soportadas. + Abrir ajustes predeterminados de la app Desactiva la activación automática de los subtítulos forzados en el reproductor de vídeo. Desactivar subtítulos automáticos Deshabilita la animación de bienvenida \"Cairo\" cuando se inicia la aplicación. @@ -82,6 +84,7 @@ Esta función aún está en desarrollo, por lo que puede ser inestable."Activar el modo Zen en podcasts Añade un tinte gris al reproductor de vídeo para reducir la fatiga visual. Activar modo zen + Restablecer a valores por defecto. Reiniciar para cargar el diseño normalmente Actualizar y reiniciar Exportar ajustes a archivo diff --git a/src/main/resources/music/translations/fr-rFR/strings.xml b/src/main/resources/music/translations/fr-rFR/strings.xml index 91ac54969..e490c29dd 100644 --- a/src/main/resources/music/translations/fr-rFR/strings.xml +++ b/src/main/resources/music/translations/fr-rFR/strings.xml @@ -30,10 +30,12 @@ Cliquez sur le bouton Continuer et désactivez les optimisations de la batterie. Active les filtres personnalisés pour masquer des éléments de l’interface. Activer le filtre personnalisé Filtre personnalisé invalide : %s. - Les vitesses personnalisées doivent être inférieures à %sx. Valeur réinitialisée par défaut. - Vitesses de lecture invalides. Valeur réinitialisée par défaut. + Les vitesses personnalisées doivent être inférieures à %sx. + Vitesses de lecture invalides. Ajoute ou modifie les vitesses de lecture disponibles. Éditez les vitesses de lecture personnalisées + Pour ouvrir les liens YouTube Music dans RVX Music, activez \'Ouvrir les liens compatibles\' et activez les adresses web prises en charge. + Ouvrir les paramètres par défaut de l\'application Désactive les sous-titres automatiquement activés. Désactiver les sous-titres forcés Désactive l\'animation Cairo lors du démarrage de l\'application. @@ -86,6 +88,7 @@ Info : Activer le mode \"Zen\" sur les Podcasts Change la couleur du lecteur par un voile gris pour réduire la fatigue oculaire. Activer le mode zen + Réinitialiser les valeurs par défaut. Redémarrer pour charger l\'interface correctement Appliquer et redémarrer ? Exporter les paramètres vers un fichier @@ -316,7 +319,7 @@ Certaines fonctions peuvent ne pas fonctionner sur l'ancienne mise en page."L\'adresse qu\'utilise SponsorBlock pour contacter le serveur. Ne le modifiez que si vous savez ce que vous faites. Couleur modifiée. Couleur (hex) : - Code couleur invalide. Couleur réinitialisée par défaut. + Code couleur invalide. Couleur réinitialisée. Modifier le comportement des segments Activer Sponsorblock diff --git a/src/main/resources/music/translations/hu-rHU/missing_strings.xml b/src/main/resources/music/translations/hu-rHU/missing_strings.xml index 73bfca33a..ff3a986a9 100644 --- a/src/main/resources/music/translations/hu-rHU/missing_strings.xml +++ b/src/main/resources/music/translations/hu-rHU/missing_strings.xml @@ -1,12 +1,13 @@ Don\'t show again + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation + Reset to default values. Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - Hides the promotion alert banner. - Hide promotion alert banner Show a toast when changing the default playback speed. Show a toast Show a toast when changing the default video quality. diff --git a/src/main/resources/music/translations/hu-rHU/strings.xml b/src/main/resources/music/translations/hu-rHU/strings.xml index 6f0ecdea7..2230fb505 100644 --- a/src/main/resources/music/translations/hu-rHU/strings.xml +++ b/src/main/resources/music/translations/hu-rHU/strings.xml @@ -221,6 +221,8 @@ Ha tiltva van, akkor blokkolja a t. k. hírdetéseket. (lehetnek mellékhatások Felugró prémium hírdetések elrejtése Elrejti a prémium megújítás szalaghírdetést. Prémium megújítás szalaghírdetés elrejtése + Promóciós figyelmeztető banner elrejtése. + Promóciós figyelmeztető banner elrejtése Elrejti a minták polcot a főoldalon. Minták polc elrejtése A beállítások menüben szűrendő nevek listája, új sorokkal elválasztva. diff --git a/src/main/resources/music/translations/id-rID/missing_strings.xml b/src/main/resources/music/translations/id-rID/missing_strings.xml index 34e49809f..4f34cdc34 100644 --- a/src/main/resources/music/translations/id-rID/missing_strings.xml +++ b/src/main/resources/music/translations/id-rID/missing_strings.xml @@ -1,8 +1,11 @@ Don\'t show again + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation + Reset to default values. Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore Hides the promotion alert banner. diff --git a/src/main/resources/music/translations/in/missing_strings.xml b/src/main/resources/music/translations/in/missing_strings.xml index 34e49809f..4f34cdc34 100644 --- a/src/main/resources/music/translations/in/missing_strings.xml +++ b/src/main/resources/music/translations/in/missing_strings.xml @@ -1,8 +1,11 @@ Don\'t show again + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation + Reset to default values. Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore Hides the promotion alert banner. diff --git a/src/main/resources/music/translations/it-rIT/missing_strings.xml b/src/main/resources/music/translations/it-rIT/missing_strings.xml index 4e4c9e290..0d71a39dc 100644 --- a/src/main/resources/music/translations/it-rIT/missing_strings.xml +++ b/src/main/resources/music/translations/it-rIT/missing_strings.xml @@ -27,7 +27,9 @@ Tap on the continue button and disable battery optimizations." Select which page the app opens in. Change start page Invalid custom filter: %s. - Invalid custom playback speeds. Using default values. + Invalid custom playback speeds. + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation Disables redirection to the next track when clicking the Dislike button. @@ -59,6 +61,7 @@ Info: Add Trim silence switch Also enables Zen mode for podcasts. Enable Zen mode in podcasts + Reset to default values. Restart to load the layout normally Refresh and restart Export settings to file @@ -255,7 +258,7 @@ Some features may not work properly in the old player layout." The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing. Color changed. Color: - Invalid color code. Color reset to default. + Invalid color code. Color reset. Change segment behavior Enable SponsorBlock diff --git a/src/main/resources/music/translations/ja-rJP/missing_strings.xml b/src/main/resources/music/translations/ja-rJP/missing_strings.xml new file mode 100644 index 000000000..f22480d7e --- /dev/null +++ b/src/main/resources/music/translations/ja-rJP/missing_strings.xml @@ -0,0 +1,6 @@ + + + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings + Reset to default values. + diff --git a/src/main/resources/music/translations/ko-rKR/strings.xml b/src/main/resources/music/translations/ko-rKR/strings.xml index 0e33f01e3..789fb01e4 100644 --- a/src/main/resources/music/translations/ko-rKR/strings.xml +++ b/src/main/resources/music/translations/ko-rKR/strings.xml @@ -16,7 +16,7 @@ GmsCore 열기 GmsCore가 설치되어 있지 않습니다. 설치하세요. 이미지 도메인을 변경하여 일부 국가에서 차단된 재생목록 썸네일, 채널 프로필 사진, 커뮤니티 게시물 이미지 등을 수신할 수 있습니다. - 이미지 표시 제한 국가 우회하기 + 이미지 표시 제한 국가 우회 YT Music 기본 공유 시트에서 Android 기본 공유 시트로 변경합니다.\n\n• 공유 버튼으로 바로 Android 기본 공유 메뉴를 실행할 수 있습니다. 공유 시트 변경 차트 @@ -31,10 +31,12 @@ 사용자 정의 필터를 활성화하여 레이아웃 구성요소를 숨깁니다. 사용자 정의 필터 활성화 잘못된 필터 값입니다: %s - 사용자 정의 재생 속도는 %s배속보다 작아야 하므로 기본값으로 초기화합니다. - 잘못된 재생 속도 값이므로 기본값으로 초기화합니다. + 사용자 정의 재생 속도는 %s배속보다 작아야 합니다. + 잘못된 재생 속도 값입니다. 사용하고 싶은 재생 속도 값을 추가하거나 변경할 수 있습니다. 사용자 정의 재생 속도 편집 + YT Music 링크를 RVX Music으로 열려면 \'지원되는 링크 열기\'를 활성화하고 지원되는 링크를 추가하세요. 링크 추가가 잠겨있다면 순정 YT Music 앱 정보 → \'기본적으로 열기\'에서 \'지원되는 링크 열기\'를 비활성화한 후에 추가할 수 있습니다. + 기본 앱 설정 열기 자막 사용이 강제된 동영상에서 자막을 비활성화합니다. 자동 자막 비활성화 앱을 시작할 때, Cairo 스플래시 애니메이션을 비활성화합니다. @@ -87,6 +89,7 @@ 팟캐스트에서 집중 모드 활성화 동영상 플레이어의 색상을 회색조로 설정해 눈의 피로를 줄입니다. 집중 모드 활성화 + 기본값으로 초기화합니다. 레이아웃을 정상적으로 불러오기 위해 다시 시작합니다. 새로고침 및 다시 시작 파일로 설정 내보내기 @@ -257,7 +260,7 @@ YT Music 설정 메뉴뿐만 아니라 ReVanced Extended 설정 메뉴도 숨겨 재생 속도 값을 변경할 때마다 저장합니다. 재생 속도 저장 활성화 기본 동영상 재생 속도 값으로 변경되었을 때, 팝업 메시지를 표시합니다. - 팝업 메시지 표시하기 + 팝업 메시지 표시 기본 재생 속도 값을 %s으로 변경합니다. 반복 재생 토글 상태를 저장합니다. 반복 상태 저장 @@ -266,7 +269,7 @@ YT Music 설정 메뉴뿐만 아니라 ReVanced Extended 설정 메뉴도 숨겨 동영상 품질 값을 변경할 때마다 저장합니다. 동영상 품질 저장 활성화 기본 동영상 화질 값으로 변경되었을 때, 팝업 메시지를 표시합니다. - 팝업 메시지 표시하기 + 팝업 메시지 표시 모바일 네트워크 이용 시 기본 동영상 품질 값을 %s로 변경합니다. 동영상 품질을 설정할 수 없습니다. Wi-Fi 이용 시 기본 동영상 품질 값을 %s로 변경합니다. @@ -320,7 +323,7 @@ YT Music 설정 메뉴뿐만 아니라 ReVanced Extended 설정 메뉴도 숨겨 SponsorBlock이 요청을 보낼 서버 URL입니다. 이것이 무슨 역할을 하는지 모르는 경우에는 이 URL을 변경하지 마세요. 설정한 색상을 적용하였습니다. 색상: - 잘못된 헥스 코드이므로 기본값으로 초기화합니다. + 잘못된 헥스 코드입니다. 색상을 초기화하였습니다. 각 구간에 설정할 동작 SponsorBlock 활성화 diff --git a/src/main/resources/music/translations/nl-rNL/missing_strings.xml b/src/main/resources/music/translations/nl-rNL/missing_strings.xml index fab175110..09a8e1b20 100644 --- a/src/main/resources/music/translations/nl-rNL/missing_strings.xml +++ b/src/main/resources/music/translations/nl-rNL/missing_strings.xml @@ -27,7 +27,9 @@ Tap on the continue button and disable battery optimizations." Select which page the app opens in. Change start page Invalid custom filter: %s. - Invalid custom playback speeds. Using default values. + Invalid custom playback speeds. + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation Disables redirection to the next track when clicking the Dislike button. @@ -40,6 +42,7 @@ Tap on the continue button and disable battery optimizations." Enable black player background Includes the buffer in the debug log. Enable debug buffer logging + Reset to default values. Reset Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore @@ -134,7 +137,7 @@ Some features may not work properly in the old player layout." The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing. Color changed. Color: - Invalid color code. Color reset to default. + Invalid color code. Color reset. Change segment behavior Enable SponsorBlock diff --git a/src/main/resources/music/translations/pl-rPL/strings.xml b/src/main/resources/music/translations/pl-rPL/strings.xml index b1601c692..e3aa21676 100644 --- a/src/main/resources/music/translations/pl-rPL/strings.xml +++ b/src/main/resources/music/translations/pl-rPL/strings.xml @@ -30,10 +30,12 @@ Kontynuuj i wyłącz optymalizację baterii." Włącza własny filtr do ukrywania komponentów układu aplikacji. Włącz własny filtr Nieprawidłowy własny filtr: %s. - Nieprawidłowe niestandardowe prędkości odtwarzania. Przywrócono domyślne wartości. - Nieprawidłowe niestandardowe prędkości odtwarzania. Przywrócono domyślne wartości. + Niestandardowe prędkości muszą być mniejsze niż %sx. + Nieprawidłowe niestandardowe prędkości odtwarzania. Skonfiguruj dostępne prędkości odtwarzania. Edytuj niestandardowe prędkości odtwarzania + Aby otwierać linki YouTube Music w RVX Music, przejdź do opcji obsługiwanych linków w ustawieniach i włącz obsługiwane adresy internetowe dla RVX. + Otwórz systemowe ustawienia aplikacji Wyłącza automatycznie włączane napisy w odtwarzaczu filmów. Wyłącz automatyczne napisy Wyłącza animację ładowania aplikacji związaną z motywem Cairo podczas otwierania aplikacji. @@ -86,6 +88,7 @@ Informacje: Włącz tryb zen w podcastach Zmienia kolor tła odtwarzacza na jasnoszary, aby zmniejszyć zmęczenie oczu. Włącz tryb zen + Przywrócono domyślne wartości. Uruchom ponownie, aby wczytać układ poprawnie Odśwież i uruchom ponownie Wyeksportuj ustawienia do pliku @@ -316,7 +319,7 @@ Niektóre ustawienia mogą nie działać poprawnie ze starym układem odtwarzacz Adres SponsorBlock jest używany do wykonywania połączeń z serwerem. Nie zmieniaj tego, chyba że wiesz, co robisz. Kolor został zmieniony. Kolor: - Nieprawidłowy kod koloru. Przywrócono domyślny kolor. + Nieprawidłowy kod koloru. Kolor został zresetowany. Zmień sposoby pomijania segmentów Włącz SponsorBlock diff --git a/src/main/resources/music/translations/pt-rBR/strings.xml b/src/main/resources/music/translations/pt-rBR/strings.xml index e2f449289..3e03d003f 100644 --- a/src/main/resources/music/translations/pt-rBR/strings.xml +++ b/src/main/resources/music/translations/pt-rBR/strings.xml @@ -30,10 +30,12 @@ Toque no botão continuar e desative as otimizações da bateria." Ativa o filtro personalizado para ocultar componentes do layout. Ativar filtro personalizado Filtro personalizado inválido: %s. - Velocidades personalizadas devem ser menores que %sx. Usando valores padrão. - Velocidade personalizada de reprodução inválida. Usando valores padrão. + Velocidades personalizadas devem ser menores que %sx. + Velocidades de reprodução personalizadas inválidas. Adicionar ou alterar as velocidades de reprodução disponíveis. Editar velocidades de reprodução personalizadas + Para abrir os links de música do YouTube no RVX Music, ative \'Abrir links suportados\' e ative os endereços web suportados. + Abrir configurações padrão do aplicativo Desativa as legendas de serem ativadas automaticamente. Desativar legendas automáticas Desabilita a animação inicial do Cairo quando o aplicativo é iniciado. @@ -86,6 +88,7 @@ Informações: Ativar o modo Calmo em podcasts Altera a cor de fundo do reprodutor para cinza claro para reduzir o cansaço visual. Ativar modo Calmo + Redefinir para os valores padrão. Reinicie para carregar o layout normalmente Atualizar e reiniciar Exportar configurações para um arquivo @@ -316,7 +319,7 @@ Alguns recursos podem não funcionar corretamente no layout antigo do reprodutor O endereço que o SponsorBlock usa para fazer chamadas para o servidor. Não mude isso a menos que você saiba o que está fazendo. Cor alterada. Cor: - Código de cor inválido. Redefinir cor para o padrão. + Código de cor inválido. Redefinir cor. Alterar comportamento do segmento Ativar SponsorBlock diff --git a/src/main/resources/music/translations/ro-rRO/missing_strings.xml b/src/main/resources/music/translations/ro-rRO/missing_strings.xml index d515efc1f..76cfad333 100644 --- a/src/main/resources/music/translations/ro-rRO/missing_strings.xml +++ b/src/main/resources/music/translations/ro-rRO/missing_strings.xml @@ -27,7 +27,9 @@ Tap on the continue button and disable battery optimizations." Select which page the app opens in. Change start page Invalid custom filter: %s. - Invalid custom playback speeds. Using default values. + Invalid custom playback speeds. + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation Disables redirection to the next track when clicking the Dislike button. @@ -54,6 +56,7 @@ Info: Add Trim silence switch Also enables Zen mode for podcasts. Enable Zen mode in podcasts + Reset to default values. Restart to load the layout normally Refresh and restart Export settings to file @@ -240,7 +243,7 @@ Some features may not work properly in the old player layout." The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing. Color changed. Color: - Invalid color code. Color reset to default. + Invalid color code. Color reset. Change segment behavior Enable SponsorBlock diff --git a/src/main/resources/music/translations/ru-rRU/missing_strings.xml b/src/main/resources/music/translations/ru-rRU/missing_strings.xml index acebd7abf..c5ad0c8d9 100644 --- a/src/main/resources/music/translations/ru-rRU/missing_strings.xml +++ b/src/main/resources/music/translations/ru-rRU/missing_strings.xml @@ -1,6 +1,9 @@ Don\'t show again + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings + Reset to default values. Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore diff --git a/src/main/resources/music/translations/ru-rRU/strings.xml b/src/main/resources/music/translations/ru-rRU/strings.xml index da006db05..4d9fe34fa 100644 --- a/src/main/resources/music/translations/ru-rRU/strings.xml +++ b/src/main/resources/music/translations/ru-rRU/strings.xml @@ -16,8 +16,8 @@ GmsCore не установлен. Установите его. Заменяет заблокированный в некоторых регионах домен, чтобы можно было получать миниатюры плейлистов, аватары каналов и т. д. Обойти ограничения изображений по региону - Меняет встроенное диалоговое окно \"Поделиться\" на системное. - Изменить список \"Поделиться\" + Меняет тип диалогового окна \"Поделиться\" из встроенного на системное. + Изменить окно \"Поделиться\" Хит-парады Навигатор Главная diff --git a/src/main/resources/music/translations/tr-rTR/missing_strings.xml b/src/main/resources/music/translations/tr-rTR/missing_strings.xml index b778a884c..341b53c4e 100644 --- a/src/main/resources/music/translations/tr-rTR/missing_strings.xml +++ b/src/main/resources/music/translations/tr-rTR/missing_strings.xml @@ -3,8 +3,11 @@ Don\'t show again Change from in-app share sheet to system share sheet. Change share sheet + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation + Reset to default values. Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore Hides the promotion alert banner. diff --git a/src/main/resources/music/translations/uk-rUA/strings.xml b/src/main/resources/music/translations/uk-rUA/strings.xml index 4dedd6855..9a5eb470a 100644 --- a/src/main/resources/music/translations/uk-rUA/strings.xml +++ b/src/main/resources/music/translations/uk-rUA/strings.xml @@ -16,7 +16,7 @@ GmsCore не встановлено. Встановіть. Замінює домен для зображень, заблокований у деяких регіонах, що дозволить отримувати мініатюри списків відтворення, аватари каналів тощо. Змінити домен зображень - Змінює тип вікна діалогу поширення з вбудованого до системного. + Змінює тип вікна діалогу поширення з вбудованого на системний. Змінити діалог поширення Хіт-паради Навігація @@ -30,10 +30,12 @@ Вмикає користувацькі фільтри для приховування компонентів інтерфейсу. Увімкнути користувацький фільтр Недопустимий користувацький фільтр: %s. - Користувацькі швидкості мають бути меншими за %sx. Швидкості скинуто до стандартних значень. - Неправильні користувацькі швидкості відтворення. Використовуються типові значення. + Користувацькі швидкості мають бути меншими за %sx. + Неправильні користувацькі швидкості відтворення. Налаштувати доступні швидкості відтворення. Редагувати користувацькі швидкості відтворення + Щоб відкривати посилання на YouTube Music у RVX Music, увімкніть \"Відкривати підтримувані посилання\" та активуйте підтримувані веб-адреси. + Відкрити налаштування за замовчуванням Вимикає автоматичне ввімкнення субтитрів. Вимкнути примусові авто субтитри Вимикає сплеш анімацію Каїр під час запуску застосунку. @@ -86,6 +88,7 @@ Увімкнути режим \"Дзен\" у подкастах Змінює колір фона плеєра на світло-сірий, щоб зменшити навантаження на очі. Увімкнути режим \"Дзен\" + Скинуто до значень за замовчуванням. Перезапустіть, щоб нормально завантажився макет Оновити та перезавантажити? Експорт налаштувань у файл @@ -316,7 +319,7 @@ Адреса, яку SponsorBlock використовує для звернень до сервера. Не змінюйте це, якщо не знаєте, що робите. Колір змінено. Колір: - Недійсний код кольору. Колір скинуто до стандартного. + Недійсний код кольору. Колір скинуто. Змінити поведінку сегмента Увімкнути SponsorBlock diff --git a/src/main/resources/music/translations/vi-rVN/strings.xml b/src/main/resources/music/translations/vi-rVN/strings.xml index b7519c842..6a8e18329 100644 --- a/src/main/resources/music/translations/vi-rVN/strings.xml +++ b/src/main/resources/music/translations/vi-rVN/strings.xml @@ -28,10 +28,12 @@ Làm theo hướng dẫn 'Don't kill my app!' cho thiết bị của bạn và Ẩn các thành phần không mong muốn bằng bộ lọc tuỳ chỉnh. Bộ lọc tuỳ chỉnh Bộ lọc tuỳ chỉnh không hợp lệ: %s. - Tốc độ phát tuỳ chỉnh không hợp lệ. Đã đặt lại tốc độ phát về mặc định. - Tốc độ phát tùy chỉnh không hợp lệ. Đã khôi phục lại các giá trị mặc định. + Tốc độ phát tuỳ chỉnh phải nhỏ hơn %sx. + Tốc độ phát tùy chỉnh không hợp lệ. Thêm giá trị tốc độ phát mà bạn muốn thay đổi hoặc chỉnh sửa các giá trị tốc độ phát hiện có. Chỉnh sửa tốc độ phát + Để mở liên kết YouTube Music trong RVX Music, hãy bật \'Mở liên kết được hỗ trợ\' và kích hoạt các địa chỉ web được hỗ trợ. + Mở theo mặc định Tắt tự động hiển thị phụ đề khi phát video nhạc có phụ đề. Tắt tự động hiển thị phụ đề Vô hiệu hóa hoạt ảnh Cairo khi ứng dụng khởi chạy. @@ -66,20 +68,25 @@ Hạn chế: Thêm nút tiếp theo vào trình phát thu nhỏ Thêm nút bài hát trước đó vào trình phát thu nhỏ. Thêm nút phát trước đó vào trình phát thu nhỏ - "Áp dụng codec âm thanh Opus thay vì MP4A." - Codec Opus + "Áp dụng bộ giải mã OPUS nếu phản hồi của trình phát bao gồm nó. + +Cụ thể: +• Ứng dụng YouTube Music mới nhất đặt mặc định là bộ giải mãi OPUS. +• Điều này chỉ áp dụng cho người dùng giả mạo với các phiên bản ứng dụng rất cũ." + Bộ giải mã OPUS Bật thao tác vuốt xuống để loại bỏ trình phát thu nhỏ. Bật thao tác vuốt để loại bỏ trình phát thu nhỏ - "Thêm nút Bật/Tắt Cắt bỏ khoảng im lặng vào tuỳ chọn tốc độ phát. + "Thêm tính năng Cắt bỏ khoảng lặng vào mục tuỳ chọn tốc độ phát. Cụ thể: - • Tính năng dành cho podcast. - • Tính năng vẫn đang được phát triển nên có thể chưa ổn định." - Bật/Tắt Cắt bỏ khoảng im lặng + • Tính năng này dành cho podcast. + • Tính năng này vẫn đang được phát triển nên có thể chưa ổn định." + Cắt bỏ khoảng lặng Đồng thời bật chế độ tập trung cho podcast. Bật Chế độ tập trung trong podcasts Thay đổi nền của trình phát thành màu xám nhạt để giúp bạn giảm mỏi mắt và tập trung hơn. Chế độ tập trung + Đặt lại về giá trị mặc định. Vui lòng khởi động lại ứng dụng để các tính năng hoạt động bình thường Làm mới và khởi động lại Xuất cài đặt dưới dạng tệp @@ -222,14 +229,14 @@ Nếu tính năng này tắt, quảng cáo toàn màn hình sẽ bị chặn (c Ẩn thẻ Đoạn nhạc trong bảng feed. Ẩn thẻ Đoạn nhạc Danh sách tên menu Cài đặt cần lọc, cách nhau từng dòng một. - Cài đặt bộ lọc menu - "Ẩn các thành phần của menu Cài đặt. -Khi bật không chỉ ẩn menu Cài đặt YT Music, mà cả menu Cài đặt ReVanced Extended." - Ẩn menu cài đặt + Cài đặt bộ lọc + "Ẩn các thành phần của mục Cài đặt. +Khi bật không những ẩn mục Cài đặt YT Music, mà còn ẩn mục Cài đặt ReVanced Extended." + Ẩn mục cài đặt Ẩn nút tìm kiếm âm thanh trên thanh tìm kiếm. Ẩn nút tìm kiếm âm thanh Ẩn nút \'Chạm để nâng cấp\'. - Ẩn nút \'Chạm để nâng cấp\' + Ẩn nút Nhấn để cập nhật Ẩn các mục Chính sách quyền riêng tư và Điều khoản dịch vụ khỏi trình đơn Tài khoản. Ẩn mục Bảo mật và Điều khoản Ẩn nút tìm kiếm bằng giọng nói trên thanh tìm kiếm. @@ -310,7 +317,7 @@ Khi bật không chỉ ẩn menu Cài đặt YT Music, mà cả menu Cài đặt Địa chỉ Url của Api SponsorBlock được dùng để thực hiện các kết nối đến máy chủ. Không thay đổi địa chỉ này trừ khi bạn biết mình đang làm gì. Đã thay đổi màu phân đoạn. Màu: - Mã màu không hợp lệ. Đã đặt lại màu về mặc định. + Mã màu không hợp lệ. Đã đặt lại màu phân đoạn về mặc định. Thay đổi hành vi của phân đoạn Kích hoạt SponsorBlock diff --git a/src/main/resources/music/translations/zh-rCN/missing_strings.xml b/src/main/resources/music/translations/zh-rCN/missing_strings.xml index 7c2f73738..d285408c1 100644 --- a/src/main/resources/music/translations/zh-rCN/missing_strings.xml +++ b/src/main/resources/music/translations/zh-rCN/missing_strings.xml @@ -19,7 +19,9 @@ Tap on the continue button and disable battery optimizations." Bypass image region restrictions Change from in-app share sheet to system share sheet. Change share sheet - Invalid custom playback speeds. Using default values. + Invalid custom playback speeds. + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation Disable swipe to change tracks in the miniplayer. @@ -28,6 +30,7 @@ Tap on the continue button and disable battery optimizations." Disable player gesture Includes the buffer in the debug log. Enable debug buffer logging + Reset to default values. Reset Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore @@ -74,7 +77,7 @@ Some features may not work properly in the old player layout." The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing. Color changed. Color: - Invalid color code. Color reset to default. + Invalid color code. Color reset. Change segment behavior Enable SponsorBlock diff --git a/src/main/resources/music/translations/zh-rTW/missing_strings.xml b/src/main/resources/music/translations/zh-rTW/missing_strings.xml index 71dc3df5b..5a5fb5e0b 100644 --- a/src/main/resources/music/translations/zh-rTW/missing_strings.xml +++ b/src/main/resources/music/translations/zh-rTW/missing_strings.xml @@ -19,6 +19,8 @@ Tap on the continue button and disable battery optimizations." Bypass image region restrictions Change from in-app share sheet to system share sheet. Change share sheet + To open YouTube Music links in RVX Music, enable \'Open supported links\' and enable the supported web addresses. + Open default app settings Disables Cairo splash animation when the app starts up. Disable Cairo splash animation Disable swipe to change tracks in the miniplayer. @@ -27,6 +29,7 @@ Tap on the continue button and disable battery optimizations." Disable player gesture Includes the buffer in the debug log. Enable debug buffer logging + Reset to default values. Reset Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore @@ -54,7 +57,7 @@ This hides not only the YT Music settings menu, but also the ReVanced Extended s Data is provided by the SponsorBlock API. Tap here to learn more and see downloads for other platforms. Color changed. Color: - Invalid color code. Color reset to default. + Invalid color code. Color reset. Reset color Skip automatically diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index e9a0f8aa6..1dcfe77d8 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -23,6 +23,7 @@ If enabled, video URLs will be sent to the API server and no other data is sent. Tap here to learn more about DeArrow." DeArrow + Invalid DeArrow API URL. The URL of the DeArrow thumbnail cache endpoint. DeArrow API endpoint Toast is not shown if DeArrow is unavailable. @@ -85,15 +86,18 @@ Tap here to learn more about DeArrow." Live Movies Music - Playables Search Shorts Sports Subscriptions Trending Watch later - Invalid start page, resetting to default. Change start page + Start page changes only once. + "Start page always changes. + +Limitation: Back button on the toolbar may not work." + Change start page type Generic header is enabled. Premium header is enabled. Change YouTube header @@ -106,11 +110,11 @@ Tap here to learn more about DeArrow." Old style flyout menu is used. Custom dialog is used. Custom playback speed menu type - Custom speeds must be less than %sx. Using default values. - Invalid custom playback speeds. Using default values. + Custom speeds must be less than %sx. + Invalid custom playback speeds. Add or change available playback speeds. Edit custom playback speeds - Player overlay opacity must be between 0-100. Reset to default values. + Player overlay opacity must be between 0-100. Opacity value between 0-100, where 0 is transparent. Custom player overlay opacity Type the hex code of the seekbar color. @@ -190,6 +194,9 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Rolling numbers are animated. Rolling numbers are not animated. Disable Rolling number animations + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation "Disable '2x>>' while holding down. Note: @@ -209,7 +216,7 @@ Note: • Maximum resolution is 1080p. • Video playback will use more internet data than VP9. -• To get HDR playback, HDR video still uses the VP9 codec." +• VP9 codec is still used for HDR video." Disable VP9 codec Cairo seekbar is disabled. "Cairo seekbar is enabled. @@ -308,6 +315,7 @@ The Expand video description option may not work if the entered string does not Video descriptions are expanded automatically. Expand video descriptions Do you wish to proceed? + Reset to default values. Restart to load the layout normally Refresh and restart Failed to export settings. @@ -581,6 +589,9 @@ Words with uppercase letters in the middle must be entered with the casing (ie: Movies shelves are shown. Movies shelves are hidden. Hide movies shelves + Navigation bar is shown. + Navigation bar is hidden. + Hide navigation bar Create button is shown. Create button is hidden. Hide Create button @@ -742,6 +753,12 @@ Words with uppercase letters in the middle must be entered with the casing (ie: More videos section in the quick actions container and the related video overlay are shown. More videos section in the quick actions container and the related video overlay are hidden. Hide related video overlay + Related videos are shown. + Related videos are hidden. + Hide related videos + "This setting limits the maximum number of layouts that can be loaded on the player screen. + +If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." Remix button is shown. Remix button is hidden. Hide Remix button @@ -806,6 +823,9 @@ Captions" Video link label is shown. Video link label is hidden. Hide full video link label + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button Info panels are shown. Info panels are hidden. Hide info panels @@ -839,9 +859,9 @@ Captions" Remix button is shown. Remix button is hidden. Hide Remix button - Save sound to playlist button is shown. - Save sound to playlist button is hidden. - Hide save sound to playlist button + Save music button is shown. + Save music button is hidden. + Hide Save music button Search suggestions button is shown. Search suggestions button is hidden. Hide search suggestions button @@ -876,6 +896,9 @@ Side effect: Official headers in search results will be hidden." Metadata label is shown. Metadata label is hidden. Hide sound metadata label + Stickers are shown. + Stickers are hidden. + Hide stickers Subscribe button is shown. Subscribe button is hidden. Hide Subscribe button @@ -951,15 +974,13 @@ Settings → Autoplay → Autoplay next video" Transcript section is shown. Transcript section is hidden. Hide Transcript section + "Hide videos with UPCOMING label. + +Note: Enabling this also hides the Notify me button." + Hide UPCOMING video Video ads are shown. Video ads are hidden. Hide video ads - Videos with durations longer than this number will be hidden. - Longer than duration - Videos with durations shorter than this number will be hidden. - Shorter than duration - Hide videos with shorter than or longer than duration.\n\nKnown issue: It will not hide videos in the player related videos, instead it will hide the timestamp. - Hide videos based on duration "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: @@ -1037,7 +1058,7 @@ Limitations: Subtexts are shown. Subtexts are hidden. Hide subtexts - Miniplayer overlay opacity must be between 0-100. Reset to default values. + Miniplayer overlay opacity must be between 0-100. Opacity value between 0-100, where 0 is transparent. Overlay opacity Original @@ -1078,13 +1099,18 @@ Tap and hold to open whitelist setting dialog. Native video download button opens the native in-app downloader. Native video download button opens your external downloader. Override video download button + YouTube Music is required to override button action. Tap here to download YouTube Music. + Prerequisite + YouTube Music button opens the native app. + YouTube Music button opens the RVX Music. + Override YouTube Music button Excluded Included Normal Action buttons Additional settings Animation / Feedback - Duration filter + Download button Experimental Flags Image region restrictions Import / Export as file @@ -1096,6 +1122,7 @@ Tap and hold to open whitelist setting dialog. Quick actions Recommended video Shorts shelves + Suggested actions Tool used View count filter Hide or show elements in account menu and You tab. @@ -1126,13 +1153,15 @@ Tap and hold to open whitelist setting dialog. General Disable or enable haptic feedback. Haptic feedback + Overrides the click action of in-app buttons. + Hook buttons Import or export settings. Import / Export settings Change the style of the in app minimized player. Miniplayer Miscellaneous - Hide or show navigation bar section components. - Navigation buttons + Hide or show navigation bar section components. + Navigation bar Information about applied patches. Patch information Hide or show buttons in the video player. @@ -1161,13 +1190,14 @@ Tap and hold to open whitelist setting dialog. Video Change settings related with watch history. Watch history - Quick actions top margin must be between 0-32. Reset to default values. + Quick actions top margin must be between 0-32. Configure the spacing from the seekbar to the quick action container, between 0-32. Quick actions top margin "Forcefully rejects the software AV1 codec response. A different codec will be applied after about 20 seconds of buffering." Reject software AV1 codec response Fallback process causes about 20 seconds of buffering. + Offset Playback speed changes only apply to the current video. Playback speed changes apply to all videos. Remember playback speed changes @@ -1432,9 +1462,12 @@ Limitation: Dislikes may not appear if the user is not logged in or in incognito Heart (Tint) Hidden Double-tap animation - Meta panel bottom margin must be between 0-64. Reset to default values. + Meta panel bottom margin must be between 0-64. Configure the spacing from the seekbar to the meta panel, between 0-64. Meta panel bottom margin + Height percentage must be between 0-100 (%). + Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). + Height percentage of empty space Press and hold the timestamp to change the Shorts repeat status. Timestamp long press action "Shows the video title section in fullscreen. @@ -1455,7 +1488,7 @@ Info: Show a toast when skipping Turning on this setting may cause video playback issues. Skipped preloaded buffer. - Speed overlay value must be between 0-8.0. Reset to default values. + Speed overlay value must be between 0-8.0. Speed overlay value between 0-8.0. Speed overlay value "Spoofing the client version to the old version. @@ -1489,10 +1522,14 @@ High quality may be unlocked on some videos that require high device dimensions, "Enabling this might improve battery life and fix playback stuttering. AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - • Audio track menu is missing. - • Audio track menu is missing. + "• Audio track menu is missing. +• Stable volume is not available." + "• Audio track menu is missing. +• Stable volume is not available." "• Movies or paid videos may not play. -• Livestreams start from the beginning." +• Livestreams start from the beginning. +• Videos may end 1 second early. +• No opus audio codec." Spoofing side effects • Video may not play. Client used to fetch streaming data is hidden in Stats for nerds. @@ -1515,7 +1552,7 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more Swipe magnitude threshold The visibility of swipe overlay background. Swipe background visibility - Swipeable area size cannot be more than 50. Reset to default value. + Swipeable area size cannot be more than 50. Percentage of swipeable screen area.\n\nNote: This will also change the size of the screen area for the double-tap-to-seek gesture. Swipe overlay screen size The text size for swipe overlay. @@ -1538,6 +1575,10 @@ Also, ads will no longer be blocked in Shorts. If this setting do not take effect, try switching to Incognito mode." Stock + RVX Music + %s is not installed. Please install it. + Package name of installed RVX Music. + RVX Music package name • Watch history is blocked. "• Follows the watch history settings of Google account. • Watch history may not work due to DNS or VPN." diff --git a/src/main/resources/youtube/translations/ar/missing_strings.xml b/src/main/resources/youtube/translations/ar/missing_strings.xml index 26b7e32ef..43ef1657d 100644 --- a/src/main/resources/youtube/translations/ar/missing_strings.xml +++ b/src/main/resources/youtube/translations/ar/missing_strings.xml @@ -2,33 +2,21 @@ Don\'t show again Courses / Learning - Playables Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black Vanced Light Xisr Yellow + Offset Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment diff --git a/src/main/resources/youtube/translations/ar/strings.xml b/src/main/resources/youtube/translations/ar/strings.xml index fb7d3b3bc..95c66b772 100644 --- a/src/main/resources/youtube/translations/ar/strings.xml +++ b/src/main/resources/youtube/translations/ar/strings.xml @@ -22,6 +22,7 @@ انقر هنا لمعرفة المزيد عن DeArrow." DeArrow + URL الخاص بـ DeArrow API غير صالح. The URL of The DeArrow Thumbnail Cache Endpoint. DeArrow API Endpoint لا يتم عرض ملاحظة إذا كان DeArrow غير متوفر. @@ -89,8 +90,12 @@ الاشتراكات المحتوى الرائج المشاهدة لاحقًا - صفحة البداية غير صالحة، تتم إعادة التعيين إلى الوضع الافتراضي. تغيير صفحة البداية + تتغير صفحة البدء مرة واحدة فقط. + "تتغير صفحة البدء دائمًا. + +التقييد: قد لا يعمل زر الرجوع الذي على شريط الأدوات." + تغيير نوع صفحة البداية تم تمكين العلامة العامة. تم تمكين علامة Premium. تغيير علامة YouTube @@ -103,11 +108,11 @@ يتم استخدام القائمة المنبثقة بالمظهر القديم. يتم استخدام مربع الحوار المخصص. نوع قائمة سرعة التشغيل المخصصة - يجب أن تكون السرعات المخصصة أقل من %sx. باستخدام القيم الافتراضية. - سرعات التشغيل المخصصة غير صالحة. باستخدام القيم الافتراضية. + يجب أن تكون السرعات المخصصة أقل من %sx. + سرعات التشغيل المخصصة غير صالحة. إضافة أو تغيير سرعات التشغيل المتاحة. تعديل سرعة التشغيل المخصصة - يجب أن تكون شفافية واجهة المشغل بين 0-100. إعادة التعيين إلى القيم الافتراضية. + يجب أن تكون شفافية واجهة المشغل بين 0-100. قيمة التعتيم بين 0-100، حيث 0 شفافة. شفافية واجهة المشغل المخصصة اكتب رمز اللون للون شريط تقدم الفيديو. @@ -187,6 +192,9 @@ عدد المشاهدات والإعجابات متحركة. عدد المشاهدات والإعجابات غير متحركة. تعطيل عدد المشاهدات والإعجابات في الوقت الفعلي + تم تمكين الرسوم المتحركة الفوّارة فوق زر أعجبني. + تم تعطيل الرسوم المتحركة الفوّارة فوق زر أعجبني. + تعطيل الرسوم المتحركة لزر أعجبني "تعطيل '2x>>' أثناء الضغط باستمرار. ملحوظة: @@ -206,7 +214,7 @@ • الحد الأقصى للدقة هو 1080P. • سيستهلك تشغيل الفيديو بيانات إنترنت أكثر من VP9. -• للحصول على تشغيل HDR، لا يزال فيديو HDR يستخدم برنامج ترميز VP9." +• لا يزال برنامج ترميز VP9 مستخدمًا لفيديو HDR." تعطيل ترميز VP9 تم تعطيل شريط تقدم Cairo. "تم تمكين شريط تقدم Cairo. @@ -305,6 +313,7 @@ يتم توسيع أوصاف الفيديو تلقائيًا. توسيع وصف الفيديو هل ترغب في المتابعة؟ + إعادة التعيين إلى القيم الافتراضية. إعادة التشغيل لتحميل التخطيط بشكل طبيعي تحديث وإعادة تشغيل فشل تصدير الإعدادات. @@ -574,6 +583,9 @@ يتم عرض رفوف الأفلام. تم إخفاء رفوف الأفلام. إخفاء رفوف الأفلام + يتم عرض شريط التنقل. + تم إخفاء شريط التنقل. + إخفاء شريط التنقل يتم عرض زر الإنشاء. تم إخفاء زر الإنشاء. إخفاء زر الإنشاء @@ -735,6 +747,12 @@ يتم عرض قسم المزيد من مقاطع الفيديو في حاوية الإجراءات السريعة وواجهة الفيديو ذي الصلة. تم إخفاء قسم المزيد من مقاطع الفيديو في حاوية الإجراءات السريعة وواجهة الفيديو ذي الصلة. إخفاء تراكب الفيديو ذي الصلة + يتم عرض الفيديوهات ذات الصلة. + تم إخفاء الفيديوهات ذات الصلة. + إخفاء الفيديوهات ذات الصلة + "يحد هذا الإعداد من الحد الأقصى لعدد التخطيطات التي يمكن تحميلها على شاشة المشغل. + +إذا تغير تخطيط شاشة المشغل بسبب تغييرات على جانب الخادم، فقد يتم إخفاء التخطيطات غير المقصودة على شاشة المشغل." يتم عرض زر ريمكس. تم إخفاء زر ريمكس. إخفاء زر ريمكس @@ -799,6 +817,9 @@ يتم عرض تسمية رابط الفيديو. تم إخفاء تسمية رابط الفيديو. إخفاء تسمية رابط الفيديو الكامل + يتم عرض زر الشاشة الخضراء. + تم إخفاء زر الشاشة الخضراء. + إخفاء زر الشاشة الأخضر يتم عرض لوحات المعلومات. تم إخفاء لوحات المعلومات. إخفاء لوحات المعلومات @@ -832,9 +853,9 @@ يتم عرض زر ريمكس. تم إخفاء زر ريمكس. إخفاء زر ريمكس - يتم عرض زر حفظ الصوت في قائمة التشغيل. - تم إخفاء زر حفظ الصوت في قائمة التشغيل. - إخفاء زر حفظ الصوت إلى قائمة التشغيل + يتم عرض زر حفظ الموسيقى. + تم إخفاء زر حفظ الموسيقى. + إخفاء زر حفظ الموسيقى يتم عرض زر اقتراحات البحث. تم إخفاء زر اقتراحات البحث. إخفاء زر اقتراحات البحث @@ -869,6 +890,9 @@ يتم عرض تسمية البيانات الوصفية. تم إخفاء تسمية البيانات الوصفية. إخفاء تسمية بيانات التعريف الصوتية + يتم عرض الملصقات. + تم إخفاء الملصقات. + إخفاء الملصقات يتم عرض زر اشتراك. تم إخفاء زر اشتراك. إخفاء زر اشتراك @@ -944,15 +968,29 @@ يتم عرض قسم النص. تم إخفاء قسم النص. إخفاء قسم النص + "إخفاء الفيديوهات التي تحمل علامة \"قادم\". + +ملاحظة: يؤدي تمكين هذا أيضًا إلى إخفاء زر \"تنبيهي\"." + إخفاء الفيديو القادم يتم عرض إعلانات الفيديو. تم إخفاء إعلانات الفيديو. إخفاء إعلانات الفيديو - سيتم إخفاء الفيديوهات التي تزيد مدتها عن هذا الرقم. - الأطول من المـدة - سيتم إخفاء الفيديوهات التي تقل مدتها عن هذا الرقم. - الأقصر من المـدة - إخفاء مقاطع الفيديو التي تقل مدتها عن المدة أو أطول منها.\n\nمشكلة معروفة: لن يؤدي ذلك إلى إخفاء مقاطع الفيديو في مقاطع الفيديو ذات الصلة بالمشغل، بل سيخفي الطابع الزمني بدلاً من ذلك. - إخفاء الفيديوهات بناءً على المـدة + "الصفحة الرئيسية / الاشتراكات / تتم تصفية نتائج البحث لإخفاء مقاطع الفيديو التي حصلت على عدد مشاهدات أقل أو أكبر من عدد محدد. + +القيود: + +• لا يمكن إخفاء فيديوهات Shorts. +• لا تتم تصفية الفيديوهات التي حصلت على 0 مشاهدة." + حول تصفية عدد المشاهدات + لا يتم تصفية الفيديوهات في موجز الصفحة الرئيسية. + يتم تصفية الفيديوهات في موجز الصفحة الرئيسية. + إخفاء فيديوهات الصفحة الرئيسية حسب عدد المشاهدات + لا يتم تصفية نتائج البحث. + يتم تصفية نتائج البحث. + إخفاء نتائج البحث حسب عدد المشاهدات + لا يتم تصفية الفيديوهات في موجز الاشتراكات. + يتم تصفية الفيديوهات في موجز الاشتراكات. + إخفاء فيديوهات الاشتراكات حسب عدد المشاهدات إخفاء الفيديوهات الموصى بها التي حصلت على عدد أقل من عدد معين من المشاهدات.\n\nمشكلة معروفة: لا يتم تصفية الفيديوهات التي حصلت على 0 مشاهدة. إخفاء الفيديوهات الموصى بها عن طريق المشاهدات سيتم إخفاء الفيديوهات التي تزيد مشاهداتها عن هذا الرقم. @@ -1005,7 +1043,7 @@ يتم عرض النصوص الفرعية. تم إخفاء النصوص الفرعية. إخفاء النصوص الفرعية - يجب أن تكون نسبة شفافية واجهة المشغل المصغر بين 0-100. إعادة التعيين إلى القيم الافتراضية. + يجب أن تكون نسبة شفافية واجهة المشغل المصغر بين 0-100. قيمة الشفافية بين 0-100، حيث يكون 0 شفاف. شفافية الواجهة الأصلي @@ -1046,13 +1084,18 @@ يفتح زر تنزيل الفيديو أداة التنزيل الأصلية داخل التطبيق. يفتح زر تنزيل الفيديو الأصلي أداة التنزيل الخارجية. تجاوز زر تنزيل الفيديو + موسيقى YouTube مطلوبًا لتجاوز إجراء الزر. انقر هنا لتنزيل موسيقى YouTube. + متطلب أساسي + زر موسيقى YouTube يفتح التطبيق الأصلي. + زر موسيقى YouTube يفتح موسيقى RVX. + تجاوز زر موسيقى YouTube مستبعد مضمن عادي أزرار الإجراء إعدادات إضافية تأثير الحركة / رد الفعل - فلترة المـدة + زر التنزيل تعديلات تجريبية قيود منطقة الصورة استيراد / تصدير كملف @@ -1064,6 +1107,7 @@ الإجراءات السريعة الفيديو الموصى به رفوف Shorts + الإجراءات المقترحة الأداة المستخدمة تصفية عدد المشاهدات إخفاء أو عرض العناصر في قائمة الحساب وعلامة التبويب أنت. @@ -1094,13 +1138,15 @@ عام تعطيل أو تمكين الاهتزاز. ردود الفعل اللمسية + يتجاوز إجراء النقر على الأزرار الموجودة داخل التطبيق. + أزرار الإرتباط إستيراد أو تصدير الإعدادات. استيراد / تصدير الإعدادات تغيير نمط المشغل المصغر داخل التطبيق. المشغل المصغر خيارات متنوعة - إخفاء أو عرض مكونات قسم شريط التنقل. - أزرار التنقل + إخفاء أو عرض مكونات قسم شريط التنقل. + شريط التنقل معلومات عن التعديلات المطبقة. معلومات التعديل إخفاء أو عرض الأزرار في مشغل الفيديو. @@ -1129,7 +1175,7 @@ الفيديو تغيير الإعدادات المتعلقة بسجل المشاهدة. سجل المشاهدة - يجب أن يكون الهامش العلوي للإجراءات السريعة بين 0-32. إعادة التعيين إلى القيم الافتراضية. + يجب أن يكون الهامش العلوي للإجراءات السريعة بين 0-32. تكوين التباعد من شريط التقدم إلى حاوية الإجراء السريع، بين 0-32. هامش إجراءات سريعة أعلى "يرفض قسرًا استجابة برنامج ترميز AV1. @@ -1247,7 +1293,7 @@ تظهر الملاحظة عند تخطي مقطع تلقائيًا. اضغط هنا لمشاهدة مثال. عرض مدة الفيديو بدون المقاطع يتم عرض مدة الفيديو كاملةً. - يعرض طول الفيديو ناقصًا منه طول المقطع المدمج بين قوسين بجوار طول الفيديو الكامل. + يعرض مدة الفيديو ناقصًا منها مدة المقطع المدمج بين قوسين بجوار مدة الفيديو الكامل. معرف المستخدم User ID الفريد الخاص بك يجب أن يكون معرف المستخدم الخاص 30 حرفًا على الأقل. يجب أن يبقى هذا خاصًا. انه مثل كلمة المرور ولا ينبغي مشاركته مع أي شخص. إذا كان شخص ما يملك هذا، فيمكنه انتحال شخصيتك. @@ -1393,9 +1439,12 @@ قلب(ملون) مخفي تأثير الحركة عند النقر المزدوج - يجب أن يكون الهامش السفلي للوحة التعريف بين 0-64. إعادة التعيين إلى القيم الافتراضية. + يجب أن يكون الهامش السفلي للوحة التعريف بين 0-64. تكوين التباعد من شريط التقدم إلى لوحة التعريف، بين 0-64. الهامش السفلي للوحة التعريف + يجب أن تكون نسبة الارتفاع بين 0-100 (%). + يقوم بتكوين نسبة ارتفاع المساحة الفارغة المتبقية عند إخفاء شريط التنقل، بين 0 و100 (%). + نسبة ارتفاع المساحة الفارغة اضغط مع الاستمرار على الطابع الزمني لتغيير حالة تكرار فيديوهات Shorts. إجراء الضغط المطول على الوقت "يعرض قسم عنوان الفيديو في وضع ملء الشاشة. @@ -1415,7 +1464,7 @@ عرض ملاحظة عند التخطي تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو. تم تخطي التخزين المؤقت الذي تم تحميله مسبقًا. - يجب أن تكون قيمة تراكب السرعة بين 0-8.0. إعادة التعيين إلى القيم الافتراضية. + يجب أن تكون قيمة تراكب السرعة بين 0-8.0. قيمة تراكب السرعة بين 0-8.0. قيمة تراكب السرعة "خداع نسخة التطبيق الحالية إلى النسخة القديمة. @@ -1449,10 +1498,14 @@ "قد يؤدي تمكين هذا إلى تحسين عمر البطارية وإصلاح مشكلة تقطيع التشغيل. يتمتع تنسيق AVC (H.264) بدقة قصوى تبلغ 1080P، وسيستخدم تشغيل الفيديو بيانات إنترنت اكثر من VP9 أو AV1." - • قائمة المقطع الصوتي مفقودة. - • قائمة المقطع الصوتي مفقودة. + "• قائمة المقطع الصوتي مفقودة. +• مستوى الصوت الثابت غير متوفر." + "• قائمة المقطع الصوتي مفقودة. +• مستوى الصوت الثابت غير متوفر." "• قد لا يتم تشغيل الأفلام أو الفيديوهات المدفوعة. -• يبدأ البث المباشر من البداية." +• يبدأ البث المباشر من البداية. +• قد تنتهي الفيديوهات قبل النهاية بثانية واحدة. +• لا يوجد ترميز الصوت Opus." التأثيرات الجانبية للتزييف • قد لا يتم تشغيل الفيديو. تم إخفاء العميل المستخدم لجلب بيانات البث في إحصاءات تقنية. @@ -1479,7 +1532,7 @@ الافتراضي:127 شفافية خلفية واجهة إيماءة التمرير - لا يمكن أن يزيد حجم المنطقة القابلة للتمرير السريع عن 50. إعادة التعيين إلى القيمة الافتراضية. + لا يمكن أن يزيد حجم المنطقة القابلة للتمرير السريع عن 50. النسبة المئوية لمساحة الشاشة القابلة للتمرير السريع.\n\nملاحظة: سيؤدي هذا أيضًا إلى تغيير حجم مساحة الشاشة لإيماءة النقر المزدوج للتقديم أو التأخير. حجم واجهة إيماءة التمرير حجم النص على واجهة التمرير. @@ -1506,6 +1559,10 @@ إذا لم يتم تفعيل هذا الإعداد، فحاول التبديل إلى وضع التصفح المتخفي." الإفتراضي + موسيقى RVX + %s لم يتم تثبيته. الرجاء تثبيته. + اسم الحزمة لموسيقى RVX المثبتة. + اسم حزمة موسيقى RVX • سجل المشاهدة محظور. "• يتبع إعدادات سجل المشاهدة لحساب Google. • قد لا يعمل سجل المشاهدة بسبب DNS أو VPN." diff --git a/src/main/resources/youtube/translations/bg-rBG/missing_strings.xml b/src/main/resources/youtube/translations/bg-rBG/missing_strings.xml index 32def3c27..2423140b7 100644 --- a/src/main/resources/youtube/translations/bg-rBG/missing_strings.xml +++ b/src/main/resources/youtube/translations/bg-rBG/missing_strings.xml @@ -4,7 +4,6 @@ The domain to fetch images from.\nNote: Only enter the domain name, i.e., without the \"https\:\/\/\" prefix. Alternative domain Courses / Learning - Playables Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. @@ -12,23 +11,11 @@ Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black diff --git a/src/main/resources/youtube/translations/bg-rBG/strings.xml b/src/main/resources/youtube/translations/bg-rBG/strings.xml index 7df3a5aa7..2dacc49ba 100644 --- a/src/main/resources/youtube/translations/bg-rBG/strings.xml +++ b/src/main/resources/youtube/translations/bg-rBG/strings.xml @@ -15,6 +15,7 @@ GmsCore не е инсталиран. Инсталирайте го. "DeArrow предоставя миниатюри на публиката за видеоклипове. Тези миниатюри често са по-подходящи от тези, предоставени от самия YouTube. Ако е активирано, URL адресите на видео ще бъдат изпратени до API сървъра, без да се изпращат други данни. Ако видеоклипът няма миниатюри на DeArrow, ще се покажат или неговите оригинални миниатюри, или заснети кадри. Щракнете, за да научите повече за DeArrow." Относно DeArrow + Невалиден DeArrow API URL. URL адресът на крайната точка за съхранение на миниатюри DeArrow. DeArrow API адрес Не се показва известие, ако DeArrow не е наличен. @@ -80,8 +81,12 @@ Абонаменти Популярни За Гледане по-късно - Невалидна начална страница, нулиране по подразбиране. Промяна на началната страница + Началната страница се променя само веднъж. + "Началната страница винаги се променя. + +Ограничение: Бутонът за връщане назад в лентата с инструменти може да не работи." + Промяна на типа на началната страница Включен стандартен логотип. Включен логотип Premium. Промяна на логото на YouTube @@ -177,6 +182,9 @@ Анимацията на числа в реално време е активирана. Анимацията на числа в реално време е деактивирана. Анимация на числа в реално време + Анимацията на фонтан е активирана над бутона „Харесва ми“. + Анимацията на фонтан е деактивирана над бутона „Харесва ми“. + Деактивиране анимацията на бутона „Харесва ми“ "Деактивирайте „Възпроизвеждане с 2x>> скорост при продължително натискане. Бележки: @@ -292,6 +300,7 @@ Описанието на видеоклипа се отваря автоматично. Автоматично отваряне на видео описание Желаете ли да продължите? + Възстановяване на стандартните стойности. Рестартирайте, за да заредите оформлението нормално Опреснете и рестартирайте Неуспешно експортиране на настройките. @@ -558,6 +567,9 @@ Филмовите рафтове се показват. Филмовите рафтове са скрити. Скриване на филмовите рафтове + Навигационната лента се показва. + Навигационната лента е скрита. + Скриване лентата за навигация Бутона за създаване се показва. Бутонът за създаване е скрит. Бутон Създай клип @@ -722,6 +734,12 @@ Скрит. Скрива раздела с още видеоклипове в бързи действия и свързани видеоклипове. Свързани видеоклипове + Сродните клипове се показват. + Сродните клипове са скрити. + Скриване в сродни видеоклипове + "Тази настройка ограничава максималния брой оформления, които могат да бъдат заредени на екрана на плейъра. + +Ако оформлението на екрана на плейъра се промени поради промени от страна на сървъра, нежеланите оформления може да бъдат скрити на екрана на плейъра." Бутона за ремикс се показва. Бутона за ремикс е скрит. Скриване на бутона за ремикс @@ -783,6 +801,9 @@ Етикетът за видео връзка се показва. Етикетът за видео връзка е скрит. Скриване на етикет за връзка към видеоклипа + Зелен бутон на екрана се показва. + Зелен бутон на екрана е скрит. + Зелен бутон на екрана Информационните панели се показват. Информационните панели са скрити. Скриване на информационните панели @@ -816,9 +837,9 @@ Бутона за ремикс се показва. Бутона за ремикс е скрит. Скриване на бутона за ремикс - Бутонът за Запазване в плейлиста се показва. - Бутонът за Запазване в плейлиста е скрит. - Бутон за запазване на аудиото в плейлиста + Показан е бутонът за запазване на музика. + Бутонът за запазване на музика е скрит. + Скриване на бутона Запазване на музика Бутон „Предложения за търсене“ се показва. Бутон „Предложения за търсене“ е скрит. Бутон „Предложения за търсене“ @@ -853,6 +874,9 @@ Метаданни се показват. Метаданни са скрити. Скриване на музикални метаданни + Стикери са показани. + Стикерите са скрити. + Скриване на стикери Показва се бутонът „Абониране“. Бутонът „Абониране“ е скрит. Скрийте бутона „Абониране“ @@ -928,15 +952,24 @@ Note: Разделът за транскрипция е показан. Разделът за транскрипция е скрит. Скриване на раздела за транскрипция + "Скриване на видеоклипове с етикет ПРЕДСТОЯЩО. + +Забележка: Активирането на това също ще скрие бутона Уведоми ме." + ПРЕДСТОЯЩО видео Видео рекламите се показват. Видео рекламите са скрити. Скриване на видео рекламите - Видеоклиповете с по-голяма продължителност ще бъдат скрити. - Продължителност, по-голяма от посочената - Видеоклиповете с по-малка продължителност ще бъдат скрити. - Ограничение за минимална продължителност - Скрийте видеоклипове, по-кратки или по-дълги от предпочитанията ви.\n\nИзвестен проблем: Не работи с предложени видеоклипове под плейъра, но ще скрие клеймото им за време. - Скриване на видеоклипове въз основа на тяхната продължителност + "Начало / Абонамент / Резултатите от търсенето се филтрират, за да скрият видеоклипове с гледания, по-малки или по-големи от определен брой." + Относно филтрирането на броя показвания + Видеоклиповете в раздела Начало не се филтрират. + Видеоклиповете в раздела Начало се филтрират. + Фильтр за видео в \"Начало\" по гледания + Резултатите от търсенето не се филтрират. + Резултатите от търсенето се филтрират. + Филтриране на резултатите от търсенето + Видеоклиповете в емисията за абонаменти не се филтрират. + Видеоклиповете в емисията за абонаменти се филтрират. + Видеоклипове в раздела Абонаменти по показвания Скрийте видеоклиповете с по-малко или повече гледания от предпочитанията ви.\n\nИзвестен проблем: Видеоклиповете с 0 гледания не са правилно филтрирани. Скриване на видеоклипове въз основа на броя гледания Видеоклиповете с повече гледания от този брой няма да бъдат показани. @@ -1028,13 +1061,18 @@ Note: Бутонът за изтегляне на YouTube отваря собствената програма за изтегляне на приложението. Бутонът за изтегляне от YouTube отваря вашата външна програма за изтегляне. Действие на бутона \"Изтегляне\" за видео + Изисква се YouTube Music, за да замени действието на бутона. Докоснете тук, за да изтеглите YouTube Music. + Изисквания + Бутонът YouTube Music отваря вграденото приложение. + Бутонът YouTube Music отваря RVX Music. + Замяна на бутона YouTube Music Изключване Включване Нормално Бутони за действие Допълнителни настройки Анимация / Обратна връзка - Филтриране по продължителност + Бутон Изтегляне Експериментални настройки Ограничения за областта на изображението Импортиране / Експортиране като файл @@ -1046,6 +1084,7 @@ Note: Бързи действия Препоръчани видеоклипове Shorts рафтове + Предложени действия Ползвани инструменти Филтрирайте по брой гледания Скриване или показване на елементи в менюто на акаунта и раздела Вие. @@ -1076,13 +1115,15 @@ Note: Основни настройки Деактивирайте или активирайте вибрационен отговор за събития. Вибрация при докосване (обратна връзка) + Замяна на действията на бутоните в приложението. + Настройки за действие на бутоните Импортиране / Експортиране на настройките. Импортиране / Експортиране на настройките Променете стила на минимизирания екран за възпроизвеждане. Минимизиран екран за възпроизвеждане Разни - Скриване или показване на елементи от лентата за навигация. - Бутони за навигация + Скриване или показване на елементи от лентата за навигация. + Лента за навигация Информация за приложените корекции. Информация за корекции Скриване или показване на бутони на екрана на видеоплейъра. @@ -1118,6 +1159,7 @@ Note: След приблизително 20 секунди буфериране ще бъде приложен друг кодек." Отхвърлете софтуерния кодек AV1 Буфериране поради софтуерен кодек Av1 (прибл. 20 сек.). + Компенсиране Промените в скоростта на възпроизвеждане се отнасят само за текущия видеоклип. Промените в скоростта на възпроизвеждане се отнасят за всички видеоклипове. Запомнете промените в скоростта на възпроизвеждане @@ -1378,6 +1420,9 @@ Note: Полето в долната част на мета панела трябва да е между 0-64, Нулирайте по подразбиране. Отстъп от лентата за възпроизвеждане към панела „мета“ Диапазон от 0 до 64. Долно поле на \"мета\" панела + Процентът на височината трябва да е между 0-100 (%). + Конфигурира процента на височината на оставащото празно пространство, когато лентата за навигация е скрита, между 0 и 100 (%). + Мярка в проценти на празното пространство Натиснете и задръжте клеймото за време, за да превключите състоянието на повторение на Shorts. Продължително натискане на времето "Показва раздела със заглавието на видеоклипа на цял екран. @@ -1428,8 +1473,8 @@ Note: "Активирането на това може да подобри живота на батерията и да коригира прекъсванията при възпроизвеждане. AVC (H.264) има максимална разделителна способност при 1080p и възпроизвеждането на видео ще използва повече интернет данни от VP9 или AV1." - • Липсва менюто за избор на аудио. - • Липсва менюто за избор на аудио. + "• Липсва менюто за избор на аудио." + "• Липсва менюто за избор на аудио." "• Филми или платени видеоклипове може да не се възпроизвеждат." Ефекти от замяната • Видеото може да не се възпроизведе. @@ -1476,6 +1521,10 @@ AVC (H.264) има максимална разделителна способн Ако деактивирането не влезе в сила, опитайте да превключите към режим „инкогнито“." По подразбиране + RVX Music + %s не е инсталирано. Моля инсталирайте го. + Името на пакета с инсталиран RVX Music. + Име на пакета RVX Music • Хронологията на гледане е блокирана. "• Следва настройките на хронологията на сърфирането в акаунта ви в Google. • Историята на сърфиране може да не работи поради DNS или VPN." diff --git a/src/main/resources/youtube/translations/bn/missing_strings.xml b/src/main/resources/youtube/translations/bn/missing_strings.xml index 50d7e1f33..c8a03773a 100644 --- a/src/main/resources/youtube/translations/bn/missing_strings.xml +++ b/src/main/resources/youtube/translations/bn/missing_strings.xml @@ -1,6 +1,7 @@ Don\'t show again + Invalid DeArrow API URL. Still video captures The domain to fetch images from.\nNote: Only enter the domain name, i.e., without the \"https\:\/\/\" prefix. Alternative domain @@ -16,11 +17,14 @@ Live Movies Music - Playables Sports Watch later - Invalid start page, resetting to default. - Player overlay opacity must be between 0-100. Reset to default values. + Start page changes only once. + "Start page always changes. + +Limitation: Back button on the toolbar may not work." + Change start page type + Player overlay opacity must be between 0-100. Ambient mode is enabled in fullscreen. Ambient mode is disabled in fullscreen. Ambient mode is enabled. @@ -40,12 +44,15 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Like and Dislike buttons will glow when mentioned. Like and Dislike buttons will not glow when mentioned. Disable Like and Dislike button glow + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation VP9 codec is enabled. "VP9 codec is disabled. • Maximum resolution is 1080p. • Video playback will use more internet data than VP9. -• To get HDR playback, HDR video still uses the VP9 codec." +• VP9 codec is still used for HDR video." Disable VP9 codec Cairo seekbar is disabled. "Cairo seekbar is enabled. @@ -71,6 +78,7 @@ Limitations: Navigation bar is translucent. Enable translucent navigation bar Do you wish to proceed? + Reset to default values. Search %s Package name of your installed external downloader app, such as YTDLnis. Playlist downloader package name @@ -117,6 +125,9 @@ Side effect: Community post images may be blocked in fullscreen." Hide live chat replay button Hide videos with less than 1,000 views from home feeds that have been uploaded from unsubscribed channels. Hide low views video + Navigation bar is shown. + Navigation bar is hidden. + Hide navigation bar Ambient mode menu is shown. Ambient mode menu is hidden. Hide Ambient mode menu @@ -129,12 +140,21 @@ Side effect: Community post images may be blocked in fullscreen." Promotion alert banner is shown. Promotion alert banner is hidden. Hide promotion alert banner + Related videos are shown. + Related videos are hidden. + Hide related videos + "This setting limits the maximum number of layouts that can be loaded on the player screen. + +If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." Hide floating button + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button Live chat header is shown.\n\nBack button in header will not be hidden. Live chat header is hidden.\n\nBack button in header will not be hidden. Hide live chat header @@ -147,12 +167,18 @@ Side effect: Community post images may be blocked in fullscreen." Button background is shown. Button background is hidden. Hide Play & Pause button background + Save music button is shown. + Save music button is hidden. + Hide Save music button Search suggestions button is shown. Search suggestions button is hidden. Hide search suggestions button Shopping button is shown. Shopping button is hidden. Hide Shopping button + Stickers are shown. + Stickers are hidden. + Hide stickers Super Thanks button is shown. Super Thanks button is hidden. Hide Super Thanks button @@ -173,6 +199,10 @@ Side effect: Community post images may be blocked in fullscreen." Autoplay can be changed in YouTube settings: Settings → Autoplay → Autoplay next video" + "Hide videos with UPCOMING label. + +Note: Enabling this also hides the Notify me button." + Hide UPCOMING video "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: @@ -195,6 +225,9 @@ Limitations: Afn Red MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black @@ -219,7 +252,7 @@ Limitations: Subtexts are shown. Subtexts are hidden. Hide subtexts - Miniplayer overlay opacity must be between 0-100. Reset to default values. + Miniplayer overlay opacity must be between 0-100. Opacity value between 0-100, where 0 is transparent. Overlay opacity Original @@ -243,15 +276,27 @@ Tap and hold to open whitelist setting dialog. Native video download button opens the native in-app downloader. Native video download button opens your external downloader. Override video download button + YouTube Music is required to override button action. Tap here to download YouTube Music. + Prerequisite + YouTube Music button opens the native app. + YouTube Music button opens the RVX Music. + Override YouTube Music button Animation / Feedback + Download button Image region restrictions + Suggested actions + Overrides the click action of in-app buttons. + Hook buttons Change the style of the in app minimized player. Miniplayer + Hide or show navigation bar section components. + Navigation bar Spoof the streaming data to prevent playback issues. Spoof streaming data Change settings related with watch history. Watch history - Quick actions top margin must be between 0-32. Reset to default values. + Quick actions top margin must be between 0-32. + Offset A toast will not be shown when changing the default playback speed. A toast will be shown when changing the default playback speed. Show a toast @@ -277,15 +322,21 @@ Tap and hold to open whitelist setting dialog. Heart (Tint) Hidden Double-tap animation - Meta panel bottom margin must be between 0-64. Reset to default values. + Meta panel bottom margin must be between 0-64. Configure the spacing from the seekbar to the meta panel, between 0-64. Meta panel bottom margin + Height percentage must be between 0-100 (%). + Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). + Height percentage of empty space Press and hold the timestamp to change the Shorts repeat status. Timestamp long press action Turning on this setting may cause video playback issues. - Speed overlay value must be between 0-8.0. Reset to default values. + Speed overlay value must be between 0-8.0. Version not spoofed Version spoofed + 18.33.40 - Restore old Shorts action bar + 18.38.45 - Restore old default video quality behavior + 18.48.39 - Disables views and likes from being updated in real time "App version will be spoofed to an older version of YouTube. This will change the appearance and features of the app, but unknown side effects may occur. @@ -297,10 +348,14 @@ If later turned off, it is recommended to clear the app data to prevent UI bugs. "Enabling this might improve battery life and fix playback stuttering. AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - • Audio track menu is missing. - • Audio track menu is missing. + "• Audio track menu is missing. +• Stable volume is not available." + "• Audio track menu is missing. +• Stable volume is not available." "• Movies or paid videos may not play. -• Livestreams start from the beginning." +• Livestreams start from the beginning. +• Videos may end 1 second early. +• No opus audio codec." Spoofing side effects • Video may not play. Client used to fetch streaming data is hidden in Stats for nerds. @@ -315,7 +370,7 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more iOS Default client Turning off this setting may cause video playback issues. - Swipeable area size cannot be more than 50. Reset to default value. + Swipeable area size cannot be more than 50. Percentage of swipeable screen area.\n\nNote: This will also change the size of the screen area for the double-tap-to-seek gesture. Swipe overlay screen size Create button is not switched with Notifications button. @@ -327,6 +382,10 @@ Note: Enabling this also forcibly hides video ads." Also, ads will no longer be blocked in Shorts. If this setting do not take effect, try switching to Incognito mode." + RVX Music + %s is not installed. Please install it. + Package name of installed RVX Music. + RVX Music package name • Watch history is blocked. "• Follows the watch history settings of Google account. • Watch history may not work due to DNS or VPN." diff --git a/src/main/resources/youtube/translations/bn/strings.xml b/src/main/resources/youtube/translations/bn/strings.xml index cfe99d49a..493e94fde 100644 --- a/src/main/resources/youtube/translations/bn/strings.xml +++ b/src/main/resources/youtube/translations/bn/strings.xml @@ -691,9 +691,6 @@ Captions" Remix button is shown. Remix button is hidden. Hide remix button - Save sound to playlist is shown. - Save sound to playlist is hidden. - Hide save sound to playlist button Share button is shown. Share button is hidden. Hide share button @@ -780,12 +777,6 @@ Note: Video ads are shown. Video ads are hidden. Hide video ads - Videos with duration longer than this number will be hidden. - Longer than duration - Videos with duration shorter than this number will be hidden. - Shorter than duration - Hide videos with shorter than or longer than duration.\n\nKnown issue: It will not hide videos in the player related videos, instead it will hide the timestamp. - Hide videos based on duration Hide recommended videos with less than a specified number of views. Hide recommended videos by views Videos with views greater than this number will be hidden. @@ -836,7 +827,6 @@ Tap and hold to set playback speed to 1.0x." Normal Action buttons Additional settings - Duration filter Experimental Flags Import / Export as file Import / Export as text @@ -880,8 +870,6 @@ Tap and hold to set playback speed to 1.0x." Import or export settings. Import / Export settings Miscellaneous - Hide or show navigation bar section components. - Navigation buttons Information about applied patches. Patch information Hide or show buttons in videos. @@ -1177,9 +1165,6 @@ Limitation: Video title disappears when clicked." 17.41.37 - Restore old playlist shelf 18.05.40 - Restore old comment input box 18.17.43 - Restore old player flyout panel - 18.33.40 - Restore old shorts action bar - 18.38.45 - Restore old default video quality behavior - "18.48.39 - Disables 'views' and 'likes' from being updated in real time" Spoof app version target Type the spoof app version target. Edit spoof app version diff --git a/src/main/resources/youtube/translations/de-rDE/missing_strings.xml b/src/main/resources/youtube/translations/de-rDE/missing_strings.xml index a3f9550d0..116c3350f 100644 --- a/src/main/resources/youtube/translations/de-rDE/missing_strings.xml +++ b/src/main/resources/youtube/translations/de-rDE/missing_strings.xml @@ -1,11 +1,16 @@ Don\'t show again + Invalid DeArrow API URL. In-app share sheet is used. System share sheet is used. Change share sheet Courses / Learning - Playables + Start page changes only once. + "Start page always changes. + +Limitation: Back button on the toolbar may not work." + Change start page type "Auto switch mix playlists is enabled when autoplay is turned on. Autoplay can be changed in YouTube settings: @@ -18,16 +23,20 @@ Settings → Autoplay → Autoplay next video" Limitation: This setting may not apply to videos that do not include the 'Listen on YouTube Music' banner." Disable playback speed for music + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation VP9 codec is enabled. "VP9 codec is disabled. • Maximum resolution is 1080p. • Video playback will use more internet data than VP9. -• To get HDR playback, HDR video still uses the VP9 codec." +• VP9 codec is still used for HDR video." Disable VP9 codec Do not save and restore brightness when exiting or entering fullscreen. Save and restore brightness when exiting or entering fullscreen. Enable save and restore brightness + Reset to default values. Package name of your installed external downloader app, such as YTDLnis. Playlist downloader package name Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. @@ -47,6 +56,9 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Add quotes to use keyword: %s. Keyword has conflicting declarations: %s. Keyword is too short and requires quotes: %s. + Navigation bar is shown. + Navigation bar is hidden. + Hide navigation bar Ambient mode menu is shown. Ambient mode menu is hidden. Hide Ambient mode menu @@ -56,24 +68,39 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Promotion alert banner is shown. Promotion alert banner is hidden. Hide promotion alert banner + Related videos are shown. + Related videos are hidden. + Hide related videos + "This setting limits the maximum number of layouts that can be loaded on the player screen. + +If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." Hide floating button + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button Location button is shown. Location button is hidden. Hide location button Paused header is shown. Paused header is hidden. Hide paused header + Save music button is shown. + Save music button is hidden. + Hide Save music button Search suggestions button is shown. Search suggestions button is hidden. Hide search suggestions button Shopping button is shown. Shopping button is hidden. Hide Shopping button + Stickers are shown. + Stickers are hidden. + Hide stickers Trends button is shown. Trends button is hidden. Hide Trends button @@ -83,6 +110,10 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Use this sound button is shown. Use this sound button is hidden. Hide Use this sound button + "Hide videos with UPCOMING label. + +Note: Enabling this also hides the Notify me button." + Hide UPCOMING video "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: @@ -100,6 +131,9 @@ Limitations: Hide subscription videos by views MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black @@ -113,10 +147,22 @@ Limitations: Native video download button opens the native in-app downloader. Native video download button opens your external downloader. Override video download button + YouTube Music is required to override button action. Tap here to download YouTube Music. + Prerequisite + YouTube Music button opens the native app. + YouTube Music button opens the RVX Music. + Override YouTube Music button + Download button + Suggested actions + Overrides the click action of in-app buttons. + Hook buttons + Hide or show navigation bar section components. + Navigation bar Spoof the streaming data to prevent playback issues. Spoof streaming data Change settings related with watch history. Watch history + Offset A toast will not be shown when changing the default playback speed. A toast will be shown when changing the default playback speed. Show a toast @@ -132,6 +178,9 @@ Limitations: Publish Created Segment Rewind by Specified Time (Default: 150ms) Tap here to view your segments. + Height percentage must be between 0-100 (%). + Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). + Height percentage of empty space Turning on this setting may cause video playback issues. iOS video codec is AVC (H.264), VP9, or AV1. iOS video codec is AVC (H.264). @@ -139,10 +188,14 @@ Limitations: "Enabling this might improve battery life and fix playback stuttering. AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - • Audio track menu is missing. - • Audio track menu is missing. + "• Audio track menu is missing. +• Stable volume is not available." + "• Audio track menu is missing. +• Stable volume is not available." "• Movies or paid videos may not play. -• Livestreams start from the beginning." +• Livestreams start from the beginning. +• Videos may end 1 second early. +• No opus audio codec." Spoofing side effects • Video may not play. Client used to fetch streaming data is hidden in Stats for nerds. @@ -166,6 +219,10 @@ Note: Enabling this also forcibly hides video ads." Also, ads will no longer be blocked in Shorts. If this setting do not take effect, try switching to Incognito mode." + RVX Music + %s is not installed. Please install it. + Package name of installed RVX Music. + RVX Music package name • Watch history is blocked. "• Follows the watch history settings of Google account. • Watch history may not work due to DNS or VPN." diff --git a/src/main/resources/youtube/translations/de-rDE/strings.xml b/src/main/resources/youtube/translations/de-rDE/strings.xml index d200d5ad9..8f07b9d8e 100644 --- a/src/main/resources/youtube/translations/de-rDE/strings.xml +++ b/src/main/resources/youtube/translations/de-rDE/strings.xml @@ -86,7 +86,6 @@ Tippen Sie hier, um mehr über DeArrow zu erfahren." Abonnements Beliebt Später ansehen - Ungültige Startseite, zurücksetzen auf Standard. Startseite ändern Standard Header wird verwendet. Premium Header wird verwendet. @@ -765,9 +764,6 @@ Untertitel" Remix button is shown. Remix button is hidden. Verstecke Remix Button - Save sound to playlist button is shown. - Save sound to playlist button is hidden. - Hide save sound to playlist button Share button is shown. Share button is hidden. Verstecke \"Teilen\" Schaltfläche @@ -865,12 +861,6 @@ Einstellungen → Autoplay → Nächstes Video automatisch abspielen" Videowerbung wird angezeigt. Videowerbung ist versteckt. Verstecke Videowerbung - Videos mit einer Dauer, die länger als diese Zahl ist, werden ausgeblendet. - Länger als Dauer - Videos mit einer Dauer, die länger als diese Zahl ist, werden ausgeblendet. - Kürzer als Dauer - Verstecke Videos mit kürzer oder länger als die Dauer.\n\nBekanntes Problem: Videos werden nicht in den Player-bezogenen Videos ausgeblendet, sondern der Zeitstempel wird versteckt. - Videos je nach Dauer ausblenden Empfohlene Videos mit weniger als einer bestimmten Anzahl von Ansichten ausblenden.\n\nBekanntes Problem: Videos mit 0 Ansichten werden nicht gefiltert. Empfohlene Videos nach Ansichten ausblenden. Videos mit Ansichten, die größer als diese Zahl sind, werden ausgeblendet. @@ -962,7 +952,6 @@ Tippen und halten Sie, um den Einstellungsdialog für die Whitelist anzuzeigen.< Aktionsschaltflächen Additional settings Animation / Feedback - Filterdauer Experimentelle Flags Bildregion-Beschränkungen Als Datei importieren / exportieren @@ -1009,8 +998,6 @@ Tippen und halten Sie, um den Einstellungsdialog für die Whitelist anzuzeigen.< Ändern Sie den Stil des in App minimierten Players. Miniplayer Sonstiges - Komponenten der Navigationsleiste ausblenden oder anzeigen. - Navigationstasten Informationen über angewandte Patches Patch-Informationen Hide or show buttons in the video player. diff --git a/src/main/resources/youtube/translations/el-rGR/missing_strings.xml b/src/main/resources/youtube/translations/el-rGR/missing_strings.xml index 26b7e32ef..a0dadfc3c 100644 --- a/src/main/resources/youtube/translations/el-rGR/missing_strings.xml +++ b/src/main/resources/youtube/translations/el-rGR/missing_strings.xml @@ -2,28 +2,15 @@ Don\'t show again Courses / Learning - Playables Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black diff --git a/src/main/resources/youtube/translations/el-rGR/strings.xml b/src/main/resources/youtube/translations/el-rGR/strings.xml index 89f8aa1ac..a2ee76beb 100644 --- a/src/main/resources/youtube/translations/el-rGR/strings.xml +++ b/src/main/resources/youtube/translations/el-rGR/strings.xml @@ -20,6 +20,7 @@ Πατήστε για να μάθετε περισσότερα για το DeArrow." Σχετικά με το DeArrow + Μη έγκυρο URL για το DeArrow API. Η διεύθυνση URL του τελικού σημείου αποθήκευσης μικρογραφιών DeArrow. Διεύθυνση API του DeArrow Δεν εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το DeArrow δεν είναι διαθέσιμο. @@ -87,11 +88,15 @@ Εγγραφές Τάσεις Παρακολούθηση αργότερα - Μη έγκυρη αρχική σελίδα, επαναφέρθηκε. Αλλαγή αρχικής σελίδας - Η αρχική επικεφαλίδα είναι ενεργοποιημένη. + Η αρχική σελίδα αλλάζει μόνο μία φορά. + "Η αρχική σελίδα αλλάζει πάντα. + +Περιορισμός: Το κουμπί επιστροφής στη γραμμή εργαλείων ενδέχεται να μη λειτουργεί." + Αλλαγή τύπου αρχικής σελίδας + Η επικεφαλίδα Premium είναι απενεργοποιημένη. Η επικεφαλίδα Premium είναι ενεργοποιημένη. - Αλλαγή επικεφαλίδας YouTube + Επικεφαλίδα Premium Λίστα από συμβολοσειρές στοιχείων που θα φιλτραριστούν, διαχωρισμένες με νέες γραμμές. Επεξεργασία προσαρμοσμένου φίλτρου Το προσαρμοσμένο φίλτρο χρήστη είναι απενεργοποιημένο. @@ -101,16 +106,16 @@ Εμφανίζεται το αναδυόμενο μενού παλιού στυλ. Εμφανίζεται προσαρμοσμένο παράθυρο. Τύπος μενού ταχύτητας αναπαραγωγής - Οι ταχύτητες πρέπει να είναι μικρότερες από %sx, επαναφέρθηκαν. - Μη έγκυρες ταχύτητες αναπαραγωγής, επαναφέρθηκαν. + Οι ταχύτητες πρέπει να είναι μικρότερες από %sx. + Μη έγκυρες ταχύτητες αναπαραγωγής. Προσθέστε ή αλλάξτε τις διαθέσιμες ταχύτητες αναπαραγωγής. Επεξεργασία ταχυτήτων αναπαραγωγής - Η αδιαφάνεια πρέπει να είναι μεταξύ 0-100, επαναφέρθηκε. + Η αδιαφάνεια πρέπει να είναι μεταξύ 0-100. Τιμή αδιαφάνειας μεταξύ 0-100, όπου το 0 είναι διαφανές. Αλλαγή αδιαφάνειας φόντου αναπαραγωγέα Εισάγετε τον κωδικό hex του χρώματος της γραμμής προόδου. Τιμή χρώματος γραμμής προόδου - Για να ανοίγουν οι συνδέσμοι YouTube στο RVX, ενεργοποιήστε το «Άνοιγμα υποστηριζόμενων συνδέσμων» και ενεργοποιήστε τις υποστηριζόμενες διευθύνσεις ιστού. + Για να ανοίγουν οι συνδέσμοι YouTube στο RVX, ενεργοποιήστε το «Άνοιγμα υποστηριζόμενων συνδέσμων» και τις υποστηριζόμενες διευθύνσεις ιστού. Άνοιγμα ρυθμίσεων προεπιλεγμένων εφαρμογών Προεπιλεγμένη ταχύτητα αναπαραγωγής Προεπιλεγμένη ποιότητα βίντεο με δεδομένα κινητής τηλεφωνίας @@ -187,6 +192,9 @@ Οι αριθμοί κινούνται αυξανόμενοι εκθετικά. Οι αριθμοί δεν κινούνται αυξανόμενοι εκθετικά. Απενεργοποίηση κινήσεων αριθμών + Το εφέ κίνησης πάνω από το κουμπί «Μου αρέσει» είναι ενεργοποιημένο. + Το εφέ κίνησης πάνω από το κουμπί «Μου αρέσει» είναι απενεργοποιημένο. + Απενεργοποίηση εφέ κουμπιού «Μου αρέσει» "Απενεργοποίηση του «Παίζοντας με 2x ταχύτητα» κατά το παρατεταμένο πάτημα. Σημειώσεις: @@ -201,12 +209,12 @@ • Πάτημα για κύλιση. • Παρατεταμένο πάτημα για επιλογή κειμένου." Απενεργοποίηση αλληλεπίδρασης περιγραφής βίντεο - Ο κωδικοποιητής VP9 είναι απενεργοποιημένος. - "Ο κωδικοποιητής VP9 είναι ενεργοποιημένος. + Ο κωδικοποιητής VP9 είναι ενεργοποιημένος. + "Ο κωδικοποιητής VP9 είναι απενεργοποιημένος. • Η μέγιστη ανάλυση είναι 1080p. • Η αναπαραγωγή βίντεο θα χρησιμοποιεί περισσότερα δεδομένα Internet από τον VP9. -• Για την αναπαραγωγή με ποιότητα HDR, τα βίντεο HDR εξακολουθούν να χρησιμοποιούν τον κωδικοποιητή VP9." +• Για την αναπαραγωγή βίντεο τύπου HDR, ο κωδικοποιητής VP9 εξακολουθεί να χρησιμοποιείται." Απενεργοποίηση κωδικοποιητή VP9 Η γραμμή προόδου του θέματος Cairo είναι απενεργοποιημένη. "Η γραμμή προόδου του θέματος Cairo είναι ενεργοποιημένη. @@ -307,6 +315,7 @@ Η περιγραφή βίντεο ανοίγεται αυτόματα. Αυτόματο άνοιγμα περιγραφής βίντεο Θέλετε να συνεχίσετε; + Επαναφέρθηκε στην προεπιλεγμένη τιμή. Επανεκκίνηση ώστε να φορτωθεί σωστά η διάταξη Ανανέωση και επανεκκίνηση Αποτυχία εξαγωγής ρυθμίσεων. @@ -498,7 +507,7 @@ Playlists Προωθήσεις YouTube Premium Εμφανίζονται. Κρυμμένα. - Γκρι διαχωριστικό + Γκρι διαχωριστικά Εμφανίζονται. Κρυμμένα. Ψευδώνυμο & διεύθυνση e-mail @@ -582,6 +591,9 @@ Playlists Εμφανίζεται. Κρυμμένη. Ενότητα ταινιών + Εμφανίζεται. + Κρυμμένη. + Γραμμή πλοήγησης Εμφανίζεται. Κρυμμένο. Κουμπί «Δημιουργία» @@ -747,6 +759,12 @@ Playlists Αφορά την ενότητα περισσότερων βίντεο στις γρήγορες ενέργειες και το σχετιζόμενο βίντεο. Σχετιζόμενο βίντεο + Εμφανίζονται. + Κρυμμένα. + Σχετιζόμενα βίντεο + "Αυτή η ρύθμιση περιορίζει τον μέγιστο αριθμό διατάξεων που μπορούν να εμφανιστούν στην οθόνη αναπαραγωγής. + +Στην περίπτωση που η διάταξη της οθόνης αναπαραγωγής αλλάξει λόγω αλλαγών από πλευράς του διακομιστή, ορισμένες διατάξεις της ενδέχεται να κρυφτούν χωρίς να είναι επιθυμητό." Εμφανίζεται. Κρυμμένο. Κουμπί «Remix» @@ -819,6 +837,9 @@ Playlists Εμφανίζεται. Κρυμμένη. Ετικέτα συνδέσμου πλήρους βίντεο + Εμφανίζεται. + Κρυμμένο. + Κουμπί «Πράσινη οθόνη» Εμφανίζονται. Κρυμμένα. Πάνελ πληροφοριών @@ -852,9 +873,9 @@ Playlists Εμφανίζεται. Κρυμμένο. Κουμπί «Remix» - Εμφανίζεται. - Κρυμμένο. - Κουμπί αποθήκευσης ήχου σε λίστα αναπαραγωγής + Εμφανίζεται. + Κρυμμένο. + Κουμπί «Αποθήκευση μουσικής» Εμφανίζεται. Κρυμμένο. Κουμπί προτάσεων αναζήτησης @@ -882,13 +903,16 @@ Playlists Κουμπί «Κατάστημα» Εμφανίζεται. Κρυμμένο. - Κουμπί «Κατάστημα» + Κουμπί «Αγορές» Εμφανίζεται. Κρυμμένο. Κουμπί ήχου Εμφανίζεται. Κρυμμένη. Ετικέτα μεταδεδομένων ήχου + Εμφανίζεται. + Κρυμμένα. + Αυτοκόλλητα Εμφανίζεται. Κρυμμένο. Κουμπί «Εγγραφή» @@ -963,15 +987,28 @@ Playlists Εμφανίζεται. Κρυμμένη. Ενότητα απομαγνητοφώνησης + "Απόκρυψη βίντεο με την ετικέτα «ΠΡΟΣΕΧΩΝ». + +Σημείωση: Η ενεργοποίηση αυτής της ρύθμισης θα κρύψει επίσης το κουμπί «Να λαμβάνω ειδοποιήσεις»." + Απόκρυψη προσεχών βίντεο Εμφανίζονται. Κρυμμένες. Διαφημίσεις βίντεο - Τα βίντεο με διάρκεια μεγαλύτερη από αυτόν τον αριθμό δεν θα εμφανίζονται. - Μέγιστο όριο διάρκειας - Τα βίντεο με διάρκεια μικρότερη από αυτόν τον αριθμό δεν θα εμφανίζονται. - Ελάχιστο όριο διάρκειας - Απόκρυψη των βίντεο με διάρκεια μικρότερη ή μεγαλύτερη από την προτίμησή σας.\n\nΓνωστό θέμα: Δε λειτουργεί στα προτεινόμενα βίντεο κάτω από τον αναπαραγωγέα, θα κρύβεται όμως η χρονοσφραγίδα τους. - Απόκρυψη βίντεο βάσει διάρκειάς τους + "Οι καρτέλες «Αρχική», «Εγγραφές» και τα αποτελέσματα αναζήτησης φιλτράρονται για απόκρυψη βίντεο με προβολές λιγότερες ή περισσότερες από τον καθορισμένο σας αριθμό. + +Περιορισμοί: +• Τα Shorts δε φιλτράρονται. +• Τα βίντεο με 0 προβολές δε φιλτράρονται." + Σχετικά με το φιλτράρισμα βάσει προβολών + Τα βίντεο στην καρτέλα «Αρχική» δε φιλτράρονται με βάση τον αριθμό προβολών. + Τα βίντεο στην καρτέλα «Αρχική» φιλτράρονται με βάση τον αριθμό προβολών. + Φιλτράρισμα καρτέλας «Αρχική» + Τα αποτελέσματα αναζήτησης δε φιλτράρονται με βάση τον αριθμό προβολών. + Τα αποτελέσματα αναζήτησης φιλτράρονται με βάση τον αριθμό προβολών. + Φιλτράρισμα αποτελεσμάτων αναζήτησης + Τα βίντεο στην καρτέλα «Εγγραφές» δε φιλτράρονται με βάση τον αριθμό προβολών. + Τα βίντεο στην καρτέλα «Εγγραφές» φιλτράρονται με βάση τον αριθμό προβολών. + Φιλτράρισμα καρτέλας «Εγγραφές» Απόκρυψη των βίντεο με προβολές λιγότερες ή περισσότερες από την προτίμησή σας.\n\nΓνωστό θέμα: Τα βίντεο με 0 προβολές δε φιλτράρονται σωστά. Απόκρυψη βίντεο βάσει αριθμού προβολών Τα βίντεο με περισσότερες προβολές από αυτόν τον αριθμό δεν θα εμφανίζονται. @@ -1024,7 +1061,7 @@ Playlists Εμφανίζονται. Κρυμμένα. Κείμενα οθόνης αναπαραγωγής - Η αδιαφάνεια πρέπει να ναι μεταξύ 0-100, επαναφέρθηκε. + Η αδιαφάνεια πρέπει να ναι μεταξύ 0-100. Τιμή αδιαφάνειας μεταξύ 0-100, όπου το 0 είναι διαφανές. Αδιαφάνεια φόντου παρασκηνίου Αρχική @@ -1073,13 +1110,18 @@ Playlists Το κουμπί λήψης του YouTube ανοίγει το εγγενές πρόγραμμα λήψης της εφαρμογής. Το κουμπί λήψης του YouTube ανοίγει το εξωτερικό πρόγραμμα λήψης σας. Μετατροπή κουμπιού λήψης βίντεο + Το YouTube Music είναι απαραίτητο για την μετατροπή ενέργειας του κουμπιού. Πατήστε για να κατεβάσετε το YouTube Music. + Προαπαιτούμενο + Το κουμπί YouTube Music ανοίγει την εγγενή εφαρμογή. + Το κουμπί YouTube Music ανοίγει τo RVX Music. + Μετατροπή κουμπιού YouTube Music Εξαιρέθηκε Συμπεριλήφθηκε Κανονική Κουμπιά ενεργειών Πρόσθετες ρυθμίσεις Εφέ / Απόκριση - Φίλτρο διάρκειας + Κουμπί «Λήψη» Πειραματικές Λειτουργίες Περιορισμοί περιοχής εικόνων Εισαγωγή / Εξαγωγή ως αρχείο @@ -1091,6 +1133,7 @@ Playlists Γρήγορες ενέργειες Προτεινόμενα βίντεο Ενότητα Shorts + Προτεινόμενες ενέργειες Χρησιμοποιούμενο εργαλείο Φίλτρο αριθμού προβολών Απόκρυψη ή εμφάνιση στοιχείων στο μενού λογαριασμού και στην καρτέλα «Εσείς». @@ -1121,13 +1164,15 @@ Playlists Γενικά Απενεργοποίηση η ενεργοποίηση απόκρισης δόνησης. Απόκριση δόνησης + Μετατροπή ενέργειας πατήματος των κουμπιών της εφαρμογής. + Μετατροπή κουμπιών Εισαγωγή ή εξαγωγή των ρυθμίσεων σας. Εισαγωγή / Εξαγωγή ρυθμίσεων Αλλαγή του στυλ της ελαχιστοποιημένης οθόνης αναπαραγωγής. Ελαχιστοποιημένη οθόνη αναπαραγωγής Διάφορα - Απόκρυψη ή εμφάνιση στοιχείων της γραμμής πλοήγησης. - Κουμπιά πλοήγησης + Απόκρυψη ή εμφάνιση των στοιχείων της γραμμής πλοήγησης. + Γραμμή πλοήγησης Πληροφορίες σχετικά με τις εφαρμοσμένες τροποποιήσεις. Πληροφορίες τροποποίησης Απόκρυψη ή εμφάνιση κουμπιών στην οθόνη αναπαραγωγής βίντεο. @@ -1156,13 +1201,14 @@ Playlists Βίντεο Διαχείριση των ρυθμίσεων που σχετίζονται με το ιστορικό παρακολούθησης. Ιστορικό παρακολούθησης - Το ύψος πρέπει να είναι μεταξύ 0-32, επαναφέρθηκε. + Το ύψος πρέπει να είναι μεταξύ 0-32. Αλλαγή ύψους της γραμμής προόδου, τιμές μεταξύ 0-32. Ύψος γραμμής προόδου "Εξαναγκαστική απόρριψη της απόκρισης του κωδικοποιητή λογισμικού AV1. Μετά από περίπου 20 δευτερόλεπτα φόρτωσης, θα γίνεται αλλαγή σε διαφορετικό κωδικοποιητή." Απόρριψη απόκρισης κωδικοποιητή AV1 Η διαδικασία προκαλεί περίπου 20 δευτερόλεπτα φόρτωσης. + Μετατόπιση Οι αλλαγές ταχύτητας αναπαραγωγής ισχύουν μόνο για το τρέχον βίντεο. Οι αλλαγές ταχύτητας αναπαραγωγής ισχύουν για όλα τα βίντεο. Απομνημόνευση αλλαγών ταχύτητας αναπαραγωγής @@ -1421,9 +1467,12 @@ Playlists Καρδιά (χρωματιστή) Τίποτα Εφέ διπλού πατήματος - Το βάθος πρέπει να είναι μεταξύ 0-64, επαναφέρθηκε. + Το βάθος πρέπει να είναι μεταξύ 0-64. Αλλαγή βάθους της γραμμής προόδου, τιμές μεταξύ 0-64. Βάθος γραμμής προόδου + Το ποσοστό ύψους πρέπει να είναι μεταξύ 0-100 (%). + Ρύθμιση του ποσοστού ύψους του κενού χώρου που απομένει όταν η γραμμή πλοήγησης είναι κρυμμένη, μεταξύ 0 και 100 (%). + Ποσοστό ύψους του κενού χώρου Πατήστε παρατεταμένα την χρονοσφραγίδα για να αλλάξει η κατάσταση επανάληψης των Shorts. Ενέργεια πατήματος χρονοσφραγίδας "Εμφάνιση τίτλου του βίντεο σε πλήρη οθόνη. @@ -1443,15 +1492,15 @@ Playlists Εμφάνιση μηνύματος κατά την παράλειψη Η ενεργοποίηση αυτής της ρύθμισης μπορεί να προκαλέσει προβλήματα αναπαραγωγής βίντεο. Η προφόρτωση βίντεο παραλείφθηκε. - Η ταχύτητα πρέπει να ναι μεταξύ 0-8.0, επαναφέρθηκε. + Η ταχύτητα πρέπει να ναι μεταξύ 0-8.0. Τιμή ταχύτητας που εφαρμόζεται κατά το παρατεταμένο πάτημα, μεταξύ 0 και 8.0. Τιμή διεπαφής ταχύτητας "Τροποποίηση έκδοσης της εφαρμογής σε παλιότερη έκδοση. Αυτό θα αλλάξει την εμφάνιση της εφαρμογής, αλλά ενδέχεται να προκύψουν άγνωστες παρενέργειες. Εάν αργότερα απενεργοποιηθεί, η παλιά εμφάνιση μπορεί να παραμείνει μέχρι να διαγραφούν τα δεδομένα της εφαρμογής." - Η έκδοση δεν τροποποιείται - Η έκδοση τροποποιείται + Η έκδοση δεν τροποποιείται. + Η έκδοση τροποποιείται. 17.33.42 - Επαναφορά της παλιάς εμφάνισης 17.41.37 - Επαναφορά ενότητας λίστας αναπαραγωγής στο παλιό στυλ 18.05.40 - Επαναφορά πλαισίου εισαγωγής σχολίων στο παλιό στυλ @@ -1477,10 +1526,14 @@ Playlists "Ενεργοποιώντας αυτόν τον κωδικοποιητή ίσως βελτιωθεί η κατανάλωση ενέργειας και ίσως διορθωθούν μικροκολλήματα αναπαραγωγής. Ο AVC (H.264) ωστόσο έχει μέγιστη ανάλυση 1080p, και η αναπαραγωγή βίντεο καταναλώνει περισσότερα δεδομένα internet από τον VP9 ή τον AV1." - • Το μενού «Κομμάτι ήχου» λείπει. - • Το μενού «Κομμάτι ήχου» λείπει. + "• Το μενού «Κομμάτι ήχου» λείπει. +• Η λειτουργία «Σταθερή ένταση» δεν είναι διαθέσιμη." + "• Το μενού «Κομμάτι ήχου» λείπει. +• Η λειτουργία «Σταθερή ένταση» δεν είναι διαθέσιμη." "• Οι ταινίες ή τα επί πληρωμή βίντεο ενδέχεται να μην αναπαράγονται. -• Οι ζωντανές μεταδόσεις ξεκινούν από την αρχή κατά την αναπαραγωγή." +• Οι ζωντανές μεταδόσεις ξεκινούν από την αρχή κατά την αναπαραγωγή. +• Τα βίντεο μπορεί να τελειώνουν 1 δευτερόλεπτο νωρίτερα. +• Ο κωδικοποιητής ήχου opus δεν είναι διαθέσιμος." Παρενέργειες παραποίησης • Τα βίντεο ενδέχεται να μην αναπαράγονται. Το πρόγραμμα πελάτη που χρησιμοποιείται για τη λήψη δεδομένων ροής δεν εμφανίζεται στο μενού «Στατιστικά για σπασίκλες». @@ -1503,7 +1556,7 @@ Playlists Κατώτατο όριο μεγέθους σάρωσης Η ορατότητα του φόντου σάρωσης στο παρασκήνιο. Ορατότητα φόντου σάρωσης - Το μέγεθος οθόνης πρέπει να ναι μικρότερο από 50, επαναφέρθηκε. + Το μέγεθος οθόνης πρέπει να ναι μικρότερο από 50. Ποσοστό επιφάνειας της οθόνης που μπορεί να γίνει η σάρωση.\n\nΣημείωση: Αυτό θα αλλάξει επίσης το μέγεθος της περιοχής οθόνης της χειρονομίας διπλού πατήματος για αναζήτηση. Μέγεθος περιοχής οθόνης σάρωσης Το μέγεθος κειμένου στοιχείων ελέγχου του φόντου σάρωσης. @@ -1519,15 +1572,19 @@ Playlists Σημείωση: Η ενεργοποίηση αυτής της ρύθμισης εξαναγκάζει επίσης την απόκρυψη των διαφημίσεων βίντεο." Εναλλαγή «Δημιουργία» με «Ειδοποιήσεις» - "Η απενεργοποίηση αυτής της ρύθμισης μπορεί να χει ως αποτέλεσμα την φόρτωση περισσότερων διαφημίσεων από τον διακομιστή. + "Η απενεργοποίηση αυτής της ρύθμισης μπορεί να έχει ως αποτέλεσμα την φόρτωση περισσότερων διαφημίσεων από τον διακομιστή. Επίσης, ενδέχεται να εμφανίζονται διαφημίσεις στα Shorts. Αν η απενεργοποίηση δεν τεθεί σε ισχύ, δοκιμάστε να μεταβείτε σε λειτουργία ανώνυμης περιήγησης." Προεπιλογή + RVX Music + %s δεν έχει εγκατασταθεί. Παρακαλούμε εγκαταστήστε το. + Όνομα πακέτου του εγκατεστημένου RVX Music. + Όνομα πακέτου RVX Music Το ιστορικό παρακολούθησης είναι αποκλεισμένο. "• Ακολουθούνται οι ρυθμίσεις ιστορικού παρακολούθησης του λογαριασμού Google σας. -• Το ιστορικό παρακολούθησης μπορεί να μη λειτουργεί λόγω του DNS ή χρήσης VPN." +• Το ιστορικό παρακολούθησης μπορεί να μη λειτουργεί λόγω του DNS σας ή χρήσης VPN." • Ακολουθούνται οι ρυθμίσεις ιστορικού παρακολούθησης του λογαριασμού Google σας. Κατάσταση ιστορικού παρακολούθησης Πατήστε για άνοιγμα της διαχείρισης του ιστορικού παρακολούθησης του YouTube. diff --git a/src/main/resources/youtube/translations/es-rES/missing_strings.xml b/src/main/resources/youtube/translations/es-rES/missing_strings.xml index b3c19545c..d514aa21f 100644 --- a/src/main/resources/youtube/translations/es-rES/missing_strings.xml +++ b/src/main/resources/youtube/translations/es-rES/missing_strings.xml @@ -2,7 +2,6 @@ Don\'t show again Courses / Learning - Playables Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. @@ -10,13 +9,11 @@ Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black diff --git a/src/main/resources/youtube/translations/es-rES/strings.xml b/src/main/resources/youtube/translations/es-rES/strings.xml index d13aa04d5..921787f73 100644 --- a/src/main/resources/youtube/translations/es-rES/strings.xml +++ b/src/main/resources/youtube/translations/es-rES/strings.xml @@ -22,6 +22,7 @@ Si se activa, las URL de vídeo se enviarán al servidor API y no se enviará ni Pulsa aquí para saber más sobre DeArrow." DeArrow + URL de la API de DeArrow no válida. La URL del punto final de la caché de miniaturas de DeArrow. Punto final de la API de DeArrow No se muestra el mensaje si DeArrow no está disponible. @@ -89,8 +90,12 @@ Pulsa aquí para saber más sobre DeArrow." Suscripciones Tendencias Ver más tarde - Página de inicio no válida, restableciendo a la predeterminada. Cambiar página de inicio + La página de inicio solo cambia una vez. + "La página de inicio siempre cambia. + +Limitación: Es posible que el botón Atrás de la barra de herramientas no funcione." + Cambiar tipo de página de inicio La cabecera genérica está activada. La cabecera Premium está activada. Cambiar cabecera de YouTube @@ -187,6 +192,9 @@ Limitación: Es posible que este ajuste no se aplique a los vídeos que no inclu Los números rodantes están animados. Los números rodantes no están animados. Desactivar animaciones de números rodantes + La animación de la fuente está activada sobre el botón de me gusta. + La animación de la fuente está desactivada sobre el botón de me gusta. + Desactivar animación del botón de me gusta "Desactiva \"Reproducir a velocidad x2\" mientras mantienes pulsado. Nota: @@ -306,6 +314,7 @@ Estos caracteres varían dependiendo de tu idioma. La descripción del vídeo se expande automáticamente. Expandir descripción de vídeo ¿Quieres continuar? + Restablecer valores predeterminados. Reiniciar para cargar el diseño normalmente Actualizar y reiniciar Error al exportar los ajustes. @@ -572,6 +581,9 @@ Las palabras con letras mayúsculas en el medio deben introducirse con las mayú Los estantes de películas están visibles. Los estantes de películas están ocultos. Ocultar estantes de películas + La barra de navegación está visible. + La barra de navegación está oculta. + Ocultar barra de navegación El botón de crear está visible. El botón de crear está oculto. Ocultar botón de crear @@ -734,6 +746,12 @@ Las palabras con letras mayúsculas en el medio deben introducirse con las mayú La superposición de vídeo relacionado está visible. La superposición de vídeo relacionado está oculta. Ocultar superposición de vídeo relacionado + Los vídeos relacionados están visibles. + Los vídeos relacionados están ocultos. + Ocultar vídeos relacionados + "Este ajuste limita el número máximo de diseños que se pueden cargar en la pantalla del reproductor. + +Si el diseño de la pantalla del reproductor cambia debido a cambios en el servidor, es posible que se oculten diseños no deseados en la pantalla del reproductor." El botón de remix está visible. El botón de remix está oculto. Ocultar botón de remix @@ -795,6 +813,9 @@ Subtítulos" La etiqueta de enlace de vídeo está visible. La etiqueta de enlace de vídeo está oculta. Ocultar etiqueta de enlace de vídeo completo + El botón de la pantalla verde está visible. + El botón de la pantalla verde está oculto. + Ocultar botón de pantalla verde Los paneles de información están visibles. Los paneles de información están ocultos. Ocultar paneles de información @@ -828,9 +849,9 @@ Subtítulos" El botón de remix está visible. El botón de remix está oculto. Ocultar botón de remix - El botón de guardar sonido está visible. - El botón de guardar sonido está oculto. - Ocultar botón de guardar sonido + El botón de guardar música está visible. + El botón de guardar música está oculto. + Ocultar botón de guardar música El botón de sugerencias de búsqueda está visible. El botón de sugerencias de búsqueda está oculto. Ocultar botón de sugerencias de búsqueda @@ -865,6 +886,9 @@ Limitación: las cabeceras oficiales en los resultados de búsqueda estarán ocu La etiqueta de metadatos está visible. La etiqueta de metadatos está oculta. Ocultar etiqueta de metadatos de sonido + Los stickers están visibles. + Los stickers están ocultos. + Ocultar stickers El botón de suscribirse está visible. El botón de suscribirse está oculto. Ocultar botón de suscribirse @@ -937,15 +961,18 @@ La reproducción automática se puede cambiar en la configuración de YouTube: Las secciones de transcripción están visibles. Las secciones de transcripción están ocultas. Ocultar secciones de transcripción + "Oculta vídeos con la etiqueta PRÓXIMAMENTE. + +Nota: Al activar esta opción también se oculta el botón de notificarme." + Ocultar vídeo PRÓXIMO Los anuncios de vídeo están visibles. Los anuncios de vídeo están ocultos. Ocultar anuncios de vídeo - Los vídeos con una duración más larga que este número serán ocultados. - Duración más larga - Los vídeos con una duración más corta que este número serán ocultados. - Duración más corta - Oculta vídeos con una duración inferior o superior a la establecida.\n\nProblema conocido: no ocultará los vídeos en los vídeos relacionados en el reproductor, en su lugar ocultará la marca de tiempo. - Ocultar vídeos basados en la duración + "El inicio / Las suscripciones / Los resultados de búsqueda se filtran para ocultar los vídeos con visualizaciones inferiores o superiores a un número determinado. + +Limitaciones: +• Los Shorts no se pueden ocultar. +• Los vídeos con 0 visualizaciones no se filtran." Acerca del filtrado del contador de visualizaciones Los vídeos en el feed de inicio no están filtrados. Los vídeos en el feed de inicio están filtrados. @@ -1049,13 +1076,18 @@ Toque y mantenga presionado para abrir el diálogo de configuración de la lista El botón nativo de descarga de vídeo abre el descargador nativo de la aplicación. El botón nativo de descarga de vídeo abre tu descargador externo. Reemplazar botón de descarga de vídeo + Se requiere YouTube Music para reemplazar la acción del botón. Pulsa aquí para descargar YouTube Music. + Requisito previo + El botón de Youtube Music abre la app nativa. + El botón de YouTube Music abre RVX Music. + Reemplazar botón de YouTube Music Excluidos Incluidos Normal Botones de acción Ajustes adicionales Animación / Comentarios - Filtro de duración + Botón de descarga Funciones experimentales Restricciones de región de imágenes Importar / Exportar como archivo @@ -1067,6 +1099,7 @@ Toque y mantenga presionado para abrir el diálogo de configuración de la lista Acciones rápidas Vídeos recomendados Estantes de Shorts + Acciones sugeridas Herramientas utilizadas Filtro de contador de visualizaciones Ocultar o mostrar elementos en el menú de la cuenta y la pestaña Tú. @@ -1097,13 +1130,15 @@ Toque y mantenga presionado para abrir el diálogo de configuración de la lista General Desactiva o activa la vibración. Vibración + Reemplaza la acción de clic de los botones dentro de la aplicación. + Botones de enganche Importar o exportar los ajustes. Importar / Exportar ajustes Cambia el estilo del reproductor minimizado de la aplicación. Minirreproductor Otros - Ocultar o mostrar los componentes de la sección de la barra de navegación. - Botones de navegación + Ocultar o mostrar los componentes de la sección de la barra de navegación. + Barra de navegación Información sobre los parches aplicados. Información de parches Ocultar o mostrar botones en vídeos. @@ -1139,6 +1174,7 @@ Toque y mantenga presionado para abrir el diálogo de configuración de la lista Después de unos 20 segundos de búfer, cambia a un códec diferente." Rechazar respuesta del códec AV1 del software El proceso de Fallback causa unos 20 segundos de búfer. + Desplazamiento Los cambios de velocidad de reproducción solo se aplican al vídeo actual. Los cambios de velocidad de reproducción se aplican a todos los vídeos. Recordar cambios de velocidad de reproducción @@ -1401,6 +1437,9 @@ Limitación: es posible que los no me gusta no aparezcan en modo incógnito."El margen inferior del panel meta debe estar entre 0-64. Restablezca a los valores predeterminados. Configura el espaciado desde la barra de progreso al panel meta, entre 0-64. Margen inferior del panel meta + El porcentaje de altura debe estar entre 0-100 (%). + Configura el porcentaje de altura del espacio vacío izquierdo cuando la barra de navegación está oculta, entre 0 y 100 (%). + Porcentaje de altura del espacio vacío Mantén pulsada la marca de tiempo para cambiar el estado de repetición de los Shorts. Acción de pulsación larga en marca de tiempo "Muestra la sección de título de vídeo en pantalla completa. @@ -1453,8 +1492,8 @@ Si se desactiva más tarde, se recomienda borrar los datos de la aplicación par "Activar esto podría mejorar la duración de la batería y solucionar el problema de reproducción entrecortada. AVC (H.264) tiene una resolución máxima de 1080p, y la reproducción de vídeo utilizará más datos de Internet que VP9 o AV1." - • Falta el menú de la pista de audio. - • Falta el menú de la pista de audio. + "• Falta el menú de la pista de audio." + "• Falta el menú de la pista de audio." "• Las películas o vídeos de pago no pueden reproducirse." Efectos secundarios de falsificación • El vídeo no puede reproducirse. @@ -1501,6 +1540,10 @@ Además, los anuncios ya no se bloquearán en Shorts. Si este ajuste no surte efecto, prueba a cambiar al modo incógnito." Predeterminado + RVX Music + %s no está instalado. Por favor, instálalo. + Nombre del paquete de RVX Music instalado. + Nombre del paquete de RVX Music • El historial de reproducciones no funciona. "• Sigue la configuración del historial de reproducciones de la cuenta de Google. • Es posible que el historial de reproducciones no funcione debido a DNS o VPN." diff --git a/src/main/resources/youtube/translations/fi-rFI/missing_strings.xml b/src/main/resources/youtube/translations/fi-rFI/missing_strings.xml index 50d7e1f33..c8a03773a 100644 --- a/src/main/resources/youtube/translations/fi-rFI/missing_strings.xml +++ b/src/main/resources/youtube/translations/fi-rFI/missing_strings.xml @@ -1,6 +1,7 @@ Don\'t show again + Invalid DeArrow API URL. Still video captures The domain to fetch images from.\nNote: Only enter the domain name, i.e., without the \"https\:\/\/\" prefix. Alternative domain @@ -16,11 +17,14 @@ Live Movies Music - Playables Sports Watch later - Invalid start page, resetting to default. - Player overlay opacity must be between 0-100. Reset to default values. + Start page changes only once. + "Start page always changes. + +Limitation: Back button on the toolbar may not work." + Change start page type + Player overlay opacity must be between 0-100. Ambient mode is enabled in fullscreen. Ambient mode is disabled in fullscreen. Ambient mode is enabled. @@ -40,12 +44,15 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Like and Dislike buttons will glow when mentioned. Like and Dislike buttons will not glow when mentioned. Disable Like and Dislike button glow + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation VP9 codec is enabled. "VP9 codec is disabled. • Maximum resolution is 1080p. • Video playback will use more internet data than VP9. -• To get HDR playback, HDR video still uses the VP9 codec." +• VP9 codec is still used for HDR video." Disable VP9 codec Cairo seekbar is disabled. "Cairo seekbar is enabled. @@ -71,6 +78,7 @@ Limitations: Navigation bar is translucent. Enable translucent navigation bar Do you wish to proceed? + Reset to default values. Search %s Package name of your installed external downloader app, such as YTDLnis. Playlist downloader package name @@ -117,6 +125,9 @@ Side effect: Community post images may be blocked in fullscreen." Hide live chat replay button Hide videos with less than 1,000 views from home feeds that have been uploaded from unsubscribed channels. Hide low views video + Navigation bar is shown. + Navigation bar is hidden. + Hide navigation bar Ambient mode menu is shown. Ambient mode menu is hidden. Hide Ambient mode menu @@ -129,12 +140,21 @@ Side effect: Community post images may be blocked in fullscreen." Promotion alert banner is shown. Promotion alert banner is hidden. Hide promotion alert banner + Related videos are shown. + Related videos are hidden. + Hide related videos + "This setting limits the maximum number of layouts that can be loaded on the player screen. + +If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." Hide floating button + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button Live chat header is shown.\n\nBack button in header will not be hidden. Live chat header is hidden.\n\nBack button in header will not be hidden. Hide live chat header @@ -147,12 +167,18 @@ Side effect: Community post images may be blocked in fullscreen." Button background is shown. Button background is hidden. Hide Play & Pause button background + Save music button is shown. + Save music button is hidden. + Hide Save music button Search suggestions button is shown. Search suggestions button is hidden. Hide search suggestions button Shopping button is shown. Shopping button is hidden. Hide Shopping button + Stickers are shown. + Stickers are hidden. + Hide stickers Super Thanks button is shown. Super Thanks button is hidden. Hide Super Thanks button @@ -173,6 +199,10 @@ Side effect: Community post images may be blocked in fullscreen." Autoplay can be changed in YouTube settings: Settings → Autoplay → Autoplay next video" + "Hide videos with UPCOMING label. + +Note: Enabling this also hides the Notify me button." + Hide UPCOMING video "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: @@ -195,6 +225,9 @@ Limitations: Afn Red MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black @@ -219,7 +252,7 @@ Limitations: Subtexts are shown. Subtexts are hidden. Hide subtexts - Miniplayer overlay opacity must be between 0-100. Reset to default values. + Miniplayer overlay opacity must be between 0-100. Opacity value between 0-100, where 0 is transparent. Overlay opacity Original @@ -243,15 +276,27 @@ Tap and hold to open whitelist setting dialog. Native video download button opens the native in-app downloader. Native video download button opens your external downloader. Override video download button + YouTube Music is required to override button action. Tap here to download YouTube Music. + Prerequisite + YouTube Music button opens the native app. + YouTube Music button opens the RVX Music. + Override YouTube Music button Animation / Feedback + Download button Image region restrictions + Suggested actions + Overrides the click action of in-app buttons. + Hook buttons Change the style of the in app minimized player. Miniplayer + Hide or show navigation bar section components. + Navigation bar Spoof the streaming data to prevent playback issues. Spoof streaming data Change settings related with watch history. Watch history - Quick actions top margin must be between 0-32. Reset to default values. + Quick actions top margin must be between 0-32. + Offset A toast will not be shown when changing the default playback speed. A toast will be shown when changing the default playback speed. Show a toast @@ -277,15 +322,21 @@ Tap and hold to open whitelist setting dialog. Heart (Tint) Hidden Double-tap animation - Meta panel bottom margin must be between 0-64. Reset to default values. + Meta panel bottom margin must be between 0-64. Configure the spacing from the seekbar to the meta panel, between 0-64. Meta panel bottom margin + Height percentage must be between 0-100 (%). + Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). + Height percentage of empty space Press and hold the timestamp to change the Shorts repeat status. Timestamp long press action Turning on this setting may cause video playback issues. - Speed overlay value must be between 0-8.0. Reset to default values. + Speed overlay value must be between 0-8.0. Version not spoofed Version spoofed + 18.33.40 - Restore old Shorts action bar + 18.38.45 - Restore old default video quality behavior + 18.48.39 - Disables views and likes from being updated in real time "App version will be spoofed to an older version of YouTube. This will change the appearance and features of the app, but unknown side effects may occur. @@ -297,10 +348,14 @@ If later turned off, it is recommended to clear the app data to prevent UI bugs. "Enabling this might improve battery life and fix playback stuttering. AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - • Audio track menu is missing. - • Audio track menu is missing. + "• Audio track menu is missing. +• Stable volume is not available." + "• Audio track menu is missing. +• Stable volume is not available." "• Movies or paid videos may not play. -• Livestreams start from the beginning." +• Livestreams start from the beginning. +• Videos may end 1 second early. +• No opus audio codec." Spoofing side effects • Video may not play. Client used to fetch streaming data is hidden in Stats for nerds. @@ -315,7 +370,7 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more iOS Default client Turning off this setting may cause video playback issues. - Swipeable area size cannot be more than 50. Reset to default value. + Swipeable area size cannot be more than 50. Percentage of swipeable screen area.\n\nNote: This will also change the size of the screen area for the double-tap-to-seek gesture. Swipe overlay screen size Create button is not switched with Notifications button. @@ -327,6 +382,10 @@ Note: Enabling this also forcibly hides video ads." Also, ads will no longer be blocked in Shorts. If this setting do not take effect, try switching to Incognito mode." + RVX Music + %s is not installed. Please install it. + Package name of installed RVX Music. + RVX Music package name • Watch history is blocked. "• Follows the watch history settings of Google account. • Watch history may not work due to DNS or VPN." diff --git a/src/main/resources/youtube/translations/fi-rFI/strings.xml b/src/main/resources/youtube/translations/fi-rFI/strings.xml index 14ab3677c..a6bc0bb44 100644 --- a/src/main/resources/youtube/translations/fi-rFI/strings.xml +++ b/src/main/resources/youtube/translations/fi-rFI/strings.xml @@ -691,9 +691,6 @@ Captions" Remix button is shown. Remix button is hidden. Hide remix button - Save sound to playlist is shown. - Save sound to playlist is hidden. - Hide save sound to playlist button Share button is shown. Share button is hidden. Hide share button @@ -780,12 +777,6 @@ Note: Video ads are shown. Video ads are hidden. Hide video ads - Videos with duration longer than this number will be hidden. - Longer than duration - Videos with duration shorter than this number will be hidden. - Shorter than duration - Hide videos with shorter than or longer than duration.\n\nKnown issue: It will not hide videos in the player related videos, instead it will hide the timestamp. - Hide videos based on duration Hide recommended videos with less than a specified number of views. Hide recommended videos by views Videos with views greater than this number will be hidden. @@ -836,7 +827,6 @@ Tap and hold to set playback speed to 1.0x." Normal Action buttons Additional settings - Duration filter Experimental Flags Import / Export as file Import / Export as text @@ -880,8 +870,6 @@ Tap and hold to set playback speed to 1.0x." Import or export settings. Import / Export settings Miscellaneous - Hide or show navigation bar section components. - Navigation buttons Information about applied patches. Patch information Hide or show buttons in videos. @@ -1177,9 +1165,6 @@ Limitation: Video title disappears when clicked." 17.41.37 - Restore old playlist shelf 18.05.40 - Restore old comment input box 18.17.43 - Restore old player flyout panel - 18.33.40 - Restore old shorts action bar - 18.38.45 - Restore old default video quality behavior - "18.48.39 - Disables 'views' and 'likes' from being updated in real time" Spoof app version target Type the spoof app version target. Edit spoof app version diff --git a/src/main/resources/youtube/translations/fr-rFR/missing_strings.xml b/src/main/resources/youtube/translations/fr-rFR/missing_strings.xml index 1da9ef507..d514aa21f 100644 --- a/src/main/resources/youtube/translations/fr-rFR/missing_strings.xml +++ b/src/main/resources/youtube/translations/fr-rFR/missing_strings.xml @@ -2,7 +2,6 @@ Don\'t show again Courses / Learning - Playables Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. @@ -10,23 +9,11 @@ Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black diff --git a/src/main/resources/youtube/translations/fr-rFR/strings.xml b/src/main/resources/youtube/translations/fr-rFR/strings.xml index 2a8735e9b..42e1a243c 100644 --- a/src/main/resources/youtube/translations/fr-rFR/strings.xml +++ b/src/main/resources/youtube/translations/fr-rFR/strings.xml @@ -22,6 +22,7 @@ Si activée, l'URL des vidéos seront envoyés sur le serveur API et aucune autr Cliquez ici pour en savoir plus sur DeArrow." DeArrow + URL de l\'API DeArrow invalide. L\'URL du point de connexion au cache des miniatures DeArrow. Point de connexion à l\'API DeArrow N\'affiche pas de message si DeArrow est indisponible. @@ -89,8 +90,12 @@ Cliquez ici pour en savoir plus sur DeArrow." Abonnements Tendances Regarder plus tard - Page de démarrage invalide, valeur réinitialisée par défaut. Modifier la page de démarrage + La page de démarrage est modifiée une seule fois. + "La page de démarrage est toujours modifiée. + +Limitation : Le bouton Retour de la barre d'outils peut ne pas fonctionner." + Type de modification de la page de démarrage L\'en-tête original est activé. L\'en-tête YouTube Premium est activé. Changer l\'en-tête YouTube @@ -103,11 +108,11 @@ Cliquez ici pour en savoir plus sur DeArrow." L\'ancien style du menu déroulant est utilisé. Affichage de sélection de vitesse personnalisé. Personnaliser le menu \"Vitesse de lecture\" - Les vitesses personnalisées doivent être inférieures à %sx. Valeur réinitialisée par défaut. - Vitesses de lecture invalides. Valeur réinitialisée par défaut. + Les vitesses personnalisées doivent être inférieures à %sx. + Valeur des vitesses de lecture invalide. Ajouter ou modifier les vitesses de lecture disponibles. Saisir des vitesses de lecture personnalisées - L\'opacité du voile du lecteur doit être entre 0-100. Valeur réinitialisée par défaut. + L\'opacité du voile du lecteur doit être entre 0-100. Valeur d\'opacité entre 0-100, 0 étant transparent. Personnaliser l\'opacité du voile du lecteur Saisissez le code hexadécimal de la couleur de la barre de progression. @@ -187,6 +192,9 @@ Limitation : Ce paramètre peut ne pas s'appliquer aux vidéos qui n'incluent pa Animation en temps réel des nombres est activé. Animation en temps réel des nombres est désactivé. Animation en temps réel des nombres + L\'animation en cascade est activé pour le bouton j\'aime. + L\'animation en cascade est désactivé pour le bouton j\'aime. + Désactiver l\'animation du bouton j\'aime "Désactive '2x>>' en appuyant longuement. Note : @@ -206,7 +214,7 @@ Note : • La résolution maximale est en 1080p. • La lecture vidéo utilisera plus de données internet que le VP9. -• Pour utiliser la lecture en HDR, les vidéos HDR utilisent toujours le codec VP9." +• Le codec VP9 est également utilisé pour les vidéos HDR." Désactiver le codec VP9 La barre de progression Cairo est désactivé. "La barre de progression Cairo est activé. @@ -305,6 +313,7 @@ L'option \"Ouvrir la description automatiquement\" risque de ne pas fonctionner La description s\'ouvre automatiquement. Ouvrir la description automatiquement Voulez-vous continuer ? + Réinitialiser les valeurs par défaut. Redémarrer pour charger l\'interface correctement Appliquer et redémarrer ? Échec de l\'exportation des paramètres. @@ -574,6 +583,9 @@ Les mots comportant des majuscules au milieu doivent être saisis de la même fa Les étagères \"Vos films et séries\" sont affichés. Les étagères \"Vos films et séries\" sont masqués. Masquer \"Vos films et séries\" + La barre de navigation est affichée. + La barre de navigation est masqué. + Masquer la barre de navigation Le bouton \"Créer\" est affiché. Le bouton \"Créer\" est masqué. Masquer le bouton \"Créer\" @@ -735,6 +747,12 @@ Les mots comportant des majuscules au milieu doivent être saisis de la même fa La section \'Plus de vidéos\' dans l\'action rapide et les vidéos suggérés sont affichées. La section \'Plus de vidéos\' dans l\'action rapide et la superposition de vidéos suggérés sont masquées. Masquer les vidéos associés + Les vidéos similaires sont affichés. + Les vidéos similaires sont masqués. + Masquer les vidéos similaires + "Ce paramètre limite le nombre maximum de mises en page pouvant être chargées sur l'écran du lecteur. + +Si la mise en page de l'écran du lecteur change en raison de modifications côté serveur, des mises en page non souhaitées peuvent être masquées sur l'écran du lecteur." Le bouton \"Remixer\" est affiché. Le bouton \"Remixer\" est masqué. Masquer le bouton \"Remixer\" @@ -796,6 +814,9 @@ Sous-titres" Le lien vers la vidéo complète est affiché. Le lien vers la vidéo complète est masqué. Masquer le lien de la vidéo complète + Le bouton \'fond vert\' est affiché. + Le bouton \'fond vert\' est masqué. + Masquer le bouton \'fond vert\' Les panneaux d\'information sont affichés. Les panneaux d\'information sont masqués. Masquer les panneaux d\'information @@ -829,9 +850,9 @@ Sous-titres" Le bouton \"Remixer\" est affiché. Le bouton \"Remixer\" est masqué. Masquer le bouton \"Remixer\" - Le son d\'enregistrement dans la Playlist est affiché. - Le son d\'enregistrement dans la Playlist est masqué. - Masquer le son du bouton \"Playlist\" + Le bouton \"Enregistrer la musique\" est affiché. + Le bouton \"Enregistrer la musique\" est masqué. + Masquer le bouton \"Enregistrer la musique\" Le bouton \"Suggestions de recherche\" est affiché. Le bouton \"Suggestions de recherche\" est masqué. Masquer le bouton \"Suggestions de recherche\" @@ -866,6 +887,9 @@ Effet secondaire : Les fiches officielles dans les résultats de recherche sont Les métadonnées de la musique sont affichés. Les métadonnées de la musique sont masqués. Masquer les métadonnées de la musique + Les stickers sont affichés. + Les stickers sont masqués. + Masquer les stickers Le bouton \"S\'abonner\" est affiché. Le bouton \"S\'abonner\" est masqué. Masquer le bouton \"S\'abonner\" @@ -938,15 +962,28 @@ La lecture automatique peut être modifiée dans les paramètres de YouTube : La section \"Transcription\" est affiché. La section \"Transcription\" est masqué. Masquer la section \"Transcription\" + "Masquer les vidéos avec l'étiquette À SUIVRE. + +Remarque : Activer ceci masque également le bouton \"M'avertir\"." + Masquer les vidéos À SUIVRE Les publicités vidéos sont affichées. Les publicités vidéos sont masquées. Masquer les publicités vidéo - Les vidéos supérieures à cette durée sont masqués. - Supérieur à la durée - Les vidéos inférieures à cette durée sont masqués. - Inférieur à la durée - Masque les vidéos inférieure ou supérieure à la durée.\n\nProblème connu : cela ne masque pas les vidéos similaires du lecteur, mais l\'horodatage sera masqué. - Masquer des vidéos selon la durée + "Les onglets Accueil / Abonnement et les résultats de la recherche sont filtrés pour masquer les vidéos dont le nombre de vues est inférieur ou supérieur à un nombre spécifié. + +Limitations : +- Les shorts ne peuvent pas être masqués. +- Les vidéos avec 0 vue ne sont pas filtrées." + À propos du filtrage par nombre de vues + Les vidéos de la page d\'accueil ne sont pas filtrés. + Les vidéos de la page d\'accueil sont filtrés. + Masquer les vidéos de la page d\'accueil par vues + Les résultats de recherche ne sont pas filtrés. + Les résultats de recherche sont filtrés. + Masquer les résultats de recherche par vues + Les vidéos dans l\'onglet Abonnement ne sont pas filtrés. + Les vidéos dans l\'onglet Abonnement sont filtrés. + Masquer les vidéos de l\'onglet Abonnement par vues Masque les vidéos recommandées ayant un nombre spécifié inférieur au nombre de vues.\n\nProblème connu : Les vidéos avec 0 vue ne sont pas filtrés. Masquer les vidéos recommandées par vues Les vidéos supérieurs à ce nombre de vues sont masqués. @@ -999,7 +1036,7 @@ La lecture automatique peut être modifiée dans les paramètres de YouTube : Les sous-textes sont affichés. Les sous-textes sont masqués. Masquer les sous-textes - L\'opacité du minilecteur doit être compris entre 0-100. Valeur réinitialisée par défaut. + L\'opacité du minilecteur doit être compris entre 0-100. Valeur d\'opacité entre 0-100, 0 étant transparent. Opacité du mini lecteur Original @@ -1040,13 +1077,18 @@ Appuyez longuement pour ouvrir les paramètres de la liste blanche. Le bouton \"Télécharger\" natif ouvre le téléchargeur de l\'appli. Le bouton \"Télécharger\" natif ouvre votre téléchargeur externe. Remplacer le bouton de téléchargement de la vidéo + YouTube Music est requis pour remplacer l\'action du bouton. Cliquez ici pour télécharger YouTube Music. + Prérequis + Le bouton \"YouTube Music\" ouvre l\'appli natif. + Le bouton \"YouTube Music\" ouvre RVX Music. + Remplacer le bouton \"YouTube Music\" Exclus Appliqué Normal Boutons d\'action Paramètres supplémentaires Animation / Retour d\'expérience - Filtre de durée + Bouton \"Télécharger\" Options expérimentales Restriction des images selon les régions Importer / Exporter sous forme de fichier @@ -1058,6 +1100,7 @@ Appuyez longuement pour ouvrir les paramètres de la liste blanche. Actions rapides Vidéo recommandée Étagères Shorts + Actions suggérées Outil utilisé Filtre du compteur de vues Masque ou affiche des éléments dans le menu du compte et dans l\'onglet \"Vous\". @@ -1088,13 +1131,15 @@ Appuyez longuement pour ouvrir les paramètres de la liste blanche. Interface Désactive ou active la vibration. Vibration + Remplace l\'action des boutons in-app. + Boutons d\'action Importer ou exporter les paramètres. Importer / Exporter les paramètres Change le style du lecteur minimisé de l\'application. Minilecteur Paramètres avancés - Masque ou affiche les éléments de la barre de navigation. - Barre de navigation + Masque ou affiche les éléments de la barre de navigation. + Barre de navigation Informations sur les patchs appliqués. Informations sur les patchs Masque ou affiche les boutons sur les vidéos. @@ -1123,13 +1168,14 @@ Appuyez longuement pour ouvrir les paramètres de la liste blanche. Vitesses et qualités vidéo Modifie les paramètres liés à l\'historique de visionnage. Historique de visionnage - La hauteur de l\'action rapide doit être comprise entre 0 et 32. Valeur réinitialisée par défaut. + La hauteur de l\'action rapide doit être comprise entre 0 et 32. Configure l\'espacement entre la barre de progression et le conteneur d\'actions rapides, entre 0 et 32. Hauteur de la barre de progression "Force le rejet de la réponse du codec AV1. Un codec différent sera appliqué après environ 20 secondes de mise en mémoire tampon." Rejeter la réponse du codec AV1 Le processus de rejet entraîne une mise en mémoire tampon d\'environ 20 secondes. + Décalage La modification de la vitesse de lecture est appliqué pour la vidéo en cours. La modification de vitesse de lecture est appliqué pour toutes les vidéos. Enreg. modif. de la vitesse de lecture @@ -1388,9 +1434,12 @@ Limitation : les \"Je n'aime pas\" ne seront pas affichées si vous n'êtes pas Cœur (Teinte) Masqué Animation lors du double appui - La marge en bas du panneau méta doit être entre 0-64, Valeur réinitialisée par défaut. - Définir l\'espacement entre la barre de progression et le panneau méta, entre 0-64. + La marge en bas du panneau méta doit être entre 0-64. + Configurer l\'espace de la barre de progression au panneau méta, entre 0-64. Marge en bas du panneau Meta + La hauteur en pourcentage doit être entre 0-100 (%). + Configure la hauteur en pourcentage de l\'espace vide à gauche lorsque la barre de navigation est cachée, entre 0 et 100 (%). + Hauteur en pourcentage de l\'espace vide Appuyez longuement sur l\'horodatage pour modifier l\'état de répétition des Shorts. Action de l\'horodatage appui long "Affiche la section du titre de la vidéo en plein écran. @@ -1411,7 +1460,7 @@ Info : Affic. message lors du passage Activer ce paramètre peut entraîner des problèmes de lecture vidéo. Tampon préchargé passé. - La valeur de la vitesse de lecture doit être comprise entre 0-8.0. Valeur réinitialisée par défaut. + La valeur de la vitesse de lecture doit être comprise entre 0-8.0. La valeur de vitesse de lecture doit être comprise entre 0-8.0. Valeur de \"Vitesse de lecture\" "Falsification de l'ancienne version du client @@ -1445,10 +1494,14 @@ Les hautes qualités peuvent être débloquées sur certaines vidéos qui requi "Activer ce paramètre peut améliorer l'autonomie de la batterie et résoudre les problèmes de lecture. AVC (H.264) a une résolution maximale de 1080p, et la lecture vidéo utilisera plus de données internet que le VP9 ou le AV1." - • Le menu \"Piste Audio\" est manquant. - • Le menu \"Piste Audio\" est manquant. + "• Le menu \"Piste Audio\" est manquant. +• Le volume stable n'es pas disponible." + "• Le menu \"Piste Audio\" est manquant. +• Le volume stable n'es pas disponible." "• Les films ou les vidéos payantes peuvent ne pas être lus. -• Les diffusions en direct commencent au début." +• Les diffusions en direct commencent au début. +• Les vidéos peuvent se terminer une seconde avant. +• Pas de codec audio opus." Effets inconnus de la falsification • Les vidéos peuvent ne pas être lus. Le client utilisé pour récupérer les données de lecture en direct est masqué dans \"Statistiques pour les nerds\". @@ -1471,7 +1524,7 @@ AVC (H.264) a une résolution maximale de 1080p, et la lecture vidéo utilisera Intensité des gestes La visibilité de l\'opacité du voile lors des gestes. Visibilité du voile lors des gestes - La zone glissable ne peut pas être supérieure à 50. Valeur réinitialisée par défaut. + La zone glissable ne peut pas être supérieure à 50. Pourcentage de la zone de l\'écran pouvant être glissée.\n\nNote : Cela affecte également la zone du double appui pour avancer/reculer dans la vidéo. Taille de la zone de gestes La taille du texte pendant le voile lors du geste. @@ -1494,6 +1547,10 @@ Note : Activer ceci masquera également les publicités vidéos." Si ce paramètre ne fait pas effet, essayer de passer en mode Incognito." Officiel + RVX Music + %s n\'est pas installé. Veuillez l’installer. + Nom du paquet de RVX Music installé. + Nom du paquet de RVX Music • L\'historique de visionnage est bloqué. "• Suit les paramètres de l'historique de visionnage du compte Google. • L'historique de visionnage peut ne pas fonctionner en raison d'un DNS ou d'un VPN." diff --git a/src/main/resources/youtube/translations/hu-rHU/missing_strings.xml b/src/main/resources/youtube/translations/hu-rHU/missing_strings.xml index 400746c71..9c08a6179 100644 --- a/src/main/resources/youtube/translations/hu-rHU/missing_strings.xml +++ b/src/main/resources/youtube/translations/hu-rHU/missing_strings.xml @@ -2,106 +2,38 @@ Don\'t show again Courses / Learning - Playables - "Auto switch mix playlists is enabled when autoplay is turned on. - -Autoplay can be changed in YouTube settings: -Settings → Autoplay → Autoplay next video" - Auto switch mix playlists is disabled. - Disable switch mix playlists - Enabling this feature will disable automatic switching to YouTube Mix when playing music while autoplay is turned on. - Default playback speed is enabled for music. - Disable playback speed for music - VP9 codec is enabled. - "VP9 codec is disabled. - -• Maximum resolution is 1080p. -• Video playback will use more internet data than VP9. -• To get HDR playback, HDR video still uses the VP9 codec." - Disable VP9 codec + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - Expandable shelves are shown. - Expandable shelves are hidden. - Hide expandable shelves - Surrounding a keyword/phrase with double-quotes will prevent partial matches of video titles and channel names.<br><br>For example,<br><b>\"ai\"</b> will hide the video: <b>How does AI work?</b><br>but will not hide: <b>What does fair use mean?</b> - Add quotes to use keyword: %s. - Keyword has conflicting declarations: %s. - Keyword is too short and requires quotes: %s. - "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." - "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." - Location button is shown. - Location button is hidden. - Hide location button - Search suggestions button is shown. - Search suggestions button is hidden. - Hide search suggestions button - Shopping button is shown. - Shopping button is hidden. - Hide Shopping button - Trends button is shown. - Trends button is hidden. - Hide Trends button - Use template button is shown. - Use template button is hidden. - Hide Use template button - Use this sound button is shown. - Use this sound button is hidden. - Hide Use this sound button - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button + Save music button is shown. + Save music button is hidden. + Hide Save music button + Stickers are shown. + Stickers are hidden. + Hide stickers MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black Vanced Light Xisr Yellow - Spoof the streaming data to prevent playback issues. - Spoof streaming data + Suggested actions + Offset Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment Forward by Specified Time (Default: 150ms) Publish Created Segment Rewind by Specified Time (Default: 150ms) - Tap here to view your segments. - iOS video codec is AVC (H.264), VP9, or AV1. - "Enabling this might improve battery life and fix playback stuttering. - -AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - "• Movies or paid videos may not play. -• Livestreams start from the beginning." - Spoofing side effects - Client used to fetch streaming data is hidden in Stats for nerds. - Client used to fetch streaming data is shown in Stats for nerds. - Show in Stats for nerds - "Streaming data is not spoofed. Video playback may not work." - Streaming data is spoofed. - Spoof streaming data - Turning off this setting may cause video playback issues. - Create button is not switched with Notifications button. - "Create button is switched with Notifications button. - -Note: Enabling this also forcibly hides video ads." - "Disabling this might load more ads from the server. - -Also, ads will no longer be blocked in Shorts. - -If this setting do not take effect, try switching to Incognito mode." diff --git a/src/main/resources/youtube/translations/hu-rHU/strings.xml b/src/main/resources/youtube/translations/hu-rHU/strings.xml index 89f1a6d6b..9954bca6c 100644 --- a/src/main/resources/youtube/translations/hu-rHU/strings.xml +++ b/src/main/resources/youtube/translations/hu-rHU/strings.xml @@ -16,6 +16,7 @@ Ha engedélyezve van, a videó URL-je elküldésre kerül az API szerverre, de m Koppints ide, ha többet szeretnél megtudni a DeArrow-ról." A DeArrow-ról + Érvénytelen DeArrow API URL. A DeArrow bélyegkép cache végpont URL-je. DeArrow API végpont Nem jelenik meg üzenet, ha a DeArrow nem elérhető. @@ -83,17 +84,21 @@ Koppints ide, ha többet szeretnél megtudni a DeArrow-ról." Feliratkozások Felkapott Megnézem később - Érvénytelen kezdőlap, visszaállítás az eredetire. Kezdőlap megváltoztatása + A kiinduló lap csak egyszer változik. + "A kiinduló lap mindig változik. + +Korlátozás: Előfordulhat, hogy az eszköztár Vissza gombja nem működik." + Kiinduló lap megváltoztatása Az általános fejléc van engedélyezve. - Prémium fejléc van engedélyezve. + A prémium fejléc van engedélyezve. YouTube fejléc módosítása A szűrendő összetevő útvonal építő karakterláncok listája új sorral elválasztva Egyéni szűrő - Az egyedi szűrő ki van kapcsolva - Az egyedi szűrő engedélyezve van - Egyedi szűrők engedélyezése - Érvénytelen egyedi szűrő: %s + Az egyéni szűrő le van tiltva. + Az egyéni szűrő engedélyezett. + Egyéni szűrő engedélyezése + Érvénytelen egyéni szűrő: %s. A régi stílusú flyout menüt használja. Egyéni párbeszédpanelt használ. Egyedi lejátszási sebesség menü típusa @@ -128,12 +133,21 @@ Koppints ide, ha többet szeretnél megtudni a DeArrow-ról." Az automatikus lejátszó felugró panelek engedélyezve vannak. Az automatikus lejátszó felugró panelek le vannak tiltva. Lejátszó felugró panelek letiltása + "Az automatikus mix lejátszási listák engedélyezve vannak, ha az automatikus lejátszás be van kapcsolva. + +Az automatikus lejátszás a YouTube beállításaiban módosítható: +Beállítások → Automatikus lejátszás → Következő videó automatikus lejátszása" + Az automatikus mix lejátszási listák le vannak tiltva. + Mix lejátszási listák letiltása + A funkció engedélyezése letiltja az automatikus váltást a YouTube Mix szolgáltatásra, amikor zenét játszik le, miközben az automatikus lejátszás be van kapcsolva. Az alapértelmezett lejátszási sebesség engedélyezve van az élő közvetítésnél. Az alapértelmezett lejátszási sebesség le van tiltva élő közvetítésnél. Lejátszási sebesség letiltása élő közvetítésnél + Az alapértelmezett lejátszási sebesség engedélyezett zene lejátszásnál. "A zene alapértelmezett lejátszási sebessége le van tiltva. Korlátozás: Előfordulhat, hogy ez a beállítás nem vonatkozik azokra a videókra, amelyek nem tartalmazzák a „Hallgassa meg a YouTube Musicon” bannert." + Lejátszási sebesség zenéhez kiválasztás elrejtése Az interakciós panel engedélyezve. Az interakciós panel letiltva. Interakciós panel letiltása @@ -186,6 +200,13 @@ Megjegyzés: •Koppintás a görgetéshez. •Koppintás és tartás a szöveg kijelöléséhez." Videoleírás interakció letiltása + VP9 kodek engedélyezve van. + "A VP9 kodek le van tiltva. + +• A maximális felbontás 1080p. +• A videolejátszás több internetes adatot használ, mint a VP9. +• A HDR lejátszáshoz a HDR videó továbbra is a VP9 kodeket használja." + VP9 kodek letiltása A Cairo keresősáv le van tiltva. "A Cairo keresősáv engedélyezett. @@ -217,7 +238,7 @@ Mellékhatás: a Cairo stílus az értesítési pontokra is alkalmazódik."Színátmenetes betöltési képernyő engedélyezése A navigációs gombok közötti távolság normális. A navigációs gombok közötti távolság szűk. - Szűk navigációs gombok engedélyezése + Keskeny navigációs gombok engedélyezése Az alapértelmezett átirányítási rendet követi. Az URL átirányítások kikerülése. Közvetlen link megnyitások engedélyezése @@ -281,6 +302,7 @@ A 'Videoleírások kibővítése' nem működik, ha a beírt sztring nem egyezik A videoleírások automatikusan kibővülnek. Videoleírások kibővítése Szeretnéd folytatni? + Visszaállítás az alapértelmezett értékekre. Indítsa újra a rendszert a normál elrendezés betöltéséhez Frissítés és újraindítás A beállítások exportálása sikertelen. @@ -314,7 +336,7 @@ Töltsd le a(z) %2$s weboldalról." • Amikor egy videót elindítanak. • Amikor egy időbélyegre kattintanak a hozzászólásokban." Teljes képernyő erőltetése - A fiók menüben szűrendő nevek listája, új sorokkal elválasztva. + A fiók menüben szűrendő menüpontok listája, új sorokkal elválasztva. Fiók menü szűrő "Fiókmenü és az Ön lap elemeinek elrejtése. Előfordulhat, hogy egyes komponensek nincsenek elrejtve." @@ -422,14 +444,17 @@ Lejátszási listák A bővíthető vágások megjelennek. A bővíthető vágások el vannak rejtve. Bővíthető vágások elrejtése a videók alatt + A kinyitható polcok láthatóak. + A kinyitható polcok el vannak rejtve. + Kinyitható polcok elrejtése A Feliratok gomb megjelenik. A Feliratok gomb el van rejtve. Rejtsd el a hírfolyam feliratok gombját - Szűrendő lebegő menü neveinek listája, új sorral elválasztva. + Szűrendő lebegő menü neveinek listája, új sorokkal elválasztva. Hírfolyam lebegő menü szűrő A hírfolyam lebegő menü szűrő ki van kapcsolva. - A hírfolyam lebegő menü szűrő be van kapcsolva. - Hírfolyam lebegő menü szűrő bekapcsolása + A hírfolyam lebegő menü szűrő engedélyezve van. + Hírfolyam lebegő menü szűrő engedélyezése A hírfolyam keresősáv látható. A hírfolyam keresősáv elrejtve. Hírfolyam keresősáv elrejtése @@ -486,25 +511,34 @@ Korlátozás: előfordulhat, hogy a közösségi bejegyzés képe a teljes képe A kulcs koncepciók rész látható. A kulcs koncepciók rész elrejtve. Kulcs koncepciók rész elrejtése - "A Kezdőlap/Feliratkozások/Keresés eredményei a kulcsszóval megegyező tartalom elrejtésére vannak szűrve\n\nKorlátozások\n• Néhány Shorts lehet, hogy nem lesz elrejtve\n• Néhány UI elem lehet, hogy nem lesz elrejtve\n• Előfordulhat, hogy a kulcsszó keresése nem hoz eredményt" + "Kezdőlapi / Feliratkozási / Keresési eredmények szűrve vannak egyező kulcsszavak alapján. + +Korlátozások: +• A rövidfilmeket nem lehet elrejteni a csatornanév alapján. +• Előfordulhat, hogy egyes felhasználói felület-összetevők nincsenek elrejtve. +• Előfordulhat, hogy a kulcsszó keresése nem ad eredményt." A kulcsszó alapú szűrésről + Ha egy kulcsszót/kifejezést dupla idézőjelekkel vesz körül, akkor elkerülhető a videócímek és a csatornanevek részleges egyezése<br><br>Például:<br><b>\"ai\"</b> elrejti a videót: <b>Hogyan működik az AI?</b><br>de nem rejti el: <b>Mit jelent a fair use?</b> Teljes szóegyezések A kommentek nincsenek szűrve. A kommentek szűrve vannak. Kommentek elrejtése kulcsszavak alapján - A videók a kezdőlapon nincsenek szűrve - A videók a kezdőlapon kulcsszavak alapján szűrve + A videók a kezdőlapon nincsenek szűrve. + A videók a kezdőlapon szűrve vannak. Videók elrejtése a kezdőlapon kulcsszavak alapján - "Elrejtendő kulcsszavak és kifejezések, új sorokkal elválasztva.\n\nA szóközépen nagy betűt tartalmazó szavaknál a kis- és nagybetűknek a megfelelő helyen kell lennie (pl: iPhone, TikTok, LeBlanc)" + "Elrejteni kívánt kulcsszavak és kifejezések, új sorokkal elválasztva.\n\nA kulcsszavak lehetnek csatornanevek vagy bármilyen szöveg, amely a videók címében látható.\n\nA középen nagybetűs szavakat a kis- és nagybetűkkel együtt kell megadni (pl. iPhone, TikTok, LeBlanc)." Elrejtendő kulcsszavak A keresési eredmények nincsenek szűrve. A keresési eredmények szűrve vannak. Keresési eredmények elrejtése kulcsszavak alapján - A videók a feliratkozások lapon nincsenek szűrve - A videók a feliratkozások lapon kulcsszavak alapján szűrve - Videók elrejtése a feliratkozások lapon kulcsszavak alapján - A(z) %1$s kulcsszó elrejtené az összes videót. - Érvénytelen kulcsszó.\'%s\'nem használható szűrőként + A feliratkozott videók nincsenek szűrve. + A feliratkozott videók kulcsszavak alapján szűrve vannak. + Feliratkozott videók elrejtése kulcsszavak alapján + A kulcsszó elrejti az összes videót: %s. + Érvénytelen kulcsszó:\'%s. + Adjon hozzá idézőjeleket a következő kulcsszóhoz: %s. + A kulcsszónak ütköző deklarációi vannak: %s. + A keresőszó túl rövid, és idézőjeleket igényel: %s. A legutóbbi bejegyzések láthatóak. A legutóbbi bejegyzések el vannak rejtve. Legutóbbi bejegyzések elrejtése @@ -534,6 +568,9 @@ Korlátozás: előfordulhat, hogy a közösségi bejegyzés képe a teljes képe A filmek polcai láthatóak. A filmek polcai el vannak rejtve. Film polcok elrejtése + A navigációs sáv látható. + A navigációs sáv el van rejtve. + Navigációs sáv elrejtése A létrehozás gomb látható. A létrehozás gomb el van rejtve. Létrehozás gomb elrejtése @@ -549,11 +586,11 @@ Korlátozás: előfordulhat, hogy a közösségi bejegyzés képe a teljes képe Az értesítések gomb látható. Az értesítések gomb el van rejtve. Értesítések gomb elrejtése - A rövidítéseket gomb látható. - A rövidítéseket gomb el van rejtve. - Rövidítés gomb elrejtése - Az előfizetések gombja látható. - Az előfizetések gombja el van rejtve. + A Shorts gomb látható. + A Shorts gomb el van rejtve. + Shorts gomb elrejtése + Az előfizetések gomb látható. + Az előfizetések gomb el van rejtve. Feliratkozás gomb elrejtése Az \'Értesítsen\' gomb megjelenik. Az \'Értesítsen\' gomb el van rejtve. @@ -687,15 +724,20 @@ Korlátozás: előfordulhat, hogy a közösségi bejegyzés képe a teljes képe A gyorsműveletek megjelennek. A gyorsműveletek el vannak rejtve. Gyorsműveletek konténer elrejtése - "Az alábbi ajánlott videókat rejtse el: + "Elrejti a következő ajánlott videókat: -• Videókat, amelyeknek 'Csak tagsággal' címkéje van. -• Videókat, amelyek alatt olyan kifejezések találhatóak, mint a 'Mások is megnézték'. -• Azokat a videókat, amelyeket nem feliratkozott csatornákról töltöttek fel, és kevesebb, mint 1 000 megtekintésük van." +• Csak a tagok címkével ellátott videók. +• Olyan videók, amelyek alatt olyan kifejezések szerepelnek, mint „Mások is megnézték”." Ajánlott videók elrejtése A kapcsolódó videó átfedése látható. A kapcsolódó videó átfedése el van rejtve. Kapcsolódó videó átfedésének elrejtése + A kapcsolódó videók láthatóak. + A kapcsolódó videók el vannak rejtve. + Kapcsolódó videók elrejtése + "Ez a beállítás korlátozza a lejátszó képernyőjére betölthető elrendezések maximális számát. + +Ha a lejátszó képernyőjének elrendezése a szerveroldali változtatások miatt megváltozik, akkor esetleg a nem kívánt elrendezések elrejthetők a lejátszó képernyőjén." A remix gomb megjelenik A remix gomb el van rejtve Remix elrejtése @@ -731,7 +773,7 @@ Adatmegőrzés Feliratok" A szűrni kívánt YouTube beállítások menü neveinek listája, új sorokkal elválasztva. YouTube beállítások menü szűrő - Elrejt elemeket a YouTube beállítások menüben. + Elrejti a YouTube beállítások menü elemeit. YouTube beállítások menü elrejtése A megosztás gomb látható A megosztás gomb el van rejtve @@ -754,6 +796,8 @@ Feliratok" A nem tetszik gomb látható A nem tetszik gomb elrejtve Nem tetszik gomb elrejtése + "Az olyan lebegő gombok, mint a „Használja ezt a hangot”, a Shorts csatorna lapon láthatóak." + "Az olyan lebegő gombok, mint a „Használja ezt a hangot”, el vannak rejtve a Shorts csatorna lapon." Lebegő gomb elrejtése A teljes videólink címke megjelenik A teljes videólink címke el van rejtve @@ -770,6 +814,9 @@ Feliratok" Az élő csevegés fejléce látható.\n\nA fejlécben található Vissza gomb nem lesz elrejtve. Az élő csevegés fejléce el van rejtve.\n\nA fejlécben található Vissza gomb nem lesz elrejtve. Élő csevegés fejléc elrejtése + A hely gomb látható. + A hely gomb el van rejtve. + Hely gomb elrejtése A navigációs sáv megjelenik A navigációs sáv el van rejtve Navigációs sáv elrejtése @@ -788,9 +835,9 @@ Feliratok" A remix gomb megjelenik A remix gomb el van rejtve Remix gomb elrejtése - A hang mentése a lejátszási listára gomb megjelenik - A hang mentése a lejátszási listára gomb el van rejtve - Hang mentése a lejátszási listára gomb elrejtése + A keresési javaslatok gomb látható. + A keresési javaslatok gomb el van rejtve. + Keresési javaslatok gomb elrejtése A megosztás gomb látható A megosztás gomb el van rejtve Megosztás gomb elrejtése @@ -813,6 +860,9 @@ Korlát: A hivatalos fejlécek a keresési eredményekben el lesznek rejtve."A vásárlás gomb látható A vásárlás gomb el van rejtve Vásárlás gomb elrejtése + A vásárlás gomb látható. + A vásárlás gomb el van rejtve + Vásárlás gomb elrejtése A hang gomb megjelenik A hang gomb el van rejtve Hang gomb elrejtése @@ -831,6 +881,15 @@ Korlát: A hivatalos fejlécek a keresési eredményekben el lesznek rejtve."Az eszköztár látható. Az eszköztár el van rejtve. Eszköztár elrejtése + A Trend gomb látható. + A Trend gomb el van rejtve. + Trend gomb elrejtése + A sablon használata gomb látható. + A sablon használata gomb el van rejtve. + Sablon használata gomb elrejtése + Az ennek a zenének a használata gomb látható. + Az ennek a zenének a használata gomb el van rejtve. + Ennek a zenének a használata gomb elrejtése A cím megjelenik A cím el van rejtve Videó címének elrejtése @@ -885,15 +944,28 @@ Beállítások → Automatikus lejátszás → Következő videó automatikus le Az átirat rész megjelenik Az átirat rész el van rejtve Átirat rész elrejtése + "Videók elrejtése KÖZELGŐ címkével. + +Megjegyzés: Ha ezt engedélyezi, akkor az Értesíts gomb is el lesz rejtve." + KÖZELGŐ videó elrejtése A videó hirdetések láthatók A videó hirdetések el vannak rejtve Videó hirdetések elrejtése - Az ennél hosszabb videók el lesznek rejtve. - Hosszabb, mint - Az ennél rövidebb időtartamú videók el lesznek rejtve. - Rövidebb időtartamú, mint - Videók elrejtése rövidebb vagy hosszabb időtartam alapján.\n\nIsmert hiba: Nem fogja elrejteni a lejátszóban található kapcsolódó videókat, csak az időbélyegjét. - Videók elrejtése hossz alapján + "Kezdőlap / Feliratkozás / Keresés eredményei szűrve vannak, hogy elrejtse a meghatározott számnál kisebb vagy nagyobb nézettségű videókat. + +Korlátozások: +• A Shortokat nem lehet elrejteni. +• A 0 megtekintésű videók nincsenek kiszűrve." + Szűrés nézettség alapján névjegy + A videók a kezdőlapon nincsenek szűrve. + A videók a kezdőlapon szűrve vannak. + Videók elrejtése a kezdőlapon a nézettség alapján + A keresési eredmények nincsenek szűrve. + A keresési eredmények szűrve vannak. + Keresési eredmények elrejtése nézettség alapján + A feliratkozott videók nincsenek szűrve. + A feliratkozott videók szűrve vannak. + Feliratkozott videók elrejtése nézettség alapján Az ajánlott videók elrejtése, ha a megtekintések száma kevesebb a megadott számnál.\n\nIsmert probléma: a 0 megtekintésű videókat a rendszer nem szűri. Ajánlott videók elrejtése megtekintések alapján Az ennél nagyobb nézettségű videók el lesznek rejtve. @@ -902,7 +974,7 @@ Beállítások → Automatikus lejátszás → Következő videó automatikus le Kisebb a nézettsége, mint K -> 1 000\nM -> 1 000 000\nB -> 1 000 000 000\nviews -> megtekintések Adja meg nyelvi sablonját a videók alatt megjelenő nézetek számához a felhasználói felületen. Minden kulcs (a nyelvében levő betű/szó) -> érték (a kulcs jelentése) új sorban legyen. A kulcsok a \"->\" előtt helyezkednek el. Ha megváltoztatja az alkalmazás vagy a rendszer nyelvét, akkor vissza kell állítania ezt a beállítást.\n\nPéldák:\nAngol: 10K views = K -> 1000, views -> megtekintések\nSpanyol: 10 K vistas = K -> 1000, vistas -> megtekintések - Nézettség kulcsok + Kulcsok megtekintése A termékek megtekintése banner látható. A termékek megtekintése banner el van rejtve. Termékek megtekintése banner elrejtése @@ -929,11 +1001,11 @@ Beállítások → Automatikus lejátszás → Következő videó automatikus le Tartsa a fekvő módot Alap Dupla koppintás művelet letiltva. - "A dupla koppintás művelet engedélyezve. + "A dupla koppintás művelet engedélyezve van. -- Modern 1: A minimalizált videót nagyobb méretűre allítja. -- Modern 2, 3: A minimalizált videót bezárja." - Dupla koppintás művelet +• Koppintson duplán a kicsinyített videó nagyobb méretre való váltásához. +• Koppintson még egyszer duplán az eredeti méretre váltáshoz." + Dupla koppintás művelet engedélyezése A Fogd és vidd letiltva. A Fogd és vidd engedélyezve. Fogd és vidd engedélyezése @@ -987,13 +1059,18 @@ Tartsa nyomva a sebesség alaphelyzetbe állításához." Az eredeti letöltés gomb megnyitja az eredeti, beépített letöltőt. Az eredeti letöltés gomb megnyitja a külső letöltőt. Videó letöltési gomb felülbírálása + A YouTube Music szükséges a gombművelet felülbírálásához. Koppints ide a YouTube Music letöltéséhez. + Előfeltétel + A YouTube Music gomb az erdetit app-ot nyitja meg. + A YouTube Music gomb az RVX Music-ot indítja. + YouTube Music gomb felülbírálása Kizárva Befoglalt Normál Akció gombok További beállítások Animáció / Visszajelzés - Időtartam szűrő + Letöltés gomb Kísérleti funkciók Régiós kép korlátozások Importálás / Exportálás fájlként @@ -1027,7 +1104,7 @@ Tartsa nyomva a sebesség alaphelyzetbe állításához." Közösségi bejegyzések Komponensek elrejtése egyéni szűrőkkel. Egyéni szűrő - Komponensek elrejtése vagy megjelenítése a hírfolyam lebegő menüjében. + Komponensek elrejtése vagy megjelenítése a hírfolyam előugró menüjében. Felugró menü Hírfolyam Teljes képernyős móddal kapcsolatos elemek elrejtése vagy módosítása. @@ -1035,13 +1112,15 @@ Tartsa nyomva a sebesség alaphelyzetbe állításához." Általános Haptikus visszajelzés engedélyezése vagy letiltása. Haptikus visszajelzés + Felülbírálja az alkalmazáson belüli gombok kattintási műveletét. + Gombok felülbírálása Beállítások importálása vagy exportálása. Beállítások importálása / exportálása Módosítsa az alkalmazáson belüli minilejátszó stílusát. Minilejátszó Vegyes - Elrejtés vagy megjelenítés a navigációs sáv szakasz komponensei. - Navigációs gombok + Navigációs sáv komponenseinek láthatósága. + Navigációs sáv Információk az alkalmazott javításokról. Patch információ A videólejátszó gombok elrejtése vagy megjelenítése. @@ -1058,8 +1137,10 @@ Tartsa nyomva a sebesség alaphelyzetbe állításához." Komponensek elrejtése vagy megjelenítése a Rövid videók lejátszójában. Rövidfilm lejátszó Rövidfilmek + Az adatfolyam meghamisítása, hogy elkerülje a lejátszási problémákat. + Adatfolyam meghamisítása Húzásvezérlések - Elrejt vagy megváltoztat komponenseket az eszköztáron, mint például a keresősáv, eszköztárgombok és fejléc. + Elrejt vagy megváltoztat komponenseket az eszköztáron, mint például a keresősáv, eszköztár gombok és fejléc. Eszköztár Rejtsd el vagy mutasd a videóleírás komponenseit. Videóleírás @@ -1298,6 +1379,7 @@ Ide hosszan nyomva tartva megnyílik a YouTube beállítások." Visszaállítja a kihagyott szakaszok számlálóját? Ez <b>%s</b> <b>%s</b> szegmenst készítettél + Koppintson ide a szegmensek megtekintéséhez. Az ön felhasználóneve: <b>%s</b> Koppintson ide a felhasználónév megváltoztatásához A felhasználónév nem módosítható: Állapot: %1$d %2$s @@ -1333,6 +1415,9 @@ Ide hosszan nyomva tartva megnyílik a YouTube beállítások." A Meta panel alsó margójának 0-64 között kell lennie. Alapértelmezett értékekre visszaállítása. Állítsd be a keresősáv és a meta panel közötti távolságot 0-64 között. Meta panel alsó margó + A magasság százalékának 0-100 (%) között kell lennie. + Beállítja a navigációs sáv elrejtésekor megmaradó üres terület magasságának arányát 0 és 100 (%) között. + Az üres hely magasságának százaléka Nyomd meg és tartsd lenyomva az időbélyeget a Shortok ismétlés állapotának megváltoztatásához. Időbélyegző hosszú nyomás művelet "Megjeleníti a videócím szakaszt teljes képernyős módban. @@ -1366,9 +1451,9 @@ Info: 17.41.37 - Régi lejátszási lista polc visszállítása 18.05.40 - Régi megjegyzési szövegdoboz visszaállítása 18.17.43 - Régi előugró lejátszói ablak visszaállítása - 18.33.40 - Visszaállítás a régi Rövidítések műveletsávra + 18.33.40 - Régi Shorts művelet sáv visszaállítása 18.38.45 - Visszaállítja a régi alapértelmezett videó minőség viselkedést - 18.48.39 - Letiltja a \'nézetek\' és \'kedvelések\' valós idejű frissítését + 18.48.39 - Letiltja a \'Megtekintések\' és a \'Kedvelések\' valós idejű frissítését Hamis alkalmazásverzió Írja be a hamis alkalmazásverziót. Hamisított alkalmazásverzió célja @@ -1380,16 +1465,28 @@ Ez meg fogja változtatni az app működését és kinézetét és nem várt mel Ha kikapcsolja, akkor ajánlott törölni az app adatait, hogy elkerülje a UI hibákat." "Meghamisítja az eszköz méreteit annak érdekében, hogy feloldjon olyan jobb videóminőséget, amely esetleg nem érhető el az eszközön." Eszközméret hamisítása + Az iOS videokodek AVC (H.264), VP9 vagy AV1. Az iOS videokodek AVC (H.264). Kényszerített iOS AVC (H.264) - • Az audiosáv menü hiányzik. - • Az audiosáv menü hiányzik. + "Ennek engedélyezése javíthatja az akkumulátor élettartamát, és kijavíthatja a lejátszás akadozását.\n\nAz AVC (H.264) maximális felbontása 1080p, és a videolejátszás több internetadatot használ, mint a VP9 vagy az AV1." + "• Az audiosáv menü hiányzik." + "• Az audiosáv menü hiányzik." + "• Előfordulhat, hogy a filmeket vagy a fizetős videókat nem lehet lejátszani. +• Az élő közvetítések az elejétől kezdődnek." + Hamisítás mellékhatásai • A videó esetleg nem játszódik le. + Az adatfolyam lekérésére használt kliens a statisztikában kockáknak nem látható. + Az adatfolyam lekérésére használt kliens a statisztikában kockáknak látható. + Megjelenítés a statisztikában kockáknak + "Az adatfolyam nincs meghamisítva. Lehet, hogy a videó lejátszás nem működik." + Az adatfolyam hamisított. + Adatfolyam meghamisítása Android Android TV Android VR iOS Alapértelmezett kliens + A beállítás kikapcsolása videólejátszási problémákat okozhat. A csúsztatási mozdulatok le vannak tiltva a \'Képernyő lezárása\' módban. A csúsztatási mozdulatok engedélyezve vannak a \'Képernyő lezárása\' módban. A csúsztatási mozdulatok a \'Képernyő lezárása\' módban @@ -1411,8 +1508,19 @@ Megjegyzés: Ezzel a képernyőterület méretét is megváltoztatja, ahol érz • A készüléket esetleg újra kell indítani a beállítás változtatásának érvényesítéséhez. • Ha ezt a beállítást letiltja, több hirdetést tölt be a szerver oldalról. • Ha a videó hirdetések láthatóak akarja tenni, letiltja ezt a beállítást." - Létrehozás felcserélése az értesítésekkel + A Létrehozás gomb nincs felcserélve az Értesítések gombbal. + "A Létrehozás gomb megcserélése az Értesítések gombbal.\n\nMegjegyzés: Engedélyezés esetén a videó hirdetéseket is elrejti." + Létrehozás és értesítések gombok felcserélése + "Ennek kikapcsolása esetleg több reklámot tölt be a szerverről. + +Tovább, a reklámok nem lesznek tiltva a Shortokban. + +Ha ez a beállítás nem működik, váltson inkognító módra." Készlet + RVX Music + %s nincs telepítve. Kérlek telepítsd. + A telepített RVX Music csomag neve. + RVX Music csomag név • A megtekintési előzmények le vannak tiltva. "• Követi a Google-fiók megtekintési előzményeinek beállításait. • Előfordulhat, hogy a megtekintési előzmények nem működik a DNS vagy a VPN miatt." diff --git a/src/main/resources/youtube/translations/id-rID/missing_strings.xml b/src/main/resources/youtube/translations/id-rID/missing_strings.xml index 50d7e1f33..c8a03773a 100644 --- a/src/main/resources/youtube/translations/id-rID/missing_strings.xml +++ b/src/main/resources/youtube/translations/id-rID/missing_strings.xml @@ -1,6 +1,7 @@ Don\'t show again + Invalid DeArrow API URL. Still video captures The domain to fetch images from.\nNote: Only enter the domain name, i.e., without the \"https\:\/\/\" prefix. Alternative domain @@ -16,11 +17,14 @@ Live Movies Music - Playables Sports Watch later - Invalid start page, resetting to default. - Player overlay opacity must be between 0-100. Reset to default values. + Start page changes only once. + "Start page always changes. + +Limitation: Back button on the toolbar may not work." + Change start page type + Player overlay opacity must be between 0-100. Ambient mode is enabled in fullscreen. Ambient mode is disabled in fullscreen. Ambient mode is enabled. @@ -40,12 +44,15 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Like and Dislike buttons will glow when mentioned. Like and Dislike buttons will not glow when mentioned. Disable Like and Dislike button glow + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation VP9 codec is enabled. "VP9 codec is disabled. • Maximum resolution is 1080p. • Video playback will use more internet data than VP9. -• To get HDR playback, HDR video still uses the VP9 codec." +• VP9 codec is still used for HDR video." Disable VP9 codec Cairo seekbar is disabled. "Cairo seekbar is enabled. @@ -71,6 +78,7 @@ Limitations: Navigation bar is translucent. Enable translucent navigation bar Do you wish to proceed? + Reset to default values. Search %s Package name of your installed external downloader app, such as YTDLnis. Playlist downloader package name @@ -117,6 +125,9 @@ Side effect: Community post images may be blocked in fullscreen." Hide live chat replay button Hide videos with less than 1,000 views from home feeds that have been uploaded from unsubscribed channels. Hide low views video + Navigation bar is shown. + Navigation bar is hidden. + Hide navigation bar Ambient mode menu is shown. Ambient mode menu is hidden. Hide Ambient mode menu @@ -129,12 +140,21 @@ Side effect: Community post images may be blocked in fullscreen." Promotion alert banner is shown. Promotion alert banner is hidden. Hide promotion alert banner + Related videos are shown. + Related videos are hidden. + Hide related videos + "This setting limits the maximum number of layouts that can be loaded on the player screen. + +If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." Hide floating button + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button Live chat header is shown.\n\nBack button in header will not be hidden. Live chat header is hidden.\n\nBack button in header will not be hidden. Hide live chat header @@ -147,12 +167,18 @@ Side effect: Community post images may be blocked in fullscreen." Button background is shown. Button background is hidden. Hide Play & Pause button background + Save music button is shown. + Save music button is hidden. + Hide Save music button Search suggestions button is shown. Search suggestions button is hidden. Hide search suggestions button Shopping button is shown. Shopping button is hidden. Hide Shopping button + Stickers are shown. + Stickers are hidden. + Hide stickers Super Thanks button is shown. Super Thanks button is hidden. Hide Super Thanks button @@ -173,6 +199,10 @@ Side effect: Community post images may be blocked in fullscreen." Autoplay can be changed in YouTube settings: Settings → Autoplay → Autoplay next video" + "Hide videos with UPCOMING label. + +Note: Enabling this also hides the Notify me button." + Hide UPCOMING video "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: @@ -195,6 +225,9 @@ Limitations: Afn Red MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black @@ -219,7 +252,7 @@ Limitations: Subtexts are shown. Subtexts are hidden. Hide subtexts - Miniplayer overlay opacity must be between 0-100. Reset to default values. + Miniplayer overlay opacity must be between 0-100. Opacity value between 0-100, where 0 is transparent. Overlay opacity Original @@ -243,15 +276,27 @@ Tap and hold to open whitelist setting dialog. Native video download button opens the native in-app downloader. Native video download button opens your external downloader. Override video download button + YouTube Music is required to override button action. Tap here to download YouTube Music. + Prerequisite + YouTube Music button opens the native app. + YouTube Music button opens the RVX Music. + Override YouTube Music button Animation / Feedback + Download button Image region restrictions + Suggested actions + Overrides the click action of in-app buttons. + Hook buttons Change the style of the in app minimized player. Miniplayer + Hide or show navigation bar section components. + Navigation bar Spoof the streaming data to prevent playback issues. Spoof streaming data Change settings related with watch history. Watch history - Quick actions top margin must be between 0-32. Reset to default values. + Quick actions top margin must be between 0-32. + Offset A toast will not be shown when changing the default playback speed. A toast will be shown when changing the default playback speed. Show a toast @@ -277,15 +322,21 @@ Tap and hold to open whitelist setting dialog. Heart (Tint) Hidden Double-tap animation - Meta panel bottom margin must be between 0-64. Reset to default values. + Meta panel bottom margin must be between 0-64. Configure the spacing from the seekbar to the meta panel, between 0-64. Meta panel bottom margin + Height percentage must be between 0-100 (%). + Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). + Height percentage of empty space Press and hold the timestamp to change the Shorts repeat status. Timestamp long press action Turning on this setting may cause video playback issues. - Speed overlay value must be between 0-8.0. Reset to default values. + Speed overlay value must be between 0-8.0. Version not spoofed Version spoofed + 18.33.40 - Restore old Shorts action bar + 18.38.45 - Restore old default video quality behavior + 18.48.39 - Disables views and likes from being updated in real time "App version will be spoofed to an older version of YouTube. This will change the appearance and features of the app, but unknown side effects may occur. @@ -297,10 +348,14 @@ If later turned off, it is recommended to clear the app data to prevent UI bugs. "Enabling this might improve battery life and fix playback stuttering. AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - • Audio track menu is missing. - • Audio track menu is missing. + "• Audio track menu is missing. +• Stable volume is not available." + "• Audio track menu is missing. +• Stable volume is not available." "• Movies or paid videos may not play. -• Livestreams start from the beginning." +• Livestreams start from the beginning. +• Videos may end 1 second early. +• No opus audio codec." Spoofing side effects • Video may not play. Client used to fetch streaming data is hidden in Stats for nerds. @@ -315,7 +370,7 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more iOS Default client Turning off this setting may cause video playback issues. - Swipeable area size cannot be more than 50. Reset to default value. + Swipeable area size cannot be more than 50. Percentage of swipeable screen area.\n\nNote: This will also change the size of the screen area for the double-tap-to-seek gesture. Swipe overlay screen size Create button is not switched with Notifications button. @@ -327,6 +382,10 @@ Note: Enabling this also forcibly hides video ads." Also, ads will no longer be blocked in Shorts. If this setting do not take effect, try switching to Incognito mode." + RVX Music + %s is not installed. Please install it. + Package name of installed RVX Music. + RVX Music package name • Watch history is blocked. "• Follows the watch history settings of Google account. • Watch history may not work due to DNS or VPN." diff --git a/src/main/resources/youtube/translations/id-rID/strings.xml b/src/main/resources/youtube/translations/id-rID/strings.xml index f819e91a4..9e9691424 100644 --- a/src/main/resources/youtube/translations/id-rID/strings.xml +++ b/src/main/resources/youtube/translations/id-rID/strings.xml @@ -691,9 +691,6 @@ Captions" Remix button is shown. Remix button is hidden. Hide remix button - Save sound to playlist is shown. - Save sound to playlist is hidden. - Hide save sound to playlist button Share button is shown. Share button is hidden. Hide share button @@ -780,12 +777,6 @@ Note: Video ads are shown. Video ads are hidden. Hide video ads - Videos with duration longer than this number will be hidden. - Longer than duration - Videos with duration shorter than this number will be hidden. - Shorter than duration - Hide videos with shorter than or longer than duration.\n\nKnown issue: It will not hide videos in the player related videos, instead it will hide the timestamp. - Hide videos based on duration Hide recommended videos with less than a specified number of views. Hide recommended videos by views Videos with views greater than this number will be hidden. @@ -836,7 +827,6 @@ Tap and hold to set playback speed to 1.0x." Normal Action buttons Additional settings - Duration filter Experimental Flags Import / Export as file Import / Export as text @@ -880,8 +870,6 @@ Tap and hold to set playback speed to 1.0x." Import or export settings. Import / Export settings Miscellaneous - Hide or show navigation bar section components. - Navigation buttons Information about applied patches. Patch information Hide or show buttons in videos. @@ -1177,9 +1165,6 @@ Limitation: Video title disappears when clicked." 17.41.37 - Restore old playlist shelf 18.05.40 - Restore old comment input box 18.17.43 - Restore old player flyout panel - 18.33.40 - Restore old shorts action bar - 18.38.45 - Restore old default video quality behavior - "18.48.39 - Disables 'views' and 'likes' from being updated in real time" Spoof app version target Type the spoof app version target. Edit spoof app version diff --git a/src/main/resources/youtube/translations/in/missing_strings.xml b/src/main/resources/youtube/translations/in/missing_strings.xml index 50d7e1f33..c8a03773a 100644 --- a/src/main/resources/youtube/translations/in/missing_strings.xml +++ b/src/main/resources/youtube/translations/in/missing_strings.xml @@ -1,6 +1,7 @@ Don\'t show again + Invalid DeArrow API URL. Still video captures The domain to fetch images from.\nNote: Only enter the domain name, i.e., without the \"https\:\/\/\" prefix. Alternative domain @@ -16,11 +17,14 @@ Live Movies Music - Playables Sports Watch later - Invalid start page, resetting to default. - Player overlay opacity must be between 0-100. Reset to default values. + Start page changes only once. + "Start page always changes. + +Limitation: Back button on the toolbar may not work." + Change start page type + Player overlay opacity must be between 0-100. Ambient mode is enabled in fullscreen. Ambient mode is disabled in fullscreen. Ambient mode is enabled. @@ -40,12 +44,15 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Like and Dislike buttons will glow when mentioned. Like and Dislike buttons will not glow when mentioned. Disable Like and Dislike button glow + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation VP9 codec is enabled. "VP9 codec is disabled. • Maximum resolution is 1080p. • Video playback will use more internet data than VP9. -• To get HDR playback, HDR video still uses the VP9 codec." +• VP9 codec is still used for HDR video." Disable VP9 codec Cairo seekbar is disabled. "Cairo seekbar is enabled. @@ -71,6 +78,7 @@ Limitations: Navigation bar is translucent. Enable translucent navigation bar Do you wish to proceed? + Reset to default values. Search %s Package name of your installed external downloader app, such as YTDLnis. Playlist downloader package name @@ -117,6 +125,9 @@ Side effect: Community post images may be blocked in fullscreen." Hide live chat replay button Hide videos with less than 1,000 views from home feeds that have been uploaded from unsubscribed channels. Hide low views video + Navigation bar is shown. + Navigation bar is hidden. + Hide navigation bar Ambient mode menu is shown. Ambient mode menu is hidden. Hide Ambient mode menu @@ -129,12 +140,21 @@ Side effect: Community post images may be blocked in fullscreen." Promotion alert banner is shown. Promotion alert banner is hidden. Hide promotion alert banner + Related videos are shown. + Related videos are hidden. + Hide related videos + "This setting limits the maximum number of layouts that can be loaded on the player screen. + +If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." Hide floating button + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button Live chat header is shown.\n\nBack button in header will not be hidden. Live chat header is hidden.\n\nBack button in header will not be hidden. Hide live chat header @@ -147,12 +167,18 @@ Side effect: Community post images may be blocked in fullscreen." Button background is shown. Button background is hidden. Hide Play & Pause button background + Save music button is shown. + Save music button is hidden. + Hide Save music button Search suggestions button is shown. Search suggestions button is hidden. Hide search suggestions button Shopping button is shown. Shopping button is hidden. Hide Shopping button + Stickers are shown. + Stickers are hidden. + Hide stickers Super Thanks button is shown. Super Thanks button is hidden. Hide Super Thanks button @@ -173,6 +199,10 @@ Side effect: Community post images may be blocked in fullscreen." Autoplay can be changed in YouTube settings: Settings → Autoplay → Autoplay next video" + "Hide videos with UPCOMING label. + +Note: Enabling this also hides the Notify me button." + Hide UPCOMING video "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: @@ -195,6 +225,9 @@ Limitations: Afn Red MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black @@ -219,7 +252,7 @@ Limitations: Subtexts are shown. Subtexts are hidden. Hide subtexts - Miniplayer overlay opacity must be between 0-100. Reset to default values. + Miniplayer overlay opacity must be between 0-100. Opacity value between 0-100, where 0 is transparent. Overlay opacity Original @@ -243,15 +276,27 @@ Tap and hold to open whitelist setting dialog. Native video download button opens the native in-app downloader. Native video download button opens your external downloader. Override video download button + YouTube Music is required to override button action. Tap here to download YouTube Music. + Prerequisite + YouTube Music button opens the native app. + YouTube Music button opens the RVX Music. + Override YouTube Music button Animation / Feedback + Download button Image region restrictions + Suggested actions + Overrides the click action of in-app buttons. + Hook buttons Change the style of the in app minimized player. Miniplayer + Hide or show navigation bar section components. + Navigation bar Spoof the streaming data to prevent playback issues. Spoof streaming data Change settings related with watch history. Watch history - Quick actions top margin must be between 0-32. Reset to default values. + Quick actions top margin must be between 0-32. + Offset A toast will not be shown when changing the default playback speed. A toast will be shown when changing the default playback speed. Show a toast @@ -277,15 +322,21 @@ Tap and hold to open whitelist setting dialog. Heart (Tint) Hidden Double-tap animation - Meta panel bottom margin must be between 0-64. Reset to default values. + Meta panel bottom margin must be between 0-64. Configure the spacing from the seekbar to the meta panel, between 0-64. Meta panel bottom margin + Height percentage must be between 0-100 (%). + Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). + Height percentage of empty space Press and hold the timestamp to change the Shorts repeat status. Timestamp long press action Turning on this setting may cause video playback issues. - Speed overlay value must be between 0-8.0. Reset to default values. + Speed overlay value must be between 0-8.0. Version not spoofed Version spoofed + 18.33.40 - Restore old Shorts action bar + 18.38.45 - Restore old default video quality behavior + 18.48.39 - Disables views and likes from being updated in real time "App version will be spoofed to an older version of YouTube. This will change the appearance and features of the app, but unknown side effects may occur. @@ -297,10 +348,14 @@ If later turned off, it is recommended to clear the app data to prevent UI bugs. "Enabling this might improve battery life and fix playback stuttering. AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - • Audio track menu is missing. - • Audio track menu is missing. + "• Audio track menu is missing. +• Stable volume is not available." + "• Audio track menu is missing. +• Stable volume is not available." "• Movies or paid videos may not play. -• Livestreams start from the beginning." +• Livestreams start from the beginning. +• Videos may end 1 second early. +• No opus audio codec." Spoofing side effects • Video may not play. Client used to fetch streaming data is hidden in Stats for nerds. @@ -315,7 +370,7 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more iOS Default client Turning off this setting may cause video playback issues. - Swipeable area size cannot be more than 50. Reset to default value. + Swipeable area size cannot be more than 50. Percentage of swipeable screen area.\n\nNote: This will also change the size of the screen area for the double-tap-to-seek gesture. Swipe overlay screen size Create button is not switched with Notifications button. @@ -327,6 +382,10 @@ Note: Enabling this also forcibly hides video ads." Also, ads will no longer be blocked in Shorts. If this setting do not take effect, try switching to Incognito mode." + RVX Music + %s is not installed. Please install it. + Package name of installed RVX Music. + RVX Music package name • Watch history is blocked. "• Follows the watch history settings of Google account. • Watch history may not work due to DNS or VPN." diff --git a/src/main/resources/youtube/translations/in/strings.xml b/src/main/resources/youtube/translations/in/strings.xml index f819e91a4..9e9691424 100644 --- a/src/main/resources/youtube/translations/in/strings.xml +++ b/src/main/resources/youtube/translations/in/strings.xml @@ -691,9 +691,6 @@ Captions" Remix button is shown. Remix button is hidden. Hide remix button - Save sound to playlist is shown. - Save sound to playlist is hidden. - Hide save sound to playlist button Share button is shown. Share button is hidden. Hide share button @@ -780,12 +777,6 @@ Note: Video ads are shown. Video ads are hidden. Hide video ads - Videos with duration longer than this number will be hidden. - Longer than duration - Videos with duration shorter than this number will be hidden. - Shorter than duration - Hide videos with shorter than or longer than duration.\n\nKnown issue: It will not hide videos in the player related videos, instead it will hide the timestamp. - Hide videos based on duration Hide recommended videos with less than a specified number of views. Hide recommended videos by views Videos with views greater than this number will be hidden. @@ -836,7 +827,6 @@ Tap and hold to set playback speed to 1.0x." Normal Action buttons Additional settings - Duration filter Experimental Flags Import / Export as file Import / Export as text @@ -880,8 +870,6 @@ Tap and hold to set playback speed to 1.0x." Import or export settings. Import / Export settings Miscellaneous - Hide or show navigation bar section components. - Navigation buttons Information about applied patches. Patch information Hide or show buttons in videos. @@ -1177,9 +1165,6 @@ Limitation: Video title disappears when clicked." 17.41.37 - Restore old playlist shelf 18.05.40 - Restore old comment input box 18.17.43 - Restore old player flyout panel - 18.33.40 - Restore old shorts action bar - 18.38.45 - Restore old default video quality behavior - "18.48.39 - Disables 'views' and 'likes' from being updated in real time" Spoof app version target Type the spoof app version target. Edit spoof app version diff --git a/src/main/resources/youtube/translations/it-rIT/missing_strings.xml b/src/main/resources/youtube/translations/it-rIT/missing_strings.xml index cf0a420f0..e61c58590 100644 --- a/src/main/resources/youtube/translations/it-rIT/missing_strings.xml +++ b/src/main/resources/youtube/translations/it-rIT/missing_strings.xml @@ -2,19 +2,7 @@ Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views + MMT Orange + MMT Pink + MMT Turquoise diff --git a/src/main/resources/youtube/translations/it-rIT/strings.xml b/src/main/resources/youtube/translations/it-rIT/strings.xml index b8e1057fe..50693c3ae 100644 --- a/src/main/resources/youtube/translations/it-rIT/strings.xml +++ b/src/main/resources/youtube/translations/it-rIT/strings.xml @@ -23,6 +23,7 @@ Se attivato, gli URL dei video verranno inviati al server API e non vengono invi Tocca qui per saperne di più su DeArrow." DeArrow + URL API DeArrow non valido. L\'URL dell\'endpoint della cache delle anteprime DeArrow. Endpoint API di DeArrow Notifica toast nascosta DeArrow non è disponibile. @@ -89,15 +90,18 @@ Tocca qui per saperne di più su DeArrow." Diretta Film Musica - Giochi interattivi Cerca Shorts Sport Iscrizioni Tendenze Guarda più tardi - Scheda iniziale non valida, ripristinata al valore predefinito. Cambia la scheda iniziale + La pagina iniziale cambia solo una volta. + "La pagina iniziale cambia sempre. + +Limitazione: Il pulsante indietro sulla barra degli strumenti potrebbe non funzionare." + Cambia il tipo di pagina iniziale L\'intestazione generica è abilitata. L\'intestazione Premium è abilitata. Cambia intestazione di YouTube @@ -194,6 +198,9 @@ Limitazione: Questa impostazione potrebbe non applicarsi ai video che non includ Le animazioni degli aggiornamenti in tempo reale dei contatori sono attivate Le animazioni degli aggiornamenti in tempo reale dei contatori sono disattivate Disattiva le animazioni degli aggiornamenti in tempo reale dei contatori + L\'animazione della fontana è abilitata sopra il pulsante mi piace. + L\'animazione della fontana è disabilitata sopra il pulsante mi piace. + Disabilita animazione pulsante Mi piace "Disabilita la funzione '2x>>' tenendo premuto. Nota: @@ -310,6 +317,7 @@ Scheda Tu → Visualizza canale → Menu → Impostazioni" Le descrizioni video vengono espanse automaticamente. Espandi descrizioni video Desideri procedere? + Ripristina ai valori predefiniti. Riavvia per caricare l\'interfaccia normalmente Aggiorna e riavvia Impossibile esportare le impostazioni @@ -577,6 +585,9 @@ Parole con lettere maiuscole all'interno devono essere inserite con il maiuscolo La sezione dei film è visibile. La sezione dei film è nascosta. Nascondi la sezione dei film + La barra di navigazione è mostrata. + La barra di navigazione è nascosta. + Nascondi la barra di navigazione Il pulsante Crea è visibile. Il pulsante Crea è nascosto. Nascondi il pulsante Crea @@ -738,6 +749,12 @@ Parole con lettere maiuscole all'interno devono essere inserite con il maiuscolo La sezione \'Più video\' nel contenitore delle azioni rapide e la sovrapposizione video correlato sono mostrate. La sezione \'Più video\' nel contenitore delle azioni rapide e la sovrapposizione video correlato sono nascoste. Nascondi sovrapposizione video correlato + I video correlati sono mostrati. + I video correlati sono nascosti. + Nascondi video correlati + "Questa impostazione limita il numero massimo di layout che possono essere caricati sulla schermata del player. + +Se il layout della schermata del player cambia a causa di modifiche lato server, i layout non intenzionali possono essere nascosti sullo schermo del giocatore." Il pulsante Remix è visibile. Il pulsante Remix è nascosto. Nascondi il pulsante Remix @@ -802,6 +819,9 @@ Sottotitoli" L\'etichetta del collegamento del video è mostrato. L\'etichetta del collegamento video è nascosta. Nascondi l\'etichetta completa del collegamento video + Il pulsante schermo verde è mostrato. + Il pulsante dello schermo verde è nascosto. + Nascondi pulsante schermo verde I pannelli informativi sono mostrati. I pannelli informativi sono nascosti. Nascondi i pannelli informativi @@ -835,9 +855,9 @@ Sottotitoli" Il pulsante Remix è mostrato. Il pulsante Remix è nascosto. Nascondi il pulsante Remix - Il pulsante Salva suono nella playlist è mostrato. - Il pulsante Salva suono nella playlist è nascosto. - Nascondi il pulsante Salva suono nella playlist + Il pulsante Salva musica è visibile. + Il pulsante Salva musica è nascosto. + Nascondi il pulsante Salva musica Il pulsante suggerimenti di ricerca è mostrato. Il pulsante suggerimenti di ricerca è nascosto. Nascondi il pulsante suggerimenti di ricerca @@ -870,6 +890,9 @@ Sottotitoli" L\'etichetta dei metadati è mostrata. L\'etichetta dei metadati è nascosta. Nascondi l\'etichetta dei metadati audio + Gli adesivi sono visibili. + Gli adesivi sono nascosti. + Nascondi adesivi Il pulsante d\'iscrizione è mostrato. Il pulsante d\'iscrizione è nascosto. Nascondi il pulsante d\'iscrizione @@ -945,15 +968,28 @@ Impostazioni → Riproduzione automatica → Riproduzione automatica del video s La sezione Trascrizione è visibile La sezione Trascrizione è nascosta Nascondi la sezione Trascrizione + "Nascondi i video con l'etichetta PROSSIMAMENTE. + +Nota: Abilitare questo nasconde anche il pulsante Notificami." + Nascondi i video PROSSIMAMENTE Gli annunci video sono visibili. Gli annunci video sono nascosti. Nascondi gli annunci video - I video con durata superiore a questo numero saranno nascosti. - Più lungo della durata - I video con durata inferiore a questo numero saranno nascosti. - Più breve della durata - Nasconde i video con più breve o più lunga durata.\n\nProblema noto: Non nasconderà i video nella sezione di video correlati, nella pagina di riproduzione dei video; invece ne nasconderà solo il timestamp. - Nasconde i video in base alla loro durata + "Home / iscrizione / I risultati della ricerca sono filtrati per nascondere i video con visualizzazioni inferiori o superiori a un numero specificato. + +Limitazioni: +• Gli short non possono essere nascosti. +• I video con 0 visualizzazioni non sono filtrati." + Informazioni sul filtro del conteggio delle visualizzazioni + I video della scheda Home non sono filtrati. + I video della scheda Home sono filtrati. + Nascondi video della scheda Home per visualizzazioni + I risultati di ricerca non sono filtrati. + I risultati della ricerca sono filtrati. + Nascondi i risultati della ricerca per visualizzazioni + I video della scheda iscrizioni feed non sono filtrati. + I video della scheda iscrizioni feed sono filtrati. + Nascondi i video della scheda iscrizioni per visualizzazioni Nascondi i video consigliati con meno di un numero specifico di visualizzazioni.\n\nProblema noto: I video con 0 visualizzazioni non vengono filtrati. Nascondi i video consigliati per il numero di visualizzazioni I video con più visualizzazioni di questo numero saranno nascosti. @@ -1057,13 +1093,18 @@ Tocca e tieni premuto per aprire la finestra delle impostazioni della whitelist. Il pulsante nativo per scaricare il video apre lo scaricatore nativo. Il pulsante nativo per scaricare il video apre il tuo scaricatore esterno. Sovrascrivi il pulsante per scaricare i video + YouTube music è necessario per sovrascrivere l\'azione del pulsante. Tocca qui per scaricare YouTube Music. + Prerequisito + Il pulsante YouTube Music apre l\'app nativa. + Il pulsante YouTube Music apre il RVX Music. + Sovrascrivi il pulsante YouTube Music Escluso Incluso Normale Pulsanti azione Impostazioni aggiuntive Animazione / Feedback - Filtro sulla durata + Pulsante download Opzioni sperimentali Restrizioni regionali delle immagini Importa / Esporta come file @@ -1075,6 +1116,7 @@ Tocca e tieni premuto per aprire la finestra delle impostazioni della whitelist. Azioni rapide Video consigliati Scaffali Shorts + Azioni suggerite Strumenti utilizzati Filtro sul numero di visualizzazioni Nascondi o mostra gli elementi nel menu account e nella scheda Tu. @@ -1105,13 +1147,15 @@ Tocca e tieni premuto per aprire la finestra delle impostazioni della whitelist. Generale Disabilita o abilita il feedback tattile. Feedback tattile + Sostituisce l\'azione del clic dei pulsanti in-app. + Pulsanti gancio Importa o esporta le impostazioni. Importa / Esporta impostazioni Cambia lo stile del riproduttore minimizzato nell\'app. Riproduttore minimizzato Varie - Nascondi o mostra i componenti della sezione della barra di navigazione. - Pulsanti di navigazione + Nascondi o mostra i componenti della sezione della barra di navigazione. + Barra di navigazione Informazioni sulle patch applicate. Informazioni patch Nascondi o mostra i pulsanti nel riproduttore video. @@ -1147,6 +1191,7 @@ Tocca e tieni premuto per aprire la finestra delle impostazioni della whitelist. Verrà applicato un codec diverso dopo circa 20 secondi di buffering." Rifiuta la risposta di codec AV1 software Il processo di Fallback provoca circa 20 secondi di buffering. + Sfalsamento Le modifiche della velocità di riproduzione si applicano solo al video corrente. Le modifiche della velocità di riproduzione si applicano a tutti i video. Ricorda le modifiche della velocità di riproduzione @@ -1414,6 +1459,9 @@ Limitazione: Non mi piace possono non apparire se l'utente non è registrato o i Il margine inferiore del pannello Meta deve essere compreso tra 0-64. Reimposta ai valori predefiniti. Configura la spaziatura dalla barra di ricerca al pannello meta, tra 0-64. Margine inferiore del pannello Meta + La percentuale di altezza deve essere compresa tra 0 e 100 (%). + Configura la percentuale di altezza dello spazio vuoto rimasto quando la barra di navigazione è nascosta, tra 0 e 100 (%). + Altezza percentuale di spazio vuoto Premi e tieni premuto il timestamp per cambiare lo stato di ripetizione degli Shorts. Azione pressione prolungata timestamp "Mostra la sezione del titolo del video a schermo intero. @@ -1468,8 +1516,8 @@ Se disattivata in seguito, si consiglia di cancellare i dati dell'app per evitar "Abilitando questo si potrebbe migliorare la durata della batteria e correggere i problemi di riproduzione. AVC (H. 264) ha una risoluzione massima di 1080p e la riproduzione video utilizzerà più dati internet rispetto a VP9 o AV1." - • il menu traccia audio è mancante. - • il menu traccia audio è mancante. + "• il menu traccia audio è mancante." + "• il menu traccia audio è mancante." "• I film o i video a pagamento potrebbero non essere riprodotti." Effetti collaterali del camuffamento • Il video potrebbe non essere riprodotto. @@ -1516,6 +1564,10 @@ Inoltre, gli annunci non saranno più bloccati negli Shorts. Se questa impostazione non ha effetto, prova a passare alla modalità Incognito." Inventario + RVX Music + %s Non è installato. Per favore installalo. + Nome del pacchetto di RVX Music installato. + Nome pacchetto RVX Music • La cronologia non funziona. "• Segue le impostazioni di cronologia dell'account Google. • La cronologia potrebbe non funzionare a causa di DNS o VPN." diff --git a/src/main/resources/youtube/translations/ja-rJP/missing_strings.xml b/src/main/resources/youtube/translations/ja-rJP/missing_strings.xml index d22a1f7f3..f82015e55 100644 --- a/src/main/resources/youtube/translations/ja-rJP/missing_strings.xml +++ b/src/main/resources/youtube/translations/ja-rJP/missing_strings.xml @@ -1,18 +1,6 @@ - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views + MMT Orange + MMT Pink + MMT Turquoise diff --git a/src/main/resources/youtube/translations/ja-rJP/strings.xml b/src/main/resources/youtube/translations/ja-rJP/strings.xml index d60f31915..cc0231e4a 100644 --- a/src/main/resources/youtube/translations/ja-rJP/strings.xml +++ b/src/main/resources/youtube/translations/ja-rJP/strings.xml @@ -21,6 +21,7 @@ DeArrowの詳細については、ここをタップしてください。" DeArrow + 無効な DeArrow API の URL です。 DeArrowサムネイルキャッシュエンドポイントのURL DeArrow API エンドポイント DeArrow が利用できない場合、トーストを表示します。 @@ -83,15 +84,18 @@ DeArrowの詳細については、ここをタップしてください。"ライブ 映画 音楽 - Playables 検索 ショート スポーツ 登録チャンネル トレンド 後で見る - 無効なスタートページです。デフォルトにリセットします。 起動時のページを変更 + 現在の設定: 起動時のページを一度のみ変更します。 + "現在の設定: 起動時のページを常に変更します。 + +注意: ツールバーの戻るボタンが機能しない場合があります。" + 「起動時のページを変更」の種類 左上のヘッダーを「Premium」に変更します。 左上のヘッダーを「Premium」に変更します。 YouTube ヘッダーを変更 @@ -128,7 +132,7 @@ DeArrowの詳細については、ここをタップしてください。"アンビエントモードを無効化 音声トラックが自動で選択されるのを無効化します。 -注意: この設定はショートには適用されません。 +注意: この設定はショート動画には適用されません。 音声トラックが自動で選択されるのを無効化します。 注意: この設定はショートには適用されません。 @@ -189,6 +193,9 @@ DeArrowの詳細については、ここをタップしてください。"高評価数と視聴回数の回転アニメーションを無効にします。 高評価数と視聴回数の回転アニメーションを無効にします。 数字の回転アニメーションを無効化 + 「高評価」ボタンの上部に表示されるアニメーションを無効化します。 + 「高評価」ボタンの上部に表示されるアニメーションを無効化します。 + 高評価ボタンのアニメーションを無効化 "画面を長押しして2倍速で再生する機能を無効にします。 注意: @@ -203,12 +210,8 @@ DeArrowの詳細については、ここをタップしてください。" 概要欄の操作を無効化 - VP9 コーデックを無効化します。 - -注意: \n -• 最大解像度は 1080p です。 -• 動画を再生する際には VP9 コーデックよりも多くの通信量を消費します。 -• HDR 再生を可能にするために、HDR 動画では引き続き VP9 コーデックが使用されます。 + VP9 コーデックを無効化します。\n\n注意: \n +• 最大解像度は 1080p です。\n• 動画を再生する際には VP9 コーデックよりも多くの通信量を消費します。\n • HDR 再生を可能にするために、HDR 動画では引き続き VP9 コーデックが使用されます。 "VP9 コーデックを無効化します。 注意: @@ -314,6 +317,7 @@ DeArrowの詳細については、ここをタップしてください。"概要欄を自動で展開します。 概要欄を自動で展開 続行しますか? + デフォルト値にリセットしました。 再起動してレイアウトを正常に読み込みます 再起動して更新 設定のエクスポートに失敗しました。 @@ -583,6 +587,9 @@ DeArrowの詳細については、ここをタップしてください。"有料の映画、テレビ番組を非表示にします。 有料の映画、テレビ番組を非表示にします。 映画欄を非表示 + ナビゲーションバー(ホーム、登録チャンネルなどのボタン)を非表示にします。 + ナビゲーションバー(ホーム、登録チャンネルなどのボタン)を非表示にします。 + ナビゲーションバーを非表示 「作成」ボタンを非表示にします。 「作成」ボタンを非表示にします。 作成ボタンを非表示 @@ -740,11 +747,17 @@ DeArrowの詳細については、ここをタップしてください。" +• 登録していないチャンネルからアップロードされた、再生回数が 1,000 回未満の動画" おすすめ動画を非表示 関連動画のオーバーレイを無効化します。 関連動画のオーバーレイを無効化します。 関連動画を非表示 + ホームフィードから関連動画を非表示にします。 + ホームフィードから関連動画を非表示にします。 + 関連動画を非表示 + "これを有効にすると、プレーヤー画面に読み込まれるレイアウトの最大数を制限します。 + +注意: サーバー側の変更によりプレーヤー画面のレイアウトが変更された場合、意図しないレイアウトがプレーヤー画面上から非表示になる可能性があります。" 「リミックス」ボタンを非表示にします。 「リミックス」ボタンを非表示にします。 「リミックス」ボタンを非表示 @@ -809,6 +822,9 @@ DeArrowの詳細については、ここをタップしてください。"フルの動画のリンクのラベルを非表示にします。 フルの動画のリンクのラベルを非表示にします。 フルの動画のリンクラベルを非表示 + プレーヤーの下部に表示される「グリーンスクリーン」ボタンを非表示にします。 + プレーヤーの下部に表示される「グリーンスクリーン」ボタンを非表示にします。 + グリーンスクリーンボタンを非表示 情報パネルを非表示にします。 情報パネルを非表示にします。 情報パネルを非表示 @@ -817,7 +833,7 @@ DeArrowの詳細については、ここをタップしてください。"「メンバーになる」ボタンを非表示 「高評価」ボタンを非表示にします。 「高評価」ボタンを非表示にします。 - 「高評価」ボタンを非表示 + 高評価ボタンを非表示 縦型のライブ配信のプレーヤー内で上部に表示されるチャンネル名などを非表示にします。\n\nヘッダーの戻るボタンは非表示になりません。 縦型のライブ配信のプレーヤー内で上部に表示されるチャンネル名などを非表示にします。\n\nヘッダーの戻るボタンは非表示になりません。 ライブチャットのヘッダーを非表示 @@ -842,9 +858,9 @@ DeArrowの詳細については、ここをタップしてください。"「リミックス」ボタンを非表示にします。 「リミックス」ボタンを非表示にします。 「リミックス」ボタンを非表示 - 音楽の「保存」ボタンを非表示にします。 - 音楽の「保存」ボタンを非表示にします。 - 「保存」ボタンを非表示 + 楽曲の「保存」ボタンを非表示にします。 + 楽曲の「保存」ボタンを非表示にします。 + 保存ボタンを非表示 検索候補のボタンを非表示にします。 検索候補のボタンを非表示にします。 検索候補のボタンを非表示 @@ -879,6 +895,9 @@ DeArrowの詳細については、ここをタップしてください。"プレーヤー下部に表示される楽曲のラベルを非表示にします。 プレーヤー下部に表示される楽曲のラベルを非表示にします。 楽曲のラベルを非表示 + ステッカーを非表示にします。 + ステッカーを非表示にします。 + ステッカーを非表示 「チャンネル登録」ボタンを非表示にします。 「チャンネル登録」ボタンを非表示にします。 「チャンネル登録」ボタンを非表示 @@ -948,15 +967,28 @@ DeArrowの詳細については、ここをタップしてください。"概要欄の文字起こしセクションを非表示にします。 概要欄の文字起こしセクションを非表示にします。 文字起こし欄を非表示 + "「プレミア公開」ラベルがついた動画を非表示にします。 + +注意: これを有効にすると「通知する」ボタンも非表示になります。" + プレミア公開動画を非表示 プレーヤー内の広告を非表示にします。 プレーヤー内の広告を非表示にします。 動画広告を非表示 - この数値より長い再生時間の動画を非表示にします。 - 再生時間が長い動画を非表示 - この数値より短い再生時間の動画を非表示にします。 - 再生時間が短い動画を非表示 - 設定した再生時間で動画を非表示にします。\n\n注意: 動画はプレーヤー関連の動画に表示されず、タイムスタンプを非表示にします。 - 動画を再生時間でフィルタリング + "ホーム / 登録チャンネル / 検索結果はフィルタリングされ、設定した値よりも少ない視聴回数の動画を非表示にします。 + +注意: +• ショート動画は非表示にできません。 +• 再生回数が 0 の動画はフィルタリングされません。" + 再生回数のフィルタリングについて + ホームフィード内の動画を再生回数でフィルタリングします。 + ホームフィード内の動画を再生回数でフィルタリングします。 + ホームフィードをフィルタリング + 検索結果を再生回数でフィルタリングします。 + 検索結果を再生回数でフィルタリングします。 + 検索結果をフィルタリング + 登録チャンネルの動画を再生回数でフィルタリングします。 + 登録チャンネルの動画を再生回数でフィルタリングします。 + 登録チャンネルをフィルタリング 設定した再生回数未満のおすすめ動画を非表示にします。 おすすめ動画を再生回数でフィルタリング この数値より多い再生回数の動画を非表示にします。 @@ -1056,14 +1088,19 @@ DeArrowの詳細については、ここをタップしてください。"プレイリストにダウンロードボタンを追加 「オフライン」ボタンで外部ダウンローダーを開きます。 「オフライン」ボタンで外部ダウンローダーを開きます。 - 「オフライン」ボタンを置き換え + 「オフライン」ボタンを置換 + ボタンを置換するには YouTube Music が必要です。ここをタップして YouTube Music をダウンロードします。 + 前提条件 + 「YouTube Music」ボタンで RVX Music を開けるようにします。 + 「YouTube Music」ボタンで RVX Music を開けるようにします。 + YouTube Music ボタンを置換 除外されています 適用されています 通常 プレーヤー下部(共有、クリップなど)のボタン その他の設定 アニメーション / フィードバック - 再生時間フィルター + ダウンロードボタン 実験的な機能 画像表示の地域制限 ファイルとしてインポート/エクスポート @@ -1075,6 +1112,7 @@ DeArrowの詳細については、ここをタップしてください。"クイック操作 おすすめ動画 ショート欄 + 推奨されるアクション 使用されたツール 再生回数フィルター 「アカウント」メニューと「マイページ」タブで要素を非表示または表示します。 @@ -1105,13 +1143,15 @@ DeArrowの詳細については、ここをタップしてください。"全般 触覚フィードバックを無効化または有効化します。 触覚フィードバック + YouTube 内の「YouTube Music」ボタンを置換します。 + ボタンをフック 設定をインポートまたはエクスポートします。 設定のインポート/エクスポート ミニプレーヤーのスタイルを変更します。 ミニプレーヤー その他 - ナビゲーションバーセクションのコンポーネントを非表示または表示します。 - ナビゲーションボタン + ナビゲーションバーセクションのコンポーネントを非表示または表示します。 + ナビゲーションバー 適用されたパッチに関する情報です。 パッチ情報 プレーヤー内のボタンを非表示または表示します。 @@ -1147,6 +1187,7 @@ DeArrowの詳細については、ここをタップしてください。" AV1 コーデックの応答を拒否 フォールバック処理で約20秒のバッファリングが発生します。 + オフセット 現在の設定: 再生速度の変更は現在の動画にのみ適用されます。 現在の設定: 再生速度の変更はすべての動画に適用されます。 再生速度の変更を保存 @@ -1167,15 +1208,15 @@ DeArrowの詳細については、ここをタップしてください。" 年齢制限ダイアログを削除 AV1 コーデックを VP9 コーデックに置き換えます。 - AV1 コーデックを置き換え + AV1 コーデックを置換 現在の設定: チャンネルのハンドル名が表示されます。 現在の設定: チャンネル名が表示されます。 ショートのチャンネル名を復元 現在の設定: プレーヤー左下のタイムスタンプをタップすると、残り時間が表示されます。 現在の設定: プレーヤー左下のタイムスタンプをタップすると、再生速度または画質のフライアウトメニューが開きます。 - タイムスタンプを置き換え + タイムスタンプを置換 「作成」ボタンを「設定」ボタンに置き換えます。 - 作成ボタンを置き換え + 「作成」ボタンを置換 "タップすると YouTube の設定が開きます。 長押しすると RVX 設定が開きます。" "タップすると RVX 設定が開きます。 @@ -1361,7 +1402,7 @@ DeArrowの詳細については、ここをタップしてください。"未送信のセグメントをスキップしました SponsorBlock は一時的に利用できません。 SponsorBlock は一時的に利用できません。(ステータス %d) - SponsorBlock は一時的に利用できません。 (API タイムアウト) + SponsorBlock は一時的に利用できません。(API がタイムアウトしました) 統計情報 統計は一時的に利用できません (API がダウンしています) 読み込み中... @@ -1414,6 +1455,9 @@ DeArrowの詳細については、ここをタップしてください。"メタパネルの下部の余白は 0 ~ 64 の間でなければなりません。デフォルト値にリセットします。 シークバーからメタパネルまでの間隔を 0 ~ 64 の間で設定できます。 メタパネルの下部の余白 + 高さは 0~100 (%) の間でなければなりません。 + ナビゲーションバーが非表示になっている際に残るスペースの高さを 0~100 (%) の間で設定します。 + スペースの高さを調整 タイムスタンプを長押しすると、ショートのリピート状態を変更できます。 タイムスタンプ長押し時の動作 "全画面表示時にタイトルを表示します。 @@ -1467,9 +1511,14 @@ DeArrowの詳細については、ここをタップしてください。""これを有効にすると、バッテリーの持ちが改善され、再生時のカクつきが修正される可能性があります。 注意: \n・AVC コーデック (H.264) の最大解像度は 1080p です。\n・動画の再生には VP9 や AV1 よりも多くの通信量を消費します。" - ・「音声トラック」メニューは表示されません。 - ・「音声トラック」メニューは表示されません。 - "• 映画や有料動画は再生できない場合があります。" + "・「音声トラック」メニューは表示されません。 +・「一定音量」は使用できません。" + "・「音声トラック」メニューは表示されません。 +• 「一定音量」は使用できません。" + "• 映画や有料動画は再生できない場合があります。 +•ライブは最初から再生されます。 +• 動画が 1 秒早く終了する場合があります。 +• Opus オーディオ コーデックは使用できません。" ストリーミングデータを偽装することによる副作用 • 動画が再生できない可能性があります。 統計情報に偽装したストリーミングデータを表示します。 @@ -1514,6 +1563,10 @@ DeArrowの詳細については、ここをタップしてください。" オリジナル + RVX Music + %s はインストールされていません。インストールしてください。 + インストールされている RVX Music のパッケージ名です。 + RVX Music のパッケージ名 • 再生履歴をブロックします。 "• Google アカウントの再生履歴の設定に従います。 • DNS や VPN が原因で再生履歴が動作しない可能性があります。" @@ -1522,7 +1575,7 @@ DeArrowの詳細については、ここをタップしてください。"タップして YouTube 再生履歴の管理画面を開きます。 すべての履歴を管理 オリジナル - ドメインを置き換え + ドメインを置換 再生履歴をブロック 再生履歴の種類 チャンネル「%1$s」を %2$s ホワイトリストに追加できませんでした。 diff --git a/src/main/resources/youtube/translations/ko-rKR/missing_strings.xml b/src/main/resources/youtube/translations/ko-rKR/missing_strings.xml index 86a5413fd..4995e20be 100644 --- a/src/main/resources/youtube/translations/ko-rKR/missing_strings.xml +++ b/src/main/resources/youtube/translations/ko-rKR/missing_strings.xml @@ -2,11 +2,8 @@ Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering + MMT Orange + MMT Pink + MMT Turquoise Xisr Yellow diff --git a/src/main/resources/youtube/translations/ko-rKR/strings.xml b/src/main/resources/youtube/translations/ko-rKR/strings.xml index 67ea04e2e..e3945082a 100644 --- a/src/main/resources/youtube/translations/ko-rKR/strings.xml +++ b/src/main/resources/youtube/translations/ko-rKR/strings.xml @@ -23,6 +23,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." DeArrow에 대한 정보 + 잘못된 DeArrow API URL 입니다. DeArrow 썸네일 캐시 엔드포인트 URL입니다. 이것이 무슨 역할을 하는지 모르는 경우에는 이 URL을 변경하지 마세요. DeArrow API 엔드포인트 DeArrow를 사용할 수 없을 때, 팝업 메시지를 표시하지 않습니다. @@ -85,15 +86,18 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 실시간 영화 음악 - 게임 룸 (Playables) 검색 Shorts 스포츠 구독 인기 급상승 나중에 볼 동영상 - 잘못된 앱 시작 페이지이므로 기본값으로 초기화합니다. 앱 시작 페이지 변경하기 + 앱 시작 페이지가 한 번만 변경됩니다. + "앱 시작 페이지가 항상 변경됩니다. + +알려진 문제점: 툴바에서 '뒤로 가기' 버튼이 작동되지 않을 수 있습니다." + 앱 시작 페이지 타입 변경하기 일반 헤더를 활성화합니다. Premium 헤더를 활성화합니다. YouTube 헤더 변경하기 @@ -106,11 +110,11 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 이전 메뉴 구성요소를 활성화합니다. 사용자 정의 다이얼로그를 활성화합니다. 사용자 정의 동영상 재생 속도 메뉴 타입 설정 - 사용자 정의 재생 속도는 %s 배속보다 작아야 하므로 기본값으로 초기화합니다. - 잘못된 재생 속도 값이므로 기본값으로 초기화합니다. + 사용자 정의 재생 속도는 %s 배속보다 작아야 합니다. + 잘못된 재생 속도 값입니다. 사용하고 싶은 동영상 재생 속도 값을 추가 또는 변경할 수 있습니다. 사용자 정의 동영상 재생 속도 편집하기 - 불투명도 값은 0-100 사이어야 하므로 기본값으로 초기화합니다. + 플레이어 오버레이 불투명도 값은 0-100 사이어야 합니다. 불투명도 값은 0-100 사이이며, 0은 투명입니다. 사용자 정의 플레이어 오버레이 불투명도 재생바 색상의 헥스 코드를 입력하세요. @@ -143,7 +147,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 설정 → 자동재생 → 다음 동영상 자동재생" 믹스 재생목록 자동전환을 비활성화합니다. 믹스 재생목록 전환 비활성화하기 - 이 설정을 활성화하면 자동재생이 켜져 있는 동안에 음악을 재생하면 YouTube 믹스 재생목록으로 자동전환되지 않습니다. + 이 설정을 활성화하면 자동재생이 켜져 있는 동안에 음악 동영상을 재생하면 YouTube 믹스 재생목록으로 자동전환되지 않습니다. 실시간 스트림에서 기본 동영상 재생 속도를 활성화합니다. 실시간 스트림에서 기본 동영상 재생 속도를 비활성화합니다. 실시간 스트림에서 기본 동영상 재생 속도 비활성화하기 @@ -190,6 +194,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 다음 롤링 넘버 애니메이션을 활성화합니다.\n• 조회수, 시청자 수 롤링 애니메이션 (플레이어 하단)\n• 좋아요 수, 조회수 롤링 애니메이션 (동영상 설명) 다음 롤링 넘버 애니메이션을 비활성화합니다.\n• 조회수, 시청자 수 롤링 애니메이션 (플레이어 하단)\n• 좋아요 수, 조회수 롤링 애니메이션 (동영상 설명) 롤링 넘버 애니메이션 비활성화하기 + 좋아요 버튼 상단에 표시되는 애니메이션을 활성화합니다. + 좋아요 버튼 상단에 표시되는 애니메이션을 비활성화합니다. + 좋아요 버튼 애니메이션 비활성화하기 "화면을 길게 눌러서 '2배속 >>'을 비활성화합니다. 알림: @@ -204,13 +211,11 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." • 눌러서 스크롤하기 • 길게 눌러서 텍스트 선택하기" 동영상 설명 상호 작용 비활성화하기 - VP9 코덱을 활성화합니다.\n\n• 예전에 업로드된 동영상에서 일부 화질 값들(480p+)이 누락되어 있거나 화질 메뉴를 선택할 수 없을 수 있습니다. + VP9 코덱을 활성화합니다.\n• 예전에 업로드된 동영상에서 일부 화질 값들이 제거되어 360p와 1080p(Premium 기능)만 선택할 수 있거나 화질 메뉴를 선택할 수 없을 수 있습니다. "VP9 코덱을 비활성화합니다. - -• 일부 동영상에서 누락되었던 화질 값들(480p+)이 표시될 수 있습이다. -• 최대 화질 값은 1080p으므로 초고화질 동영상을 재생할 수 없습니다. -• 동영상을 재생하면 VP9보다 더 많은 인터넷 데이터를 사용합니다. -• HDR 동영상을 재생할 수 없습니다." +• 재생 문제가 없는 계정이거나 iOS 클라이언트만 AV1 코덱을 지원하고 나머지 클라이언트는 VP9 코덱까지만 지원하기 때문에 iOS만 4K 동영상까지 재생될 수 있고, 나머지는 1080p까지 재생될 수 있습니다. +• AVC 코덱 동영상을 재생했을 경우에는 VP9보다 더 많은 데이터가 사용됩니다. +• HDR 동영상을 재생하기 위해 HDR 동영상에서는 VP9 또는 AV1 코덱이 사용됩니다." VP9 코덱 비활성화하기 Cairo 재생바를 비활성화합니다.\n• 그라데이션 색상 재생바 "Cairo 재생바를 활성화합니다. @@ -284,7 +289,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 스와이프 제스처로 볼륨 조절을 비활성화합니다. 스와이프 제스처로 볼륨 조절을 활성화합니다. 스와이프 제스처로 볼륨 조절 활성화하기 - dpi를 변경하여 일부 레이아웃을 태블릿 레이아웃으로 활성화합니다.\n이 설정을 활성화하면 다음 RVX 설정이 잠겨질 수 있습니다:\n• 커뮤니티 게시물 숨기기\n• 믹스 재생목록 숨기기\n• 빠른 작업 컨테이너 숨기기\n• 최신 동영상 버튼 숨기기\n• 관련 동영상 오버레이 숨기기 + dpi를 변경하여 일부 레이아웃을 태블릿 레이아웃으로 활성화합니다.\n\n이 설정을 활성화하면 다음 RVX 설정이 잠겨질 수 있습니다:\n• 커뮤니티 게시물 숨기기\n• 믹스 재생목록 숨기기\n• 최신 동영상 버튼 숨기기\n• 관련 동영상 오버레이 숨기기 태블릿 레이아웃 활성화하기 불투명 하단바를 활성화합니다. 반투명 하단바를 활성화합니다. @@ -311,6 +316,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 동영상 설명이 자동으로 펼쳐집니다. 동영상 설명 펼치기 계속하시겠습니까? + 기본값으로 초기화합니다. 레이아웃을 정상적으로 불러오기 위해 다시 시작합니다. 새로고침 및 다시 시작 설정을 내보낼 수 없습니다. @@ -458,10 +464,10 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 최종 화면 카드 숨기기 썸네일 하단에서 다음 정보들이 표시됩니다:\n동영상 설명, 챕터, 주요 순간, 스크립트,\n재생목록의 동영상, 이 동영상에 나온 제품 ... 썸네일 하단에서 다음 정보들이 숨겨집니다:\n동영상 설명, 챕터, 주요 순간, 스크립트,\n재생목록의 동영상, 이 동영상에 나온 제품 ... - 펼칠 수 있는 정보 숨기기 - 펼칠 수 있는 선반이 표시됩니다. - 펼칠 수 있는 선반이 숨겨집니다. - 펼칠 수 있는 선반 숨기기 + 펼쳐볼 수 있는 정보 숨기기 + 다음 선반이 표시됩니다:\n좋아하는 장르 선택 선반 + 다음 선반이 숨겨집니다:\n좋아하는 장르 선택 선반 + 펼쳐볼 수 있는 선반 숨기기 자막 버튼이 표시됩니다. 자막 버튼이 숨겨집니다. 피드 자막 버튼 숨기기 @@ -530,10 +536,10 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." "홈 / 구독 / 검색 결과가 필터링되어 키워드 구문과 일치하는 콘텐츠가 숨겨집니다. 알려진 문제점: -• 채널 이름으로 Shorts는 숨길 수 없습니다. +• 채널 이름으로 Shorts 동영상은 숨길 수 없습니다. • 일부 화면 구성요소는 숨겨지지 않을 수 있습니다. • 필터링 키워드를 검색하면 검색 결과가 표시되지 않을 수 있습니다." - 키워드 필터링 정보 + 키워드 필터링에 대한 정보 필터링할 키워드 및 구문을 큰따옴표로 묶으면 동영상 제목과 채널 이름이 부분적으로 일치하지 않도록 방지할 수 있습니다.<br><br>• 예를 들어, <b>\"ai\"</b>라는 키워드로 <b>AI 커리어 완벽 가이드</b>라는 동영상을 숨길 수 있지만, <b>생성형AI가 바꿔놓은 세계</b> 또는 <b>What does fair use mean?</b>라는 동영상은 숨길 수 없습니다.<br>• 그리고 구두점을 단어의 경계로 간주하기 때문에 <b>인공지능(AI)의 원리</b>라는 동영상은 숨길 수 있습니다. 큰따옴표는 다른 단어 내부의 하위 문자열만 무시합니다 (예: <b>fair</b>는 숨길 수 없지만, <b>f(ai)r</b>는 숨김). 전체 단어 일치시키기 댓글 섹션에서 키워드 필터를 비활성화합니다. @@ -587,6 +593,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 영화 선반이 표시됩니다. 영화 선반이 숨겨집니다. 영화 선반 숨기기 + 하단바가 표시됩니다. + 하단바가 숨겨집니다. + 하단바 숨기기 만들기 버튼이 표시됩니다. 만들기 버튼이 숨겨집니다. 만들기 버튼 숨기기 @@ -608,8 +617,8 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 구독 버튼이 표시됩니다. 구독 버튼이 숨겨집니다. 구독 버튼 숨기기 - 게시 예정 동영상 하단에서 \'알림 받기\' 버튼이 표시됩니다. - 게시 예정 동영상 하단에서 \'알림 받기\' 버튼이 숨겨집니다. + (게시) 예정 동영상 하단에서 \'알림 받기\' 버튼이 표시됩니다. + (게시) 예정 동영상 하단에서 \'알림 받기\' 버튼이 숨겨집니다. \'알림 받기\' 버튼 숨기기 유료 광고 포함 라벨이 표시됩니다. 유료 광고 포함 라벨이 숨겨집니다. @@ -747,6 +756,12 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 빠른 작업 컨테이너의 \'동영상 더보기\' 섹션과 관련 동영상 오버레이가 표시됩니다. 빠른 작업 컨테이너의 \'동영상 더보기\' 섹션과 관련 동영상 오버레이가 숨겨집니다. 관련 동영상 오버레이 숨기기 + 관련 동영상이 표시됩니다. + 관련 동영상이 숨겨집니다. + 관련 동영상 숨기기 + "이 설정은 플레이어 화면에서 로드할 수 있는 최대 레이아웃 수를 제한합니다. + +서버 측 변경으로 인해 플레이어 화면의 레이아웃이 변경되면 플레이어 화면에서 의도하지 않은 레이아웃이 숨겨질 수 있습니다." 리믹스 버튼이 표시됩니다. 리믹스 버튼이 숨겨집니다. 리믹스 버튼 숨기기 @@ -811,6 +826,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 동영상 링크 라벨이 표시됩니다. 동영상 링크 라벨이 숨겨집니다. FULL 또는 관련 동영상 링크 라벨 숨기기 + 그린 스크린 버튼이 표시됩니다. + 그린 스크린 버튼이 숨겨집니다. + 그린 스크린 버튼 숨기기 정보 패널이 표시됩니다. 정보 패널이 숨겨집니다. 정보 패널 숨기기 @@ -844,9 +862,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 리믹스 버튼이 표시됩니다. 리믹스 버튼이 숨겨집니다. 리믹스 버튼 숨기기 - (재생목록에) 음악 저장 버튼이 표시됩니다. - (재생목록에) 음악 저장 버튼이 숨겨집니다. - (재생목록에) 음악 저장 버튼 숨기기 + (재생목록에) 음악 저장 버튼이 표시됩니다. + (재생목록에) 음악 저장 버튼이 숨겨집니다. + (재생목록에) 음악 저장 버튼 숨기기 검색 추천 버튼이 표시됩니다. 검색 추천 버튼이 숨겨집니다. 검색 추천 버튼 숨기기 @@ -885,6 +903,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 메타데이터 라벨이 표시됩니다. 메타데이터 라벨이 숨겨집니다. 사운드 메타데이터 라벨 숨기기 + 스티커가 표시됩니다. + 스티커가 숨겨집니다. + 스티커 숨기기 구독 버튼이 표시됩니다. 구독 버튼이 숨겨집니다. 구독 버튼 숨기기 @@ -960,24 +981,28 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 스크립트 섹션이 표시됩니다. 스크립트 섹션이 숨겨집니다. 스크립트 섹션 숨기기 + "(게시) 예정 라벨이 있는 동영상이 숨겨집니다. + +알림: 이 설정을 활성화하면 '알림 받기' 버튼도 숨겨집니다." + (게시) 예정 동영상 숨기기 동영상 광고가 표시됩니다. 동영상 광고가 숨겨집니다. 동영상 광고 숨기기 - 입력한 숫자보다 재생시간이 긴 동영상을 숨길 수 있습니다. - 재생시간이 긴 동영상 숨기기 - 입력한 숫자보다 재생시간이 짧은 동영상을 숨길 수 있습니다. - 재생시간이 짧은 동영상 숨기기 - 재생시간이 짧거나 긴 동영상을 숨길 수 있습니다.\n\n알려진 문제점: 관련 동영상에서는 동영상이 숨겨지지 않고, 타임스탬프만 숨겨집니다. - 재생시간을 기준으로 동영상 숨기기 - 홈 피드 동영상이 필터링되지 않습니다. - 홈 피드 동영상이 필터링됩니다. - 조회수로 홈 피드 동영상 숨기기 - 검색 결과가 필터링되지 않습니다. - 검색 결과가 필터링됩니다. - 조회수로 검색 결과 숨기기 - 구독 피드 동영상이 필터링되지 않습니다. - 구독 피드 동영상이 필터링됩니다. - 조회수로 구독 피드 동영상 숨기기 + "홈 / 구독 / 검색 결과가 필터링되어 조회수가 지정한 수보다 적거나 많은 동영상이 숨겨집니다. + +알려진 문제점: +• Shorts 동영상은 숨길 수 없습니다. +• 실시간 스트림과 '조회수 없음' 동영상은 숨길 수 없습니다." + 조회수 필터링에 대한 정보 + 홈 피드에서 조회수 필터를 비활성화합니다. + 홈 피드에서 조회수 필터를 활성화합니다. + 홈 피드에서 조회수 필터 활성화하기 + 검색 결과에서 조회수 필터를 비활성화합니다. + 검색 결과에서 조회수 필터를 활성화합니다. + 검색 결과에서 조회수 필터 활성화하기 + 구독 피드에서 조회수 필터를 비활성화합니다. + 구독 피드에서 조회수 필터를 활성화합니다. + 구독 피드에서 조회수 필터 활성화하기 조회수가 높거나 낮은 추천 동영상을 숨길 수 있습니다.\n\n알려진 문제점: 실시간 스트림과 \'조회수 없음\' 동영상은 숨겨지지 않습니다. 조회수를 기준으로 동영상 숨기기 입력한 숫자보다 높은 조회수를 가진 동영상을 숨길 수 있습니다. @@ -1036,7 +1061,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 서브텍스트가 표시됩니다.\n• 왼쪽 하단에서 표시되는 \'유료 광고 포함\'과 같은 라벨 서브텍스트가 숨겨집니다.\n• 왼쪽 하단에서 표시되는 \'유료 광고 포함\'과 같은 라벨 서브텍스트 숨기기 - 불투명도 값은 0-100 사이어야 하므로 기본값으로 초기화합니다. + 미니 플레이어 오버레이 불투명도 값은 0-100 사이어야 합니다. 불투명도 값은 0-100 사이이며, 0은 투명입니다. 미니 플레이어 오버레이 불투명도 기기 기본값 사용 @@ -1077,13 +1102,18 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 동영상 오프라인 저장 버튼으로 기본 다운로더를 실행할 수 있습니다. (YouTube Premium 기능) 동영상 오프라인 저장 버튼으로 외부 다운로더를 실행할 수 있습니다. 동영상 오프라인 저장 버튼 재정의하기 + 버튼 동작을 재정의하려면 YouTube Music이 필요합니다. 여기를 눌러서 YouTube Music을 다운로드하세요. + 전제 조건 + YouTube Music 버튼으로 순정 YouTube Music을 실행할 수 있습니다. + YouTube Music 버튼으로 RVX Music을 실행할 수 있습니다. + YouTube Music 버튼 재정의하기 제외된 패치 포함된 패치 일반 액션 버튼 추가 설정 애니메이션 / 피드백 - 재생시간 필터 + 오프라인 저장 버튼 실험적인 기능 이미지 표시 제한 국가 파일로 가져오기 / 내보내기 @@ -1095,6 +1125,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 빠른 작업 추천 동영상 Shorts 선반 + 추천 동작 사용된 도구 조회수 필터 계정 메뉴와 내 페이지 탭에서 구성요소를 숨기거나 표시할 수 있습니다. @@ -1125,13 +1156,15 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 일반 진동 피드백을 활성화하거나 비활성화할 수 있습니다. 진동 피드백 + \'앱 내에 있는 버튼을 터치 시 실행 동작\'을 재정의할 수 있습니다. + 버튼 재정의 설정을 가져오거나 내보낼 수 있습니다. 설정 가져오기 / 내보내기 앱 내에서 최소화된 플레이어의 스타일을 변경할 수 있습니다. 미니 플레이어 기타 - 하단바 섹션에서 구성요소를 숨기거나 표시할 수 있습니다. - 하단바 버튼 + 하단바에서 섹션 구성요소를 숨기거나 표시할 수 있습니다. + 하단바 적용된 패치에 대한 정보입니다. 패치 정보 플레이어에서 버튼을 숨기거나 표시할 수 있습니다. @@ -1160,13 +1193,14 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 동영상 시청 기록과 관련된 설정을 변경할 수 있습니다. 시청 기록 - 빠른 작업 상단 여백 값은 0-32 사이어야 하므로 기본값으로 초기화합니다. + 빠른 작업 상단 여백 값은 0-32 사이어야 합니다. 재생바에서 빠른 작업 컨테이너까지의 간격을 0-32 사이로 지정할 수 있습니다. 빠른 작업 상단 여백 - "소프트웨어 AV1 코덱 응답을 강제로 거부합니다. + "AV1 코덱 응답을 강제로 거부합니다. 약 20초정도의 버퍼링 후에 다른 코덱으로 전환됩니다." - 소프트웨어 AV1 코덱 응답 거부하기 + AV1 코덱 응답 거부하기 Fallback 프로세스로 인해 약 20초정도의 버퍼링이 발생합니다. + 오프셋 동영상 재생 속도 값을 변경할 때마다 저장하지 않습니다. 동영상 재생 속도 값을 변경할 때마다 저장합니다. 동영상 재생 속도 저장 활성화하기 @@ -1183,10 +1217,10 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 모바일 네트워크 이용 시 기본 동영상 화질 값을 %s로 변경합니다. 동영상 화질을 설정할 수 없습니다. Wi-Fi 이용 시 기본 동영상 화질 값을 %s로 변경합니다. - "시청 경고 다이얼로그를 제거합니다.\n\n• 이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다.\n• 성인인증이 필요한 동영상에서 인증을 하려 할 때, 휴대폰 번호가 필요하다고 알려주는 소형 팝업창(다이얼로그) 없이 바로 휴대폰 번호 인증 페이지가 표시됩니다." + "시청 경고 다이얼로그를 제거합니다.\n\n• 이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다.\n• 즉, 성인인증이 필요한 동영상에서 인증을 하려 할 때, 휴대폰 번호가 필요하다고 알려주는 소형 팝업창(다이얼로그) 없이 바로 휴대폰 번호 인증 페이지가 표시됩니다." 시청 경고 다이얼로그 제거하기 - 소프트웨어 AV1 코덱을 VP9 코덱으로 변경합니다. - 소프트웨어 AV1 코덱 변경하기 + AV1 코덱을 VP9 코덱으로 변경합니다. + AV1 코덱 변경하기 채널 핸들(@채널 아이디)을 사용합니다. 채널 이름을 사용합니다. 채널 핸들 변경하기 @@ -1430,9 +1464,12 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 하트 (엷은색) 숨겨짐 두 번 누르기 애니메이션 - 메타 패널 하단 여백은 0-64 사이여야 하므로 기본값으로 초기화합니다. + 메타 패널 하단 여백은 0-64 사이여야 합니다. 재생바에서 메타 패널까지의 간격을 0-64 사이로 지정할 수 있습니다. 메타 패널 하단 여백 + 높이 비율은 0-100 사이어야 합니다 (백분율). + 하단바가 숨겨졌을 때, 남는 빈 공간의 높이 비율을 0에서 100사이로 지정할 수 있습니다 (백분율). + 빈 공간의 높이 비율 타임스탬프를 길게 눌러서 Shorts 반복 상태를 변경할 수 있습니다. 타임스탬프 길게 누르기 동작 "전체 화면에서 동영상 제목 섹션을 표시합니다. @@ -1452,7 +1489,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 건너뛸 때, 팝업 메시지 표시하기 이 설정을 활성화하면 동영상 재생 문제가 발생할 수 있습니다. 미리 로드된 버퍼를 건너뛰었습니다. - 재생 속도 오버레이 값은 0-8.0 사이어야 하므로 기본값으로 초기화합니다. + 재생 속도 오버레이 값은 0-8.0 사이어야 합니다. 동영상 재생 속도 오버레이 값은 0-8.0 사이어야 합니다. 동영상 재생 속도 오버레이 값 "서버에 연결할 때 사용되는 앱 버전을 지정하여 앱 레이아웃을 변경합니다. @@ -1476,15 +1513,15 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." "기기 크기 정보를 최대값으로 변경합니다. 높은 기기 크기 정보가 필요한 일부 동영상에서는 고화질 동영상 값이 잠금 해제될 수 있지만 모든 동영상에는 적용되지 않습니다." 기기 크기 정보 변경하기 - iOS 동영상 코덱을 AVC (H.264), VP9 또는 AV1으로 활성화합니다.\n\n• 예전에 업로드된 동영상을 재생했는데 VP9 코덱 응답을 받았을 경우, 일부 화질 값들(480p+)이 누락되어 있거나 화질 메뉴를 선택할 수 없을 수 있습니다. - iOS 동영상 코덱을 AVC (H.264)로 활성화합니다.\n\n• 일부 VP9 코덱 동영상에서 누락되었던 화질 값들(480p+)이 표시될 수 있습니다.\n• 최대 화질 값이 1080p이므로 초고화질 동영상을 재생할 수 없습니다.\n• HDR 동영상을 재생할 수 없습니다. + iOS 동영상 코덱을 AVC (H.264), VP9 또는 AV1으로 활성화합니다.\n\n• 예전에 업로드된 동영상을 재생했는데 VP9 코덱 응답을 받았을 경우, 일부 화질 값들이 제거되어 360p와 1080p(Premium 기능)만 선택할 수 있거나 화질 메뉴를 선택할 수 없을 수 있습니다. + iOS 동영상 코덱을 AVC (H.264)로 활성화합니다.\n\n• 일부 VP9 코덱 동영상에서 제거되었던 화질 값들이 표시될 수 있습니다.\n• 최대 화질 값이 1080p이므로 초고화질 동영상을 재생할 수 없습니다.\n• HDR 동영상을 재생할 수 없습니다 iOS AVC (H.264) 강제로 활성화하기 "이 설정을 활성화하면 배터리 수명이 향상되고 재생 끊김 현상이 해결될 수 있습니다. -AVC (H.264)의 최대 화질 값은 1080p이며 동영상을 재생하면 VP9 또는 AV1보다 더 많은 인터넷 데이터가 사용됩니다." - • 오디오 트랙 메뉴가 표시되지 않습니다.\n• 안정적인 볼륨 메뉴가 비활성화된 채로 잠겨있습니다. - • 오디오 트랙 메뉴가 표시되지 않습니다.\n• 안정적인 볼륨 메뉴가 비활성화된 채로 잠겨있습니다. - "• 영화 또는 유료 동영상이 재생되지 않을 수 있습니다.\n• 되감기가 가능한 실시간 스트림이 라이브 중인 시점이 아닌 처음부터 재생될 수 있습니다." +AVC (H.264)의 최대 화질 값은 1080p이며 동영상을 재생하면 VP9 또는 AV1보다 더 많은 데이터가 사용됩니다." + "• 오디오 트랙 메뉴가 표시되지 않습니다.\n• 안정적인 볼륨 메뉴가 비활성화된 채로 잠겨있습니다." + "• 오디오 트랙 메뉴가 표시되지 않습니다.\n• 안정적인 볼륨 메뉴가 비활성화된 채로 잠겨있습니다." + "• 영화 또는 유료 동영상이 재생되지 않을 수 있습니다.\n• 되감기가 가능한 실시간 스트림이 라이브 중인 시점이 아닌 처음부터 재생될 수 있습니다.\n• 동영상이 1초 일찍 종료될 수 있습니다.\n• OPUS 오디오 코덱이 지원되지 않습니다." 알려진 문제점 • 동영상이 재생되지 않을 수 있습니다. \'스트리밍 데이터를 가져오는 데 사용되는 클라이언트\'가 전문 통계에서 숨겨집니다. @@ -1507,7 +1544,7 @@ AVC (H.264)의 최대 화질 값은 1080p이며 동영상을 재생하면 VP9 스와이프 한계치 오버레이 투명도 값을 지정할 수 있습니다. (0–255) 오버레이 투명도 - 스와이프 영역 크기는 50 보다 클 수 없으므로 기본값으로 초기화합니다. + 스와이프 영역 크기는 50 보다 클 수 없습니다. 스와이프를 할 수 있는 화면 영역 크기를 지정할 수 있습니다. (백분율)\n\n알림: \'두 번 탭하여 탐색\' 제스처의 화면 영역 크기도 변경됩니다. 스와이프 오버레이 화면 크기 오버레이 텍스트 크기를 지정할 수 있습니다. @@ -1526,10 +1563,14 @@ AVC (H.264)의 최대 화질 값은 1080p이며 동영상을 재생하면 VP9 만들기 버튼과 알림 버튼 위치 교환하기 "이 설정을 비활성화하면 서버에서 더 많은 광고가 로드될 수 있습니다. -또한 Shorts에서 광고가 더 이상 차단되지 않습니다. +또한, Shorts에서 광고가 더 이상 숨겨지지 않습니다. 이 설정이 적용되지 않는 경우에는 시크릿 모드로 전환해 보세요." YouTube + RVX Music + %s 이 설치되어 있지 않습니다. 설치하세요. + 이 기기에 설치된 RVX Music 앱 패키지명을 설정하세요. + RVX Music 앱 패키지명 • 시청 기록이 차단됩니다. "• Google 계정의 시청 기록 설정을 따릅니다. • '광고 차단기', '광고 & 추적 차단 기능이 내장된 DNS 또는 VPN'으로 인해 시청 기록이 작동되지 않을 수 있습니다." diff --git a/src/main/resources/youtube/translations/pl-rPL/missing_strings.xml b/src/main/resources/youtube/translations/pl-rPL/missing_strings.xml new file mode 100644 index 000000000..36c253723 --- /dev/null +++ b/src/main/resources/youtube/translations/pl-rPL/missing_strings.xml @@ -0,0 +1,12 @@ + + + Save music button is shown. + Save music button is hidden. + Hide Save music button + Stickers are shown. + Stickers are hidden. + Hide stickers + MMT Orange + MMT Pink + MMT Turquoise + diff --git a/src/main/resources/youtube/translations/pl-rPL/strings.xml b/src/main/resources/youtube/translations/pl-rPL/strings.xml index 87a76d2f9..e86fe993b 100644 --- a/src/main/resources/youtube/translations/pl-rPL/strings.xml +++ b/src/main/resources/youtube/translations/pl-rPL/strings.xml @@ -21,6 +21,7 @@ Kontynuuj i wyłącz optymalizację baterii." Stuknij tutaj, aby dowiedzieć się więcej o DeArrow." DeArrow + Nieprawidłowy adres URL API DeArrow. Adres URL punktu końcowego do miniaturek DeArrow Punkt końcowy API DeArrow Ukryty @@ -83,15 +84,18 @@ Stuknij tutaj, aby dowiedzieć się więcej o DeArrow." Na żywo Filmy Muzyka - Pokój gier Wyszukiwanie Shortsy Sport Subskrypcje Na czasie Do obejrzenia - Nieprawidłowa strona startowa, zresetowano do domyślnej. Strona startowa + Strona główna zmienia się tylko raz + "Strona główna zawsze się zmienia + +Ograniczenie: Przycisk wstecz na pasku narzędzi może nie działać." + Działanie zmieniania strony głównej Domyślny Premium Zmień nagłówek YouTube @@ -104,11 +108,11 @@ Stuknij tutaj, aby dowiedzieć się więcej o DeArrow." Stary Własny Wygląd menu od prędkości odtwarzania - Niestandardowe prędkości muszą by mniejsze niż %sx. Przywrócono domyślne wartości. - Nieprawidłowe niestandardowe prędkości odtwarzania. Przywrócono domyślne wartości. + Niestandardowe prędkości muszą by mniejsze niż %sx. + Nieprawidłowe niestandardowe prędkości odtwarzania. Dodaj lub zmień dostępne prędkości odtwarzania Edytuj niestandardowe prędkości odtwarzania - Przezroczystość nakładki odtwarzacza musi wynosić między 0 a 100. Przywrócono domyślną wartość. + Przezroczystość nakładki odtwarzacza musi wynosić między 0 a 100. Wartość przezroczystości musi wynosić między 0 a 100, gdzie 0 oznacza przezroczystość Niestandardowa przezroczystość nakładki Wpisz kod hex koloru paska postępu filmu @@ -188,6 +192,9 @@ Ograniczenie: To ustawienie może nie działać dla filmów bez baneru 'Słuchaj Włączone Wyłączone Animacje liczb + Włączona + Wyłączona + Animacja przycisku polubienia "Wyłącz 'Odtwarzam 2x szybciej' podczas przytrzymywania. Notki: @@ -207,7 +214,7 @@ Notki: • Maksymalną rozdzielczością filmów jest 1080p • Odtwarzanie filmów wykorzystuje więcej danych internetowych niż VP9 -• Aby filmy w HDR się odtwarzały, będą one nadal używać kodeka VP9" +• Kodek VP9 jest używany do filmów z HDR" Wyłącz kodek VP9 Wyłączony "Włączony @@ -306,6 +313,7 @@ Opcja rozwijania opisu filmu może nie działać, jeśli wprowadzony ciąg znak Automatycznie Otwieraj opisy filmów Czy chcesz kontynuować? + Przywrócono domyślne wartości. Uruchom ponownie, aby wczytać poprawnie układ aplikacji Odśwież i uruchom ponownie Nie udało się wyeksportować ustawień. @@ -579,6 +587,9 @@ Słowa z wielkimi literami w środku muszą być wpisane z odpowiednią wielkoś Widoczne Ukryte Półki z filmami kinowymi + Widoczny + Ukryty + Pasek nawigacji Widoczny Ukryty Przycisk od przesyłania @@ -740,6 +751,12 @@ Słowa z wielkimi literami w środku muszą być wpisane z odpowiednią wielkoś Widoczne Ukryte Rekomendacje YouTube na końcu filmu + Widoczne + Ukryte + Powiązane filmy + "Ustawienie te ogranicza maksymalną ilość układów aplikacji, jakie mogą być załadowane na ekranie odtwarzacza. + +Jeśli układ ekranu odtwarzacza zmieni się w skutek zmian po stronie serwera, niepożądane układy mogą być ukryte na ekranie odtwarzacza." Widoczny Ukryty Przycisk od remiksowania @@ -804,6 +821,9 @@ Napisy" Widoczne Ukryte Etykiety z linkami do całych filmów + Widoczny + Ukryty + Przycisk od greenscreena Widoczne Ukryte Panele z informacjami @@ -837,9 +857,6 @@ Napisy" Widoczny Ukryty Przycisk od remiksowania - Widoczny - Ukryty - Przycisk od zapisywania dźwięku do playlisty Widoczny Ukryty Przycisk od sugestii wyszukiwań @@ -946,24 +963,28 @@ Autoodtwarzanie można zmienić w ustawieniach YouTube: Widoczne Ukryte Transkrypcje + "Ukryj filmy z etykietą WKRÓTCE. + +Uwaga: Włączenie tego ustawienia ukryje też przycisk 'Powiadom mnie'." + Ukryj zaplanowane filmy Widoczne Ukryte - Na stronie głównej Reklamy w filmach - Włączone + "Strona główna / subskrypcje / wyniki wyszukiwania są filtrowane, by ukrywać filmy z ilością wyświetleń mniejszą bądź większą od określonej liczby. + +Ograniczenia: +• Shortsy nie mogą zostać ukryte +• Filmy z 0 wyświetleń nie są filtrowane" + O filtrowaniu filmów po wyświetleniach Wyłączone - Włączone + Włączone + Na stronie głównej Wyłączone + Włączone W wynikach wyszukiwania - Włączone Wyłączone + Włączone Na stronie subskrypcji - Filmy o czasie trwania większym od tej liczby zostaną ukryte - Dłuższe od czasu trwania - Filmy o czasie trwania mniejszym od tej liczby zostaną ukryte - Krótsze od czasu trwania - Ukrywa filmy krótsze lub dłuższe od czasu trwania.\n\nZnany problem: Nie ukrywa filmów w rekomendacjach YouTube na końcach filmów - zamiast tego ukrywa czas. - Ukryj filmy na podstawie czasu trwania Ukrywa rekomendowane filmy, które mają mniejszą ilość wyświetleń niż zadeklarowana.\n\nZnany problem: Filmy z zerem wyświetleń nie są filtrowane. Ukryj rekomendowane filmy według ilości wyświetleń Filmy z wyświetleniami większymi niż ta liczba zostaną ukryte @@ -971,12 +992,6 @@ Autoodtwarzanie można zmienić w ustawieniach YouTube: Filmy z wyświetleniami mniejszymi niż ta liczba zostaną ukryte Mniej popularne tys. -> 1 000\nmln -> 1 000 000\nmld - > 1 000 000 000\n wyświetleń-> views - O filtrowaniu filmów po wyświetleniach - "Strona główna / subskrypcje / wyniki wyszukiwania są filtrowane, by ukrywać filmy z ilością wyświetleń mniejszą bądź większą od określonej liczby. - -Ograniczenia: -• Shortsy nie mogą zostać ukryte -• Filmy z 0 wyświetleń nie są filtrowane" Określ swój szablon językowy dla liczby wyświetleń pod każdym filmem w interfejsie użytkownika. Każdy klucz (litera/słowo w twoim języku) - > wartość (znaczenie klucza) musi znajdować się w nowej linii. Klucze muszą znajdować się przed znakiem \"->\". Jeśli zmienisz język aplikacji, musisz zresetować to ustawienie.\n\nPrzykłady:\nAngielski: 10K views = K -> 1000, views -> views\nPolski: 10 tys. wyświetleń = tys -> 1000, wyświetleń -> views Wyświetl klucze Widoczne @@ -1029,7 +1044,7 @@ Ograniczenia: Widoczne Ukryte Podteksty - Przezroczystość nakładki miniodtwarzacza musi wynosić między 0 a 100. Przywrócono domyślną wartość. + Przezroczystość nakładki miniodtwarzacza musi wynosić między 0 a 100. Wartość przezroczystości musi wynosić między 0 a 100, gdzie 0 oznacza przezroczystość Przezroczystość nakładki Oryginalny @@ -1070,13 +1085,19 @@ Stuknij i przytrzymaj, by otworzyć okno ustawień białej listy. Natywne pobieranie Zewnętrzna aplikacja Metoda pobierania filmów + YouTube Music jest wymagane do zmiany tego ustawienia. +Stuknij tutaj, by pobrać YouTube Music. + Wymaganie wstępne + YouTube Music + RVX Music + Aplikacja otwierana przyciskiem do YouTube Music Wykluczone Zawarte Normalna Przyciski akcji Dodatkowe ustawienia Animacje / Przesyłanie opinii - Filtrowanie według czasu trwania + Przycisk od pobierania Ustawienia Eksperymentalne Ograniczenia regionu dla obrazów Zaimportuj / Wyeksportuj jako plik @@ -1088,6 +1109,7 @@ Stuknij i przytrzymaj, by otworzyć okno ustawień białej listy. Pod paskiem postępu filmu Rekomendowane filmy Półki z Shortsami + Sugerowane akcje Użyte narzędzie Filtr ilości wyświetleń Ukryj bądź pokaż elementy w menu konta i zakładki Ty @@ -1118,13 +1140,15 @@ Stuknij i przytrzymaj, by otworzyć okno ustawień białej listy. Ogólne Wyłącz lub włącz wibracje Wibracje + Nadpisuje działanie przycisków w aplikacji + Zmień działanie przycisków Ustawienia importu oraz eksportu Zaimportuj / Wyeksportuj ustawienia Zmień styl miniodtwarzacza w aplikacji Miniodtwarzacz Pozostałe - Ukryj lub pokazuj przyciski nawigacji - Przyciski nawigacji + Ukryj lub pokazuj przyciski nawigacji + Pasek nawigacji Informacje na temat zastosowanych łatek. Informacje o łatkach Ukryj lub pokazuj przyciski w odtwarzaczu @@ -1153,13 +1177,14 @@ Stuknij i przytrzymaj, by otworzyć okno ustawień białej listy. Filmy Zmień ustawienia związane z historią oglądania Historia oglądania - Górny margines przycisków na dole odtwarzacza musi wynosić między 0 a 32. Przywrócono domyślną wartość. + Górny margines przycisków na dole odtwarzacza musi wynosić między 0 a 32. Skonfiguruj odstęp od paska postępu filmu do kontenera szybkich akcji, w zakresie od 0 do 32. Górny margines przycisków na dole odtwarzacza "Odrzucaj kodek AV1 programu. Po około 20 sekundach ładowania kodek zostanie zmieniony." Odrzucaj kodek AV1 programu Ten sposób powoduje około 20 sekund ładowania. + Przesunięcie Zmiany prędkości odtwarzania dotyczą tylko bieżącego filmu Zmiany prędkości odtwarzania dotyczą wszystkich filmów Zapamiętuj zmiany prędkości odtwarzania @@ -1424,9 +1449,12 @@ Ograniczenie: Liczba łapek w dół może nie być widoczna, gdy użytkownik nie Serce (jaśniejsze) Ukryta Animacja po dwukrotnym kliknięciu - Dolny margines panelu meta musi wynosić między 0 a 64. Przywrócono domyślne wartości. + Dolny margines panelu meta musi wynosić między 0 a 64. Skonfiguruj odstęp od paska postępu filmu do panelu meta, w zakresie od 0 do 64. Dolny margines panelu meta + Wysokość musi wynosić od 0 do 100 (%). + Zmienia wysokość pustej przestrzeni po ukryciu paska nawigacyjnego, od 0 do 100 (%) + Wysokość pustego miejsca (procentowa) Naciśnij i przytrzymaj czas, aby zmienić status powtarzania Shortsów Akcja po długim naciśnięciu czasu "Tytuły filmów w trybie pełnoekranowym są widoczne. @@ -1447,7 +1475,7 @@ Informacje: Komunikaty o pominięciu Włączenie tej opcji może spowodować problemy z odtwarzaniem filmów. Pominięto wstępnie załadowany bufor. - Przezroczystość nakładki prędkości odtwarzania musi wynosić między 0 a 8.0. Przywrócono domyślną wartość. + Przezroczystość nakładki prędkości odtwarzania musi wynosić między 0 a 8.0. Wartość nakładki prędkości odtwarzania między 0, a 8. Wartość nakładki prędkości odtwarzania "Oszukuje wersję aplikacji do starszej wersji. @@ -1481,10 +1509,13 @@ Wysoka jakość może być odblokowana na niektórych filmach, które wymagają "Włączenie tego ustawienia może poprawić żywotność baterii i naprawić zacinanie się filmów. Kodek AVC (H.264) obsługuje maksymalnie rozdzielczość 1080p, a odtwarzanie filmów wykorzystuje więcej danych internetowych niż VP9 i AV1." - • Brakuje menu od ścieżki dźwiękowej - • Brakuje menu od ścieżki dźwiękowej + "• Brakuje menu od ścieżki dźwiękowej" + "• Brakuje menu od ścieżki dźwiękowej +• Stabilna głośność jest niedostępna" "• Filmy kinowe lub płatne filmy mogą się nie odtwarzać -• Transmisje na żywo rozpoczynają się od początku" +• Transmisje na żywo rozpoczynają się od początku +• Filmy mogą kończyć się o 1 sekundę wcześniej +• Kodek opus jest niedostępny" Efekty uboczne oszukiwania • Filmy mogą się nie odtwarzać Ukryta @@ -1507,7 +1538,7 @@ Kodek AVC (H.264) obsługuje maksymalnie rozdzielczość 1080p, a odtwarzanie fi Minimalna długość przesunięcia Widoczność tła nakładki przesuwania Widoczność tła przesuwania - Rozmiar obszaru przesuwania nie może być większy niż 50. Przywrócono domyślną wartość. + Rozmiar obszaru przesuwania nie może być większy niż 50. Procentowa wartość obszaru ekranu, gdzie można przesuwać.\n\nNotka: Zmieni to także rozmiar obszaru ekranu dla gestu podwójnego kliknięcia, aby przewinąć film. Rozmiar obszaru przesuwania Rozmiar tekstu nakładki przesuwania @@ -1530,6 +1561,10 @@ Dodatkowo, reklamy nie będą już blokowane w Shortsach. Jeśli opcja nie przynosi skutku, spróbuj przełączyć się na tryb incognito." Domyślny + RVX Music + %s nie jest zainstalowany. Proszę go zainstalować. + Nazwa pakietu zainstalowanego RVX Music + Nazwa pakietu RVX Music • Historia oglądania nie działa "• Stosuje się do ustawień historii oglądania konta Google • Historia oglądania może nie działać przy używaniu DNS lub VPN" diff --git a/src/main/resources/youtube/translations/pt-rBR/missing_strings.xml b/src/main/resources/youtube/translations/pt-rBR/missing_strings.xml index 26b7e32ef..4334aeca9 100644 --- a/src/main/resources/youtube/translations/pt-rBR/missing_strings.xml +++ b/src/main/resources/youtube/translations/pt-rBR/missing_strings.xml @@ -2,28 +2,21 @@ Don\'t show again Courses / Learning - Playables Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views + Save music button is shown. + Save music button is hidden. + Hide Save music button + Stickers are shown. + Stickers are hidden. + Hide stickers MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black diff --git a/src/main/resources/youtube/translations/pt-rBR/strings.xml b/src/main/resources/youtube/translations/pt-rBR/strings.xml index cc2ad1991..a28066e59 100644 --- a/src/main/resources/youtube/translations/pt-rBR/strings.xml +++ b/src/main/resources/youtube/translations/pt-rBR/strings.xml @@ -22,6 +22,7 @@ Se ativado, os URLs dos vídeos serão enviados ao servidor API e nenhum outro d Toque aqui para saber mais sobre o DeArrow." DeArrow + URL da API DeArrow inválida. A URL do ponto final do cache de miniaturas DeArrow. DeArrow API endpoint Notificação flutuante não exibida se Derow não estiver disponível. @@ -89,8 +90,12 @@ Toque aqui para saber mais sobre o DeArrow." Inscrições Em alta Assistir mais tarde - Página inicial inválida, redefinindo para o padrão. Alterar a página inicial + A página inicial muda apenas uma vez. + "Página inicial sempre muda. + +Limitação: O botão voltar na barra de ferramentas pode não funcionar." + Alterar tipo de página inicial Cabeçalhos genéricos estão ativados. O cabeçalho premium está ativado. Alterar cabeçalho do YouTube @@ -187,6 +192,9 @@ Limitação: esta configuração pode não se aplicar a vídeos que não incluem As rolagens números são animadas. As rolagens números não são animadas. Desativar animações de rolagem de números + A animação da fonte está ativada acima do botão Curtir. + A animação da fonte está desativada acima do botão Curtir. + Desativar animação do botão Curtir "Desativar o 'Reproduzindo na velocidade 2x' enquanto segurar. Nota: @@ -304,6 +312,7 @@ Estes caracteres variam dependendo do seu idioma. A descrição do vídeo é expandida automaticamente. Expandir descrição do vídeo Você deseja continuar? + Redefinir para os valores padrão. Reinicie para carregar o layout normalmente Atualizar e reiniciar Falha ao exportar configurações. @@ -570,6 +579,9 @@ Palavras com letras maiúsculas no meio devem ser inseridas com maiúsculas (ou Os painéis de filmes serão exibidos. Os painéis de filmes estão ocultos. Ocultar painel de filmes + A barra de navegação será exibida. + A barra de navegação está oculta. + Ocultar barra de navegação O botão de criação será exibido. O botão de criação está oculto. Ocultar botão de criação @@ -732,6 +744,12 @@ Palavras com letras maiúsculas no meio devem ser inseridas com maiúsculas (ou A sobreposição de vídeo relacionado será exibida. A sobreposição de vídeo relacionado está oculta. Ocultar sobreposição de vídeo relacionado + Os vídeos relacionados serão exibidos. + Os vídeos relacionados estão ocultos. + Ocultar vídeos relacionados + "Esta configuração limita o número máximo de layouts que podem ser carregados na tela do reprodutor. + +Se o layout da tela do reprodutor mudar devido a alterações no lado do servidor, layouts não intencionais podem ficar ocultos na tela do reprodutor." O botão remix será exibido. O botão remix está oculto. Ocultar botão remix @@ -796,6 +814,9 @@ Legendas" O rótulo de link de vídeo será exibido. O rótulo de link de vídeo está oculto. Ocultar rótulo completo do link do vídeo + O botão de tela verde será exibido. + O botão de tela verde está oculto. + Ocultar botão de tela verde Os painéis de informação serão exibidos. Os painéis de informação estão ocultos. Ocultar painéis de informações @@ -829,9 +850,6 @@ Legendas" O botão remix será exibido. O botão remix está oculto. Ocultar botão remix - Salvar música na lista de reprodução será exibida. - Salvar música na lista de reprodução está oculta. - Ocultar botão salvar música na lista de reprodução O botão de sugestões de pesquisa será exibido. O botão de sugestões de pesquisa está oculto. Ocultar botão de sugestões de pesquisa @@ -938,15 +956,28 @@ A reprodução automática pode ser alterada nas configurações do YouTube: As seções de transcrição serão exibidas. As seções de transcrição estão ocultas. Ocultar seções de transcrição + "Ocultar vídeos com a etiqueta PRÓXIMO. + +Nota: Ativar isso também oculta o botão Notificar-me." + Ocultar PRÓXIMO vídeo Os anúncios de vídeo serão exibidos. Os anúncios de vídeo estão ocultos. Ocultar anúncios de vídeo - Vídeos com duração maior que este número serão ocultados. - Maior que a duração - Vídeos com duração menor que este número serão ocultados. - Menor que a duração - Ocultar vídeos com duração menor ou maior que.\n\nProblema conhecido: não ocultará vídeos nos vídeos relacionados no reprodutor, ao invés disso ocultará a marcação de tempo. - Ocultar vídeos baseado na duração + "Início / Inscrições / Resultados de pesquisa são filtrados para ocultar vídeos com visualização menor ou maior que um número especificado. + +Limitações: +• Shorts não podem ser ocultos. +• Vídeos com 0 visualizações não são filtrados." + Sobre a filtragem da contagem de visualizações + Os vídeos no feed de início não são filtrados. + Os vídeos no feed de início são filtrados. + Ocultar vídeos no feed de início por visualizações + Os resultados da pesquisa não são filtrados. + Os resultados da pesquisa são filtrados. + Ocultar resultados de pesquisa por visualizações + Os vídeos no feed de inscrições não são filtrados. + Os vídeos no feed de inscrições são filtrados. + Ocultar vídeos no feed de inscrições por visualizações Oculte vídeos recomendados com menos de um determinado número de visualizações. Ocultar vídeos recomendados por visualizações Vídeos com visualizações maiores que este número serão ocultados. @@ -1041,13 +1072,18 @@ Toque e segure para abrir a caixa de diálogo de configuração da lista branca. O botão de download de vídeo nativo abre o download nativo do aplicativo. O botão de download de vídeo nativo abre seu aplicativo de download externo. Substituir o botão de download de vídeo + O YouTube Music é necessário para substituir a ação do botão. Toque aqui para baixar o YouTube Music. + Pré-requisito + O botão do YouTube Music abre o aplicativo nativo. + O botão do YouTube Music abre o RVX Music. + Substituir botão do YouTube Music Excluído Incluído Normal Botões de ação Configurações adicionais Animação / Feedback - Filtro de duração + Botão de download Sinalizadores experimentais Restrições de imagem por região Importar / Exportar como arquivo @@ -1059,6 +1095,7 @@ Toque e segure para abrir a caixa de diálogo de configuração da lista branca. Ações rápidas Vídeo recomendado Painel de shorts + Ações sugeridas Ferramenta usada Filtro por contagem de visualização Ocultar ou mostrar elementos no menu de contas e na aba Você. @@ -1089,13 +1126,15 @@ Toque e segure para abrir a caixa de diálogo de configuração da lista branca. Geral Desativar ou ativar o retorno tátil. Retorno tátil + Substitui a ação de clique dos botões do aplicativo. + Botões hook Importar ou exportar configurações. Importar / Exportar configurações Alterar o estilo do reprodutor minimizado no aplicativo. Mini reprodutor Diversos - Ocultar ou mostrar componentes da seção de navegação. - Botões de navegação + Ocultar ou mostrar componentes da seção de navegação. + Barra de Navegação Informações sobre as modificações aplicadas. Informações do patch Oculte ou mostre botões em vídeos. @@ -1131,6 +1170,7 @@ Toque e segure para abrir a caixa de diálogo de configuração da lista branca. Após cerca de 20 segundos de buffer, muda para um codec diferente." Rejeitar resposta do codec AV1 do software O processo de fallback causa cerca de 20 segundos de buffer. + Desvio As alterações de velocidade de reprodução só se aplicam ao vídeo atual. As alterações de velocidade de reprodução aplicam-se a todos os vídeos. Lembrar alterações na velocidade de reprodução @@ -1392,6 +1432,9 @@ Limitação: Dislikes pode não aparecer no modo incógnito." Margem inferior do painel meta deve estar entre 0-64. Voltar aos valores padrão. Configure o espaçamento da barra de busca para o painel meta, entre 0-64. Margem inferior do painel meta + A porcentagem de altura deve estar entre 0-100 (%). + Configura a porcentagem de altura do espaço vazio esquerdo quando a barra de navegação está oculta, entre 0 e 100 (%). + Porcentagem de altura do espaço vazio Pressione e segure a marcação de tempo para alterar o status de repetição do Shorts. Ação de toque longo na marcação de tempo "Exibe a seção de título do vídeo em tela cheia. @@ -1445,8 +1488,8 @@ A alta qualidade pode ser desbloqueada em alguns vídeos que exigem dimensões e "Ativar isto pode melhorar a duração da bateria e corrigir travamentos na reprodução. AVC (H. 64) tem uma resolução máxima de 1080p, e a reprodução de vídeo usará mais dados de internet do que VP9 ou AV1." - • O menu de faixa de áudio está faltando. - • O menu de faixa de áudio está faltando. + "• O menu de faixa de áudio está faltando." + "• O menu de faixa de áudio está faltando." "• Filmes ou vídeos pagos podem não reproduzir." Efeitos colaterais da falsificação • O vídeo pode não reproduzir. @@ -1493,6 +1536,10 @@ Além disso, os anúncios não serão mais bloqueados no Shorts. Se essa configuração não surtir efeito, tente alternar para o modo anônimo." Padrão + RVX Music + %s não está instalado. Por favor, instale-o. + Nome do pacote do RVX Music instalado. + Nome do pacote do RVX Music • O histórico de exibição não funciona. "• Segue as configurações do histórico de exibição da conta do Google. • O histórico de exibição pode não funcionar devido ao DNS ou à VPN." diff --git a/src/main/resources/youtube/translations/ru-rRU/missing_strings.xml b/src/main/resources/youtube/translations/ru-rRU/missing_strings.xml index 0511088d7..606e146ff 100644 --- a/src/main/resources/youtube/translations/ru-rRU/missing_strings.xml +++ b/src/main/resources/youtube/translations/ru-rRU/missing_strings.xml @@ -1,23 +1,25 @@ + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button + Save music button is shown. + Save music button is hidden. + Hide Save music button + Stickers are shown. + Stickers are hidden. + Hide stickers + MMT Orange + MMT Pink + MMT Turquoise Xisr Yellow + Suggested actions + Offset Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment diff --git a/src/main/resources/youtube/translations/ru-rRU/strings.xml b/src/main/resources/youtube/translations/ru-rRU/strings.xml index 6d8e8dd34..7b3514941 100644 --- a/src/main/resources/youtube/translations/ru-rRU/strings.xml +++ b/src/main/resources/youtube/translations/ru-rRU/strings.xml @@ -23,6 +23,7 @@ Нажмите здесь, чтобы узнать больше о DeArrow." О \"DeArrow\" + Неверный URL API для миниатюр DeArrow. URL кэша миниатюр DeArrow. DeArrow API Уведомление при недоступности DeArrow API отключено. @@ -86,15 +87,17 @@ Трансляции Фильмы Музыка - Игротека Поиск Shorts Спорт Подписки В тренде Смотреть позже - Недопустимая начальная страница, сброс по умолчанию. Начальная страница + Начальная страница изменится один раз. + "Начальная страница постоянно изменяется. +Ограничение: Кнопка возврат может не работать." + Тип начальной страницы Включен обычный логотип. Включен логотип Premium. Логотип YouTube @@ -309,6 +312,7 @@ Описание видео автоматически развернуто. Развернуть описание видео Подтверждаете действие? + К значениям по умолчанию. Перезапустить для правильной загрузки интерфейса? Перезапустить для применения? Не удалось экспортировать настройки. @@ -581,6 +585,9 @@ Shorts Секции фильмов отображены. Секции фильмов скрыты. Секции фильмов + Панель навигации отображена. + Панель навигации скрыта. + Панель навигации Кнопка \"Создать\" отображена. Кнопка \"Создать\" скрыта. Кнопка \"Создать\" @@ -743,6 +750,12 @@ Shorts Предложение о похожих видео отображено. Предложение о похожих видео скрыто. Предложение о похожих видео + Похожие видео отображены. + Похожие видео скрыты. + Похожие видео + "Этот параметр ограничивает максимальное количество макетов, которые могут быть загружены на экране плеера. + +Если макет экрана проигрывателя меняется из-за изменений на стороне сервера, незапланированные макеты могут быть скрыты на экране плеера." Кнопка \"Ремикс\" отображена. Кнопка \"Ремикс\" скрыта. Кнопка \"Ремикс\" @@ -845,9 +858,6 @@ Shorts Кнопка \"Ремикс\" отображена. Кнопка \"Ремикс\" скрыта. Кнопка \"Ремикс\" - Кнопка \"Сохранить звук в плейлист\" отображена. - Кнопка \"Сохранить звук в плейлист\" скрыта. - Кнопка \"Сохранить звук в плейлист\" Кнопка \"Подсказки поиска\" отображена. Кнопка \"Подсказки поиска\" скрыта. Кнопка \"Подсказки поиска\" @@ -955,15 +965,27 @@ Shorts Секция \"Расшифровка видео\" отображена. Секция \"Расшифровка видео\" скрыта. Секция \"Расшифровка видео\" + "Скрывает видео с меткой \"подготовленное\" к воспроизведению. +Примечание: Также скроется кнопка \"Уведомить\"." + Подготовленное видео Реклама в видео отображена. Реклама в видео скрыта. Реклама в видео - Видео с большей продолжительностью будут скрыты. - Продолжительность больше указанной - Видео с меньшей продолжительностью будут скрыты. - Продолжительность меньше указанной - Скрывает видео с продолжительностью меньше или больше заданной. - Скрыть видео по продолжительности + "Главная / Подписки / Результаты поиска, фильтруются, чтобы скрыть видео с просмотрами отличающиеся от введенного числа. + +Ограничения: +• Shorts нельзя скрыть. +• Видео без просмотров не обрабатываются." + О фильтре подсчета просмотров + Фильтр видео в \"Главная\", по просмотрам, отключен. + Фильтр видео в \"Главная\", по просмотрам, включен. + Фильтр видео в \"Главная\" по просмотрам + Фильтр результатов поиска, по просмотрам, отключен. + Фильтр результатов поиска, по просмотрам, включен. + Фильтр результатов поиска по просмотрам + Фильтр видео в подписках, по просмотрам, отключен. + Фильтр видео в подписках, по просмотрам, включен. + Фильтр видео в подписках по просмотрам Скрывает рекомендованные видео с заданным количеством просмотров. Скрыть рекомендованные видео по количеству просмотров Видео с большим количеством просмотров будут скрыты. @@ -1073,13 +1095,19 @@ Shorts Кнопка \"Скачать\" использует внутренний загрузчик. Кнопка \"Скачать\" использует внешний загрузчик. Действие кнопки \"Скачать\" для видео + Для переопределения кнопки требуется YouTube Music. +Нажмите здесь, чтобы загрузить YouTube Music. + Обязательное условие + Кнопка YouTube Music открывает встроенное приложение. + Кнопка YouTube Music открывает RVX Music. + Переопределить кнопку YouTube Music Не применён Применён Обычная Кнопки действий Дополнительные настройки Анимация / Обратная связь - Фильтр по продолжительности + Кнопка \"Скачать\" Экспериментальные опции Ограничения изображений по региону Импорт/экспорт в виде файла @@ -1121,13 +1149,15 @@ Shorts Основные настройки Отключить или включить виброотклик по событиям. Виброотклик + Переопределяет действие нажатия кнопок в приложении. + Настройки действий кнопок Настройки импорта/экспорта. Импорт/экспорт настроек Стиль мини-плеера. Мини-плеер Разное - Настройки кнопок навигации. - Кнопки навигации + Настроить компоненты панели навигации. + Панель навигации Информация о примененных патчах. Информация о патчах Скрыть или показать кнопки в видео. @@ -1426,6 +1456,9 @@ Shorts Отступ от шкалы воспроизведения до \"мета\" панели. Диапазон от 0 до 64. Нижнее поле отступа \"мета\" панели + Высота должна быть от 0 до 100 (%). + Настраивает высоту отступа, когда панель навигации скрыта, от 0 до 100 (%). + Процент высоты отступа Нажать и удерживать метку времени - изменить статус повтора Shorts. Длительное нажатие метки времени "Показывает секцию заголовка видео в полноэкранном режиме. @@ -1480,8 +1513,8 @@ Shorts "Включение - может улучшить время работы батареи и исправить задержки воспроизведения. AVC (H.264) имеет максимальное разрешение 1080p, и будет использовать больше интернет данных, чем VP9 или AV1." - • Меню \"Звуковая дорожка\" не доступно. - • Меню \"Звуковая дорожка\" VR не доступно. + "• Меню \"Звуковая дорожка\" не доступно." + "• Меню \"Звуковая дорожка\" VR не доступно." "• Фильмы или платные видео могут не проигрываться." Эффекты от подмены • Видео может не воспроизводиться. @@ -1529,6 +1562,10 @@ AVC (H.264) имеет максимальное разрешение 1080p, и Если эта настройка не вступила в силу, попробуйте перейти в режим инкогнито." По умолчанию + RVX Music + %s не установлен. Установите его. + Название пакета установленной RVX Music. + Имя пакета RVX Music • История просмотра не работает. "• Статус истории просмотров обычный. • История просмотров может не работать с DNS или VPN." diff --git a/src/main/resources/youtube/translations/tr-rTR/missing_strings.xml b/src/main/resources/youtube/translations/tr-rTR/missing_strings.xml index bf7c53888..319b071fe 100644 --- a/src/main/resources/youtube/translations/tr-rTR/missing_strings.xml +++ b/src/main/resources/youtube/translations/tr-rTR/missing_strings.xml @@ -1,11 +1,16 @@ Don\'t show again + Invalid DeArrow API URL. In-app share sheet is used. System share sheet is used. Change share sheet Courses / Learning - Playables + Start page changes only once. + "Start page always changes. + +Limitation: Back button on the toolbar may not work." + Change start page type "Auto switch mix playlists is enabled when autoplay is turned on. Autoplay can be changed in YouTube settings: @@ -18,13 +23,17 @@ Settings → Autoplay → Autoplay next video" Limitation: This setting may not apply to videos that do not include the 'Listen on YouTube Music' banner." Disable playback speed for music + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation VP9 codec is enabled. "VP9 codec is disabled. • Maximum resolution is 1080p. • Video playback will use more internet data than VP9. -• To get HDR playback, HDR video still uses the VP9 codec." +• VP9 codec is still used for HDR video." Disable VP9 codec + Reset to default values. Package name of your installed external downloader app, such as YTDLnis. Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name @@ -38,24 +47,46 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Add quotes to use keyword: %s. Keyword has conflicting declarations: %s. Keyword is too short and requires quotes: %s. + Navigation bar is shown. + Navigation bar is hidden. + Hide navigation bar + Related videos are shown. + Related videos are hidden. + Hide related videos + "This setting limits the maximum number of layouts that can be loaded on the player screen. + +If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button Location button is shown. Location button is hidden. Hide location button + Save music button is shown. + Save music button is hidden. + Hide Save music button Search suggestions button is shown. Search suggestions button is hidden. Hide search suggestions button Shopping button is shown. + Stickers are shown. + Stickers are hidden. + Hide stickers Use template button is shown. Use template button is hidden. Hide Use template button Use this sound button is shown. Use this sound button is hidden. Hide Use this sound button + "Hide videos with UPCOMING label. + +Note: Enabling this also hides the Notify me button." + Hide UPCOMING video "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: @@ -73,6 +104,9 @@ Limitations: Hide subscription videos by views MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black @@ -81,8 +115,20 @@ Limitations: If shown, the native playlist download button opens the native in-app downloader. Native playlist download button is always shown, and in public playlists, it opens your external downloader. Native video download button opens the native in-app downloader. + YouTube Music is required to override button action. Tap here to download YouTube Music. + Prerequisite + YouTube Music button opens the native app. + YouTube Music button opens the RVX Music. + Override YouTube Music button + Download button + Suggested actions + Overrides the click action of in-app buttons. + Hook buttons + Hide or show navigation bar section components. + Navigation bar Spoof the streaming data to prevent playback issues. Spoof streaming data + Offset A toast will not be shown when changing the default playback speed. A toast will be shown when changing the default playback speed. Show a toast @@ -97,16 +143,23 @@ Limitations: Publish Created Segment Rewind by Specified Time (Default: 150ms) Tap here to view your segments. + Height percentage must be between 0-100 (%). + Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). + Height percentage of empty space iOS video codec is AVC (H.264), VP9, or AV1. iOS video codec is AVC (H.264). Force iOS AVC (H.264) "Enabling this might improve battery life and fix playback stuttering. AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - • Audio track menu is missing. - • Audio track menu is missing. + "• Audio track menu is missing. +• Stable volume is not available." + "• Audio track menu is missing. +• Stable volume is not available." "• Movies or paid videos may not play. -• Livestreams start from the beginning." +• Livestreams start from the beginning. +• Videos may end 1 second early. +• No opus audio codec." Spoofing side effects • Video may not play. Client used to fetch streaming data is hidden in Stats for nerds. @@ -130,6 +183,10 @@ Note: Enabling this also forcibly hides video ads." Also, ads will no longer be blocked in Shorts. If this setting do not take effect, try switching to Incognito mode." + RVX Music + %s is not installed. Please install it. + Package name of installed RVX Music. + RVX Music package name "• Follows the watch history settings of Google account. • Watch history may not work due to DNS or VPN." • Follows the watch history settings of Google account. diff --git a/src/main/resources/youtube/translations/tr-rTR/strings.xml b/src/main/resources/youtube/translations/tr-rTR/strings.xml index 3b5d4add2..24ceebe08 100644 --- a/src/main/resources/youtube/translations/tr-rTR/strings.xml +++ b/src/main/resources/youtube/translations/tr-rTR/strings.xml @@ -84,7 +84,6 @@ DeArrow hakkında daha fazla bilgi edinmek için buraya dokunun." Abonelikler Trendler Daha sonra izlenecekler - Başlangıç sayfası geçersiz, varsayılana dönülüyor. Başlangıç ​​sayfasını değiştir Genel başlıklar etkin. Premium başlık etkin. @@ -779,9 +778,6 @@ Altyazılar" \"Remix\" butonu gösteriliyor. \"Remix\" butonu gizleniyor. Remix düğmesini gizle - Sesi oynatma listesine kaydetme butonu gösteriliyor. - Sesi oynatma listesine kaydetme butonu gizleniyor - Sesi oynatma listesine kaydetme butonunu gizle \"Paylaş\" butonu gösteriliyor. \"Paylaş\" butonu gizleniyor. Paylaş butonunu gizle @@ -881,12 +877,6 @@ Otomatik oynatma YouTube ayarlarından değiştirilebilir: Video reklamları gösteriliyor Video reklamları gizleniyor Video reklamlarını gizle - Süresi bu sayıdan daha uzun olan videolar gizlenecektir. - Bu süreden daha uzun - Süresi bu sayıdan daha kısa olan videolar gizlenecektir. - Bu süreden daha kısa - Süresi daha kısa veya daha uzun olan videoları gizleyin.\n\nBilinen problem: Oynatıcı ile bağlantılı videoları gizlemez, bunun yerine zaman damgasını gizler. - Süresine göre videoları gizleyin Belirtilen görüntüleme sayısından daha az olan önerilen videoları gizleyin.\n\nBilinen sorun: 0 izleme alan videolar filtrelenmez. Önerilen videoları izlenmeye göre gizle Görüntüleme sayısı bu sayıdan fazla olan videolar gizlenecektir. @@ -983,7 +973,6 @@ Beyaz liste ayarı iletişim kutusunu açmak için dokunun ve basılı tutun.Eylem düğmeleri Ek ayarlar Animasyon / geri bildirim - Süre filtresi Deneysel Parametreler Resim bölgesi kısıtlamaları İçe / Dışa dosya olarak aktar @@ -1030,8 +1019,6 @@ Beyaz liste ayarı iletişim kutusunu açmak için dokunun ve basılı tutun.Uygulama içi simge durumuna küçültülmüş oynatıcının stilini değiştirin. Miniplayer Diğer Ayarlar - Gezinme çubuğu bölümü bileşenlerini gizleyin veya gösterin. - Navigasyon tuşları Uygulanmış Yamalar Hakkında Bilgi. Yama Bilgileri Videolardaki düğmeleri gizle veya göster. diff --git a/src/main/resources/youtube/translations/uk-rUA/missing_strings.xml b/src/main/resources/youtube/translations/uk-rUA/missing_strings.xml index d22a1f7f3..f82015e55 100644 --- a/src/main/resources/youtube/translations/uk-rUA/missing_strings.xml +++ b/src/main/resources/youtube/translations/uk-rUA/missing_strings.xml @@ -1,18 +1,6 @@ - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views + MMT Orange + MMT Pink + MMT Turquoise diff --git a/src/main/resources/youtube/translations/uk-rUA/strings.xml b/src/main/resources/youtube/translations/uk-rUA/strings.xml index fef40e440..87e85dbbb 100644 --- a/src/main/resources/youtube/translations/uk-rUA/strings.xml +++ b/src/main/resources/youtube/translations/uk-rUA/strings.xml @@ -15,6 +15,7 @@ Натисніть тут, щоб дізнатися більше про DeArrow." DeArrow + Некоректна URL API DeArrow. URL кінцевої точки кешу мініатюр DeArrow Кінцева точка API DeArrow Тост не показується, якщо DeArrow не доступний. @@ -77,15 +78,18 @@ Наживо Фільми Музика - Ігрова кімната Пошук YouTube Shorts Спорт Підписки Тенденції Переглянути пізніше - Недійсна початкова сторінка, скидається на стандартну. Змінити початкову сторінку + Початкова сторінка змінюється лише один раз. + "Початкова сторінка змінюється завжди. + +Застереження: Кнопка Назад на панелі інструментів не працює." + Тип зміни початкової сторінки Звичний заголовок увімкнено. Заголовок Premium увімкнено. Змінити заголовок YouTube @@ -98,11 +102,11 @@ Використовується висувне меню старого стилю. Використовується специфічний діалог. Тип меню користувацької швидкості відтворення - Користувацькі швидкості повинні бути менше ніж %s Використовуються типові значення. - Неправильні користувацькі швидкості відтворення. Використовуються типові значення. + Користувацькі швидкості повинні бути менше ніж %sx. + Неправильні користувацькі швидкості відтворення. Додати або змінити доступні швидкості відтворення Редагувати користувацькі швидкості відтворення - Непрозорість затемнення плеєра має бути в межах 0-100. Скинуто. + Непрозорість затемнення плеєра має бути в межах 0-100. Значення непрозорості в межах 0-100, де 0 це прозорий Користувацька непрозорість затемнення плеєра Введіть hex код кольору смуги прогресу. @@ -182,6 +186,9 @@ Лічильники анімовані. Лічильники не анімовані. Вимкнути анімації лічильників + Фонтанну анімацію увімкнено над кнопкою Подобається. + Фонтанну анімацію вимкнено над кнопкою Подобається. + Вимкнути анімацію кнопки Подобається "Вимикається 'Відтворення зі швидкістю 2x' під час утримання Зауваження: @@ -201,7 +208,7 @@ • Максимальна роздільна здатність - 1080p. • Відтворення відео використовуватиме більше інтернет даних ніж VP9. -• Щоб отримати відтворювання HDR, HDR відео використовує кодек VP9." +• Кодек VP9 все ще використовується для HDR відео." Вимкнути кодек VP9 Смугу прогресу Каїр вимкнено. "Смугу прогресу Каїр увімкнено. @@ -301,6 +308,7 @@ Опис відео розгортається автоматично. Розгортати опис відео Бажаєте продовжити? + Скинуто. Перезапустіть, щоб нормально завантажився макет Поновити й перезапустити Не вдалося експортувати налаштування. @@ -574,6 +582,9 @@ Полиці фільмів показується. Полиці фільмів приховано. Приховати полицю фільмів + Панель навігації показується. + Панель навігації приховано. + Приховати панель навігації Кнопку Створити показується. Кнопку Створити приховано. Приховати кнопку Створити @@ -735,6 +746,12 @@ Секцію \'Більше відео\' у контейнері швидких дій та пов\'язаних відео показується. Секцію \'Більше відео\' у контейнері швидких дій та пов\'язаних відео приховано. Приховати пов’язані відео + Пов\'язані відео показується. + Пов\'язані відео приховано. + Приховати пов’язані відео + "Це налаштування обмежує максимальну кількість, які можуть вантажитися на екран плеєра. + +Якщо екран плеєра змінюється через зміни на стороні сервера, можуть бути приховані ненавмисно на екрані плеєра." Кнопку Ремікс показується. Кнопку Ремікс приховано. Приховати кнопку Ремікс @@ -799,6 +816,9 @@ Мітку посилання відео показується. Мітку посилання відео приховано. Приховати мітку посилання на повне відео + Кнопку Зелений екран показується. + Кнопку Зелений екран приховано. + Приховати кнопку Зелений екран Інформаційні панелі показується. Інформаційні панелі приховано. Приховати інформаційні панелі @@ -832,9 +852,9 @@ Кнопку Ремікс показується. Кнопку Ремікс приховано. Приховати кнопку Ремікс - Зберегти звук в списку відтворення показується. - Зберегти звук в списку відтворення приховано. - Приховати кнопку Зберегти звук в списку відтворення + Кнопку Зберегти звук показується. + Кнопку Зберегти звук приховано. + Приховати кнопку Зберегти звук Кнопку пропозицій пошуку показується. Кнопку пропозицій пошуку приховано. Приховати кнопку пропозицій пошуку @@ -869,6 +889,9 @@ Мітку метаданих показується. Мітку метаданих приховано. Приховати мітку метаданих звуку + Стікери показується. + Стікери приховано. + Приховати стікери Кнопку Підписатися показується. Кнопку Підписатися приховано. Приховати кнопку Підписатися @@ -944,15 +967,28 @@ Секції Текст відео показується. Секції Текст відео приховано. Приховати секції Текст відео + "Приховати відео з міткою НЕЗАБАРОМ. + +Примітка: Увімкнення також приховає кнопку Сповістити." + Приховати відео НЕЗАБАРОМ Відеорекламу показується. Відеорекламу приховано. Приховати відеорекламу - Відео з тривалістю більше цього числа приховуватимуться. - Довші за тривалістю - Відео з тривалістю менше цього числа приховуватимуться. - Коротші за тривалістю - Приховати відео з меншою або більшою тривалістю.\n\nВідома проблема: Не приховуватимуться пов\'язані відео у плеєрі, натомість приховуватиметься мітку часу. - Приховати відео за тривалістю + "Головна/Підписки/Результати пошуку фільтрується, щоб приховати відео з переглядами менше або більше вказаної кількості. + +Застереження: +• YouTube Shorts неможливо приховати. +• Відео з 0 переглядів не фільтруються." + Про фільтрацію за переглядами + Відео у головній стрічці не фільтруються. + Відео у головній стрічці фільтруються. + Приховати відео на головній за переглядами + Результати пошуку не фільтрується. + Результати пошуку фільтрується. + Приховати результати пошуку за переглядами + Відео у стрічці підписок не фільтруються. + Відео у стрічці підписок фільтруються. + Приховати відео підписок за переглядами Приховати рекомендовані відео з меншою за вказану кількість переглядів.\n\nВідома проблема: Відео з 0 переглядами не фільтруються. Приховати рекомендовані відео за переглядами Відео з більше ніж ця кількість переглядів приховуватимуться. @@ -1012,7 +1048,7 @@ Підтексти показується. Підтексти приховано. Приховати підтексти - Непрозорість затемнення мініплеєра має бути в межах 0-100. Скинуто. + Непрозорість затемнення мініплеєра має бути в межах 0-100. Значення непрозорості в межах 0-100, де 0 це прозоро. Непрозорість затемнення Оригінал @@ -1053,13 +1089,18 @@ Кнопка завантаження відео відкриває вбудований завантажувач. Кнопка завантаження відео відкриває зовнішній завантажувач. Перевизначити кнопку завантаження відео + Для перевизначення дії кнопки потрібно YouTube Music. Натисніть тут, щоб завантажити YouTube Music. + Передумова + Кнопка YouTube Music відкриває стандартний додаток. + Кнопка YouTube Music відкриває RVX Music. + Перевизначити кнопку YouTube Music Виключено Включено Стандартна Кнопки дії Додаткові налаштування Анімація / Відгук - Фільтр тривалості + Кнопка завантаження Експериментальні опції Регіональні обмеження зображень Імпорт / Експорт як файл @@ -1071,6 +1112,7 @@ Швидкі дії Рекомендовані відео Полиця Shorts + Пропоновані дії Використано інструменти Фільтр за кількістю переглядів Приховувати чи показувати елементи меню облікового запису і вкладки Ви. @@ -1101,13 +1143,15 @@ Загальне Вимкнути чи увімкнути вібрацію. Вібрація + Перевизначення дії натискання кнопок додатка. + Заміна кнопок Імпортувати або експортувати налаштування. Імпорт/Експорт налаштувань Зміна стилю мінімізованого плеєра в додатку. Мініплеєр Різне - Приховувати чи показувати секцію компонентів панелі навігації. - Кнопки панелі навігації + Приховувати чи показувати секцію компонентів панелі навігації. + Панель навігації Інформація про застосовані патчі. Інформація про патчі Приховувати чи показувати кнопки у відео. @@ -1136,13 +1180,14 @@ Відео Змінити налаштування пов\'язані з історією перегляду. Історія перегляду - Верхній відступ швидких дій повинен бути в межах 0-32. Скинуто. + Верхній відступ швидких дій повинен бути в межах 0-32. Налаштуйте відстань від панелі прогресу до контейнера швидких дій, діапазон 0-32. Верхній відступ швидких дій "Примусово відкидається відповідь програмного кодека AV1. Приблизно через 20 секунд буферизації перемикається на інший кодек." Відкинути відповідь програмного кодека AV1 Процес спричиняє приблизно 20 секунд буферизації. + Зміщення Зміни швидкості відтворення застосовуються лише до поточного відео. Зміни швидкості відтворення застосовуються до всіх відео. Запам\'ятовувати зміни швидкості відтворення @@ -1407,9 +1452,12 @@ Серце (Тоноване) Прихована Анімація подвійного натискання - Нижній відступ метапанелі повинен бути в межах 0-64. Скинуто. + Нижній відступ метапанелі повинен бути в межах 0-64. Налаштуйте відстань від панелі прогресу до метапанелі, діапазон 0-64. Нижній відступ метапанелі + Відсоток висоти повинен бути в межах 0-100 (%). + Налаштуйте відсоток висоти порожнього простору, що залишається, коли приховано панель навігації, між 0 і 100 (%). + Відсоток висоти порожнього простору Натисніть і утримуйте мітку часу для зміни станів повторення Shorts. Дія довго натискання на мітку часу "Показується секцію назви відео в повноекранному режимі. @@ -1429,7 +1477,7 @@ Показувати тост, коли пропущено Вмикання цього налаштування може спричинити проблеми відтворення відео. Пропущено перед вантажений буфер - Значення накладання швидкості повинно бути в межах 0-8.0. Скинуто. + Значення накладання швидкості повинно бути в межах 0-8.0. Значення накладання швидкості в межах 0-8.0. Значення накладання швидкості "Підміна версії клієнта на стару версію @@ -1463,10 +1511,14 @@ "Увімкнення може зменшити споживання акумулятора та усунути затинання при відтворенні. AVC (H.264) має максимальну роздільну здатність 1080p, а для відтворення відео використовується більше інтернет-даних, ніж VP9 або AV1." - • Меню звукової доріжки відсутнє. - • Меню звукової доріжки відсутнє. + "• Меню звукової доріжки відсутнє. +• Стабілізація гучності недоступна." + "• Меню звукової доріжки відсутнє. +• Стабілізація гучності недоступна." "• Фільми чи платні відео можуть не відтворюватися. -• Прямі трансляції починаються з початку." +• Прямі трансляції починаються з початку. +• Відео можуть закінчуватися на 1 секунду раніше. +• Немає аудіокодека opus." Побічні ефекти імітування • Відео може не відтворюватися. Клієнт, що використовується для отримання даних трансляції приховано у Статистика для сисадмінів. @@ -1489,7 +1541,7 @@ AVC (H.264) має максимальну роздільну здатність Поріг величини жесту Видимість фону панелі при жесті Видимість фону при жесті - Розмір площі для проведення не може бути більшим ніж 50. Скинуто. + Розмір площі для проведення не може бути більшим ніж 50. Відсоток площі екрана для проведення.\n\nЗауваження: це також змінить розмір площі екрану для жесту перемотування подвійним натисканням. Розмір екрана накладки проведення Розмір шрифту в панелі при жесті @@ -1512,6 +1564,10 @@ AVC (H.264) має максимальну роздільну здатність Якщо це налаштування не діє, спробуйте перемкнути Анонімний режим." Стандартна + RVX Music + %s не встановлено. Будь ласка, встановіть. + Назва пакету встановленого RVX Music. + Назва пакету RVX Music • Історію перегляду заблоковано. "• Дотримується налаштувань історії перегляду облікового запису Google. • Історія перегляду може не працювати через DNS або VPN." diff --git a/src/main/resources/youtube/translations/vi-rVN/missing_strings.xml b/src/main/resources/youtube/translations/vi-rVN/missing_strings.xml index 26b7e32ef..a0dadfc3c 100644 --- a/src/main/resources/youtube/translations/vi-rVN/missing_strings.xml +++ b/src/main/resources/youtube/translations/vi-rVN/missing_strings.xml @@ -2,28 +2,15 @@ Don\'t show again Courses / Learning - Playables Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views MMT Blue MMT Green + MMT Orange + MMT Pink + MMT Turquoise MMT Yellow Revancify Yellow Vanced Black diff --git a/src/main/resources/youtube/translations/vi-rVN/strings.xml b/src/main/resources/youtube/translations/vi-rVN/strings.xml index a9a77f2a0..921084967 100644 --- a/src/main/resources/youtube/translations/vi-rVN/strings.xml +++ b/src/main/resources/youtube/translations/vi-rVN/strings.xml @@ -22,6 +22,7 @@ Nếu được bật, chỉ có URL video được gửi đến máy chủ API, Nhấn vào đây để tìm hiểu thêm về DeArrow." Giới thiệu về DeArrow + URL của API DeArrow không hợp lệ. URL điểm cuối của bộ nhớ đệm hình thu nhỏ DeArrow. Không thay đổi URL này trừ khi bạn biết mình đang làm gì. Điểm cuối API DeArrow Thông báo ngắn nếu API DeArrow không khả dụng đã tắt. @@ -72,7 +73,7 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow." Mặc định Dừng Lặp lại - Thay đổi trạng thái lặp lại của trình phát Shorts + Thay đổi trạng thái lặp lại video ngắn Duyệt kênh Mặc định Khám phá @@ -89,8 +90,12 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow." Kênh đăng ký Thịnh hành Xem sau - Trang khởi động không hợp lệ. Đã đặt lại về mặc định. Thay đổi trang khởi động + Trang khởi động chỉ thay đổi một lần. + "Trang khởi động sẽ liên tục thay đổi. + +Hạn chế: Nút Quay lại trên thanh công cụ có thể không hoạt động được." + Thay đổi trang khởi động Tiêu đề Youtube mặc định. Tiêu đề Premium được kích hoạt. Thay đổi tiêu đề YouTube @@ -101,13 +106,13 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow." Bộ lọc tuỳ chỉnh Bộ lọc tuỳ chỉnh không hợp lệ: %s. Mục tốc độ phát kiểu cũ được sử dụng. - Hộp thoại tùy chỉnh được sử dụng. + Mục tốc độ phát dạng hộp thoại được sử dụng. Kiểu mục tốc độ phát tùy chỉnh - Tốc độ tùy chỉnh phải nhỏ hơn %sx. Đã đặt lại về giá trị mặc định. - Tốc độ phát tùy chỉnh không hợp lệ. Đã đặt lại về giá trị mặc định. + Tốc độ tùy chỉnh phải nhỏ hơn %sx. + Tốc độ phát tùy chỉnh không hợp lệ. Thêm hoặc thay đổi tốc độ phát lại có sẵn. Chỉnh sửa tốc độ phát - Độ mờ của lớp phủ trình phát phải nằm trong khoảng 0 - 100. Đã đặt lại về mặc định. + Độ mờ của lớp phủ trình phát phải nằm trong khoảng 0 - 100. Giá trị độ mờ của lớp phủ trình phát trong khoảng từ 0 đến 100, trong đó 0 là trong suốt. Độ mờ lớp phủ trình phát Nhập mã màu hex của thanh tiến trình video mà bạn muốn thay đổi. @@ -183,10 +188,13 @@ Hạn chế: Cài đặt này có thể sẽ không áp dụng cho các video kh Vô hiệu hoá giao thức QUIC Trinh phát Shorts sẽ tiếp tục khi ứng dụng khởi chạy. Trinh phát Shorts sẽ không tiếp tục khi ứng dụng khởi chạy. - Tắt tiếp tục trình phát Shorts + Tắt tính năng tiếp tục trình phát Shorts Đã bật Hoạt ảnh số cuộn. Đã tắt Hoạt ảnh số cuộn. Tắt hoạt ảnh số cuộn + Đã kích hoạt hiệu ứng phun nước trên nút Thích. + Đã vô hiệu hoá hiệu ứng phun nước trên nút Thích. + Vô hiệu hoá hiệu ứng nút Thích "Tắt tính năng Nhấn và giữ trong trình phát để xem ở tốc độ nhanh gấp 2 lần. • Bật tuỳ chọn này sẽ khôi phục tính năng Trượt để tua của bố cục cũ. @@ -203,9 +211,9 @@ Hạn chế: Cài đặt này có thể sẽ không áp dụng cho các video kh Bộ giải mã VP9 đã được kích hoạt. "Bộ giải mã VP9 đã bị vô hiệu hoá. -• Độ phân giải tối đa sẽ là 1080p. +• Độ phân giải tối đa là 1080p. • Việc phát video sẽ sử dụng nhiều dữ liệu di động hơn so với VP9. -• Để có thể phát video HDR, bộ giải mã VP9 vẫn sẽ được sử dụng." +• Bộ giải mã VP9 vẫn được sử dụng cho video HDR." Vô hiệu hoá bộ giải mã VP9 Thanh điều hướng kiểu Cairo đã được vô hiệu hoá. "Thanh điều hướng kiểu Cairo đã được bật @@ -252,11 +260,11 @@ Hạn chế: Chủ đề Cairo cũng được áp dụng cho dấu chấm thông Chạm thanh tiến trình video để tua đã tắt. Chạm thanh tiến trình video để tua đã bật. Chạm thanh tiến trình để tua - Mốc thời gian đã vô hiệu hóa. - "Mốc thời gian được bật. + Đã vô hiệu hoá Mốc thời gian. + "Đã kích hoạt Mốc thời gian. Hạn chế: -• Cài đặt này không chỉ bật Mốc thời gian mà còn cho phép ẩn giao diện người dùng bằng cách nhấn vào nền trình phát. +• Cài đặt này không chỉ kích hoạt Mốc thời gian mà còn cho phép ẩn giao diện người dùng bằng cách nhấn vào nền trình phát. • Vì đây là tính năng đang trong giai đoạn phát triển của Google nên bố cục có thể bị hỏng." Bật Mốc thời gian Cử chỉ vuốt Độ sáng đã tắt. @@ -288,7 +296,7 @@ Hạn chế: "Bật thanh tìm kiếm rộng trên thẻ Bạn. Tuỳ chọn này sẽ ẩn nút Cài đặt trên thẻ Bạn. Để truy cập phần Cài đặt, vui lòng làm theo các bước sau: -Thẻ Bạn → Xem kênh → Trình đơn → Cài đặt" +Thẻ Bạn → Xem kênh → Trình đơn → Cài đặt." Thanh tìm kiếm rộng trên thẻ Bạn Thanh tìm kiếm rộng đã tắt. Thanh tìm kiếm rộng đã bật. @@ -304,6 +312,7 @@ Mở rộng mô tả video có thể không hoạt động nếu bạn lưu chu Mô tả video được mở rộng tự động. Mở rộng mô tả video Bạn có muốn tiếp tục không? + Đặt lại về giá trị mặc định. Vui lòng khởi động lại ứng dụng trong lần đầu khởi chạy để các tính năng hoạt động bình thường Làm mới và khởi động lại Xuất cài đặt thất bại. @@ -329,9 +338,9 @@ Mở rộng mô tả video có thể không hoạt động nếu bạn lưu chu Cảnh báo %s chưa được cài đặt. Hãy cài đặt và thử lại. Nhập tên gói ứng dụng trình tải xuống đã cài đặt trên thiết bị của bạn, chẳng hạn như YTDLnis. - Tên gói ứng dụng trình tải xuống danh sách phát + Tên gói trình tải xuống danh sách phát Nhập tên gói ứng dụng trình tải xuống đã cài đặt trên thiết bị của bạn, chẳng hạn như NewPipe hoặc YTDLnis. - Tên gói ứng dụng trình tải xuống video + Tên gói trình tải xuống video "Video sẽ chuyển sang chế độ toàn màn hình trong các trường hợp sau: • Khi video bắt đầu. @@ -380,7 +389,7 @@ Một số thành phần có thể không bị ẩn." Các đường liên kết ở đầu hồ sơ kênh được hiển thị. Các đường liên kết ở đầu hồ sơ kênh đã ẩn. Ẩn đường liên kết trên hồ sơ kênh - "Shorts + "Video ngắn Danh sách phát Cửa hàng" Nhập tên các thẻ trên kênh mà bạn muốn lọc được phân cách bằng dòng. @@ -400,9 +409,9 @@ Cửa hàng" Nút Tạo đoạn video được hiển thị. Nút Tạo đoạn video đã ẩn. Ẩn nút Tạo đoạn video - Nút Tạo tạo Short được hiển thị. - Nút Tạo video Short đã ẩn. - Ẩn nút Tạo video Short + Đã hiện nút Tạo video ngắn. + Đã ẩn nút Tạo video ngắn. + Ẩn nút Tạo video ngắn Nút Cảm ơn được hiển thị. Nút Cảm ơn đã ẩn. Ẩn nút Cảm ơn @@ -445,13 +454,13 @@ Cửa hàng" Bảng giới thiệu mở rộng được hiển thị bên dưới video. Bảng giới thiệu mở rộng đã ẩn bên dưới video. Ẩn bảng giới thiệu mở rộng - Kệ Hiện thêm đã được hiển thị. - Kệ Hiện thêm đã bị ẩn. - Ẩn kệ Hiện thêm + Kệ Mở rộng đã hiển thị. + Kệ Mở rộng đã ẩn. + Ẩn kệ Mở rộng Nút Phụ đề được hiển thị. Nút Phụ đề đã ẩn. Ẩn nút Phụ đề - Nhập tên các mục thành phần của trình đơn tuỳ chọn mà bạn muốn lọc được phân cách bằng dòng. + Nhập tên các mục thành phần của mục tuỳ chọn mà bạn muốn lọc được phân cách bằng dòng. Chỉnh sửa bộ lọc Bộ lọc trình đơn tuỳ chọn trên bảng tin đã tắt. Bộ lọc trình đơn tuỳ chọn trên bảng tin đã bật. @@ -515,17 +524,17 @@ Hạn chế: Hình ảnh của bài đăng cộng đồng ở chế độ toàn "Nội dung khớp với từ khoá bạn đã đặt sẽ bị ẩn trên thẻ Trang chủ/Kênh đăng ký và kết quả tìm kiếm. Hạn chế: -• Video Shorts không bị ẩn theo tên kênh. +• Video ngắn sẽ không bị ẩn theo tên kênh. • Một số thành phần giao diện người dùng có thể không bị ẩn. • Tìm kiếm từ khoá có thể không cho kết quả nào." Giới thiệu về lọc từ khoá Việc đặt từ/cụm từ cần lọc trong dấu ngoặc kép sẽ ngăn chặn các kết quả chỉ trùng một phần với tiêu đề video và tên kênh.<br><br>Ví dụ,<br><b>\"ai\"</b> sẽ ẩn video: <b>How does AI work?</b><br>nhưng sẽ không ẩn: <b>What does fair use mean?</b> Khớp toàn bộ từ - Bình luận không lọc theo từ khoá đã đặt. - Bình luận được lọc theo từ khoá đã đặt. + Bình luận không được lọc theo từ khoá đã đặt. + Bình luận đã được lọc theo từ khoá đã đặt. Ẩn bình luận theo từ khoá - Các Video trên thẻ Trang chủ không lọc theo từ khoá đã đặt. - Các Video trên thẻ Trang chủ được lọc theo từ khoá đã đặt. + Các Video trên thẻ Trang chủ không được lọc theo từ khoá đã đặt. + Các Video trên thẻ Trang chủ đã được lọc theo từ khoá đã đặt. Ẩn video trên thẻ Trang chủ theo từ khoá "Nhập từ hoặc cụm từ cần ẩn được phân cách bằng dòng. @@ -533,11 +542,11 @@ Từ khóa có thể là tên kênh hoặc bất kỳ văn bản nào hiển th Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nhập chính xác định dạng để lọc (Ví dụ: iPhone, TikTok, LeBlanc)." Bộ lọc từ khoá - Kết quả tìm kiếm không lọc theo từ khoá đã đặt. - Kết quả tìm kiếm được lọc theo từ khoá đã đặt. + Kết quả tìm kiếm không được lọc theo từ khoá đã đặt. + Kết quả tìm kiếm đã được lọc theo từ khoá đã đặt. Ẩn kết quả tìm kiếm theo từ khóa - Các Video trên thẻ Kênh đăng ký không lọc theo từ khoá đã đặt. - Các Video trên thẻ Kênh đăng ký được lọc theo từ khoá đã đặt. + Các Video trên thẻ Kênh đăng ký không được lọc theo từ khoá đã đặt. + Các Video trên thẻ Kênh đăng ký đã được lọc theo từ khoá đã đặt. Ẩn video trên thẻ Kênh đăng ký theo từ khoá Từ khóa sẽ ẩn tất cả video: %s. Không thể sử dụng từ khoá: %s. @@ -573,6 +582,9 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Phim và chương trình truyền hình được hiển thị. Phim và chương trình truyền hình đã ẩn. Ẩn phim và chương trình truyền hình + Thanh điều hướng đã được hiển thị. + Thanh điều hướng đã bị ẩn. + Ẩn Thanh điều hướng Nút Tạo được hiển thị. Nút Tạo đã ẩn. Ẩn nút Tạo @@ -588,8 +600,8 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Nút Thông báo được hiển thị. Nút Thông báo đã ẩn. Ẩn nút Thông báo - Nút Shorts được hiển thị. - Nút Shorts đã ẩn. + Đã hiện nút Shorts. + Đã ẩn nút Shorts. Ẩn nút Shorts Nút Kênh đăng ký được hiển thị. Nút Kênh đăng ký đã ẩn. @@ -654,9 +666,9 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Ghi chú cuối mục Chất lượng video hiện tại được hiển thị. Ghi chú cuối mục Chất lượng video hiện tại đã ẩn. Ẩn ghi chú cuối mục Chất lượng - Tiêu đề trình đơn Chất lượng được hiển thị. - Tiêu đề trình đơn Chất lượng đã ẩn. - Ẩn tiêu đề trình đơn Chất lượng + Tiêu đề mục Chất lượng được hiển thị. + Tiêu đề mục Chất lượng đã ẩn. + Ẩn tiêu đề mục Chất lượng Mục Báo vi phạm được hiển thị. Mục Báo vi phạm đã ẩn. Ẩn mục Báo cáo @@ -734,6 +746,12 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Phần video thêm trong bảng nút thao tác nhanh và lớp phủ video liên quan đã được hiển thị. Phần video thêm trong bảng nút thao tác nhanh và lớp phủ video liên quan đã bị ẩn. Ẩn lớp phủ video liên quan + Nút Video có liên quan được hiển thị. + Các video có liên quan đã bị ẩn. + Ẩn các video có liên quan + "Cài đặt này giới hạn số lượng bố cục tối đa có thể được tải trên màn hình trình phát. + +Nếu bố cục của màn hình trình phát thay đổi do các thay đổi từ phía máy chủ, các bố cục không mong muốn có thể bị ẩn trên màn hình trình phát." Nút Remix được hiển thị. Nút Remix đã ẩn. Ẩn nút Remix @@ -774,71 +792,74 @@ Phụ đề" Nút Chia sẻ được hiển thị. Nút Chia sẻ đã ẩn. Ẩn nút Chia sẻ - Nút Mua sắm được hiển thị. - Nút Mua sắm đã ẩn. - Ẩn nút Mua sắm + Nút Cửa hàng được hiển thị. + Nút Cửa hàng đã ẩn. + Ẩn nút Cửa hàng Phần Sản phẩm được hiển thị. Phần Sản phẩm đã ẩn. Ẩn phần Sản phẩm - Thanh kênh được hiển thị. - Thanh kênh được ẩn - Ẩn thanh kênh - Nút Bình luận được hiển thị. - Nút Bình luận đã ẩn. + Đã hiện Thanh kênh. + Đã ẩn Thanh kênh. + Ẩn Thanh kênh + Đã hiện nút Bình luận. + Đã ẩn nút Bình luận. Ẩn nút Bình luận Nút Bình luận đã tắt hoặc nhãn \"0\" được hiển thị. Nút Bình luận đã tắt hoặc nhãn \"0\" đã ẩn. Ẩn nút Đóng bình luận - Nút Không thích đã được hiển thị. - Nút Không thích đã bị ẩn. + Đã hiện nút Không thích. + Đã ẩn nút Không thích. Ẩn nút Không thích - "Các nút nổi như 'Dùng bản âm thanh này' được hiển thị trong tab kênh Shorts." - "Các nút nổi như 'Dùng bản âm thanh này' bị ẩn trong tab kênh Shorts." + "Đã hiện các nút nổi như 'Dùng bản âm thanh này' trong thẻ kênh Shorts." + "Đã ẩn các nút nổi như 'Dùng bản âm thanh này' trong thẻ kênh Shorts." Ẩn nút nổi - Nhãn liên kết video được hiển thị. - Nhãn liên kết video đã ẩn. - Ẩn nhãn liên kết video toàn màn hình - Bảng thông tin được hiển thị. - Bảng thông tin đã ẩn. + Đã hiện nhãn Liên kết video. + Đã ẩn nhãn Liên kết video. + Ẩn nhãn Liên kết toàn video + Đã hiện nút Phông xanh. + Đã ẩn nút Phông xanh. + Ẩn nút Phông xanh + Đã hiện Bảng thông tin. + Đã ẩn Bảng thông tin. Ẩn Bảng thông tin - Nút Tham gia được hiển thị. - Nút Tham gia được ẩn. + Đã hiện nút Tham gia. + Đã ẩn nút Tham gia. Ẩn nút Tham gia - Nút Thích được hiển thị. - Nút Thích được ẩn. + Đã hiện nút Thích. + Đã ẩn nút Thích. Ẩn nút Thích - Tiêu đề Trò chuyện trực tiếp được hiển thị.\n\nNút Quay lại trong tiêu đề sẽ không bị ẩn. - Tiêu đề Trò chuyện trực tiếp đã ẩn.\n\nNút Quay lại trong tiêu đề sẽ không bị ẩn. + Đã hiện tiêu đề Trò chuyện trực tiếp.\n\nNút Quay lại trong tiêu đề sẽ không bị ẩn. + Đã ẩn tiêu đề Trò chuyện trực tiếp.\n\nNút Quay lại trong tiêu đề sẽ không bị ẩn. Ẩn tiêu đề Trò chuyện trực tiếp - Nút Vị trí đã hiển thị. - Nút Vị trí đã ẩn. + Đã hiện nút Vị trí. + Đã ẩn nút Vị trí. Ẩn nút Vị trí - Thanh điều hướng được hiển thị. - Thanh điều hướng đã ẩn. + Đã hiện Thanh điều hướng. + Đã ẩn Thanh điều hướng. Ẩn Thanh điều hướng - Nhãn quảng cáo được tài trợ được hiển thị. - Nhãn quảng cáo được tài trợ đã ẩn. + Đã hiện Nhãn quảng cáo được tài trợ. + Đã ẩn Nhãn quảng cáo được tài trợ. Ẩn nhãn quảng cáo được tài trợ - Tiêu đề tạm dừng đã được hiển thị. - Tiêu đề tạm dừng đã bị ẩn. + Đã hiện Tiêu đề tạm dừng. + Đã ẩn Tiêu đề tạm dừng. Ẩn tiêu đề tạm dừng - Các nút phủ lên khi tạm dừng được hiển thị. - Các nút phủ lên khi tạm dừng được ẩn. + Đã hiện các nút phủ lên khi tạm dừng. + Đã ẩn các nút phủ lên khi tạm dừng. Ẩn các nút phủ lên khi tạm dừng - Nền nút được hiển thị. - Nền nút bị ẩn. + Đã hiển thị nền của nút. + Đã ẩn nền của nút. Ẩn nền các nút Phát & Tạm dừng - Nút Remix được hiển thị. - Nút Remix đã ẩn. - Ẩn nút Remix - Nút lưu vào danh sách phát được hiển thị. - Nút lưu vào danh sách phát đã ẩn. - Ẩn nút Lưu vào danh sách phát - Nút Gợi ý tìm kiếm đã hiển thị. - Nút Gợi ý tìm kiếm đã ẩn. + Đã hiện nút Phối lại. + Đã ẩn nút Phối lại. + Ẩn nút Phối lại + Đã hiện nút lưu nhạc. + Đã ẩn nút Lưu nhạc. + Ẩn nút Lưu nhạc + Đã hiện nút Gợi ý tìm kiếm. + Đã ẩn nút Gợi ý tìm kiếm. Ẩn nút Gợi ý tìm kiếm - Nút Chia sẻ được hiển thị. - Nút Chia sẻ đã ẩn . + Đã hiện nút Chia sẻ. + Đã ẩn nút Chia sẻ. Ẩn nút Chia sẻ Hiển thị trong phần Nhật ký xem. Ẩn trong phần Nhật ký xem. @@ -856,42 +877,45 @@ Phụ đề" Hạn chế: Tiêu đề chính thức trong kết quả tìm kiếm sẽ được ẩn." Ẩn kệ Shorts - Nút Mua sắm được hiển thị. - Nút Mua sắm đã ẩn. - Ẩn nút Mua sắm - Nút Mua sắm đã hiển thị. - Nút Mua sắm đã ẩn. + Đã hiện nút Cửa hàng. + Đã ẩn nút Cửa hàng. + Nút Cửa hàng + Đã hiện nút Mua sắm. + Đã ẩn nút Mua sắm. Ẩn nút Mua sắm - Nút Âm thanh được hiển thị. - Nút Âm thanh đã ẩn. + Đã hiện nút Âm thanh. + Đã ẩn nút Âm thanh. Nút Âm thanh - Nhãn siêu dữ liệu được hiển thị. - Nhãn siêu dữ liệu đã ẩn. - Ẩn nhãn siêu dữ liệu âm thanh - Nút Đăng ký được hiển thị. - Nút Đăng ký đã ẩn. + Đã hiện nhãn Siêu dữ liệu. + Đã ẩn nhãn Siêu dữ liệu. + Ẩn nhãn Siêu dữ liệu âm thanh + Đã hiện nhãn dán. + Đã ẩn nhãn dán. + Ẩn nhãn dán + Đã hiện nút Đăng ký. + Đã ẩn nút Đăng ký. Ẩn nút Đăng ký - Nút Cảm ơn được hiển thị. - Nút Cảm ơn đã ẩn. - Ẩn nút Cảm ơn - Sản phẩm gắn thẻ được hiển thị. - Sản phẩm được gắn thẻ đã ẩn. + Đã hiện nút Super Thanks. + Đã ẩn nút Super Thanks. + Ẩn nút Super Thanks + Đã hiện Sản phẩm được gắn thẻ. + Đã ẩn Sản phẩm được gắn thẻ. Ẩn sản phẩm được gắn thẻ - Thanh công cụ được hiển thị. - Thanh công cụ đã ẩn. + Đã hiện Thanh công cụ. + Đã ẩn Thanh công cụ. Ẩn thanh công cụ - Nút Thịnh hành đã hiển thị. - Nút Thịnh hành đã ẩn. + Đã hiện nút Thịnh hành. + Đã ẩn nút Thịnh hành. Ẩn nút Thịnh hành - Nút Sử dụng mẫu đã hiển thị. - Nút Sử dụng mẫu đã ẩn. + Đã hiện nút Sử dụng mẫu. + Ẩn nút Sử dụng mẫu. Ẩn nút Sử dụng mẫu - Nút \'Dùng bản âm thanh này\' đã hiển thị. - Nút \'Dùng bản âm thanh này\' đã ẩn. + Đã hiện nút \'Dùng bản âm thanh này\'. + Đã ẩn nút \'Dùng bản âm thanh này\'. Ẩn nút \'Dùng bản âm thanh này\' - Tiêu đề được hiển thị. - Tiêu đề đã ẩn. - Ẩn tiêu đề video + Đã hiện Tiêu đề. + Đã ẩn Tiêu đề. + Ẩn Tiêu đề video Nút Hiện thêm được hiển thị. Nút Hiện thêm đã ẩn. Ẩn nút Hiện thêm @@ -943,15 +967,28 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Phần Bản chép lời được hiển thị. Phần Bản chép lời đã ẩn. Ẩn phần Bản chép lời + "Ẩn các video có nhãn \"SẮP DIỄN RA\". + +Lưu ý: Việc bật tính năng này cũng sẽ ẩn nút Thông báo cho tôi." + Ẩn video SẮP DIỄN RA Quảng cáo dạng video được hiển thị. Quảng cáo dạng video đã ẩn. Ẩn quảng cáo dạng video - Nhập thời lượng. Video có thời lượng dài hơn mức này sẽ bị ẩn. - Dài hơn - Nhập thời lượng. Video có thời lượng ngắn hơn mức này sẽ bị ẩn. - Ngắn hơn - Ẩn các video có thời lượng ngắn hơn hoặc dài hơn thời lượng bạn đã đặt.\n\nSự cố đã biết: Tính năng này sẽ không ẩn video có liên quan trong trình phát mà chỉ ẩn mốc thời gian. - Ẩn video theo thời lượng + "Các Video có số lượt xem ít hoặc nhiều hơn con số bạn đã đặt sẽ bị ẩn trên thẻ Trang chủ/Kênh đăng ký/Kết quả tìm kiếm. + +Hạn chế: +• Không ẩn đối với Video ngắn. +• Các Video có 0 lượt xem cũng không bị lọc." + Về việc lọc theo số lượt xem + Các Video trên thẻ Trang chủ không được lọc theo số lượt xem đã đặt. + Các Video trên thẻ Trang chủ đã được lọc theo số lượt xem đã đặt. + Ẩn video trên thẻ Trang chủ theo số lượt xem + Kết quả tìm kiếm không được lọc theo số lượt xem đã đặt. + Kết quả tìm kiếm đã được lọc theo số lượt xem đã đặt. + Ẩn kết quả tìm kiếm theo lượt xem + Các Video trên thẻ Kênh đăng ký không được lọc theo số lượt xem đã đặt. + Các Video trên thẻ Kênh đăng ký đã được lọc theo số lượt xem đã đặt. + Ẩn video trên thẻ Kênh đăng ký theo số lượt xem Ẩn các video đề xuất có số lượt xem ít hơn số lượt xem bạn đã đặt.\n\nSự cố đã biết: Các video chưa có lượt xem nào sẽ không bị lọc. Ẩn video được đề xuất theo số lượt xem Nhập số lượt xem. Video có số lượt xem cao hơn mức này sẽ bị ẩn. @@ -1004,7 +1041,7 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Văn bản được hiển thị. Văn bản đã ẩn. Ẩn văn bản - Độ mờ của lớp phủ trình phát thu nhỏ phải nằm trong khoảng 0 - 100. Đã đặt lại về mặc định. + Độ mờ của lớp phủ trình phát thu nhỏ phải nằm trong khoảng 0 - 100. Giá trị độ mờ của lớp phủ trình phát thu nhỏ trong khoảng từ 0 đến 100, trong đó 0 là trong suốt. Độ mờ lớp phủ Gốc @@ -1039,19 +1076,24 @@ Nhấn và giữ để hoàn tác." \"Nhấn để mở hộp thoại Danh sách trắng. Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng. Hiển thị nút Danh sách trắng - Nếu được hiển thị, nút tải xuống danh sách phát sẽ mở trình tải xuống gốc trong ứng dụng. + Nếu được hiển thị, nút tải xuống danh sách phát sẽ mở trình tải xuống tích hợp sẵn trong ứng dụng. Nút tải xuống danh sách phát sẽ luôn được hiển thị, và khi thao tác sẽ mở trình tải xuống bên ngoài đối với các danh sách phát công khai. Ghi đè nút tải xuống danh sách phát - Nút tải xuống video sẽ mở trình tải xuống gốc trong ứng dụng. + Nút tải xuống video sẽ mở trình tải xuống tích hợp sẵn trong ứng dụng. Nút tải xuống video sẽ mở trình tải xuống bên ngoài của bạn. Ghi đè nút tải xuống video + Cần phải có YouTube Music để ghi đè hành động của nút. Nhấn vào đây để tải YouTube Music. + Điều kiện tiên quyết + Nút Youtube Music sẽ mở ứng dụng YT Music. + Nút Youtube Music sẽ mở ứng dụng RVX Music. + Ghi đè nút Youtube Music Không bao gồm Đã bao gồm Bình thường Nút hành động Cài đặt bổ sung Hoạt ảnh / Phản hồi - Bộ lọc thời lượng + Nút tải xuống Tính năng thử nghiệm Hạn chế về hình ảnh do khu vực Nhập/Xuất dưới dạng tập tin @@ -1063,6 +1105,7 @@ Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng.Thao tác nhanh Video được đề xuất Kệ Shorts + Hành động đề xuất Công cụ được sử dụng Bộ lọc số lượt xem Ẩn hoặc hiển thị các thành phần của trình đơn Tài khoản và thẻ Bạn. @@ -1085,7 +1128,7 @@ Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng.Bài đăng cộng đồng Ẩn các thành phần không mong muốn bằng bộ lọc tuỳ chỉnh. Bộ lọc tuỳ chỉnh - Ẩn hoặc hiển thị thành phần của trình đơn tuỳ chọn trong bảng tin. + Ẩn hoặc hiển thị thành phần của trình đơn tuỳ chọn trên bảng tin. Trình đơn tuỳ chọn Bảng tin Ẩn hoặc thay đổi các thành phần liên quan đến toàn màn hình. @@ -1093,13 +1136,15 @@ Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng.Tổng quan Tắt hoặc bật phản hồi xúc giác. Phản hồi xúc giác + Ghi đè thao tác nhấn của các nút trong ứng dụng. + Điều chỉnh nút Nhập hoặc xuất cài đặt. Nhập/Xuất cài đặt Thay đổi kiểu trình phát thu nhỏ trong ứng dụng. Trình phát thu nhỏ Cài đặt khác - Ẩn hoặc hiển thị các nút thành phần trên thanh điều hướng. - Thanh điều hướng + Ẩn hoặc hiển thị các thành phần trong phần thanh điều hướng. + Thanh điều hướng Thông tin về các bản vá đã được áp dụng. Thông tin bản vá Ẩn hoặc hiển thị các nút trong video. @@ -1123,18 +1168,19 @@ Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng.Thanh công cụ Ẩn hoặc hiển thị các thành phần mô tả video. Mô tả video - Ẩn video theo từ khoá hoặc lượt xem. + Ẩn video theo từ khoá hoặc số lượt xem. Bộ lọc video Video Thay đổi cài đặt liên quan đến Nhật ký xem. Nhật ký xem - Lề trên bảng nút thao tác nhanh phải nằm trong khoảng 0 - 32. Đã đặt lại về mặc định. + Lề trên bảng nút thao tác nhanh phải nằm trong khoảng 0 - 32. Giá trị khoảng cách từ thanh tiến trình đến bảng nút thao tác nhanh trong khoảng từ 0 đến 32. Lề trên bảng nút thao tác nhanh "Buộc từ chối phản hồi của bộ giải mã phần mềm AV1. Một bộ giải mã khác sẽ được áp dụng sau khoảng 20 giây tải bộ đệm." Từ chối phản hồi của bộ giải mã phần mềm AV1 Quá trình dự phòng sẽ tạo ra khoảng 20 giây tải bộ đệm. + Độ lệch Thay đổi tốc độ phát chỉ áp dụng cho video hiện tại. Thay đổi tốc độ phát áp dụng cho tất cả video. Lưu thay đổi tốc độ phát @@ -1156,9 +1202,9 @@ Tuỳ chọn này chỉ tự động chấp nhận hộp thoại cảnh báo, kh Đóng hộp thoại cảnh báo trước khi xem Thay thế bộ giải mã phần mềm AV1 bằng bộ giải mã VP9. Thay thế bộ giải mã phần mềm AV1 - Tên người dùng của kênh đã được sử dụng. - Tên kênh đã được sử dụng. - Thay thế tên người dùng của kênh + Đang hiển thị tên người dùng (@username). + Đang hiển thị tên kênh. + Thay đổi tên người dùng Shorts Nhấn để hiển thị thời gian còn lại. Nhấn để mở mục Tốc độ phát hoặc Chất lượng video. Thay thế hành động của mốc thời gian @@ -1250,7 +1296,7 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Thời lượng video trừ đi tất cả các phân đoạn, được hiển thị trong dấu ngoặc đơn bên cạnh thời lượng video đầy đủ. Id người dùng riêng tư của bạn ID người dùng riêng tư phải dài ít nhất 30 ký tự. - Bạn nên giữ bí mật mã này. Nó như mật khẩu vậy, do đó không nên chia sẻ với người khác. Nếu ai đó có mã này, họ có thể giả mạo bạn. + Mã Id này giống như mật khẩu của bạn vậy, do đó không nên chia sẻ với bất kỳ ai. Nếu ai đó có được nó, họ có thể mạo danh bạn. Đã đọc Hãy đọc hướng dẫn của SponsorBlock trước khi tạo phân đoạn mới. Xem ngay @@ -1388,16 +1434,19 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Đã sao chép URL cùng mốc thời gian vào bảng nhớ tạm. Nguyên bản Thumbs up - Thumbs up (Loang màu) + Thumbs up (Cairo) Trái tim Trái tim (Đỏ) Ẩn Hoạt ảnh nhấn đúp - Lề dưới cùng của bảng meta phải nằm trong khoảng từ 0-64. Đặt lại về giá trị mặc định. - Cấu hình khoảng cách từ thanh tìm kiếm đến bảng meta, trong khoảng 0-64. + Lề dưới của bảng Meta phải nằm trong khoảng từ 0 đến 64. + Cấu hình khoảng cách từ thanh tiến trình tới bảng meta, nằm trong khoảng 0 đến 64. Lề dưới của bảng Meta - Nhấn và giữ vào Mốc thời gian để thay đổi trạng thái phát lặp lại trên Shorts. - Nhấn giữ Mốc thời gian + Chiều cao phải nằm trong khoảng từ 0 đến 100 (%). + Cấu hình chiều cao của khoảng trống còn lại khi thanh điều hướng bị ẩn, nằm trong khoảng từ 0 đến 100 (%). + Chiều cao của khoảng trống + Nhấn và giữ vào Mốc thời gian để thay đổi trạng thái phát lặp lại trên trình phát Shorts. + Thao tác nhấn giữ Mốc thời gian "Hiển thị phần tiêu đề video ở chế độ toàn màn hình. Hạn chế: Tiêu đề video sẽ biến mất khi nhấn vào." @@ -1405,7 +1454,7 @@ Hạn chế: Tiêu đề video sẽ biến mất khi nhấn vào." Bỏ qua đếm ngược tự động phát đã tắt.\nNếu tính năng Tự động phát được bật, video tiếp theo sẽ phát sau khi hết thời gian đếm ngược. Bỏ qua đếm ngược tự động phát đã bật.\nNếu tính năng Tự động phát được bật, video tiếp theo sẽ phát ngay lập tức mà không cần đếm ngược. Bỏ qua tự động đếm ngược trước khi phát - "Bỏ qua bộ đệm tải trước khi bắt đầu video để ngay lập tức áp dụng chất lượng video mặc định. + "Bỏ qua bộ đệm tải trước ở đầu video để áp dụng ngay chất lượng video mặc định. Chi tiết: • Khi video bắt đầu, sẽ có độ trễ khoảng 0,3 giây. @@ -1416,7 +1465,7 @@ Chi tiết: Hiện thông báo ngắn khi bỏ qua Việc bật cài đặt này có thể gây ra sự cố phát video. Đã bỏ qua bộ đệm tải trước. - Tốc độ phát khi nhấn và giữ phải nằm trong khoảng 0 - 8.0. Đã đặt lại về mặc định. + Tốc độ phát khi nhấn và giữ phải nằm trong khoảng 0 - 8.0. Nhập tốc độ phát khi nhấn và giữ trong khoảng từ 0 đến 8.0. Tốc độ phát khi nhấn và giữ "Giả mạo phiên bản YouTube hiện tại thành phiên bản cũ. @@ -1450,16 +1499,20 @@ Chất lượng cao có thể được mở khóa trên một số video yêu c "Bật chức năng này có thể tăng cường thời lượng pin và khắc phục tình trạng giật lag khi phát video. AVC (H.264) có độ phân giải tối đa 1080p, và phát video sẽ dùng nhiều dữ liệu di động hơn với VP9 hoặc AV1." - • Mục Bản âm thanh bị thiếu. - • Mục Bản âm thanh bị thiếu. + "• Mục Bản âm thanh bị thiếu. +• Mục 'Âm lượng ổn định' không khả dụng." + "• Mục Bản âm thanh bị thiếu. +• Mục 'Âm lượng ổn định' không khả dụng." "• Phim hoặc video trả phí có thể không phát được. -• Video phát trực tiếp sẽ khởi chạy từ đầu." +• Video phát trực tiếp sẽ khởi chạy từ đầu. +• Video có thể kết thúc sớm 1 giây. +• Không có bộ giải mã âm thanh opus." Hạn chế của việc giả mạo • Video có thể không phát được. Máy khách được sử dụng để lấy dữ liệu phát trực tiếp sẽ bị ẩn trong Thống kê chi tiết. Máy khách được sử dụng để lấy dữ liệu truyền trực tuyến sẽ được hiển thị trong Thống kê chi tiết. Hiển thị trong Thống kê chi tiết - "Dữ liệu phát trực tiếp hiện không được giả mạo. Việc phát video có thể không hoạt động bình thường." + "Chưa giả mạo dữ liệu phát trực tiếp. Phát video có thể không hoạt động bình thường." Đã giả mạo dữ liệu phát trực tiếp. Giả mạo dữ liệu phát trực tiếp Android @@ -1467,7 +1520,7 @@ AVC (H.264) có độ phân giải tối đa 1080p, và phát video sẽ dùng n Android VR iOS Máy khách mặc định - Việc tắt cài đặt này có thể gây ra sự cố phát video. + Việc tắt cài đặt này có thể gây ra sự cố khi phát video. Vuốt ở chế độ Khóa màn hình đã tắt. Cử chỉ vuốt đã bật ở chế độ Khóa màn hình. Vuốt ở chế độ Khóa màn hình @@ -1476,8 +1529,8 @@ AVC (H.264) có độ phân giải tối đa 1080p, và phát video sẽ dùng n Độ rộng ngưỡng vuốt Độ mờ của nền lớp phủ vuốt khi thực hiện cử chỉ vuốt. Độ mờ nền lớp phủ vuốt - Kích thước khu vực vuốt không được lớn hơn 50. Đã đặt lại về mặc định. - Tỉ lệ phần trăm diện tích màn hình có thể vuốt.\n\nLưu ý: Thao tác này cũng sẽ thay đổi kích thước vùng màn hình đối với cử chỉ nhấn đúp để tua. + Kích thước khu vực vuốt không được lớn hơn 50. + Phần diện tích màn hình có thể vuốt.\n\nLưu ý: Thao tác này cũng sẽ thay đổi kích thước vùng màn hình đối với cử chỉ nhấn đúp để tua. Kích thước văn bản trên lớp phủ vuốt Độ to nhỏ của văn bản được hiển thị trên lớp phủ vuốt. Kích thước văn bản trên lớp phủ vuốt @@ -1499,6 +1552,10 @@ Ngoài ra, quảng cáo sẽ không còn bị chặn trong trình phát Shorts. Nếu cài đặt này không có hiệu lực, hãy thử chuyển sang chế độ Ẩn danh." Nguyên gốc + RVX Music + Hiện %s chưa được cài đặt. Hãy cài đặt và thử lại. + Tên gói của RVX Music đã được cài đặt. + Tên gói của RVX Music • Nhật ký xem bị chặn. "• Tuân theo cài đặt Nhật ký xem của tài khoản Google. • Nhật ký xem có thể không hoạt động do DNS hoặc VPN." diff --git a/src/main/resources/youtube/translations/zh-rCN/missing_strings.xml b/src/main/resources/youtube/translations/zh-rCN/missing_strings.xml index cf0a420f0..fe55eb720 100644 --- a/src/main/resources/youtube/translations/zh-rCN/missing_strings.xml +++ b/src/main/resources/youtube/translations/zh-rCN/missing_strings.xml @@ -1,20 +1,65 @@ + Start page changes only once. + "Start page always changes. + +Limitation: Back button on the toolbar may not work." + Change start page type + Fountain animation is enabled above the Like button. + Fountain animation is disabled above the Like button. + Disable Like button animation Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name + Navigation bar is shown. + Navigation bar is hidden. + Hide navigation bar + Related videos are shown. + Related videos are hidden. + Hide related videos + "This setting limits the maximum number of layouts that can be loaded on the player screen. + +If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." + Green screen button is shown. + Green screen button is hidden. + Hide Green screen button + Save music button is shown. + Save music button is hidden. + Hide Save music button + Stickers are shown. + Stickers are hidden. + Hide stickers "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: • Shorts cannot be hidden. • Videos with 0 views are not filtered." About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views Search results are not filtered. Search results are filtered. Hide search results by views Videos in subscriptions feed are not filtered. Videos in subscriptions feed are filtered. Hide subscription videos by views + MMT Orange + MMT Pink + MMT Turquoise + YouTube Music is required to override button action. Tap here to download YouTube Music. + Prerequisite + YouTube Music button opens the native app. + YouTube Music button opens the RVX Music. + Override YouTube Music button + Download button + Suggested actions + Overrides the click action of in-app buttons. + Hook buttons + Hide or show navigation bar section components. + Navigation bar + Offset + Height percentage must be between 0-100 (%). + Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). + Height percentage of empty space + RVX Music + %s is not installed. Please install it. + Package name of installed RVX Music. + RVX Music package name diff --git a/src/main/resources/youtube/translations/zh-rCN/strings.xml b/src/main/resources/youtube/translations/zh-rCN/strings.xml index d5335d82f..ecbbf791e 100644 --- a/src/main/resources/youtube/translations/zh-rCN/strings.xml +++ b/src/main/resources/youtube/translations/zh-rCN/strings.xml @@ -23,6 +23,7 @@ 点击此处了解更多关于 DeArrow 的信息。" 关于 DeArrow + 无效的 DeArrow API URL DeArrow 缩略图缓存端点 URL。除非您知道自己在做什么,否则请勿更改 DeArrow API 端点 如果 DeArrow 不可用,不显示 Toast @@ -85,14 +86,12 @@ 直播 电影 音乐 - 游戏 搜索 Shorts 体育 订阅 热门 稍后观看 - 起始页无效,正在重置为默认值 更改起始页 默认标题已启用 高级标题已启用 @@ -306,6 +305,7 @@ 自动展开视频描述 自动展开视频描述 你想继续吗? + 重置为默认值 重启应用以正常加载界面布局 刷新并重启 导出配置失败 @@ -833,9 +833,6 @@ 混剪按钮已显示 混剪按钮已隐藏 隐藏混剪按钮 - 保存声音到播放列表按钮已显示 - 保存声音到播放列表按钮已隐藏 - 隐藏保存声音到播放列表按钮 搜索建议按钮已显示 搜索建议按钮已隐藏 隐藏搜索建议按钮 @@ -945,15 +942,16 @@ Note: 转写文稿部分已显示 转写文稿部分已隐藏 隐藏转写文稿部分 + "隐藏带有 UPCOMING 标签的视频 + +注意:启用此选项也隐藏通知按钮" + 隐藏 UPCOMING 视频 视频广告已显示 视频广告已隐藏 隐藏视频广告 - 时长高于此数字的推荐视频将被隐藏 - 时长高于此数字 - 时长低于此数字的视频将被隐藏 - 时长低于此数字 - 隐藏时长短于或长于指定时长的视频\n\n已知问题:它不会隐藏播放器中相关视频的时间戳,而是隐藏视频时间标记 - 根据时长隐藏视频 + 首页订阅内容的关键词过滤已禁用 + 首页订阅内容的关键词过滤已启用 + 启用首页播放量过滤器 隐藏播放量低于此数字的推荐视频 播放量 播放量大于此数字的视频将被隐藏。 @@ -1060,7 +1058,6 @@ Note: 操作按钮 其他设置 动画/反馈 - 视频时长过滤器 实验性功能 图像区域限制 导入 / 导出为文件 @@ -1107,8 +1104,6 @@ Note: 更改应用最小化播放器样式 迷你播放器 杂项 - 隐藏或显示导航栏区域的组件 - 导航按钮 已应用补丁的信息 补丁信息 隐藏或显示视频中的按钮 @@ -1460,8 +1455,8 @@ Note: "启用此功能可能会改善耗电并修复播放卡顿问题 AVC (H.264) 的最大解析度为 1080p,且视频播放将使用比 VP9 或 AV1 更多的网路数据" - • 音轨菜单缺失 - • 音轨菜单缺失 + "• 音轨菜单缺失" + "• 音轨菜单缺失" "• 电影或付费视频可能无法播放" 伪装副作用 • 视频可能无法播放 diff --git a/src/main/resources/youtube/translations/zh-rTW/missing_strings.xml b/src/main/resources/youtube/translations/zh-rTW/missing_strings.xml index 0511088d7..f1f9d0bdc 100644 --- a/src/main/resources/youtube/translations/zh-rTW/missing_strings.xml +++ b/src/main/resources/youtube/translations/zh-rTW/missing_strings.xml @@ -2,21 +2,15 @@ Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views + Save music button is shown. + Save music button is hidden. + Hide Save music button + Stickers are shown. + Stickers are hidden. + Hide stickers + MMT Orange + MMT Pink + MMT Turquoise Xisr Yellow Adjust: Mark Start and End Time for segment Verify the Segment diff --git a/src/main/resources/youtube/translations/zh-rTW/strings.xml b/src/main/resources/youtube/translations/zh-rTW/strings.xml index 2273c3dc2..1a8289540 100644 --- a/src/main/resources/youtube/translations/zh-rTW/strings.xml +++ b/src/main/resources/youtube/translations/zh-rTW/strings.xml @@ -23,6 +23,7 @@ 輕觸這裡來進一步了解關於 DeArrow 的資訊。" 關於 DeArrow + DeArrow API URL 無效。 DeArrow 縮圖快取端點網址。 縮圖快取端點的 URL 如果 DeArrow 無法使用,不顯示提示訊息 @@ -85,15 +86,18 @@ 直播 電影 音樂 - Playables 搜尋 短片 運動 訂閱 熱門 稍後觀看 - 起始頁無效,正在重設為預設值。 更改起始頁 + 起始頁僅更改一次。 + "起始頁總是改變。 + +限制:工具列上的後退按鈕可能無法運作。" + 變更起始頁類型 預設標題已啟用 高級標題已啟用 變更 YouTube 標題 @@ -191,6 +195,9 @@ 滾動動畫已啟用 滾動動畫已停用 停用滾動數字動畫 + 點讚按鈕上方的噴泉動畫已啟用。 + 點讚按鈕上方的噴泉動畫已停用。 + 停用讚按鈕動畫 "停用「按住即可將播放速度設為 2 倍」功能 注意: @@ -304,6 +311,7 @@ 自動展開影片描述 自動展開影片描述 你想繼續嗎? + 重設為預設值。 重新啟動以套用更改後的介面 重新啟動以重新整理介面 導出配置失敗 @@ -572,6 +580,9 @@ 電影庫已顯示 電影庫已隱藏 隱藏電影庫 + 導覽列已顯示。 + 導覽列已隱藏。 + 隱藏導覽列 創作按鈕已顯示 創作按鈕已隱藏 隱藏創作按鈕 @@ -733,6 +744,12 @@ 相關影片疊加層已顯示 相關影片疊加層已隱藏 隱藏相關影片疊加層 + 相關影片已顯示。 + 相關影片已隱藏。 + 隱藏相關影片 + "此設定限制播放器螢幕上可以載入佈局的最大數量。 + +如果由於伺服器端變更而導致播放器螢幕佈局發生變化,則播放器螢幕上可能會隱藏非預期的佈局。" 混剪按鈕已顯示 混剪按鈕已隱藏 隱藏混剪按鈕 @@ -797,6 +814,9 @@ 影片連結標簽已顯示 影片連結標簽已隱藏 隱藏完整影片連結標簽 + 綠幕按鈕已顯示。 + 綠幕按鈕已隱藏。 + 隱藏綠幕按鈕 訊息面板已顯示 訊息面板已隱藏 隱藏訊息面板 @@ -830,9 +850,6 @@ 混剪按鈕已顯示 混剪按鈕已隱藏 隱藏混剪按鈕 - 儲存音效到播放清單按鈕已顯示。 - 儲存音效到播放清單按鈕已隱藏。 - 隱藏儲存音效到播放清單按鈕 顯示搜尋建議按鈕。 搜尋建議按鈕已隱藏。 隱藏搜尋建議按鈕 @@ -942,15 +959,28 @@ Note: 轉寫文稿部分已顯示 轉寫文稿部分已隱藏 隱藏轉寫文稿部分 + "隱藏帶有即將推出的標籤的影片。 + +注意:啟用此功能也會隱藏「通知我」按鈕。" + 隱藏即將發布的影片 影片廣告已顯示 影片廣告已隱藏 隱藏影片廣告 - 時長高於這個值的推薦影片會被隱藏 - 時長高於這個值 - 時長小於這個值的影片會被隱藏 - 時長小於這個值 - 隱藏時長過短或過長的影片。\n\n已知問題:這不會隱藏影片播放器中的相關影片,只會隱藏影片的時間戳記。 - 根據時長隱藏影片 + "主頁/訂閱/搜尋結果將被過濾以隱藏觀看次數小於或大於指定數量的影片。 + +限制: +• 短影片無法隱藏。 +• 觀看次數為0的影片不會被曬選。" + 關於觀看次數篩選 + 首頁中的影片不會被篩選。 + 首頁中的影片已被篩選。 + 依觀看次數隱藏家庭影片 + 搜尋結果不會被篩選。 + 搜尋結果已被篩選。 + 按觀看次數隱藏搜尋結果 + 訂閱來源中的影片不會被過濾。 + 訂閱來源中的影片已被篩選。 + 按觀看次數隱藏訂閱影片 隱藏觀看次數低於這個值的推薦影片 依觀看次數隱藏推薦影片 播放量大於此數字的影片將被隱藏。 @@ -1050,13 +1080,18 @@ Note: 原生影片下載按鈕可開啟本機應用程式內下載器。 原生影片下載按鈕可開啟你的外部下載器。 覆蓋影片下載按鈕 + YouTube音樂 需要覆蓋按鈕操作。 按此下載 YouTube音樂。 + 先決條件 + YouTube音樂 按鈕可開啟本機應用程式。 + YouTube音樂 按鈕可開啟 RVX 音樂。 + 覆蓋 YouTube音樂 按鈕 排除 包括 一般 操作按鈕 其他設定 動畫 / 回饋 - 影片時長篩選器 + 下載按鈕 實驗性功能 影像區域限制 導入 / 導出為文件 @@ -1068,6 +1103,7 @@ Note: 快速操作 推薦影片 短片欄 + 建議採取的行動 使用的工具 --唐懂翻譯 觀看次數篩選器 隱藏或顯示帳戶選單和你的內容分頁中的元素。 @@ -1098,13 +1134,15 @@ Note: 一般設定 停用或啟用觸覺反饋 觸覺反饋 + 覆蓋應用程式內按鈕的點選操作。 + 掛鉤按鈕 導入或導出設定 導入/導出設定 變更應用程式內最小化播放器的樣式。 最小化播放器 其他設定 - 隱藏或顯示導航欄區域的元件 - 導航按鈕 + 隱藏或顯示導覽列部分組件。 + 導覽列 已應用補丁的訊息 補丁訊息 隱藏或顯示影片中的按鈕 @@ -1140,6 +1178,7 @@ Note: 約 20 秒的緩衝後會應用不同的編解碼器。" 拒絕軟體 AV1 編解碼器回應 切換過程會導致約 20 秒載入 + 偏移 播放速度更改僅適用於當前影片 播放速度更改適用於所有影片 記住播放速度更改 @@ -1407,6 +1446,9 @@ Note: 面板底部邊距必須介於 0-64 之間。 重設為預設值。 配置從搜尋欄到面板的間距,範圍為 0-64。 面板下邊距 + 高度百分比必須介於 0-100 (%) 之間。 + 配置隱藏導覽列時留下的空白空間的高度百分比,介於 0 到 100 (%) 之間。 + 空白空間高度百分比 按住時間戳記可變更短片重複狀態。 長按時間戳記 "在全螢幕模式下顯示影片標題部分 @@ -1460,8 +1502,8 @@ Note: "啟用此功能可能會延長電池壽命並修復播放卡頓問題。 AVC (H.264) 的最大解析度為 1080p,影片播放將比 VP9 或 AV1 使用更多的網路資料。" - • 音軌選單遺失。 - • 音軌選單遺失。 + "• 音軌選單遺失。" + "• 音軌選單遺失。" "• 電影或付費影片可能無法播放。" 偽裝副作用 • 影片可能無法播放。 @@ -1508,6 +1550,10 @@ AVC (H.264) 的最大解析度為 1080p,影片播放將比 VP9 或 AV1 使用 若此設定未生效,請嘗試切換至無痕模式。" 預設 + RVX 音樂 + %s 未安裝。 請安裝它。 + 已安裝的 RVX 音樂 套件名稱。 + RVX 音樂包名稱 • 觀看歷史記錄不起作用。 "• 遵循Google 帳戶的觀看記錄設定。 • 由於 DNS 或 VPN 的原因,觀看記錄可能無法運作。" From 9148afe3a7ebdbae7b293b8df7ccb3811eb45fc5 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:25:29 +0300 Subject: [PATCH 037/103] build: update api --- api/revanced-patches.api | 174 ++++++++++++++++++--------------------- 1 file changed, 82 insertions(+), 92 deletions(-) diff --git a/api/revanced-patches.api b/api/revanced-patches.api index 34f40f9fb..b84d18ce6 100644 --- a/api/revanced-patches.api +++ b/api/revanced-patches.api @@ -68,8 +68,9 @@ public final class app/revanced/patches/music/general/components/LayoutComponent public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V } -public final class app/revanced/patches/music/general/components/fingerprints/SearchBarFingerprint : app/revanced/util/fingerprint/MethodReferenceNameFingerprint { +public final class app/revanced/patches/music/general/components/fingerprints/SearchBarFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint { public static final field INSTANCE Lapp/revanced/patches/music/general/components/fingerprints/SearchBarFingerprint; + public final fun indexOfVisibilityInstruction (Lcom/android/tools/smali/dexlib2/iface/Method;)I } public final class app/revanced/patches/music/general/components/fingerprints/SearchBarParentFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint { @@ -243,12 +244,6 @@ public final class app/revanced/patches/music/utils/compatibility/Constants { public final fun getCOMPATIBLE_PACKAGE ()Ljava/util/Set; } -public final class app/revanced/patches/music/utils/fix/accessibility/AccessibilityNodeInfoPatch : app/revanced/patcher/patch/BytecodePatch { - public static final field INSTANCE Lapp/revanced/patches/music/utils/fix/accessibility/AccessibilityNodeInfoPatch; - public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V - public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V -} - public final class app/revanced/patches/music/utils/fix/androidauto/AndroidAutoCertificatePatch : app/revanced/util/patch/BaseBytecodePatch { public static final field INSTANCE Lapp/revanced/patches/music/utils/fix/androidauto/AndroidAutoCertificatePatch; public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V @@ -350,6 +345,7 @@ public final class app/revanced/patches/music/utils/resourceid/SharedResourceIdP public final fun getInterstitialsContainer ()J public final fun getIsTablet ()J public final fun getLikeDislikeContainer ()J + public final fun getMainActivityLaunchAnimation ()J public final fun getMenuEntry ()J public final fun getMiniPlayerDefaultText ()J public final fun getMiniPlayerMdxPlaying ()J @@ -392,6 +388,7 @@ public final class app/revanced/patches/music/utils/resourceid/SharedResourceIdP public final fun setInterstitialsContainer (J)V public final fun setIsTablet (J)V public final fun setLikeDislikeContainer (J)V + public final fun setMainActivityLaunchAnimation (J)V public final fun setMenuEntry (J)V public final fun setMiniPlayerDefaultText (J)V public final fun setMiniPlayerMdxPlaying (J)V @@ -517,11 +514,8 @@ public final class app/revanced/patches/music/utils/videotype/VideoTypeHookPatch public final class app/revanced/patches/music/video/information/VideoInformationPatch : app/revanced/patcher/patch/BytecodePatch { public static final field INSTANCE Lapp/revanced/patches/music/video/information/VideoInformationPatch; - public static field rectangleFieldName Ljava/lang/String; public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V - public final fun getRectangleFieldName ()Ljava/lang/String; - public final fun setRectangleFieldName (Ljava/lang/String;)V } public final class app/revanced/patches/music/video/playback/CustomPlaybackSpeedPatch : app/revanced/patches/shared/customspeed/BaseCustomPlaybackSpeedPatch { @@ -534,13 +528,6 @@ public final class app/revanced/patches/music/video/playback/VideoPlaybackPatch public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V } -public final class app/revanced/patches/music/video/videoid/VideoIdPatch : app/revanced/patcher/patch/BytecodePatch { - public static final field INSTANCE Lapp/revanced/patches/music/video/videoid/VideoIdPatch; - public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V - public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V - public final fun hookVideoId (Ljava/lang/String;)V -} - public final class app/revanced/patches/reddit/ad/banner/BannerAdsPatch : app/revanced/patcher/patch/ResourcePatch { public static final field INSTANCE Lapp/revanced/patches/reddit/ad/banner/BannerAdsPatch; public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V @@ -1003,6 +990,13 @@ public final class app/revanced/patches/youtube/general/miniplayer/MiniplayerPat public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V } +public final class app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch : app/revanced/util/patch/BaseBytecodePatch, java/io/Closeable { + public static final field INSTANCE Lapp/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch; + public fun close ()V + public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V + public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V +} + public final class app/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch : app/revanced/util/patch/BaseBytecodePatch { public static final field INSTANCE Lapp/revanced/patches/youtube/general/navigation/NavigationBarComponentsPatch; public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V @@ -1043,7 +1037,7 @@ public final class app/revanced/patches/youtube/general/toolbar/ToolBarComponent public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V } -public final class app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarFingerprint : app/revanced/util/fingerprint/MethodReferenceNameFingerprint { +public final class app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint { public static final field INSTANCE Lapp/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarFingerprint; } @@ -1092,6 +1086,12 @@ public final class app/revanced/patches/youtube/layout/playerbuttonbg/PlayerButt public fun execute (Lapp/revanced/patcher/data/ResourceContext;)V } +public final class app/revanced/patches/youtube/layout/shortcut/ShortcutPatch : app/revanced/util/patch/BaseResourcePatch { + public static final field INSTANCE Lapp/revanced/patches/youtube/layout/shortcut/ShortcutPatch; + public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V + public fun execute (Lapp/revanced/patcher/data/ResourceContext;)V +} + public final class app/revanced/patches/youtube/layout/theme/BaseThemePatch : app/revanced/patcher/patch/ResourcePatch { public static final field INSTANCE Lapp/revanced/patches/youtube/layout/theme/BaseThemePatch; public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V @@ -1296,7 +1296,7 @@ public final class app/revanced/patches/youtube/shorts/components/ShortsComponen public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V } -public final class app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch : app/revanced/patcher/patch/BytecodePatch { +public final class app/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch : app/revanced/util/patch/MultiMethodBytecodePatch { public static final field INSTANCE Lapp/revanced/patches/youtube/shorts/components/ShortsNavigationBarPatch; public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V @@ -1332,6 +1332,12 @@ public final class app/revanced/patches/youtube/swipe/controls/SwipeControlsPatc public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V } +public final class app/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch : app/revanced/patcher/patch/BytecodePatch { + public static final field INSTANCE Lapp/revanced/patches/youtube/utils/bottomsheet/BottomSheetHookPatch; + public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V + public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V +} + public final class app/revanced/patches/youtube/utils/castbutton/CastButtonPatch : app/revanced/patcher/patch/BytecodePatch { public static final field INSTANCE Lapp/revanced/patches/youtube/utils/castbutton/CastButtonPatch; public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V @@ -1463,19 +1469,12 @@ public final class app/revanced/patches/youtube/utils/mainactivity/MainActivityR public final class app/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch : app/revanced/patcher/patch/BytecodePatch { public static final field INSTANCE Lapp/revanced/patches/youtube/utils/navigation/NavigationBarHookPatch; + public final fun addBottomBarContainerHook (Ljava/lang/String;)V public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V public final fun getHookNavigationButtonCreated ()Lkotlin/jvm/functions/Function1; } -public final class app/revanced/patches/youtube/utils/navigation/fingerprints/MobileTopBarButtonOnClickFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint { - public static final field INSTANCE Lapp/revanced/patches/youtube/utils/navigation/fingerprints/MobileTopBarButtonOnClickFingerprint; -} - -public final class app/revanced/patches/youtube/utils/navigation/fingerprints/SettingsActivityOnBackPressedFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint { - public static final field INSTANCE Lapp/revanced/patches/youtube/utils/navigation/fingerprints/SettingsActivityOnBackPressedFingerprint; -} - public final class app/revanced/patches/youtube/utils/pip/PiPStateHookPatch : app/revanced/patcher/patch/BytecodePatch { public static final field INSTANCE Lapp/revanced/patches/youtube/utils/pip/PiPStateHookPatch; public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V @@ -1524,6 +1523,7 @@ public final class app/revanced/patches/youtube/utils/resourceid/SharedResourceI public final fun getBadgeLabel ()J public final fun getBar ()J public final fun getBarContainerHeight ()J + public final fun getBottomBarContainer ()J public final fun getBottomSheetFooterText ()J public final fun getBottomSheetRecyclerView ()J public final fun getBottomUiContainerStub ()J @@ -1537,6 +1537,7 @@ public final class app/revanced/patches/youtube/utils/resourceid/SharedResourceI public final fun getControlsLayoutStub ()J public final fun getDarkBackground ()J public final fun getDarkSplashAnimation ()J + public final fun getDesignBottomSheet ()J public final fun getDonationCompanion ()J public final fun getDrawerContentView ()J public final fun getDrawerResults ()J @@ -1587,6 +1588,7 @@ public final class app/revanced/patches/youtube/utils/resourceid/SharedResourceI public final fun getReelRightLikeIcon ()J public final fun getReelTimeBarPlayedColor ()J public final fun getReelVodTimeStampsContainer ()J + public final fun getReelWatchPlayer ()J public final fun getRelatedChipCloudMargin ()J public final fun getRightComment ()J public final fun getScrimOverlay ()J @@ -1626,6 +1628,7 @@ public final class app/revanced/patches/youtube/utils/resourceid/SharedResourceI public final fun setBadgeLabel (J)V public final fun setBar (J)V public final fun setBarContainerHeight (J)V + public final fun setBottomBarContainer (J)V public final fun setBottomSheetFooterText (J)V public final fun setBottomSheetRecyclerView (J)V public final fun setBottomUiContainerStub (J)V @@ -1639,6 +1642,7 @@ public final class app/revanced/patches/youtube/utils/resourceid/SharedResourceI public final fun setControlsLayoutStub (J)V public final fun setDarkBackground (J)V public final fun setDarkSplashAnimation (J)V + public final fun setDesignBottomSheet (J)V public final fun setDonationCompanion (J)V public final fun setDrawerContentView (J)V public final fun setDrawerResults (J)V @@ -1689,6 +1693,7 @@ public final class app/revanced/patches/youtube/utils/resourceid/SharedResourceI public final fun setReelRightLikeIcon (J)V public final fun setReelTimeBarPlayedColor (J)V public final fun setReelVodTimeStampsContainer (J)V + public final fun setReelWatchPlayer (J)V public final fun setRelatedChipCloudMargin (J)V public final fun setRightComment (J)V public final fun setScrimOverlay (J)V @@ -1738,7 +1743,8 @@ public final class app/revanced/patches/youtube/utils/settings/ResourceUtils { public static final field INSTANCE Lapp/revanced/patches/youtube/utils/settings/ResourceUtils; public static final field TARGET_PREFERENCE_PATH Ljava/lang/String; public static final field YOUTUBE_SETTINGS_PATH Ljava/lang/String; - public final fun addEntryValues (Lapp/revanced/patcher/data/ResourceContext;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public final fun addEntryValues (Lapp/revanced/patcher/data/ResourceContext;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V + public static synthetic fun addEntryValues$default (Lapp/revanced/patches/youtube/utils/settings/ResourceUtils;Lapp/revanced/patcher/data/ResourceContext;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)V public final fun addPreference (Lapp/revanced/patcher/data/ResourceContext;[Ljava/lang/String;)V public final fun addPreferenceFragment (Lapp/revanced/patcher/data/ResourceContext;Ljava/lang/String;Ljava/lang/String;)V public final fun getIconType ()Ljava/lang/String; @@ -1844,89 +1850,52 @@ public final class app/revanced/patches/youtube/video/videoid/VideoIdPatch : app public final class app/revanced/util/BytecodeUtilsKt { public static final field REGISTER_TEMPLATE_REPLACEMENT Ljava/lang/String; - public static final fun addFieldAndInstructions (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableClass;Lapp/revanced/patcher/data/BytecodeContext;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V + public static final fun addStaticFieldToIntegration (Lapp/revanced/patcher/data/BytecodeContext;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V + public static synthetic fun addStaticFieldToIntegration$default (Lapp/revanced/patcher/data/BytecodeContext;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)V public static final fun alsoResolve (Lapp/revanced/patcher/fingerprint/MethodFingerprint;Lapp/revanced/patcher/data/BytecodeContext;Lapp/revanced/patcher/fingerprint/MethodFingerprint;)Lapp/revanced/patcher/fingerprint/MethodFingerprintResult; - public static final fun checkIndex (IILcom/android/tools/smali/dexlib2/Opcode;)I - public static final fun checkIndex (IILjava/lang/String;)I - public static final fun containsMethodReferenceNameInstructionIndex (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)Z - public static final fun containsReferenceInstructionIndex (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)Z - public static final fun containsWideLiteralInstructionIndex (Lcom/android/tools/smali/dexlib2/iface/Method;J)Z + public static final fun containsWideLiteralInstructionValue (Lcom/android/tools/smali/dexlib2/iface/Method;J)Z + public static final fun findMethodOrThrow (Lapp/revanced/patcher/data/BytecodeContext;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod; + public static synthetic fun findMethodOrThrow$default (Lapp/revanced/patcher/data/BytecodeContext;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod; + public static final fun findMethodsOrThrow (Lapp/revanced/patcher/data/BytecodeContext;Ljava/lang/String;)Ljava/util/Set; public static final fun findMutableMethodOf (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableClass;Lcom/android/tools/smali/dexlib2/iface/Method;)Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod; public static final fun findOpcodeIndicesReversed (Lcom/android/tools/smali/dexlib2/iface/Method;Lcom/android/tools/smali/dexlib2/Opcode;)Ljava/util/List; public static final fun findOpcodeIndicesReversed (Lcom/android/tools/smali/dexlib2/iface/Method;Lkotlin/jvm/functions/Function1;)Ljava/util/List; public static final fun getException (Lapp/revanced/patcher/fingerprint/MethodFingerprint;)Lapp/revanced/patcher/patch/PatchException; - public static final fun getStartsWithStringInstructionIndex (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getStringInstructionIndex (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getTargetIndex (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILcom/android/tools/smali/dexlib2/Opcode;)I - public static final fun getTargetIndex (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Lcom/android/tools/smali/dexlib2/Opcode;)I - public static final fun getTargetIndexOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILcom/android/tools/smali/dexlib2/Opcode;)I - public static final fun getTargetIndexOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Lcom/android/tools/smali/dexlib2/Opcode;)I - public static final fun getTargetIndexReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILcom/android/tools/smali/dexlib2/Opcode;)I - public static final fun getTargetIndexReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Lcom/android/tools/smali/dexlib2/Opcode;)I - public static final fun getTargetIndexReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILcom/android/tools/smali/dexlib2/Opcode;)I - public static final fun getTargetIndexReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Lcom/android/tools/smali/dexlib2/Opcode;)I - public static final fun getTargetIndexWithFieldReferenceName (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceName (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceNameOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceNameOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceNameReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceNameReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceNameReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceNameReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceType (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceType (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceTypeOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceTypeOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceTypeReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceTypeReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceTypeReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithFieldReferenceTypeReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)I - public static final fun getTargetIndexWithMethodReferenceName (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithMethodReferenceName (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getTargetIndexWithMethodReferenceNameOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithMethodReferenceNameOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getTargetIndexWithMethodReferenceNameReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithMethodReferenceNameReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)I - public static final fun getTargetIndexWithMethodReferenceNameReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithMethodReferenceNameReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)I - public static final fun getTargetIndexWithReference (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithReference (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)I - public static final fun getTargetIndexWithReference (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getTargetIndexWithReferenceOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithReferenceOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I - public static final fun getTargetIndexWithReferenceReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithReferenceReversed (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)I - public static final fun getTargetIndexWithReferenceReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ILjava/lang/String;)I - public static final fun getTargetIndexWithReferenceReversedOrThrow (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/String;)I + public static final fun getException (Lapp/revanced/util/fingerprint/MultiMethodFingerprint;)Lapp/revanced/patcher/patch/PatchException; public static final fun getWalkerMethod (Lapp/revanced/patcher/fingerprint/MethodFingerprintResult;Lapp/revanced/patcher/data/BytecodeContext;I)Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod; public static final fun getWalkerMethod (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Lapp/revanced/patcher/data/BytecodeContext;I)Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod; - public static final fun getWideLiteralInstructionIndex (Lcom/android/tools/smali/dexlib2/iface/Method;J)I public static final fun indexOfFirstInstruction (Lcom/android/tools/smali/dexlib2/iface/Method;ILcom/android/tools/smali/dexlib2/Opcode;)I public static final fun indexOfFirstInstruction (Lcom/android/tools/smali/dexlib2/iface/Method;ILkotlin/jvm/functions/Function1;)I - public static final fun indexOfFirstInstruction (Lcom/android/tools/smali/dexlib2/iface/Method;Lkotlin/jvm/functions/Function1;)I public static synthetic fun indexOfFirstInstruction$default (Lcom/android/tools/smali/dexlib2/iface/Method;ILcom/android/tools/smali/dexlib2/Opcode;ILjava/lang/Object;)I public static synthetic fun indexOfFirstInstruction$default (Lcom/android/tools/smali/dexlib2/iface/Method;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)I public static final fun indexOfFirstInstructionOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;ILcom/android/tools/smali/dexlib2/Opcode;)I public static final fun indexOfFirstInstructionOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;ILkotlin/jvm/functions/Function1;)I + public static final fun indexOfFirstInstructionOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Lcom/android/tools/smali/dexlib2/Opcode;)I public static synthetic fun indexOfFirstInstructionOrThrow$default (Lcom/android/tools/smali/dexlib2/iface/Method;ILcom/android/tools/smali/dexlib2/Opcode;ILjava/lang/Object;)I public static synthetic fun indexOfFirstInstructionOrThrow$default (Lcom/android/tools/smali/dexlib2/iface/Method;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)I public static final fun indexOfFirstInstructionReversed (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/Integer;Lcom/android/tools/smali/dexlib2/Opcode;)I public static final fun indexOfFirstInstructionReversed (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/Integer;Lkotlin/jvm/functions/Function1;)I public static synthetic fun indexOfFirstInstructionReversed$default (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/Integer;Lcom/android/tools/smali/dexlib2/Opcode;ILjava/lang/Object;)I public static synthetic fun indexOfFirstInstructionReversed$default (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/Integer;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)I + public static final fun indexOfFirstInstructionReversedOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Lcom/android/tools/smali/dexlib2/Opcode;)I public static final fun indexOfFirstInstructionReversedOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/Integer;Lcom/android/tools/smali/dexlib2/Opcode;)I public static final fun indexOfFirstInstructionReversedOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/Integer;Lkotlin/jvm/functions/Function1;)I public static synthetic fun indexOfFirstInstructionReversedOrThrow$default (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/Integer;Lcom/android/tools/smali/dexlib2/Opcode;ILjava/lang/Object;)I public static synthetic fun indexOfFirstInstructionReversedOrThrow$default (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/Integer;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)I - public static final fun indexOfWideLiteralInstructionOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;J)I + public static final fun indexOfFirstStringInstruction (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I + public static final fun indexOfFirstStringInstructionOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I + public static final fun indexOfFirstWideLiteralInstructionValue (Lcom/android/tools/smali/dexlib2/iface/Method;J)I + public static final fun indexOfFirstWideLiteralInstructionValueOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;J)I public static final fun injectHideViewCall (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;IILjava/lang/String;Ljava/lang/String;)V - public static final fun literalInstructionBooleanHook (Lapp/revanced/patcher/fingerprint/MethodFingerprint;ILjava/lang/String;)V - public static final fun literalInstructionBooleanHook (Lapp/revanced/patcher/fingerprint/MethodFingerprint;JLjava/lang/String;)V - public static final fun literalInstructionHook (Lapp/revanced/patcher/data/BytecodeContext;JLjava/lang/String;)V - public static final fun literalInstructionViewHook (Lapp/revanced/patcher/data/BytecodeContext;JLjava/lang/String;)V - public static final fun literalInstructionViewHook (Lapp/revanced/patcher/fingerprint/MethodFingerprint;JLjava/lang/String;)V - public static final fun literalInstructionViewHook (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;JLjava/lang/String;)V + public static final fun injectLiteralInstructionBooleanCall (Lapp/revanced/patcher/fingerprint/MethodFingerprint;ILjava/lang/String;)V + public static final fun injectLiteralInstructionBooleanCall (Lapp/revanced/patcher/fingerprint/MethodFingerprint;JLjava/lang/String;)V + public static final fun injectLiteralInstructionViewCall (Lapp/revanced/patcher/data/BytecodeContext;JLjava/lang/String;)V + public static final fun injectLiteralInstructionViewCall (Lapp/revanced/patcher/fingerprint/MethodFingerprint;JLjava/lang/String;)V + public static final fun injectLiteralInstructionViewCall (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;JLjava/lang/String;)V + public static final fun isDeprecated (Lapp/revanced/patcher/fingerprint/MethodFingerprint;)Z + public static final fun replaceLiteralInstructionCall (Lapp/revanced/patcher/data/BytecodeContext;JLjava/lang/String;)V public static final fun resultOrThrow (Lapp/revanced/patcher/fingerprint/MethodFingerprint;)Lapp/revanced/patcher/fingerprint/MethodFingerprintResult; + public static final fun resultOrThrow (Lapp/revanced/util/fingerprint/MultiMethodFingerprint;)Ljava/util/List; public static final fun returnEarly (Ljava/util/List;Z)V public static synthetic fun returnEarly$default (Ljava/util/List;ZILjava/lang/Object;)V public static final fun transformFields (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableClass;Lkotlin/jvm/functions/Function1;)V @@ -1967,14 +1936,25 @@ public abstract class app/revanced/util/fingerprint/LiteralValueFingerprint : ap public synthetic fun (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } -public abstract class app/revanced/util/fingerprint/MethodReferenceNameFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint { - public fun (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function0;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +public abstract class app/revanced/util/fingerprint/MultiMethodFingerprint { + public static final field Companion Lapp/revanced/util/fingerprint/MultiMethodFingerprint$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function2;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getAccessFlags ()Ljava/lang/Integer; + public final fun getCustomFingerprint ()Lkotlin/jvm/functions/Function2; + public final fun getOpcodes ()Ljava/lang/Iterable; + public final fun getParameters ()Ljava/lang/Iterable; + public final fun getResult ()Ljava/util/List; + public final fun getReturnType ()Ljava/lang/String; + public final fun getStrings ()Ljava/lang/Iterable; + public final fun setResult (Ljava/util/List;)V } -public abstract class app/revanced/util/fingerprint/ReferenceFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint { - public fun (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function0;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +public final class app/revanced/util/fingerprint/MultiMethodFingerprint$Companion { + public final fun resolve (Lapp/revanced/util/fingerprint/MultiMethodFingerprint;Lapp/revanced/patcher/data/BytecodeContext;Lcom/android/tools/smali/dexlib2/iface/ClassDef;)Z + public final fun resolve (Lapp/revanced/util/fingerprint/MultiMethodFingerprint;Lapp/revanced/patcher/data/BytecodeContext;Lcom/android/tools/smali/dexlib2/iface/Method;Lcom/android/tools/smali/dexlib2/iface/ClassDef;)Z + public final fun resolve (Ljava/lang/Iterable;Lapp/revanced/patcher/data/BytecodeContext;Ljava/lang/Iterable;)V } public abstract class app/revanced/util/patch/BaseBytecodePatch : app/revanced/patcher/patch/BytecodePatch { @@ -1989,3 +1969,13 @@ public abstract class app/revanced/util/patch/BaseResourcePatch : app/revanced/p public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V } +public abstract class app/revanced/util/patch/MultiMethodBytecodePatch : app/revanced/patcher/patch/BytecodePatch { + public fun ()V + public fun (Ljava/util/Set;Ljava/util/Set;)V + public synthetic fun (Ljava/util/Set;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V + public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V + public final fun getFingerprints ()Ljava/util/Set; + public final fun getMultiFingerprints ()Ljava/util/Set; +} + From e4575c93eb65446dde4407a95156137765e2a762 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 30 Sep 2024 16:04:56 +0000 Subject: [PATCH 038/103] chore(release): 2.230.0-dev.1 [skip ci] # [2.230.0-dev.1](https://github.com/anddea/revanced-patches/compare/v2.229.0...v2.230.0-dev.1) (2024-09-30) ### Bug Fixes * **YouTube - Hide feed components:** `Hide carousel shelf` setting sometimes hides the library shelf ([8c3a5d2](https://github.com/anddea/revanced-patches/commit/8c3a5d2fd08cdca5cf66324cc2a44b722e7062cc)) * **YouTube - Player components:** The `Disable player popup panels` setting disables the engagement panel in Mix playlists on certain YouTube versions ([63c463c](https://github.com/anddea/revanced-patches/commit/63c463ca2bebd43c85e79609275f72bf4176f242)) * **YouTube - Settings:** `Search bar in settings` can't find `RYD` and `SponsorBlock` settings ([ab222a6](https://github.com/anddea/revanced-patches/commit/ab222a672317ec7d00d566b1ca655b7b5c9a78cd)) * **YouTube Music - Disable Cairo splash animation:** Some versions are recognized as unpatchable even though they can be patched ([1e74ff9](https://github.com/anddea/revanced-patches/commit/1e74ff94811097370e4c0f0d05dc429601e8f05c)) * **YouTube Music - Player components:** `Remember shuffle state` setting does not remember the correct state ([18482b2](https://github.com/anddea/revanced-patches/commit/18482b2e6b57d2eea95527a05e9d86674446c052)) * **YouTube Music - SponsorBlock:** SponsorBlock does not skip segments at the beginning of a video when in the background ([e895e6f](https://github.com/anddea/revanced-patches/commit/e895e6f5c638df5e2233cc50dc82de9ccfe89df0)) ### Features * **Custom branding icon:** Add `MMT Orange`, `MMT Pink`, `MMT Turquoise` ([e203ad1](https://github.com/anddea/revanced-patches/commit/e203ad159e8717a2042a978e1c6cee04fa8ce745)) * **YouTube - Change start page:** Add `Change start page type` setting ([251d5d7](https://github.com/anddea/revanced-patches/commit/251d5d726061aff08ebe190513e10862db7c4856)) * **YouTube - Custom Shorts action buttons:** Add `Cairo` ([f3b6717](https://github.com/anddea/revanced-patches/commit/f3b67174da909ab07d4b04bef14d5d7ae672cc3b)) * **YouTube - Hide feed components:** Add `Hide related videos` setting ([a82c9ba](https://github.com/anddea/revanced-patches/commit/a82c9bac56e875417e8d0632d5e4cb14a3e4c4aa)) * **YouTube - Hide feed components:** Add `Hide UPCOMING video` setting ([ec9d641](https://github.com/anddea/revanced-patches/commit/ec9d6419df2ed3bd13c4171a92216314202802a1)) * **YouTube - Navigation bar components:** Add `Hide navigation bar` setting ([5936015](https://github.com/anddea/revanced-patches/commit/593601526bd10a6976d108d1d8689c44cf6331e9)) * **YouTube - Shorts Component:** Add `Disable Like button animation` setting ([f9709d3](https://github.com/anddea/revanced-patches/commit/f9709d3b5661abfe73b0ebc1273e8b521aa695be)) * **YouTube - Shorts components:** Add `Height percentage of empty space` setting ([b214aa5](https://github.com/anddea/revanced-patches/commit/b214aa5a8eed5a5929806f1ddbbd71bfc30effe6)) * **YouTube - Shorts components:** Add `Hide stickers` setting ([49cf0fd](https://github.com/anddea/revanced-patches/commit/49cf0fd5c1bf1289944b0e5e78444ae9c23ced60)) * **YouTube Music - Settings:** Add `Open default app settings` setting ([71b11cf](https://github.com/anddea/revanced-patches/commit/71b11cf0c43439b130cb22331252c5940d9229cb)) * **YouTube:** Add `Hide shortcuts` patch ([2435c4f](https://github.com/anddea/revanced-patches/commit/2435c4f781596d0b370e8ca244a30dbdc793c696)) * **YouTube:** Add `Hook YouTube Music actions` patch ([72b61d1](https://github.com/anddea/revanced-patches/commit/72b61d1bc2bac38e38e9ae70a1e7b8a6d0fc03ee)) --- CHANGELOG.md | 28 +++++++++++++++++ README.md | 79 ++++++++++++++++++++++++----------------------- gradle.properties | 2 +- patches.json | 2 +- 4 files changed, 70 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 728e764ab..78a13c2cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,31 @@ +# [2.230.0-dev.1](https://github.com/anddea/revanced-patches/compare/v2.229.0...v2.230.0-dev.1) (2024-09-30) + + +### Bug Fixes + +* **YouTube - Hide feed components:** `Hide carousel shelf` setting sometimes hides the library shelf ([8c3a5d2](https://github.com/anddea/revanced-patches/commit/8c3a5d2fd08cdca5cf66324cc2a44b722e7062cc)) +* **YouTube - Player components:** The `Disable player popup panels` setting disables the engagement panel in Mix playlists on certain YouTube versions ([63c463c](https://github.com/anddea/revanced-patches/commit/63c463ca2bebd43c85e79609275f72bf4176f242)) +* **YouTube - Settings:** `Search bar in settings` can't find `RYD` and `SponsorBlock` settings ([ab222a6](https://github.com/anddea/revanced-patches/commit/ab222a672317ec7d00d566b1ca655b7b5c9a78cd)) +* **YouTube Music - Disable Cairo splash animation:** Some versions are recognized as unpatchable even though they can be patched ([1e74ff9](https://github.com/anddea/revanced-patches/commit/1e74ff94811097370e4c0f0d05dc429601e8f05c)) +* **YouTube Music - Player components:** `Remember shuffle state` setting does not remember the correct state ([18482b2](https://github.com/anddea/revanced-patches/commit/18482b2e6b57d2eea95527a05e9d86674446c052)) +* **YouTube Music - SponsorBlock:** SponsorBlock does not skip segments at the beginning of a video when in the background ([e895e6f](https://github.com/anddea/revanced-patches/commit/e895e6f5c638df5e2233cc50dc82de9ccfe89df0)) + + +### Features + +* **Custom branding icon:** Add `MMT Orange`, `MMT Pink`, `MMT Turquoise` ([e203ad1](https://github.com/anddea/revanced-patches/commit/e203ad159e8717a2042a978e1c6cee04fa8ce745)) +* **YouTube - Change start page:** Add `Change start page type` setting ([251d5d7](https://github.com/anddea/revanced-patches/commit/251d5d726061aff08ebe190513e10862db7c4856)) +* **YouTube - Custom Shorts action buttons:** Add `Cairo` ([f3b6717](https://github.com/anddea/revanced-patches/commit/f3b67174da909ab07d4b04bef14d5d7ae672cc3b)) +* **YouTube - Hide feed components:** Add `Hide related videos` setting ([a82c9ba](https://github.com/anddea/revanced-patches/commit/a82c9bac56e875417e8d0632d5e4cb14a3e4c4aa)) +* **YouTube - Hide feed components:** Add `Hide UPCOMING video` setting ([ec9d641](https://github.com/anddea/revanced-patches/commit/ec9d6419df2ed3bd13c4171a92216314202802a1)) +* **YouTube - Navigation bar components:** Add `Hide navigation bar` setting ([5936015](https://github.com/anddea/revanced-patches/commit/593601526bd10a6976d108d1d8689c44cf6331e9)) +* **YouTube - Shorts Component:** Add `Disable Like button animation` setting ([f9709d3](https://github.com/anddea/revanced-patches/commit/f9709d3b5661abfe73b0ebc1273e8b521aa695be)) +* **YouTube - Shorts components:** Add `Height percentage of empty space` setting ([b214aa5](https://github.com/anddea/revanced-patches/commit/b214aa5a8eed5a5929806f1ddbbd71bfc30effe6)) +* **YouTube - Shorts components:** Add `Hide stickers` setting ([49cf0fd](https://github.com/anddea/revanced-patches/commit/49cf0fd5c1bf1289944b0e5e78444ae9c23ced60)) +* **YouTube Music - Settings:** Add `Open default app settings` setting ([71b11cf](https://github.com/anddea/revanced-patches/commit/71b11cf0c43439b130cb22331252c5940d9229cb)) +* **YouTube:** Add `Hide shortcuts` patch ([2435c4f](https://github.com/anddea/revanced-patches/commit/2435c4f781596d0b370e8ca244a30dbdc793c696)) +* **YouTube:** Add `Hook YouTube Music actions` patch ([72b61d1](https://github.com/anddea/revanced-patches/commit/72b61d1bc2bac38e38e9ae70a1e7b8a6d0fc03ee)) + # [2.229.0](https://github.com/anddea/revanced-patches/compare/v2.228.0...v2.229.0) (2024-09-30) diff --git a/README.md b/README.md index ab8639efd..ac8d64321 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ Check the [wiki](https://github.com/anddea/revanced-patches/wiki) for resources | `Hide layout components` | Adds options to hide general layout components. | 18.29.38 ~ 19.16.39 | | `Hide player buttons` | Adds options to hide buttons in the video player. | 18.29.38 ~ 19.16.39 | | `Hide player flyout menu` | Adds options to hide player flyout menu components. | 18.29.38 ~ 19.16.39 | +| `Hide shortcuts` | Remove, at compile time, the app shortcuts that appears when app icon is long pressed. | 18.29.38 ~ 19.16.39 | +| `Hook YouTube Music actions` | Adds support for opening music in RVX Music using the in-app YouTube Music button. | 18.29.38 ~ 19.16.39 | | `Hook download actions` | Adds support to download videos with an external downloader app using the in-app download button. | 18.29.38 ~ 19.16.39 | | `Layout switch` | Adds an option to spoof the dpi in order to use a tablet or phone layout. | 18.29.38 ~ 19.16.39 | | `MaterialYou` | Applies the MaterialYou theme for Android 12+ devices. | 18.29.38 ~ 19.16.39 | @@ -79,42 +81,42 @@ Check the [wiki](https://github.com/anddea/revanced-patches/wiki) for resources | 💊 Patch | 📜 Description | 🏹 Target Version | |:--------:|:--------------:|:-----------------:| -| `Amoled` | Applies a pure black theme to some components. | 6.20.51 ~ 7.16.52 | -| `Bitrate default value` | Sets the audio quality to 'Always High' when you first install the app. | 6.20.51 ~ 7.16.52 | -| `Bypass image region restrictions` | Adds an option to use a different host for static images, so that images blocked in some countries can be received. | 6.20.51 ~ 7.16.52 | -| `Certificate spoof` | Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate. | 6.20.51 ~ 7.16.52 | -| `Change share sheet` | Add option to change from in-app share sheet to system share sheet. | 6.20.51 ~ 7.16.52 | -| `Change start page` | Adds an option to set which page the app opens in instead of the homepage. | 6.20.51 ~ 7.16.52 | -| `Custom branding icon for YouTube Music` | Changes the YouTube Music app icon to the icon specified in options.json. | 6.20.51 ~ 7.16.52 | -| `Custom branding name for YouTube Music` | Renames the YouTube Music app to the name specified in options.json. | 6.20.51 ~ 7.16.52 | -| `Custom header for YouTube Music` | Applies a custom header in the top left corner within the app. | 6.20.51 ~ 7.16.52 | -| `Disable Cairo splash animation` | Adds an option to disable Cairo splash animation. | 7.06.54 ~ 7.16.52 | -| `Disable auto captions` | Adds an option to disable captions from being automatically enabled. | 6.20.51 ~ 7.16.52 | -| `Disable dislike redirection` | Adds an option to disable redirection to the next track when clicking the Dislike button. | 6.20.51 ~ 7.16.52 | -| `Enable OPUS codec` | Adds an option to use the OPUS audio codec instead of the MP4A audio codec. | 6.20.51 ~ 7.16.52 | -| `Enable debug logging` | Adds an option to enable debug logging. | 6.20.51 ~ 7.16.52 | -| `Enable landscape mode` | Adds an option to enable landscape mode when rotating the screen on phones. | 6.20.51 ~ 7.16.52 | -| `Flyout menu components` | Adds options to hide or change flyout menu components. | 6.20.51 ~ 7.16.52 | -| `GmsCore support` | Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services. | 6.20.51 ~ 7.16.52 | -| `Hide account components` | Adds options to hide components related to the account menu. | 6.20.51 ~ 7.16.52 | -| `Hide action bar components` | Adds options to hide action bar components and replace the offline download button with an external download button. | 6.20.51 ~ 7.16.52 | -| `Hide ads` | Adds options to hide ads. | 6.20.51 ~ 7.16.52 | -| `Hide layout components` | Adds options to hide general layout components. | 6.20.51 ~ 7.16.52 | -| `Hide overlay filter` | Removes, at compile time, the dark overlay that appears when player flyout menus are open. | 6.20.51 ~ 7.16.52 | -| `Hide player overlay filter` | Removes, at compile time, the dark overlay that appears when single-tapping in the player. | 6.20.51 ~ 7.16.52 | -| `Navigation bar components` | Adds options to hide or change components related to the navigation bar. | 6.20.51 ~ 7.16.52 | -| `Player components` | Adds options to hide or change components related to the player. | 6.20.51 ~ 7.16.52 | -| `Remove background playback restrictions` | Removes restrictions on background playback, including for kids videos. | 6.20.51 ~ 7.16.52 | -| `Remove viewer discretion dialog` | Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction. | 6.20.51 ~ 7.16.52 | -| `Restore old style library shelf` | Adds an option to return the Library tab to the old style. | 6.20.51 ~ 7.16.52 | -| `Return YouTube Dislike` | Adds an option to show the dislike count of songs using the Return YouTube Dislike API. | 6.20.51 ~ 7.16.52 | -| `Sanitize sharing links` | Adds an option to remove tracking query parameters from URLs when sharing links. | 6.20.51 ~ 7.16.52 | -| `Settings for YouTube Music` | Applies mandatory patches to implement ReVanced Extended settings into the application. | 6.20.51 ~ 7.16.52 | -| `SponsorBlock` | Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections. | 6.20.51 ~ 7.16.52 | -| `Spoof app version` | Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics. | 6.20.51 ~ 7.16.52 | -| `Translations` | Adds Crowdin translations for YouTube Music. | 6.20.51 ~ 7.16.52 | -| `Video playback` | Adds options to customize settings related to video playback, such as default video quality and playback speed. | 6.20.51 ~ 7.16.52 | -| `Visual preferences icons` | Adds icons to specific preferences in the settings. | 6.20.51 ~ 7.16.52 | +| `Amoled` | Applies a pure black theme to some components. | 6.20.51 ~ 7.16.53 | +| `Bitrate default value` | Sets the audio quality to 'Always High' when you first install the app. | 6.20.51 ~ 7.16.53 | +| `Bypass image region restrictions` | Adds an option to use a different host for static images, so that images blocked in some countries can be received. | 6.20.51 ~ 7.16.53 | +| `Certificate spoof` | Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate. | 6.20.51 ~ 7.16.53 | +| `Change share sheet` | Add option to change from in-app share sheet to system share sheet. | 6.20.51 ~ 7.16.53 | +| `Change start page` | Adds an option to set which page the app opens in instead of the homepage. | 6.20.51 ~ 7.16.53 | +| `Custom branding icon for YouTube Music` | Changes the YouTube Music app icon to the icon specified in options.json. | 6.20.51 ~ 7.16.53 | +| `Custom branding name for YouTube Music` | Renames the YouTube Music app to the name specified in options.json. | 6.20.51 ~ 7.16.53 | +| `Custom header for YouTube Music` | Applies a custom header in the top left corner within the app. | 6.20.51 ~ 7.16.53 | +| `Disable Cairo splash animation` | Adds an option to disable Cairo splash animation. | 7.06.54 ~ 7.16.53 | +| `Disable auto captions` | Adds an option to disable captions from being automatically enabled. | 6.20.51 ~ 7.16.53 | +| `Disable dislike redirection` | Adds an option to disable redirection to the next track when clicking the Dislike button. | 6.20.51 ~ 7.16.53 | +| `Enable OPUS codec` | Adds an option to use the OPUS audio codec instead of the MP4A audio codec. | 6.20.51 ~ 7.16.53 | +| `Enable debug logging` | Adds an option to enable debug logging. | 6.20.51 ~ 7.16.53 | +| `Enable landscape mode` | Adds an option to enable landscape mode when rotating the screen on phones. | 6.20.51 ~ 7.16.53 | +| `Flyout menu components` | Adds options to hide or change flyout menu components. | 6.20.51 ~ 7.16.53 | +| `GmsCore support` | Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services. | 6.20.51 ~ 7.16.53 | +| `Hide account components` | Adds options to hide components related to the account menu. | 6.20.51 ~ 7.16.53 | +| `Hide action bar components` | Adds options to hide action bar components and replace the offline download button with an external download button. | 6.20.51 ~ 7.16.53 | +| `Hide ads` | Adds options to hide ads. | 6.20.51 ~ 7.16.53 | +| `Hide layout components` | Adds options to hide general layout components. | 6.20.51 ~ 7.16.53 | +| `Hide overlay filter` | Removes, at compile time, the dark overlay that appears when player flyout menus are open. | 6.20.51 ~ 7.16.53 | +| `Hide player overlay filter` | Removes, at compile time, the dark overlay that appears when single-tapping in the player. | 6.20.51 ~ 7.16.53 | +| `Navigation bar components` | Adds options to hide or change components related to the navigation bar. | 6.20.51 ~ 7.16.53 | +| `Player components` | Adds options to hide or change components related to the player. | 6.20.51 ~ 7.16.53 | +| `Remove background playback restrictions` | Removes restrictions on background playback, including for kids videos. | 6.20.51 ~ 7.16.53 | +| `Remove viewer discretion dialog` | Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction. | 6.20.51 ~ 7.16.53 | +| `Restore old style library shelf` | Adds an option to return the Library tab to the old style. | 6.20.51 ~ 7.16.53 | +| `Return YouTube Dislike` | Adds an option to show the dislike count of songs using the Return YouTube Dislike API. | 6.20.51 ~ 7.16.53 | +| `Sanitize sharing links` | Adds an option to remove tracking query parameters from URLs when sharing links. | 6.20.51 ~ 7.16.53 | +| `Settings for YouTube Music` | Applies mandatory patches to implement ReVanced Extended settings into the application. | 6.20.51 ~ 7.16.53 | +| `SponsorBlock` | Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections. | 6.20.51 ~ 7.16.53 | +| `Spoof app version` | Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics. | 6.20.51 ~ 7.16.53 | +| `Translations` | Adds Crowdin translations for YouTube Music. | 6.20.51 ~ 7.16.53 | +| `Video playback` | Adds options to customize settings related to video playback, such as default video quality and playback speed. | 6.20.51 ~ 7.16.53 | +| `Visual preferences icons` | Adds icons to specific preferences in the settings. | 6.20.51 ~ 7.16.53 | ### [📦 `com.reddit.frontpage`](https://play.google.com/store/apps/details?id=com.reddit.frontpage) @@ -175,11 +177,10 @@ Example: "name": "com.google.android.apps.youtube.music", "versions": [ "6.20.51", - "6.29.58", - "6.33.52", + "6.29.59", "6.42.55", "6.51.53", - "7.16.52" + "7.16.53" ] } ], diff --git a/gradle.properties b/gradle.properties index 614329b0b..8dffaad08 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.229.0 +version = 2.230.0-dev.1 diff --git a/patches.json b/patches.json index 7bcdacd9e..1766e544d 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Ambient mode control","description":"Adds options to disable Ambient mode and to bypass Ambient mode restrictions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Amoled","description":"Applies a pure black theme to some components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bitrate default value","description":"Sets the audio quality to \u0027Always High\u0027 when you first install the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Certificate spoof","description":"Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Changes the package name for Reddit to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"PackageNameReddit","default":"com.reddit.frontpage","values":{"Clone":"com.reddit.frontpage.revanced","Default":"com.reddit.frontpage.rvx","Original":"com.reddit.frontpage"},"title":"Package name of Reddit","description":"The name of the package to rename the app to.","required":true}]},{"name":"Change player flyout menu toggles","description":"Adds an option to use text toggles instead of switch toggles within the additional settings menu.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change version code","description":"Changes the version code of the app to the value specified in options.json. Except when mounting, this can prevent app stores from updating the app and allow the app to be installed over an existing installation that has a higher version code. By default, the highest version code is set.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"ChangeVersionCode","default":false,"values":null,"title":"Change version code","description":"Changes the version code of the app.","required":true},{"key":"VersionCode","default":"2147483647","values":null,"title":"Version code","description":"The version code to use. (1 ~ 2147483647)","required":true}]},{"name":"Custom Shorts action buttons","description":"Changes, at compile time, the icon of the action buttons of the Shorts player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"round","values":{"Outline":"outline","OutlineCircle":"outlinecircle","Round":"round","YouTube":"youtube","YouTubeOutline":"youtubeoutline"},"title":"Shorts icon style ","description":"The style of the icons for the action buttons in the Shorts player.","required":true}]},{"name":"Custom branding icon for YouTube","description":"Changes the YouTube app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube":"youtube"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"CustomHeader","default":"","values":null,"title":"Custom header","description":"The header to apply to the app.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- yt_premium_wordmark_header_dark.png\n- yt_premium_wordmark_header_light.png\n- yt_wordmark_header_dark.png\n- yt_wordmark_header_light.png\n\nThe image dimensions must be as follows:\n- drawable-xxxhdpi: 512px x 192px\n- drawable-xxhdpi: 387px x 144px\n- drawable-xhdpi: 258px x 96px\n- drawable-hdpi: 194px x 72px\n- drawable-mdpi: 129px x 48px","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashAnimation","default":true,"values":null,"title":"Restore old splash animation","description":"Restore the old style splash animation.","required":true}]},{"name":"Custom branding icon for YouTube Music","description":"Changes the YouTube Music app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube Music":"youtube_music"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_music_background_color_108.png\n- adaptiveproduct_youtube_music_foreground_color_108.png\n- ic_launcher_release.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashIcon","default":false,"values":null,"title":"Restore old splash icon","description":"Restore the old style splash icon.\n\nIf you enable both the old style splash icon and the Cairo splash animation,\n\nOld style splash icon will appear first and then the Cairo splash animation will start.","required":true}]},{"name":"Custom branding name for Reddit","description":"Renames the Reddit app to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"Reddit","values":{"Default":"RVX Reddit","Original":"Reddit"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube","description":"Renames the YouTube app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"RVX","values":{"ReVanced Extended":"ReVanced Extended","RVX":"RVX","YouTube RVX":"YouTube RVX","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube Music","description":"Renames the YouTube Music app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppNameNotification","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in notification panel","description":"The name of the app as it appears in the notification panel.","required":true},{"key":"AppNameLauncher","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in launcher","description":"The name of the app as it appears in the launcher.","required":true}]},{"name":"Custom double tap length","description":"Adds Double-tap to seek values that are specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DoubleTapLengthArrays","default":"3, 5, 10, 15, 20, 30, 60, 120, 180","values":null,"title":"Double-tap to seek values","description":"A list of custom Double-tap to seek lengths to be added, separated by commas.","required":true}]},{"name":"Custom header for YouTube Music","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube Music\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube Music\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- action_bar_logo.png\n- logo_music.png\n- ytm_logo.png\n\nThe image \u0027action_bar_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 320px x 96px\n- drawable-xxhdpi: 240px x 72px\n- drawable-xhdpi: 160px x 48px\n- drawable-hdpi: 121px x 36px\n- drawable-mdpi: 80px x 24px\n\nThe image \u0027logo_music.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 576px x 200px\n- drawable-xxhdpi: 432px x 150px\n- drawable-xhdpi: 288px x 100px\n- drawable-hdpi: 217px x 76px\n- drawable-mdpi: 144px x 50px\n\nThe image \u0027ytm_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 412px x 144px\n- drawable-xxhdpi: 309px x 108px\n- drawable-xhdpi: 206px x 72px\n- drawable-hdpi: 155px x 54px\n- drawable-mdpi: 103px x 36px","required":true}]},{"name":"Description components","description":"Adds options to hide and disable description components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Cairo splash animation","description":"Adds an option to disable Cairo splash animation.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["7.06.54","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable QUIC protocol","description":"Adds an option to disable CronetEngine\u0027s QUIC protocol.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto audio tracks","description":"Adds an option to disable audio tracks from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dislike redirection","description":"Adds an option to disable redirection to the next track when clicking the Dislike button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable haptic feedback","description":"Adds options to disable haptic feedback when swiping in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Adds an option to disable the popup that appears when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable splash animation","description":"Adds an option to disable the splash animation on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an option to use the OPUS audio codec instead of the MP4A audio codec.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable external browser","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable gradient loading screen","description":"Adds an option to enable the gradient loading screen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable landscape mode","description":"Adds an option to enable landscape mode when rotating the screen on phones.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Flyout menu components","description":"Adds options to hide or change flyout menu components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Force player buttons background","description":"Changes, at compile time, the dark background surrounding the video player controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"BackgroundColor","default":"?ytOverlayBackgroundMediumLight","values":{"Default":"?ytOverlayBackgroundMediumLight","Transparent":"@android:color/transparent","Opacity10":"#1a000000","Opacity20":"#33000000","Opacity30":"#4d000000","Opacity40":"#66000000","Opacity50":"#80000000","Opacity60":"#99000000","Opacity70":"#b3000000","Opacity80":"#cc000000","Opacity90":"#e6000000","Opacity100":"#ff000000"},"title":"Background color","description":"Specify a background color for player buttons using a hex color code. The first two symbols of the hex code represent the alpha channel, which is used to change the opacity.","required":false}]},{"name":"Force snackbar theme","description":"Force snackbar background color to match selected theme.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CornerRadius","default":"8.0dip","values":null,"title":"Corner radius","description":"Specify a corner radius for the snackbar.","required":false},{"key":"BackgroundColor","default":"?ytChipBackground","values":{"Chip":"?ytChipBackground","Base":"?ytBaseBackground"},"title":"Background color","description":"Specify a background color for the snackbar. You can specify hex color.","required":false},{"key":"StrokeColor","default":"none","values":{"None":"none","Accent":"?attr/colorAccent","Inverted":"?attr/ytInvertedBackground"},"title":"Stroke color","description":"Specify a stroke color for the snackbar. You can specify hex color.","required":false}]},{"name":"Fullscreen components","description":"Adds options to hide or change components related to fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"Hide Recently Visited shelf","description":"Adds an option to hide the Recently Visited shelf in the sidebar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts dimming","description":"Removes, at compile time, the dimming effect at the top and bottom of Shorts videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide account components","description":"Adds options to hide components related to the account menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action bar components","description":"Adds options to hide action bar components and replace the offline download button with an external download button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action buttons","description":"Adds options to hide action buttons under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide comments components","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed components","description":"Adds options to hide components related to feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed flyout menu","description":"Adds the ability to hide feed flyout menu components using a custom filter.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide navigation buttons","description":"Adds options to hide buttons in the navigation bar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide overlay filter","description":"Removes, at compile time, the dark overlay that appears when player flyout menus are open.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds options to hide buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player flyout menu","description":"Adds options to hide player flyout menu components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player overlay filter","description":"Removes, at compile time, the dark overlay that appears when single-tapping in the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended communities shelf","description":"Adds an option to hide the recommended communities shelves in subreddits.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hook download actions","description":"Adds support to download videos with an external downloader app using the in-app download button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Layout switch","description":"Adds an option to spoof the dpi in order to use a tablet or phone layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"MaterialYou","description":"Applies the MaterialYou theme for Android 12+ devices.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Miniplayer","description":"Adds options to change the in app minimized player, and if patching target 19.16+ adds options to use modern miniplayers.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Overlay buttons","description":"Adds options to display overlay buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"rounded","values":{"Bold":"bold","Rounded":"rounded","Thin":"thin"},"title":"Icon type","description":"The icon type.","required":true},{"key":"BottomMargin","default":"5.0dip","values":{"Wider":"10.0dip","Default":"5.0dip"},"title":"Bottom margin","description":"The bottom margin for the overlay buttons and timestamp.","required":true},{"key":"ChangeTopButtons","default":false,"values":null,"title":"Change top buttons","description":"Change the icons at the top of the player.","required":true}]},{"name":"Player components","description":"Adds options to hide or change components related to the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player components","description":"Adds options to hide or change components related to the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Premium icon","description":"Unlocks premium app icons.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for kids videos.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for music and kids videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove subreddit dialog","description":"Adds options to remove the NSFW community warning and notifications suggestion dialogs by dismissing them automatically.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old style library shelf","description":"Adds an option to return the Library tab to the old style.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of songs using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar components","description":"Adds options to hide or change components related to the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CairoStartColor","default":"#ffff2791","values":null,"title":"Cairo start color","description":"Set Cairo start color for the seekbar.","required":false},{"key":"CairoEndColor","default":"#ffff0033","values":null,"title":"Cairo end color","description":"Set Cairo end color for the seekbar.","required":false}]},{"name":"Settings for Reddit","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"InsertPosition","default":"About","values":{"Parent settings":"@string/parent_tools_key","General":"@string/general_key","Account":"@string/account_switcher_key","Data saving":"@string/data_saving_settings_key","Autoplay":"@string/auto_play_key","Video quality preferences":"@string/video_quality_settings_key","Background":"@string/offline_key","Watch on TV":"@string/pair_with_tv_key","Manage all history":"@string/history_key","Your data in YouTube":"@string/your_data_key","Privacy":"@string/privacy_key","History \u0026 privacy":"@string/privacy_key","Try experimental new features":"@string/premium_early_access_browse_page_key","Purchases and memberships":"@string/subscription_product_setting_key","Billing \u0026 payments":"@string/billing_and_payment_key","Billing and payments":"@string/billing_and_payment_key","Notifications":"@string/notification_key","Connected apps":"@string/connected_accounts_browse_page_key","Live chat":"@string/live_chat_key","Captions":"@string/captions_key","Accessibility":"@string/accessibility_settings_key","About":"@string/about_key"},"title":"Insert position","description":"The settings menu name that the RVX settings menu should be above.","required":true},{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube Music","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Shorts components","description":"Adds options to hide or change components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"OutlineIcon","default":true,"values":null,"title":"Outline icons","description":"Apply the outline icon.","required":true},{"key":"NewSegmentAlignment","default":"right","values":{"Right":"right","Left":"left"},"title":"New segment alignment","description":"Align new segment window.","required":true}]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube client version. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof streaming data","description":"Adds options to spoof the streaming data to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof watch history","description":"Adds an option to change the domain of the watch history or check its status.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options for controlling volume and brightness with swiping, and whether to enter fullscreen when swiping down below the player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Changes the app\u0027s theme to the values specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DarkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled Black":"@android:color/black","Catppuccin (Mocha)":"#FF181825","Dark Pink":"#FF290025","Dark Blue":"#FF001029","Dark Green":"#FF002905","Dark Yellow":"#FF282900","Dark Orange":"#FF291800","Dark Red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true},{"key":"LightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Catppuccin (Latte)":"#FFE6E9EF","Light Pink":"#FFFCCFF3","Light Blue":"#FFD1E0FF","Light Green":"#FFCCFFCC","Light Yellow":"#FFFDFFCC","Light Orange":"#FFFFE6CC","Light Red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true}]},{"name":"Toolbar components","description":"Adds options to hide or change components located on the toolbar, such as toolbar buttons, search bar, and header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Translations","description":"Adds Crowdin translations for YouTube Music.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomLanguage","default":"","values":null,"title":"Custom language file","description":"The file path to the strings.xml file.\nPlease note that applying the strings.xml file will overwrite all existing language translations.","required":false},{"key":"SelectedLanguages","default":"bg-rBG, bn, cs-rCZ, el-rGR, es-rES, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, nl-rNL, pl-rPL, pt-rBR, ro-rRO, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Selected RVX languages","description":"Selected RVX languages that will be added.","required":false},{"key":"SelectedAppLanguages","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"Selected app languages","description":"Selected app languages that will be kept, languages that are not in the list will be removed from the app.","required":false}]},{"name":"Translations","description":"Add Crowdin translations for YouTube.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomLanguage","default":"","values":null,"title":"Custom language file","description":"The file path to the strings.xml file.\nPlease note that applying the strings.xml file will overwrite all existing language translations.","required":false},{"key":"SelectedLanguages","default":"ar, bg-rBG, bn, de-rDE, el-rGR, es-rES, fi-rFI, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, pl-rPL, pt-rBR, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Selected RVX languages","description":"Selected RVX languages that will be added.","required":false},{"key":"SelectedAppLanguages","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"Selected app languages","description":"Selected app languages that will be kept, languages that are not in the list will be removed from the app.","required":false}]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Visual preferences icons","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.58","6.33.52","6.42.55","6.51.53","7.16.52"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"Extended icon","description":"Apply different icons for Extended preference.","required":false}]},{"name":"Visual preferences icons","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true}]}] \ No newline at end of file +[{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Ambient mode control","description":"Adds options to disable Ambient mode and to bypass Ambient mode restrictions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Amoled","description":"Applies a pure black theme to some components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bitrate default value","description":"Sets the audio quality to \u0027Always High\u0027 when you first install the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Certificate spoof","description":"Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Changes the package name for Reddit to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"PackageNameReddit","default":"com.reddit.frontpage","values":{"Clone":"com.reddit.frontpage.revanced","Default":"com.reddit.frontpage.rvx","Original":"com.reddit.frontpage"},"title":"Package name of Reddit","description":"The name of the package to rename the app to.","required":true}]},{"name":"Change player flyout menu toggles","description":"Adds an option to use text toggles instead of switch toggles within the additional settings menu.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change version code","description":"Changes the version code of the app to the value specified in options.json. Except when mounting, this can prevent app stores from updating the app and allow the app to be installed over an existing installation that has a higher version code. By default, the highest version code is set.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"ChangeVersionCode","default":false,"values":null,"title":"Change version code","description":"Changes the version code of the app.","required":true},{"key":"VersionCode","default":"2147483647","values":null,"title":"Version code","description":"The version code to use. (1 ~ 2147483647)","required":true}]},{"name":"Custom Shorts action buttons","description":"Changes, at compile time, the icon of the action buttons of the Shorts player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"round","values":{"Cairo":"round","Outline":"outline","OutlineCircle":"outlinecircle","Round":"round","YouTube":"youtube","YouTubeOutline":"youtubeoutline"},"title":"Shorts icon style ","description":"The style of the icons for the action buttons in the Shorts player.","required":true}]},{"name":"Custom branding icon for YouTube","description":"Changes the YouTube app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube":"youtube"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"CustomHeader","default":"","values":null,"title":"Custom header","description":"The header to apply to the app.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- yt_premium_wordmark_header_dark.png\n- yt_premium_wordmark_header_light.png\n- yt_wordmark_header_dark.png\n- yt_wordmark_header_light.png\n\nThe image dimensions must be as follows:\n- drawable-xxxhdpi: 512px x 192px\n- drawable-xxhdpi: 387px x 144px\n- drawable-xhdpi: 258px x 96px\n- drawable-hdpi: 194px x 72px\n- drawable-mdpi: 129px x 48px","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashAnimation","default":true,"values":null,"title":"Restore old splash animation","description":"Restore the old style splash animation.","required":true}]},{"name":"Custom branding icon for YouTube Music","description":"Changes the YouTube Music app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube Music":"youtube_music"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_music_background_color_108.png\n- adaptiveproduct_youtube_music_foreground_color_108.png\n- ic_launcher_release.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashIcon","default":false,"values":null,"title":"Restore old splash icon","description":"Restore the old style splash icon.\n\nIf you enable both the old style splash icon and the Cairo splash animation,\n\nOld style splash icon will appear first and then the Cairo splash animation will start.","required":true}]},{"name":"Custom branding name for Reddit","description":"Renames the Reddit app to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"Reddit","values":{"Default":"RVX Reddit","Original":"Reddit"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube","description":"Renames the YouTube app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"RVX","values":{"ReVanced Extended":"ReVanced Extended","RVX":"RVX","YouTube RVX":"YouTube RVX","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube Music","description":"Renames the YouTube Music app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppNameNotification","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in notification panel","description":"The name of the app as it appears in the notification panel.","required":true},{"key":"AppNameLauncher","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in launcher","description":"The name of the app as it appears in the launcher.","required":true}]},{"name":"Custom double tap length","description":"Adds Double-tap to seek values that are specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DoubleTapLengthArrays","default":"3, 5, 10, 15, 20, 30, 60, 120, 180","values":null,"title":"Double-tap to seek values","description":"A list of custom Double-tap to seek lengths to be added, separated by commas.","required":true}]},{"name":"Custom header for YouTube Music","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube Music\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube Music\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- action_bar_logo.png\n- logo_music.png\n- ytm_logo.png\n\nThe image \u0027action_bar_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 320px x 96px\n- drawable-xxhdpi: 240px x 72px\n- drawable-xhdpi: 160px x 48px\n- drawable-hdpi: 121px x 36px\n- drawable-mdpi: 80px x 24px\n\nThe image \u0027logo_music.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 576px x 200px\n- drawable-xxhdpi: 432px x 150px\n- drawable-xhdpi: 288px x 100px\n- drawable-hdpi: 217px x 76px\n- drawable-mdpi: 144px x 50px\n\nThe image \u0027ytm_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 412px x 144px\n- drawable-xxhdpi: 309px x 108px\n- drawable-xhdpi: 206px x 72px\n- drawable-hdpi: 155px x 54px\n- drawable-mdpi: 103px x 36px","required":true}]},{"name":"Description components","description":"Adds options to hide and disable description components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Cairo splash animation","description":"Adds an option to disable Cairo splash animation.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["7.06.54","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable QUIC protocol","description":"Adds an option to disable CronetEngine\u0027s QUIC protocol.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto audio tracks","description":"Adds an option to disable audio tracks from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dislike redirection","description":"Adds an option to disable redirection to the next track when clicking the Dislike button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable haptic feedback","description":"Adds options to disable haptic feedback when swiping in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Adds an option to disable the popup that appears when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable splash animation","description":"Adds an option to disable the splash animation on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an option to use the OPUS audio codec instead of the MP4A audio codec.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable external browser","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable gradient loading screen","description":"Adds an option to enable the gradient loading screen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable landscape mode","description":"Adds an option to enable landscape mode when rotating the screen on phones.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Flyout menu components","description":"Adds options to hide or change flyout menu components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Force player buttons background","description":"Changes, at compile time, the dark background surrounding the video player controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"BackgroundColor","default":"?ytOverlayBackgroundMediumLight","values":{"Default":"?ytOverlayBackgroundMediumLight","Transparent":"@android:color/transparent","Opacity10":"#1a000000","Opacity20":"#33000000","Opacity30":"#4d000000","Opacity40":"#66000000","Opacity50":"#80000000","Opacity60":"#99000000","Opacity70":"#b3000000","Opacity80":"#cc000000","Opacity90":"#e6000000","Opacity100":"#ff000000"},"title":"Background color","description":"Specify a background color for player buttons using a hex color code. The first two symbols of the hex code represent the alpha channel, which is used to change the opacity.","required":false}]},{"name":"Force snackbar theme","description":"Force snackbar background color to match selected theme.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CornerRadius","default":"8.0dip","values":null,"title":"Corner radius","description":"Specify a corner radius for the snackbar.","required":false},{"key":"BackgroundColor","default":"?ytChipBackground","values":{"Chip":"?ytChipBackground","Base":"?ytBaseBackground"},"title":"Background color","description":"Specify a background color for the snackbar. You can specify hex color.","required":false},{"key":"StrokeColor","default":"none","values":{"None":"none","Accent":"?attr/colorAccent","Inverted":"?attr/ytInvertedBackground"},"title":"Stroke color","description":"Specify a stroke color for the snackbar. You can specify hex color.","required":false}]},{"name":"Fullscreen components","description":"Adds options to hide or change components related to fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"Hide Recently Visited shelf","description":"Adds an option to hide the Recently Visited shelf in the sidebar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts dimming","description":"Removes, at compile time, the dimming effect at the top and bottom of Shorts videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide account components","description":"Adds options to hide components related to the account menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action bar components","description":"Adds options to hide action bar components and replace the offline download button with an external download button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action buttons","description":"Adds options to hide action buttons under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide comments components","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed components","description":"Adds options to hide components related to feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed flyout menu","description":"Adds the ability to hide feed flyout menu components using a custom filter.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide navigation buttons","description":"Adds options to hide buttons in the navigation bar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide overlay filter","description":"Removes, at compile time, the dark overlay that appears when player flyout menus are open.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds options to hide buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player flyout menu","description":"Adds options to hide player flyout menu components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player overlay filter","description":"Removes, at compile time, the dark overlay that appears when single-tapping in the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended communities shelf","description":"Adds an option to hide the recommended communities shelves in subreddits.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide shortcuts","description":"Remove, at compile time, the app shortcuts that appears when app icon is long pressed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"Explore","default":false,"values":null,"title":"Hide Explore","description":"Hide Explore from shortcuts.","required":true},{"key":"Subscriptions","default":false,"values":null,"title":"Hide Subscriptions","description":"Hide Subscriptions from shortcuts.","required":true},{"key":"Search","default":false,"values":null,"title":"Hide Search","description":"Hide Search from shortcuts.","required":true},{"key":"Shorts","default":true,"values":null,"title":"Hide Shorts","description":"Hide Shorts from shortcuts.","required":true}]},{"name":"Hook YouTube Music actions","description":"Adds support for opening music in RVX Music using the in-app YouTube Music button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hook download actions","description":"Adds support to download videos with an external downloader app using the in-app download button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Layout switch","description":"Adds an option to spoof the dpi in order to use a tablet or phone layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"MaterialYou","description":"Applies the MaterialYou theme for Android 12+ devices.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Miniplayer","description":"Adds options to change the in app minimized player, and if patching target 19.16+ adds options to use modern miniplayers.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Overlay buttons","description":"Adds options to display overlay buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"rounded","values":{"Bold":"bold","Rounded":"rounded","Thin":"thin"},"title":"Icon type","description":"The icon type.","required":true},{"key":"BottomMargin","default":"5.0dip","values":{"Wider":"10.0dip","Default":"5.0dip"},"title":"Bottom margin","description":"The bottom margin for the overlay buttons and timestamp.","required":true},{"key":"ChangeTopButtons","default":false,"values":null,"title":"Change top buttons","description":"Change the icons at the top of the player.","required":true}]},{"name":"Player components","description":"Adds options to hide or change components related to the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player components","description":"Adds options to hide or change components related to the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Premium icon","description":"Unlocks premium app icons.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for kids videos.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for music and kids videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove subreddit dialog","description":"Adds options to remove the NSFW community warning and notifications suggestion dialogs by dismissing them automatically.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old style library shelf","description":"Adds an option to return the Library tab to the old style.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of songs using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar components","description":"Adds options to hide or change components related to the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CairoStartColor","default":"#ffff2791","values":null,"title":"Cairo start color","description":"Set Cairo start color for the seekbar.","required":false},{"key":"CairoEndColor","default":"#ffff0033","values":null,"title":"Cairo end color","description":"Set Cairo end color for the seekbar.","required":false}]},{"name":"Settings for Reddit","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"InsertPosition","default":"About","values":{"Parent settings":"@string/parent_tools_key","General":"@string/general_key","Account":"@string/account_switcher_key","Data saving":"@string/data_saving_settings_key","Autoplay":"@string/auto_play_key","Video quality preferences":"@string/video_quality_settings_key","Background":"@string/offline_key","Watch on TV":"@string/pair_with_tv_key","Manage all history":"@string/history_key","Your data in YouTube":"@string/your_data_key","Privacy":"@string/privacy_key","History \u0026 privacy":"@string/privacy_key","Try experimental new features":"@string/premium_early_access_browse_page_key","Purchases and memberships":"@string/subscription_product_setting_key","Billing \u0026 payments":"@string/billing_and_payment_key","Billing and payments":"@string/billing_and_payment_key","Notifications":"@string/notification_key","Connected apps":"@string/connected_accounts_browse_page_key","Live chat":"@string/live_chat_key","Captions":"@string/captions_key","Accessibility":"@string/accessibility_settings_key","About":"@string/about_key"},"title":"Insert position","description":"The settings menu name that the RVX settings menu should be above.","required":true},{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube Music","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Shorts components","description":"Adds options to hide or change components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"OutlineIcon","default":true,"values":null,"title":"Outline icons","description":"Apply the outline icon.","required":true},{"key":"NewSegmentAlignment","default":"right","values":{"Right":"right","Left":"left"},"title":"New segment alignment","description":"Align new segment window.","required":true}]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube client version. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof streaming data","description":"Adds options to spoof the streaming data to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof watch history","description":"Adds an option to change the domain of the watch history or check its status.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options for controlling volume and brightness with swiping, and whether to enter fullscreen when swiping down below the player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Changes the app\u0027s theme to the values specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DarkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled Black":"@android:color/black","Catppuccin (Mocha)":"#FF181825","Dark Pink":"#FF290025","Dark Blue":"#FF001029","Dark Green":"#FF002905","Dark Yellow":"#FF282900","Dark Orange":"#FF291800","Dark Red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true},{"key":"LightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Catppuccin (Latte)":"#FFE6E9EF","Light Pink":"#FFFCCFF3","Light Blue":"#FFD1E0FF","Light Green":"#FFCCFFCC","Light Yellow":"#FFFDFFCC","Light Orange":"#FFFFE6CC","Light Red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true}]},{"name":"Toolbar components","description":"Adds options to hide or change components located on the toolbar, such as toolbar buttons, search bar, and header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Translations","description":"Adds Crowdin translations for YouTube Music.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomLanguage","default":"","values":null,"title":"Custom language file","description":"The file path to the strings.xml file.\nPlease note that applying the strings.xml file will overwrite all existing language translations.","required":false},{"key":"SelectedLanguages","default":"bg-rBG, bn, cs-rCZ, el-rGR, es-rES, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, nl-rNL, pl-rPL, pt-rBR, ro-rRO, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Selected RVX languages","description":"Selected RVX languages that will be added.","required":false},{"key":"SelectedAppLanguages","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"Selected app languages","description":"Selected app languages that will be kept, languages that are not in the list will be removed from the app.","required":false}]},{"name":"Translations","description":"Add Crowdin translations for YouTube.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomLanguage","default":"","values":null,"title":"Custom language file","description":"The file path to the strings.xml file.\nPlease note that applying the strings.xml file will overwrite all existing language translations.","required":false},{"key":"SelectedLanguages","default":"ar, bg-rBG, bn, de-rDE, el-rGR, es-rES, fi-rFI, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, pl-rPL, pt-rBR, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Selected RVX languages","description":"Selected RVX languages that will be added.","required":false},{"key":"SelectedAppLanguages","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"Selected app languages","description":"Selected app languages that will be kept, languages that are not in the list will be removed from the app.","required":false}]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Visual preferences icons","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"Extended icon","description":"Apply different icons for Extended preference.","required":false}]},{"name":"Visual preferences icons","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true}]}] \ No newline at end of file From 4f2268fa0f255c10535dfa45cc3843bb752f03bc Mon Sep 17 00:00:00 2001 From: Patriot99 <31535921+Patriot99@users.noreply.github.com> Date: Tue, 1 Oct 2024 09:33:30 +0200 Subject: [PATCH 039/103] chore(YouTube - Translations): Update `Polish` (#845) --- .../youtube/translations/pl-rPL/missing_strings.xml | 12 ------------ .../youtube/translations/pl-rPL/strings.xml | 9 +++++++++ 2 files changed, 9 insertions(+), 12 deletions(-) delete mode 100644 src/main/resources/youtube/translations/pl-rPL/missing_strings.xml diff --git a/src/main/resources/youtube/translations/pl-rPL/missing_strings.xml b/src/main/resources/youtube/translations/pl-rPL/missing_strings.xml deleted file mode 100644 index 36c253723..000000000 --- a/src/main/resources/youtube/translations/pl-rPL/missing_strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - Save music button is shown. - Save music button is hidden. - Hide Save music button - Stickers are shown. - Stickers are hidden. - Hide stickers - MMT Orange - MMT Pink - MMT Turquoise - diff --git a/src/main/resources/youtube/translations/pl-rPL/strings.xml b/src/main/resources/youtube/translations/pl-rPL/strings.xml index e86fe993b..e5124a9ba 100644 --- a/src/main/resources/youtube/translations/pl-rPL/strings.xml +++ b/src/main/resources/youtube/translations/pl-rPL/strings.xml @@ -1589,4 +1589,13 @@ Jeśli opcja nie przynosi skutku, spróbuj przełączyć się na tryb incognito. Sprawdź lub usuń listę kanałów dodanych do białej listy Biała lista kanałów SponsorBlock + Widoczny + Ukryty + Przycisk od zapisywania muzyki + Widoczne + Ukryte + Naklejki + Pomarańczowa od MMT + Różowa od MMT + Turkusowa od MMT From 231a4686be7fe5b87690d9cf8c88fae5245971ef Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:58:16 +0300 Subject: [PATCH 040/103] fix(YouTube - Custom branding icon): Patch failed due to animation files when AFN is selected --- .../branding/afn_blue/splash/drawable/$avd_anim__0.xml | 10 ---------- .../branding/afn_blue/splash/drawable/$avd_anim__1.xml | 6 ------ .../branding/afn_red/splash/drawable/$avd_anim__0.xml | 10 ---------- .../branding/afn_red/splash/drawable/$avd_anim__1.xml | 6 ------ 4 files changed, 32 deletions(-) delete mode 100644 src/main/resources/youtube/branding/afn_blue/splash/drawable/$avd_anim__0.xml delete mode 100644 src/main/resources/youtube/branding/afn_blue/splash/drawable/$avd_anim__1.xml delete mode 100644 src/main/resources/youtube/branding/afn_red/splash/drawable/$avd_anim__0.xml delete mode 100644 src/main/resources/youtube/branding/afn_red/splash/drawable/$avd_anim__1.xml diff --git a/src/main/resources/youtube/branding/afn_blue/splash/drawable/$avd_anim__0.xml b/src/main/resources/youtube/branding/afn_blue/splash/drawable/$avd_anim__0.xml deleted file mode 100644 index 1ced71622..000000000 --- a/src/main/resources/youtube/branding/afn_blue/splash/drawable/$avd_anim__0.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/branding/afn_blue/splash/drawable/$avd_anim__1.xml b/src/main/resources/youtube/branding/afn_blue/splash/drawable/$avd_anim__1.xml deleted file mode 100644 index 72fcf4b7a..000000000 --- a/src/main/resources/youtube/branding/afn_blue/splash/drawable/$avd_anim__1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/branding/afn_red/splash/drawable/$avd_anim__0.xml b/src/main/resources/youtube/branding/afn_red/splash/drawable/$avd_anim__0.xml deleted file mode 100644 index 5c2b9645e..000000000 --- a/src/main/resources/youtube/branding/afn_red/splash/drawable/$avd_anim__0.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/branding/afn_red/splash/drawable/$avd_anim__1.xml b/src/main/resources/youtube/branding/afn_red/splash/drawable/$avd_anim__1.xml deleted file mode 100644 index 72fcf4b7a..000000000 --- a/src/main/resources/youtube/branding/afn_red/splash/drawable/$avd_anim__1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file From 18598b26cb79f68d7cca197f042972d73805fae5 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 1 Oct 2024 08:10:08 +0000 Subject: [PATCH 041/103] chore(release): 2.230.0-dev.2 [skip ci] # [2.230.0-dev.2](https://github.com/anddea/revanced-patches/compare/v2.230.0-dev.1...v2.230.0-dev.2) (2024-10-01) ### Bug Fixes * **YouTube - Custom branding icon:** Patch failed due to animation files when AFN is selected ([231a468](https://github.com/anddea/revanced-patches/commit/231a4686be7fe5b87690d9cf8c88fae5245971ef)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78a13c2cc..4d14011b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.230.0-dev.2](https://github.com/anddea/revanced-patches/compare/v2.230.0-dev.1...v2.230.0-dev.2) (2024-10-01) + + +### Bug Fixes + +* **YouTube - Custom branding icon:** Patch failed due to animation files when AFN is selected ([231a468](https://github.com/anddea/revanced-patches/commit/231a4686be7fe5b87690d9cf8c88fae5245971ef)) + # [2.230.0-dev.1](https://github.com/anddea/revanced-patches/compare/v2.229.0...v2.230.0-dev.1) (2024-09-30) diff --git a/gradle.properties b/gradle.properties index 8dffaad08..ec0564978 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.230.0-dev.1 +version = 2.230.0-dev.2 From 8bd264e783a982fcc6e6270e579b98f033e58c77 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:48:06 +0300 Subject: [PATCH 042/103] feat(YouTube - Visual preferences icons): Add `YT Alt` icon for RVX setting --- .../visual/VisualPreferencesIconsPatch.kt | 11 +- .../icons/drawable-xxhdpi/empty_icon.png | Bin 100 -> 0 bytes .../youtube/settings/icons/drawable/icon.xml | 18 - .../revanced_extended_settings_key_icon.xml | 18 - .../revanced_extended_settings_key_icon.xml | 18 - .../revanced_extended_settings_key_icon.xml | 18 - .../revanced_extended_settings_key_icon.xml | 12702 ---------------- .../revanced_extended_settings_key_icon.xml | 31 +- 8 files changed, 18 insertions(+), 12798 deletions(-) delete mode 100644 src/main/resources/youtube/settings/icons/drawable-xxhdpi/empty_icon.png delete mode 100644 src/main/resources/youtube/settings/icons/drawable/icon.xml delete mode 100644 src/main/resources/youtube/settings/icons/extension/drawable/revanced_extended_settings_key_icon.xml delete mode 100644 src/main/resources/youtube/settings/icons/gear/drawable/revanced_extended_settings_key_icon.xml delete mode 100644 src/main/resources/youtube/settings/icons/revanced/drawable/revanced_extended_settings_key_icon.xml delete mode 100755 src/main/resources/youtube/settings/icons/revanced_colored/drawable/revanced_extended_settings_key_icon.xml diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt index 8d8ae9350..3f0a2c206 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt @@ -32,6 +32,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "Gear" to "gear", "ReVanced" to "revanced", "ReVanced Colored" to "revanced_colored", + "YT Alt" to "yt_alt", ), title = "RVX settings menu icon", description = "The icon for the RVX settings menu.", @@ -213,7 +214,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( ) // Copy resources with rename and update path data - context.copyResourcesWithRename("youtube/settings/icons", resourceMap) + context.copyResourcesWithRename("youtube/visual/icons", resourceMap) val validExtendedBrand = setOf( "revanced_extended_settings_key", @@ -260,7 +261,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( // so it won't copy custom branding icon // and will raise an error without fallback icon context.copyResources( - "youtube/settings/icons/extension", + "youtube/visual/icons/extension", ResourceGroup("drawable", "revanced_extended_settings_key_icon.xml") ) } @@ -273,15 +274,15 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( val resourcePath = "youtube/branding/$appIconValue" val iconPath = when { - selectedIconType == "custom_branding_icon" -> "$resourcePath/settings" - else -> "youtube/settings/icons/$selectedIconType" + selectedIconType == "custom_branding_icon" -> "$resourcePath/visual" + else -> "youtube/visual/icons/$selectedIconType" } copyResourcesWithFallback(iconPath) } } - resourcesToCopy.forEach { context.copyResources("youtube/settings/icons", it) } + resourcesToCopy.forEach { context.copyResources("youtube/visual/icons", it) } // Edit Preferences / add icon attribute val tagNames = listOf( diff --git a/src/main/resources/youtube/settings/icons/drawable-xxhdpi/empty_icon.png b/src/main/resources/youtube/settings/icons/drawable-xxhdpi/empty_icon.png deleted file mode 100644 index 8b97b78aea6b9c3418b98f347d54325bad4f334d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xf3?%cF6 - - - - diff --git a/src/main/resources/youtube/settings/icons/extension/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/settings/icons/extension/drawable/revanced_extended_settings_key_icon.xml deleted file mode 100644 index c1c480339..000000000 --- a/src/main/resources/youtube/settings/icons/extension/drawable/revanced_extended_settings_key_icon.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/src/main/resources/youtube/settings/icons/gear/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/settings/icons/gear/drawable/revanced_extended_settings_key_icon.xml deleted file mode 100644 index 925d49d88..000000000 --- a/src/main/resources/youtube/settings/icons/gear/drawable/revanced_extended_settings_key_icon.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/src/main/resources/youtube/settings/icons/revanced/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/settings/icons/revanced/drawable/revanced_extended_settings_key_icon.xml deleted file mode 100644 index 693f70a1b..000000000 --- a/src/main/resources/youtube/settings/icons/revanced/drawable/revanced_extended_settings_key_icon.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/src/main/resources/youtube/settings/icons/revanced_colored/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/settings/icons/revanced_colored/drawable/revanced_extended_settings_key_icon.xml deleted file mode 100755 index d48f055ba..000000000 --- a/src/main/resources/youtube/settings/icons/revanced_colored/drawable/revanced_extended_settings_key_icon.xml +++ /dev/null @@ -1,12702 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/visual/icons/yt_alt/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/visual/icons/yt_alt/drawable/revanced_extended_settings_key_icon.xml index d135324c6..9aa2c8fdd 100644 --- a/src/main/resources/youtube/visual/icons/yt_alt/drawable/revanced_extended_settings_key_icon.xml +++ b/src/main/resources/youtube/visual/icons/yt_alt/drawable/revanced_extended_settings_key_icon.xml @@ -3,23 +3,16 @@ android:name="vector" android:width="48dp" android:height="48dp" - android:viewportWidth="432" - android:viewportHeight="432"> - - - + android:viewportWidth="960" + android:viewportHeight="960"> + + + From fe8d001253d9bc719cb3251886034e34951cc14e Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 2 Oct 2024 19:03:15 +0300 Subject: [PATCH 043/103] chore(YouTube - Visual preferences icons): Update icons - Icon for `Hook buttons` resembling `Player buttons` icon - Adding dependency attributes to make preferences appear together as a group in the search results --- .../layout/visual/VisualPreferencesIconsPatch.kt | 15 +++++++++------ .../youtube/settings/xml/revanced_prefs.xml | 14 +++++++------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt index 3f0a2c206..83782033b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt @@ -95,7 +95,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_hide_keyword_content_home" to "revanced_hide_navigation_home_button", "revanced_hide_keyword_content_search" to "revanced_hide_shorts_shelf_search", "revanced_hide_keyword_content_subscriptions" to "revanced_hide_navigation_subscriptions_button", - "revanced_hide_like_dislike_button" to "sb_enable_voting", + "revanced_hide_like_dislike_button" to "sb_voting_button", "revanced_hide_navigation_create_button" to "M 466.077 660 L 496.846 660 L 496.846 497.077 L 660 497.077 L 660 466.308 L 496.846 466.308 L 496.846 300 L 466.077 300 L 466.077 466.308 L 300 466.308 L 300 497.077 L 466.077 497.077 L 466.077 660 Z M 480.4 840 Q 405.224 840 340.106 811.661 Q 274.987 783.321 225.859 734.239 Q 176.732 685.157 148.366 620.026 Q 120 554.894 120 479.634 Q 120 405.143 148.339 339.565 Q 176.679 273.987 225.761 225.359 Q 274.843 176.732 339.974 148.366 Q 405.106 120 480.366 120 Q 554.857 120 620.435 148.339 Q 686.013 176.679 734.641 225.261 Q 783.268 273.843 811.634 339.518 Q 840 405.194 840 479.6 Q 840 554.776 811.661 619.894 Q 783.321 685.013 734.739 733.956 Q 686.157 782.9 620.482 811.45 Q 554.806 840 480.4 840 Z M 480.5 809.231 Q 617.385 809.231 713.308 713.192 Q 809.231 617.154 809.231 479.5 Q 809.231 342.615 713.495 246.692 Q 617.76 150.769 480 150.769 Q 342.846 150.769 246.808 246.505 Q 150.769 342.24 150.769 480 Q 150.769 617.154 246.808 713.192 Q 342.846 809.231 480.5 809.231 Z M 480 480 Z", "revanced_hide_navigation_home_button" to "M 230.769 769.231 L 392.308 769.231 L 392.308 529.231 L 567.692 529.231 L 567.692 769.231 L 729.231 769.231 L 729.231 395.385 L 480 206.538 L 230.769 395.128 L 230.769 769.231 Z M 200 800 L 200 380 L 480 168.461 L 760 380 L 760 800 L 536.923 800 L 536.923 560 L 423.077 560 L 423.077 800 L 200 800 Z M 480 487.769 Z", "revanced_hide_navigation_library_button" to "revanced_preference_screen_video", @@ -177,6 +177,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_preference_screen_fullscreen" to "M 160 800 L 160 626.231 L 190.769 626.231 L 190.769 769.231 L 333.769 769.231 L 333.769 800 L 160 800 Z M 627 800 L 627 769.231 L 770 769.231 L 770 626.231 L 800.769 626.231 L 800.769 800 L 627 800 Z M 160 333.769 L 160 160 L 333.769 160 L 333.769 190.769 L 190.769 190.769 L 190.769 333.769 L 160 333.769 Z M 770 333.769 L 770 190.769 L 627 190.769 L 627 160 L 800.769 160 L 800.769 333.769 L 770 333.769 Z", "revanced_preference_screen_general" to "general_key", "revanced_preference_screen_haptic_feedback" to "revanced_enable_swipe_haptic_feedback", + "revanced_preference_screen_hook_buttons" to "revanced_preference_screen_player_buttons", "revanced_preference_screen_import_export" to "M 300.38 743.08 L 258.69 701.38 Q 208.69 649.85 185.27 594.88 Q 161.85 539.92 161.85 484.77 Q 161.85 397.69 206.77 324.96 Q 251.69 252.23 327.31 211.77 Q 333.69 208.85 340.19 209.5 Q 346.69 210.15 349.38 216.54 Q 352.08 222.15 349.5 228.15 Q 346.92 234.15 341.31 237.08 Q 272.46 272.85 232.54 339.27 Q 192.62 405.69 192.62 484.77 Q 192.62 536.77 211.65 584.42 Q 230.69 632.08 272.69 672.38 L 322.69 720.92 L 322.69 606.23 Q 322.69 599.38 326.96 595.12 Q 331.23 590.85 338.08 590.85 Q 344.15 590.85 348.81 595.12 Q 353.46 599.38 353.46 606.23 L 353.46 746.15 Q 353.46 758.38 345.35 766.12 Q 337.23 773.85 325.77 773.85 L 185.85 773.85 Q 179 773.85 174.73 769.58 Q 170.46 765.31 170.46 758.46 Q 170.46 751.62 174.73 747.35 Q 179 743.08 185.85 743.08 L 300.38 743.08 Z M 638.08 239.08 L 638.08 353.77 Q 638.08 360.62 633.42 364.88 Q 628.77 369.15 622.69 369.15 Q 615.85 369.15 611.58 364.88 Q 607.31 360.62 607.31 353.77 L 607.31 213.85 Q 607.31 201.62 615.04 193.88 Q 622.77 186.15 635 186.15 L 774.15 186.15 Q 781 186.15 785.27 190.42 Q 789.54 194.69 789.54 201.54 Q 789.54 208.38 785.27 212.65 Q 781 216.92 774.15 216.92 L 659.38 216.92 L 701.31 258.62 Q 743.92 300.54 766.08 346.69 Q 788.23 392.85 793.31 439.08 L 763.31 439.08 Q 757.46 396.54 739.08 358.42 Q 720.69 320.31 688.08 287.62 L 638.08 239.08 Z M 700.77 832.31 Q 695.54 832.31 691.54 828.81 Q 687.54 825.31 686.54 819.31 L 686.38 803.54 Q 660.23 798.31 640.38 786.42 Q 620.54 774.54 606.77 758.23 L 592.92 766.85 Q 587.92 769.62 582.42 768.62 Q 576.92 767.62 574.69 763.39 L 569.85 756.77 Q 566.08 751.77 567.08 746.38 Q 568.08 741 572.31 737.77 L 586.23 727.31 Q 576.62 701.23 576.62 678.5 Q 576.62 655.77 586.23 629.69 L 572.31 619.23 Q 568.08 616 567.08 610.62 Q 566.08 605.23 569.85 600.23 L 574.69 592.62 Q 576.92 588.38 582.42 587.77 Q 587.92 587.15 592.92 589.92 L 606.77 598.54 Q 620.54 582.69 640.38 570.69 Q 660.23 558.69 686.38 553.46 L 686.54 537.46 Q 687.54 531.46 691.54 527.96 Q 695.54 524.46 700.77 524.46 L 705.31 524.46 Q 710.54 524.46 714.54 527.96 Q 718.54 531.46 719.54 537.46 L 719.69 553.46 Q 745.85 558.69 765.69 570.69 Q 785.54 582.69 799.31 597.77 L 813.92 589.92 Q 818.92 587.15 823.65 587.77 Q 828.38 588.38 831.38 592.62 L 836.23 600.23 Q 840 605.23 839 610.23 Q 838 615.23 833 619.23 L 819.85 629.69 Q 829.46 655.77 829.46 678.12 Q 829.46 700.46 819.85 727.31 L 833.77 737.77 Q 838 741 839 746.38 Q 840 751.77 836.23 756.77 L 831.38 763.39 Q 828.38 767.62 823.27 768.62 Q 818.15 769.62 813.15 766.85 L 799.31 758.23 Q 785.54 774.54 765.69 786.42 Q 745.85 798.31 719.69 803.54 L 719.54 819.31 Q 718.54 825.31 714.54 828.81 Q 710.54 832.31 705.31 832.31 L 700.77 832.31 Z M 702.92 774.23 Q 743.08 774.23 770.92 746.38 Q 798.77 718.54 798.77 678.38 Q 798.77 638.23 770.92 610 Q 743.08 581.77 702.92 581.77 Q 662 581.77 634.15 610 Q 606.31 638.23 606.31 678.38 Q 606.31 718.54 634.15 746.38 Q 662 774.23 702.92 774.23 Z", "revanced_preference_screen_miniplayer" to "offline_key", "revanced_preference_screen_misc" to "M 658.231 466.308 L 495.231 303.308 L 658.231 140.307 L 821.231 303.308 L 658.231 466.308 Z M 184.615 416.615 L 184.615 184.846 L 415.615 184.846 L 415.615 416.615 L 184.615 416.615 Z M 543.385 775.385 L 543.385 544.385 L 775.154 544.385 L 775.154 775.385 L 543.385 775.385 Z M 184.615 775.385 L 184.615 544.385 L 415.615 544.385 L 415.615 775.385 L 184.615 775.385 Z M 215.384 385.846 L 384.846 385.846 L 384.846 215.615 L 215.384 215.615 L 215.384 385.846 Z M 660.462 425.308 L 780.231 305.538 L 660.462 185 L 539.923 305.538 L 660.462 425.308 Z M 574.154 744.616 L 744.385 744.616 L 744.385 575.154 L 574.154 575.154 L 574.154 744.616 Z M 215.384 744.616 L 384.846 744.616 L 384.846 575.154 L 215.384 575.154 L 215.384 744.616 Z M 384.846 385.846 Z M 539.923 305.538 Z M 384.846 575.154 Z M 574.154 575.154 Z", @@ -186,7 +187,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_preference_screen_player_flyout_menu" to "M 392.385 741.231 L 392.385 710.461 L 800 710.461 L 800 741.231 L 392.385 741.231 Z M 392.385 495.385 L 392.385 464.615 L 800 464.615 L 800 495.385 L 392.385 495.385 Z M 392.385 249.308 L 392.385 218.538 L 800 218.538 L 800 249.308 L 392.385 249.308 Z M 208.299 772.846 Q 188.209 772.846 174.22 759.063 Q 160.231 745.279 160.231 725.577 Q 160.231 705.875 174.13 691.976 Q 188.029 678.077 207.731 678.077 Q 227.433 678.077 241.216 692.451 Q 255 706.825 255 726.462 Q 255 745.273 241.282 759.06 Q 227.563 772.846 208.299 772.846 Z M 208.299 527 Q 188.209 527 174.22 512.92 Q 160.231 498.839 160.231 480 Q 160.231 461.161 174.377 447.08 Q 188.523 433 208.387 433 Q 227.427 433 241.213 447.08 Q 255 461.161 255 480 Q 255 498.839 241.282 512.92 Q 227.563 527 208.299 527 Z M 207.231 280.923 Q 188.391 280.923 174.311 266.843 Q 160.231 252.763 160.231 233.923 Q 160.231 215.084 174.311 201.003 Q 188.391 186.923 207.615 186.923 Q 226.839 186.923 240.92 201.003 Q 255 215.084 255 233.923 Q 255 252.763 240.968 266.843 Q 226.936 280.923 207.231 280.923 Z", "revanced_preference_screen_player" to "M 401.461 618.462 L 618.462 480 L 401.461 341.538 L 401.461 618.462 Z M 480.134 840 Q 405.692 840 340.34 811.661 Q 274.987 783.321 225.859 734.239 Q 176.732 685.157 148.366 619.866 Q 120 554.575 120 480.134 Q 120 405.461 148.339 339.724 Q 176.679 273.987 225.761 225.359 Q 274.843 176.732 340.134 148.366 Q 405.425 120 479.866 120 Q 554.539 120 620.276 148.339 Q 686.013 176.679 734.641 225.261 Q 783.268 273.843 811.634 339.518 Q 840 405.194 840 479.866 Q 840 554.308 811.661 619.66 Q 783.321 685.013 734.739 734.141 Q 686.157 783.268 620.482 811.634 Q 554.806 840 480.134 840 Z M 480 809.231 Q 617.385 809.231 713.308 713.192 Q 809.231 617.154 809.231 480 Q 809.231 342.615 713.308 246.692 Q 617.385 150.769 480 150.769 Q 342.846 150.769 246.808 246.692 Q 150.769 342.615 150.769 480 Q 150.769 617.154 246.808 713.192 Q 342.846 809.231 480 809.231 Z M 480 480 Z", "revanced_preference_screen_ryd" to "M 262.654 192.307 L 666 192.307 L 666 628.923 L 415.692 880 L 403.602 871.186 Q 398.384 866.308 395.384 859.231 Q 392.384 852.154 392.384 843.769 L 392.384 839.923 L 433.538 628.923 L 136.846 628.923 Q 115.461 628.923 98.461 611.923 Q 81.461 594.923 81.461 573.538 L 81.461 523.176 Q 81.461 517.615 81.115 511.269 Q 80.769 504.923 83 499.461 L 195.154 237.153 Q 202.494 218.211 222.441 205.259 Q 242.388 192.307 262.654 192.307 Z M 635.231 223.077 L 256.692 223.077 Q 248.231 223.077 239.385 227.692 Q 230.538 232.307 225.923 243.077 L 112.231 512.077 L 112.231 573.538 Q 112.231 583.538 119.154 590.846 Q 126.077 598.154 136.846 598.154 L 470.615 598.154 L 424.538 829.461 L 635.231 615.461 L 635.231 223.077 Z M 635.231 615.461 L 635.231 223.077 L 635.231 615.461 Z M 666 628.923 L 666 598.154 L 809 598.154 L 809 223.077 L 666 223.077 L 666 192.307 L 839.769 192.307 L 839.769 628.923 L 666 628.923 Z", - "revanced_preference_screen_sb" to "sb_enable_create_segment", + "revanced_preference_screen_sb" to "sb_create_new_segment", "revanced_preference_screen_seekbar" to "M 175.285 555.385 Q 143.665 555.385 121.832 533.485 Q 100 511.586 100 479.87 Q 100 448.154 121.832 426.385 Q 143.665 404.615 175.285 404.615 Q 202.933 404.615 223.312 421.615 Q 243.692 438.615 249.615 464.615 L 860 464.615 L 860 495.385 L 249.615 495.385 Q 243.692 521.385 223.312 538.385 Q 202.933 555.385 175.285 555.385 Z", "revanced_preference_screen_settings_menu" to "M 413.384 840 L 397.231 725.539 Q 375.154 718.539 348.769 703.846 Q 322.385 689.154 304.077 672.308 L 198.384 720.154 L 131.538 601.538 L 225.692 531.769 Q 223.692 519.692 222.423 506.269 Q 221.154 492.846 221.154 480.769 Q 221.154 469.462 222.423 456.038 Q 223.692 442.615 225.692 428.231 L 131.538 357.692 L 198.384 241.384 L 303.308 287.692 Q 323.923 270.846 348.769 256.538 Q 373.615 242.231 396.461 235.461 L 413.384 120 L 546.616 120 L 562.769 235.231 Q 587.923 244.538 610.577 257.192 Q 633.231 269.846 653.615 287.692 L 762.385 241.384 L 828.462 357.692 L 731.231 429.308 Q 734.769 443.154 735.654 455.808 Q 736.539 468.462 736.539 480 Q 736.539 490.769 735.269 503.308 Q 734 515.846 731.231 531.231 L 827.693 601.538 L 760.846 720.154 L 653.615 671.539 Q 632.231 689.923 609.423 703.962 Q 586.616 718 562.769 724.769 L 546.616 840 L 413.384 840 Z M 438.308 809.231 L 520.923 809.231 L 535.692 698 Q 566.385 690 592.039 675.308 Q 617.692 660.615 644 635.846 L 746.923 680.308 L 786.923 610.615 L 696 543.154 Q 700 524.615 702.115 509.654 Q 704.231 494.692 704.231 480 Q 704.231 463.769 702.231 449.577 Q 700.231 435.385 696 418.385 L 788.462 349.385 L 748.462 279.692 L 643.231 324.154 Q 624.077 302.769 593.539 284.115 Q 563 265.461 534.923 262 L 521.692 150.769 L 438.308 150.769 L 425.846 261.231 Q 393.385 267.461 366.961 282.538 Q 340.538 297.615 315.231 323.385 L 211.538 279.692 L 171.538 349.385 L 262.461 416.077 Q 257.692 430.769 255.577 446.885 Q 253.461 463 253.461 480.769 Q 253.461 497 255.577 512.346 Q 257.692 527.692 261.692 543.154 L 171.538 610.615 L 211.538 680.308 L 314.461 636.615 Q 338.461 661.385 365.269 676.077 Q 392.077 690.769 425.077 698.769 L 438.308 809.231 Z M 477.692 575.385 Q 517.846 575.385 545.462 547.769 Q 573.077 520.154 573.077 480 Q 573.077 439.846 545.462 412.231 Q 517.846 384.615 477.692 384.615 Q 438.308 384.615 410.308 412.231 Q 382.307 439.846 382.307 480 Q 382.307 520.154 410.308 547.769 Q 438.308 575.385 477.692 575.385 Z M 480 480 Z", "revanced_preference_screen_shorts" to "M 407.712 579.273 L 586.008 479.273 L 407.712 379.273 L 407.712 579.273 Z M 304.09 573.07 C 304.09 573.07 304.09 573.07 304.09 573.07 L 271.628 592.775 C 230.982 617.447 204.016 650.91 190.732 693.168 C 177.449 735.427 181.608 774.351 203.209 809.936 C 224.809 845.522 257.396 867.135 300.968 874.776 C 344.54 882.417 386.649 873.9 427.295 849.228 L 719.94 671.592 C 760.586 646.92 787.55 613.456 800.835 571.197 C 814.119 528.94 809.96 490.017 788.359 454.431 C 766.758 418.845 734.171 397.23 690.598 389.589 C 678.93 387.544 667.368 386.657 655.909 386.928 L 688.371 367.224 C 729.018 342.551 755.981 309.088 769.267 266.829 C 782.551 224.572 778.392 185.65 756.791 150.064 C 735.19 114.477 702.603 92.864 659.031 85.223 C 615.459 77.585 573.351 86.1 532.705 110.772 L 240.06 288.407 C 199.414 313.079 172.448 346.543 159.165 388.801 C 145.882 431.06 150.04 469.982 171.64 505.568 C 193.241 541.154 225.827 562.767 269.4 570.408 C 281.069 572.454 292.633 573.341 304.09 573.07 Z M 311.194 550.911 C 310.383 550.821 291.513 549.29 276.802 546.69 C 239.915 540.173 212.325 521.847 194.032 491.71 C 175.74 461.574 172.229 428.666 183.504 392.988 C 194.776 357.308 217.62 329.022 252.033 308.133 L 544.678 130.498 C 579.092 109.608 614.743 102.423 651.63 108.941 C 688.516 115.459 716.107 133.785 734.399 163.922 C 752.692 194.058 756.202 226.966 744.927 262.642 C 733.655 298.323 710.811 326.607 676.397 347.496 C 676.397 347.496 632.576 376.786 629.931 379.384 C 616.83 392.247 624.795 408.44 644.851 409.184 C 649.56 409.36 666.37 410.336 683.197 413.309 C 720.083 419.825 747.675 438.153 765.968 468.29 C 784.26 498.427 787.77 531.334 776.495 567.012 C 765.223 602.692 742.379 630.976 707.966 651.865 L 415.321 829.501 C 380.907 850.39 345.255 857.577 308.37 851.058 C 271.483 844.542 243.893 826.215 225.601 796.078 C 207.308 765.943 203.797 733.033 215.072 697.355 C 226.343 661.676 249.188 633.389 283.601 612.5 C 283.601 612.5 318.492 587.99 322.367 585.392 C 339.459 573.934 349.769 555.207 311.194 550.911 Z", @@ -206,8 +207,8 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_swipe_overlay_text_size" to "M 597.69 240.77 L 416.15 240.77 Q 407.82 240.77 401.99 234.86 Q 396.15 228.95 396.15 220.52 Q 396.15 212.08 401.99 206.04 Q 407.82 200 416.15 200 L 820 200 Q 828.33 200 834.17 205.91 Q 840 211.81 840 220.25 Q 840 228.69 834.17 234.73 Q 828.33 240.77 820 240.77 L 638.46 240.77 L 638.46 740 Q 638.46 748.33 632.55 754.17 Q 626.65 760 618.21 760 Q 609.77 760 603.73 753.94 Q 597.69 747.88 597.69 739.23 L 597.69 240.77 Z M 243.08 436.92 L 140 436.92 Q 131.67 436.92 125.83 431.02 Q 120 425.11 120 416.67 Q 120 408.23 125.83 402.19 Q 131.67 396.15 140 396.15 L 386.15 396.15 Q 394.49 396.15 400.32 402.06 Q 406.15 407.97 406.15 416.41 Q 406.15 424.85 400.32 430.88 Q 394.49 436.92 386.15 436.92 L 283.08 436.92 L 283.08 740 Q 283.08 748.33 277.17 754.17 Q 271.26 760 262.82 760 Q 254.38 760 248.73 754.17 Q 243.08 748.33 243.08 740 L 243.08 436.92 Z", "revanced_swipe_overlay_timeout" to "M 390.77 90.77 Q 384.23 90.77 379.81 86.28 Q 375.38 81.8 375.38 75.17 Q 375.38 68.54 379.81 64.27 Q 384.23 60 390.77 60 L 569.23 60 Q 575.77 60 580.19 64.49 Q 584.62 68.97 584.62 75.6 Q 584.62 82.23 580.19 86.5 Q 575.77 90.77 569.23 90.77 L 390.77 90.77 Z M 480.22 538.54 Q 486.85 538.54 491.12 534.12 Q 495.38 529.69 495.38 523.15 L 495.38 349.31 Q 495.38 342.77 490.9 338.35 Q 486.41 333.92 479.78 333.92 Q 473.15 333.92 468.88 338.35 Q 464.62 342.77 464.62 349.31 L 464.62 523.15 Q 464.62 529.69 469.1 534.12 Q 473.59 538.54 480.22 538.54 Z M 480 839.77 Q 414.05 839.77 355.68 814.35 Q 297.31 788.92 253.69 745.69 Q 210.08 702.46 185.04 643.7 Q 160 584.95 160 519.38 Q 160 453.82 185.04 395.45 Q 210.08 337.08 253.69 293.46 Q 297.31 249.85 355.68 224.81 Q 414.05 199.77 480 199.77 Q 540.85 199.77 596 221.5 Q 651.15 243.23 694.85 282.46 L 724.85 251.69 Q 729.23 247.31 735.46 246.92 Q 741.69 246.54 746.85 251.69 Q 752 256.85 752 262.69 Q 752 268.54 746.85 273.69 L 716.08 304.46 Q 753.62 344.46 776.81 398.77 Q 800 453.08 800 519.77 Q 800 584.95 774.96 643.7 Q 749.92 702.46 706.31 745.69 Q 662.69 788.92 604.32 814.35 Q 545.95 839.77 480 839.77 Z M 479.89 809 Q 600.38 809 684.81 724.69 Q 769.23 640.37 769.23 519.88 Q 769.23 399.38 684.92 314.96 Q 600.6 230.54 480.11 230.54 Q 359.62 230.54 275.19 314.85 Q 190.77 399.17 190.77 519.66 Q 190.77 640.15 275.08 724.58 Q 359.4 809 479.89 809 Z M 480 520 Z", "revanced_switch_create_with_notifications_button" to "M 711.151 709.31 C 732.88 681.759 748.56 654.391 762.089 616.613 C 775.674 578.86 782.368 539.017 782.368 496.408 C 782.368 453.799 775.675 414.021 762.089 376.397 C 748.561 338.749 732.883 311.578 711.151 284.333 L 711.151 367.652 L 681.298 367.652 L 681.298 237.276 L 811.674 237.276 L 811.674 267.128 L 735.523 267.128 C 759.053 297.544 776.706 329.215 790.905 369.257 C 805.051 409.33 812.22 452.118 812.22 496.954 C 812.22 541.79 805.048 584.581 790.905 624.655 C 776.706 664.694 759.053 696.365 735.523 726.78 L 811.674 726.78 L 811.674 756.633 L 681.298 756.633 L 681.298 626.257 L 711.151 626.257 L 711.151 709.31 Z M 186.009 387.238 C 175.304 386.138 165.331 381.726 158.099 375.062 C 151.031 367.907 147.35 358.463 147.819 349.288 L 167.944 119.272 C 169.098 110.129 174.536 101.506 182.694 95.721 C 191.004 90.395 201.474 87.912 212.188 88.696 L 498.283 113.726 C 508.988 114.826 518.961 119.242 526.196 125.902 C 533.261 133.057 536.943 142.502 536.475 151.676 L 528.527 242.515 L 611.361 187.087 L 596.297 359.269 L 524.347 290.298 L 516.35 381.692 C 515.196 390.834 509.755 399.458 501.599 405.242 C 493.286 410.57 482.817 413.052 472.105 412.268 L 186.009 387.238 Z M 180.977 356.489 L 181.023 356.538 C 182.852 358.497 184.789 359.365 188.368 359.532 L 474.518 384.567 C 478.196 385.003 480.033 384.733 482.034 383.155 L 482.077 383.12 L 482.132 383.09 C 484.329 381.845 484.932 381.225 484.796 379.126 L 504.923 148.952 C 505.35 146.619 505.26 145.9 503.388 144.532 L 503.343 144.5 L 503.292 144.446 C 501.454 142.486 499.499 141.595 495.928 141.432 L 209.774 116.397 C 206.081 115.963 204.269 116.195 202.271 117.802 L 202.225 117.839 L 202.167 117.872 C 199.967 119.117 199.36 119.739 199.497 121.839 L 179.369 352.011 C 178.929 354.289 179.094 355.056 180.937 356.459 L 180.977 356.489 Z M 222.281 625.758 C 219.914 596.441 227.116 568.395 243.336 543.983 C 259.892 519.723 279.976 505.416 305.355 497.109 L 306.108 496.863 L 305.725 492.458 C 305.362 485.183 307.959 477.277 312.369 471.579 C 317.17 466.251 324.349 462.247 331.693 461.605 C 339.037 460.962 347.041 463.845 352.716 468.248 C 358.096 473.104 361.832 480.403 362.734 487.624 L 363.122 492.059 L 363.911 492.169 C 390.329 495.826 412.616 506.39 433.14 527.41 C 453.35 548.638 465.287 575.002 468.047 604.284 L 482.872 773.738 L 517.644 770.696 L 520.313 801.203 L 205.005 828.789 L 202.336 798.282 L 237.109 795.24 L 222.281 625.758 Z M 367.51 871.301 C 356.555 872.259 345.383 868.378 336.881 861.544 C 328.702 854.291 323.406 844.043 322.187 833.214 L 321.548 826.229 L 405.095 818.92 L 405.429 822.922 L 405.685 825.983 C 406.369 836.938 402.763 848.064 395.905 856.604 C 388.666 864.769 378.456 870.343 367.51 871.301 Z M 267.613 792.571 L 452.367 776.407 L 437.542 606.955 C 435.521 580.822 425.033 560.619 404.817 544.002 C 384.958 526.988 363.22 520.369 337.082 522.656 C 310.944 524.943 290.737 535.169 274.134 555.379 C 257.117 575.251 250.237 596.993 252.785 623.079 L 267.613 792.571 Z", - "sb_enable_create_segment" to "M 480 838.231 Q 359.231 801.693 279.615 690.346 Q 200 579 200 440.846 L 200 227.461 L 480 122.846 L 760 227.461 L 760 440.846 Q 760 579 680.385 690.346 Q 600.769 801.693 480 838.231 Z M 480 805.462 Q 588.846 770.539 659.039 668.5 Q 729.231 566.462 729.231 440.846 L 729.231 248.692 L 480 155.308 L 230.769 248.692 L 230.769 440.846 Q 230.769 566.462 300.961 668.5 Q 371.154 770.539 480 805.462 Z M 480 480.769 Z", - "sb_enable_voting" to "M 154.549 522.836 C 141.802 522.76 130.526 518.188 121.587 509.249 C 112.648 500.31 108.076 489.034 108 476.288 L 108 275.82 C 108.018 272.336 108.684 268.793 109.932 265.561 C 111.233 262.309 113.607 258.829 116.76 255.527 L 265.165 107.122 L 266.577 108.636 L 277.46 120.297 C 279.338 122.448 281.014 124.528 282.445 126.484 C 283.964 128.61 284.859 130.909 284.935 132.787 L 284.935 138.502 L 256.798 261.445 L 415.652 261.445 C 429.902 261.515 442.178 266.323 451.606 275.751 C 461.035 285.18 465.843 297.458 465.913 311.705 L 465.913 319.564 C 465.909 323.12 465.613 326.217 465.055 328.622 C 464.496 330.97 463.687 333.457 462.714 335.834 L 390.388 502.885 C 387.809 508.903 383.763 513.903 378.598 517.459 C 373.355 520.95 366.752 522.8 359.348 522.836 Z M 362.98 494.087 L 437.164 321.379 L 437.164 307.993 C 437.232 302.584 435.671 298.552 432.187 295.183 C 428.817 291.698 424.775 290.126 419.364 290.194 L 221.183 290.194 L 248.351 164.585 L 136.749 276.953 L 136.749 476.288 C 136.683 481.703 138.242 485.735 141.725 489.098 C 145.09 492.582 149.134 494.153 154.549 494.087 Z M 693.423 851.364 L 682.539 839.702 C 680.643 837.526 679.027 835.383 677.78 833.395 C 676.49 831.279 675.74 829.041 675.684 827.212 L 675.684 821.502 L 703.214 698.555 L 544.349 698.555 C 530.097 698.485 517.82 693.676 508.393 684.249 C 498.966 674.822 494.157 662.544 494.087 648.294 L 494.087 640.436 C 494.091 636.88 494.387 633.783 494.945 631.377 C 495.503 629.029 496.313 626.546 497.287 624.168 L 569.608 456.505 C 572.092 450.522 576.136 445.614 581.374 442.232 C 586.659 438.938 593.264 437.196 600.652 437.164 L 805.451 437.164 C 818.198 437.24 829.474 441.812 838.413 450.751 C 847.352 459.69 851.924 470.966 852 483.712 L 852 684.18 C 851.982 687.665 851.316 691.206 850.067 694.439 C 848.767 697.69 846.393 701.171 843.24 704.473 L 694.835 852.878 Z M 597.018 465.913 L 522.836 638.002 L 522.836 652.007 C 522.768 657.416 524.329 661.448 527.813 664.817 C 531.183 668.302 535.225 669.874 540.636 669.806 L 739.451 669.806 L 711.693 794.779 L 823.251 683.042 L 823.251 483.711 C 823.319 478.302 821.758 474.27 818.273 470.901 C 814.904 467.416 810.862 465.844 805.451 465.913 Z", + "sb_create_new_segment" to "M 480 838.231 Q 359.231 801.693 279.615 690.346 Q 200 579 200 440.846 L 200 227.461 L 480 122.846 L 760 227.461 L 760 440.846 Q 760 579 680.385 690.346 Q 600.769 801.693 480 838.231 Z M 480 805.462 Q 588.846 770.539 659.039 668.5 Q 729.231 566.462 729.231 440.846 L 729.231 248.692 L 480 155.308 L 230.769 248.692 L 230.769 440.846 Q 230.769 566.462 300.961 668.5 Q 371.154 770.539 480 805.462 Z M 480 480.769 Z", + "sb_voting_button" to "M 154.549 522.836 C 141.802 522.76 130.526 518.188 121.587 509.249 C 112.648 500.31 108.076 489.034 108 476.288 L 108 275.82 C 108.018 272.336 108.684 268.793 109.932 265.561 C 111.233 262.309 113.607 258.829 116.76 255.527 L 265.165 107.122 L 266.577 108.636 L 277.46 120.297 C 279.338 122.448 281.014 124.528 282.445 126.484 C 283.964 128.61 284.859 130.909 284.935 132.787 L 284.935 138.502 L 256.798 261.445 L 415.652 261.445 C 429.902 261.515 442.178 266.323 451.606 275.751 C 461.035 285.18 465.843 297.458 465.913 311.705 L 465.913 319.564 C 465.909 323.12 465.613 326.217 465.055 328.622 C 464.496 330.97 463.687 333.457 462.714 335.834 L 390.388 502.885 C 387.809 508.903 383.763 513.903 378.598 517.459 C 373.355 520.95 366.752 522.8 359.348 522.836 Z M 362.98 494.087 L 437.164 321.379 L 437.164 307.993 C 437.232 302.584 435.671 298.552 432.187 295.183 C 428.817 291.698 424.775 290.126 419.364 290.194 L 221.183 290.194 L 248.351 164.585 L 136.749 276.953 L 136.749 476.288 C 136.683 481.703 138.242 485.735 141.725 489.098 C 145.09 492.582 149.134 494.153 154.549 494.087 Z M 693.423 851.364 L 682.539 839.702 C 680.643 837.526 679.027 835.383 677.78 833.395 C 676.49 831.279 675.74 829.041 675.684 827.212 L 675.684 821.502 L 703.214 698.555 L 544.349 698.555 C 530.097 698.485 517.82 693.676 508.393 684.249 C 498.966 674.822 494.157 662.544 494.087 648.294 L 494.087 640.436 C 494.091 636.88 494.387 633.783 494.945 631.377 C 495.503 629.029 496.313 626.546 497.287 624.168 L 569.608 456.505 C 572.092 450.522 576.136 445.614 581.374 442.232 C 586.659 438.938 593.264 437.196 600.652 437.164 L 805.451 437.164 C 818.198 437.24 829.474 441.812 838.413 450.751 C 847.352 459.69 851.924 470.966 852 483.712 L 852 684.18 C 851.982 687.665 851.316 691.206 850.067 694.439 C 848.767 697.69 846.393 701.171 843.24 704.473 L 694.835 852.878 Z M 597.018 465.913 L 522.836 638.002 L 522.836 652.007 C 522.768 657.416 524.329 661.448 527.813 664.817 C 531.183 668.302 535.225 669.874 540.636 669.806 L 739.451 669.806 L 711.693 794.779 L 823.251 683.042 L 823.251 483.711 C 823.319 478.302 821.758 474.27 818.273 470.901 C 814.904 467.416 810.862 465.844 805.451 465.913 Z", "subscription_product_setting_key" to "M 255.384 840 Q 232.327 840 216.163 823.837 Q 200 807.673 200 784.616 L 200 335.384 Q 200 312.327 216.163 296.163 Q 232.327 280 255.384 280 L 344.615 280 L 344.615 255.384 Q 344.615 198.538 383.885 159.269 Q 423.154 120 480 120 Q 536.846 120 576.115 159.269 Q 615.385 198.538 615.385 255.384 L 615.385 280 L 704.616 280 Q 727.673 280 743.837 296.163 Q 760 312.327 760 335.384 L 760 784.616 Q 760 807.673 743.837 823.837 Q 727.673 840 704.616 840 L 255.384 840 Z M 255.384 809.231 L 704.616 809.231 Q 713.846 809.231 721.539 801.539 Q 729.231 793.846 729.231 784.616 L 729.231 335.384 Q 729.231 326.154 721.539 318.461 Q 713.846 310.769 704.616 310.769 L 615.385 310.769 L 615.385 415.384 Q 615.385 421.961 610.927 426.365 Q 606.468 430.769 599.811 430.769 Q 593.154 430.769 588.885 426.365 Q 584.615 421.961 584.615 415.384 L 584.615 310.769 L 375.385 310.769 L 375.385 415.384 Q 375.385 421.961 370.927 426.365 Q 366.468 430.769 359.811 430.769 Q 353.154 430.769 348.885 426.365 Q 344.615 421.961 344.615 415.384 L 344.615 310.769 L 255.384 310.769 Q 246.154 310.769 238.461 318.461 Q 230.769 326.154 230.769 335.384 L 230.769 784.616 Q 230.769 793.846 238.461 801.539 Q 246.154 809.231 255.384 809.231 Z M 375.385 280 L 584.615 280 L 584.615 255.384 Q 584.615 211.231 554.385 181 Q 524.154 150.769 480 150.769 Q 435.846 150.769 405.615 181 Q 375.385 211.231 375.385 255.384 L 375.385 280 Z M 230.769 809.231 L 230.769 310.769 L 230.769 809.231 Z", "video_quality_settings_key" to "M 592.692 651.077 L 623.462 651.077 L 623.462 589.154 L 655.231 589.154 Q 671.758 589.154 683.571 577.407 Q 695.385 565.66 695.385 549.231 L 695.385 411 Q 695.385 394.473 683.571 382.66 Q 671.758 370.846 655.231 370.846 L 563.077 370.846 Q 546.769 370.846 533.385 382.66 Q 520 394.473 520 411 L 520 549.231 Q 520 565.66 533.385 577.407 Q 546.769 589.154 563.077 589.154 L 592.692 589.154 L 592.692 651.077 Z M 264.615 589.154 L 295.385 589.154 L 295.385 504.769 L 409.231 504.769 L 409.231 589.154 L 440 589.154 L 440 370.846 L 409.231 370.846 L 409.231 474 L 295.385 474 L 295.385 370.846 L 264.615 370.846 L 264.615 589.154 Z M 563.077 558.385 Q 558.462 558.385 554.615 554.538 Q 550.769 550.692 550.769 546.077 L 550.769 413.923 Q 550.769 409.308 554.615 405.462 Q 558.462 401.615 563.077 401.615 L 652.308 401.615 Q 656.923 401.615 660.769 405.462 Q 664.615 409.308 664.615 413.923 L 664.615 546.077 Q 664.615 550.692 660.769 554.538 Q 656.923 558.385 652.308 558.385 L 563.077 558.385 Z M 175.384 760 Q 152.327 760 136.163 743.837 Q 120 727.673 120 704.616 L 120 255.384 Q 120 232.327 136.163 216.163 Q 152.327 200 175.384 200 L 784.616 200 Q 807.673 200 823.837 216.163 Q 840 232.327 840 255.384 L 840 704.616 Q 840 727.673 823.837 743.837 Q 807.673 760 784.616 760 L 175.384 760 Z M 175.384 729.231 L 784.616 729.231 Q 793.846 729.231 801.539 721.539 Q 809.231 713.846 809.231 704.616 L 809.231 255.384 Q 809.231 246.154 801.539 238.461 Q 793.846 230.769 784.616 230.769 L 175.384 230.769 Q 166.154 230.769 158.461 238.461 Q 150.769 246.154 150.769 255.384 L 150.769 704.616 Q 150.769 713.846 158.461 721.539 Q 166.154 729.231 175.384 729.231 Z M 150.769 729.231 L 150.769 230.769 L 150.769 729.231 Z", "your_data_key" to "M 480 800 Q 339.769 800 249.884 764.269 Q 160 728.539 160 672.308 L 160 280 Q 160 230.154 253.577 195.077 Q 347.154 160 480 160 Q 612.846 160 706.423 195.077 Q 800 230.154 800 280 L 800 672.308 Q 800 728.539 710.116 764.269 Q 620.231 800 480 800 Z M 480 351.231 Q 564.462 351.231 652.269 327.038 Q 740.077 302.846 763.769 272.154 Q 739.846 240.923 652.808 215.846 Q 565.769 190.769 480 190.769 Q 394.308 190.769 306.077 214.846 Q 217.846 238.923 194.461 269.077 Q 217.077 301.769 303.923 326.5 Q 390.769 351.231 480 351.231 Z M 479.769 559.846 Q 521 559.846 562.231 555.346 Q 603.462 550.846 640.808 542.231 Q 678.154 533.615 711.231 521 Q 744.308 508.385 769.231 493.154 L 769.231 312.769 Q 743.308 328.769 710.615 341.385 Q 677.923 354 640.077 362.616 Q 602.231 371.231 561.615 375.846 Q 521 380.462 479.769 380.462 Q 437 380.462 395.385 375.462 Q 353.769 370.462 316.423 361.846 Q 279.077 353.231 247.269 341 Q 215.461 328.769 190.769 312.769 L 190.769 493.154 Q 214.692 508.385 246.769 520.615 Q 278.846 532.846 316.192 541.846 Q 353.538 550.846 394.769 555.346 Q 436 559.846 479.769 559.846 Z M 480 769.231 Q 532.615 769.231 580.538 762.654 Q 628.462 756.077 666.731 744.385 Q 705 732.692 731.808 716.462 Q 758.615 700.231 769.231 681.462 L 769.231 524.154 Q 744.308 540.154 711.231 552.269 Q 678.154 564.385 640.808 573 Q 603.462 581.616 562.346 586.116 Q 521.231 590.616 479.769 590.616 Q 436 590.616 394.769 586.116 Q 353.538 581.616 316.192 573 Q 278.846 564.385 247.154 551.885 Q 215.461 539.385 190.769 524.154 L 190.769 681.692 Q 201.154 701 227.846 716.962 Q 254.538 732.923 292.923 744.5 Q 331.308 756.077 379.231 762.654 Q 427.154 769.231 480 769.231 Z", @@ -221,13 +222,14 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( ) val emptyTitles = setOf( + "external_downloader", "revanced_custom_playback_speeds", "revanced_custom_playback_speed_menu_type", "revanced_default_video_quality_mobile", "revanced_disable_like_dislike_glow", "revanced_disable_default_playback_speed_live", - "external_downloader", "revanced_enable_custom_playback_speed", + "revanced_enable_debug_buffer_logging", "revanced_gms_show_dialog", "revanced_hide_shorts_comments_disabled_button", "revanced_hide_player_flyout_menu_captions_footer", @@ -237,8 +239,9 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_remember_video_quality_last_selected", "revanced_remember_video_quality_last_selected_toast", "revanced_restore_old_video_quality_menu", - "revanced_enable_debug_buffer_logging", + "revanced_sb_guidelines_preference", "revanced_whitelist_settings", + "sb_create_new_segment_step", ) val validExtendedBrandIcon = validExtendedBrand.associateWith { "${it}_icon" } diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index e2d1fc208..8162a8cf4 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -243,7 +243,7 @@ - + @@ -649,6 +649,12 @@ + + + + + + @@ -669,12 +675,6 @@ - - - - - - From 63016719e6c7433084b770f95caef8cd86a461df Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Oct 2024 16:19:12 +0000 Subject: [PATCH 044/103] chore(release): 2.230.0-dev.3 [skip ci] # [2.230.0-dev.3](https://github.com/anddea/revanced-patches/compare/v2.230.0-dev.2...v2.230.0-dev.3) (2024-10-02) ### Features * **YouTube - Visual preferences icons:** Add `YT Alt` icon for RVX setting ([8bd264e](https://github.com/anddea/revanced-patches/commit/8bd264e783a982fcc6e6270e579b98f033e58c77)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d14011b5..ecc423956 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.230.0-dev.3](https://github.com/anddea/revanced-patches/compare/v2.230.0-dev.2...v2.230.0-dev.3) (2024-10-02) + + +### Features + +* **YouTube - Visual preferences icons:** Add `YT Alt` icon for RVX setting ([8bd264e](https://github.com/anddea/revanced-patches/commit/8bd264e783a982fcc6e6270e579b98f033e58c77)) + # [2.230.0-dev.2](https://github.com/anddea/revanced-patches/compare/v2.230.0-dev.1...v2.230.0-dev.2) (2024-10-01) diff --git a/gradle.properties b/gradle.properties index ec0564978..ea430d772 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.230.0-dev.2 +version = 2.230.0-dev.3 diff --git a/patches.json b/patches.json index 1766e544d..1c6c1f773 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Ambient mode control","description":"Adds options to disable Ambient mode and to bypass Ambient mode restrictions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Amoled","description":"Applies a pure black theme to some components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bitrate default value","description":"Sets the audio quality to \u0027Always High\u0027 when you first install the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Certificate spoof","description":"Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Changes the package name for Reddit to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"PackageNameReddit","default":"com.reddit.frontpage","values":{"Clone":"com.reddit.frontpage.revanced","Default":"com.reddit.frontpage.rvx","Original":"com.reddit.frontpage"},"title":"Package name of Reddit","description":"The name of the package to rename the app to.","required":true}]},{"name":"Change player flyout menu toggles","description":"Adds an option to use text toggles instead of switch toggles within the additional settings menu.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change version code","description":"Changes the version code of the app to the value specified in options.json. Except when mounting, this can prevent app stores from updating the app and allow the app to be installed over an existing installation that has a higher version code. By default, the highest version code is set.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"ChangeVersionCode","default":false,"values":null,"title":"Change version code","description":"Changes the version code of the app.","required":true},{"key":"VersionCode","default":"2147483647","values":null,"title":"Version code","description":"The version code to use. (1 ~ 2147483647)","required":true}]},{"name":"Custom Shorts action buttons","description":"Changes, at compile time, the icon of the action buttons of the Shorts player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"round","values":{"Cairo":"round","Outline":"outline","OutlineCircle":"outlinecircle","Round":"round","YouTube":"youtube","YouTubeOutline":"youtubeoutline"},"title":"Shorts icon style ","description":"The style of the icons for the action buttons in the Shorts player.","required":true}]},{"name":"Custom branding icon for YouTube","description":"Changes the YouTube app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube":"youtube"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"CustomHeader","default":"","values":null,"title":"Custom header","description":"The header to apply to the app.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- yt_premium_wordmark_header_dark.png\n- yt_premium_wordmark_header_light.png\n- yt_wordmark_header_dark.png\n- yt_wordmark_header_light.png\n\nThe image dimensions must be as follows:\n- drawable-xxxhdpi: 512px x 192px\n- drawable-xxhdpi: 387px x 144px\n- drawable-xhdpi: 258px x 96px\n- drawable-hdpi: 194px x 72px\n- drawable-mdpi: 129px x 48px","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashAnimation","default":true,"values":null,"title":"Restore old splash animation","description":"Restore the old style splash animation.","required":true}]},{"name":"Custom branding icon for YouTube Music","description":"Changes the YouTube Music app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube Music":"youtube_music"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_music_background_color_108.png\n- adaptiveproduct_youtube_music_foreground_color_108.png\n- ic_launcher_release.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashIcon","default":false,"values":null,"title":"Restore old splash icon","description":"Restore the old style splash icon.\n\nIf you enable both the old style splash icon and the Cairo splash animation,\n\nOld style splash icon will appear first and then the Cairo splash animation will start.","required":true}]},{"name":"Custom branding name for Reddit","description":"Renames the Reddit app to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"Reddit","values":{"Default":"RVX Reddit","Original":"Reddit"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube","description":"Renames the YouTube app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"RVX","values":{"ReVanced Extended":"ReVanced Extended","RVX":"RVX","YouTube RVX":"YouTube RVX","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube Music","description":"Renames the YouTube Music app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppNameNotification","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in notification panel","description":"The name of the app as it appears in the notification panel.","required":true},{"key":"AppNameLauncher","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in launcher","description":"The name of the app as it appears in the launcher.","required":true}]},{"name":"Custom double tap length","description":"Adds Double-tap to seek values that are specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DoubleTapLengthArrays","default":"3, 5, 10, 15, 20, 30, 60, 120, 180","values":null,"title":"Double-tap to seek values","description":"A list of custom Double-tap to seek lengths to be added, separated by commas.","required":true}]},{"name":"Custom header for YouTube Music","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube Music\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube Music\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- action_bar_logo.png\n- logo_music.png\n- ytm_logo.png\n\nThe image \u0027action_bar_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 320px x 96px\n- drawable-xxhdpi: 240px x 72px\n- drawable-xhdpi: 160px x 48px\n- drawable-hdpi: 121px x 36px\n- drawable-mdpi: 80px x 24px\n\nThe image \u0027logo_music.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 576px x 200px\n- drawable-xxhdpi: 432px x 150px\n- drawable-xhdpi: 288px x 100px\n- drawable-hdpi: 217px x 76px\n- drawable-mdpi: 144px x 50px\n\nThe image \u0027ytm_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 412px x 144px\n- drawable-xxhdpi: 309px x 108px\n- drawable-xhdpi: 206px x 72px\n- drawable-hdpi: 155px x 54px\n- drawable-mdpi: 103px x 36px","required":true}]},{"name":"Description components","description":"Adds options to hide and disable description components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Cairo splash animation","description":"Adds an option to disable Cairo splash animation.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["7.06.54","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable QUIC protocol","description":"Adds an option to disable CronetEngine\u0027s QUIC protocol.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto audio tracks","description":"Adds an option to disable audio tracks from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dislike redirection","description":"Adds an option to disable redirection to the next track when clicking the Dislike button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable haptic feedback","description":"Adds options to disable haptic feedback when swiping in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Adds an option to disable the popup that appears when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable splash animation","description":"Adds an option to disable the splash animation on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an option to use the OPUS audio codec instead of the MP4A audio codec.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable external browser","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable gradient loading screen","description":"Adds an option to enable the gradient loading screen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable landscape mode","description":"Adds an option to enable landscape mode when rotating the screen on phones.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Flyout menu components","description":"Adds options to hide or change flyout menu components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Force player buttons background","description":"Changes, at compile time, the dark background surrounding the video player controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"BackgroundColor","default":"?ytOverlayBackgroundMediumLight","values":{"Default":"?ytOverlayBackgroundMediumLight","Transparent":"@android:color/transparent","Opacity10":"#1a000000","Opacity20":"#33000000","Opacity30":"#4d000000","Opacity40":"#66000000","Opacity50":"#80000000","Opacity60":"#99000000","Opacity70":"#b3000000","Opacity80":"#cc000000","Opacity90":"#e6000000","Opacity100":"#ff000000"},"title":"Background color","description":"Specify a background color for player buttons using a hex color code. The first two symbols of the hex code represent the alpha channel, which is used to change the opacity.","required":false}]},{"name":"Force snackbar theme","description":"Force snackbar background color to match selected theme.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CornerRadius","default":"8.0dip","values":null,"title":"Corner radius","description":"Specify a corner radius for the snackbar.","required":false},{"key":"BackgroundColor","default":"?ytChipBackground","values":{"Chip":"?ytChipBackground","Base":"?ytBaseBackground"},"title":"Background color","description":"Specify a background color for the snackbar. You can specify hex color.","required":false},{"key":"StrokeColor","default":"none","values":{"None":"none","Accent":"?attr/colorAccent","Inverted":"?attr/ytInvertedBackground"},"title":"Stroke color","description":"Specify a stroke color for the snackbar. You can specify hex color.","required":false}]},{"name":"Fullscreen components","description":"Adds options to hide or change components related to fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"Hide Recently Visited shelf","description":"Adds an option to hide the Recently Visited shelf in the sidebar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts dimming","description":"Removes, at compile time, the dimming effect at the top and bottom of Shorts videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide account components","description":"Adds options to hide components related to the account menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action bar components","description":"Adds options to hide action bar components and replace the offline download button with an external download button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action buttons","description":"Adds options to hide action buttons under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide comments components","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed components","description":"Adds options to hide components related to feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed flyout menu","description":"Adds the ability to hide feed flyout menu components using a custom filter.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide navigation buttons","description":"Adds options to hide buttons in the navigation bar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide overlay filter","description":"Removes, at compile time, the dark overlay that appears when player flyout menus are open.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds options to hide buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player flyout menu","description":"Adds options to hide player flyout menu components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player overlay filter","description":"Removes, at compile time, the dark overlay that appears when single-tapping in the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended communities shelf","description":"Adds an option to hide the recommended communities shelves in subreddits.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide shortcuts","description":"Remove, at compile time, the app shortcuts that appears when app icon is long pressed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"Explore","default":false,"values":null,"title":"Hide Explore","description":"Hide Explore from shortcuts.","required":true},{"key":"Subscriptions","default":false,"values":null,"title":"Hide Subscriptions","description":"Hide Subscriptions from shortcuts.","required":true},{"key":"Search","default":false,"values":null,"title":"Hide Search","description":"Hide Search from shortcuts.","required":true},{"key":"Shorts","default":true,"values":null,"title":"Hide Shorts","description":"Hide Shorts from shortcuts.","required":true}]},{"name":"Hook YouTube Music actions","description":"Adds support for opening music in RVX Music using the in-app YouTube Music button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hook download actions","description":"Adds support to download videos with an external downloader app using the in-app download button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Layout switch","description":"Adds an option to spoof the dpi in order to use a tablet or phone layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"MaterialYou","description":"Applies the MaterialYou theme for Android 12+ devices.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Miniplayer","description":"Adds options to change the in app minimized player, and if patching target 19.16+ adds options to use modern miniplayers.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Overlay buttons","description":"Adds options to display overlay buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"rounded","values":{"Bold":"bold","Rounded":"rounded","Thin":"thin"},"title":"Icon type","description":"The icon type.","required":true},{"key":"BottomMargin","default":"5.0dip","values":{"Wider":"10.0dip","Default":"5.0dip"},"title":"Bottom margin","description":"The bottom margin for the overlay buttons and timestamp.","required":true},{"key":"ChangeTopButtons","default":false,"values":null,"title":"Change top buttons","description":"Change the icons at the top of the player.","required":true}]},{"name":"Player components","description":"Adds options to hide or change components related to the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player components","description":"Adds options to hide or change components related to the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Premium icon","description":"Unlocks premium app icons.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for kids videos.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for music and kids videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove subreddit dialog","description":"Adds options to remove the NSFW community warning and notifications suggestion dialogs by dismissing them automatically.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old style library shelf","description":"Adds an option to return the Library tab to the old style.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of songs using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar components","description":"Adds options to hide or change components related to the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CairoStartColor","default":"#ffff2791","values":null,"title":"Cairo start color","description":"Set Cairo start color for the seekbar.","required":false},{"key":"CairoEndColor","default":"#ffff0033","values":null,"title":"Cairo end color","description":"Set Cairo end color for the seekbar.","required":false}]},{"name":"Settings for Reddit","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"InsertPosition","default":"About","values":{"Parent settings":"@string/parent_tools_key","General":"@string/general_key","Account":"@string/account_switcher_key","Data saving":"@string/data_saving_settings_key","Autoplay":"@string/auto_play_key","Video quality preferences":"@string/video_quality_settings_key","Background":"@string/offline_key","Watch on TV":"@string/pair_with_tv_key","Manage all history":"@string/history_key","Your data in YouTube":"@string/your_data_key","Privacy":"@string/privacy_key","History \u0026 privacy":"@string/privacy_key","Try experimental new features":"@string/premium_early_access_browse_page_key","Purchases and memberships":"@string/subscription_product_setting_key","Billing \u0026 payments":"@string/billing_and_payment_key","Billing and payments":"@string/billing_and_payment_key","Notifications":"@string/notification_key","Connected apps":"@string/connected_accounts_browse_page_key","Live chat":"@string/live_chat_key","Captions":"@string/captions_key","Accessibility":"@string/accessibility_settings_key","About":"@string/about_key"},"title":"Insert position","description":"The settings menu name that the RVX settings menu should be above.","required":true},{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube Music","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Shorts components","description":"Adds options to hide or change components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"OutlineIcon","default":true,"values":null,"title":"Outline icons","description":"Apply the outline icon.","required":true},{"key":"NewSegmentAlignment","default":"right","values":{"Right":"right","Left":"left"},"title":"New segment alignment","description":"Align new segment window.","required":true}]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube client version. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof streaming data","description":"Adds options to spoof the streaming data to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof watch history","description":"Adds an option to change the domain of the watch history or check its status.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options for controlling volume and brightness with swiping, and whether to enter fullscreen when swiping down below the player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Changes the app\u0027s theme to the values specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DarkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled Black":"@android:color/black","Catppuccin (Mocha)":"#FF181825","Dark Pink":"#FF290025","Dark Blue":"#FF001029","Dark Green":"#FF002905","Dark Yellow":"#FF282900","Dark Orange":"#FF291800","Dark Red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true},{"key":"LightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Catppuccin (Latte)":"#FFE6E9EF","Light Pink":"#FFFCCFF3","Light Blue":"#FFD1E0FF","Light Green":"#FFCCFFCC","Light Yellow":"#FFFDFFCC","Light Orange":"#FFFFE6CC","Light Red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true}]},{"name":"Toolbar components","description":"Adds options to hide or change components located on the toolbar, such as toolbar buttons, search bar, and header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Translations","description":"Adds Crowdin translations for YouTube Music.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomLanguage","default":"","values":null,"title":"Custom language file","description":"The file path to the strings.xml file.\nPlease note that applying the strings.xml file will overwrite all existing language translations.","required":false},{"key":"SelectedLanguages","default":"bg-rBG, bn, cs-rCZ, el-rGR, es-rES, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, nl-rNL, pl-rPL, pt-rBR, ro-rRO, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Selected RVX languages","description":"Selected RVX languages that will be added.","required":false},{"key":"SelectedAppLanguages","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"Selected app languages","description":"Selected app languages that will be kept, languages that are not in the list will be removed from the app.","required":false}]},{"name":"Translations","description":"Add Crowdin translations for YouTube.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomLanguage","default":"","values":null,"title":"Custom language file","description":"The file path to the strings.xml file.\nPlease note that applying the strings.xml file will overwrite all existing language translations.","required":false},{"key":"SelectedLanguages","default":"ar, bg-rBG, bn, de-rDE, el-rGR, es-rES, fi-rFI, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, pl-rPL, pt-rBR, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Selected RVX languages","description":"Selected RVX languages that will be added.","required":false},{"key":"SelectedAppLanguages","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"Selected app languages","description":"Selected app languages that will be kept, languages that are not in the list will be removed from the app.","required":false}]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Visual preferences icons","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"Extended icon","description":"Apply different icons for Extended preference.","required":false}]},{"name":"Visual preferences icons","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true}]}] \ No newline at end of file +[{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Ambient mode control","description":"Adds options to disable Ambient mode and to bypass Ambient mode restrictions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Amoled","description":"Applies a pure black theme to some components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bitrate default value","description":"Sets the audio quality to \u0027Always High\u0027 when you first install the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Certificate spoof","description":"Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Changes the package name for Reddit to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"PackageNameReddit","default":"com.reddit.frontpage","values":{"Clone":"com.reddit.frontpage.revanced","Default":"com.reddit.frontpage.rvx","Original":"com.reddit.frontpage"},"title":"Package name of Reddit","description":"The name of the package to rename the app to.","required":true}]},{"name":"Change player flyout menu toggles","description":"Adds an option to use text toggles instead of switch toggles within the additional settings menu.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change version code","description":"Changes the version code of the app to the value specified in options.json. Except when mounting, this can prevent app stores from updating the app and allow the app to be installed over an existing installation that has a higher version code. By default, the highest version code is set.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"ChangeVersionCode","default":false,"values":null,"title":"Change version code","description":"Changes the version code of the app.","required":true},{"key":"VersionCode","default":"2147483647","values":null,"title":"Version code","description":"The version code to use. (1 ~ 2147483647)","required":true}]},{"name":"Custom Shorts action buttons","description":"Changes, at compile time, the icon of the action buttons of the Shorts player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"round","values":{"Cairo":"round","Outline":"outline","OutlineCircle":"outlinecircle","Round":"round","YouTube":"youtube","YouTubeOutline":"youtubeoutline"},"title":"Shorts icon style ","description":"The style of the icons for the action buttons in the Shorts player.","required":true}]},{"name":"Custom branding icon for YouTube","description":"Changes the YouTube app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube":"youtube"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"CustomHeader","default":"","values":null,"title":"Custom header","description":"The header to apply to the app.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- yt_premium_wordmark_header_dark.png\n- yt_premium_wordmark_header_light.png\n- yt_wordmark_header_dark.png\n- yt_wordmark_header_light.png\n\nThe image dimensions must be as follows:\n- drawable-xxxhdpi: 512px x 192px\n- drawable-xxhdpi: 387px x 144px\n- drawable-xhdpi: 258px x 96px\n- drawable-hdpi: 194px x 72px\n- drawable-mdpi: 129px x 48px","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashAnimation","default":true,"values":null,"title":"Restore old splash animation","description":"Restore the old style splash animation.","required":true}]},{"name":"Custom branding icon for YouTube Music","description":"Changes the YouTube Music app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube Music":"youtube_music"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_music_background_color_108.png\n- adaptiveproduct_youtube_music_foreground_color_108.png\n- ic_launcher_release.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashIcon","default":false,"values":null,"title":"Restore old splash icon","description":"Restore the old style splash icon.\n\nIf you enable both the old style splash icon and the Cairo splash animation,\n\nOld style splash icon will appear first and then the Cairo splash animation will start.","required":true}]},{"name":"Custom branding name for Reddit","description":"Renames the Reddit app to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"Reddit","values":{"Default":"RVX Reddit","Original":"Reddit"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube","description":"Renames the YouTube app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"RVX","values":{"ReVanced Extended":"ReVanced Extended","RVX":"RVX","YouTube RVX":"YouTube RVX","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube Music","description":"Renames the YouTube Music app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppNameNotification","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in notification panel","description":"The name of the app as it appears in the notification panel.","required":true},{"key":"AppNameLauncher","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in launcher","description":"The name of the app as it appears in the launcher.","required":true}]},{"name":"Custom double tap length","description":"Adds Double-tap to seek values that are specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DoubleTapLengthArrays","default":"3, 5, 10, 15, 20, 30, 60, 120, 180","values":null,"title":"Double-tap to seek values","description":"A list of custom Double-tap to seek lengths to be added, separated by commas.","required":true}]},{"name":"Custom header for YouTube Music","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube Music\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube Music\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- action_bar_logo.png\n- logo_music.png\n- ytm_logo.png\n\nThe image \u0027action_bar_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 320px x 96px\n- drawable-xxhdpi: 240px x 72px\n- drawable-xhdpi: 160px x 48px\n- drawable-hdpi: 121px x 36px\n- drawable-mdpi: 80px x 24px\n\nThe image \u0027logo_music.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 576px x 200px\n- drawable-xxhdpi: 432px x 150px\n- drawable-xhdpi: 288px x 100px\n- drawable-hdpi: 217px x 76px\n- drawable-mdpi: 144px x 50px\n\nThe image \u0027ytm_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 412px x 144px\n- drawable-xxhdpi: 309px x 108px\n- drawable-xhdpi: 206px x 72px\n- drawable-hdpi: 155px x 54px\n- drawable-mdpi: 103px x 36px","required":true}]},{"name":"Description components","description":"Adds options to hide and disable description components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Cairo splash animation","description":"Adds an option to disable Cairo splash animation.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["7.06.54","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable QUIC protocol","description":"Adds an option to disable CronetEngine\u0027s QUIC protocol.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto audio tracks","description":"Adds an option to disable audio tracks from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dislike redirection","description":"Adds an option to disable redirection to the next track when clicking the Dislike button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable haptic feedback","description":"Adds options to disable haptic feedback when swiping in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Adds an option to disable the popup that appears when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable splash animation","description":"Adds an option to disable the splash animation on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an option to use the OPUS audio codec instead of the MP4A audio codec.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable external browser","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable gradient loading screen","description":"Adds an option to enable the gradient loading screen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable landscape mode","description":"Adds an option to enable landscape mode when rotating the screen on phones.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Flyout menu components","description":"Adds options to hide or change flyout menu components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Force player buttons background","description":"Changes, at compile time, the dark background surrounding the video player controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"BackgroundColor","default":"?ytOverlayBackgroundMediumLight","values":{"Default":"?ytOverlayBackgroundMediumLight","Transparent":"@android:color/transparent","Opacity10":"#1a000000","Opacity20":"#33000000","Opacity30":"#4d000000","Opacity40":"#66000000","Opacity50":"#80000000","Opacity60":"#99000000","Opacity70":"#b3000000","Opacity80":"#cc000000","Opacity90":"#e6000000","Opacity100":"#ff000000"},"title":"Background color","description":"Specify a background color for player buttons using a hex color code. The first two symbols of the hex code represent the alpha channel, which is used to change the opacity.","required":false}]},{"name":"Force snackbar theme","description":"Force snackbar background color to match selected theme.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CornerRadius","default":"8.0dip","values":null,"title":"Corner radius","description":"Specify a corner radius for the snackbar.","required":false},{"key":"BackgroundColor","default":"?ytChipBackground","values":{"Chip":"?ytChipBackground","Base":"?ytBaseBackground"},"title":"Background color","description":"Specify a background color for the snackbar. You can specify hex color.","required":false},{"key":"StrokeColor","default":"none","values":{"None":"none","Accent":"?attr/colorAccent","Inverted":"?attr/ytInvertedBackground"},"title":"Stroke color","description":"Specify a stroke color for the snackbar. You can specify hex color.","required":false}]},{"name":"Fullscreen components","description":"Adds options to hide or change components related to fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"Hide Recently Visited shelf","description":"Adds an option to hide the Recently Visited shelf in the sidebar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts dimming","description":"Removes, at compile time, the dimming effect at the top and bottom of Shorts videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide account components","description":"Adds options to hide components related to the account menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action bar components","description":"Adds options to hide action bar components and replace the offline download button with an external download button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action buttons","description":"Adds options to hide action buttons under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide comments components","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed components","description":"Adds options to hide components related to feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed flyout menu","description":"Adds the ability to hide feed flyout menu components using a custom filter.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide navigation buttons","description":"Adds options to hide buttons in the navigation bar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide overlay filter","description":"Removes, at compile time, the dark overlay that appears when player flyout menus are open.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds options to hide buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player flyout menu","description":"Adds options to hide player flyout menu components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player overlay filter","description":"Removes, at compile time, the dark overlay that appears when single-tapping in the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended communities shelf","description":"Adds an option to hide the recommended communities shelves in subreddits.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide shortcuts","description":"Remove, at compile time, the app shortcuts that appears when app icon is long pressed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"Explore","default":false,"values":null,"title":"Hide Explore","description":"Hide Explore from shortcuts.","required":true},{"key":"Subscriptions","default":false,"values":null,"title":"Hide Subscriptions","description":"Hide Subscriptions from shortcuts.","required":true},{"key":"Search","default":false,"values":null,"title":"Hide Search","description":"Hide Search from shortcuts.","required":true},{"key":"Shorts","default":true,"values":null,"title":"Hide Shorts","description":"Hide Shorts from shortcuts.","required":true}]},{"name":"Hook YouTube Music actions","description":"Adds support for opening music in RVX Music using the in-app YouTube Music button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hook download actions","description":"Adds support to download videos with an external downloader app using the in-app download button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Layout switch","description":"Adds an option to spoof the dpi in order to use a tablet or phone layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"MaterialYou","description":"Applies the MaterialYou theme for Android 12+ devices.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Miniplayer","description":"Adds options to change the in app minimized player, and if patching target 19.16+ adds options to use modern miniplayers.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Overlay buttons","description":"Adds options to display overlay buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"rounded","values":{"Bold":"bold","Rounded":"rounded","Thin":"thin"},"title":"Icon type","description":"The icon type.","required":true},{"key":"BottomMargin","default":"5.0dip","values":{"Wider":"10.0dip","Default":"5.0dip"},"title":"Bottom margin","description":"The bottom margin for the overlay buttons and timestamp.","required":true},{"key":"ChangeTopButtons","default":false,"values":null,"title":"Change top buttons","description":"Change the icons at the top of the player.","required":true}]},{"name":"Player components","description":"Adds options to hide or change components related to the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player components","description":"Adds options to hide or change components related to the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Premium icon","description":"Unlocks premium app icons.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for kids videos.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for music and kids videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove subreddit dialog","description":"Adds options to remove the NSFW community warning and notifications suggestion dialogs by dismissing them automatically.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old style library shelf","description":"Adds an option to return the Library tab to the old style.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of songs using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar components","description":"Adds options to hide or change components related to the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CairoStartColor","default":"#ffff2791","values":null,"title":"Cairo start color","description":"Set Cairo start color for the seekbar.","required":false},{"key":"CairoEndColor","default":"#ffff0033","values":null,"title":"Cairo end color","description":"Set Cairo end color for the seekbar.","required":false}]},{"name":"Settings for Reddit","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"InsertPosition","default":"About","values":{"Parent settings":"@string/parent_tools_key","General":"@string/general_key","Account":"@string/account_switcher_key","Data saving":"@string/data_saving_settings_key","Autoplay":"@string/auto_play_key","Video quality preferences":"@string/video_quality_settings_key","Background":"@string/offline_key","Watch on TV":"@string/pair_with_tv_key","Manage all history":"@string/history_key","Your data in YouTube":"@string/your_data_key","Privacy":"@string/privacy_key","History \u0026 privacy":"@string/privacy_key","Try experimental new features":"@string/premium_early_access_browse_page_key","Purchases and memberships":"@string/subscription_product_setting_key","Billing \u0026 payments":"@string/billing_and_payment_key","Billing and payments":"@string/billing_and_payment_key","Notifications":"@string/notification_key","Connected apps":"@string/connected_accounts_browse_page_key","Live chat":"@string/live_chat_key","Captions":"@string/captions_key","Accessibility":"@string/accessibility_settings_key","About":"@string/about_key"},"title":"Insert position","description":"The settings menu name that the RVX settings menu should be above.","required":true},{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube Music","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Shorts components","description":"Adds options to hide or change components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"OutlineIcon","default":true,"values":null,"title":"Outline icons","description":"Apply the outline icon.","required":true},{"key":"NewSegmentAlignment","default":"right","values":{"Right":"right","Left":"left"},"title":"New segment alignment","description":"Align new segment window.","required":true}]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube client version. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof streaming data","description":"Adds options to spoof the streaming data to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof watch history","description":"Adds an option to change the domain of the watch history or check its status.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options for controlling volume and brightness with swiping, and whether to enter fullscreen when swiping down below the player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Changes the app\u0027s theme to the values specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DarkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled Black":"@android:color/black","Catppuccin (Mocha)":"#FF181825","Dark Pink":"#FF290025","Dark Blue":"#FF001029","Dark Green":"#FF002905","Dark Yellow":"#FF282900","Dark Orange":"#FF291800","Dark Red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true},{"key":"LightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Catppuccin (Latte)":"#FFE6E9EF","Light Pink":"#FFFCCFF3","Light Blue":"#FFD1E0FF","Light Green":"#FFCCFFCC","Light Yellow":"#FFFDFFCC","Light Orange":"#FFFFE6CC","Light Red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true}]},{"name":"Toolbar components","description":"Adds options to hide or change components located on the toolbar, such as toolbar buttons, search bar, and header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Translations","description":"Adds Crowdin translations for YouTube Music.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomLanguage","default":"","values":null,"title":"Custom language file","description":"The file path to the strings.xml file.\nPlease note that applying the strings.xml file will overwrite all existing language translations.","required":false},{"key":"SelectedLanguages","default":"bg-rBG, bn, cs-rCZ, el-rGR, es-rES, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, nl-rNL, pl-rPL, pt-rBR, ro-rRO, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Selected RVX languages","description":"Selected RVX languages that will be added.","required":false},{"key":"SelectedAppLanguages","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"Selected app languages","description":"Selected app languages that will be kept, languages that are not in the list will be removed from the app.","required":false}]},{"name":"Translations","description":"Add Crowdin translations for YouTube.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomLanguage","default":"","values":null,"title":"Custom language file","description":"The file path to the strings.xml file.\nPlease note that applying the strings.xml file will overwrite all existing language translations.","required":false},{"key":"SelectedLanguages","default":"ar, bg-rBG, bn, de-rDE, el-rGR, es-rES, fi-rFI, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, pl-rPL, pt-rBR, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Selected RVX languages","description":"Selected RVX languages that will be added.","required":false},{"key":"SelectedAppLanguages","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"Selected app languages","description":"Selected app languages that will be kept, languages that are not in the list will be removed from the app.","required":false}]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Visual preferences icons","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"Extended icon","description":"Apply different icons for Extended preference.","required":false}]},{"name":"Visual preferences icons","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored","YT Alt":"yt_alt"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true}]}] \ No newline at end of file From 6042584e45bf46248ae8e89b6b86084be5534b4b Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:59:48 +0300 Subject: [PATCH 045/103] chore(YouTube - Settings): Fix SB prefs duplicated Categories as parent groups created an issue with populating some duplications in search results. --- .../youtube/settings/xml/revanced_prefs.xml | 64 +++++++++---------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 8162a8cf4..f39b91640 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -649,40 +649,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PREFERENCE_SCREEN: SPONSOR_BLOCK --> From de30230265b90de1c6ff93c3ec80155381c26ad0 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Thu, 3 Oct 2024 12:52:20 +0300 Subject: [PATCH 046/103] feat(YouTube - Visual preferences icons): Add `RVX Letters` and `RVX Letters Bold` icons for RVX setting --- .../visual/VisualPreferencesIconsPatch.kt | 63 ++++++++++--------- .../revanced_extended_settings_key_icon.xml | 18 ++++++ .../revanced_extended_settings_key_icon.xml | 18 ++++++ ..._preference_screen_navigation_bar_icon.xml | 18 ------ ...rence_screen_spoof_streaming_data_icon.xml | 18 ------ 5 files changed, 68 insertions(+), 67 deletions(-) create mode 100644 src/main/resources/youtube/visual/icons/rvx_letters/drawable/revanced_extended_settings_key_icon.xml create mode 100644 src/main/resources/youtube/visual/icons/rvx_letters_bold/drawable/revanced_extended_settings_key_icon.xml delete mode 100644 src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_navigation_bar_icon.xml delete mode 100644 src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_spoof_streaming_data_icon.xml diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt index 83782033b..cc94a0d73 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/visual/VisualPreferencesIconsPatch.kt @@ -23,7 +23,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( ) { private const val DEFAULT_ICON_KEY = "Extension" - private val ExtendedIcon by stringPatchOption( + private val ExtendedIcon = stringPatchOption( key = "ExtendedIcon", default = DEFAULT_ICON_KEY, values = mapOf( @@ -32,6 +32,8 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "Gear" to "gear", "ReVanced" to "revanced", "ReVanced Colored" to "revanced_colored", + "RVX Letters" to "rvx_letters", + "RVX Letters Bold" to "rvx_letters_bold", "YT Alt" to "yt_alt", ), title = "RVX settings menu icon", @@ -248,44 +250,43 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( // Copy resources val emptyIcon = "empty_icon" - val resourcesToCopy = mutableListOf( + arrayOf( ResourceGroup("drawable-xxhdpi", "$emptyIcon.png"), - ) + ).forEach { context.copyResources("youtube/visual/icons", it) } - fun copyResourcesWithFallback(iconPath: String) { - try { - context.copyResources(iconPath, ResourceGroup("drawable", "revanced_extended_settings_key_icon.xml")) - } catch (_: Exception) { - // Ignore if resource copy fails + // Check patch options first. + val selectedIconType = ExtendedIcon + .underBarOrThrow() - // Add a fallback extended icon - // It's needed if someone provides custom path to icon(s) folder - // but custom branding icons for Extended setting are predefined, - // so it won't copy custom branding icon - // and will raise an error without fallback icon - context.copyResources( - "youtube/visual/icons/extension", - ResourceGroup("drawable", "revanced_extended_settings_key_icon.xml") - ) - } - } + val customBrandingIconType = CustomBrandingIconPatch.AppIcon + .underBarOrThrow() - ExtendedIcon?.let { iconType -> - val selectedIconType = iconType.lowercase().replace(" ", "_") - CustomBrandingIconPatch.AppIcon.let { appIcon -> - val appIconValue = appIcon.underBarOrThrow() - val resourcePath = "youtube/branding/$appIconValue" + // region copy RVX settings menu icon. - val iconPath = when { - selectedIconType == "custom_branding_icon" -> "$resourcePath/visual" - else -> "youtube/visual/icons/$selectedIconType" - } + val fallbackIconPath = "youtube/visual/icons/extension" + val iconPath = when (selectedIconType) { + "custom_branding_icon" -> "youtube/branding/$customBrandingIconType/settings" + else -> "youtube/visual/icons/$selectedIconType" + } + val resourceGroup = ResourceGroup( + "drawable", + "revanced_extended_settings_key_icon.xml" + ) - copyResourcesWithFallback(iconPath) - } + try { + context.copyResources(iconPath, resourceGroup) + } catch (_: Exception) { + // Ignore if resource copy fails + + // Add a fallback extended icon + // It's needed if someone provides custom path to icon(s) folder + // but custom branding icons for Extended setting are predefined, + // so it won't copy custom branding icon + // and will raise an error without fallback icon + context.copyResources(fallbackIconPath, resourceGroup) } - resourcesToCopy.forEach { context.copyResources("youtube/visual/icons", it) } + // endregion. // Edit Preferences / add icon attribute val tagNames = listOf( diff --git a/src/main/resources/youtube/visual/icons/rvx_letters/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/visual/icons/rvx_letters/drawable/revanced_extended_settings_key_icon.xml new file mode 100644 index 000000000..0d9fee7c1 --- /dev/null +++ b/src/main/resources/youtube/visual/icons/rvx_letters/drawable/revanced_extended_settings_key_icon.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/src/main/resources/youtube/visual/icons/rvx_letters_bold/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/youtube/visual/icons/rvx_letters_bold/drawable/revanced_extended_settings_key_icon.xml new file mode 100644 index 000000000..35c3ca8ff --- /dev/null +++ b/src/main/resources/youtube/visual/icons/rvx_letters_bold/drawable/revanced_extended_settings_key_icon.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_navigation_bar_icon.xml b/src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_navigation_bar_icon.xml deleted file mode 100644 index dce23219f..000000000 --- a/src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_navigation_bar_icon.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_spoof_streaming_data_icon.xml b/src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_spoof_streaming_data_icon.xml deleted file mode 100644 index 8d08d6d16..000000000 --- a/src/main/resources/youtube/visual/shared/drawable/revanced_preference_screen_spoof_streaming_data_icon.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - From f34c3faf8e1115a43ce2e6b093fbd30c0585bc9a Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Thu, 3 Oct 2024 15:17:31 +0300 Subject: [PATCH 047/103] chore: sync and clean --- ...ntSwitcherAccessibilityLabelFingerprint.kt | 2 +- .../fingerprints/MenuEntryFingerprint.kt | 2 +- ...InactiveAccountThumbnailSizeFingerprint.kt | 2 +- .../fingerprints/TermsOfServiceFingerprint.kt | 2 +- .../ActionBarComponentFingerprint.kt | 2 +- .../LikeDislikeContainerFingerprint.kt | 2 +- .../AccountMenuFooterFingerprint.kt | 2 +- .../fingerprints/FloatingLayoutFingerprint.kt | 2 +- .../InterstitialsContainerFingerprint.kt | 2 +- .../fingerprints/DialogSolidFingerprint.kt | 2 +- .../EndButtonsContainerFingerprint.kt | 2 +- .../fingerprints/SleepTimerFingerprint.kt | 2 +- .../fingerprints/TouchOutsideFingerprint.kt | 2 +- .../TrimSilenceConfigFingerprint.kt | 2 +- .../TrimSilenceSwitchFingerprint.kt | 2 +- .../fingerprints/ChipCloudFingerprint.kt | 2 +- .../FloatingButtonParentFingerprint.kt | 2 +- .../PlayerOverlayChipFingerprint.kt | 2 +- .../fingerprints/SoundSearchFingerprint.kt | 2 +- .../TasteBuilderConstructorFingerprint.kt | 2 +- .../TooltipContentViewFingerprint.kt | 2 +- .../TopBarMenuItemImageViewFingerprint.kt | 2 +- .../TabletIdentifierFingerprint.kt | 2 +- .../fingerprints/BrowseIdFingerprint.kt | 2 +- .../DesignBottomSheetDialogFingerprint.kt | 2 +- .../layout/translations/TranslationsPatch.kt | 63 + .../visual}/VisualPreferencesIconsPatch.kt | 0 .../BackgroundPlaybackManagerFingerprint.kt | 2 +- .../fingerprints/PodCastConfigFingerprint.kt | 2 +- .../BottomSheetRecyclerViewFingerprint.kt | 2 +- .../misc/translations/TranslationsPatch.kt | 83 -- .../fingerprints/TabLayoutFingerprint.kt | 2 +- .../fingerprints/TabLayoutTextFingerprint.kt | 2 +- .../components/PlayerComponentsPatch.kt | 9 +- .../AudioVideoSwitchToggleFingerprint.kt | 2 +- .../MiniPlayerDefaultTextFingerprint.kt | 2 +- .../MiniPlayerParentFingerprint.kt | 2 +- .../OldEngagementPanelFingerprint.kt | 2 +- .../OldPlayerBackgroundFingerprint.kt | 2 +- .../OldPlayerLayoutFingerprint.kt | 2 +- .../RemixGenericButtonFingerprint.kt | 2 +- .../fingerprints/ShuffleOnClickFingerprint.kt | 6 +- .../fingerprints/SwipeToCloseFingerprint.kt | 2 +- .../HeaderSwitchConfigFingerprint.kt | 2 +- ...PlaybackRateBottomSheetClassFingerprint.kt | 4 +- .../fingerprints/TextComponentFingerprint.kt | 2 +- .../music/utils/settings/ResourceUtils.kt | 24 +- .../music/utils/settings/SettingsPatch.kt | 33 +- .../SeekBarConstructorFingerprint.kt | 2 +- .../VideoQualityListFingerprint.kt | 2 +- .../ads/fingerprints/MusicAdsFingerprint.kt | 2 +- .../gms/BaseGmsCoreSupportResourcePatch.kt | 3 +- .../fingerprints/SettingsMenuFingerprint.kt | 2 +- .../shared/translations/TranslationsUtils.kt | 77 +- .../InterstitialsContainerFingerprint.kt | 2 +- .../fingerprints/BreakingNewsFingerprint.kt | 2 +- .../fingerprints/CaptionsButtonFingerprint.kt | 2 +- .../CaptionsButtonSyntheticFingerprint.kt | 2 +- .../ChannelListSubMenuFingerprint.kt | 2 +- .../ChannelListSubMenuTabletFingerprint.kt | 4 +- .../FilterBarHeightFingerprint.kt | 2 +- .../LatestVideosButtonFingerprint.kt | 2 +- .../RelatedChipCloudFingerprint.kt | 2 +- .../SearchResultsChipBarFingerprint.kt | 2 +- .../fingerprints/ShowMoreButtonFingerprint.kt | 2 +- .../ContextualMenuItemBuilderFingerprint.kt | 4 +- .../AccountListParentFingerprint.kt | 2 +- .../AccountMenuParentFingerprint.kt | 2 +- ...ntSwitcherAccessibilityLabelFingerprint.kt | 2 +- .../FloatingMicrophoneFingerprint.kt | 2 +- .../PiPNotificationFingerprint.kt | 2 +- .../TooltipContentFullscreenFingerprint.kt | 2 +- .../TooltipContentViewFingerprint.kt | 2 +- ...cessibilityOfflineButtonSyncFingerprint.kt | 4 +- ...GradientLoadingScreenPrimaryFingerprint.kt | 2 +- ...adientLoadingScreenSecondaryFingerprint.kt | 2 +- ...erDimensionsCalculatorParentFingerprint.kt | 4 +- .../MiniplayerModernCloseButtonFingerprint.kt | 4 +- .../MiniplayerModernDragAndDropFingerprint.kt | 2 +- .../MiniplayerModernEnabledFingerprint.kt | 2 +- ...MiniplayerModernExpandButtonFingerprint.kt | 4 +- ...erModernExpandCloseDrawablesFingerprint.kt | 4 +- ...iniplayerModernForwardButtonFingerprint.kt | 4 +- .../MiniplayerModernOverlayViewFingerprint.kt | 4 +- ...MiniplayerModernRewindButtonFingerprint.kt | 4 +- .../general/music/YouTubeMusicActionsPatch.kt | 2 +- .../TranslucentNavigationBarFingerprint.kt | 2 +- .../CreateButtonDrawableFingerprint.kt | 2 +- ...DrawerContentViewConstructorFingerprint.kt | 2 +- .../ImageSearchButtonConfigFingerprint.kt | 2 +- .../SearchBarParentFingerprint.kt | 2 +- .../fingerprints/SearchResultFingerprint.kt | 2 +- .../SetActionBarRingoFingerprint.kt | 2 +- .../doubletaplength/DoubleTapLengthPatch.kt | 2 +- .../PlayerButtonBackgroundPatch.kt | 2 +- .../youtube/layout/theme/BaseThemePatch.kt | 48 +- .../youtube/layout/theme/MaterialYouPatch.kt | 3 - .../layout/translations/TranslationsPatch.kt | 113 ++ .../BackgroundPlaybackManagerFingerprint.kt | 2 +- .../BackgroundPlaybackSettingsFingerprint.kt | 2 +- ...oundPlaybackPolicyControllerFingerprint.kt | 2 +- .../fingerprints/PiPControllerFingerprint.kt | 2 +- .../BottomSheetRecyclerViewFingerprint.kt | 2 +- .../misc/translations/TranslationsPatch.kt | 143 -- .../AmbientModeInFullscreenFingerprint.kt | 2 +- .../LithoSubtitleButtonConfigFingerprint.kt | 2 +- ...MusicAppDeeplinkButtonParentFingerprint.kt | 2 +- ...ontrolsOverlaySubtitleButtonFingerprint.kt | 2 +- ...amEmojiPickerOnClickListenerFingerprint.kt | 4 +- ...LiveStreamEmojiPickerOpacityFingerprint.kt | 2 +- .../CrowdfundingBoxFingerprint.kt | 2 +- .../FilmStripOverlayConfigFingerprint.kt | 2 +- .../FilmStripOverlayParentFingerprint.kt | 2 +- .../fingerprints/LayoutCircleFingerprint.kt | 2 +- .../fingerprints/LayoutIconFingerprint.kt | 2 +- .../fingerprints/LayoutVideoFingerprint.kt | 2 +- ...ithoComponentOnClickListenerFingerprint.kt | 2 +- .../NoticeOnClickListenerFingerprint.kt | 2 +- ...fflineActionsOnClickListenerFingerprint.kt | 2 +- .../SeekEduContainerFingerprint.kt | 2 +- .../SuggestedActionsFingerprint.kt | 2 +- .../TouchAreaOnClickListenerFingerprint.kt | 2 +- .../VideoZoomSnapIndicatorFingerprint.kt | 2 +- .../AdvancedQualityBottomSheetFingerprint.kt | 4 +- .../fingerprints/PiPModeConfigFingerprint.kt | 2 +- .../AdditionalSettingsConfigFingerprint.kt | 2 +- .../EngagementPanelFingerprint.kt | 2 +- .../LandScapeModeConfigFingerprint.kt | 2 +- .../PlayerTitleViewFingerprint.kt | 2 +- .../QuickActionsElementFingerprint.kt | 4 +- .../RelatedEndScreenResultsFingerprint.kt | 2 +- .../overlaybuttons/OverlayButtonsPatch.kt | 23 +- .../CairoSeekbarConfigFingerprint.kt | 2 +- .../ShortsSeekbarColorFingerprint.kt | 2 +- .../ThumbnailPreviewConfigFingerprint.kt | 2 +- ...zontalTouchOffsetConstructorFingerprint.kt | 2 +- .../RestoreSlideToSeekBehaviorFingerprint.kt | 2 +- .../fingerprints/SpeedOverlayFingerprint.kt | 2 +- .../SpeedOverlayFloatValueFingerprint.kt | 2 +- .../ShortsPaidPromotionFingerprint.kt | 2 +- .../ShortsPivotLegacyFingerprint.kt | 2 +- ...rtsSubscriptionsTabletParentFingerprint.kt | 2 +- .../ShortsTimeStampConstructorFingerprint.kt | 2 +- .../ShortsTimeStampMetaPanelFingerprint.kt | 2 +- .../ShortsTimeStampSecondaryFingerprint.kt | 2 +- .../FullScreenEngagementOverlayFingerprint.kt | 2 +- .../SwipeToSwitchVideoFingerprint.kt | 2 +- .../WatchPanelGesturesFingerprint.kt | 2 +- .../BottomSheetBehaviorFingerprint.kt | 2 +- .../MenuItemInitializeFingerprint.kt | 4 +- .../fingerprints/PlayerButtonFingerprint.kt | 4 +- .../ControlsOverlayConfigFingerprint.kt | 2 +- ...aybackRateBottomSheetBuilderFingerprint.kt | 2 +- .../PlayerButtonsResourcesFingerprint.kt | 2 +- .../QualityMenuViewInflateFingerprint.kt | 4 +- .../fingerprints/TotalTimeFingerprint.kt | 2 +- .../utils/fingerprints/VideoEndFingerprint.kt | 2 +- .../FullscreenButtonPositionFingerprint.kt | 2 +- .../FullscreenButtonViewStubFingerprint.kt | 2 +- .../CarioFragmentConfigFingerprint.kt | 2 +- .../fingerprints/ShortsPlaybackFingerprint.kt | 2 +- ...VideoQualityBottomSheetClassFingerprint.kt | 4 +- .../utils/integrations/IntegrationsPatch.kt | 2 + .../InitializeButtonsFingerprint.kt | 4 +- .../BottomControlsInflateFingerprint.kt | 2 +- .../ControlsLayoutInflateFingerprint.kt | 2 +- .../fingerprint/ReelWatchPagerFingerprint.kt | 4 +- ...ttomSheetRecyclerViewBuilderFingerprint.kt | 2 +- .../RollingNumberSetterFingerprint.kt | 2 +- .../youtube/utils/settings/ResourceUtils.kt | 28 - .../ThemeSetterSystemFingerprint.kt | 2 +- .../utils/sponsorblock/SponsorBlockPatch.kt | 1 - .../fingerprints/ToolBarButtonFingerprint.kt | 4 +- .../VideoQualityListFingerprint.kt | 2 +- .../fingerprints/VideoTitleFingerprint.kt | 2 +- .../kotlin/app/revanced/util/ResourceUtils.kt | 41 + .../fingerprint/LiteralValueFingerprint.kt | 2 +- .../yt_premium_wordmark_header_dark.png | Bin 585 -> 0 bytes .../yt_premium_wordmark_header_light.png | Bin 585 -> 0 bytes .../drawable-hdpi/yt_wordmark_header_dark.png | Bin 585 -> 0 bytes .../yt_wordmark_header_light.png | Bin 585 -> 0 bytes .../yt_premium_wordmark_header_dark.png | Bin 447 -> 0 bytes .../yt_premium_wordmark_header_light.png | Bin 447 -> 0 bytes .../drawable-mdpi/yt_wordmark_header_dark.png | Bin 447 -> 0 bytes .../yt_wordmark_header_light.png | Bin 447 -> 0 bytes .../yt_premium_wordmark_header_dark.png | Bin 748 -> 0 bytes .../yt_premium_wordmark_header_light.png | Bin 748 -> 0 bytes .../yt_wordmark_header_dark.png | Bin 748 -> 0 bytes .../yt_wordmark_header_light.png | Bin 748 -> 0 bytes .../yt_premium_wordmark_header_dark.png | Bin 1066 -> 0 bytes .../yt_premium_wordmark_header_light.png | Bin 1066 -> 0 bytes .../yt_wordmark_header_dark.png | Bin 1066 -> 0 bytes .../yt_wordmark_header_light.png | Bin 1066 -> 0 bytes .../yt_premium_wordmark_header_dark.png | Bin 1407 -> 0 bytes .../yt_premium_wordmark_header_light.png | Bin 1407 -> 0 bytes .../yt_wordmark_header_dark.png | Bin 1407 -> 0 bytes .../yt_wordmark_header_light.png | Bin 1407 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 222 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 1925 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 2503 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 170 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 1342 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 1478 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 258 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 2706 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 3270 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 534 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 4159 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 4986 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 956 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 2275 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 2407 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 728 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 989 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 1331 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 441 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 667 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 909 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 1080 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 1369 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 1774 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 2206 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 2238 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 3143 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 3625 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 2045 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 2129 -> 0 bytes .../shared/drawable/mute_volume_button.xml | 10 - .../ic_fullscreen_vertical_button.png | Bin 157 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 1406 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 1873 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 149 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 993 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 1176 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 215 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 2073 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 2530 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 213 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 3185 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 3917 -> 0 bytes .../ic_fullscreen_vertical_button.png | Bin 440 -> 0 bytes .../revanced_overlay_button_mute_volume.png | Bin 1933 -> 0 bytes ...evanced_overlay_button_mute_volume_off.png | Bin 1979 -> 0 bytes .../drawable/reel_camera_bold_24dp.xml | 5 - .../drawable/reel_more_vertical_bold_24dp.xml | 5 - .../drawable/reel_search_bold_24dp.xml | 5 - .../drawable/$$avd_anim__1__0.xml | 3 - .../drawable/$$avd_anim__1__1.xml | 3 - .../drawable/$$avd_anim__2__0.xml | 3 - .../drawable/$$avd_anim__2__1.xml | 3 - .../drawable/$$avd_anim__3__0.xml | 3 - .../drawable/$$avd_anim__3__1.xml | 3 - .../splashscreen/drawable/$avd_anim__0.xml | 15 - .../splashscreen/drawable/$avd_anim__1.xml | 6 - .../splashscreen/drawable/$avd_anim__2.xml | 6 - .../splashscreen/drawable/$avd_anim__3.xml | 6 - .../splashscreen/drawable/$avd_anim__4.xml | 5 - .../splashscreen/drawable/avd_anim.xml | 8 - .../splashscreen/values-v31/styles.xml | 7 - .../translations/bn/missing_strings.xml | 413 ------ .../youtube/translations/bn/strings.xml | 1193 ----------------- .../translations/fi-rFI/missing_strings.xml | 413 ------ .../youtube/translations/fi-rFI/strings.xml | 1193 ----------------- .../translations/id-rID/missing_strings.xml | 413 ------ .../youtube/translations/id-rID/strings.xml | 1193 ----------------- .../translations/in/missing_strings.xml | 413 ------ .../youtube/translations/in/strings.xml | 1193 ----------------- 267 files changed, 553 insertions(+), 7027 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/music/layout/translations/TranslationsPatch.kt rename src/main/kotlin/app/revanced/patches/music/{utils/settings => layout/visual}/VisualPreferencesIconsPatch.kt (100%) delete mode 100644 src/main/kotlin/app/revanced/patches/music/misc/translations/TranslationsPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/translations/TranslationsPatch.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/misc/translations/TranslationsPatch.kt delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_premium_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_premium_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_premium_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_premium_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_premium_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_premium_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_dark.png delete mode 100644 src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_light.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-xxhdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-xxhdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-xxhdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-xxxhdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-xxxhdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/bold/drawable-xxxhdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-hdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-hdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-hdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-mdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-mdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-mdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-xhdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-xhdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-xhdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-xxxhdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-xxxhdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/rounded/drawable-xxxhdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/shared/drawable/mute_volume_button.xml delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-xhdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/ic_fullscreen_vertical_button.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/revanced_overlay_button_mute_volume.png delete mode 100644 src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/revanced_overlay_button_mute_volume_off.png delete mode 100644 src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_camera_bold_24dp.xml delete mode 100644 src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_more_vertical_bold_24dp.xml delete mode 100644 src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_search_bold_24dp.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$$avd_anim__1__0.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$$avd_anim__1__1.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$$avd_anim__2__0.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$$avd_anim__2__1.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$$avd_anim__3__0.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$$avd_anim__3__1.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$avd_anim__0.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$avd_anim__1.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$avd_anim__2.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$avd_anim__3.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/$avd_anim__4.xml delete mode 100644 src/main/resources/youtube/splashscreen/drawable/avd_anim.xml delete mode 100644 src/main/resources/youtube/splashscreen/values-v31/styles.xml delete mode 100644 src/main/resources/youtube/translations/bn/missing_strings.xml delete mode 100644 src/main/resources/youtube/translations/bn/strings.xml delete mode 100644 src/main/resources/youtube/translations/fi-rFI/missing_strings.xml delete mode 100644 src/main/resources/youtube/translations/fi-rFI/strings.xml delete mode 100644 src/main/resources/youtube/translations/id-rID/missing_strings.xml delete mode 100644 src/main/resources/youtube/translations/id-rID/strings.xml delete mode 100644 src/main/resources/youtube/translations/in/missing_strings.xml delete mode 100644 src/main/resources/youtube/translations/in/strings.xml diff --git a/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt index 3c0b8a71d..ac54c88a9 100644 --- a/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt @@ -6,5 +6,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object AccountSwitcherAccessibilityLabelFingerprint : LiteralValueFingerprint( returnType = "V", parameters = listOf("L", "Ljava/lang/Object;"), - literalSupplier = { AccountSwitcherAccessibility } + literalSupplier = { AccountSwitcherAccessibility }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/MenuEntryFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/MenuEntryFingerprint.kt index 79e10550c..10bb54a5e 100644 --- a/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/MenuEntryFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/MenuEntryFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object MenuEntryFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { MenuEntry } + literalSupplier = { MenuEntry }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/NamesInactiveAccountThumbnailSizeFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/NamesInactiveAccountThumbnailSizeFingerprint.kt index 52dbd3cd8..6735c0640 100644 --- a/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/NamesInactiveAccountThumbnailSizeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/NamesInactiveAccountThumbnailSizeFingerprint.kt @@ -20,5 +20,5 @@ internal object NamesInactiveAccountThumbnailSizeFingerprint : LiteralValueFinge Opcode.MOVE_RESULT_OBJECT, Opcode.IF_EQZ ), - literalSupplier = { NamesInactiveAccountThumbnailSize } + literalSupplier = { NamesInactiveAccountThumbnailSize }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/TermsOfServiceFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/TermsOfServiceFingerprint.kt index 35743e7fe..2f40b2c3a 100644 --- a/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/TermsOfServiceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/account/components/fingerprints/TermsOfServiceFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object TermsOfServiceFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", - literalSupplier = { TosFooter } + literalSupplier = { TosFooter }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/actionbar/components/fingerprints/ActionBarComponentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/actionbar/components/fingerprints/ActionBarComponentFingerprint.kt index de2ac50ad..21839de04 100644 --- a/src/main/kotlin/app/revanced/patches/music/actionbar/components/fingerprints/ActionBarComponentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/actionbar/components/fingerprints/ActionBarComponentFingerprint.kt @@ -17,5 +17,5 @@ internal object ActionBarComponentFingerprint : LiteralValueFingerprint( Opcode.SGET_OBJECT, Opcode.SGET_OBJECT ), - literalSupplier = { 99180 } + literalSupplier = { 99180 }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/actionbar/components/fingerprints/LikeDislikeContainerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/actionbar/components/fingerprints/LikeDislikeContainerFingerprint.kt index d507f7a5b..a05d19a7a 100644 --- a/src/main/kotlin/app/revanced/patches/music/actionbar/components/fingerprints/LikeDislikeContainerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/actionbar/components/fingerprints/LikeDislikeContainerFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object LikeDislikeContainerFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { LikeDislikeContainer } + literalSupplier = { LikeDislikeContainer }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/AccountMenuFooterFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/AccountMenuFooterFingerprint.kt index 0ddd4bf72..92a5c8c76 100644 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/AccountMenuFooterFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/AccountMenuFooterFingerprint.kt @@ -17,5 +17,5 @@ internal object AccountMenuFooterFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.IGET_OBJECT ), - literalSupplier = { PrivacyTosFooter } + literalSupplier = { PrivacyTosFooter }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/FloatingLayoutFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/FloatingLayoutFingerprint.kt index ec2956f36..9d512607d 100644 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/FloatingLayoutFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/FloatingLayoutFingerprint.kt @@ -9,5 +9,5 @@ internal object FloatingLayoutFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { FloatingLayout } + literalSupplier = { FloatingLayout }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/InterstitialsContainerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/InterstitialsContainerFingerprint.kt index c5f600a10..1b18c8d54 100644 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/InterstitialsContainerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/InterstitialsContainerFingerprint.kt @@ -6,5 +6,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object InterstitialsContainerFingerprint : LiteralValueFingerprint( returnType = "V", strings = listOf("overlay_controller_param"), - literalSupplier = { InterstitialsContainer } + literalSupplier = { InterstitialsContainer }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt index 9d8ad020d..92cb13bdb 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt @@ -15,6 +15,6 @@ internal object DialogSolidFingerprint : LiteralValueFingerprint( Opcode.MOVE_RESULT_OBJECT, Opcode.INVOKE_STATIC ), - literalSupplier = { DialogSolid } + literalSupplier = { DialogSolid }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/EndButtonsContainerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/EndButtonsContainerFingerprint.kt index c06ff0ea8..bad8c6357 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/EndButtonsContainerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/EndButtonsContainerFingerprint.kt @@ -5,6 +5,6 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object EndButtonsContainerFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { EndButtonsContainer } + literalSupplier = { EndButtonsContainer }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/SleepTimerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/SleepTimerFingerprint.kt index 79e58c36f..e374b56d9 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/SleepTimerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/SleepTimerFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object SleepTimerFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), - literalSupplier = { 45372767 } + literalSupplier = { 45372767 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TouchOutsideFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TouchOutsideFingerprint.kt index a53a0fbc5..31008c1b3 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TouchOutsideFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TouchOutsideFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object TouchOutsideFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", - literalSupplier = { TouchOutside } + literalSupplier = { TouchOutside }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TrimSilenceConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TrimSilenceConfigFingerprint.kt index b33df48b6..be1db6639 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TrimSilenceConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TrimSilenceConfigFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint object TrimSilenceConfigFingerprint : LiteralValueFingerprint( returnType = "Z", - literalSupplier = { 45619123 } + literalSupplier = { 45619123 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TrimSilenceSwitchFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TrimSilenceSwitchFingerprint.kt index 1330ccdc5..6e619e0f4 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TrimSilenceSwitchFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/TrimSilenceSwitchFingerprint.kt @@ -8,6 +8,6 @@ import com.android.tools.smali.dexlib2.AccessFlags object TrimSilenceSwitchFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { TrimSilenceSwitch } + literalSupplier = { TrimSilenceSwitch }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ChipCloudFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ChipCloudFingerprint.kt index f96fdb6ff..e8f920198 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ChipCloudFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ChipCloudFingerprint.kt @@ -12,6 +12,6 @@ internal object ChipCloudFingerprint : LiteralValueFingerprint( Opcode.INVOKE_STATIC, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { ChipCloud } + literalSupplier = { ChipCloud }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/FloatingButtonParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/FloatingButtonParentFingerprint.kt index 360c10ad4..91868dfa6 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/FloatingButtonParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/FloatingButtonParentFingerprint.kt @@ -10,6 +10,6 @@ internal object FloatingButtonParentFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL, parameters = listOf("L"), opcodes = listOf(Opcode.INVOKE_DIRECT), - literalSupplier = { 259982244 } + literalSupplier = { 259982244 }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PlayerOverlayChipFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PlayerOverlayChipFingerprint.kt index 30978def7..c2c880d4b 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PlayerOverlayChipFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PlayerOverlayChipFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object PlayerOverlayChipFingerprint : LiteralValueFingerprint( returnType = "L", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { PlayerOverlayChip } + literalSupplier = { PlayerOverlayChip }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/SoundSearchFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/SoundSearchFingerprint.kt index 86f4fe708..5a9fa7cf0 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/SoundSearchFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/SoundSearchFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object SoundSearchFingerprint : LiteralValueFingerprint( parameters = emptyList(), - literalSupplier = { 45625491 } + literalSupplier = { 45625491 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TasteBuilderConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TasteBuilderConstructorFingerprint.kt index 148e3f36c..39b3baa3e 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TasteBuilderConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TasteBuilderConstructorFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object TasteBuilderConstructorFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { MusicTasteBuilderShelf } + literalSupplier = { MusicTasteBuilderShelf }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TooltipContentViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TooltipContentViewFingerprint.kt index e5934cefa..936c702af 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TooltipContentViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TooltipContentViewFingerprint.kt @@ -9,5 +9,5 @@ internal object TooltipContentViewFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L"), - literalSupplier = { ToolTipContentView } + literalSupplier = { ToolTipContentView }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TopBarMenuItemImageViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TopBarMenuItemImageViewFingerprint.kt index 5f7b40f4e..7b91a2e67 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TopBarMenuItemImageViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/TopBarMenuItemImageViewFingerprint.kt @@ -9,6 +9,6 @@ internal object TopBarMenuItemImageViewFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { TopBarMenuItemImageView } + literalSupplier = { TopBarMenuItemImageView }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/general/landscapemode/fingerprints/TabletIdentifierFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/landscapemode/fingerprints/TabletIdentifierFingerprint.kt index d9105934e..b958e9dcc 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/landscapemode/fingerprints/TabletIdentifierFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/landscapemode/fingerprints/TabletIdentifierFingerprint.kt @@ -15,6 +15,6 @@ internal object TabletIdentifierFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT ), - literalSupplier = { IsTablet } + literalSupplier = { IsTablet }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/general/oldstylelibraryshelf/fingerprints/BrowseIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/oldstylelibraryshelf/fingerprints/BrowseIdFingerprint.kt index 4fbc74a4e..e4cddc798 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/oldstylelibraryshelf/fingerprints/BrowseIdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/oldstylelibraryshelf/fingerprints/BrowseIdFingerprint.kt @@ -9,5 +9,5 @@ internal object BrowseIdFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L"), strings = listOf("FEmusic_offline"), - literalSupplier = { 45358178 } + literalSupplier = { 45358178 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/layout/overlayfilter/fingerprints/DesignBottomSheetDialogFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/layout/overlayfilter/fingerprints/DesignBottomSheetDialogFingerprint.kt index ae4fc69e7..ac0953fcd 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/overlayfilter/fingerprints/DesignBottomSheetDialogFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/overlayfilter/fingerprints/DesignBottomSheetDialogFingerprint.kt @@ -12,6 +12,6 @@ internal object DesignBottomSheetDialogFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { DesignBottomSheetDialog } + literalSupplier = { DesignBottomSheetDialog }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/layout/translations/TranslationsPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/translations/TranslationsPatch.kt new file mode 100644 index 000000000..451eb456d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/layout/translations/TranslationsPatch.kt @@ -0,0 +1,63 @@ +package app.revanced.patches.music.layout.translations + +import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatchOption +import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.music.utils.settings.SettingsPatch +import app.revanced.patches.shared.translations.APP_LANGUAGES +import app.revanced.patches.shared.translations.TranslationsUtils.invoke +import app.revanced.util.patch.BaseResourcePatch + +@Suppress("unused") +object TranslationsPatch : BaseResourcePatch( + name = "Translations for YouTube Music", + description = "Add translations or remove string resources.", + dependencies = setOf(SettingsPatch::class), + compatiblePackages = COMPATIBLE_PACKAGE +) { + // Array of supported translations, each represented by its language code. + private val TRANSLATIONS = arrayOf( + "bg-rBG", "bn", "cs-rCZ", "el-rGR", "es-rES", "fr-rFR", "hu-rHU", "id-rID", "in", "it-rIT", + "ja-rJP", "ko-rKR", "nl-rNL", "pl-rPL", "pt-rBR", "ro-rRO", "ru-rRU", "tr-rTR", "uk-rUA", + "vi-rVN", "zh-rCN", "zh-rTW" + ) + + private var CustomTranslation by stringPatchOption( + key = "CustomTranslation", + default = "", + title = "Custom translation", + description = """ + The path to the 'strings.xml' file. + Please note that applying the 'strings.xml' file will overwrite all existing language translations. + """.trimIndent(), + required = true + ) + + private var SelectedTranslations by stringPatchOption( + key = "SelectedTranslations", + default = TRANSLATIONS.joinToString(", "), + title = "Translations to add", + description = "A list of translations to be added for the RVX settings, separated by commas.", + required = true + ) + + private var SelectedStringResources by stringPatchOption( + key = "SelectedStringResources", + default = APP_LANGUAGES.joinToString(", "), + title = "String resources to keep", + description = """ + A list of string resources to be kept, separated by commas. + String resources not in the list will be removed from the app. + + Default string resource, English, is not removed. + """.trimIndent(), + required = true + ) + + override fun execute(context: ResourceContext) { + context.invoke( + CustomTranslation, SelectedTranslations, SelectedStringResources, + TRANSLATIONS, "music" + ) + } +} diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/VisualPreferencesIconsPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt similarity index 100% rename from src/main/kotlin/app/revanced/patches/music/utils/settings/VisualPreferencesIconsPatch.kt rename to src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/BackgroundPlaybackManagerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/BackgroundPlaybackManagerFingerprint.kt index df6f80446..7115f9a86 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/BackgroundPlaybackManagerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/BackgroundPlaybackManagerFingerprint.kt @@ -8,5 +8,5 @@ internal object BackgroundPlaybackManagerFingerprint : LiteralValueFingerprint( returnType = "Z", accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, parameters = listOf("L"), - literalSupplier = { 64657230 } + literalSupplier = { 64657230 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/PodCastConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/PodCastConfigFingerprint.kt index 0d75bcdb3..c4bd6a020 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/PodCastConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/backgroundplayback/fingerprints/PodCastConfigFingerprint.kt @@ -8,5 +8,5 @@ internal object PodCastConfigFingerprint : LiteralValueFingerprint( returnType = "Z", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { 45388403 } + literalSupplier = { 45388403 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/misc/share/fingerprints/BottomSheetRecyclerViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/share/fingerprints/BottomSheetRecyclerViewFingerprint.kt index 4de97d056..3950eaac5 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/share/fingerprints/BottomSheetRecyclerViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/share/fingerprints/BottomSheetRecyclerViewFingerprint.kt @@ -9,5 +9,5 @@ internal object BottomSheetRecyclerViewFingerprint : LiteralValueFingerprint( returnType = "Lj${'$'}/util/Optional;", accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { BottomSheetRecyclerView } + literalSupplier = { BottomSheetRecyclerView }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/misc/translations/TranslationsPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/translations/TranslationsPatch.kt deleted file mode 100644 index adf4c4885..000000000 --- a/src/main/kotlin/app/revanced/patches/music/misc/translations/TranslationsPatch.kt +++ /dev/null @@ -1,83 +0,0 @@ -package app.revanced.patches.music.misc.translations - -import app.revanced.patcher.data.ResourceContext -import app.revanced.patcher.patch.PatchException -import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatchOption -import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.music.utils.settings.SettingsPatch -import app.revanced.patches.shared.translations.APP_LANGUAGES -import app.revanced.patches.shared.translations.TranslationsUtils.copyXml -import app.revanced.patches.shared.translations.TranslationsUtils.updateStringsXml -import app.revanced.util.patch.BaseResourcePatch -import java.io.File - -// Array of supported RVX languages, each represented by its language code. -val LANGUAGES = arrayOf( - "bg-rBG", "bn", "cs-rCZ", "el-rGR", "es-rES", "fr-rFR", "hu-rHU", "id-rID", "in", "it-rIT", - "ja-rJP", "ko-rKR", "nl-rNL", "pl-rPL", "pt-rBR", "ro-rRO", "ru-rRU", "tr-rTR", "uk-rUA", - "vi-rVN", "zh-rCN", "zh-rTW" -) - -@Suppress("DEPRECATION", "unused") -object TranslationsPatch : BaseResourcePatch( - name = "Translations", - description = "Adds Crowdin translations for YouTube Music.", - dependencies = setOf(SettingsPatch::class), - compatiblePackages = COMPATIBLE_PACKAGE -) { - private var CustomLanguage by stringPatchOption( - key = "CustomLanguage", - default = "", - title = "Custom language file", - description = """ - The file path to the strings.xml file. - Please note that applying the strings.xml file will overwrite all existing language translations. - """.trimIndent() - ) - - private var SelectedLanguages by stringPatchOption( - key = "SelectedLanguages", - default = LANGUAGES.joinToString(", "), - title = "Selected RVX languages", - description = "Selected RVX languages that will be added." - ) - - private var SelectedAppLanguages by stringPatchOption( - key = "SelectedAppLanguages", - default = APP_LANGUAGES.joinToString(", "), - title = "Selected app languages", - description = "Selected app languages that will be kept, languages that are not in the list will be removed from the app." - ) - - override fun execute(context: ResourceContext) { - CustomLanguage?.takeIf { it.isNotEmpty() }?.let { customLang -> - try { - val customLangFile = File(customLang) - if (!customLangFile.exists() || !customLangFile.isFile || customLangFile.name != "strings.xml") { - throw PatchException("Invalid custom language file: $customLang") - } - val resourceDirectory = context["res"].resolve("values") - val destinationFile = resourceDirectory.resolve("strings.xml") - - updateStringsXml(customLangFile, destinationFile) - } catch (e: Exception) { - throw PatchException("Error copying custom language file: ${e.message}") - } - } ?: run { - // Process selected RVX languages if no custom language file is set. - val selectedLanguagesArray = SelectedLanguages!!.split(",").map { it.trim() }.toTypedArray() - val filteredLanguages = LANGUAGES.filter { it in selectedLanguagesArray }.toTypedArray() - context.copyXml("music", filteredLanguages) - } - - // Process selected app languages. - val selectedAppLanguagesArray = SelectedAppLanguages!!.split(",").map { it.trim() }.toTypedArray() - val filteredAppLanguages = APP_LANGUAGES.filter { it in selectedAppLanguagesArray }.toTypedArray() - val resourceDirectory = context["res"] - - // Remove unselected app languages. - APP_LANGUAGES.filter { it !in filteredAppLanguages }.forEach { language -> - resourceDirectory.resolve("values-$language").takeIf { it.exists() && it.isDirectory }?.deleteRecursively() - } - } -} diff --git a/src/main/kotlin/app/revanced/patches/music/navigation/components/fingerprints/TabLayoutFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/navigation/components/fingerprints/TabLayoutFingerprint.kt index e5144deee..a9c0cccf8 100644 --- a/src/main/kotlin/app/revanced/patches/music/navigation/components/fingerprints/TabLayoutFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/navigation/components/fingerprints/TabLayoutFingerprint.kt @@ -10,6 +10,6 @@ internal object TabLayoutFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), strings = listOf("FEmusic_radio_builder"), - literalSupplier = { ColorGrey } + literalSupplier = { ColorGrey }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/navigation/components/fingerprints/TabLayoutTextFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/navigation/components/fingerprints/TabLayoutTextFingerprint.kt index 7d6613b23..60ca9dc58 100644 --- a/src/main/kotlin/app/revanced/patches/music/navigation/components/fingerprints/TabLayoutTextFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/navigation/components/fingerprints/TabLayoutTextFingerprint.kt @@ -19,6 +19,6 @@ internal object TabLayoutTextFingerprint : LiteralValueFingerprint( Opcode.INVOKE_INTERFACE, Opcode.MOVE_RESULT ), - literalSupplier = { Text1 } + literalSupplier = { Text1 }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt index cecb66c69..b16e361fd 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt @@ -747,7 +747,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( getReference()?.returnType == "Ljava/lang/String;" } val enumRegister = getInstruction(enumIndex).registerD - val enumClass = (getInstruction(enumIndex).reference as MethodReference).parameterTypes.first() + val enumClass = + (getInstruction(enumIndex).reference as MethodReference).parameterTypes.first() addInstruction( enumIndex, @@ -758,8 +759,10 @@ object PlayerComponentsPatch : BaseBytecodePatch( // region set static field - val shuffleClassIndex = indexOfFirstInstructionReversedOrThrow(accessibilityIndex, Opcode.CHECK_CAST) - val shuffleClass = getInstruction(shuffleClassIndex).reference.toString() + val shuffleClassIndex = + indexOfFirstInstructionReversedOrThrow(accessibilityIndex, Opcode.CHECK_CAST) + val shuffleClass = + getInstruction(shuffleClassIndex).reference.toString() val shuffleMutableClass = context.findClass { classDef -> classDef.type == shuffleClass }!!.mutableClass diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt index 2386ccab8..6101c89e9 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object AudioVideoSwitchToggleFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { AudioVideoSwitchToggle } + literalSupplier = { AudioVideoSwitchToggle }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerDefaultTextFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerDefaultTextFingerprint.kt index 84ae01df7..98c8c26e2 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerDefaultTextFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerDefaultTextFingerprint.kt @@ -11,5 +11,5 @@ internal object MiniPlayerDefaultTextFingerprint : LiteralValueFingerprint( Opcode.SGET_OBJECT, Opcode.IF_NE ), - literalSupplier = { MiniPlayerDefaultText } + literalSupplier = { MiniPlayerDefaultText }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerParentFingerprint.kt index dd066fde4..ab5ba7ac3 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/MiniPlayerParentFingerprint.kt @@ -9,5 +9,5 @@ internal object MiniPlayerParentFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { MiniPlayerMdxPlaying } + literalSupplier = { MiniPlayerMdxPlaying }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldEngagementPanelFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldEngagementPanelFingerprint.kt index cfac0fb62..168a6bdef 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldEngagementPanelFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldEngagementPanelFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object OldEngagementPanelFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), - literalSupplier = { 45427672 } + literalSupplier = { 45427672 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldPlayerBackgroundFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldPlayerBackgroundFingerprint.kt index f6185e1e9..4ba052e1c 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldPlayerBackgroundFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldPlayerBackgroundFingerprint.kt @@ -8,5 +8,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object OldPlayerBackgroundFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), - literalSupplier = { 45415319 } + literalSupplier = { 45415319 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldPlayerLayoutFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldPlayerLayoutFingerprint.kt index e4034b50c..810b9eecf 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldPlayerLayoutFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/OldPlayerLayoutFingerprint.kt @@ -8,5 +8,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object OldPlayerLayoutFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), - literalSupplier = { 45399578 } + literalSupplier = { 45399578 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/RemixGenericButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/RemixGenericButtonFingerprint.kt index 6e9c75bd8..52afccd65 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/RemixGenericButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/RemixGenericButtonFingerprint.kt @@ -15,5 +15,5 @@ internal object RemixGenericButtonFingerprint : LiteralValueFingerprint( Opcode.MOVE_RESULT, Opcode.FLOAT_TO_INT ), - literalSupplier = { RemixGenericButtonSize } + literalSupplier = { RemixGenericButtonSize }, ) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleOnClickFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleOnClickFingerprint.kt index 608e713ea..b7a548956 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleOnClickFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/ShuffleOnClickFingerprint.kt @@ -16,9 +16,9 @@ internal object ShuffleOnClickFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Landroid/view/View;"), customFingerprint = { methodDef, _ -> - methodDef.containsWideLiteralInstructionValue(45468) && - methodDef.name == "onClick" && - indexOfAccessibilityInstruction(methodDef) >= 0 + methodDef.containsWideLiteralInstructionValue(45468) && + methodDef.name == "onClick" && + indexOfAccessibilityInstruction(methodDef) >= 0 } ) { fun indexOfAccessibilityInstruction(methodDef: Method) = diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/SwipeToCloseFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/SwipeToCloseFingerprint.kt index 66dc077d9..97eaf0cf5 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/SwipeToCloseFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/SwipeToCloseFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object SwipeToCloseFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), - literalSupplier = { 45398432 } + literalSupplier = { 45398432 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/fix/header/fingerprints/HeaderSwitchConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/fix/header/fingerprints/HeaderSwitchConfigFingerprint.kt index 4b0d14f5e..659b8218c 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/fix/header/fingerprints/HeaderSwitchConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/fix/header/fingerprints/HeaderSwitchConfigFingerprint.kt @@ -10,5 +10,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object HeaderSwitchConfigFingerprint : LiteralValueFingerprint( returnType = "Z", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { 45617851 } + literalSupplier = { 45617851 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/flyoutmenu/fingerprints/PlaybackRateBottomSheetClassFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/flyoutmenu/fingerprints/PlaybackRateBottomSheetClassFingerprint.kt index e5a241eac..629b94a3b 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/flyoutmenu/fingerprints/PlaybackRateBottomSheetClassFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/flyoutmenu/fingerprints/PlaybackRateBottomSheetClassFingerprint.kt @@ -6,8 +6,8 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags internal object PlaybackRateBottomSheetClassFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { VarispeedUnavailableTitle } + literalSupplier = { VarispeedUnavailableTitle }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/fingerprints/TextComponentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/fingerprints/TextComponentFingerprint.kt index 5dc90e3ea..3275a60af 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/fingerprints/TextComponentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/fingerprints/TextComponentFingerprint.kt @@ -7,5 +7,5 @@ import com.android.tools.smali.dexlib2.Opcode internal object TextComponentFingerprint : LiteralValueFingerprint( returnType = "V", opcodes = listOf(Opcode.CONST_HIGH16), - literalSupplier = { ButtonIconPaddingMedium } + literalSupplier = { ButtonIconPaddingMedium }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/ResourceUtils.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/ResourceUtils.kt index 8390e36f7..ad79c59ae 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/ResourceUtils.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/ResourceUtils.kt @@ -103,6 +103,22 @@ object ResourceUtils { } } } + + fun ResourceContext.setPreferenceScreenIcon( + category: String + ) { + this.xmlEditor[SETTINGS_HEADER_PATH].use { editor -> + editor.file.doRecursively loop@{ + if (it !is Element) return@loop + + it.getAttributeNode("android:key")?.let { attribute -> + if (attribute.textContent == "revanced_preference_screen_$category") { + it.cloneNodes(it.parentNode) + } + } + } + } + } fun ResourceContext.sortPreferenceCategory( category: String @@ -135,7 +151,6 @@ object ResourceUtils { } .forEach { it.adoptChild("Preference") { - setAttribute("android:key", key) setAttribute("android:title", "@string/$key" + "_title") setAttribute("android:summary", "@string/$key" + "_summary") this.adoptChild("intent") { @@ -156,8 +171,7 @@ object ResourceUtils { key: String, defaultValue: String, dependencyKey: String, - setSummary: Boolean, - setSummaryOnOff: Boolean + setSummary: Boolean ) { this.xmlEditor[SETTINGS_HEADER_PATH].use { editor -> val tags = editor.file.getElementsByTagName(PREFERENCE_SCREEN_TAG_NAME) @@ -171,10 +185,6 @@ object ResourceUtils { if (setSummary) { setAttribute("android:summary", "@string/$key" + "_summary") } - if (setSummaryOnOff) { - setAttribute("android:summaryOn", "@string/$key" + "_summary_on") - setAttribute("android:summaryOff", "@string/$key" + "_summary_off") - } setAttribute("android:key", key) setAttribute("android:defaultValue", defaultValue) if (dependencyKey != "") { diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt index 669b2a282..0af833bda 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt @@ -157,52 +157,35 @@ object SettingsPatch : BaseResourcePatch( internal fun addSwitchPreference( category: CategoryType, key: String, - defaultValue: String, - setSummary: Boolean - ) = addSwitchPreference(category, key, defaultValue, "", setSummary, false) + defaultValue: String + ) = addSwitchPreference(category, key, defaultValue, "") internal fun addSwitchPreference( category: CategoryType, key: String, defaultValue: String, - setSummary: Boolean, - setSummaryOnOff: Boolean - ) = addSwitchPreference(category, key, defaultValue, "", setSummary, setSummaryOnOff) + setSummary: Boolean + ) = addSwitchPreference(category, key, defaultValue, "", setSummary) internal fun addSwitchPreference( category: CategoryType, key: String, defaultValue: String, - dependencyKey: String, - setSummaryOnOff: Boolean - ) = addSwitchPreference(category, key, defaultValue, dependencyKey, true, setSummaryOnOff) + dependencyKey: String + ) = addSwitchPreference(category, key, defaultValue, dependencyKey, true) internal fun addSwitchPreference( category: CategoryType, key: String, defaultValue: String, dependencyKey: String, - setSummary: Boolean, - setSummaryOnOff: Boolean = false + setSummary: Boolean ) { val categoryValue = category.value contexts.addPreferenceCategory(categoryValue) - contexts.addSwitchPreference(categoryValue, key, defaultValue, dependencyKey, setSummary, setSummaryOnOff) + contexts.addSwitchPreference(categoryValue, key, defaultValue, dependencyKey, setSummary) } - internal fun addSwitchPreference( - category: CategoryType, - key: String, - defaultValue: String - ) = addSwitchPreference(category, key, defaultValue, "") - - internal fun addSwitchPreference( - category: CategoryType, - key: String, - defaultValue: String, - dependencyKey: String - ) = addSwitchPreference(category, key, defaultValue, dependencyKey, false) - internal fun addPreferenceWithIntent( category: CategoryType, key: String diff --git a/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/SeekBarConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/SeekBarConstructorFingerprint.kt index 9edfd4c98..f88378919 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/SeekBarConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/sponsorblock/fingerprints/SeekBarConstructorFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object SeekBarConstructorFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { InlineTimeBarAdBreakMarkerColor } + literalSupplier = { InlineTimeBarAdBreakMarkerColor }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoQualityListFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoQualityListFingerprint.kt index 7bc5e35c2..a57f89772 100644 --- a/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoQualityListFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/video/information/fingerprints/VideoQualityListFingerprint.kt @@ -11,5 +11,5 @@ internal object VideoQualityListFingerprint : LiteralValueFingerprint( Opcode.INVOKE_INTERFACE, Opcode.RETURN_VOID ), - literalSupplier = { QualityAuto } + literalSupplier = { QualityAuto }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/ads/fingerprints/MusicAdsFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/ads/fingerprints/MusicAdsFingerprint.kt index f3fb5c800..de75b2e5b 100644 --- a/src/main/kotlin/app/revanced/patches/shared/ads/fingerprints/MusicAdsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/ads/fingerprints/MusicAdsFingerprint.kt @@ -19,5 +19,5 @@ internal object MusicAdsFingerprint : LiteralValueFingerprint( Opcode.IPUT_WIDE, Opcode.CONST_4, ), - literalSupplier = { 4 } + literalSupplier = { 4 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt index 7a7ee8dfc..22906d6a3 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt @@ -184,7 +184,8 @@ abstract class BaseGmsCoreSupportResourcePatch( private const val CLONE_PACKAGE_NAME_YOUTUBE_MUSIC = "bill.youtube.music" private const val DEFAULT_PACKAGE_NAME_YOUTUBE_MUSIC = "anddea.youtube.music" - internal const val ORIGINAL_PACKAGE_NAME_YOUTUBE_MUSIC = "com.google.android.apps.youtube.music" + internal const val ORIGINAL_PACKAGE_NAME_YOUTUBE_MUSIC = + "com.google.android.apps.youtube.music" private const val PACKAGE_NAME_REGEX_PATTERN = "^[a-z]\\w*(\\.[a-z]\\w*)+\$" } diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt index 67f06179a..a9c4293c8 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object SettingsMenuFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", - literalSupplier = { 16908351 } + literalSupplier = { 16908351 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/translations/TranslationsUtils.kt b/src/main/kotlin/app/revanced/patches/shared/translations/TranslationsUtils.kt index 17a309151..3210214b8 100644 --- a/src/main/kotlin/app/revanced/patches/shared/translations/TranslationsUtils.kt +++ b/src/main/kotlin/app/revanced/patches/shared/translations/TranslationsUtils.kt @@ -1,6 +1,7 @@ package app.revanced.patches.shared.translations import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.patch.PatchException import app.revanced.util.inputStreamFromBundledResource import org.w3c.dom.Node import java.io.File @@ -14,28 +15,78 @@ import javax.xml.transform.stream.StreamResult @Suppress("DEPRECATION") object TranslationsUtils { + internal fun ResourceContext.invoke( + customTranslation: String?, + selectedTranslations: String?, + selectedStringResources: String?, + translationsArray: Array, + sourceDirectory: String + ) { + // Check if the custom translation path is valid. + customTranslation?.takeIf { it.isNotEmpty() }?.let { customLang -> + try { + val customLangFile = File(customLang) + if (!customLangFile.exists() || !customLangFile.isFile || customLangFile.name != "strings.xml") { + throw PatchException("Invalid custom language file: $customLang") + } + val resourceDirectory = this["res"].resolve("values") + val destinationFile = resourceDirectory.resolve("strings.xml") + + updateStringsXml(customLangFile, destinationFile) + } catch (e: Exception) { + // Exception is thrown if an invalid path is used in the patch option. + throw PatchException("Invalid custom translations path: $customLang") + } + } ?: run { + // Process selected translations if no custom translation is set. + val selectedTranslationsArray = + selectedTranslations?.split(",")?.map { it.trim() }?.toTypedArray() + ?: throw PatchException("Invalid selected languages.") + val filteredLanguages = + translationsArray.filter { it in selectedTranslationsArray }.toTypedArray() + copyXml(sourceDirectory, filteredLanguages) + } + + // Process selected string resources. + val selectedStringResourcesArray = + selectedStringResources?.split(",")?.map { it.trim() }?.toTypedArray() + ?: throw PatchException("Invalid selected string resources.") + val filteredStringResources = + APP_LANGUAGES.filter { it in selectedStringResourcesArray }.toTypedArray() + val resourceDirectory = this["res"] + + // Remove unselected app languages. + APP_LANGUAGES.filter { it !in filteredStringResources }.forEach { language -> + resourceDirectory.resolve("values-$language").takeIf { it.exists() && it.isDirectory } + ?.deleteRecursively() + } + } + /** * Extension function to ResourceContext to copy XML translation files. * * @param sourceDirectory The source directory containing the translation files. * @param languageArray The array of language codes to process. */ - internal fun ResourceContext.copyXml( + private fun ResourceContext.copyXml( sourceDirectory: String, languageArray: Array ) { languageArray.forEach { language -> - val directory = "values-$language-v21" - this["res/$directory"].mkdir() - - Files.copy( - inputStreamFromBundledResource( - "$sourceDirectory/translations", - "$language/strings.xml" - )!!, - this["res"].resolve("$directory/strings.xml").toPath(), - StandardCopyOption.REPLACE_EXISTING - ) + inputStreamFromBundledResource( + "$sourceDirectory/translations", + "$language/strings.xml" + )?.let { inputStream -> + val directory = "values-$language-v21" + val valuesV21Directory = this["res"].resolve(directory) + if (!valuesV21Directory.isDirectory) Files.createDirectories(valuesV21Directory.toPath()) + + Files.copy( + inputStream, + this["res"].resolve("$directory/strings.xml").toPath(), + StandardCopyOption.REPLACE_EXISTING + ) + } } } @@ -49,7 +100,7 @@ object TranslationsUtils { * @param sourceFile The source strings.xml file containing new string values. * @param destinationFile The destination strings.xml file to be updated with values from the source file. */ - internal fun updateStringsXml(sourceFile: File, destinationFile: File) { + private fun updateStringsXml(sourceFile: File, destinationFile: File) { val documentBuilderFactory = DocumentBuilderFactory.newInstance() val documentBuilder = documentBuilderFactory.newDocumentBuilder() diff --git a/src/main/kotlin/app/revanced/patches/youtube/ads/general/fingerprints/InterstitialsContainerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/ads/general/fingerprints/InterstitialsContainerFingerprint.kt index 69c71032f..cb641b65a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ads/general/fingerprints/InterstitialsContainerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ads/general/fingerprints/InterstitialsContainerFingerprint.kt @@ -6,5 +6,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object InterstitialsContainerFingerprint : LiteralValueFingerprint( returnType = "V", strings = listOf("overlay_controller_param"), - literalSupplier = { InterstitialsContainer } + literalSupplier = { InterstitialsContainer }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/BreakingNewsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/BreakingNewsFingerprint.kt index 0af30c324..2f64e057c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/BreakingNewsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/BreakingNewsFingerprint.kt @@ -14,5 +14,5 @@ internal object BreakingNewsFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { HorizontalCardList } + literalSupplier = { HorizontalCardList }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonFingerprint.kt index 8595d78e0..1c845448c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonFingerprint.kt @@ -9,5 +9,5 @@ internal object CaptionsButtonFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { CaptionToggleContainer } + literalSupplier = { CaptionToggleContainer }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonSyntheticFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonSyntheticFingerprint.kt index e14eaca43..6a2e5d7f4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonSyntheticFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonSyntheticFingerprint.kt @@ -9,5 +9,5 @@ internal object CaptionsButtonSyntheticFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL or AccessFlags.BRIDGE or AccessFlags.SYNTHETIC, parameters = listOf("Landroid/content/Context;"), - literalSupplier = { CaptionToggleContainer } + literalSupplier = { CaptionToggleContainer }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuFingerprint.kt index 17fe9b2bd..30da50be5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuFingerprint.kt @@ -11,5 +11,5 @@ internal object ChannelListSubMenuFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { ChannelListSubMenu } + literalSupplier = { ChannelListSubMenu }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuTabletFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuTabletFingerprint.kt index 78c272980..910bd0501 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuTabletFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuTabletFingerprint.kt @@ -6,8 +6,8 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags internal object ChannelListSubMenuTabletFingerprint : LiteralValueFingerprint( + returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - returnType = "V", - literalSupplier = { DrawerResults } + literalSupplier = { DrawerResults }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/FilterBarHeightFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/FilterBarHeightFingerprint.kt index bd5cca583..a6df9a5b2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/FilterBarHeightFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/FilterBarHeightFingerprint.kt @@ -15,5 +15,5 @@ internal object FilterBarHeightFingerprint : LiteralValueFingerprint( Opcode.MOVE_RESULT, Opcode.IPUT ), - literalSupplier = { FilterBarHeight } + literalSupplier = { FilterBarHeight }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LatestVideosButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LatestVideosButtonFingerprint.kt index af2c83dda..8ae3e97c4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LatestVideosButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LatestVideosButtonFingerprint.kt @@ -16,5 +16,5 @@ internal object LatestVideosButtonFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { Bar } + literalSupplier = { Bar }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/RelatedChipCloudFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/RelatedChipCloudFingerprint.kt index 7f771088c..d4cb3363d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/RelatedChipCloudFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/RelatedChipCloudFingerprint.kt @@ -14,5 +14,5 @@ internal object RelatedChipCloudFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { RelatedChipCloudMargin } + literalSupplier = { RelatedChipCloudMargin }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/SearchResultsChipBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/SearchResultsChipBarFingerprint.kt index a53de7c02..4fb791f91 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/SearchResultsChipBarFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/SearchResultsChipBarFingerprint.kt @@ -16,5 +16,5 @@ internal object SearchResultsChipBarFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { BarContainerHeight } + literalSupplier = { BarContainerHeight }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ShowMoreButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ShowMoreButtonFingerprint.kt index cae0cf3ae..2ad836a7a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ShowMoreButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ShowMoreButtonFingerprint.kt @@ -11,5 +11,5 @@ internal object ShowMoreButtonFingerprint : LiteralValueFingerprint( Opcode.INVOKE_STATIC, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { ExpandButtonDown } + literalSupplier = { ExpandButtonDown }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/flyoutmenu/fingerprints/ContextualMenuItemBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/flyoutmenu/fingerprints/ContextualMenuItemBuilderFingerprint.kt index 3e04d7cfc..351eeb26b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/flyoutmenu/fingerprints/ContextualMenuItemBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/flyoutmenu/fingerprints/ContextualMenuItemBuilderFingerprint.kt @@ -7,9 +7,9 @@ import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode internal object ContextualMenuItemBuilderFingerprint : LiteralValueFingerprint( + returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL or AccessFlags.SYNTHETIC, parameters = listOf("L", "L"), - returnType = "V", opcodes = listOf( Opcode.CHECK_CAST, Opcode.INVOKE_VIRTUAL, @@ -17,5 +17,5 @@ internal object ContextualMenuItemBuilderFingerprint : LiteralValueFingerprint( Opcode.MOVE_RESULT, Opcode.ADD_INT_2ADDR ), - literalSupplier = { PosterArtWidthDefault } + literalSupplier = { PosterArtWidthDefault }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountListParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountListParentFingerprint.kt index 955ad5695..4b32faa84 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountListParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountListParentFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.Compa import app.revanced.util.fingerprint.LiteralValueFingerprint internal object AccountListParentFingerprint : LiteralValueFingerprint( - literalSupplier = { CompactListItem } + literalSupplier = { CompactListItem }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountMenuParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountMenuParentFingerprint.kt index 927439b10..2bd74dce4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountMenuParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountMenuParentFingerprint.kt @@ -11,5 +11,5 @@ internal object AccountMenuParentFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { CompactLink } + literalSupplier = { CompactLink }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt index 8e0672ae3..125129fcc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt @@ -6,5 +6,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object AccountSwitcherAccessibilityLabelFingerprint : LiteralValueFingerprint( returnType = "V", parameters = listOf("L", "Ljava/lang/Object;"), - literalSupplier = { AccountSwitcherAccessibility } + literalSupplier = { AccountSwitcherAccessibility }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/FloatingMicrophoneFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/FloatingMicrophoneFingerprint.kt index 0be68d53c..1dabe7843 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/FloatingMicrophoneFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/FloatingMicrophoneFingerprint.kt @@ -15,5 +15,5 @@ internal object FloatingMicrophoneFingerprint : LiteralValueFingerprint( Opcode.IF_EQZ, Opcode.RETURN_VOID ), - literalSupplier = { Fab } + literalSupplier = { Fab }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PiPNotificationFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PiPNotificationFingerprint.kt index 82974ffa2..7452b4f1a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PiPNotificationFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PiPNotificationFingerprint.kt @@ -9,5 +9,5 @@ internal object PiPNotificationFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L"), - literalSupplier = { EditSettingsAction } + literalSupplier = { EditSettingsAction }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/TooltipContentFullscreenFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/TooltipContentFullscreenFingerprint.kt index b3bdff38f..0f691b2d0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/TooltipContentFullscreenFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/TooltipContentFullscreenFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object TooltipContentFullscreenFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { 45384061 } + literalSupplier = { 45384061 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/TooltipContentViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/TooltipContentViewFingerprint.kt index dca75978f..f1043f946 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/TooltipContentViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/TooltipContentViewFingerprint.kt @@ -9,5 +9,5 @@ internal object TooltipContentViewFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L"), - literalSupplier = { ToolTipContentView } + literalSupplier = { ToolTipContentView }, ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt index 1137e867c..d3cea0a63 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt @@ -6,7 +6,7 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags internal object AccessibilityOfflineButtonSyncFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "V", - literalSupplier = { AccessibilityOfflineButtonSync } + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + literalSupplier = { AccessibilityOfflineButtonSync }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenPrimaryFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenPrimaryFingerprint.kt index 19b454e54..c11cdb1f2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenPrimaryFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenPrimaryFingerprint.kt @@ -3,5 +3,5 @@ package app.revanced.patches.youtube.general.loadingscreen.fingerprints import app.revanced.util.fingerprint.LiteralValueFingerprint internal object GradientLoadingScreenPrimaryFingerprint : LiteralValueFingerprint( - literalSupplier = { 45412406 } + literalSupplier = { 45412406 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenSecondaryFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenSecondaryFingerprint.kt index 5834fb42b..201d2201f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenSecondaryFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenSecondaryFingerprint.kt @@ -3,5 +3,5 @@ package app.revanced.patches.youtube.general.loadingscreen.fingerprints import app.revanced.util.fingerprint.LiteralValueFingerprint internal object GradientLoadingScreenSecondaryFingerprint : LiteralValueFingerprint( - literalSupplier = { 45418917 } + literalSupplier = { 45418917 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerDimensionsCalculatorParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerDimensionsCalculatorParentFingerprint.kt index dd37100c8..a58eac8f0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerDimensionsCalculatorParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerDimensionsCalculatorParentFingerprint.kt @@ -7,8 +7,8 @@ import com.android.tools.smali.dexlib2.AccessFlags @Suppress("SpellCheckingInspection") internal object MiniplayerDimensionsCalculatorParentFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L"), - literalSupplier = { FloatyBarTopMargin } + literalSupplier = { FloatyBarTopMargin }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernCloseButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernCloseButtonFingerprint.kt index 9c63dc513..041075be3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernCloseButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernCloseButtonFingerprint.kt @@ -10,8 +10,8 @@ import com.android.tools.smali.dexlib2.AccessFlags */ @Suppress("SpellCheckingInspection") internal object MiniplayerModernCloseButtonFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "Landroid/widget/ImageView;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { ModernMiniPlayerClose } + literalSupplier = { ModernMiniPlayerClose }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernDragAndDropFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernDragAndDropFingerprint.kt index d0b567c19..dfe924f68 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernDragAndDropFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernDragAndDropFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object MiniplayerModernDragAndDropFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, parameters = listOf("L"), - literalSupplier = { 45628752 } + literalSupplier = { 45628752 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernEnabledFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernEnabledFingerprint.kt index 86ab4512c..67481d5d8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernEnabledFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernEnabledFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint @Suppress("SpellCheckingInspection") internal object MiniplayerModernEnabledFingerprint : LiteralValueFingerprint( - literalSupplier = { 45622882 } + literalSupplier = { 45622882 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernExpandButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernExpandButtonFingerprint.kt index bd912b283..998c6bde2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernExpandButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernExpandButtonFingerprint.kt @@ -10,8 +10,8 @@ import com.android.tools.smali.dexlib2.AccessFlags */ @Suppress("SpellCheckingInspection") internal object MiniplayerModernExpandButtonFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "Landroid/widget/ImageView;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { ModernMiniPlayerExpand } + literalSupplier = { ModernMiniPlayerExpand }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernExpandCloseDrawablesFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernExpandCloseDrawablesFingerprint.kt index d5e80163f..549f30269 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernExpandCloseDrawablesFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernExpandCloseDrawablesFingerprint.kt @@ -10,8 +10,8 @@ import com.android.tools.smali.dexlib2.AccessFlags */ @Suppress("SpellCheckingInspection") internal object MiniplayerModernExpandCloseDrawablesFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L"), - literalSupplier = { YtOutlinePictureInPictureWhite } + literalSupplier = { YtOutlinePictureInPictureWhite }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernForwardButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernForwardButtonFingerprint.kt index 4557f557e..895487aca 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernForwardButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernForwardButtonFingerprint.kt @@ -10,8 +10,8 @@ import com.android.tools.smali.dexlib2.AccessFlags */ @Suppress("SpellCheckingInspection") internal object MiniplayerModernForwardButtonFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "Landroid/widget/ImageView;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { ModernMiniPlayerForwardButton } + literalSupplier = { ModernMiniPlayerForwardButton }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernOverlayViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernOverlayViewFingerprint.kt index 62223c5da..75c041e40 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernOverlayViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernOverlayViewFingerprint.kt @@ -10,8 +10,8 @@ import com.android.tools.smali.dexlib2.AccessFlags */ @Suppress("SpellCheckingInspection") internal object MiniplayerModernOverlayViewFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { ScrimOverlay } + literalSupplier = { ScrimOverlay }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernRewindButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernRewindButtonFingerprint.kt index 0a257a0c1..d9027236a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernRewindButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/fingerprints/MiniplayerModernRewindButtonFingerprint.kt @@ -10,8 +10,8 @@ import com.android.tools.smali.dexlib2.AccessFlags */ @Suppress("SpellCheckingInspection") internal object MiniplayerModernRewindButtonFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "Landroid/widget/ImageView;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { ModernMiniPlayerRewindButton } + literalSupplier = { ModernMiniPlayerRewindButton }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt index 9b49e8603..5c348be0b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt @@ -8,9 +8,9 @@ import app.revanced.patches.youtube.general.music.fingerprints.AppDeepLinkFinger import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.gms.GmsCoreSupportResourcePatch.PackageNameYouTubeMusic import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_PATH -import app.revanced.patches.youtube.utils.settings.ResourceUtils.addEntryValues import app.revanced.patches.youtube.utils.settings.SettingsBytecodePatch import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.addEntryValues import app.revanced.util.findMethodOrThrow import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/navigation/fingerprints/TranslucentNavigationBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/navigation/fingerprints/TranslucentNavigationBarFingerprint.kt index eb917d081..a95b753c5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/navigation/fingerprints/TranslucentNavigationBarFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/navigation/fingerprints/TranslucentNavigationBarFingerprint.kt @@ -3,5 +3,5 @@ package app.revanced.patches.youtube.general.navigation.fingerprints import app.revanced.util.fingerprint.LiteralValueFingerprint internal object TranslucentNavigationBarFingerprint : LiteralValueFingerprint( - literalSupplier = { 45630927 } + literalSupplier = { 45630927 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/CreateButtonDrawableFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/CreateButtonDrawableFingerprint.kt index cc1c6d795..3cd5ee41b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/CreateButtonDrawableFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/CreateButtonDrawableFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.YtOut import app.revanced.util.fingerprint.LiteralValueFingerprint internal object CreateButtonDrawableFingerprint : LiteralValueFingerprint( - literalSupplier = { YtOutlineVideoCamera } + literalSupplier = { YtOutlineVideoCamera }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/DrawerContentViewConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/DrawerContentViewConstructorFingerprint.kt index 169e83c9f..bad2f98f8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/DrawerContentViewConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/DrawerContentViewConstructorFingerprint.kt @@ -7,5 +7,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object DrawerContentViewConstructorFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { DrawerContentView } + literalSupplier = { DrawerContentView }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/ImageSearchButtonConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/ImageSearchButtonConfigFingerprint.kt index 1a139ee62..2e12a27af 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/ImageSearchButtonConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/ImageSearchButtonConfigFingerprint.kt @@ -10,5 +10,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object ImageSearchButtonConfigFingerprint : LiteralValueFingerprint( returnType = "Z", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { 45617544 } + literalSupplier = { 45617544 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarParentFingerprint.kt index fe9339b88..e29df434f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchBarParentFingerprint.kt @@ -6,5 +6,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint object SearchBarParentFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", strings = listOf("voz-target-id"), - literalSupplier = { VoiceSearch } + literalSupplier = { VoiceSearch }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchResultFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchResultFingerprint.kt index 2e8e7caee..3f5d07d7a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchResultFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SearchResultFingerprint.kt @@ -6,5 +6,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint object SearchResultFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", strings = listOf("search_filter_chip_applied", "search_original_chip_query"), - literalSupplier = { VoiceSearch } + literalSupplier = { VoiceSearch }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SetActionBarRingoFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SetActionBarRingoFingerprint.kt index 9396e5c10..c39838953 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SetActionBarRingoFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/SetActionBarRingoFingerprint.kt @@ -13,5 +13,5 @@ internal object SetActionBarRingoFingerprint : LiteralValueFingerprint( Opcode.IGET_OBJECT, Opcode.INVOKE_STATIC ), - literalSupplier = { ActionBarRingo } + literalSupplier = { ActionBarRingo }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/doubletaplength/DoubleTapLengthPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/doubletaplength/DoubleTapLengthPatch.kt index ad981948c..83c3d816e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/doubletaplength/DoubleTapLengthPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/doubletaplength/DoubleTapLengthPatch.kt @@ -4,9 +4,9 @@ import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatchOption import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.youtube.utils.settings.ResourceUtils.addEntryValues import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.ResourceGroup +import app.revanced.util.addEntryValues import app.revanced.util.copyResources import app.revanced.util.patch.BaseResourcePatch import java.nio.file.Files diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/playerbuttonbg/PlayerButtonBackgroundPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/playerbuttonbg/PlayerButtonBackgroundPatch.kt index 35ff501b8..6a2a7ea46 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/playerbuttonbg/PlayerButtonBackgroundPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/playerbuttonbg/PlayerButtonBackgroundPatch.kt @@ -11,7 +11,7 @@ import org.w3c.dom.Element @Suppress("Deprecation", "unused") object PlayerButtonBackgroundPatch : BaseResourcePatch( name = "Force player buttons background", - description = "Changes, at compile time, the dark background surrounding the video player controls.", + description = "Changes the dark background surrounding the video player controls at compile time.", dependencies = setOf(SettingsPatch::class), compatiblePackages = COMPATIBLE_PACKAGE, ) { diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/BaseThemePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/BaseThemePatch.kt index d0e95dc1a..0b10925b9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/BaseThemePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/BaseThemePatch.kt @@ -1,6 +1,7 @@ package app.revanced.patches.youtube.layout.theme import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.shared.drawable.DrawableColorPatch @@ -10,28 +11,32 @@ import org.w3c.dom.Element @Patch(dependencies = [DrawableColorPatch::class]) @Suppress("DEPRECATION") object BaseThemePatch : ResourcePatch() { + private const val SPLASH_SCREEN_COLOR_NAME = "splashScreenColor" + private const val SPLASH_SCREEN_COLOR_ATTRIBUTE = "?attr/$SPLASH_SCREEN_COLOR_NAME" + override fun execute(context: ResourceContext) { DrawableColorPatch.injectCall("$UTILS_PATH/DrawableColorPatch;->getColor(I)I") // edit the resource files to change the splash screen color - val attrsPath = "res/values/attrs.xml" - val stylesPaths: List = listOf( - "res/values/styles.xml", // Android 11 (and below) - "res/values-v31/styles.xml", // Android 12 (and above) - ) + val attrsResourceFile = "res/values/attrs.xml" + val stylesResourceFiles = + listOf("values", "values-v31").map { valuesPath -> + "res/$valuesPath/styles.xml" + }.toTypedArray() - context.xmlEditor[attrsPath].use { editor -> + context.xmlEditor[attrsResourceFile].use { editor -> val file = editor.file (file.getElementsByTagName("resources").item(0) as Element).appendChild( file.createElement("attr").apply { setAttribute("format", "reference") - setAttribute("name", "splashScreenColor") + setAttribute("name", SPLASH_SCREEN_COLOR_NAME) } ) } - stylesPaths.forEachIndexed { pathIndex, stylesPath -> + + stylesResourceFiles.forEachIndexed { pathIndex, stylesPath -> context.xmlEditor[stylesPath].use { editor -> val file = editor.file @@ -62,7 +67,7 @@ object BaseThemePatch : ResourcePatch() { } 1 -> when (nodeAttributeName) { - "Base.Theme.YouTube.Launcher" -> "?attr/splashScreenColor" + "Base.Theme.YouTube.Launcher" -> SPLASH_SCREEN_COLOR_ATTRIBUTE else -> "null" } @@ -78,12 +83,27 @@ object BaseThemePatch : ResourcePatch() { } } - arrayOf("drawable", "drawable-sw600dp").forEach { quantumLaunchScreenPath -> - context.xmlEditor["res/$quantumLaunchScreenPath/quantum_launchscreen_youtube.xml"].use { editor -> - val resourcesNode = editor.file.getElementsByTagName("item").item(0) as Element + val splashScreenResourceFiles = + listOf("drawable", "drawable-sw600dp").map { quantumLaunchScreenPath -> + "res/$quantumLaunchScreenPath/quantum_launchscreen_youtube.xml" + }.toTypedArray() + + splashScreenResourceFiles.forEach editSplashScreen@{ resourceFile -> + context.xmlEditor[resourceFile].use { editor -> + val document = editor.file + + val layerList = document.getElementsByTagName("layer-list").item(0) as Element + + val childNodes = layerList.childNodes + for (i in 0 until childNodes.length) { + val node = childNodes.item(i) + if (node is Element && node.hasAttribute("android:drawable")) { + node.setAttribute("android:drawable", SPLASH_SCREEN_COLOR_ATTRIBUTE) + return@editSplashScreen + } + } - if (resourcesNode.attributes.getNamedItem("android:drawable") != null) - resourcesNode.setAttribute("android:drawable", "?attr/splashScreenColor") + throw PatchException("Failed to modify launch screen") } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/MaterialYouPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/MaterialYouPatch.kt index 10dc49270..1a04051b1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/MaterialYouPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/MaterialYouPatch.kt @@ -44,9 +44,6 @@ object MaterialYouPatch : BaseResourcePatch( context.copyXmlNode("youtube/materialyou/host", "values-v31/colors.xml", "resources") - /** - * Add settings - */ context.updatePatchStatusTheme("MaterialYou") isMonetPatchIncluded = true diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/translations/TranslationsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/translations/TranslationsPatch.kt new file mode 100644 index 000000000..3e8c6e140 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/translations/TranslationsPatch.kt @@ -0,0 +1,113 @@ +package app.revanced.patches.youtube.layout.translations + +import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatchOption +import app.revanced.patches.shared.translations.APP_LANGUAGES +import app.revanced.patches.shared.translations.TranslationsUtils.invoke +import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.doRecursively +import app.revanced.util.patch.BaseResourcePatch +import org.w3c.dom.Element +import org.w3c.dom.Node + +@Suppress("DEPRECATION", "unused") +object TranslationsPatch : BaseResourcePatch( + name = "Translations for YouTube", + description = "Add translations or remove string resources.", + dependencies = setOf(SettingsPatch::class), + compatiblePackages = COMPATIBLE_PACKAGE +) { + // Array of supported translations, each represented by its language code. + private val TRANSLATIONS = arrayOf( + "ar", + "bg-rBG", + "de-rDE", + "el-rGR", + "es-rES", + "fr-rFR", + "hu-rHU", + "it-rIT", + "ja-rJP", + "ko-rKR", + "pl-rPL", + "pt-rBR", + "ru-rRU", + "tr-rTR", + "uk-rUA", + "vi-rVN", + "zh-rCN", + "zh-rTW" + ) + + private var CustomTranslation by stringPatchOption( + key = "CustomTranslation", + default = "", + title = "Custom translation", + description = """ + The path to the 'strings.xml' file. + Please note that applying the 'strings.xml' file will overwrite all existing translations. + """.trimIndent(), + required = true + ) + + private var SelectedTranslations by stringPatchOption( + key = "SelectedTranslations", + default = TRANSLATIONS.joinToString(", "), + title = "Translations to add", + description = "A list of translations to be added for the RVX settings, separated by commas.", + required = true + ) + + private var SelectedStringResources by stringPatchOption( + key = "SelectedStringResources", + default = APP_LANGUAGES.joinToString(", "), + title = "String resources to keep", + description = """ + A list of string resources to be kept, separated by commas. + String resources not in the list will be removed from the app. + + Default string resource, English, is not removed. + """.trimIndent(), + required = true + ) + + override fun execute(context: ResourceContext) { + context.invoke( + CustomTranslation, SelectedTranslations, SelectedStringResources, + TRANSLATIONS, "youtube" + ) + + // Process selected app languages + val selectedAppLanguagesArray = SelectedStringResources!!.split(",").map { it.trim() }.toTypedArray() + + // Filter the app languages to include both versions of locales (with and without 'r', en-rGB and en-GB) + // and also handle locales with "b+" prefix + val filteredAppLanguages = selectedAppLanguagesArray.flatMap { language -> + setOf(language, language.replace("-r", "-"), + language.replace("b+", "").replace("+", "-")) + }.toTypedArray() + + // Remove unselected app languages from UI + context.xmlEditor["res/xml/locales_config.xml"].use { editor -> + val nodesToRemove = mutableListOf() + + editor.file.doRecursively loop@{ + if (it !is Element || it.tagName != "locale") return@loop + + it.getAttributeNode("android:name")?.let { attribute -> + if (attribute.textContent != "en" && attribute.textContent !in filteredAppLanguages) { + nodesToRemove.add(it) + } + } + } + + // Remove the collected nodes (avoids NullPointerException) + for (node in nodesToRemove) { + node.parentNode?.removeChild(node) + } + } + + SettingsPatch.updatePatchStatus("Translations") + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/BackgroundPlaybackManagerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/BackgroundPlaybackManagerFingerprint.kt index 2ef35d10a..58062077f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/BackgroundPlaybackManagerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/BackgroundPlaybackManagerFingerprint.kt @@ -10,5 +10,5 @@ internal object BackgroundPlaybackManagerFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, parameters = listOf("L"), opcodes = listOf(Opcode.AND_INT_LIT16), - literalSupplier = { 64657230 } + literalSupplier = { 64657230 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/BackgroundPlaybackSettingsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/BackgroundPlaybackSettingsFingerprint.kt index b765c2a66..60d416489 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/BackgroundPlaybackSettingsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/BackgroundPlaybackSettingsFingerprint.kt @@ -18,5 +18,5 @@ internal object BackgroundPlaybackSettingsFingerprint : LiteralValueFingerprint( Opcode.IF_NEZ, Opcode.GOTO ), - literalSupplier = { BackgroundCategory } + literalSupplier = { BackgroundCategory }, ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/KidsBackgroundPlaybackPolicyControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/KidsBackgroundPlaybackPolicyControllerFingerprint.kt index 80da2fe0d..2cb36f739 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/KidsBackgroundPlaybackPolicyControllerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/KidsBackgroundPlaybackPolicyControllerFingerprint.kt @@ -8,5 +8,5 @@ internal object KidsBackgroundPlaybackPolicyControllerFingerprint : LiteralValue returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("I", "L", "L"), - literalSupplier = { 5 } + literalSupplier = { 5 }, ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/PiPControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/PiPControllerFingerprint.kt index 45a2f92b2..0c1b6fa3d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/PiPControllerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/fingerprints/PiPControllerFingerprint.kt @@ -13,5 +13,5 @@ internal object PiPControllerFingerprint : LiteralValueFingerprint( Opcode.IF_NEZ, Opcode.INVOKE_DIRECT ), - literalSupplier = { 151635310 } + literalSupplier = { 151635310 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/share/fingerprints/BottomSheetRecyclerViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/share/fingerprints/BottomSheetRecyclerViewFingerprint.kt index 6f32beb8c..297fe4417 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/share/fingerprints/BottomSheetRecyclerViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/share/fingerprints/BottomSheetRecyclerViewFingerprint.kt @@ -9,5 +9,5 @@ internal object BottomSheetRecyclerViewFingerprint : LiteralValueFingerprint( returnType = "Lj${'$'}/util/Optional;", accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { BottomSheetRecyclerView } + literalSupplier = { BottomSheetRecyclerView }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/translations/TranslationsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/translations/TranslationsPatch.kt deleted file mode 100644 index bb080e1f3..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/translations/TranslationsPatch.kt +++ /dev/null @@ -1,143 +0,0 @@ -package app.revanced.patches.youtube.misc.translations - -import app.revanced.patcher.data.ResourceContext -import app.revanced.patcher.patch.PatchException -import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatchOption -import app.revanced.patches.shared.translations.APP_LANGUAGES -import app.revanced.patches.shared.translations.TranslationsUtils.copyXml -import app.revanced.patches.shared.translations.TranslationsUtils.updateStringsXml -import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.doRecursively -import app.revanced.util.patch.BaseResourcePatch -import org.w3c.dom.Element -import org.w3c.dom.Node -import java.io.File - -/** - * Array of supported RVX languages, each represented by its language code. - */ -val LANGUAGES = arrayOf( - "ar", "bg-rBG", "bn", "de-rDE", "el-rGR", "es-rES", "fi-rFI", "fr-rFR", - "hu-rHU", "id-rID", "in", "it-rIT", "ja-rJP", "ko-rKR", "pl-rPL", - "pt-rBR", "ru-rRU", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW" -) - -/** - * The TranslationsPatch object adds Crowdin translations for YouTube. - * This object extends BaseResourcePatch and provides functionality to patch - * YouTube with custom or predefined language translations. - */ -@Suppress("DEPRECATION", "unused") -object TranslationsPatch : BaseResourcePatch( - name = "Translations", - description = "Add Crowdin translations for YouTube.", - dependencies = setOf(SettingsPatch::class), - compatiblePackages = COMPATIBLE_PACKAGE -) { - /** - * Patch option for specifying a custom language file. - * The file path to the strings.xml file must be provided. - * If set, this will overwrite all existing language translations. - */ - private var CustomLanguage by stringPatchOption( - key = "CustomLanguage", - default = "", - title = "Custom language file", - description = """ - The file path to the strings.xml file. - Please note that applying the strings.xml file will overwrite all existing language translations. - """.trimIndent() - ) - - /** - * Patch option for specifying selected RVX languages to be added. - */ - private var SelectedLanguages by stringPatchOption( - key = "SelectedLanguages", - default = LANGUAGES.joinToString(", "), - title = "Selected RVX languages", - description = "Selected RVX languages that will be added." - ) - - /** - * Patch option for specifying selected app languages to be kept. - * Languages not in the list will be removed from the app. - */ - private var SelectedAppLanguages by stringPatchOption( - key = "SelectedAppLanguages", - default = APP_LANGUAGES.joinToString(", "), - title = "Selected app languages", - description = "Selected app languages that will be kept, languages that are not in the list will be removed from the app." - ) - - /** - * Executes the patch to add or update translations in the YouTube app. - * This method handles both custom language files and predefined RVX languages, - * as well as managing app languages to be kept or removed. - */ - override fun execute(context: ResourceContext) { - // Check if a custom language file is set - CustomLanguage?.takeIf { it.isNotEmpty() }?.let { customLang -> - try { - val customLangFile = File(customLang) - // Validate the custom language file - if (!customLangFile.exists() || !customLangFile.isFile || customLangFile.name != "strings.xml") { - throw PatchException("Invalid custom language file: $customLang") - } - val resourceDirectory = context["res"].resolve("values") - val destinationFile = resourceDirectory.resolve("strings.xml") - - // Update the strings.xml with the custom language file - updateStringsXml(customLangFile, destinationFile) - } catch (e: Exception) { - throw PatchException("Error copying custom language file: ${e.message}") - } - } ?: run { - // Process selected RVX languages if no custom language file is set - val selectedLanguagesArray = SelectedLanguages!!.split(",").map { it.trim() }.toTypedArray() - val filteredLanguages = LANGUAGES.filter { it in selectedLanguagesArray }.toTypedArray() - context.copyXml("youtube", filteredLanguages) - } - - // Process selected app languages - val selectedAppLanguagesArray = SelectedAppLanguages!!.split(",").map { it.trim() }.toTypedArray() - - // Filter the app languages to include both versions of locales (with and without 'r', en-rGB and en-GB) - // and also handle locales with "b+" prefix - val filteredAppLanguages = selectedAppLanguagesArray.flatMap { language -> - setOf(language, language.replace("-r", "-"), - language.replace("b+", "").replace("+", "-")) - }.toTypedArray() - - val resourceDirectory = context["res"] - - // Remove unselected app languages - APP_LANGUAGES.filter { it !in filteredAppLanguages }.forEach { language -> - resourceDirectory.resolve("values-$language").takeIf { it.exists() && it.isDirectory }?.deleteRecursively() - } - - // Remove unselected app languages from UI - context.xmlEditor["res/xml/locales_config.xml"].use { editor -> - val nodesToRemove = mutableListOf() - - editor.file.doRecursively loop@{ - if (it !is Element || it.tagName != "locale") return@loop - - it.getAttributeNode("android:name")?.let { attribute -> - if (attribute.textContent != "en" && attribute.textContent !in filteredAppLanguages) { - nodesToRemove.add(it) - } - } - } - - // Remove the collected nodes (avoids NullPointerException) - for (node in nodesToRemove) { - node.parentNode?.removeChild(node) - } - } - - // Update the patch status - SettingsPatch.updatePatchStatus(this) - } -} diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/ambientmode/fingerprints/AmbientModeInFullscreenFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/ambientmode/fingerprints/AmbientModeInFullscreenFingerprint.kt index c232564e7..7b94ab1df 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/ambientmode/fingerprints/AmbientModeInFullscreenFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/ambientmode/fingerprints/AmbientModeInFullscreenFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object AmbientModeInFullscreenFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { 45389368 } + literalSupplier = { 45389368 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/LithoSubtitleButtonConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/LithoSubtitleButtonConfigFingerprint.kt index 98eaaffa6..19ec81f51 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/LithoSubtitleButtonConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/LithoSubtitleButtonConfigFingerprint.kt @@ -10,5 +10,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint */ internal object LithoSubtitleButtonConfigFingerprint : LiteralValueFingerprint( returnType = "Z", - literalSupplier = { 45421555 } + literalSupplier = { 45421555 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/MusicAppDeeplinkButtonParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/MusicAppDeeplinkButtonParentFingerprint.kt index 284da3ce8..74105b961 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/MusicAppDeeplinkButtonParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/MusicAppDeeplinkButtonParentFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object MusicAppDeeplinkButtonParentFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { MusicAppDeeplinkButtonView } + literalSupplier = { MusicAppDeeplinkButtonView }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/YouTubeControlsOverlaySubtitleButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/YouTubeControlsOverlaySubtitleButtonFingerprint.kt index 12f55734b..59c5b3cd2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/YouTubeControlsOverlaySubtitleButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/buttons/fingerprints/YouTubeControlsOverlaySubtitleButtonFingerprint.kt @@ -14,5 +14,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object YouTubeControlsOverlaySubtitleButtonFingerprint : LiteralValueFingerprint( returnType = "L", accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, - literalSupplier = { YouTubeControlsOverlaySubtitleButton } + literalSupplier = { YouTubeControlsOverlaySubtitleButton }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/comments/fingerprints/ShortsLiveStreamEmojiPickerOnClickListenerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/comments/fingerprints/ShortsLiveStreamEmojiPickerOnClickListenerFingerprint.kt index 146415068..02c2205e6 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/comments/fingerprints/ShortsLiveStreamEmojiPickerOnClickListenerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/comments/fingerprints/ShortsLiveStreamEmojiPickerOnClickListenerFingerprint.kt @@ -5,7 +5,7 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object ShortsLiveStreamEmojiPickerOnClickListenerFingerprint : LiteralValueFingerprint( returnType = "V", - parameters = listOf("L"), accessFlags = AccessFlags.PUBLIC.value, - literalSupplier = { 126326492 } + parameters = listOf("L"), + literalSupplier = { 126326492 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/comments/fingerprints/ShortsLiveStreamEmojiPickerOpacityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/comments/fingerprints/ShortsLiveStreamEmojiPickerOpacityFingerprint.kt index d2c3d3fd5..eee1f0873 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/comments/fingerprints/ShortsLiveStreamEmojiPickerOpacityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/comments/fingerprints/ShortsLiveStreamEmojiPickerOpacityFingerprint.kt @@ -9,5 +9,5 @@ internal object ShortsLiveStreamEmojiPickerOpacityFingerprint : LiteralValueFing returnType = "Landroid/widget/ImageView;", accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { EmojiPickerIcon } + literalSupplier = { EmojiPickerIcon }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/CrowdfundingBoxFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/CrowdfundingBoxFingerprint.kt index 3ef948311..feb8cab78 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/CrowdfundingBoxFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/CrowdfundingBoxFingerprint.kt @@ -13,5 +13,5 @@ internal object CrowdfundingBoxFingerprint : LiteralValueFingerprint( Opcode.MOVE_RESULT_OBJECT, Opcode.IPUT_OBJECT ), - literalSupplier = { DonationCompanion } + literalSupplier = { DonationCompanion }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/FilmStripOverlayConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/FilmStripOverlayConfigFingerprint.kt index 7385f2e3c..df335235b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/FilmStripOverlayConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/FilmStripOverlayConfigFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object FilmStripOverlayConfigFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), - literalSupplier = { 45381958 } + literalSupplier = { 45381958 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/FilmStripOverlayParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/FilmStripOverlayParentFingerprint.kt index e9fe1dee8..c38e2a2e5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/FilmStripOverlayParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/FilmStripOverlayParentFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object FilmStripOverlayParentFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { Scrubbing } + literalSupplier = { Scrubbing }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutCircleFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutCircleFingerprint.kt index ee1271910..4e645543c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutCircleFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutCircleFingerprint.kt @@ -13,5 +13,5 @@ internal object LayoutCircleFingerprint : LiteralValueFingerprint( Opcode.MOVE_RESULT_OBJECT, Opcode.CHECK_CAST, ), - literalSupplier = { EndScreenElementLayoutCircle } + literalSupplier = { EndScreenElementLayoutCircle }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutIconFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutIconFingerprint.kt index 95483245a..9322b0951 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutIconFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutIconFingerprint.kt @@ -11,5 +11,5 @@ internal object LayoutIconFingerprint : LiteralValueFingerprint( Opcode.MOVE_RESULT_OBJECT, Opcode.CHECK_CAST, ), - literalSupplier = { EndScreenElementLayoutIcon } + literalSupplier = { EndScreenElementLayoutIcon }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutVideoFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutVideoFingerprint.kt index 611f98549..34a6066cf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutVideoFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LayoutVideoFingerprint.kt @@ -13,5 +13,5 @@ internal object LayoutVideoFingerprint : LiteralValueFingerprint( Opcode.MOVE_RESULT_OBJECT, Opcode.CHECK_CAST, ), - literalSupplier = { EndScreenElementLayoutVideo } + literalSupplier = { EndScreenElementLayoutVideo }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LithoComponentOnClickListenerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LithoComponentOnClickListenerFingerprint.kt index 628169860..672aa7bdd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LithoComponentOnClickListenerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/LithoComponentOnClickListenerFingerprint.kt @@ -10,5 +10,5 @@ internal object LithoComponentOnClickListenerFingerprint : LiteralValueFingerpri returnType = "V", accessFlags = AccessFlags.PRIVATE or AccessFlags.STATIC, parameters = listOf("L"), - literalSupplier = { ComponentLongClickListener } + literalSupplier = { ComponentLongClickListener }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/NoticeOnClickListenerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/NoticeOnClickListenerFingerprint.kt index 6569ac7d7..4f0d4cfb8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/NoticeOnClickListenerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/NoticeOnClickListenerFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object NoticeOnClickListenerFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { Notice } + literalSupplier = { Notice }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/OfflineActionsOnClickListenerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/OfflineActionsOnClickListenerFingerprint.kt index 932196b00..f00f73426 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/OfflineActionsOnClickListenerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/OfflineActionsOnClickListenerFingerprint.kt @@ -9,5 +9,5 @@ internal object OfflineActionsOnClickListenerFingerprint : LiteralValueFingerpri returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Ljava/lang/String;"), - literalSupplier = { OfflineActionsVideoDeletedUndoSnackbarText } + literalSupplier = { OfflineActionsVideoDeletedUndoSnackbarText }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/SeekEduContainerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/SeekEduContainerFingerprint.kt index 7bac8bba3..2a622797e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/SeekEduContainerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/SeekEduContainerFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object SeekEduContainerFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { EasySeekEduContainer } + literalSupplier = { EasySeekEduContainer }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/SuggestedActionsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/SuggestedActionsFingerprint.kt index 626dff9b7..c5d9ba153 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/SuggestedActionsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/SuggestedActionsFingerprint.kt @@ -12,5 +12,5 @@ internal object SuggestedActionsFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { SuggestedAction } + literalSupplier = { SuggestedAction }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/TouchAreaOnClickListenerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/TouchAreaOnClickListenerFingerprint.kt index e202e8a00..fa45da0ef 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/TouchAreaOnClickListenerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/TouchAreaOnClickListenerFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object TouchAreaOnClickListenerFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { TouchArea } + literalSupplier = { TouchArea }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/VideoZoomSnapIndicatorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/VideoZoomSnapIndicatorFingerprint.kt index f03138eb5..218bf87ad 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/VideoZoomSnapIndicatorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/VideoZoomSnapIndicatorFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object VideoZoomSnapIndicatorFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { VideoZoomSnapIndicator } + literalSupplier = { VideoZoomSnapIndicator }, ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/AdvancedQualityBottomSheetFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/AdvancedQualityBottomSheetFingerprint.kt index 38a6cde06..c036793b0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/AdvancedQualityBottomSheetFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/AdvancedQualityBottomSheetFingerprint.kt @@ -7,9 +7,9 @@ import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode internal object AdvancedQualityBottomSheetFingerprint : LiteralValueFingerprint( + returnType = "L", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L", "L", "L"), - returnType = "L", opcodes = listOf( Opcode.IGET_OBJECT, Opcode.INVOKE_STATIC, @@ -36,5 +36,5 @@ internal object AdvancedQualityBottomSheetFingerprint : LiteralValueFingerprint( Opcode.IGET_OBJECT, Opcode.CONST_STRING ), - literalSupplier = { VideoQualityBottomSheet } + literalSupplier = { VideoQualityBottomSheet }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/PiPModeConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/PiPModeConfigFingerprint.kt index 3542b478c..217fc1699 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/PiPModeConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/fingerprints/PiPModeConfigFingerprint.kt @@ -6,5 +6,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint * This fingerprint is compatible with YouTube v18.39.xx+ */ internal object PiPModeConfigFingerprint : LiteralValueFingerprint( - literalSupplier = { 45427407 } + literalSupplier = { 45427407 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/toggle/fingerprints/AdditionalSettingsConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/toggle/fingerprints/AdditionalSettingsConfigFingerprint.kt index 9e9e5eeef..74b414083 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/toggle/fingerprints/AdditionalSettingsConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/toggle/fingerprints/AdditionalSettingsConfigFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object AdditionalSettingsConfigFingerprint : LiteralValueFingerprint( returnType = "Z", - literalSupplier = { 45412662 } + literalSupplier = { 45412662 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/EngagementPanelFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/EngagementPanelFingerprint.kt index fec64cd51..f4852ef59 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/EngagementPanelFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/EngagementPanelFingerprint.kt @@ -6,5 +6,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object EngagementPanelFingerprint : LiteralValueFingerprint( returnType = "L", parameters = listOf("L"), - literalSupplier = { FullScreenEngagementPanel } + literalSupplier = { FullScreenEngagementPanel }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/LandScapeModeConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/LandScapeModeConfigFingerprint.kt index fe1678afd..4e5e0caae 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/LandScapeModeConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/LandScapeModeConfigFingerprint.kt @@ -7,5 +7,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint */ internal object LandScapeModeConfigFingerprint : LiteralValueFingerprint( returnType = "Z", - literalSupplier = { 45446428 } + literalSupplier = { 45446428 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/PlayerTitleViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/PlayerTitleViewFingerprint.kt index 1f8cc8b05..7594c0dd3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/PlayerTitleViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/PlayerTitleViewFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object PlayerTitleViewFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { PlayerVideoTitleView } + literalSupplier = { PlayerVideoTitleView }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/QuickActionsElementFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/QuickActionsElementFingerprint.kt index 726b0048f..ce28b148a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/QuickActionsElementFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/QuickActionsElementFingerprint.kt @@ -6,8 +6,8 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags internal object QuickActionsElementFingerprint : LiteralValueFingerprint( + returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Landroid/view/View;"), - returnType = "V", - literalSupplier = { QuickActionsElementContainer } + literalSupplier = { QuickActionsElementContainer }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/RelatedEndScreenResultsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/RelatedEndScreenResultsFingerprint.kt index 3e0a05da9..60e230e4e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/RelatedEndScreenResultsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/fullscreen/fingerprints/RelatedEndScreenResultsFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object RelatedEndScreenResultsFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { AppRelatedEndScreenResults } + literalSupplier = { AppRelatedEndScreenResults }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/overlaybuttons/OverlayButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/overlaybuttons/OverlayButtonsPatch.kt index e9fd75328..d67346f18 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/overlaybuttons/OverlayButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/overlaybuttons/OverlayButtonsPatch.kt @@ -67,6 +67,15 @@ object OverlayButtonsPatch : BaseResourcePatch( description = "The bottom margin for the overlay buttons and timestamp.", required = true ) + + // Option to choose wider between-buttons space + private val WiderButtonsSpace by booleanPatchOption( + key = "WiderButtonsSpace", + default = false, + title = "Wider between-buttons space", + description = "Prevent adjacent button presses by increasing the horizontal spacing between buttons.", + required = true + ) // Option to change top buttons private val ChangeTopButtons by booleanPatchOption( @@ -200,6 +209,12 @@ object OverlayButtonsPatch : BaseResourcePatch( "@id/time_bar_chapter_title" to "16.0dip", "@id/timestamps_container" to "14.0dip" ) + + val widerButtonsSpace = WiderButtonsSpace == true + val layoutHeightWidth = if (widerButtonsSpace) + "56.0dip" + else + "48.0dip" if (isButton) { node.setAttribute("android:layout_marginBottom", marginBottom) @@ -207,12 +222,14 @@ object OverlayButtonsPatch : BaseResourcePatch( node.setAttribute("android:paddingRight", "0.0dip") node.setAttribute("android:paddingBottom", "22.0dip") if (heightIsNotZero && widthIsNotZero) { - node.setAttribute("android:layout_height", "48.0dip") - node.setAttribute("android:layout_width", "48.0dip") + node.setAttribute("android:layout_height", layoutHeightWidth) + node.setAttribute("android:layout_width", layoutHeightWidth) } } else if (timBarItem.containsKey(id)) { node.setAttribute("android:layout_marginBottom", marginBottom) - node.setAttribute("android:paddingBottom", timBarItem.getValue(id)) + if (!widerButtonsSpace) { + node.setAttribute("android:paddingBottom", timBarItem.getValue(id)) + } } } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/CairoSeekbarConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/CairoSeekbarConfigFingerprint.kt index 2428b6454..ecf32d373 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/CairoSeekbarConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/CairoSeekbarConfigFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object CairoSeekbarConfigFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), - literalSupplier = { 45617850 } + literalSupplier = { 45617850 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/ShortsSeekbarColorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/ShortsSeekbarColorFingerprint.kt index 7ce85b4aa..64a5793de 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/ShortsSeekbarColorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/ShortsSeekbarColorFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object ShortsSeekbarColorFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { ReelTimeBarPlayedColor } + literalSupplier = { ReelTimeBarPlayedColor }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/ThumbnailPreviewConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/ThumbnailPreviewConfigFingerprint.kt index ce6bf6c4e..990c549e4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/ThumbnailPreviewConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/fingerprints/ThumbnailPreviewConfigFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object ThumbnailPreviewConfigFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), - literalSupplier = { 45398577 } + literalSupplier = { 45398577 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/HorizontalTouchOffsetConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/HorizontalTouchOffsetConstructorFingerprint.kt index b6f74ec64..e26fd9996 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/HorizontalTouchOffsetConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/HorizontalTouchOffsetConstructorFingerprint.kt @@ -7,5 +7,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object HorizontalTouchOffsetConstructorFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { SeekEasyHorizontalTouchOffsetToStartScrubbing } + literalSupplier = { SeekEasyHorizontalTouchOffsetToStartScrubbing }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/RestoreSlideToSeekBehaviorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/RestoreSlideToSeekBehaviorFingerprint.kt index a6904c670..65c2c1aa2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/RestoreSlideToSeekBehaviorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/RestoreSlideToSeekBehaviorFingerprint.kt @@ -11,5 +11,5 @@ internal object RestoreSlideToSeekBehaviorFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), opcodes = listOf(Opcode.MOVE_RESULT), - literalSupplier = { 45411329 } + literalSupplier = { 45411329 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFingerprint.kt index ad71e2e0d..904dc51b4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFingerprint.kt @@ -11,5 +11,5 @@ internal object SpeedOverlayFingerprint : LiteralValueFingerprint( returnType = "Z", parameters = emptyList(), opcodes = listOf(Opcode.MOVE_RESULT), - literalSupplier = { 45411330 } + literalSupplier = { 45411330 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFloatValueFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFloatValueFingerprint.kt index d5557db6b..0679395f1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFloatValueFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/speedoverlay/fingerprints/SpeedOverlayFloatValueFingerprint.kt @@ -13,5 +13,5 @@ internal object SpeedOverlayFloatValueFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, opcodes = listOf(Opcode.DOUBLE_TO_FLOAT), - literalSupplier = { 45411328 } + literalSupplier = { 45411328 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsPaidPromotionFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsPaidPromotionFingerprint.kt index ab351ff88..537d09bee 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsPaidPromotionFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsPaidPromotionFingerprint.kt @@ -9,5 +9,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint * but due to the structure of ReVanced Patcher, the patch is applied to the method found first. */ internal object ShortsPaidPromotionFingerprint : LiteralValueFingerprint( - literalSupplier = { BadgeLabel } + literalSupplier = { BadgeLabel }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsPivotLegacyFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsPivotLegacyFingerprint.kt index ed5ccc71b..124c718a1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsPivotLegacyFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsPivotLegacyFingerprint.kt @@ -9,5 +9,5 @@ internal object ShortsPivotLegacyFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, parameters = listOf("Z", "Z", "L"), - literalSupplier = { ReelForcedMuteButton } + literalSupplier = { ReelForcedMuteButton }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsSubscriptionsTabletParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsSubscriptionsTabletParentFingerprint.kt index c6d156b45..df73b83bd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsSubscriptionsTabletParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsSubscriptionsTabletParentFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object ShortsSubscriptionsTabletParentFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { ReelPlayerFooter } + literalSupplier = { ReelPlayerFooter }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampConstructorFingerprint.kt index 9d54f30f2..19b0170eb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampConstructorFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object ShortsTimeStampConstructorFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { ReelVodTimeStampsContainer } + literalSupplier = { ReelVodTimeStampsContainer }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampMetaPanelFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampMetaPanelFingerprint.kt index a8b261427..2bb1a638d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampMetaPanelFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampMetaPanelFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object ShortsTimeStampMetaPanelFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { MetaPanel } + literalSupplier = { MetaPanel }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampSecondaryFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampSecondaryFingerprint.kt index 9daf46271..ba11f135b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampSecondaryFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/fingerprints/ShortsTimeStampSecondaryFingerprint.kt @@ -7,5 +7,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object ShortsTimeStampSecondaryFingerprint : LiteralValueFingerprint( returnType = "Z", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { 45638187 } + literalSupplier = { 45638187 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/FullScreenEngagementOverlayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/FullScreenEngagementOverlayFingerprint.kt index 6794f4af9..46f5aebc7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/FullScreenEngagementOverlayFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/FullScreenEngagementOverlayFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object FullScreenEngagementOverlayFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { FullScreenEngagementOverlay } + literalSupplier = { FullScreenEngagementOverlay }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/SwipeToSwitchVideoFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/SwipeToSwitchVideoFingerprint.kt index 8ad8fb9e3..023412ae9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/SwipeToSwitchVideoFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/SwipeToSwitchVideoFingerprint.kt @@ -7,5 +7,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint */ internal object SwipeToSwitchVideoFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { 45631116 } + literalSupplier = { 45631116 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/WatchPanelGesturesFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/WatchPanelGesturesFingerprint.kt index e5dddb715..a9fe71f84 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/WatchPanelGesturesFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/fingerprints/WatchPanelGesturesFingerprint.kt @@ -7,5 +7,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint */ internal object WatchPanelGesturesFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { 45372793 } + literalSupplier = { 45372793 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/fingerprint/BottomSheetBehaviorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/fingerprint/BottomSheetBehaviorFingerprint.kt index 73d6aa2cb..4a3825e50 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/fingerprint/BottomSheetBehaviorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/bottomsheet/fingerprint/BottomSheetBehaviorFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object BottomSheetBehaviorFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { DesignBottomSheet } + literalSupplier = { DesignBottomSheet }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/MenuItemInitializeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/MenuItemInitializeFingerprint.kt index 7084ad399..da10f2f4f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/MenuItemInitializeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/MenuItemInitializeFingerprint.kt @@ -6,8 +6,8 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags internal object MenuItemInitializeFingerprint : LiteralValueFingerprint( + returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Landroid/view/MenuItem;"), - returnType = "V", - literalSupplier = { CastMediaRouteButton } + literalSupplier = { CastMediaRouteButton }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/PlayerButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/PlayerButtonFingerprint.kt index 5de6ebad5..2b980fb43 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/PlayerButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/castbutton/fingerprints/PlayerButtonFingerprint.kt @@ -5,8 +5,8 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags internal object PlayerButtonFingerprint : LiteralValueFingerprint( + returnType = "V", accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, parameters = emptyList(), - returnType = "V", - literalSupplier = { 11208 } + literalSupplier = { 11208 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/controlsoverlay/fingerprints/ControlsOverlayConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/controlsoverlay/fingerprints/ControlsOverlayConfigFingerprint.kt index ffead17cc..f734b21ed 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/controlsoverlay/fingerprints/ControlsOverlayConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/controlsoverlay/fingerprints/ControlsOverlayConfigFingerprint.kt @@ -10,5 +10,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint */ internal object ControlsOverlayConfigFingerprint : LiteralValueFingerprint( returnType = "Z", - literalSupplier = { 45427491 } + literalSupplier = { 45427491 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlaybackRateBottomSheetBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlaybackRateBottomSheetBuilderFingerprint.kt index 24dc36eb6..c23c9ae6a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlaybackRateBottomSheetBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlaybackRateBottomSheetBuilderFingerprint.kt @@ -14,5 +14,5 @@ internal object PlaybackRateBottomSheetBuilderFingerprint : LiteralValueFingerpr Opcode.IGET_BOOLEAN, Opcode.IF_EQZ, ), - literalSupplier = { VarispeedUnavailableTitle } + literalSupplier = { VarispeedUnavailableTitle }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlayerButtonsResourcesFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlayerButtonsResourcesFingerprint.kt index d2dc7c79a..cda8d6352 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlayerButtonsResourcesFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/PlayerButtonsResourcesFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object PlayerButtonsResourcesFingerprint : LiteralValueFingerprint( returnType = "I", parameters = listOf("Landroid/content/res/Resources;"), - literalSupplier = { 17694721 } + literalSupplier = { 17694721 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/QualityMenuViewInflateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/QualityMenuViewInflateFingerprint.kt index b303827a5..dc538c897 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/QualityMenuViewInflateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/QualityMenuViewInflateFingerprint.kt @@ -7,9 +7,9 @@ import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode internal object QualityMenuViewInflateFingerprint : LiteralValueFingerprint( + returnType = "L", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L", "L", "L"), - returnType = "L", opcodes = listOf( Opcode.INVOKE_SUPER, Opcode.CONST, @@ -26,5 +26,5 @@ internal object QualityMenuViewInflateFingerprint : LiteralValueFingerprint( Opcode.MOVE_RESULT_OBJECT, Opcode.CHECK_CAST ), - literalSupplier = { VideoQualityBottomSheet } + literalSupplier = { VideoQualityBottomSheet }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/TotalTimeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/TotalTimeFingerprint.kt index bc5601669..564fde336 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/TotalTimeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/TotalTimeFingerprint.kt @@ -5,5 +5,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object TotalTimeFingerprint : LiteralValueFingerprint( returnType = "V", - literalSupplier = { TotalTime } + literalSupplier = { TotalTime }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/VideoEndFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/VideoEndFingerprint.kt index 2f52a0d27..e50c87bd2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/VideoEndFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/VideoEndFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object VideoEndFingerprint : LiteralValueFingerprint( strings = listOf("Attempting to seek during an ad"), - literalSupplier = { 45368273 } + literalSupplier = { 45368273 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/fingerprints/FullscreenButtonPositionFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/fingerprints/FullscreenButtonPositionFingerprint.kt index e325d7b02..e1d72269b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/fingerprints/FullscreenButtonPositionFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/fingerprints/FullscreenButtonPositionFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object FullscreenButtonPositionFingerprint : LiteralValueFingerprint( returnType = "Z", - literalSupplier = { 45627640 } + literalSupplier = { 45627640 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/fingerprints/FullscreenButtonViewStubFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/fingerprints/FullscreenButtonViewStubFingerprint.kt index f99b18df6..cc5efa3f8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/fingerprints/FullscreenButtonViewStubFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/bottomui/fingerprints/FullscreenButtonViewStubFingerprint.kt @@ -4,5 +4,5 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint internal object FullscreenButtonViewStubFingerprint : LiteralValueFingerprint( returnType = "Z", - literalSupplier = { 45617294 } + literalSupplier = { 45617294 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/fingerprints/CarioFragmentConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/fingerprints/CarioFragmentConfigFingerprint.kt index b777e0e75..d9ac778ee 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/fingerprints/CarioFragmentConfigFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/cairo/fingerprints/CarioFragmentConfigFingerprint.kt @@ -13,5 +13,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object CarioFragmentConfigFingerprint : LiteralValueFingerprint( returnType = "Z", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { 45532100 } + literalSupplier = { 45532100 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/shortsplayback/fingerprints/ShortsPlaybackFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/shortsplayback/fingerprints/ShortsPlaybackFingerprint.kt index 8b72a0269..c3801a588 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/shortsplayback/fingerprints/ShortsPlaybackFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/shortsplayback/fingerprints/ShortsPlaybackFingerprint.kt @@ -7,5 +7,5 @@ import com.android.tools.smali.dexlib2.AccessFlags internal object ShortsPlaybackFingerprint : LiteralValueFingerprint( returnType = "Z", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { 45387052 } + literalSupplier = { 45387052 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/flyoutmenu/fingerprints/VideoQualityBottomSheetClassFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/flyoutmenu/fingerprints/VideoQualityBottomSheetClassFingerprint.kt index 411644568..ed11d6e08 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/flyoutmenu/fingerprints/VideoQualityBottomSheetClassFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/flyoutmenu/fingerprints/VideoQualityBottomSheetClassFingerprint.kt @@ -6,8 +6,8 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags internal object VideoQualityBottomSheetClassFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Z"), - literalSupplier = { VideoQualityUnavailableAnnouncement } + literalSupplier = { VideoQualityUnavailableAnnouncement }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/IntegrationsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/IntegrationsPatch.kt index a807e6edb..7f5d3eafa 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/IntegrationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/IntegrationsPatch.kt @@ -1,3 +1,5 @@ +@file:Suppress("DEPRECATION") + package app.revanced.patches.youtube.utils.integrations import app.revanced.patcher.patch.annotation.Patch diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeButtonsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeButtonsFingerprint.kt index 98d93cf68..74579c405 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeButtonsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/navigation/fingerprints/InitializeButtonsFingerprint.kt @@ -6,7 +6,7 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags internal object InitializeButtonsFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "V", - literalSupplier = { ImageOnlyTab } + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + literalSupplier = { ImageOnlyTab }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/BottomControlsInflateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/BottomControlsInflateFingerprint.kt index 5ef4e9224..27a579bc2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/BottomControlsInflateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/BottomControlsInflateFingerprint.kt @@ -12,5 +12,5 @@ internal object BottomControlsInflateFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { BottomUiContainerStub } + literalSupplier = { BottomUiContainerStub }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/ControlsLayoutInflateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/ControlsLayoutInflateFingerprint.kt index c837ad9aa..152e41d21 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/ControlsLayoutInflateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playercontrols/fingerprints/ControlsLayoutInflateFingerprint.kt @@ -17,5 +17,5 @@ internal object ControlsLayoutInflateFingerprint : LiteralValueFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT ), - literalSupplier = { ControlsLayoutStub } + literalSupplier = { ControlsLayoutStub }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ReelWatchPagerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ReelWatchPagerFingerprint.kt index 7bb7d066b..fadfba6cd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ReelWatchPagerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/ReelWatchPagerFingerprint.kt @@ -6,7 +6,7 @@ import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags internal object ReelWatchPagerFingerprint : LiteralValueFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, returnType = "Landroid/view/View;", - literalSupplier = { ReelWatchPlayer } + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + literalSupplier = { ReelWatchPlayer }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/recyclerview/fingerprints/BottomSheetRecyclerViewBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/recyclerview/fingerprints/BottomSheetRecyclerViewBuilderFingerprint.kt index 00eb8c26d..035f7a14b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/recyclerview/fingerprints/BottomSheetRecyclerViewBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/recyclerview/fingerprints/BottomSheetRecyclerViewBuilderFingerprint.kt @@ -3,5 +3,5 @@ package app.revanced.patches.youtube.utils.recyclerview.fingerprints import app.revanced.util.fingerprint.LiteralValueFingerprint internal object BottomSheetRecyclerViewBuilderFingerprint : LiteralValueFingerprint( - literalSupplier = { 45382015 } + literalSupplier = { 45382015 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/fingerprints/RollingNumberSetterFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/fingerprints/RollingNumberSetterFingerprint.kt index 0c38f5612..aed2602cf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/fingerprints/RollingNumberSetterFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/fingerprints/RollingNumberSetterFingerprint.kt @@ -8,5 +8,5 @@ import com.android.tools.smali.dexlib2.Opcode */ internal object RollingNumberSetterFingerprint : LiteralValueFingerprint( opcodes = listOf(Opcode.CHECK_CAST), - literalSupplier = { 45427773 } + literalSupplier = { 45427773 }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/ResourceUtils.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/ResourceUtils.kt index 451cd2b86..01a6c30f3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/ResourceUtils.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/ResourceUtils.kt @@ -49,34 +49,6 @@ object ResourceUtils { ) } - fun ResourceContext.addEntryValues( - attributeName: String, - attributeValue: String, - path: String = "res/values/arrays.xml", - prepend: Boolean = true, - ) { - xmlEditor[path].use { - with(it.file) { - val resourcesNode = getElementsByTagName("resources").item(0) as Element - - val newElement: Element = createElement("item") - for (i in 0 until resourcesNode.childNodes.length) { - val node = resourcesNode.childNodes.item(i) as? Element ?: continue - - if (node.getAttribute("name") == attributeName) { - newElement.appendChild(createTextNode(attributeValue)) - - if (prepend) { - node.appendChild(newElement) - } else { - node.insertBefore(newElement, node.firstChild) - } - } - } - } - } - } - fun ResourceContext.addPreference(settingArray: Array) { val prefs = this[TARGET_PREFERENCE_PATH] diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/fingerprints/ThemeSetterSystemFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/fingerprints/ThemeSetterSystemFingerprint.kt index 0debf02b7..3b5636d25 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/fingerprints/ThemeSetterSystemFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/fingerprints/ThemeSetterSystemFingerprint.kt @@ -7,5 +7,5 @@ import com.android.tools.smali.dexlib2.Opcode internal object ThemeSetterSystemFingerprint : LiteralValueFingerprint( returnType = "L", opcodes = listOf(Opcode.RETURN_OBJECT), - literalSupplier = { Appearance } + literalSupplier = { Appearance }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/SponsorBlockPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/SponsorBlockPatch.kt index 9ad219d0c..30f68cdf5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/SponsorBlockPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/SponsorBlockPatch.kt @@ -7,7 +7,6 @@ import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatc import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.* -import app.revanced.util.inputStreamFromBundledResource import app.revanced.util.patch.BaseResourcePatch import org.w3c.dom.Element diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/fingerprints/ToolBarButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/fingerprints/ToolBarButtonFingerprint.kt index 5f2c43afc..a053668c9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/fingerprints/ToolBarButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/toolbar/fingerprints/ToolBarButtonFingerprint.kt @@ -7,9 +7,9 @@ import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode internal object ToolBarButtonFingerprint : LiteralValueFingerprint( + returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Landroid/view/MenuItem;"), - returnType = "V", opcodes = listOf( Opcode.INVOKE_INTERFACE, Opcode.MOVE_RESULT, @@ -17,5 +17,5 @@ internal object ToolBarButtonFingerprint : LiteralValueFingerprint( Opcode.IGET_OBJECT, Opcode.INVOKE_VIRTUAL ), - literalSupplier = { MenuItemView } + literalSupplier = { MenuItemView }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoQualityListFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoQualityListFingerprint.kt index 17de772c9..21fcd8e6d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoQualityListFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoQualityListFingerprint.kt @@ -11,5 +11,5 @@ internal object VideoQualityListFingerprint : LiteralValueFingerprint( Opcode.INVOKE_INTERFACE, Opcode.RETURN_VOID ), - literalSupplier = { QualityAuto } + literalSupplier = { QualityAuto }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoTitleFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoTitleFingerprint.kt index 24debd044..ff8ec7ef4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoTitleFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoTitleFingerprint.kt @@ -9,5 +9,5 @@ internal object VideoTitleFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = emptyList(), - literalSupplier = { NotificationBigPictureIconWidth } + literalSupplier = { NotificationBigPictureIconWidth }, ) diff --git a/src/main/kotlin/app/revanced/util/ResourceUtils.kt b/src/main/kotlin/app/revanced/util/ResourceUtils.kt index 52e7a5e86..6dbe5bf04 100644 --- a/src/main/kotlin/app/revanced/util/ResourceUtils.kt +++ b/src/main/kotlin/app/revanced/util/ResourceUtils.kt @@ -70,6 +70,47 @@ fun List.getResourceGroup(fileNames: Array) = map { directory -> ) } +fun ResourceContext.appendAppVersion(appVersion: String) { + addEntryValues( + "revanced_spoof_app_version_target_entries", + "@string/revanced_spoof_app_version_target_entry_" + appVersion.replace(".", "_"), + prepend = false + ) + addEntryValues( + "revanced_spoof_app_version_target_entry_values", + appVersion, + prepend = false + ) +} + +fun ResourceContext.addEntryValues( + attributeName: String, + attributeValue: String, + path: String = "res/values/arrays.xml", + prepend: Boolean = true, +) { + xmlEditor[path].use { + with(it.file) { + val resourcesNode = getElementsByTagName("resources").item(0) as Element + + val newElement: Element = createElement("item") + for (i in 0 until resourcesNode.childNodes.length) { + val node = resourcesNode.childNodes.item(i) as? Element ?: continue + + if (node.getAttribute("name") == attributeName) { + newElement.appendChild(createTextNode(attributeValue)) + + if (prepend) { + node.appendChild(newElement) + } else { + node.insertBefore(newElement, node.firstChild) + } + } + } + } + } +} + fun ResourceContext.copyFile( resourceGroup: List, path: String, diff --git a/src/main/kotlin/app/revanced/util/fingerprint/LiteralValueFingerprint.kt b/src/main/kotlin/app/revanced/util/fingerprint/LiteralValueFingerprint.kt index ea7cf3ebb..729f7217f 100644 --- a/src/main/kotlin/app/revanced/util/fingerprint/LiteralValueFingerprint.kt +++ b/src/main/kotlin/app/revanced/util/fingerprint/LiteralValueFingerprint.kt @@ -21,7 +21,7 @@ abstract class LiteralValueFingerprint( opcodes: Iterable? = null, strings: Iterable? = null, // Has to be a supplier because the fingerprint is created before patches can set literals. - literalSupplier: () -> Long + literalSupplier: () -> Long, ) : MethodFingerprint( returnType = returnType, accessFlags = accessFlags, diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_dark.png deleted file mode 100644 index 5ba804ae05b9e52b6623327b0195af6a83b15230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9Drb3m9;?W~mvP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxqF^2jv*C{Z*SerJ!Bxl`r!7e_rB@}<}N5< zc5C33Xyi?3F>t)ayUWpyL;A>E1%t-wyGOKoV;nx^ulnp6&dJCBFyYaI85}@^VPI2% z`$Ww}P3GKsj(`8v6!g>uLWdd-Ij<`2F|amJ)*)(dnm_Sgq52+Tia} zuvN0PIL>tGw8--tufAJf%wNYVwa!xZ>Dv>IHaGe11XmQFn!nHPTn@Xyh5qp9-KbmqoVZ4hxHiYGvlSnk)ZA~^i0i}R0Z1Q6jX$oXp*;KE QjZ%=Pr>mdKI;Vst02J@<+W-In diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_premium_wordmark_header_light.png deleted file mode 100644 index 5ba804ae05b9e52b6623327b0195af6a83b15230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9Drb3m9;?W~mvP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxqF^2jv*C{Z*SerJ!Bxl`r!7e_rB@}<}N5< zc5C33Xyi?3F>t)ayUWpyL;A>E1%t-wyGOKoV;nx^ulnp6&dJCBFyYaI85}@^VPI2% z`$Ww}P3GKsj(`8v6!g>uLWdd-Ij<`2F|amJ)*)(dnm_Sgq52+Tia} zuvN0PIL>tGw8--tufAJf%wNYVwa!xZ>Dv>IHaGe11XmQFn!nHPTn@Xyh5qp9-KbmqoVZ4hxHiYGvlSnk)ZA~^i0i}R0Z1Q6jX$oXp*;KE QjZ%=Pr>mdKI;Vst02J@<+W-In diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_dark.png deleted file mode 100644 index 5ba804ae05b9e52b6623327b0195af6a83b15230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9Drb3m9;?W~mvP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxqF^2jv*C{Z*SerJ!Bxl`r!7e_rB@}<}N5< zc5C33Xyi?3F>t)ayUWpyL;A>E1%t-wyGOKoV;nx^ulnp6&dJCBFyYaI85}@^VPI2% z`$Ww}P3GKsj(`8v6!g>uLWdd-Ij<`2F|amJ)*)(dnm_Sgq52+Tia} zuvN0PIL>tGw8--tufAJf%wNYVwa!xZ>Dv>IHaGe11XmQFn!nHPTn@Xyh5qp9-KbmqoVZ4hxHiYGvlSnk)ZA~^i0i}R0Z1Q6jX$oXp*;KE QjZ%=Pr>mdKI;Vst02J@<+W-In diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-hdpi/yt_wordmark_header_light.png deleted file mode 100644 index 5ba804ae05b9e52b6623327b0195af6a83b15230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9Drb3m9;?W~mvP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxqF^2jv*C{Z*SerJ!Bxl`r!7e_rB@}<}N5< zc5C33Xyi?3F>t)ayUWpyL;A>E1%t-wyGOKoV;nx^ulnp6&dJCBFyYaI85}@^VPI2% z`$Ww}P3GKsj(`8v6!g>uLWdd-Ij<`2F|amJ)*)(dnm_Sgq52+Tia} zuvN0PIL>tGw8--tufAJf%wNYVwa!xZ>Dv>IHaGe11XmQFn!nHPTn@Xyh5qp9-KbmqoVZ4hxHiYGvlSnk)ZA~^i0i}R0Z1Q6jX$oXp*;KE QjZ%=Pr>mdKI;Vst02J@<+W-In diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-mdpi/yt_premium_wordmark_header_dark.png deleted file mode 100644 index 3542f98f51990460642b2844e4dfa82aa7dfeed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 447 zcmV;w0YLtVP)k0n6~7;azXA_8S@kOmNS`0XUsxMEHk0n6~7;azXA_8S@kOmNS`0XUsxMEHk0n6~7;azXA_8S@kOmNS`0XUsxMEHk0n6~7;azXA_8S@kOmNS`0XUsxMEHw{PIJDkBa%i&&98v6is^If7_|=&*O?oGB@ttnCZRz zp3rLV-~U`oDkd5A=2Vw{^MB8|;s5E=La}$udD9PgoD#chFEnA^FP4y?ZHa3Fotb); z1nk@+rOY)WVsRUbjR%(%2&a2v{nvlQq&eq8d^Mp2-&o7_Kv3F|Rrn&pn81M3W^Dhd0&uQUv z=9ycoyhDyb}!7-lKYv;Chh zXU0FS5zf9+z_w)WrR@=K^fukTm&WJze`6a-{ZM(^J6ygUlFG_FOUyfHh+4Z<7vqU z^QZpUykLuG)O|L|7-p3<>t}gIE^EG{WmB%U=cbWZ)*jDwZ}PUDIkaq+{uI4GjmDeJ z{mjlK&RlhW;a{T=;cd>Av9q%J?CSDfzOu|c9l~FKt>x`Qq0sZwXZjkR4q-$}B0%Pc a%zB2RfF0twpX+~vWISE{T-G@yGywobPeV2U diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_premium_wordmark_header_light.png deleted file mode 100644 index c12303a7d3d152646a2da7ac566e1175de9d55bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9E$svykh8Km+7D9BhG zw{PIJDkBa%i&&98v6is^If7_|=&*O?oGB@ttnCZRz zp3rLV-~U`oDkd5A=2Vw{^MB8|;s5E=La}$udD9PgoD#chFEnA^FP4y?ZHa3Fotb); z1nk@+rOY)WVsRUbjR%(%2&a2v{nvlQq&eq8d^Mp2-&o7_Kv3F|Rrn&pn81M3W^Dhd0&uQUv z=9ycoyhDyb}!7-lKYv;Chh zXU0FS5zf9+z_w)WrR@=K^fukTm&WJze`6a-{ZM(^J6ygUlFG_FOUyfHh+4Z<7vqU z^QZpUykLuG)O|L|7-p3<>t}gIE^EG{WmB%U=cbWZ)*jDwZ}PUDIkaq+{uI4GjmDeJ z{mjlK&RlhW;a{T=;cd>Av9q%J?CSDfzOu|c9l~FKt>x`Qq0sZwXZjkR4q-$}B0%Pc a%zB2RfF0twpX+~vWISE{T-G@yGywobPeV2U diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_dark.png deleted file mode 100644 index c12303a7d3d152646a2da7ac566e1175de9d55bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9E$svykh8Km+7D9BhG zw{PIJDkBa%i&&98v6is^If7_|=&*O?oGB@ttnCZRz zp3rLV-~U`oDkd5A=2Vw{^MB8|;s5E=La}$udD9PgoD#chFEnA^FP4y?ZHa3Fotb); z1nk@+rOY)WVsRUbjR%(%2&a2v{nvlQq&eq8d^Mp2-&o7_Kv3F|Rrn&pn81M3W^Dhd0&uQUv z=9ycoyhDyb}!7-lKYv;Chh zXU0FS5zf9+z_w)WrR@=K^fukTm&WJze`6a-{ZM(^J6ygUlFG_FOUyfHh+4Z<7vqU z^QZpUykLuG)O|L|7-p3<>t}gIE^EG{WmB%U=cbWZ)*jDwZ}PUDIkaq+{uI4GjmDeJ z{mjlK&RlhW;a{T=;cd>Av9q%J?CSDfzOu|c9l~FKt>x`Qq0sZwXZjkR4q-$}B0%Pc a%zB2RfF0twpX+~vWISE{T-G@yGywobPeV2U diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xhdpi/yt_wordmark_header_light.png deleted file mode 100644 index c12303a7d3d152646a2da7ac566e1175de9d55bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9E$svykh8Km+7D9BhG zw{PIJDkBa%i&&98v6is^If7_|=&*O?oGB@ttnCZRz zp3rLV-~U`oDkd5A=2Vw{^MB8|;s5E=La}$udD9PgoD#chFEnA^FP4y?ZHa3Fotb); z1nk@+rOY)WVsRUbjR%(%2&a2v{nvlQq&eq8d^Mp2-&o7_Kv3F|Rrn&pn81M3W^Dhd0&uQUv z=9ycoyhDyb}!7-lKYv;Chh zXU0FS5zf9+z_w)WrR@=K^fukTm&WJze`6a-{ZM(^J6ygUlFG_FOUyfHh+4Z<7vqU z^QZpUykLuG)O|L|7-p3<>t}gIE^EG{WmB%U=cbWZ)*jDwZ}PUDIkaq+{uI4GjmDeJ z{mjlK&RlhW;a{T=;cd>Av9q%J?CSDfzOu|c9l~FKt>x`Qq0sZwXZjkR4q-$}B0%Pc a%zB2RfF0twpX+~vWISE{T-G@yGywobPeV2U diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxhdpi/yt_premium_wordmark_header_dark.png deleted file mode 100644 index aece8cfd9408c50f24550499e119c2252c2d9294..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1066 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 R@KElTB4R*@KhG~V>pz(CX$b%T diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_premium_wordmark_header_light.png deleted file mode 100644 index 0ba37b7c0cefea1be77e7beb17f5851f0315d9aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1407 zcma)6i!&Q`9RDRvh?IJaRXv)}_PC(5)rS~Ci6lfZ(UMBh8M>xxuVKwPgwe)h^_ZGh z&@0nm@hYksNk&C?r7g8w#3Mb#nl@zVf3WY}_xru?`@Z-6+&4EgB+v+Hg#-W? z5efd`IxYOd2tAz)pSrBCQwCQFQP%-*4*J572Cp)%&I!359_R;nqc+Pr1D5DZ_64B5 zaJME74glPo=F_Ed#2dW_?l7cAyH6S#_V zx9n_jTWg=)si;RBQ`XHS&+X1l@gRzeo~4~e3+5zman96to!&4Bibv9UltCz2*M z(#2`kR5Wm!1XH(&lKvp40PU5FIZLhb+kaLiQAGVg_f-j(GfnHnQkj?yvzdN!2@2!QVWXV zLEwSCbnGTm>b*))PRoyFf%#}{ZMFZ@48EGP&(wY=Hxq{5@(`+-gCpdz6EGZj9D#m6YMIRRQp+09Yx5J|t-4iE69ZNvL)S3RCvB6U##$)Wz z9gS`@td5bd7KsbX$PyD4_r_++l3MiA=@ZngE6s;%L%J_ok%X1|N}#aVyfK7wVI*Qf z-`YS}>aw8!)l8%vaPFbhhuO`d4JXZ90Bv_$=>j}C-R)in0epYHZt{ZKMn~pEXUfJ#-Y>MpJwgi({M~svPhjz3d-O zem=X0sz&hm4q$pQm?G+!YcvVY2B9Pl&an&XmcSioyi*G;61W~=5tZgH3eCVkI997W z8+QaU!(X9cqG%lLaXsB?gv3vbe_cNm;Ew5Aw!A%57_nGegMX5N(vX1O9?nhIyQjEQ z6+;~ha$G1NF;XV(dcrS=V(h?y*I{{ouV{=EmIOd5-&JqsFri+4{(_J28HJQbas))% zT?Rfph~qC+>t05*VH1|kBH*gdXpn1pB8MYXJCb0Jn^DS_V?QTF!z+1My`xZu0-Z>z zEB1yU z8jO9fD5S&cD&Wj~7Lm@oSRbW4JqM(;LxVxb&LYkbL8fx0z?F*1zX!oU6TLzmvmXmkNuE<^P6({ R@KElTB4R*@KhG~V>pz(CX$b%T diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_dark.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_dark.png deleted file mode 100644 index 0ba37b7c0cefea1be77e7beb17f5851f0315d9aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1407 zcma)6i!&Q`9RDRvh?IJaRXv)}_PC(5)rS~Ci6lfZ(UMBh8M>xxuVKwPgwe)h^_ZGh z&@0nm@hYksNk&C?r7g8w#3Mb#nl@zVf3WY}_xru?`@Z-6+&4EgB+v+Hg#-W? z5efd`IxYOd2tAz)pSrBCQwCQFQP%-*4*J572Cp)%&I!359_R;nqc+Pr1D5DZ_64B5 zaJME74glPo=F_Ed#2dW_?l7cAyH6S#_V zx9n_jTWg=)si;RBQ`XHS&+X1l@gRzeo~4~e3+5zman96to!&4Bibv9UltCz2*M z(#2`kR5Wm!1XH(&lKvp40PU5FIZLhb+kaLiQAGVg_f-j(GfnHnQkj?yvzdN!2@2!QVWXV zLEwSCbnGTm>b*))PRoyFf%#}{ZMFZ@48EGP&(wY=Hxq{5@(`+-gCpdz6EGZj9D#m6YMIRRQp+09Yx5J|t-4iE69ZNvL)S3RCvB6U##$)Wz z9gS`@td5bd7KsbX$PyD4_r_++l3MiA=@ZngE6s;%L%J_ok%X1|N}#aVyfK7wVI*Qf z-`YS}>aw8!)l8%vaPFbhhuO`d4JXZ90Bv_$=>j}C-R)in0epYHZt{ZKMn~pEXUfJ#-Y>MpJwgi({M~svPhjz3d-O zem=X0sz&hm4q$pQm?G+!YcvVY2B9Pl&an&XmcSioyi*G;61W~=5tZgH3eCVkI997W z8+QaU!(X9cqG%lLaXsB?gv3vbe_cNm;Ew5Aw!A%57_nGegMX5N(vX1O9?nhIyQjEQ z6+;~ha$G1NF;XV(dcrS=V(h?y*I{{ouV{=EmIOd5-&JqsFri+4{(_J28HJQbas))% zT?Rfph~qC+>t05*VH1|kBH*gdXpn1pB8MYXJCb0Jn^DS_V?QTF!z+1My`xZu0-Z>z zEB1yU z8jO9fD5S&cD&Wj~7Lm@oSRbW4JqM(;LxVxb&LYkbL8fx0z?F*1zX!oU6TLzmvmXmkNuE<^P6({ R@KElTB4R*@KhG~V>pz(CX$b%T diff --git a/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_light.png b/src/main/resources/youtube/branding/youtube_minimal_header/header/drawable-xxxhdpi/yt_wordmark_header_light.png deleted file mode 100644 index 0ba37b7c0cefea1be77e7beb17f5851f0315d9aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1407 zcma)6i!&Q`9RDRvh?IJaRXv)}_PC(5)rS~Ci6lfZ(UMBh8M>xxuVKwPgwe)h^_ZGh z&@0nm@hYksNk&C?r7g8w#3Mb#nl@zVf3WY}_xru?`@Z-6+&4EgB+v+Hg#-W? z5efd`IxYOd2tAz)pSrBCQwCQFQP%-*4*J572Cp)%&I!359_R;nqc+Pr1D5DZ_64B5 zaJME74glPo=F_Ed#2dW_?l7cAyH6S#_V zx9n_jTWg=)si;RBQ`XHS&+X1l@gRzeo~4~e3+5zman96to!&4Bibv9UltCz2*M z(#2`kR5Wm!1XH(&lKvp40PU5FIZLhb+kaLiQAGVg_f-j(GfnHnQkj?yvzdN!2@2!QVWXV zLEwSCbnGTm>b*))PRoyFf%#}{ZMFZ@48EGP&(wY=Hxq{5@(`+-gCpdz6EGZj9D#m6YMIRRQp+09Yx5J|t-4iE69ZNvL)S3RCvB6U##$)Wz z9gS`@td5bd7KsbX$PyD4_r_++l3MiA=@ZngE6s;%L%J_ok%X1|N}#aVyfK7wVI*Qf z-`YS}>aw8!)l8%vaPFbhhuO`d4JXZ90Bv_$=>j}C-R)in0epYHZt{ZKMn~pEXUfJ#-Y>MpJwgi({M~svPhjz3d-O zem=X0sz&hm4q$pQm?G+!YcvVY2B9Pl&an&XmcSioyi*G;61W~=5tZgH3eCVkI997W z8+QaU!(X9cqG%lLaXsB?gv3vbe_cNm;Ew5Aw!A%57_nGegMX5N(vX1O9?nhIyQjEQ z6+;~ha$G1NF;XV(dcrS=V(h?y*I{{ouV{=EmIOd5-&JqsFri+4{(_J28HJQbas))% zT?Rfph~qC+>t05*VH1|kBH*gdXpn1pB8MYXJCb0Jn^DS_V?QTF!z+1My`xZu0-Z>z zEB1yU z8jO9fD5S&cD&Wj~7Lm@oSRbW4JqM(;LxVxb&LYkbL8fx0z?F*1zX!oU6TLzmvmXmkNuE<^P6({ R@KElTB4R*@KhG~V>pz(CX$b%T diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/ic_fullscreen_vertical_button.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/ic_fullscreen_vertical_button.png deleted file mode 100644 index 933b1b2833fff057483862a56f87b37eb2107c4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmV<403rX0P)8)7 zv@@fxW@%2L8t_FVe39^3P9Z;`ke4bH7_ThMDCAe?pwO0utiE4b!R3lV(uI2NqKoid?Tq-6?})#LMEDZna}sk%>Iw1Y5CA*! Y0G?O`qHiX0$p8QV07*qoM6N<$g6zCrfdBvi diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index aa1fe11b911264ccf3a0c1b6ea86bcb4f44b2af8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1925 zcmV;02YUF4P)h_jT9{JG@xJuk??GNyOIwSu#3pZ==RKb1^L&5j`_iy? z>_>aYc(DHkC@Cq4o|u?O(r7etxEmf7APWEtxJJUEw-#)~KnTWgK{T$btD9L}UH#<2 zg9q&hWH^eA2q-8hh>??%(;pKPGrhjPUZ0zrt0YO1rh2BX{KnFdH^(a6WS6$kp)h@Q93zjOz&Kp+Z@1Z)fkp9Ww@Fvsk#iLVjX!}{T8Z!ctM zJ73f+T_OoCE4%U764bDPsL7(DqMT9=9x85aX_@Na;Gho=Tj>oza&*0=rDc3jNXX}* z!J(VS*zjD{ZEbygKA%nCcvJ8S$-)~qZag;jJxZ}*0lf~BdR3#=OwsH0{UVWw0YG93 z2>BISz}?-Q7qcxsF(hPVbc;&W%j5Gn1c56Sf4ah_qN1b&)Etr;tOhbP(+`J_Uel=6 zQy6qQffEGNK_tS$27#!ZJ32aYAliBnSbBQ;x>aG)j5+EPc7E8Yo^labQ}^N6UT8HD1=c8fhue_H#auiuSE+sG&Inw zs;cnJbJ>X!$?_zC>YF@yB0DZ2cELW`z7k_7s}@J zKxnZ?kLxO3rcaxdd+E~V<$-~RXU&?$LMlZ@MlMP_dc3%`wUrbK?e)Pyp&t|!1V#>4qwa1U1`gb7Ys=@TnpMAFEiT?09uZOW{P}YxMA<8a zke}Ao|9y+cGd5wugx7$S z4UJ`EZO3|YIb5uwvLb8YJpWacljr5-9}bwma1-87VE1ckG6UxNd;!xl;24O^AwXs2 z6$%$uH)n8GvR%_&)zQ&$8(=tk(2B`ocExP@dJpVI4Vl^Jv=JEO1j`+BQ zl$5)^%m9rOc!GbSJVW^Th+S%HYa7r!+qNZ0lD^+{5dpzD zg|~Q)i{bp{fp`FvFft%L0D-N|11V}Bdwb1seIpQMvX1tS%8q}K$w&@F8_8fYb4=oAboaSL_b0hz=IkZ;6gxCrjRUT-yl>DV2YCd(NI~(PZYF8g_~* zH*#t@IQ0T+oO%pY`wF@I%!2v;5h!5-RNtlF3XaX2H~%XzCwBk-y^N3je8Vj|^^mYf zdV;&X3VS|;z3OSn)#7XW%!PezedDdMwzggn`n|zHfgcqW6`=}GM_Ie@N^y<8U+)6l z0G6CA+XP{M#A4WILt=DvbehuB-9un>I_UB;F}k@JB}Oj0MXS{bOeID|Z9}!Q)6@^s z(vC$$MQu1ksS_O?yJXky-Fc9YNXSw6>Q$jLP*Z0yF&ahGtD&`}17+n4xp~=zgG@ZbS_lMQN^uT`djs$%gg=U5Da1d1+u^P(Z+P8g5~Dd~sOhcl7)^nidr^F*=_mtb z?BusgFPu4-c_u$6rw%>;CYTW^L;)Hvf=nirO5eYE^XAjW#>Sq(`xtOuZ_USt5h-K{ zW$J4O%0qDI-}L%yvD#bfLzeCv&c_Agc}7K{(b&YOIQ3|PP;>nY+@bhkih&pE00000 LNkvXXu0mjfUc#HA diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-hdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index b5b3798e6b3d6ebe9ad38a2c343baad60027d0b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2503 zcmV;&2{`tNP)-sfmxFL$;i`y$BCzAmAV&lgK`T{J7fQW3#DjvXv(?2ab=9`w!Pa^ptvX`R zB1a6D994_QjV1oD!+WPktY!*E(!XLd95CiC+C@Bjb2-}n3b z{eLes?EmaTGvzTD490UBjb`{?aSj3@n70M8ckf>Mo;`cegcE)+BM=2+3N;bHaR3-_ z%>ak~*G8OXx^V54t0I4Yf6Y6tE~{YzI$V3>Qz97C1<`q1TiYKVJb3U+b8~YK0+~p} zXlSrdC}f>EllP4vG&D}D)nW>T{H(X9!kmc6HCsrv0k{2AGg@GWY9C3{$Aic972#$;W`}SV>8VUash_ z!Esh}Z|@7j+1Z($xOPr@g&{aBy^BH#grc2ong_j3(U>AawJqL3)5<7nhWl;Ve8F z{Y`1#;0qB3(gY z@&35D_jk3ow`<+q-SC~6nez^3Wz`Lb8UbYLe)O~{8#anL9J8frwOVUwX~~i+!00ct z4~Ii55C~kaUBB^NdTRRS{QR?Z0Li>qR8n14URkp-b^S4Pj^>1K{i=jSiH()bOmyD$ z{Q0eEULKMA_U%KNK3F(M0EtAGE>7|Ca@P_%{lGv!Imz9fYh`U6NRlL`(~+dPIge?Q zeMYFoix+!yxm-F#r3Eea@TayrKGQq{#ARh$-;a$w9uN?K-@SWRyJ=He^zodNwKAF1 zU~g}yUmm}5#^uZ6A59HD0_a~q+<)rp@9);HQeg}R6H}`PFuh){Lkq#)gh8f|5Gl5a zdxtIc{n=?i56J8&TDFMI#? z$x#$VB&%_a;RUL`LGsYo&)-|s->+xkkVh=mkRck41|Zdhm6bJHu6S8I(S!~T4hAZ_ z+MfK<1Zf_?;c)0p-#1;H9~rTlGI@D<T&|g*udk1Q;>nhFNb{z8d!(QUfT4{W zY0IN0|KK}2g+qqwxn{ifS-}CmEiEldG{v@U+cxe$kbO$2?892yTI&TtGs9j5#@HE* z3gkU?+EjCM3v74h&dluWLs_OFLM5SCBre5S?DzV5do_-Zj;!Lsi(e!qC2U7tiHV6J zuV26JS0pN}VY66n5Y2(PbHe-|J$m#6&GYfcnQ?nR{p=C~g5O$Zg#`MT&ObiTZU8zo z6bRi6i<*7))#(y8m%9*UAD_=>ofn=vyng+<9h8B?!^3?=;_|C37TZ-2954kU^fS6Q zBV%Xmr=RZ^PYB2;nMP{>x$boLAju4D*e?tWCbJ)+cBrxSqhzhEw*|p7!^f5E zwW(ELY8K998p{YuF$_$O5$b`)B{7TUo0*w;LjUxGR4RuZ9XDvSTAdT$0TTu06YKmii(P- z;}*u@b%{FPym_R0AzWQu*uuQL zLHSVj!45wo|3X2Tt*x#5t(&)sqZiCuF}w{KZ7&;b!$sQyxn;{1@9ZN-uK<(>z-R%C z3H6HRKRZf-6d@YIm(3kjJ$y}G7Cv^F^@rKX~y3F?<| zZtB6u-CRwhMeWL{OZ@Wq$!lE-#bkg2+vrf0#x|}`4$IHauaAm~vMVVmt!A+B;1@kT zFXa>rtJ{mlwMMgK35BX^g7487sjREP zjK>r7^mG$Yqu9_@Vj6-lmITx68x3m05u%{ReGPipD&afvgUrl$7@;Aa5d_i0WHS7q z^CVndUS}Vg1NG;ok^0R*rt%GaQ6y>du3m{wtFvlqYAE_TH}@2nUnR`{<_Z(XLxyJ` z%tMD`?2d6PvyJup@H&Ft%aW3kroc<#f2bxO-3$AgjkvtB8k#yI_CTXbO9~CwCleZ2u9CkE7lUFQjfcmyk z(onZ>VRR;Jm2~jU+mmb}5>rrACxChgIEMU(^t((w5tzY}@%oRk5in@Xe*trhop4n# R_q_lB002ovPDHLkV1kg`x{3e* diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/ic_fullscreen_vertical_button.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/ic_fullscreen_vertical_button.png deleted file mode 100644 index 691746c73bb89c84397c074f73a5b618b84d3e7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjg`O^sAr-fh6C_xlH2nYnKbxsg zL+F}{JFgx0z5nj4`5RVLHZOZ-t0{KifR={dkwwb{Jmq*iwl##kdYN=kUSQeOs)!$A zm%RRJNZ7cxs;#|pxU1{?mLPkZA|oDw=$Of&ArqovCdY)VQCheo&NM1y0xtuLVi=2J T-1>Du%Naaf{an^LB{Ts5pN%{B diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index b8fa6d2f7bcd33cdbd2175843f487f340cd5b5e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1342 zcmV-E1;P4>P)1<#WRieePJhayr7Mp>jj6h-O(lOEFs(8m3S02$uy2-5@~ObPHC7mLL_quJD$ zmAN6$VzIRM^$+#3Ss`3^&p+MY9{Z~3Kz{z$lST4Gz(da^-0y2oo(m73w<0M~8r9m` z>Nr?*a9h@vt+@ihbIU?z1tV1z6`K9~_Z8G43QUPSOxHMo&Z|yEkw&r z^@qhMT@%#b5qv(M8ykxY86-whB#DNy=3<{z9V+MZ=f;sFiFipL6&lK>lyVuqTrPKR z-m>jnd1;BJrl#fs4Qcz~l4aS_7p2E_y2D#HZ^~0BDCjKIhx)?-kCIGgv#GDoGujA2 zK|zRT@IJz1Fsb$*FIPs#M5%bZIjmH9Vzkw2wcq@`yPMAsW4^RJPT1Lb*}Z%3?li5o zvcctWc15pUgCj22(5Ul%Kzw{+VuSvS$k8{H_( zmU7ifp}~5^e#7qiX~Dt;i=joBh9>eOU-*=lz-Fo_ zrKQmY*PW=p77-bVr^;msEpX7zj{_1C5@dRV$^6G(x9+G^DhUdJegORZ0B{xnv^=cN z0)PPkP5{go2n_(p^aJWnb_o2uP zMhJEF%H@hEp>R8o$A==PLy-;k+ud&WEXHhf#j+(Lm&?_&XHU+0?HAQ`c8ANU*q9m9 z*=ZZ0=$t;1WUa3J)mJvXCq<;e1VVV9IB4QXF|Upo8?-@>$2Vtm&{7@@8i5gn z%sVz{RUc(%?5E6QzRv);kA^lv#>*8KJY0vNDaTsG#7RX-h?*lAfqLt$#K^?2deTC`X>2ksBcp zh=M`vv|8=^Z|A*PI#E$)AlG5M^XI!7*JW+of6;8ddbe-z9*@oBbh~@Hj%W`TlxsA{ zXDrwL^o`3l9~MqHEF2r&t7_U=ajm`Grqdn&uA`&lu7ZNChW>Y}O&LL8jUKx)Yr(kk zDOP46gubRhYS2SM3XNc~_~6FVFa5`THB5E?UmW7AI;waq5C8xG07*qoM6N<$f}F9A ATmS$7 diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-mdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index 58d708a3812b3305f7fe5a826e977f60728fc58f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1478 zcmV;%1v&bOP)Y_0!%6{Lrc?lF`#5JqMCX?yvfc5DUFSZBg!C#N=*VSsa7Znw1#)BZFv7lf} zvaF)~h}}MfT)uo!!H*e%z>)!n{@Q~LhyCC2Ul7aV2A)5E{+3i)lA5$OSu|tDtockP zlcrGYE!&)zTl{>vhz!7DG0bMOQ=w3&WoBj7Ih{^gTl)oNESD>S-zzG1r4|+z)c^f> zU}*KK72y_(x4m0ibT zv9R{`HYJZ6O+a>6?b({YNi2(siVA9NZN0_gA)aP4Z3uo-sP=6GkdonHmo;IzxTn{>KwQr0Htky#+*fXCy-8cimn)oP~!r9f@dL8)+`sZ)_l z6bLLQ)c&1ce!J)A_a^pnot=LQg~9~6LUFREr?+qA@@2udZ{L1O$e9F0M@RF2 z&>M`l!9lmTw>Qu<0%S_V?RGoM1JsuSK>-A%~ezX3RaS)Vt)mToo}3{7Xwwe1}Vloa4*a+1kC`uc$578z~ z^1y$(dUfA>fq|)XI)ja(D1u=ajf9XIFDNWbmC4Ev_T9PLz3#Kb&?{H2IEkJ{HZDS@ zp`k(UkqZIujH*3*E5LIhc&C9Ice$K{U0q!V!@|O|*=#mKLZFZB+rQ2&DUs}vD^w-o z9HE5Vywr_G*>fX9*nf_nXg=kIc`X2Ha(R2dfi7MY^LBiE{K}%@;##2MXELd*tlm;z zf8=OK$E7~91&sk<6iG=*s17)mhJ@gtb)c|)j6(Em%pN2M-_J1KrdgY%m7Mgn&?kekFhkp&mGC z>6yyw*RORRJKEHcoV;#bj##XA0Ws93=>Px# diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/ic_fullscreen_vertical_button.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/ic_fullscreen_vertical_button.png deleted file mode 100644 index 9d590c7c2c9b32851a0f00016638320ef3f74997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtlb$Y)Ar-gY&N#@~Vj$qEdr)Xi zYW0T2TW79Se%c}KZ+X`3g8|O@95I|*PpR7FjSn;O57wB@%yx?;+ALn;hi^T&6k(r3V4vo z%5yFAJJYn+TYhRK?)96!PUsqlX(;#Pe(5iDeg+5G8b;UZ2c^Q#7Cr!aiow&>&t;uc GLK6UBc5RaY diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index c02314394ee71cab15a945367e2838a474153f14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2706 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 M07*qoM6N<$f*@cby8r+H diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xhdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index a95d78fa2200a7c5cd27ea3a7a9f334b3a449f85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3270 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 Y0N^!FSYOv|q5uE@07*qoM6N<$g8xJ2ApigX diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xxhdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xxhdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index cffc2fd559177d845e17fb00762c71a424adbcad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4159 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 JPDHLkV1hrQ-?0Dy diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xxhdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xxhdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index ec36b75b7752c33f1e710ebdd275e61a35cd97d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4986 zcmV-=6NT)FP)OKH5 z-~hayY?31<4M}b%420gFPP;fSAdR8#m5dDlItU z{vj5j1A}0$KT;+%G)~T<>VaGeU+1QCq6#@I|dls z(32-m>ITal^a8|KM?^$K!1?nRPCGcc#3+?YN+c2yYK=xXa#%p#kt0VIE?&I2eV{Fg z4f;E)Rt-D6dv^mD-Mae5Bffqg*^i$j>hstgfuaGz z1tYH`BP0DUUdsJiPw1n1dbAWwMu_jjPn}AoCPxkrxUy%@p7|?Ru6#UDAQ{2IdFbHx zZDp0!cVnU=_HoC*SKqKt?CO%*)6*lOD2f;|#FKDxbh=w}qvG_@qes8U&d#nk0)=y? z`eVN4?lA%A6#yvzQtnxj&_}WX!W&^{v?`TKG-^cPfYHqe4my8I-9u%6x|Q9sj+VBaYd>1D`_w6E$4P<^E*Kz? zo=}Vc2TWw>Fmj#y=Hh8*CzoiXm=L~<0HJTt4HVtjmP6_FTN)Z=>%6_Z^w*?C%aW6) z9WZA>?r!3x01DiyM^JIobnt%xSUA0o06*{2s;a7wfC;5IK5O3nHYi>veMMUEKOXMx zle)XQDS?2XK^iE!nSeu4Tbku<>)t&59^*@y2vZBXG2^XROP9?Lo9>E$^A;tGa#de@$oZfsih zQ2MPhdCMA7AV9MqhYT4a-~&jhrqZ1q$@TKqc1Mj`O*l9@;yt|^XWTpr+TMRs;z(cb5}Q4N>3RkWQ-L3r5hc} zVRf0!&8=&J9hmeHTCG+97DSijvD5%$H zdUU>izQXE?id_>YM!%2yia^`zjI7BWbjYl%tb8>nIO2j#E*s_KN1k1)T=rEqSefulZCr{h_A1}Y0-2SLt z@95}2Fd(5-f+gwv{QSu4Rh6qJOo;x>=qBu{1grr>Fr`O%dHE~BA>rp_a`{*%C#PQi z+d?-61YA@}S=k5S;SpIaEo}tsIwp5C*!EbE(GqET;Xg$sWf>6>;psA23juS(e5yCf z0Z94)e_!gx_39LfM3T$64_htCDnN#T=7S}jLQDE(P-w&jKDwzPnH<5BOd6dt4yG?I zEnO8J9<@s*lMz5$J?^?a05OYW5?tJ*qSEp=A|s*>$eNp6os44|>89)M?jlEz9DX-3 zF>%u6%aksOuDV07EKaiai>&7$)1 zm62iLJCPcgk3yIy`NBNgYPc0Vg0x`40um(}u+HBH2ZwCy=uluCiGGh>BPN*s{(kzR z;==f;adA>xOC`GivWIS#YB$b;Xu35uHWC2=0s5;_X&N_C#KlaTHf`*Q6DJ<*+O({Rbg@lG)XlRrV2a~3K34Ja6DG4smh)kL&L1BEdSN3S64SSwTu#qFi`3t7ZvD%#`?fOf9lZT zqrYC7y6B884%;d~*7$n$>eW$^63ID*qWeFACiG-zj0|$E#bgo}#L%svsAy&E#EGAu z`TG2-d2?RtQ_X*W@BV%_vFlPFA8$o_Tgw^<-&jiY$!!>5KmByauhUkn%uy&hd#woa zqaLU)9iZSo2M&87IBX4O9+s@gYNEJh+o!(`3k?~k=z6Rq36b%79YKnOkp1?MK0~~^ zUL8L^80w%nm;mie*`QjJO4xL}UQ@G8t=87ZNFsKdtLEL^#qTPW-FjECnAEB@YXbs& zw{ZnC26W7x|NNKZ7h79f;~|~U!s{Xg0;8pum$xc$#?-Kaf`U6t8pCG@yZ|xgC(SRc zo-%n-n4(KXJ5u%+l+i?wribY2dW_jCud&%EmC%CM_U+q8eE8vq_qkE)o>A_A*P$xW zlCG{|vc0W!-k32X&v5A$5)$H2Q&ZEkZr%DtoBp)vP;;{!<}P9^TMIIm=y7Mq^08w_ zp%q%x+N}a~_S`qcQ>IRhe)Omvq5=mY9NhqnDLSU5EtoK!;`g_9qk+Fy2NZL2M?Hx4 zJ75Wr9ym3vS^Yr>$ibM~^q#^nIafx;cCYmG-=w+(b3VXFk16VeD7PM8{Ws4?=TjG009P+bM@25> zI$VZ2g@vU%#|HSHKtyokcWg0!TB>H94?YC8df(8WqUJUl!AA-*Bd z?O^Vq5rG^*I69iD0JhML4StjC(P8-PMJQ!3Y63ccqXc|4B_(C{g$ozD%~*rrZvFk+ z9&R458s%CnLG&ojNw4K^e=RBD!vO@yaLR#J0UxHmee+g4Me39!in5$99VsMXt2Ewz zo`J#RLwCwsT0jNpE0usR5RDl*?DDc@%jQ7>sN!a~%z_JwO4dpw(V232ix!enAtt3r zGmL27-afTc;wHp`;!wv;4{-5WJO2BM*hM_mV0?N6NQY&OG+%o7wV8>j0|t-~;v?Dx zIyngK$}yuxxS^$6bJ~`q609O!T%3fEl^-cDElFj@VxkL^*Fc>m+OzNAj);iR6>@p2 z4lI)16fANh0tG2#jk67%woS`S4i~vBOe@hEfW+uj2%Bbz6n8AYR zDA3)djEV^JefaR9(i9+*7*9YINfJ;*@<}De6m&Gp?r07<2#DanZwo*tkn5av6d zgn7#VnZjjE6E&ZE0iq+LO>~$5pruDU;{GycP1lSA1A%!_t(JzWI zPWtbE`*u3`Jtav}CYdypJ$jL-Td2?oWwR3#e?V5kH|7NN&x)$5_kQtOrKa>TzsDk5L#aSgQk2Kcu_Ij|6pgY%do^8ESB%ce}5vJYEpxCO8=jeuht>vY3N=k4w70mbd84I4K6 z12Yh$Gkdp|ELjqex$UzDFc(7_jV5e7Vk*3L?aid589A2J#ePxD99PY~hRL8>tsw*a z{S`GgDi=mYMO{Wq`sQ+OYV4%g{ZQYT1;|#qS(*n^YJg5XR}v*TDVNIx>{7$a%S)Gk z^-5TBa`MeVD>ZBZ%8)Uu$e}}rKE72`{W=_JUp#U0^zvD=X72&5h8G~CC9%%7_@f&m zy0PcO(59fc_(ah7kcHsyXyFW_DmFVPyOa$H2~)>{Zltla4yzVqP43_hj`9bsJFtW^ z%y>Z`CIg2CbX>i7B}we#IePr~@qg`l++~nUIK(jA{-isjFWu-ehTxMb7|Os;e>j(~ zzW<|8>pgy?P zrBu#>$@TgL#`j=53p!c{2N5`W14y<+H}*y`zHasEHK|*-ZOv|Ml3^uJM*~1eOX>8Y z$4bSVpN$#wHNJ#yiO-6xO0Jn%S-%SnLCLkN8%hlx*^mNIAoYh7UJ@NM3>G=ZC~TQr zkBth@m_^Gn>_U4f1c5ZO!)=MAuy(kol-NeN0+qd8BYHhEZ zmNes1Q?tw+YA(ByNv3u?e*CyN`{0pGcI^fmM?p;{s;sQYik~*sVt8lfW)&cF$3A@K z2=x&raQL>C-TMQE2et!Mv;}X7q1VU9hd6uo>lLprn70=?#gc+T!oO;2Y7#p;f?P`I zNc23m(2cPobQ7%FO$#oXgf6tsl`B4&k)8cTHN20_5N0!In*p*VQn9ZwP7Z;G_BcIs zkF~6WMKM`4?{J33%ppW!QQ@+g3Gs)}FF^5`5E2^sRkKXy&X!7Sp_@tVR$RI(JS<`r zMQMq@fBWs>Xh}q>EoWl1U$hqhTdp?&iPI>>rW<=KZu0`;Xh8*-9uypU5<1a5`qE7W zwHvgz7#pRS@tEjlTDwi(D~XPp_x5kz49m&Mxoau+Vb5z&0Ae{yx`UNVH*+AF@9w~n zGIXHx%m@vSI!)6JPA3>e5$UFdMk#N)QHsBI!%z-K(vDfXcLyiN#Z}s}$%95Qe!3Z& zHTmdfq5XxHN(PE<)}j^{yg{=d=7Vgd8y`S;KhwE^bPEX!Kh@ma;(>XR4H%km8-JUr>ERc-Jq^*x4)E;to zb6W(d8x(VdqlqJh8VmkUC)zB>%_EiIGq|?*OFtKY`hWy2_$Q@wpc zbaemPU+hVyp3$|qnP@S1_{dvNaceiORAOwF&^tIdl8z!G9W4czJp1H7eCQ?6HQ= z!p?V#f0W?g8Xz{^z;VaJ$?mb{=H}1g5OXttW78iZ__qd#WsNkA;DMN*Lj?SnHCmaJ zF#~MUKjz^q`Wn88|5Pl9UOz@FYl$HjsGk%-{W0(V1BT_JDjk;*2><{907*qoM6N<$ Ef+4Sq-~a#s diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xxxhdpi/ic_fullscreen_vertical_button.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xxxhdpi/ic_fullscreen_vertical_button.png deleted file mode 100644 index c7689ecb3aa66fb15c1b4a6cec2669a1f9dd5767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 956 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 diff --git a/src/main/resources/youtube/overlaybuttons/bold/drawable-xxxhdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/bold/drawable-xxxhdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index 63944383914b5d98406d9fbc185d8eb2209abb1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2407 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 KMNUMnLSTZlpk`VC diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-hdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-hdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index 84b7aa085afdff72137c7a53820e2489714f2a9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 zcmV<310wv1P)aEd&u?Y#U)O+w;sZ#2>PN3 z>3qot!^SMlG+)vgh(ddC$XGW2O(p8VYMrCM8@I7P*H)8YU$}7Z?|0AnefXX8`<+8k zF~t>EdU~#SJf3l%&-cx@r)iBwb0X?66%`dH zmzS4c5(wYc*4B*I>z%^)jg5`jw6wIisDNZ=XCLb8>(j%!Uvcr3m6h?Prl#{585vYo zRu<)OIEHY%xw*NVX(twobJ8t0jT#wOXwL|AC$AkB^W4HJ+cJFWB7Nd`))m5^JE2j*bg-I3P!6Mn*;kMn^|2 z@C-~$OthNKW_5acdQf|XLLoz2SlmkQ9+$hfAtsaQBF@dt%?*I%K*CfG}hpM#zdu$odHo9kTFi08lkaYEuM2{z-kCB=zn=vDs{`B&oG*fXIFm!i(`O<6?Z0l9Ixe%jIG$ zXLt%(U5qFw9U3tBK}v@m!Z!$U?`M>b%TPLk7Dp%@@(`t?oRp4dtV#!M+}75ncDY${EC_i3JQb}3Mo7?2%F$QVPc9YrV#oGjobw9S%j=h00000 LNkvXXu0mjfUwhV} diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-hdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-hdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index 64d6b2c15875df0ac475333667748eb7051e07df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1331 zcmV-31;#D`L+jbiH-MI}aCL~uoM!KFnf#)YX% zS`mp0O{vQ`O7)@8f)vD-8mePuH10Z@rq-bSAGssrnCX0qX()K$qTgN4{oQ-cJ?9L^ zUCO2WPbD@sHYhhY_kAlXE5XZV;j*%_M2Clmi)hN=;9$oWvWdODJr@xX;T0Jf>F46& zV)idE5dirEZL6lHCjP=foSmJywzjq#%gf8(V3Q@Z_07%Af#~RHPdzXT4Ca#yhmlAm z!lk99K5XzO+BReWFc0zn6SNUOKfhOWU|!74xVyWXc6N5&fpQhv-pa~KUqL}Zu#=M$ z2Xk>VGc#YK|0(*eF_>@-OhrY-#~M9GMn-4b*v7`jNGKF~;5EEaTwENKmzVdZR4RQ> ztyT|0`7^ZH*4EZUJ3G4*>pD6*VlcKZlgVx;B_+MZ%(P7~uCA_vxVShUGc&zzc3O;$ zjk(Os%%J)Cd5vFeqp8{7r)ax#b93!cQBmH{Tc4kwA42n2S69D3I5_x~)>T(mC(xK& zF3+T!!tI6d25M+%5HWM?!bb+7q;Yg~^d4H{#Kc5tU0t2n(NX_v4GawQW$QQ5HsCV} znz72t$`8=@_teys)WpQZFpR&yzxDq9{*R=rtE(%)*49?u z_)DU}$){oHX>XU8m&co%n{yNfm`?J^Cu3t{U(h#ne@cfgEG(4p0m{PU11$RR3^4Dq zn^E`l^dwqZT5{9V)Awd)XQecbR~JB_&?#d;wtrOY-wppCYaFBP#b*z zhR8i-YHDf%Cl@lHFBwoWSph)Fe1LeHOv_AaIPmdl!^6WJ(D%#w`uY#_v~zNDXx=VN zR>OeqFq7Tn10><&)LITqFegqL78d4${zm{Bv#_w>5V6Tb&jtqvPdIf+Nl7FhpsSd? zgJ<8t17=(MX0(7jXnbvL?K^U8rBd0A@4w>XfFq8of1G-F#Z@o50DSJ=H})Y+;{=O1Ox<7V0=V@(c9bGa9|`s>bOC54Q-0l z0bO#LLZP@jK0e-vzTc_8s;Ww_L!t@{VC6`gZsLWRNcSF6$6a2jgG3+@aP{@|;)R8U zZ`lia%<|F>-5g+U(L6-p(Ou_BSk<6JOs z;9zDlb#HHPitac{SU)7n9@?CI28EjfC9Is4v~n`hxi&Tcv!i`8x`HC#2t|H0iu^v7 z*0pXFx9h^Xq#uA@#q$el-TFe+^Xs_5b(p@&qmT`1q9yI9UGuJ3_3F|Nj2l z4%GAi*Y{rugnjVqmp;_XQ%MNY*#8iaLyTgk|G$6R0BK$^ joUb20nxe~%g24p

klIx_mXW00000NkvXXu0mjfVmsc7 diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-mdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-mdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index 4568850e626077ba1bcf9ffb58eb0c64dd3dcbca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 667 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 b+^O;}%BWkiO5+<<00000NkvXXu0mjfxEYrm diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-xhdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-xhdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index ff4860c3ca03a1534b25172e63bd15f92f9fae7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmV7ld;`RC9^Ru7lo$xzA=628a?C$q{{XEb2dHa5K zIv@GSM?RWQ^7Hf48I8see}DglhN7Jay0*49XL54#$C{d&tOrU6f~~Kwf7|JF4uB^d z4#(lh$jF5O6A=-ii;j*CiiwE{oXL0rp9|pq;Hx-+GZ`5fE9V>MU6huV7F?!k2f+^TD0qZ?^XAPO zXf(zH_}m2rziHE^70~u^0dXBX3~nD77}$sQ6Zqdtf$(iI7!0o97f$n{^(<`u8~7SQ z5V+ZFemyxkIf7u9ELozn*=%2nU>Db~UmvFee~0GLH$ULTA$3tvQB$Df;^K70#l_F` z_xDq~LjwLEtJPYPl9CebI^Se6r3+A7Nl8f(+g!n?rlzh`1S2sQ%!*=TWAz0E1u5m_ z<+*Uk_hAYZLqkIqgM)(~+3ohPu<>O9er~in2?YV<~490``*2KpY7}Gt5a+jJSGmQu=4#!OG`@uBFsI5 zH2_AziGN{yhp_GV{YwE4n}3{R^78WH(RKy=FQV2quLXcjuf-z2i*^}JF2VU)p?#~u zIE|CA>oN$s#*^076b!-|1l}iXSA!=lUc5MXbab?t5evVy@$vE6Q!woJVJy%g&Ugjd z%}q*5S`-ozVu1YzDGYxIpkK_CI38wakqkQo@MqQF6>4Z`cvlqHU07JSOtS#Z&CS^o zEqd$f>bB0>k#x755^LpP&A%C51^g3Ae^}W6<_yR}M(dMD8 zR%mTTCBSsx5p8nBY_6)o)7Kc0V2U3gk1S;yd?gyba*_Up(}z>CUwc=J>Cl73Vv*C>@1Sh6nL1-8irKa zk6=HQ{h9$jPy|rg%ot<1_ilFz5Q#~@%H(`+1Q77q3V3j5QBlz<_Th4}jZRDrBdX~H zY?5HW0De>iIK~8p3N=kCQai4on>h{<$_Sx; z5~22JDOaWlrNnlL9xNqZ^OOm-fENLHy451UVb0Ib&rjkV0(=^$v54bXl1tkl%5H6? z1WAgy^VACXPZV?6DCS}j_JZk9Fe?L32Ey%}DR>dUz*sK=?5Ac~0|9UXa>OIbIFt|X zNiEimyU23Q0+6b!t2bbQ9ytk?)0bhF9oX0c->|Yy5-qVLK0h6J5)=^1HKar^xhoNj zMx!2~wn@tAIiOH?H*Vax6cuGDE;nh=qT99L zu#Y+AN{KZyUHeguhM|ua9zMaGgDGpM;$}dw`7LtYv#Y@~)H)mvW=@g~p>H3+#JSGL zr9M@Jx8Z-1Yd_WtN8b-T0o({T&lzxuHalc_mJwEifx|Bdt3mGPSROD7!n3$!yi z+Grm5E>k~j%^Rt}Pig+fjT>FCb+_OZl1Hvr#T4l1>Q{{GaN-jg85#5c)GXk$6!6si zbl}wl6A43ReG!?ooZ3g&JZiC6b|fYyhR!GMDWd%W{C1Vido-KrNM7^wny!VjC1l2B zlB67nHW%QqPv5`Y=YVkhk;t^iar9Q$>w^VeAsjs)t!DkC;v*mV$VVROKklrs7RQvu Q(*OVf07*qoM6N<$f)&e8r~m)} diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/ic_fullscreen_vertical_button.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/ic_fullscreen_vertical_button.png deleted file mode 100644 index c2a16d0edc4d74495310932de987ac97a43a75c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2206 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 diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index 1a9411994ed5671592d9a1c9abe2d8f8dca62458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2238 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 M07*qoM6N<$f>2^GMgRZ+ diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxhdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index eafaf834f97cffcd4e50ef85ecc00b434ff2faa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3143 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 diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxxhdpi/ic_fullscreen_vertical_button.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxxhdpi/ic_fullscreen_vertical_button.png deleted file mode 100644 index 11305699e76a94f702659e5982dc0e3f12b3dd38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3625 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 diff --git a/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxxhdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/rounded/drawable-xxxhdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index 36101f042719f5962ed560fe0777aa7f7ccd13c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2045 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 - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/ic_fullscreen_vertical_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/ic_fullscreen_vertical_button.png deleted file mode 100644 index deefdfebb78778c26bb0bff0304dbde180c6d081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBQaoK8Ln>}1CrGd^P7vu~V)^m^ z|NlaTx&~Hb!G+T~+wVP|V)24gK%emuONvj^KNb@nqt}K@`A#iN>UiE~m62kZA=1+n zXu#!mP#}Z9_gd;=zC~@#Y@xzs1*V_e4{AuT9u{O^u&Ot>#x0ce7HA)Xr>mdKI;Vst E0B6-Q-2eap diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index c9951e6cfd43a6f6bfac491de79b7ac6c50a75b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmV-^1%djBP)(9pmH#Qz9cj!m8>4uV?57#bSNw0iaGzoa;f>JBnCW?)rP z3Y7;s{IQ!^IXTuvaS3r9Z{NH<7!?`ezh}>$kLaF2k4CZ_1Wc^Vpv0=8 zq9SwX(4l!585yygHf?$dvkd4+7GQ|{0a=!omgY8X#>^eBUccVu>g4Em_3G8XKz09c zr74mf1apj`p`qxqWvlk7s;elvI5|oH9qRYaw0X<6 z4nJS-N|+fWWqXj}=o-Sp!ob;BTU%RV?Yd37B&8&E|NUot80hC|0Cdm?kRF&Cm|kOJ zV^&~v{$9Uv^W*?OpPZ1WD4o^ImtPCVQ6!KYLOMD+;%nEf-zTr2B>(Wi!z(hfvZ^6L zeu~?-Z~p{x1TY%;rcIyOnwFYe`{4eAkD+1Uvgp6LxjE0S-Fu&1xq5AbwWV1Mu2911 zAO!^lj*lNdva_+V{rUIrA6T8bn3&Lvm1{R?Ypd%Q6&0CFNXdAXl@wLEySoeR+O_K| zNDV0ctXQ@7{o}_EcbOU+1%nblFxo)T_jmE~6*FTZ!jl{w9YtXwik_A*90W^{o!!0l ziAhO?zkdGW=j7yM06L0+o12?~lbwa3t+Ugox}suh-=s;C3v+W*fDRIYIS3d+>>D?4 zy`-g~rWO$qW43bT($l~wX1j9b%J0g`O6T_Wmfa;K5wAnli07H#@Tk zNO!z^{`@bn`1{Wc#Lu5U-7|OY+(RIr3knPOXHUou3mX zP6n#MbkLR^yDmvdNUGhqd1Jkqv0)I*Voy&`zHQsKy`C^((uBgo{BpWG=;qDq>pRka$;iVqkxPIftjzE9^D&%%IzR)K*4WS!` zt&xBI)}5QzuU@^02zN;QuNiP?EnA( M07*qoM6N<$g8e$LIsgCw diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-hdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index e7b8f43b94f7fa22626d41d01f06dea3c69ee12b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1873 zcmV-X2d?;uP)|+XXtlF{>~Dr))Zab#yWjb~bIuiw z`j0*6{}>+B|A0P}k@p$W>Cif`3XRr(jqLe|7-mzZ13^Cu6gWyyP>@woQBmJ;;uruS z09;&Lrr6rrYAP!$6>K&e13rD0(uBmAH*emQo}Qk!jg5^exOO;k41nOG+}zwzw{A=2 z(`1Ej7peOk0g$$NSZq|J9F-W1>s z-3QWz!QpTd?pDdF$|N_AleQ6sfQeBcRcb!}RCsM|jZ!2MiH(_(T(1y%t@I%J_;^n* zFE4+s)4}@NZwTZu3kaS7=*9-rBuqp^gsP*XlaQEnMD#}0A=^p}^Mjg#L0nvx;=KLW z*e50=)FOa***OPjwC(J5YuC=ce*OA0z&2Jczu)V#G0^c^NlATL8aI;3WaJ=v9TE@= zSo{#MxZ8>qPDOkxNG!FLm*4EZmC?NFekiCK4mAQJR3=gsahs%wM ziH_z~*WBkXb6ZUJ@VEu)lV>k1oJ~#7UcPww>Yn?uCH|(;_8vos1Ki!+7u>#c=YdpO zRa#yysRu}`d%Ajh#@UY>6T@Kc?o_F22%*7iAX5ksxtR_1oVv?&ydDVIyHRya5~ zOt5!#o{BQ+Wi|KYH)ei26Zh4m3Hafq42rrKh`L*2Yh!BzTZH~`7(W&zm)8jvEpnwf z&32kAdmyjZsMT1FMtzS!4_;kS-0wbTXJh9;~=PDM9@9)_kM>=sVS!9vz2RBGlKMPKs-bJO5PBb+BQ9fhF zj8&%9Mx)1069Sqd)^jST;LB7Z$eFWnWx; z;`C|Xtif7iQJpF{C4k;%!HoVX02%s`VaP8m-oGg@fO#-J?nf{sbZ2B`7AZkPM%v6! zW9%mZG??~<3l~nbv$N|2jC8}l!6A zs$f8oR4RR?7xADQ@@E00uV3KO1n+8aQ^Uo9Ox-9D3NAfq_&s&bclceyY8{r^)YA8m z%_$Vx4=pXvAA=UsGVDri>1LL`XUUcNv!rY&fFJq?#J>*cLu~#H5?5qlpCwYJ00000 LNkvXXu0mjfr+A1}}$ zJ7I&F+}2weS*#r!4@h>bXZ#qV;dgMc8LOwPN5Ak!u`{ZNpBJ&iKvbMTI?N-ol-BwpR8=$6l$rd8Nsa` z?Ol#`f|^&Z{QnILPLLxpED#qL=VoSR=KTBjFB3O6H^-{g>(;;j_~9xyH<#${T{~CR z*VfJlMzYAZox3&!CnZM4dV4udm_byJIJgIr|gb8bqeF3)sCb)RnvL!awwvI2K zzx*mBEX?)d`IBRIcD7;Lf#Gxd+}V|Nm6h{=@xgKK;^mL4SFW6zo|aMsa_Fpi^SUHN z#fANRy^|aq99Rw{5bc5nQ8g%t5)?SjPPp`G>5?TA@^Z4uK<3Pwx2Tt$ zgPk`zDm;||7(@&hK?Kd~;%;u-%vY|!BYEZObsIi>{BVVv2N=maA(1Shq9VF|-TI}m zQIWABAtA3pk^Jn%tIK8OrPWIoF5HAQh;Wr9pkx{ZOr{P<$rO~*L_|awuU@_S4XE#5 zb#+~IR!&Y`bYz$|FoOSqEQFbdnbCm70!$J)qs^Ex=fJLAJ7(?J7IioQE4Fh7dq5@KUyB8LXSoD5R@ z7w9WySYZcbo0yoeOrJG-ql%)kYEe;9?t%q#ci<{fiLwA(ivDK+7S|2n;#x)~l+({o z!h6@Q$(!%oVfaaLagDFWqFRN6ZVAZXRlq6}xnRTQ5Tb(!pD*yq(cA(6E6Us`oY>?= P00000NkvXXu0mjf^N8OU diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-mdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index 38dfc9f6b14607eb481286e266d1ff96faa47414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1176 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 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/ic_fullscreen_vertical_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/ic_fullscreen_vertical_button.png deleted file mode 100644 index 66a60db633d2ba85116e9b6e6cbe53f5cdcccaaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xZ3?!EyURMI7)B}7%T!Hj|BEULZFH4|O-jX1{ zV1{W2rkwcC!Fl}K(Hl44yS_I9N(6YiIEGZrNluVpUChANGR1-6AbauDiy}MQnjDyV zPV+r;TcACwC38}m$gV}aGyEPLG{_7Q4D50{s3Gw#!Qk2Mg{wPOD9xI2Xx@sfWRac} Z28P!wG_Go~ScBZj;OXk;vd$@?2>`^XV5$HB diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_overlay_button_mute_volume.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxhdpi/revanced_overlay_button_mute_volume.png deleted file mode 100644 index 0389d7f0ddb0ee2db4c8640927d9c38f35b075c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3185 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 b13>==f~6wvHh1%N00000NkvXXu0mjfq)%f4 diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/ic_fullscreen_vertical_button.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/ic_fullscreen_vertical_button.png deleted file mode 100644 index d89c1b793dc48400478793eba17443c9aa2229cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 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 T3&)Wn00000NkvXXu0mjfGK^E> diff --git a/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/revanced_overlay_button_mute_volume_off.png b/src/main/resources/youtube/overlaybuttons/thin/drawable-xxxhdpi/revanced_overlay_button_mute_volume_off.png deleted file mode 100644 index f0027c850c12858b14695cfb601bcd83db2e51fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1979 zcmaKt`#;nB1IOQ=UD#x6%ypsd$Vn>K5xH!09g$5#pdN4l-sX0rb) zl+>or6vmkXAkBBQrLnkv;!TB^g}N|(t}DT_9)Y@~|^?l7%a2DTgJMH49I z*At)1IC(N!VIO6zud0=7AGRV>#wz_V7gYO=QogQ)kyCoMeYl|YY&}|HJo8jyb{WL& zZ@X3+4|4V;OHV82|*C)--K1)k%6?)Z-AM4N?E@p!K1^A=b zku8zW^=`pP2;umjgRN$QvOzxgh}2#asTY>!lhe>y($Z-&KP9UTCiwd5K2DJm{wfhlV*#dws()0-?t=;nlIAPiK0apQD~2W z0HUXY$#XA541+D@njm6gMrx`cD*i$9(5t)CTj|i4p@XA!Ba)bzTQSsg_@nV+*zuM| zS4^@RFiw4_juwm|a=&49EHFwd__?)9iU6-y9{k{D7d!CF*H3Ig|J1+@U(PlmTc5k~ zzQiJD=P{qY6pvf0rEXj5q4J^B8*2i>qzNy)#$rsv583$`*}+gAD9L^VDI#uxW7a~z zXfrzzfBkeqtm&m%IrE^;V2FrdAL?`<$3(kq(myf?oQocw1#yk$o{CE=?hB-iw)wdk zw7XFq4g{jqoW{LfG=@jc+X!I{W_BHSmS28(dRp=I{msc8eZf^dS#Z+~mYY|^5#iMv z)pE$YRKQ-KRoEWptqq(|7qW6fcLmgu1e(?J%en_=dnQ`vap~{pSRhxn+2abK8dj?2 zpuY@xc4wR0TQ8bDRFZG2`LymA>@aQTmoFSB$ zR-8Azc%=nSeUJZUXq|XJFf%M6rMk(A=LFX_CfSv2Bets3b&qg_?<>gdi+kP^_ zaZ7V4GejY1&27$1aO2jSPE%~*FD1g$Mdkn(Gu67Qw93N znP=kGb$5$I%Wy(szrXE6U#BJH%GvS>Rals>3hKP73qRJ_JozVf0RyB1HFzfoQN`(DR0k z4PHVQ8oQ34y&=)w%hPYw=as`5@lpaP(G-=Piz~`O^6@4wKPjU_a6LEu^6-V0+c?I}{hS10)arcH;17vikYC?#Ij0iNwy_ z+JUN(B8EY}!(wm7&~kwvyaGA9PEE1K&ji-?NifHpnsu_YRi^zPiM$TMQc`uXEU9HSb-Z0+z(a)4G7CP0Q3+@G;3LA` zHuov1=wF88-lLsG?#N#Aq@ibnxTVy8eBxpDV~ztJ^1?lOF4OqnB7cea6~usj{Qev} zHPgkxKYuZ(&OL>s#@tJf-0g&;$DA5v8Es7LR0z+Rh4JQ+e0`C6mD{%eQDIxep<$OWp)H&G}Jp*mJ%g4ik) z+DxWSK`P*ZxZd$WtHe7<=Nd1oV;@H>cN(OF2+|#8mZ($elY}A9h^dm!I%@53QqUmH zlc%hAYk+oVre*@rjvAzVfnM}07*}ip<^KaD@DU??eXk#Bbn}#fquoK<25UC|KP8lA AdjJ3c diff --git a/src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_camera_bold_24dp.xml b/src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_camera_bold_24dp.xml deleted file mode 100644 index ccfe3dfb2..000000000 --- a/src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_camera_bold_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_more_vertical_bold_24dp.xml b/src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_more_vertical_bold_24dp.xml deleted file mode 100644 index 3f84f037a..000000000 --- a/src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_more_vertical_bold_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_search_bold_24dp.xml b/src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_search_bold_24dp.xml deleted file mode 100644 index 66dd2c35c..000000000 --- a/src/main/resources/youtube/shorts/actionbuttons/outline/drawable/reel_search_bold_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__1__0.xml b/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__1__0.xml deleted file mode 100644 index 35eb1ac38..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__1__0.xml +++ /dev/null @@ -1,3 +0,0 @@ - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__1__1.xml b/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__1__1.xml deleted file mode 100644 index 35eb1ac38..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__1__1.xml +++ /dev/null @@ -1,3 +0,0 @@ - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__2__0.xml b/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__2__0.xml deleted file mode 100644 index d6566bd9f..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__2__0.xml +++ /dev/null @@ -1,3 +0,0 @@ - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__2__1.xml b/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__2__1.xml deleted file mode 100644 index d6566bd9f..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__2__1.xml +++ /dev/null @@ -1,3 +0,0 @@ - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__3__0.xml b/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__3__0.xml deleted file mode 100644 index d6566bd9f..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__3__0.xml +++ /dev/null @@ -1,3 +0,0 @@ - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__3__1.xml b/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__3__1.xml deleted file mode 100644 index d6566bd9f..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$$avd_anim__3__1.xml +++ /dev/null @@ -1,3 +0,0 @@ - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__0.xml b/src/main/resources/youtube/splashscreen/drawable/$avd_anim__0.xml deleted file mode 100644 index 4d4459196..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__0.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__1.xml b/src/main/resources/youtube/splashscreen/drawable/$avd_anim__1.xml deleted file mode 100644 index 6e99759e1..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__1.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__2.xml b/src/main/resources/youtube/splashscreen/drawable/$avd_anim__2.xml deleted file mode 100644 index 15d9885e9..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__2.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__3.xml b/src/main/resources/youtube/splashscreen/drawable/$avd_anim__3.xml deleted file mode 100644 index 8d6ff8a2e..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__3.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__4.xml b/src/main/resources/youtube/splashscreen/drawable/$avd_anim__4.xml deleted file mode 100644 index d4e222862..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/$avd_anim__4.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/drawable/avd_anim.xml b/src/main/resources/youtube/splashscreen/drawable/avd_anim.xml deleted file mode 100644 index 49266b4f4..000000000 --- a/src/main/resources/youtube/splashscreen/drawable/avd_anim.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/main/resources/youtube/splashscreen/values-v31/styles.xml b/src/main/resources/youtube/splashscreen/values-v31/styles.xml deleted file mode 100644 index c7462f74a..000000000 --- a/src/main/resources/youtube/splashscreen/values-v31/styles.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/src/main/resources/youtube/translations/bn/missing_strings.xml b/src/main/resources/youtube/translations/bn/missing_strings.xml deleted file mode 100644 index c8a03773a..000000000 --- a/src/main/resources/youtube/translations/bn/missing_strings.xml +++ /dev/null @@ -1,413 +0,0 @@ - - - Don\'t show again - Invalid DeArrow API URL. - Still video captures - The domain to fetch images from.\nNote: Only enter the domain name, i.e., without the \"https\:\/\/\" prefix. - Alternative domain - Using original image host.\n\nEnabling this can fix missing images that are blocked in some regions. - Using image host yt4.ggpht.com. - Bypass image region restrictions - In-app share sheet is used. - System share sheet is used. - Change share sheet - Browse channels - Courses / Learning - Gaming - Live - Movies - Music - Sports - Watch later - Start page changes only once. - "Start page always changes. - -Limitation: Back button on the toolbar may not work." - Change start page type - Player overlay opacity must be between 0-100. - Ambient mode is enabled in fullscreen. - Ambient mode is disabled in fullscreen. - Ambient mode is enabled. - Ambient mode is disabled. - "Auto switch mix playlists is enabled when autoplay is turned on. - -Autoplay can be changed in YouTube settings: -Settings → Autoplay → Autoplay next video" - Auto switch mix playlists is disabled. - Disable switch mix playlists - Enabling this feature will disable automatic switching to YouTube Mix when playing music while autoplay is turned on. - Default playback speed is enabled for music. - "Default playback speed is disabled for music. - -Limitation: This setting may not apply to videos that do not include the 'Listen on YouTube Music' banner." - Disable playback speed for music - Like and Dislike buttons will glow when mentioned. - Like and Dislike buttons will not glow when mentioned. - Disable Like and Dislike button glow - Fountain animation is enabled above the Like button. - Fountain animation is disabled above the Like button. - Disable Like button animation - VP9 codec is enabled. - "VP9 codec is disabled. - -• Maximum resolution is 1080p. -• Video playback will use more internet data than VP9. -• VP9 codec is still used for HDR video." - Disable VP9 codec - Cairo seekbar is disabled. - "Cairo seekbar is enabled. - -Side effect: Cairo theme is also applied to notification dots." - Enable Cairo seekbar - Enable the OPUS codec if the player response includes the OPUS codec. - Enable OPUS codec - Do not save and restore brightness when exiting or entering fullscreen. - Save and restore brightness when exiting or entering fullscreen. - Enable save and restore brightness - Timestamp is disabled. - "Timestamp is enabled. - -Limitations: -• This setting not only enables timestamps, but also allows users to hide the UI by clicking on the player background. -• As this is a feature in the development stage by Google, the layout may be broken." - Enable timestamps - Swiping up / down will not play the next / previous video. - Swiping up / down will play the next / previous video. - Enable swipe to change video - Navigation bar is opaque. - Navigation bar is translucent. - Enable translucent navigation bar - Do you wish to proceed? - Reset to default values. - Search %s - Package name of your installed external downloader app, such as YTDLnis. - Playlist downloader package name - Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. - Long press video downloader package name - Package name of your installed external downloader app, such as NewPipe or YTDLnis. - Video downloader package name - Displays the optimization dialog for GMSCore at each application startup. - Show optimization dialog for GMSCore - Featured places, Games, and Music sections are shown. - Featured places, Games, and Music sections are hidden. - Hide Attributes section - How this content was made section is shown. - How this content was made section is hidden. - Hide Contents section - Double-tap overlay filter is shown. - Double-tap overlay filter is hidden. - Hide double-tap overlay filter - Expandable shelves are shown. - Expandable shelves are hidden. - Hide expandable shelves - "Fullscreen ads are blocked. - -Side effect: Community post images may be blocked in fullscreen." - Fullscreen ads are closed through the Close button. - Close fullscreen ads - Image search button is shown. - Image search button is hidden. - Hide image search button - Key concepts section is shown. - Key concepts section is hidden. - Hide Key concepts section - Surrounding a keyword/phrase with double-quotes will prevent partial matches of video titles and channel names.<br><br>For example,<br><b>\"ai\"</b> will hide the video: <b>How does AI work?</b><br>but will not hide: <b>What does fair use mean?</b> - Match whole words - Keyword will hide all videos: %s. - Add quotes to use keyword: %s. - Keyword has conflicting declarations: %s. - Keyword is too short and requires quotes: %s. - Live chat messages are shown.\n\nThis setting applies to Shorts live videos too. - Live chat messages are hidden.\n\nThis setting applies to Shorts live videos too. - Hide live chat messages - Live chat replay button is shown.\n\nIt appears in fullscreen when closing live chat. - Live chat replay button is hidden.\n\nIt appears in fullscreen when closing live chat. - Hide live chat replay button - Hide videos with less than 1,000 views from home feeds that have been uploaded from unsubscribed channels. - Hide low views video - Navigation bar is shown. - Navigation bar is hidden. - Hide navigation bar - Ambient mode menu is shown. - Ambient mode menu is hidden. - Hide Ambient mode menu - Quality menu header is shown. - Quality menu header is hidden. - Hide quality menu header - Sleep timer menu is shown. - Sleep timer menu is hidden. - Hide Sleep timer menu - Promotion alert banner is shown. - Promotion alert banner is hidden. - Hide promotion alert banner - Related videos are shown. - Related videos are hidden. - Hide related videos - "This setting limits the maximum number of layouts that can be loaded on the player screen. - -If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." - Disabled comments button or with label \"0\" is shown. - Disabled comments button or with label \"0\" is hidden. - Hide disabled comments button - "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." - "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." - Hide floating button - Green screen button is shown. - Green screen button is hidden. - Hide Green screen button - Live chat header is shown.\n\nBack button in header will not be hidden. - Live chat header is hidden.\n\nBack button in header will not be hidden. - Hide live chat header - Location button is shown. - Location button is hidden. - Hide location button - Paused header is shown. - Paused header is hidden. - Hide paused header - Button background is shown. - Button background is hidden. - Hide Play & Pause button background - Save music button is shown. - Save music button is hidden. - Hide Save music button - Search suggestions button is shown. - Search suggestions button is hidden. - Hide search suggestions button - Shopping button is shown. - Shopping button is hidden. - Hide Shopping button - Stickers are shown. - Stickers are hidden. - Hide stickers - Super Thanks button is shown. - Super Thanks button is hidden. - Hide Super Thanks button - Trends button is shown. - Trends button is hidden. - Hide Trends button - Use template button is shown. - Use template button is hidden. - Hide Use template button - Use this sound button is shown. - Use this sound button is hidden. - Hide Use this sound button - Subscriptions carousel is shown. - Subscriptions carousel is hidden. - Hide subscriptions carousel - Suggested video end screen is shown. - "Suggested video end screen is hidden when autoplay is turned off. - -Autoplay can be changed in YouTube settings: -Settings → Autoplay → Autoplay next video" - "Hide videos with UPCOMING label. - -Note: Enabling this also hides the Notify me button." - Hide UPCOMING video - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views - Zoom overlay is shown. - Zoom overlay is hidden. - Hide zoom overlay - Afn Blue - Afn Red - MMT Blue - MMT Green - MMT Orange - MMT Pink - MMT Turquoise - MMT Yellow - Revancify Yellow - Vanced Black - Vanced Light - Xisr Yellow - YouTube - Double-tap action is disabled. - "Double-tap action is enabled. - -• Double-tap to change the minimized video to a larger size. -• Double-tap once more to change to the original size." - Enable double-tap action - Drag and drop is disabled. - Drag and drop is enabled. - Enable drag and drop - Expand and close buttons are shown. - Buttons are hidden.\n(swipe miniplayer to expand or close) - Hide expand and close buttons - Skip forward and back are shown. - Skip forward and back are hidden. - Hide skip forward and back buttons - Subtexts are shown. - Subtexts are hidden. - Hide subtexts - Miniplayer overlay opacity must be between 0-100. - Opacity value between 0-100, where 0 is transparent. - Overlay opacity - Original - Phone - Tablet - Modern 1 - Modern 2 - Modern 3 - Miniplayer type - Tap to mute volume of the current video. Tap again to unmute. - Show mute volume button - "Tap to generate a playlist of all videos from channel from oldest to newest. -Tap and hold to undo." - Show time-ordered playlist button - "Tap to open whitelist dialog. -Tap and hold to open whitelist setting dialog. - Show whitelist button - If shown, the native playlist download button opens the native in-app downloader. - Native playlist download button is always shown, and in public playlists, it opens your external downloader. - Override playlist download button - Native video download button opens the native in-app downloader. - Native video download button opens your external downloader. - Override video download button - YouTube Music is required to override button action. Tap here to download YouTube Music. - Prerequisite - YouTube Music button opens the native app. - YouTube Music button opens the RVX Music. - Override YouTube Music button - Animation / Feedback - Download button - Image region restrictions - Suggested actions - Overrides the click action of in-app buttons. - Hook buttons - Change the style of the in app minimized player. - Miniplayer - Hide or show navigation bar section components. - Navigation bar - Spoof the streaming data to prevent playback issues. - Spoof streaming data - Change settings related with watch history. - Watch history - Quick actions top margin must be between 0-32. - Offset - A toast will not be shown when changing the default playback speed. - A toast will be shown when changing the default playback speed. - Show a toast - A toast will not be shown when changing the default video quality. - A toast will be shown when changing the default video quality. - Show a toast - Channel handle is used. - Channel name is used. - Replace channel handle - Invalid time duration. - Adjust: Mark Start and End Time for segment - Verify the Segment - Edit the Segment - Forward by Specified Time (Default: 150ms) - Set %s as the start or end of a new segment? - Publish Created Segment - Rewind by Specified Time (Default: 150ms) - Tap here to view your segments. - Original - Thumbs up - Thumbs up (Cairo) - Heart - Heart (Tint) - Hidden - Double-tap animation - Meta panel bottom margin must be between 0-64. - Configure the spacing from the seekbar to the meta panel, between 0-64. - Meta panel bottom margin - Height percentage must be between 0-100 (%). - Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). - Height percentage of empty space - Press and hold the timestamp to change the Shorts repeat status. - Timestamp long press action - Turning on this setting may cause video playback issues. - Speed overlay value must be between 0-8.0. - Version not spoofed - Version spoofed - 18.33.40 - Restore old Shorts action bar - 18.38.45 - Restore old default video quality behavior - 18.48.39 - Disables views and likes from being updated in real time - "App version will be spoofed to an older version of YouTube. - -This will change the appearance and features of the app, but unknown side effects may occur. - -If later turned off, it is recommended to clear the app data to prevent UI bugs." - iOS video codec is AVC (H.264), VP9, or AV1. - iOS video codec is AVC (H.264). - Force iOS AVC (H.264) - "Enabling this might improve battery life and fix playback stuttering. - -AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - "• Audio track menu is missing. -• Stable volume is not available." - "• Audio track menu is missing. -• Stable volume is not available." - "• Movies or paid videos may not play. -• Livestreams start from the beginning. -• Videos may end 1 second early. -• No opus audio codec." - Spoofing side effects - • Video may not play. - Client used to fetch streaming data is hidden in Stats for nerds. - Client used to fetch streaming data is shown in Stats for nerds. - Show in Stats for nerds - "Streaming data is not spoofed. Video playback may not work." - Streaming data is spoofed. - Spoof streaming data - Android - Android TV - Android VR - iOS - Default client - Turning off this setting may cause video playback issues. - Swipeable area size cannot be more than 50. - Percentage of swipeable screen area.\n\nNote: This will also change the size of the screen area for the double-tap-to-seek gesture. - Swipe overlay screen size - Create button is not switched with Notifications button. - "Create button is switched with Notifications button. - -Note: Enabling this also forcibly hides video ads." - "Disabling this might load more ads from the server. - -Also, ads will no longer be blocked in Shorts. - -If this setting do not take effect, try switching to Incognito mode." - RVX Music - %s is not installed. Please install it. - Package name of installed RVX Music. - RVX Music package name - • Watch history is blocked. - "• Follows the watch history settings of Google account. -• Watch history may not work due to DNS or VPN." - • Follows the watch history settings of Google account. - Status of watch history - Click to open the YouTube watch history management. - Manage all history - Original - Replace domain - Block watch history - Watch history type - Failed to add channel \'%1$s\' to the %2$s whitelist. - Channel \'%1$s\' was added to the %2$s whitelist. - There are no whitelisted channels. - Not added to whitelist. - Failed to load channel information. - Added to whitelist. - Playback speed - Remove channel \'%1$s\' from %2$s whitelist? - Failed to remove channel \'%1$s\' from the %2$s whitelist. - Channel \'%1$s\' was removed from the %2$s whitelist. - Check or remove the list of channels added to the whitelist. - Channel whitelist - SponsorBlock - diff --git a/src/main/resources/youtube/translations/bn/strings.xml b/src/main/resources/youtube/translations/bn/strings.xml deleted file mode 100644 index 493e94fde..000000000 --- a/src/main/resources/youtube/translations/bn/strings.xml +++ /dev/null @@ -1,1193 +0,0 @@ - - - Turn on accessibility controls for the video player? - Your controls are modified because an accessibility service is on. - Continue - "GmsCore does not have permission to run in the background. - -Follow the 'Don't kill my app' guide for your phone, and apply the instructions to your MicroG installation. - -This is required for the app to work." - "GmsCore battery optimizations must be disabled to prevent issues. - -Tap on the continue button and disable battery optimizations." - Open website - Action needed - Enable cloud messaging to receive notifications. - Open GmsCore - GmsCore is not installed. Install it. - "DeArrow provides crowd-sourced thumbnails for YouTube videos. These thumbnails are often more relevant than those provided by YouTube. - -If enabled, video URLs will be sent to the API server and no other data is sent. If a video does not have DeArrow thumbnails, then the original or still captures are shown. - -Tap here to learn more about DeArrow." - DeArrow - The URL of the DeArrow thumbnail cache endpoint. - DeArrow API endpoint - Toast is not shown if DeArrow is not available. - Toast is shown if DeArrow is not available. - Show a toast if API is not available - DeArrow temporarily not available. (status code: %s) - DeArrow temporarily not available. - Home tab - You tab - Original thumbnails - DeArrow & Original thumbnails - DeArrow & Still captures - Still captures - Player playlists, recommendations - Search results - Still captures are taken from the beginning / middle / end of each video. These images are built into YouTube and no external API is used. - Still video captures - Using high quality still captures. - Using medium quality still captures. Thumbnails will load faster, but live streams, unreleased, or very old videos may show blank thumbnails. - Use fast still captures - Beginning of video - Middle of video - End of video - Video time to take still captures from - Subscriptions tab - Append time stamp information is disabled. - Append time stamp information is enabled. - Append time stamp information - Append playback speed. - Append video quality. - Append information type - Ambient mode is disabled in battery saver mode. - Ambient mode is enabled in battery saver mode. - Bypass ambient mode restrictions - Switch toggles are used. - Text toggles are used. - Change toggle type - Autoplay - Default - Pause - Repeat - Change shorts repeat state - Default - Explore - History - Library - Liked videos - Search - Shorts - Subscriptions - Trending - Change start page - Generic headers is enabled. - Premium header is enabled. - Change YouTube header - List of component path builder strings to filter separated by new line. - Custom filter - Custom filter is disabled. - Custom filter is enabled. - Enable custom filter - Invalid custom filter: %s. - Old style flyout menu is used. - Custom dialog is used. - Custom playback speed menu type - Custom speeds must be less than %sx. Using default values. - Invalid custom playback speeds. Using default values. - Add or change available playback speeds. - Edit custom playback speeds - Opacity value between 0-100, where 0 is transparent. - Custom player overlay opacity - Type the hex code of the seekbar color. - Custom seekbar color value - To open RVX in an external browser, turn on \'Open supported links\' and enable supported web addresses. - Open default app settings - Default playback speed - Default video quality on Mobile network - Default video quality on Wi-Fi network - Disables ambient mode for fullscreen only. - Disable ambient mode in fullscreen - Disables ambient mode. - Disable ambient mode - Forced auto audio tracks are enabled. - Forced auto audio tracks are disabled. - Disable forced auto audio tracks - Forced auto captions are enabled. - Forced auto captions are disabled. - Disable forced auto captions - Auto player popup panels are disabled. - Auto player popup panels are enabled. - Disable player popup panels - Default playback speed is enabled in live stream. - Default playback speed is disabled in live stream. - Disable playback speed in live stream - Engagement panel is enabled. - Engagement panel is disabled. - Disable engagement panel - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable chapters haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable scrubbing haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable seek haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable seek undo haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable zoom haptic feedback - Auto HDR brightness is enabled. - Auto HDR brightness is disabled. - Disable auto HDR brightness - HDR video is enabled. - HDR video is disabled. - Disable HDR video - Video orientation follows device settings in fullscreen. - Video orientation is portrait mode in fullscreen. - Disable landscape mode - "Disable CronetEngine's QUIC protocol." - Disable QUIC protocol - Shorts player will resume on app startup - Shorts player will not resume on app startup - Disable resuming Shorts player - Rolling numbers are animated. - Rolling numbers are not animated. - Disable rolling number animations - "Disable 'Playing at 2x speed' while holding down. - -Note: -• Disabling the speed overlay restores the 'Slide to seek' behavior of the old layout. -• This setting does not force the speed overlay to be enabled." - Disable speed overlay - Splash animation is enabled. - Splash animation is disabled. - Disable splash animation - "Disables the following interactions when the video description is expanded: - -• Tap to scroll. -• Tap and hold to select text." - Disable video description interaction - Controls overlay fills the fullscreen. - Controls overlay does not fill the fullscreen. - Enable compact controls overlay - Custom playback speed is disabled. - Custom playback speed is enabled. - Enable custom playback speed - Custom seekbar color is disabled. - Custom seekbar color is enabled. - Enable custom seekbar color - Debug logs do not include buffer. - Debug logs include buffer. - Enable debug buffer logging - Debug logs are disabled. - Debug logs are enabled. - Enable debug logging - Default playback speed does not apply to Shorts. - Default playback speed applies to Shorts. - Enable shorts default playback speed - External browser is disabled. - External browser is enabled. - Enable external browser - Gradient loading screen is disabled. - Gradient loading screen is enabled. - Enable gradient loading screen - Spacing between navigation buttons does not become narrower. - Spacing between navigation buttons becomes narrower. - Enable narrow navigation buttons - Following default redirect policy. - Bypassing URL redirects. - Enable open links directly - Tricks the dpi to use some phone layouts. - Enable phone layout - Seekbar tapping is disabled. - Seekbar tapping is enabled. - Enable seekbar tapping - Brightness swipe is disabled. - Brightness swipe is enabled. - Enable brightness gesture - Haptic feedback is disabled. - Haptic feedback is enabled. - Enable haptic feedback - Lowest value of the brightness gesture does not activate auto-brightness. - Lowest value of the brightness gesture activates auto-brightness. - Enable auto-brightness gesture - Touch to activate swipe gesture. - Touch and hold to activate swipe gesture. - Enable press-to-swipe gesture - Volume swipe is disabled. - Volume swipe is enabled. - Enable volume gesture - Tricks the dpi to use some tablet layouts. - Enable tablet layout - Entering fullscreen when swiping down below the video player is disabled. - Entering fullscreen when swiping down below the video player is enabled. - Enable watch panel gestures - "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." - Enable wide search bar in You tab - Wide search bar is disabled. - Wide search bar is enabled. - Enable wide search bar - Wide search bar does not include YouTube header. - Wide search bar includes YouTube header. - Enable wide search bar with header - Description - "Enter a title in the video description panel. -These characters vary depending on your language. -'Expand video description' may not work if you save an incorrect string." - Title in video description panel - Video description is expanded manually. - Video description is expanded automatically. - Expand video description - Restart to load the layout normally - Refresh and restart - Failed to export settings. - Settings were successfully exported. - Export settings to file. - Export settings - Import - Copy - Import or export settings as text. - Import / Export as text - Failed to import settings. - Settings reset to default. - Settings were successfully imported. - Import settings from saved file. - Import settings - Reset - ReVanced Extended - External downloader - ইনস্টল করা নেই - "%1$s is not installed. -Please download %2$s from the website." - Warning - %s is not installed. Please install it. - "Videos will be switched to fullscreen in the following situations: - -• When a timestamp in the comments is clicked on. -• When a video is started." - Force fullscreen - List of account menu names to filter separated by a new line. - Account menu filter - "Hide elements of the account menu and You tab. -Some components may not be hidden." - Hide account menu - Album cards are shown. - Album cards are hidden. - Hide album cards - Autoplay preview container is shown. - Autoplay preview container is hidden. - Hide autoplay preview container - Browse store button is shown. - Browse store button is hidden. - Hide browse store button - "Hides following shelves: -• Breaking news -• Continue watching -• Explore more channels -• Listen again -• Shopping -• Watch it again" - Hide carousel shelf - Shown in feed. - Hidden in feed. - Hide in feed - Shown in related videos. - Hidden in related videos. - Hide in related videos - Shown in search results. - Hidden in search results. - Hide in search results - Channel guidelines are shown. - Channel guidelines are hidden. - Hide channel guidelines - Channel member shelf is shown. - Channel member shelf is hidden. - Hide channel member shelf - Links at the top of channel profile is shown. - Links at the top of channel profile is hidden. - Hide channel profile links - "Shorts -Playlists -Store" - List of channel tab names to filter separated by a new line. - Channel tab filter - Channel tab filter is disabled. - Channel tab filter is enabled. - Enable channel tab filter - Channel watermark is shown. - Channel watermark is hidden. - Hide channel watermark - Chapters sections are shown. - Chapters sections are hidden. - Hide chapters sections - Chips shelf is shown. - Chips shelf is hidden. - Hide chips shelf - Clip button is shown. - Clip button is hidden. - Hide clip button - Create shorts button is shown. - Create shorts button is hidden. - Hide create shorts button - Thanks button is shown. - Thanks button is hidden. - Hide thanks button - Timestamp and emoji buttons are shown. - Timestamp and emoji buttons are hidden. - Hide timestamp and emoji buttons - Comments by members banner is shown. - Comments by members banner is hidden. - Hide comments by members banner - Comments section is shown in home feed. - Comments section is hidden in home feed. - Hide comments section in home feed - Comments section is shown. - Comments section is hidden. - Hide comments section - Shown in channel. - Hidden in channel. - Hide in channel - Shown in home feed and related videos. - Hidden in home feed and related videos. - Hide in home feed and related videos - Shown in subscriptions feed. - Hidden in subscriptions feed. - Hide in subscriptions feed - Crowdfunding box is shown. - Crowdfunding box is hidden. - Hide crowdfunding box - Download button is shown. - Download button is hidden. - Hide download button - End screen cards are shown. - End screen cards are hidden. - Hide end screen cards - Expandable chips are shown. - Expandable chips are hidden. - Hide expandable chip under videos - Captions button is shown. - Captions button is hidden. - Hide feed captions button - List of flyout menu names to filter separated by a new line. - Feed flyout menu filter - Feed flyout menu filter is disabled. - Feed flyout menu filter is enabled. - Enable feed flyout menu filter - Feed search bar is shown. - Feed search bar is hidden. - Hide feed search bar - Feed surveys are shown. - Feed surveys are hidden. - Hide feed surveys - Film strip overlay is shown. - Film strip overlay is hidden. - Hide film strip overlay - Floating microphone button is shown. - Floating microphone button is hidden. - Hide floating microphone button - "'For You' shelves are shown." - "'For You' shelves are hidden." - "Hide 'For You' shelf" - Fullscreen ads are shown. - Fullscreen ads are hidden. - Hide fullscreen ads - General ads are shown. - General ads are hidden. - Hide general ads - YouTube Premium promotion is shown. - YouTube Premium promotion is hidden. - Hide YouTube Premium promotion - Gray separators are shown. - Gray separators are hidden. - Hide gray separator - Handle is shown. - Handle is hidden. - Hide handle - Image shelves are shown. - Image shelves are hidden. - Hide image shelf - Info cards sections are shown. - Info cards sections are hidden. - Hide info cards sections - Info cards are shown. - Info cards are hidden. - Hide info cards - Info panels are shown. - Info panels are hidden. - Hide info panels - Join button is shown. - Join button is hidden. - Hide join button - "Home / Subscription / Search results are filtered to hide content that matches keyword phrases. - -Limitations: -• Some Shorts may not be hidden. -• Some UI components may not be hidden. -• Searching for a keyword may show no results." - About keyword filtering - Comments are not filtered. - Comments are filtered. - Hide comments by keywords - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by keywords - "Keywords and phrases to hide, separated by new lines. -Words with uppercase letters in the middle must be entered with the casing (ie: iPhone, TikTok, LeBlanc)." - Keywords to hide - Search results are not filtered. - Search results are filtered. - Hide search results by keywords - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by keywords - Invalid keyword. Cannot use: \'%s\' as a filter - Latest posts are shown. - Latest posts are hidden. - Hide latest posts - "'Latest videos' button is shown." - "'Latest videos' button is hidden." - "Hide 'Latest videos' button" - Like and dislike buttons are shown. - Like and dislike buttons are hidden. - Hide like and dislike buttons - Medical panels are shown. - Medical panels are hidden. - Hide medical panels - Merchandise shelves are shown. - Merchandise shelves are hidden. - Hide merchandise shelf - Mix playlist is shown. - Mix playlist is hidden. - Hide mix playlist - Movies shelves are shown. - Movies shelves are hidden. - Hide movies shelf - Create button is shown. - Create button is hidden. - Hide create button - Home button is shown. - Home button is hidden. - Hide home button - Navigation label is shown. - Navigation label is hidden. - Hide navigation label - Library button is shown. - Library button is hidden. - Hide library button - Notifications button is shown. - Notifications button is hidden. - Hide notifications button - Shorts button is shown. - Shorts button is hidden. - Hide shorts button - Subscriptions button is shown. - Subscriptions button is hidden. - Hide subscriptions button - "'Notify me' button is shown." - "'Notify me' button is hidden." - "Hide 'Notify me' button" - Paid promotion label is shown. - Paid promotion label is hidden. - Hide paid promotion label - Playables are shown. - Playables are hidden. - Hide Playables - Autoplay button is shown. - Autoplay button is hidden. - Hide autoplay button - Captions button is shown. - Captions button is hidden. - Hide captions button - Cast button is shown. - Cast button is hidden. - Hide cast button - Collapse button is shown. - Collapse button is hidden. - Hide collapse button - Audio track menu is shown. - Audio track menu is hidden. - Hide audio track menu - Captions menu footer is shown. - Captions menu footer is hidden. - Hide captions menu footer - Captions menu is shown. - Captions menu is hidden. - Hide captions menu - Help & feedback menu is shown. - Help & feedback menu is hidden. - Hide help & feedback menu - Listen with YouTube Music menu is shown. - Listen with YouTube Music menu is hidden. - Hide listen with YouTube Music menu - Lock screen menu is shown. - Lock screen menu is hidden. - Hide lock screen menu - Loop video menu is shown. - Loop video menu is hidden. - Hide loop video menu - More information menu is shown. - More information menu is hidden. - Hide more information menu - Picture-in-picture menu is shown. - Picture-in-picture menu is hidden. - Hide picture-in-picture menu - Playback speed menu is shown. - Playback speed menu is hidden. - Hide playback speed menu - Premium controls menu is shown. - Premium controls menu is hidden. - Hide premium controls menu - Quality menu footer is shown. - Quality menu footer is hidden. - Hide quality menu footer - Report menu is shown. - Report menu is hidden. - Hide report menu - Stable volume menu is shown. - Stable volume menu is hidden. - Hide stable volume menu - Stats for nerds menu is shown. - Stats for nerds menu is hidden. - Hide stats for nerds menu - Watch in VR menu is shown. - Watch in VR menu is hidden. - Hide watch in VR menu - Fullscreen button is shown. - Fullscreen button is hidden. - Hide fullscreen button - Buttons are shown. - Buttons are hidden. - Hide previous & next button - YouTube Music button is shown. - YouTube Music button is hidden. - Hide YouTube Music button - Save to playlist button is shown. - Save to playlist button is hidden. - Hide save to playlist button - Podcast sections are shown. - Podcast sections are hidden. - Hide podcast sections - Preview comment is shown. - Preview comment is hidden. - Hide preview comment - This changes the size of the comment section, so it is impossible to open a live chat replay in the comment section. - This does not change the size of the comment section, so it is possible to open the live chat replay in the comment section. - Hide preview comment type - Comment button is shown. - Comment button is hidden. - Hide comment button - Dislike button is shown. - Dislike button is hidden. - Hide dislike button - Like button is shown. - Like button is hidden. - Hide like button - Live chat button is shown. - Live chat button is hidden. - Hide live chat button - More button is shown. - More button is hidden. - Hide more button - Open mix playlist button is shown. - Open mix playlist button is hidden. - Hide open mix playlist button - Open playlist button is shown. - Open playlist button is hidden. - Hide open playlist button - Save to playlist button is shown. - Save to playlist button is hidden. - Hide save to playlist button - Share button is shown. - Share button is hidden. - Hide share button - Quick actions container is shown. - Quick actions container is hidden. - Hide quick actions container - "Hides following recommended videos: - -• Videos with 'Only for Membership' tag -• Videos with the phrases such as 'People also watched' at the bottom of the video -• Videos uploaded from channels not subscribed to that have less than 1,000 views" - Hide recommended videos - Related video overlay is shown. - Related video overlay is hidden. - Hide related video overlay - Remix button is shown. - Remix button is hidden. - Hide remix button - Report button is shown. - Report button is hidden. - Hide report button - Rewards button is shown. - Rewards button is hidden. - Hide rewards button - Thumbnails in the search term history are shown. - Thumbnails in the search term history are hidden. - Hide search term thumbnail - Seek message is shown. - Seek message is hidden. - Hide seek message - Seek undo message is shown. - Seek undo message is hidden. - Hide seek undo message - Chapters are shown in seekbar. - Chapters are hidden in seekbar. - Hide seekbar chapters - Video player seekbar is shown. - Video player seekbar is hidden. - Thumbnail seekbar is shown. - Thumbnail seekbar is hidden. - Hide seekbar in video thumbnails - Hide seekbar in video player - Self sponsored cards are shown. - Self sponsored cards are hidden. - Hide self sponsored cards - "Account -Data saving -Captions" - List of YouTube settings menu names to filter separated by a new line. - YouTube settings menu filter - Hide elements in YouTube settings menu. - Hide YouTube settings menu - Share button is shown. - Share button is hidden. - Hide share button - Shop button is shown. - Shop button is hidden. - Hide shop button - Shopping links are shown. - Shopping links are hidden. - Hide shopping links - Channel bar is shown. - Channel bar is hidden. - Hide channel bar - Comments button is shown. - Comments button is hidden. - Hide comments button - Dislike button is shown. - Dislike button is hidden. - Hide dislike button - Video link label is shown. - Video link label is hidden. - Hide full video link label - Info panels are shown. - Info panels are hidden. - Hide info panels - Join button is shown. - Join button is hidden. - Hide join button - Like button is shown. - Like button is hidden. - Hide like button - Navigation bar is shown. - Navigation bar is hidden. - Hide navigation bar - Paid promotion label is shown. - Paid promotion label is hidden. - Hide paid promotion label - Paused overlay buttons are shown. - Paused overlay buttons are hidden. - Hide paused overlay buttons - Remix button is shown. - Remix button is hidden. - Hide remix button - Share button is shown. - Share button is hidden. - Hide share button - Shown in watch history. - Hidden in watch history. - Hide in watch history - Shown in home feed and related videos. - Hidden in home feed and related videos. - Hide in home feed and related videos - Shown in search results. - Hidden in search results. - Hide in search results - Shown in subscriptions feed. - Hidden in subscriptions feed. - Hide in subscriptions feed - "Hides Shorts shelves. - -Limitation: Official headers in search results will be hidden." - Hide shorts shelf - Shop button is shown. - Shop button is hidden. - Hide shop button - Sound button is shown. - Sound button is hidden. - Hide sound button - Metadata label is shown. - Metadata label is hidden. - Hide sound metadata label - Subscribe button is shown. - Subscribe button is hidden. - Hide subscribe button - Tagged products are shown. - Tagged products are hidden. - Hide tagged products - Toolbar is shown. - Toolbar is hidden. - Hide toolbar - Title is shown. - Title is hidden. - Hide video title - "'Show more' button is shown." - "'Show more' button is hidden." - "Hide 'Show more' button" - Snack bar is shown. - Snack bar is hidden. - Hide snack bar - Start trial button is shown. - Start trial button is hidden. - Hide start trial button - Suggested actions shown. - Suggested actions hidden. - Hide suggested actions - "This setting has been deprecated. - -Instead, use the 'Settings → Autoplay → Autoplay next video' setting. - -Note: -• If you have any issues with 'Suggested video end screen', try restarting the app." - Hide suggested video end screen - Thanks button is shown. - Thanks button is hidden. - Hide thanks button - Ticket shelves are shown. - Ticket shelves are hidden. - Hide ticket shelf - Time stamp is shown. - Time stamp is hidden. - Hide time stamp - Timed reactions are shown. - Timed reactions are hidden. - Hide timed reactions - Cast button is shown. - Cast button is hidden. - Hide cast button - Create button is shown. - Create button is hidden. - Hide create button - Notification button is shown. - Notification button is hidden. - Hide notification button - Transcript sections are shown. - Transcript sections are hidden. - Hide transcript sections - Video ads are shown. - Video ads are hidden. - Hide video ads - Hide recommended videos with less than a specified number of views. - Hide recommended videos by views - Videos with views greater than this number will be hidden. - Greater than views - Videos with views less than this number will be hidden. - Less than views - K -> 1 000\nM -> 1 000 000\nB -> 1 000 000 000\nviews -> views - Specify your language template for the number of views shown under each video in the user interface. Each key (a letter/word in your language) -> value (meaning of the key) must be on a new line. Keys go before \"->\" sign. If you switch app or system language you have to reset this setting.\n\nExamples:\nEnglish: 10K views = K -> 1000, views -> views\nSpanish: 10 K vistas = K -> 1000, vistas -> views - View keys - View products banner is shown. - View products banner is hidden. - Hide view products banner - Voice search button is shown. - Voice search button is hidden. - Hide voice search button - Web search results are shown. - Web search results are hidden. - Hide web search results - Custom - Stock - MMT - Revancify Blue - Revancify Red - Keeps landscape mode when turning the screen off and on in fullscreen. - The amount of milliseconds the landscape mode is forced. - Keep landscape mode timeout - Keep landscape mode - Stock - ওভারলে বাটন - "Tap to toggle always repeat states. -Tap and hold to toggle pause after repeat states." - Show always repeat button - "Tap to copy video URL. -Tap and hold to copy video URL with timestamp." - "Tap to copy video URL with timestamp. -Tap and hold to copy video timestamp." - Show copy timestamp URL button - Show copy video URL button - Tap to launch external downloader. - Show external download button - Tap and hold to change button state. - Playback speed reseted (1.0x). - "Tap to open speed dialog. -Tap and hold to set playback speed to 1.0x." - Show speed dialog button - Excluded - Included - Normal - Action buttons - Additional settings - Experimental Flags - Import / Export as file - Import / Export as text - Keyword filter - Others - Overlay buttons - Patch information - Quick actions - Recommended video - Shorts shelf - Tool used - View count filter - Hide or show elements in account menu and You tab. - Account menu - Hide or show action buttons under videos. - Action buttons - Ads - Alternative thumbnails - Bypass ambient mode restrictions or disable ambient mode. - Ambient mode - Hide or show the category bar in the feed, search, and related videos. - Category bar - Hide or show channel bar components under videos. - Channel bar - Hide or show components in the channel profile. - Channel profile - Hide or show comments section components. - Comments - Hide or show community posts in the feed and channel. - Community posts - Hide components using custom filters. - Custom filter - Hide or show flyout menu in the feed. - Flyout menu - Feed - Hide or change components related to fullscreen. - Fullscreen - General - Disable or enable haptic feedback. - Haptic feedback - Import or export settings. - Import / Export settings - Miscellaneous - Information about applied patches. - Patch information - Hide or show buttons in videos. - Player buttons - Hide or change flyout menu in the video player. - Flyout menu - Player - Return YouTube Dislike - SponsorBlock - Customize the seekbar components. - Seekbar - Hide elements in YouTube settings menu. - Settings menu - Hide or show components in the shorts player. - Shorts player - Shorts - Swipe controls - Hide or change components located on the toolbar such as toolbar buttons, search bar, header. - Toolbar - Hide or show video description components. - Video description - Hide videos by keywords or views. - Video filter - Video - Configure the spacing from the seekbar to the quick action container, between 0-32. - Quick actions top margin - "Forcefully rejects the software AV1 codec response. -After about 20 seconds of buffering, switches to different codec." - Reject software AV1 codec response - Fallback process causes about 20 seconds of buffering. - Playback speed changes only apply to the current video. - Playback speed changes apply to all videos. - Remember playback speed changes - Changing default speed to %s. - Quality changes only apply to the current video. - Quality changes apply to all videos. - Remember video quality changes - Changing default mobile data quality to %s. - Failed to set video quality. - Changing default Wi-Fi quality to %s. - "Remove viewer discretion dialog. -This does not bypass the age restriction. It just accepts it automatically." - Remove viewer discretion dialog - Replace software AV1 codec with VP9 codec. - Replace software AV1 codec - Tap to show the remaining time. - Tap to open playback speed or video quality flyout menu. - Replace time stamp action - Replaces create button with settings button. - Replace create button - "Tap to open YouTube Settings. -Tap and hold to open RVX Settings." - "Tap to open RVX Settings. -Tap and hold to open YouTube Settings." - Action type to assign to button - Seekbar thumbnails will appear in fullscreen. - Seekbar thumbnails will appear above the seekbar. - Restore old seekbar thumbnails - Old video quality menu is not shown. - Old video quality menu is shown. - Restore old video quality menu - About - Dislike data is provided by the Return YouTube Dislike API. Tap here to learn more. - ReturnYouTubeDislike.com - Like button styled for best appearance. - Like button styled for minimum width. - Compact like button - Dislikes shown as number. - Dislikes shown as percentage. - Dislikes as percentage - Dislikes are not shown. - Dislikes are shown. - Enable Return YouTube Dislike - Dislikes not available (client API limit reached). - Dislikes not available (status %d). - Dislikes temporarily not available (API timed out). - Dislikes not available (%s). - Reload video to vote using Return YouTube Dislike - Dislikes hidden on Shorts. - Dislikes shown on Shorts. - "Dislikes shown on Shorts. - -Limitation: Dislikes may not appear in incognito mode." - Show dislikes on Shorts - Toast is not shown if Return YouTube Dislike is not available. - Toast is shown if Return YouTube Dislike is not available. - Show a toast if API is not available - Removes tracking query parameters from the URLs when sharing links. - Sanitize sharing links - About - sponsor.ajay.app - Data is provided by the SponsorBlock API. Tap here to learn more and see downloads for other platforms. - API URL changed. - API URL is invalid. - API URL reset. - Appearance - Color changed. - Color: - Invalid color code. - Color reset. - Creating new segments - Change segment behavior - Automatically hide skip button - Skip button displayed for entire segment. - Skip button hides after a few seconds. - Use compact skip button - Skip button styled for best appearance. - Skip button styled for minimum width. - Show create new segment button - Create new segment button is not shown. - Create new segment button is shown. - Enable SponsorBlock - SponsorBlock is a crowd-sourced system for skipping annoying parts of YouTube videos. - Show voting button - Segment voting button is not shown. - Segment voting button is shown. - General - Adjust new segment step - Value must be a positive number. - Number of milliseconds the time adjustment buttons move when creating new segments. - Change API URL - The address SponsorBlock uses to make calls to the server. - Minimum segment duration - Segments shorter than this value (in seconds) will not be shown or skipped. - Enable skip count tracking - Skip count tracking is not enabled. - Lets the SponsorBlock leaderboard know how much time is saved. A message is sent to the leaderboard each time a segment is skipped. - Show a toast when skipping automatically - Toast is not shown. Tap here to see an example. - Toast is shown when a segment is automatically skipped. Tap here to see an example. - Show video length without segments - Full video length shown. - Video length minus all segments, shown in parentheses next to the full video length. - Your private user id - Private user id must be at least 30 characters long. - This should be kept private. This is like a password and should not be shared with anyone. If someone has this, they can impersonate you. - Already read - Read the SponsorBlock guidelines before creating new segments. - Show me - Follow the guidelines - Guidelines contain rules and tips for creating new segments. - View guidelines - Choose the segment category - The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit? - The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit? - Are the times correct? - Category is disabled in settings. Enable category to submit. - Do you want to edit the timing for the start or end of the segment? - Invalid time given. - Edit timing of segment manually - end - Mark two locations on the time bar first. - start - now - Preview the segment, and ensure it skips smoothly. - Start must be before the end. - Time the segment ends at - Time the segment begins at - New SponsorBlock segment - Reset - Reset color - Filler Tangent / Jokes - Tangential scenes added only for filler or humor that are not required to understand the main content of the video. Does not include segments providing context or background details. - Highlight - The part of the video that most people are looking for. - Interaction Reminder (Subscribe) - A short reminder to like, subscribe or follow them in the middle of content. If it is long or about something specific, it should instead be under self promotion. - Intermission / Intro Animation - An interval without actual content. Could be a pause, static frame, or repeating animation. Does not include transitions containing information. - Music: Non-Music Section - Only for use in music videos. Sections of music videos without music, that aren\'t already covered by another category. - Endcards / Credits - Credits or when the YouTube endcards appear. Not for conclusions with information. - Preview / Recap / Hook - Collection of clips that show what is coming up or what happened in the video or in other videos of a series, where all information is repeated elsewhere. - Unpaid / Self Promotion - Similar to \'Sponsor\' except for unpaid or self promotion. Includes sections about merchandise, donations, or information about who they collaborated with. - Sponsor - Paid promotion, paid referrals and direct advertisements. Not for self-promotion or free shout-outs to causes / creators / websites / products they like. - Copy - Failed to export: %s. - Import / Export settings - Your SponsorBlock JSON configuration that can be imported / exported to ReVanced Extended and other SponsorBlock platforms. - Your SponsorBlock JSON configuration that can be imported / exported to ReVanced Extended and other SponsorBlock platforms. This includes your private user id. Be sure to share this wisely. - Failed to import: %s. - Settings imported successfully. - Your settings contain a private SponsorBlock userid.\n\nYour user id is like a password and it should never be shared.\n - Do not show again - Settings copied to clipboard. - Skip automatically - Skip automatically once - Skip - Highlight - Skip filler - Skip to highlight - Skip interact - Skip intro - Skip intermission - Skip intermission - Skip non-music - Skip outro - Skip preview - Skip recap - Skip preview - Skip promo - Skip sponsor - Skip segment - Disable - Show in seek bar - Show a skip button - Skipped filler. - Skipped to highlight. - Skipped annoying reminder. - Skipped intro. - Skipped intermission. - Skipped intermission. - Skipped multiple segments. - Skipped a non-music section. - Skipped outro. - Skipped preview. - Skipped recap. - Skipped preview. - Skipped self promotion. - Skipped sponsor. - Skipped unsubmitted segment. - SponsorBlock temporarily not available. - SponsorBlock temporarily not available (status %d). - SponsorBlock temporarily not available (API timed out). - Stats - Stats temporarily not available (API is down). - Loading... - Your reputation is <b>%.2f</b> - You\'ve saved people from <b>%s</b> segments - %1$s hours %2$s minutes - %1$s minutes %2$s seconds - %s seconds - That\'s <b>%s</b> of their lives.<br>Tap here to see the leaderboard. - Tap here to see the global stats and top contributors. - SponsorBlock leaderboard - SponsorBlock is disabled. - You\'ve skipped <b>%s</b> segments - Reset skipped segments counter? - That\'s <b>%s</b>. - You\'ve created <b>%s</b> segments - Your username: <b>%s</b> - Tap here to change your username - Unable to change username: Status: %1$d %2$s. - Username successfully changed. - Can\'t submit the segment.\nAlready exists. - Can\'t submit the segment: %s. - Unable to submit segment: %s. - Unable to submit segment.\nRate Limited (too many from the same user or IP). - SponsorBlock is temporarily down. - Unable to submit segment (status: %1$d %2$s). - Segment submitted successfully. - Toast is not shown if SponsorBlock is not available. - Toast is shown if SponsorBlock is not available. - Show a toast if API is not available - Change category - Downvote - Unable to vote for segment: %s. - Unable to vote for segment (API timed out). - Unable to vote for segment (status: %1$d %2$s). - There are no segments to vote for. - Upvote - Settings copied to clipboard. - Time stamp copied to clipboard. (%s) - URL copied to clipboard. - URL with timestamp copied to clipboard. - "Shows the video title section in full screen. - -Limitation: Video title disappears when clicked." - Show video title section - If autoplay is turned on, next video will play after the countdown ends. - If autoplay is turned on, next video will play without a countdown. - Skip autoplay countdown - "Skip preloaded buffer at video start to bypass default video quality enforcement delay. - -• When the video starts, there is a delay of approximately 0.3 seconds, but the default video quality is applied immediately. -• Does not apply to HDR videos, live stream videos, videos shorter than 15 seconds." - Skip preloaded buffer - Toast is not shown. - Toast is shown. - Show a toast when skipped - Skipped preloaded buffer. - Speed overlay value between 0-8.0. - Speed overlay value - "Spoofing the client version to the old version. - -• This will change the appearance of the app, but unknown side effects may occur. -• If later turned off, the old UI may remain until clear the app data." - 17.33.42 - Restore old UI layout - 17.41.37 - Restore old playlist shelf - 18.05.40 - Restore old comment input box - 18.17.43 - Restore old player flyout panel - Spoof app version target - Type the spoof app version target. - Edit spoof app version - Spoof app version - Spoofs the device dimensions in order to unlock higher video qualities that may not be available on your device. - Spoof device dimensions - "Swipe gestures are disabled in 'Lock screen' mode." - "Swipe gestures are enabled in 'Lock screen' mode." - "Swipe gestures in 'Lock screen' mode" - Auto - The amount of threshold for swipe to occur. - Swipe magnitude threshold - The visibility of swipe overlay background. - Swipe background visibility - The text size for swipe overlay. - Swipe overlay text size - The amount of milliseconds the overlay is visible. - Swipe overlay timeout - "Switch the positions of the create button and notification button by spoofing device information. - -• Even if you change this setting, it may not take effect until you reboot the device. -• Disabling this setting loads more ads from the server side. -• You should disable this setting to make video ads visible." - Switch create with notifications - Stock - diff --git a/src/main/resources/youtube/translations/fi-rFI/missing_strings.xml b/src/main/resources/youtube/translations/fi-rFI/missing_strings.xml deleted file mode 100644 index c8a03773a..000000000 --- a/src/main/resources/youtube/translations/fi-rFI/missing_strings.xml +++ /dev/null @@ -1,413 +0,0 @@ - - - Don\'t show again - Invalid DeArrow API URL. - Still video captures - The domain to fetch images from.\nNote: Only enter the domain name, i.e., without the \"https\:\/\/\" prefix. - Alternative domain - Using original image host.\n\nEnabling this can fix missing images that are blocked in some regions. - Using image host yt4.ggpht.com. - Bypass image region restrictions - In-app share sheet is used. - System share sheet is used. - Change share sheet - Browse channels - Courses / Learning - Gaming - Live - Movies - Music - Sports - Watch later - Start page changes only once. - "Start page always changes. - -Limitation: Back button on the toolbar may not work." - Change start page type - Player overlay opacity must be between 0-100. - Ambient mode is enabled in fullscreen. - Ambient mode is disabled in fullscreen. - Ambient mode is enabled. - Ambient mode is disabled. - "Auto switch mix playlists is enabled when autoplay is turned on. - -Autoplay can be changed in YouTube settings: -Settings → Autoplay → Autoplay next video" - Auto switch mix playlists is disabled. - Disable switch mix playlists - Enabling this feature will disable automatic switching to YouTube Mix when playing music while autoplay is turned on. - Default playback speed is enabled for music. - "Default playback speed is disabled for music. - -Limitation: This setting may not apply to videos that do not include the 'Listen on YouTube Music' banner." - Disable playback speed for music - Like and Dislike buttons will glow when mentioned. - Like and Dislike buttons will not glow when mentioned. - Disable Like and Dislike button glow - Fountain animation is enabled above the Like button. - Fountain animation is disabled above the Like button. - Disable Like button animation - VP9 codec is enabled. - "VP9 codec is disabled. - -• Maximum resolution is 1080p. -• Video playback will use more internet data than VP9. -• VP9 codec is still used for HDR video." - Disable VP9 codec - Cairo seekbar is disabled. - "Cairo seekbar is enabled. - -Side effect: Cairo theme is also applied to notification dots." - Enable Cairo seekbar - Enable the OPUS codec if the player response includes the OPUS codec. - Enable OPUS codec - Do not save and restore brightness when exiting or entering fullscreen. - Save and restore brightness when exiting or entering fullscreen. - Enable save and restore brightness - Timestamp is disabled. - "Timestamp is enabled. - -Limitations: -• This setting not only enables timestamps, but also allows users to hide the UI by clicking on the player background. -• As this is a feature in the development stage by Google, the layout may be broken." - Enable timestamps - Swiping up / down will not play the next / previous video. - Swiping up / down will play the next / previous video. - Enable swipe to change video - Navigation bar is opaque. - Navigation bar is translucent. - Enable translucent navigation bar - Do you wish to proceed? - Reset to default values. - Search %s - Package name of your installed external downloader app, such as YTDLnis. - Playlist downloader package name - Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. - Long press video downloader package name - Package name of your installed external downloader app, such as NewPipe or YTDLnis. - Video downloader package name - Displays the optimization dialog for GMSCore at each application startup. - Show optimization dialog for GMSCore - Featured places, Games, and Music sections are shown. - Featured places, Games, and Music sections are hidden. - Hide Attributes section - How this content was made section is shown. - How this content was made section is hidden. - Hide Contents section - Double-tap overlay filter is shown. - Double-tap overlay filter is hidden. - Hide double-tap overlay filter - Expandable shelves are shown. - Expandable shelves are hidden. - Hide expandable shelves - "Fullscreen ads are blocked. - -Side effect: Community post images may be blocked in fullscreen." - Fullscreen ads are closed through the Close button. - Close fullscreen ads - Image search button is shown. - Image search button is hidden. - Hide image search button - Key concepts section is shown. - Key concepts section is hidden. - Hide Key concepts section - Surrounding a keyword/phrase with double-quotes will prevent partial matches of video titles and channel names.<br><br>For example,<br><b>\"ai\"</b> will hide the video: <b>How does AI work?</b><br>but will not hide: <b>What does fair use mean?</b> - Match whole words - Keyword will hide all videos: %s. - Add quotes to use keyword: %s. - Keyword has conflicting declarations: %s. - Keyword is too short and requires quotes: %s. - Live chat messages are shown.\n\nThis setting applies to Shorts live videos too. - Live chat messages are hidden.\n\nThis setting applies to Shorts live videos too. - Hide live chat messages - Live chat replay button is shown.\n\nIt appears in fullscreen when closing live chat. - Live chat replay button is hidden.\n\nIt appears in fullscreen when closing live chat. - Hide live chat replay button - Hide videos with less than 1,000 views from home feeds that have been uploaded from unsubscribed channels. - Hide low views video - Navigation bar is shown. - Navigation bar is hidden. - Hide navigation bar - Ambient mode menu is shown. - Ambient mode menu is hidden. - Hide Ambient mode menu - Quality menu header is shown. - Quality menu header is hidden. - Hide quality menu header - Sleep timer menu is shown. - Sleep timer menu is hidden. - Hide Sleep timer menu - Promotion alert banner is shown. - Promotion alert banner is hidden. - Hide promotion alert banner - Related videos are shown. - Related videos are hidden. - Hide related videos - "This setting limits the maximum number of layouts that can be loaded on the player screen. - -If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." - Disabled comments button or with label \"0\" is shown. - Disabled comments button or with label \"0\" is hidden. - Hide disabled comments button - "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." - "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." - Hide floating button - Green screen button is shown. - Green screen button is hidden. - Hide Green screen button - Live chat header is shown.\n\nBack button in header will not be hidden. - Live chat header is hidden.\n\nBack button in header will not be hidden. - Hide live chat header - Location button is shown. - Location button is hidden. - Hide location button - Paused header is shown. - Paused header is hidden. - Hide paused header - Button background is shown. - Button background is hidden. - Hide Play & Pause button background - Save music button is shown. - Save music button is hidden. - Hide Save music button - Search suggestions button is shown. - Search suggestions button is hidden. - Hide search suggestions button - Shopping button is shown. - Shopping button is hidden. - Hide Shopping button - Stickers are shown. - Stickers are hidden. - Hide stickers - Super Thanks button is shown. - Super Thanks button is hidden. - Hide Super Thanks button - Trends button is shown. - Trends button is hidden. - Hide Trends button - Use template button is shown. - Use template button is hidden. - Hide Use template button - Use this sound button is shown. - Use this sound button is hidden. - Hide Use this sound button - Subscriptions carousel is shown. - Subscriptions carousel is hidden. - Hide subscriptions carousel - Suggested video end screen is shown. - "Suggested video end screen is hidden when autoplay is turned off. - -Autoplay can be changed in YouTube settings: -Settings → Autoplay → Autoplay next video" - "Hide videos with UPCOMING label. - -Note: Enabling this also hides the Notify me button." - Hide UPCOMING video - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views - Zoom overlay is shown. - Zoom overlay is hidden. - Hide zoom overlay - Afn Blue - Afn Red - MMT Blue - MMT Green - MMT Orange - MMT Pink - MMT Turquoise - MMT Yellow - Revancify Yellow - Vanced Black - Vanced Light - Xisr Yellow - YouTube - Double-tap action is disabled. - "Double-tap action is enabled. - -• Double-tap to change the minimized video to a larger size. -• Double-tap once more to change to the original size." - Enable double-tap action - Drag and drop is disabled. - Drag and drop is enabled. - Enable drag and drop - Expand and close buttons are shown. - Buttons are hidden.\n(swipe miniplayer to expand or close) - Hide expand and close buttons - Skip forward and back are shown. - Skip forward and back are hidden. - Hide skip forward and back buttons - Subtexts are shown. - Subtexts are hidden. - Hide subtexts - Miniplayer overlay opacity must be between 0-100. - Opacity value between 0-100, where 0 is transparent. - Overlay opacity - Original - Phone - Tablet - Modern 1 - Modern 2 - Modern 3 - Miniplayer type - Tap to mute volume of the current video. Tap again to unmute. - Show mute volume button - "Tap to generate a playlist of all videos from channel from oldest to newest. -Tap and hold to undo." - Show time-ordered playlist button - "Tap to open whitelist dialog. -Tap and hold to open whitelist setting dialog. - Show whitelist button - If shown, the native playlist download button opens the native in-app downloader. - Native playlist download button is always shown, and in public playlists, it opens your external downloader. - Override playlist download button - Native video download button opens the native in-app downloader. - Native video download button opens your external downloader. - Override video download button - YouTube Music is required to override button action. Tap here to download YouTube Music. - Prerequisite - YouTube Music button opens the native app. - YouTube Music button opens the RVX Music. - Override YouTube Music button - Animation / Feedback - Download button - Image region restrictions - Suggested actions - Overrides the click action of in-app buttons. - Hook buttons - Change the style of the in app minimized player. - Miniplayer - Hide or show navigation bar section components. - Navigation bar - Spoof the streaming data to prevent playback issues. - Spoof streaming data - Change settings related with watch history. - Watch history - Quick actions top margin must be between 0-32. - Offset - A toast will not be shown when changing the default playback speed. - A toast will be shown when changing the default playback speed. - Show a toast - A toast will not be shown when changing the default video quality. - A toast will be shown when changing the default video quality. - Show a toast - Channel handle is used. - Channel name is used. - Replace channel handle - Invalid time duration. - Adjust: Mark Start and End Time for segment - Verify the Segment - Edit the Segment - Forward by Specified Time (Default: 150ms) - Set %s as the start or end of a new segment? - Publish Created Segment - Rewind by Specified Time (Default: 150ms) - Tap here to view your segments. - Original - Thumbs up - Thumbs up (Cairo) - Heart - Heart (Tint) - Hidden - Double-tap animation - Meta panel bottom margin must be between 0-64. - Configure the spacing from the seekbar to the meta panel, between 0-64. - Meta panel bottom margin - Height percentage must be between 0-100 (%). - Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). - Height percentage of empty space - Press and hold the timestamp to change the Shorts repeat status. - Timestamp long press action - Turning on this setting may cause video playback issues. - Speed overlay value must be between 0-8.0. - Version not spoofed - Version spoofed - 18.33.40 - Restore old Shorts action bar - 18.38.45 - Restore old default video quality behavior - 18.48.39 - Disables views and likes from being updated in real time - "App version will be spoofed to an older version of YouTube. - -This will change the appearance and features of the app, but unknown side effects may occur. - -If later turned off, it is recommended to clear the app data to prevent UI bugs." - iOS video codec is AVC (H.264), VP9, or AV1. - iOS video codec is AVC (H.264). - Force iOS AVC (H.264) - "Enabling this might improve battery life and fix playback stuttering. - -AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - "• Audio track menu is missing. -• Stable volume is not available." - "• Audio track menu is missing. -• Stable volume is not available." - "• Movies or paid videos may not play. -• Livestreams start from the beginning. -• Videos may end 1 second early. -• No opus audio codec." - Spoofing side effects - • Video may not play. - Client used to fetch streaming data is hidden in Stats for nerds. - Client used to fetch streaming data is shown in Stats for nerds. - Show in Stats for nerds - "Streaming data is not spoofed. Video playback may not work." - Streaming data is spoofed. - Spoof streaming data - Android - Android TV - Android VR - iOS - Default client - Turning off this setting may cause video playback issues. - Swipeable area size cannot be more than 50. - Percentage of swipeable screen area.\n\nNote: This will also change the size of the screen area for the double-tap-to-seek gesture. - Swipe overlay screen size - Create button is not switched with Notifications button. - "Create button is switched with Notifications button. - -Note: Enabling this also forcibly hides video ads." - "Disabling this might load more ads from the server. - -Also, ads will no longer be blocked in Shorts. - -If this setting do not take effect, try switching to Incognito mode." - RVX Music - %s is not installed. Please install it. - Package name of installed RVX Music. - RVX Music package name - • Watch history is blocked. - "• Follows the watch history settings of Google account. -• Watch history may not work due to DNS or VPN." - • Follows the watch history settings of Google account. - Status of watch history - Click to open the YouTube watch history management. - Manage all history - Original - Replace domain - Block watch history - Watch history type - Failed to add channel \'%1$s\' to the %2$s whitelist. - Channel \'%1$s\' was added to the %2$s whitelist. - There are no whitelisted channels. - Not added to whitelist. - Failed to load channel information. - Added to whitelist. - Playback speed - Remove channel \'%1$s\' from %2$s whitelist? - Failed to remove channel \'%1$s\' from the %2$s whitelist. - Channel \'%1$s\' was removed from the %2$s whitelist. - Check or remove the list of channels added to the whitelist. - Channel whitelist - SponsorBlock - diff --git a/src/main/resources/youtube/translations/fi-rFI/strings.xml b/src/main/resources/youtube/translations/fi-rFI/strings.xml deleted file mode 100644 index a6bc0bb44..000000000 --- a/src/main/resources/youtube/translations/fi-rFI/strings.xml +++ /dev/null @@ -1,1193 +0,0 @@ - - - Turn on accessibility controls for the video player? - Your controls are modified because an accessibility service is on. - Continue - "GmsCore does not have permission to run in the background. - -Follow the 'Don't kill my app' guide for your phone, and apply the instructions to your MicroG installation. - -This is required for the app to work." - "GmsCore battery optimizations must be disabled to prevent issues. - -Tap on the continue button and disable battery optimizations." - Open website - Action needed - Enable cloud messaging to receive notifications. - Open GmsCore - GmsCore is not installed. Install it. - "DeArrow provides crowd-sourced thumbnails for YouTube videos. These thumbnails are often more relevant than those provided by YouTube. - -If enabled, video URLs will be sent to the API server and no other data is sent. If a video does not have DeArrow thumbnails, then the original or still captures are shown. - -Tap here to learn more about DeArrow." - DeArrow - The URL of the DeArrow thumbnail cache endpoint. - DeArrow API endpoint - Toast is not shown if DeArrow is not available. - Toast is shown if DeArrow is not available. - Show a toast if API is not available - DeArrow temporarily not available. (status code: %s) - DeArrow temporarily not available. - Home tab - You tab - Original thumbnails - DeArrow & Original thumbnails - DeArrow & Still captures - Still captures - Player playlists, recommendations - Search results - Still captures are taken from the beginning / middle / end of each video. These images are built into YouTube and no external API is used. - Still video captures - Using high quality still captures. - Using medium quality still captures. Thumbnails will load faster, but live streams, unreleased, or very old videos may show blank thumbnails. - Use fast still captures - Beginning of video - Middle of video - End of video - Video time to take still captures from - Subscriptions tab - Append time stamp information is disabled. - Append time stamp information is enabled. - Append time stamp information - Append playback speed. - Append video quality. - Append information type - Ambient mode is disabled in battery saver mode. - Ambient mode is enabled in battery saver mode. - Bypass ambient mode restrictions - Switch toggles are used. - Text toggles are used. - Change toggle type - Autoplay - Default - Pause - Repeat - Change shorts repeat state - Default - Explore - History - Library - Liked videos - Search - Shorts - Subscriptions - Trending - Change start page - Generic headers is enabled. - Premium header is enabled. - Change YouTube header - List of component path builder strings to filter separated by new line. - Custom filter - Custom filter is disabled. - Custom filter is enabled. - Enable custom filter - Invalid custom filter: %s. - Old style flyout menu is used. - Custom dialog is used. - Custom playback speed menu type - Custom speeds must be less than %sx. Using default values. - Invalid custom playback speeds. Using default values. - Add or change available playback speeds. - Edit custom playback speeds - Opacity value between 0-100, where 0 is transparent. - Custom player overlay opacity - Type the hex code of the seekbar color. - Custom seekbar color value - To open RVX in an external browser, turn on \'Open supported links\' and enable supported web addresses. - Open default app settings - Default playback speed - Default video quality on Mobile network - Default video quality on Wi-Fi network - Disables ambient mode for fullscreen only. - Disable ambient mode in fullscreen - Disables ambient mode. - Disable ambient mode - Forced auto audio tracks are enabled. - Forced auto audio tracks are disabled. - Disable forced auto audio tracks - Forced auto captions are enabled. - Forced auto captions are disabled. - Disable forced auto captions - Auto player popup panels are disabled. - Auto player popup panels are enabled. - Disable player popup panels - Default playback speed is enabled in live stream. - Default playback speed is disabled in live stream. - Disable playback speed in live stream - Engagement panel is enabled. - Engagement panel is disabled. - Disable engagement panel - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable chapters haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable scrubbing haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable seek haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable seek undo haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable zoom haptic feedback - Auto HDR brightness is enabled. - Auto HDR brightness is disabled. - Disable auto HDR brightness - HDR video is enabled. - HDR video is disabled. - Disable HDR video - Video orientation follows device settings in fullscreen. - Video orientation is portrait mode in fullscreen. - Disable landscape mode - "Disable CronetEngine's QUIC protocol." - Disable QUIC protocol - Shorts player will resume on app startup - Shorts player will not resume on app startup - Disable resuming Shorts player - Rolling numbers are animated. - Rolling numbers are not animated. - Disable rolling number animations - "Disable 'Playing at 2x speed' while holding down. - -Note: -• Disabling the speed overlay restores the 'Slide to seek' behavior of the old layout. -• This setting does not force the speed overlay to be enabled." - Disable speed overlay - Splash animation is enabled. - Splash animation is disabled. - Disable splash animation - "Disables the following interactions when the video description is expanded: - -• Tap to scroll. -• Tap and hold to select text." - Disable video description interaction - Controls overlay fills the fullscreen. - Controls overlay does not fill the fullscreen. - Enable compact controls overlay - Custom playback speed is disabled. - Custom playback speed is enabled. - Enable custom playback speed - Custom seekbar color is disabled. - Custom seekbar color is enabled. - Enable custom seekbar color - Debug logs do not include buffer. - Debug logs include buffer. - Enable debug buffer logging - Debug logs are disabled. - Debug logs are enabled. - Enable debug logging - Default playback speed does not apply to Shorts. - Default playback speed applies to Shorts. - Enable shorts default playback speed - External browser is disabled. - External browser is enabled. - Enable external browser - Gradient loading screen is disabled. - Gradient loading screen is enabled. - Enable gradient loading screen - Spacing between navigation buttons does not become narrower. - Spacing between navigation buttons becomes narrower. - Enable narrow navigation buttons - Following default redirect policy. - Bypassing URL redirects. - Enable open links directly - Tricks the dpi to use some phone layouts. - Enable phone layout - Seekbar tapping is disabled. - Seekbar tapping is enabled. - Enable seekbar tapping - Brightness swipe is disabled. - Brightness swipe is enabled. - Enable brightness gesture - Haptic feedback is disabled. - Haptic feedback is enabled. - Enable haptic feedback - Lowest value of the brightness gesture does not activate auto-brightness. - Lowest value of the brightness gesture activates auto-brightness. - Enable auto-brightness gesture - Touch to activate swipe gesture. - Touch and hold to activate swipe gesture. - Enable press-to-swipe gesture - Volume swipe is disabled. - Volume swipe is enabled. - Enable volume gesture - Tricks the dpi to use some tablet layouts. - Enable tablet layout - Entering fullscreen when swiping down below the video player is disabled. - Entering fullscreen when swiping down below the video player is enabled. - Enable watch panel gestures - "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." - Enable wide search bar in You tab - Wide search bar is disabled. - Wide search bar is enabled. - Enable wide search bar - Wide search bar does not include YouTube header. - Wide search bar includes YouTube header. - Enable wide search bar with header - Description - "Enter a title in the video description panel. -These characters vary depending on your language. -'Expand video description' may not work if you save an incorrect string." - Title in video description panel - Video description is expanded manually. - Video description is expanded automatically. - Expand video description - Restart to load the layout normally - Refresh and restart - Failed to export settings. - Settings were successfully exported. - Export settings to file. - Export settings - Import - Copy - Import or export settings as text. - Import / Export as text - Failed to import settings. - Settings reset to default. - Settings were successfully imported. - Import settings from saved file. - Import settings - Reset - ReVanced Extended - External downloader - Ei asennettu - "%1$s is not installed. -Please download %2$s from the website." - Warning - %s is not installed. Please install it. - "Videos will be switched to fullscreen in the following situations: - -• When a timestamp in the comments is clicked on. -• When a video is started." - Force fullscreen - List of account menu names to filter separated by a new line. - Account menu filter - "Hide elements of the account menu and You tab. -Some components may not be hidden." - Hide account menu - Album cards are shown. - Album cards are hidden. - Hide album cards - Autoplay preview container is shown. - Autoplay preview container is hidden. - Hide autoplay preview container - Browse store button is shown. - Browse store button is hidden. - Hide browse store button - "Hides following shelves: -• Breaking news -• Continue watching -• Explore more channels -• Listen again -• Shopping -• Watch it again" - Hide carousel shelf - Shown in feed. - Hidden in feed. - Hide in feed - Shown in related videos. - Hidden in related videos. - Hide in related videos - Shown in search results. - Hidden in search results. - Hide in search results - Channel guidelines are shown. - Channel guidelines are hidden. - Hide channel guidelines - Channel member shelf is shown. - Channel member shelf is hidden. - Hide channel member shelf - Links at the top of channel profile is shown. - Links at the top of channel profile is hidden. - Hide channel profile links - "Shorts -Playlists -Store" - List of channel tab names to filter separated by a new line. - Channel tab filter - Channel tab filter is disabled. - Channel tab filter is enabled. - Enable channel tab filter - Channel watermark is shown. - Channel watermark is hidden. - Hide channel watermark - Chapters sections are shown. - Chapters sections are hidden. - Hide chapters sections - Chips shelf is shown. - Chips shelf is hidden. - Hide chips shelf - Clip button is shown. - Clip button is hidden. - Hide clip button - Create shorts button is shown. - Create shorts button is hidden. - Hide create shorts button - Thanks button is shown. - Thanks button is hidden. - Hide thanks button - Timestamp and emoji buttons are shown. - Timestamp and emoji buttons are hidden. - Hide timestamp and emoji buttons - Comments by members banner is shown. - Comments by members banner is hidden. - Hide comments by members banner - Comments section is shown in home feed. - Comments section is hidden in home feed. - Hide comments section in home feed - Comments section is shown. - Comments section is hidden. - Hide comments section - Shown in channel. - Hidden in channel. - Hide in channel - Shown in home feed and related videos. - Hidden in home feed and related videos. - Hide in home feed and related videos - Shown in subscriptions feed. - Hidden in subscriptions feed. - Hide in subscriptions feed - Crowdfunding box is shown. - Crowdfunding box is hidden. - Hide crowdfunding box - Download button is shown. - Download button is hidden. - Hide download button - End screen cards are shown. - End screen cards are hidden. - Hide end screen cards - Expandable chips are shown. - Expandable chips are hidden. - Hide expandable chip under videos - Captions button is shown. - Captions button is hidden. - Hide feed captions button - List of flyout menu names to filter separated by a new line. - Feed flyout menu filter - Feed flyout menu filter is disabled. - Feed flyout menu filter is enabled. - Enable feed flyout menu filter - Feed search bar is shown. - Feed search bar is hidden. - Hide feed search bar - Feed surveys are shown. - Feed surveys are hidden. - Hide feed surveys - Film strip overlay is shown. - Film strip overlay is hidden. - Hide film strip overlay - Floating microphone button is shown. - Floating microphone button is hidden. - Hide floating microphone button - "'For You' shelves are shown." - "'For You' shelves are hidden." - "Hide 'For You' shelf" - Fullscreen ads are shown. - Fullscreen ads are hidden. - Hide fullscreen ads - General ads are shown. - General ads are hidden. - Hide general ads - YouTube Premium promotion is shown. - YouTube Premium promotion is hidden. - Hide YouTube Premium promotion - Gray separators are shown. - Gray separators are hidden. - Hide gray separator - Handle is shown. - Handle is hidden. - Hide handle - Image shelves are shown. - Image shelves are hidden. - Hide image shelf - Info cards sections are shown. - Info cards sections are hidden. - Hide info cards sections - Info cards are shown. - Info cards are hidden. - Hide info cards - Info panels are shown. - Info panels are hidden. - Hide info panels - Join button is shown. - Join button is hidden. - Hide join button - "Home / Subscription / Search results are filtered to hide content that matches keyword phrases. - -Limitations: -• Some Shorts may not be hidden. -• Some UI components may not be hidden. -• Searching for a keyword may show no results." - About keyword filtering - Comments are not filtered. - Comments are filtered. - Hide comments by keywords - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by keywords - "Keywords and phrases to hide, separated by new lines. -Words with uppercase letters in the middle must be entered with the casing (ie: iPhone, TikTok, LeBlanc)." - Keywords to hide - Search results are not filtered. - Search results are filtered. - Hide search results by keywords - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by keywords - Invalid keyword. Cannot use: \'%s\' as a filter - Latest posts are shown. - Latest posts are hidden. - Hide latest posts - "'Latest videos' button is shown." - "'Latest videos' button is hidden." - "Hide 'Latest videos' button" - Like and dislike buttons are shown. - Like and dislike buttons are hidden. - Hide like and dislike buttons - Medical panels are shown. - Medical panels are hidden. - Hide medical panels - Merchandise shelves are shown. - Merchandise shelves are hidden. - Hide merchandise shelf - Mix playlist is shown. - Mix playlist is hidden. - Hide mix playlist - Movies shelves are shown. - Movies shelves are hidden. - Hide movies shelf - Create button is shown. - Create button is hidden. - Hide create button - Home button is shown. - Home button is hidden. - Hide home button - Navigation label is shown. - Navigation label is hidden. - Hide navigation label - Library button is shown. - Library button is hidden. - Hide library button - Notifications button is shown. - Notifications button is hidden. - Hide notifications button - Shorts button is shown. - Shorts button is hidden. - Hide shorts button - Subscriptions button is shown. - Subscriptions button is hidden. - Hide subscriptions button - "'Notify me' button is shown." - "'Notify me' button is hidden." - "Hide 'Notify me' button" - Paid promotion label is shown. - Paid promotion label is hidden. - Hide paid promotion label - Playables are shown. - Playables are hidden. - Hide Playables - Autoplay button is shown. - Autoplay button is hidden. - Hide autoplay button - Captions button is shown. - Captions button is hidden. - Hide captions button - Cast button is shown. - Cast button is hidden. - Hide cast button - Collapse button is shown. - Collapse button is hidden. - Hide collapse button - Audio track menu is shown. - Audio track menu is hidden. - Hide audio track menu - Captions menu footer is shown. - Captions menu footer is hidden. - Hide captions menu footer - Captions menu is shown. - Captions menu is hidden. - Hide captions menu - Help & feedback menu is shown. - Help & feedback menu is hidden. - Hide help & feedback menu - Listen with YouTube Music menu is shown. - Listen with YouTube Music menu is hidden. - Hide listen with YouTube Music menu - Lock screen menu is shown. - Lock screen menu is hidden. - Hide lock screen menu - Loop video menu is shown. - Loop video menu is hidden. - Hide loop video menu - More information menu is shown. - More information menu is hidden. - Hide more information menu - Picture-in-picture menu is shown. - Picture-in-picture menu is hidden. - Hide picture-in-picture menu - Playback speed menu is shown. - Playback speed menu is hidden. - Hide playback speed menu - Premium controls menu is shown. - Premium controls menu is hidden. - Hide premium controls menu - Quality menu footer is shown. - Quality menu footer is hidden. - Hide quality menu footer - Report menu is shown. - Report menu is hidden. - Hide report menu - Stable volume menu is shown. - Stable volume menu is hidden. - Hide stable volume menu - Stats for nerds menu is shown. - Stats for nerds menu is hidden. - Hide stats for nerds menu - Watch in VR menu is shown. - Watch in VR menu is hidden. - Hide watch in VR menu - Fullscreen button is shown. - Fullscreen button is hidden. - Hide fullscreen button - Buttons are shown. - Buttons are hidden. - Hide previous & next button - YouTube Music button is shown. - YouTube Music button is hidden. - Hide YouTube Music button - Save to playlist button is shown. - Save to playlist button is hidden. - Hide save to playlist button - Podcast sections are shown. - Podcast sections are hidden. - Hide podcast sections - Preview comment is shown. - Preview comment is hidden. - Hide preview comment - This changes the size of the comment section, so it is impossible to open a live chat replay in the comment section. - This does not change the size of the comment section, so it is possible to open the live chat replay in the comment section. - Hide preview comment type - Comment button is shown. - Comment button is hidden. - Hide comment button - Dislike button is shown. - Dislike button is hidden. - Hide dislike button - Like button is shown. - Like button is hidden. - Hide like button - Live chat button is shown. - Live chat button is hidden. - Hide live chat button - More button is shown. - More button is hidden. - Hide more button - Open mix playlist button is shown. - Open mix playlist button is hidden. - Hide open mix playlist button - Open playlist button is shown. - Open playlist button is hidden. - Hide open playlist button - Save to playlist button is shown. - Save to playlist button is hidden. - Hide save to playlist button - Share button is shown. - Share button is hidden. - Hide share button - Quick actions container is shown. - Quick actions container is hidden. - Hide quick actions container - "Hides following recommended videos: - -• Videos with 'Only for Membership' tag -• Videos with the phrases such as 'People also watched' at the bottom of the video -• Videos uploaded from channels not subscribed to that have less than 1,000 views" - Hide recommended videos - Related video overlay is shown. - Related video overlay is hidden. - Hide related video overlay - Remix button is shown. - Remix button is hidden. - Hide remix button - Report button is shown. - Report button is hidden. - Hide report button - Rewards button is shown. - Rewards button is hidden. - Hide rewards button - Thumbnails in the search term history are shown. - Thumbnails in the search term history are hidden. - Hide search term thumbnail - Seek message is shown. - Seek message is hidden. - Hide seek message - Seek undo message is shown. - Seek undo message is hidden. - Hide seek undo message - Chapters are shown in seekbar. - Chapters are hidden in seekbar. - Hide seekbar chapters - Video player seekbar is shown. - Video player seekbar is hidden. - Thumbnail seekbar is shown. - Thumbnail seekbar is hidden. - Hide seekbar in video thumbnails - Hide seekbar in video player - Self sponsored cards are shown. - Self sponsored cards are hidden. - Hide self sponsored cards - "Account -Data saving -Captions" - List of YouTube settings menu names to filter separated by a new line. - YouTube settings menu filter - Hide elements in YouTube settings menu. - Hide YouTube settings menu - Share button is shown. - Share button is hidden. - Hide share button - Shop button is shown. - Shop button is hidden. - Hide shop button - Shopping links are shown. - Shopping links are hidden. - Hide shopping links - Channel bar is shown. - Channel bar is hidden. - Hide channel bar - Comments button is shown. - Comments button is hidden. - Hide comments button - Dislike button is shown. - Dislike button is hidden. - Hide dislike button - Video link label is shown. - Video link label is hidden. - Hide full video link label - Info panels are shown. - Info panels are hidden. - Hide info panels - Join button is shown. - Join button is hidden. - Hide join button - Like button is shown. - Like button is hidden. - Hide like button - Navigation bar is shown. - Navigation bar is hidden. - Hide navigation bar - Paid promotion label is shown. - Paid promotion label is hidden. - Hide paid promotion label - Paused overlay buttons are shown. - Paused overlay buttons are hidden. - Hide paused overlay buttons - Remix button is shown. - Remix button is hidden. - Hide remix button - Share button is shown. - Share button is hidden. - Hide share button - Shown in watch history. - Hidden in watch history. - Hide in watch history - Shown in home feed and related videos. - Hidden in home feed and related videos. - Hide in home feed and related videos - Shown in search results. - Hidden in search results. - Hide in search results - Shown in subscriptions feed. - Hidden in subscriptions feed. - Hide in subscriptions feed - "Hides Shorts shelves. - -Limitation: Official headers in search results will be hidden." - Hide shorts shelf - Shop button is shown. - Shop button is hidden. - Hide shop button - Sound button is shown. - Sound button is hidden. - Hide sound button - Metadata label is shown. - Metadata label is hidden. - Hide sound metadata label - Subscribe button is shown. - Subscribe button is hidden. - Hide subscribe button - Tagged products are shown. - Tagged products are hidden. - Hide tagged products - Toolbar is shown. - Toolbar is hidden. - Hide toolbar - Title is shown. - Title is hidden. - Hide video title - "'Show more' button is shown." - "'Show more' button is hidden." - "Hide 'Show more' button" - Snack bar is shown. - Snack bar is hidden. - Hide snack bar - Start trial button is shown. - Start trial button is hidden. - Hide start trial button - Suggested actions shown. - Suggested actions hidden. - Hide suggested actions - "This setting has been deprecated. - -Instead, use the 'Settings → Autoplay → Autoplay next video' setting. - -Note: -• If you have any issues with 'Suggested video end screen', try restarting the app." - Hide suggested video end screen - Thanks button is shown. - Thanks button is hidden. - Hide thanks button - Ticket shelves are shown. - Ticket shelves are hidden. - Hide ticket shelf - Time stamp is shown. - Time stamp is hidden. - Hide time stamp - Timed reactions are shown. - Timed reactions are hidden. - Hide timed reactions - Cast button is shown. - Cast button is hidden. - Hide cast button - Create button is shown. - Create button is hidden. - Hide create button - Notification button is shown. - Notification button is hidden. - Hide notification button - Transcript sections are shown. - Transcript sections are hidden. - Hide transcript sections - Video ads are shown. - Video ads are hidden. - Hide video ads - Hide recommended videos with less than a specified number of views. - Hide recommended videos by views - Videos with views greater than this number will be hidden. - Greater than views - Videos with views less than this number will be hidden. - Less than views - K -> 1 000\nM -> 1 000 000\nB -> 1 000 000 000\nviews -> views - Specify your language template for the number of views shown under each video in the user interface. Each key (a letter/word in your language) -> value (meaning of the key) must be on a new line. Keys go before \"->\" sign. If you switch app or system language you have to reset this setting.\n\nExamples:\nEnglish: 10K views = K -> 1000, views -> views\nSpanish: 10 K vistas = K -> 1000, vistas -> views - View keys - View products banner is shown. - View products banner is hidden. - Hide view products banner - Voice search button is shown. - Voice search button is hidden. - Hide voice search button - Web search results are shown. - Web search results are hidden. - Hide web search results - Custom - Stock - MMT - Revancify Blue - Revancify Red - Keeps landscape mode when turning the screen off and on in fullscreen. - The amount of milliseconds the landscape mode is forced. - Keep landscape mode timeout - Keep landscape mode - Stock - Overlay-Schaltfläche - "Tap to toggle always repeat states. -Tap and hold to toggle pause after repeat states." - Show always repeat button - "Tap to copy video URL. -Tap and hold to copy video URL with timestamp." - "Tap to copy video URL with timestamp. -Tap and hold to copy video timestamp." - Show copy timestamp URL button - Show copy video URL button - Tap to launch external downloader. - Show external download button - Tap and hold to change button state. - Playback speed reseted (1.0x). - "Tap to open speed dialog. -Tap and hold to set playback speed to 1.0x." - Show speed dialog button - Excluded - Included - Normal - Action buttons - Additional settings - Experimental Flags - Import / Export as file - Import / Export as text - Keyword filter - Others - Overlay buttons - Patch information - Quick actions - Recommended video - Shorts shelf - Tool used - View count filter - Hide or show elements in account menu and You tab. - Account menu - Hide or show action buttons under videos. - Action buttons - Ads - Alternative thumbnails - Bypass ambient mode restrictions or disable ambient mode. - Ambient mode - Hide or show the category bar in the feed, search, and related videos. - Category bar - Hide or show channel bar components under videos. - Channel bar - Hide or show components in the channel profile. - Channel profile - Hide or show comments section components. - Comments - Hide or show community posts in the feed and channel. - Community posts - Hide components using custom filters. - Custom filter - Hide or show flyout menu in the feed. - Flyout menu - Feed - Hide or change components related to fullscreen. - Fullscreen - General - Disable or enable haptic feedback. - Haptic feedback - Import or export settings. - Import / Export settings - Miscellaneous - Information about applied patches. - Patch information - Hide or show buttons in videos. - Player buttons - Hide or change flyout menu in the video player. - Flyout menu - Player - Return YouTube Dislike - SponsorBlock - Customize the seekbar components. - Seekbar - Hide elements in YouTube settings menu. - Settings menu - Hide or show components in the shorts player. - Shorts player - Shorts - Swipe controls - Hide or change components located on the toolbar such as toolbar buttons, search bar, header. - Toolbar - Hide or show video description components. - Video description - Hide videos by keywords or views. - Video filter - Video - Configure the spacing from the seekbar to the quick action container, between 0-32. - Quick actions top margin - "Forcefully rejects the software AV1 codec response. -After about 20 seconds of buffering, switches to different codec." - Reject software AV1 codec response - Fallback process causes about 20 seconds of buffering. - Playback speed changes only apply to the current video. - Playback speed changes apply to all videos. - Remember playback speed changes - Changing default speed to %s. - Quality changes only apply to the current video. - Quality changes apply to all videos. - Remember video quality changes - Changing default mobile data quality to %s. - Failed to set video quality. - Changing default Wi-Fi quality to %s. - "Remove viewer discretion dialog. -This does not bypass the age restriction. It just accepts it automatically." - Remove viewer discretion dialog - Replace software AV1 codec with VP9 codec. - Replace software AV1 codec - Tap to show the remaining time. - Tap to open playback speed or video quality flyout menu. - Replace time stamp action - Replaces create button with settings button. - Replace create button - "Tap to open YouTube Settings. -Tap and hold to open RVX Settings." - "Tap to open RVX Settings. -Tap and hold to open YouTube Settings." - Action type to assign to button - Seekbar thumbnails will appear in fullscreen. - Seekbar thumbnails will appear above the seekbar. - Restore old seekbar thumbnails - Old video quality menu is not shown. - Old video quality menu is shown. - Restore old video quality menu - About - Dislike data is provided by the Return YouTube Dislike API. Tap here to learn more. - ReturnYouTubeDislike.com - Like button styled for best appearance. - Like button styled for minimum width. - Compact like button - Dislikes shown as number. - Dislikes shown as percentage. - Dislikes as percentage - Dislikes are not shown. - Dislikes are shown. - Enable Return YouTube Dislike - Dislikes not available (client API limit reached). - Dislikes not available (status %d). - Dislikes temporarily not available (API timed out). - Dislikes not available (%s). - Reload video to vote using Return YouTube Dislike - Dislikes hidden on Shorts. - Dislikes shown on Shorts. - "Dislikes shown on Shorts. - -Limitation: Dislikes may not appear in incognito mode." - Show dislikes on Shorts - Toast is not shown if Return YouTube Dislike is not available. - Toast is shown if Return YouTube Dislike is not available. - Show a toast if API is not available - Removes tracking query parameters from the URLs when sharing links. - Sanitize sharing links - About - sponsor.ajay.app - Data is provided by the SponsorBlock API. Tap here to learn more and see downloads for other platforms. - API URL changed. - API URL is invalid. - API URL reset. - Appearance - Color changed. - Color: - Invalid color code. - Color reset. - Creating new segments - Change segment behavior - Automatically hide skip button - Skip button displayed for entire segment. - Skip button hides after a few seconds. - Use compact skip button - Skip button styled for best appearance. - Skip button styled for minimum width. - Show create new segment button - Create new segment button is not shown. - Create new segment button is shown. - Enable SponsorBlock - SponsorBlock is a crowd-sourced system for skipping annoying parts of YouTube videos. - Show voting button - Segment voting button is not shown. - Segment voting button is shown. - General - Adjust new segment step - Value must be a positive number. - Number of milliseconds the time adjustment buttons move when creating new segments. - Change API URL - The address SponsorBlock uses to make calls to the server. - Minimum segment duration - Segments shorter than this value (in seconds) will not be shown or skipped. - Enable skip count tracking - Skip count tracking is not enabled. - Lets the SponsorBlock leaderboard know how much time is saved. A message is sent to the leaderboard each time a segment is skipped. - Show a toast when skipping automatically - Toast is not shown. Tap here to see an example. - Toast is shown when a segment is automatically skipped. Tap here to see an example. - Show video length without segments - Full video length shown. - Video length minus all segments, shown in parentheses next to the full video length. - Your private user id - Private user id must be at least 30 characters long. - This should be kept private. This is like a password and should not be shared with anyone. If someone has this, they can impersonate you. - Already read - Read the SponsorBlock guidelines before creating new segments. - Show me - Follow the guidelines - Guidelines contain rules and tips for creating new segments. - View guidelines - Choose the segment category - The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit? - The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit? - Are the times correct? - Category is disabled in settings. Enable category to submit. - Do you want to edit the timing for the start or end of the segment? - Invalid time given. - Edit timing of segment manually - end - Mark two locations on the time bar first. - start - now - Preview the segment, and ensure it skips smoothly. - Start must be before the end. - Time the segment ends at - Time the segment begins at - New SponsorBlock segment - Reset - Reset color - Filler Tangent / Jokes - Tangential scenes added only for filler or humor that are not required to understand the main content of the video. Does not include segments providing context or background details. - Highlight - The part of the video that most people are looking for. - Interaction Reminder (Subscribe) - A short reminder to like, subscribe or follow them in the middle of content. If it is long or about something specific, it should instead be under self promotion. - Intermission / Intro Animation - An interval without actual content. Could be a pause, static frame, or repeating animation. Does not include transitions containing information. - Music: Non-Music Section - Only for use in music videos. Sections of music videos without music, that aren\'t already covered by another category. - Endcards / Credits - Credits or when the YouTube endcards appear. Not for conclusions with information. - Preview / Recap / Hook - Collection of clips that show what is coming up or what happened in the video or in other videos of a series, where all information is repeated elsewhere. - Unpaid / Self Promotion - Similar to \'Sponsor\' except for unpaid or self promotion. Includes sections about merchandise, donations, or information about who they collaborated with. - Sponsor - Paid promotion, paid referrals and direct advertisements. Not for self-promotion or free shout-outs to causes / creators / websites / products they like. - Copy - Failed to export: %s. - Import / Export settings - Your SponsorBlock JSON configuration that can be imported / exported to ReVanced Extended and other SponsorBlock platforms. - Your SponsorBlock JSON configuration that can be imported / exported to ReVanced Extended and other SponsorBlock platforms. This includes your private user id. Be sure to share this wisely. - Failed to import: %s. - Settings imported successfully. - Your settings contain a private SponsorBlock userid.\n\nYour user id is like a password and it should never be shared.\n - Do not show again - Settings copied to clipboard. - Skip automatically - Skip automatically once - Skip - Highlight - Skip filler - Skip to highlight - Skip interact - Skip intro - Skip intermission - Skip intermission - Skip non-music - Skip outro - Skip preview - Skip recap - Skip preview - Skip promo - Skip sponsor - Skip segment - Disable - Show in seek bar - Show a skip button - Skipped filler. - Skipped to highlight. - Skipped annoying reminder. - Skipped intro. - Skipped intermission. - Skipped intermission. - Skipped multiple segments. - Skipped a non-music section. - Skipped outro. - Skipped preview. - Skipped recap. - Skipped preview. - Skipped self promotion. - Skipped sponsor. - Skipped unsubmitted segment. - SponsorBlock temporarily not available. - SponsorBlock temporarily not available (status %d). - SponsorBlock temporarily not available (API timed out). - Stats - Stats temporarily not available (API is down). - Loading... - Your reputation is <b>%.2f</b> - You\'ve saved people from <b>%s</b> segments - %1$s hours %2$s minutes - %1$s minutes %2$s seconds - %s seconds - That\'s <b>%s</b> of their lives.<br>Tap here to see the leaderboard. - Tap here to see the global stats and top contributors. - SponsorBlock leaderboard - SponsorBlock is disabled. - You\'ve skipped <b>%s</b> segments - Reset skipped segments counter? - That\'s <b>%s</b>. - You\'ve created <b>%s</b> segments - Your username: <b>%s</b> - Tap here to change your username - Unable to change username: Status: %1$d %2$s. - Username successfully changed. - Can\'t submit the segment.\nAlready exists. - Can\'t submit the segment: %s. - Unable to submit segment: %s. - Unable to submit segment.\nRate Limited (too many from the same user or IP). - SponsorBlock is temporarily down. - Unable to submit segment (status: %1$d %2$s). - Segment submitted successfully. - Toast is not shown if SponsorBlock is not available. - Toast is shown if SponsorBlock is not available. - Show a toast if API is not available - Change category - Downvote - Unable to vote for segment: %s. - Unable to vote for segment (API timed out). - Unable to vote for segment (status: %1$d %2$s). - There are no segments to vote for. - Upvote - Settings copied to clipboard. - Time stamp copied to clipboard. (%s) - URL copied to clipboard. - URL with timestamp copied to clipboard. - "Shows the video title section in full screen. - -Limitation: Video title disappears when clicked." - Show video title section - If autoplay is turned on, next video will play after the countdown ends. - If autoplay is turned on, next video will play without a countdown. - Skip autoplay countdown - "Skip preloaded buffer at video start to bypass default video quality enforcement delay. - -• When the video starts, there is a delay of approximately 0.3 seconds, but the default video quality is applied immediately. -• Does not apply to HDR videos, live stream videos, videos shorter than 15 seconds." - Skip preloaded buffer - Toast is not shown. - Toast is shown. - Show a toast when skipped - Skipped preloaded buffer. - Speed overlay value between 0-8.0. - Speed overlay value - "Spoofing the client version to the old version. - -• This will change the appearance of the app, but unknown side effects may occur. -• If later turned off, the old UI may remain until clear the app data." - 17.33.42 - Restore old UI layout - 17.41.37 - Restore old playlist shelf - 18.05.40 - Restore old comment input box - 18.17.43 - Restore old player flyout panel - Spoof app version target - Type the spoof app version target. - Edit spoof app version - Spoof app version - Spoofs the device dimensions in order to unlock higher video qualities that may not be available on your device. - Spoof device dimensions - "Swipe gestures are disabled in 'Lock screen' mode." - "Swipe gestures are enabled in 'Lock screen' mode." - "Swipe gestures in 'Lock screen' mode" - Auto - The amount of threshold for swipe to occur. - Swipe magnitude threshold - The visibility of swipe overlay background. - Swipe background visibility - The text size for swipe overlay. - Swipe overlay text size - The amount of milliseconds the overlay is visible. - Swipe overlay timeout - "Switch the positions of the create button and notification button by spoofing device information. - -• Even if you change this setting, it may not take effect until you reboot the device. -• Disabling this setting loads more ads from the server side. -• You should disable this setting to make video ads visible." - Switch create with notifications - Stock - diff --git a/src/main/resources/youtube/translations/id-rID/missing_strings.xml b/src/main/resources/youtube/translations/id-rID/missing_strings.xml deleted file mode 100644 index c8a03773a..000000000 --- a/src/main/resources/youtube/translations/id-rID/missing_strings.xml +++ /dev/null @@ -1,413 +0,0 @@ - - - Don\'t show again - Invalid DeArrow API URL. - Still video captures - The domain to fetch images from.\nNote: Only enter the domain name, i.e., without the \"https\:\/\/\" prefix. - Alternative domain - Using original image host.\n\nEnabling this can fix missing images that are blocked in some regions. - Using image host yt4.ggpht.com. - Bypass image region restrictions - In-app share sheet is used. - System share sheet is used. - Change share sheet - Browse channels - Courses / Learning - Gaming - Live - Movies - Music - Sports - Watch later - Start page changes only once. - "Start page always changes. - -Limitation: Back button on the toolbar may not work." - Change start page type - Player overlay opacity must be between 0-100. - Ambient mode is enabled in fullscreen. - Ambient mode is disabled in fullscreen. - Ambient mode is enabled. - Ambient mode is disabled. - "Auto switch mix playlists is enabled when autoplay is turned on. - -Autoplay can be changed in YouTube settings: -Settings → Autoplay → Autoplay next video" - Auto switch mix playlists is disabled. - Disable switch mix playlists - Enabling this feature will disable automatic switching to YouTube Mix when playing music while autoplay is turned on. - Default playback speed is enabled for music. - "Default playback speed is disabled for music. - -Limitation: This setting may not apply to videos that do not include the 'Listen on YouTube Music' banner." - Disable playback speed for music - Like and Dislike buttons will glow when mentioned. - Like and Dislike buttons will not glow when mentioned. - Disable Like and Dislike button glow - Fountain animation is enabled above the Like button. - Fountain animation is disabled above the Like button. - Disable Like button animation - VP9 codec is enabled. - "VP9 codec is disabled. - -• Maximum resolution is 1080p. -• Video playback will use more internet data than VP9. -• VP9 codec is still used for HDR video." - Disable VP9 codec - Cairo seekbar is disabled. - "Cairo seekbar is enabled. - -Side effect: Cairo theme is also applied to notification dots." - Enable Cairo seekbar - Enable the OPUS codec if the player response includes the OPUS codec. - Enable OPUS codec - Do not save and restore brightness when exiting or entering fullscreen. - Save and restore brightness when exiting or entering fullscreen. - Enable save and restore brightness - Timestamp is disabled. - "Timestamp is enabled. - -Limitations: -• This setting not only enables timestamps, but also allows users to hide the UI by clicking on the player background. -• As this is a feature in the development stage by Google, the layout may be broken." - Enable timestamps - Swiping up / down will not play the next / previous video. - Swiping up / down will play the next / previous video. - Enable swipe to change video - Navigation bar is opaque. - Navigation bar is translucent. - Enable translucent navigation bar - Do you wish to proceed? - Reset to default values. - Search %s - Package name of your installed external downloader app, such as YTDLnis. - Playlist downloader package name - Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. - Long press video downloader package name - Package name of your installed external downloader app, such as NewPipe or YTDLnis. - Video downloader package name - Displays the optimization dialog for GMSCore at each application startup. - Show optimization dialog for GMSCore - Featured places, Games, and Music sections are shown. - Featured places, Games, and Music sections are hidden. - Hide Attributes section - How this content was made section is shown. - How this content was made section is hidden. - Hide Contents section - Double-tap overlay filter is shown. - Double-tap overlay filter is hidden. - Hide double-tap overlay filter - Expandable shelves are shown. - Expandable shelves are hidden. - Hide expandable shelves - "Fullscreen ads are blocked. - -Side effect: Community post images may be blocked in fullscreen." - Fullscreen ads are closed through the Close button. - Close fullscreen ads - Image search button is shown. - Image search button is hidden. - Hide image search button - Key concepts section is shown. - Key concepts section is hidden. - Hide Key concepts section - Surrounding a keyword/phrase with double-quotes will prevent partial matches of video titles and channel names.<br><br>For example,<br><b>\"ai\"</b> will hide the video: <b>How does AI work?</b><br>but will not hide: <b>What does fair use mean?</b> - Match whole words - Keyword will hide all videos: %s. - Add quotes to use keyword: %s. - Keyword has conflicting declarations: %s. - Keyword is too short and requires quotes: %s. - Live chat messages are shown.\n\nThis setting applies to Shorts live videos too. - Live chat messages are hidden.\n\nThis setting applies to Shorts live videos too. - Hide live chat messages - Live chat replay button is shown.\n\nIt appears in fullscreen when closing live chat. - Live chat replay button is hidden.\n\nIt appears in fullscreen when closing live chat. - Hide live chat replay button - Hide videos with less than 1,000 views from home feeds that have been uploaded from unsubscribed channels. - Hide low views video - Navigation bar is shown. - Navigation bar is hidden. - Hide navigation bar - Ambient mode menu is shown. - Ambient mode menu is hidden. - Hide Ambient mode menu - Quality menu header is shown. - Quality menu header is hidden. - Hide quality menu header - Sleep timer menu is shown. - Sleep timer menu is hidden. - Hide Sleep timer menu - Promotion alert banner is shown. - Promotion alert banner is hidden. - Hide promotion alert banner - Related videos are shown. - Related videos are hidden. - Hide related videos - "This setting limits the maximum number of layouts that can be loaded on the player screen. - -If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." - Disabled comments button or with label \"0\" is shown. - Disabled comments button or with label \"0\" is hidden. - Hide disabled comments button - "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." - "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." - Hide floating button - Green screen button is shown. - Green screen button is hidden. - Hide Green screen button - Live chat header is shown.\n\nBack button in header will not be hidden. - Live chat header is hidden.\n\nBack button in header will not be hidden. - Hide live chat header - Location button is shown. - Location button is hidden. - Hide location button - Paused header is shown. - Paused header is hidden. - Hide paused header - Button background is shown. - Button background is hidden. - Hide Play & Pause button background - Save music button is shown. - Save music button is hidden. - Hide Save music button - Search suggestions button is shown. - Search suggestions button is hidden. - Hide search suggestions button - Shopping button is shown. - Shopping button is hidden. - Hide Shopping button - Stickers are shown. - Stickers are hidden. - Hide stickers - Super Thanks button is shown. - Super Thanks button is hidden. - Hide Super Thanks button - Trends button is shown. - Trends button is hidden. - Hide Trends button - Use template button is shown. - Use template button is hidden. - Hide Use template button - Use this sound button is shown. - Use this sound button is hidden. - Hide Use this sound button - Subscriptions carousel is shown. - Subscriptions carousel is hidden. - Hide subscriptions carousel - Suggested video end screen is shown. - "Suggested video end screen is hidden when autoplay is turned off. - -Autoplay can be changed in YouTube settings: -Settings → Autoplay → Autoplay next video" - "Hide videos with UPCOMING label. - -Note: Enabling this also hides the Notify me button." - Hide UPCOMING video - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views - Zoom overlay is shown. - Zoom overlay is hidden. - Hide zoom overlay - Afn Blue - Afn Red - MMT Blue - MMT Green - MMT Orange - MMT Pink - MMT Turquoise - MMT Yellow - Revancify Yellow - Vanced Black - Vanced Light - Xisr Yellow - YouTube - Double-tap action is disabled. - "Double-tap action is enabled. - -• Double-tap to change the minimized video to a larger size. -• Double-tap once more to change to the original size." - Enable double-tap action - Drag and drop is disabled. - Drag and drop is enabled. - Enable drag and drop - Expand and close buttons are shown. - Buttons are hidden.\n(swipe miniplayer to expand or close) - Hide expand and close buttons - Skip forward and back are shown. - Skip forward and back are hidden. - Hide skip forward and back buttons - Subtexts are shown. - Subtexts are hidden. - Hide subtexts - Miniplayer overlay opacity must be between 0-100. - Opacity value between 0-100, where 0 is transparent. - Overlay opacity - Original - Phone - Tablet - Modern 1 - Modern 2 - Modern 3 - Miniplayer type - Tap to mute volume of the current video. Tap again to unmute. - Show mute volume button - "Tap to generate a playlist of all videos from channel from oldest to newest. -Tap and hold to undo." - Show time-ordered playlist button - "Tap to open whitelist dialog. -Tap and hold to open whitelist setting dialog. - Show whitelist button - If shown, the native playlist download button opens the native in-app downloader. - Native playlist download button is always shown, and in public playlists, it opens your external downloader. - Override playlist download button - Native video download button opens the native in-app downloader. - Native video download button opens your external downloader. - Override video download button - YouTube Music is required to override button action. Tap here to download YouTube Music. - Prerequisite - YouTube Music button opens the native app. - YouTube Music button opens the RVX Music. - Override YouTube Music button - Animation / Feedback - Download button - Image region restrictions - Suggested actions - Overrides the click action of in-app buttons. - Hook buttons - Change the style of the in app minimized player. - Miniplayer - Hide or show navigation bar section components. - Navigation bar - Spoof the streaming data to prevent playback issues. - Spoof streaming data - Change settings related with watch history. - Watch history - Quick actions top margin must be between 0-32. - Offset - A toast will not be shown when changing the default playback speed. - A toast will be shown when changing the default playback speed. - Show a toast - A toast will not be shown when changing the default video quality. - A toast will be shown when changing the default video quality. - Show a toast - Channel handle is used. - Channel name is used. - Replace channel handle - Invalid time duration. - Adjust: Mark Start and End Time for segment - Verify the Segment - Edit the Segment - Forward by Specified Time (Default: 150ms) - Set %s as the start or end of a new segment? - Publish Created Segment - Rewind by Specified Time (Default: 150ms) - Tap here to view your segments. - Original - Thumbs up - Thumbs up (Cairo) - Heart - Heart (Tint) - Hidden - Double-tap animation - Meta panel bottom margin must be between 0-64. - Configure the spacing from the seekbar to the meta panel, between 0-64. - Meta panel bottom margin - Height percentage must be between 0-100 (%). - Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). - Height percentage of empty space - Press and hold the timestamp to change the Shorts repeat status. - Timestamp long press action - Turning on this setting may cause video playback issues. - Speed overlay value must be between 0-8.0. - Version not spoofed - Version spoofed - 18.33.40 - Restore old Shorts action bar - 18.38.45 - Restore old default video quality behavior - 18.48.39 - Disables views and likes from being updated in real time - "App version will be spoofed to an older version of YouTube. - -This will change the appearance and features of the app, but unknown side effects may occur. - -If later turned off, it is recommended to clear the app data to prevent UI bugs." - iOS video codec is AVC (H.264), VP9, or AV1. - iOS video codec is AVC (H.264). - Force iOS AVC (H.264) - "Enabling this might improve battery life and fix playback stuttering. - -AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - "• Audio track menu is missing. -• Stable volume is not available." - "• Audio track menu is missing. -• Stable volume is not available." - "• Movies or paid videos may not play. -• Livestreams start from the beginning. -• Videos may end 1 second early. -• No opus audio codec." - Spoofing side effects - • Video may not play. - Client used to fetch streaming data is hidden in Stats for nerds. - Client used to fetch streaming data is shown in Stats for nerds. - Show in Stats for nerds - "Streaming data is not spoofed. Video playback may not work." - Streaming data is spoofed. - Spoof streaming data - Android - Android TV - Android VR - iOS - Default client - Turning off this setting may cause video playback issues. - Swipeable area size cannot be more than 50. - Percentage of swipeable screen area.\n\nNote: This will also change the size of the screen area for the double-tap-to-seek gesture. - Swipe overlay screen size - Create button is not switched with Notifications button. - "Create button is switched with Notifications button. - -Note: Enabling this also forcibly hides video ads." - "Disabling this might load more ads from the server. - -Also, ads will no longer be blocked in Shorts. - -If this setting do not take effect, try switching to Incognito mode." - RVX Music - %s is not installed. Please install it. - Package name of installed RVX Music. - RVX Music package name - • Watch history is blocked. - "• Follows the watch history settings of Google account. -• Watch history may not work due to DNS or VPN." - • Follows the watch history settings of Google account. - Status of watch history - Click to open the YouTube watch history management. - Manage all history - Original - Replace domain - Block watch history - Watch history type - Failed to add channel \'%1$s\' to the %2$s whitelist. - Channel \'%1$s\' was added to the %2$s whitelist. - There are no whitelisted channels. - Not added to whitelist. - Failed to load channel information. - Added to whitelist. - Playback speed - Remove channel \'%1$s\' from %2$s whitelist? - Failed to remove channel \'%1$s\' from the %2$s whitelist. - Channel \'%1$s\' was removed from the %2$s whitelist. - Check or remove the list of channels added to the whitelist. - Channel whitelist - SponsorBlock - diff --git a/src/main/resources/youtube/translations/id-rID/strings.xml b/src/main/resources/youtube/translations/id-rID/strings.xml deleted file mode 100644 index 9e9691424..000000000 --- a/src/main/resources/youtube/translations/id-rID/strings.xml +++ /dev/null @@ -1,1193 +0,0 @@ - - - Turn on accessibility controls for the video player? - Your controls are modified because an accessibility service is on. - Continue - "GmsCore does not have permission to run in the background. - -Follow the 'Don't kill my app' guide for your phone, and apply the instructions to your MicroG installation. - -This is required for the app to work." - "GmsCore battery optimizations must be disabled to prevent issues. - -Tap on the continue button and disable battery optimizations." - Open website - Action needed - Enable cloud messaging to receive notifications. - Open GmsCore - GmsCore is not installed. Install it. - "DeArrow provides crowd-sourced thumbnails for YouTube videos. These thumbnails are often more relevant than those provided by YouTube. - -If enabled, video URLs will be sent to the API server and no other data is sent. If a video does not have DeArrow thumbnails, then the original or still captures are shown. - -Tap here to learn more about DeArrow." - DeArrow - The URL of the DeArrow thumbnail cache endpoint. - DeArrow API endpoint - Toast is not shown if DeArrow is not available. - Toast is shown if DeArrow is not available. - Show a toast if API is not available - DeArrow temporarily not available. (status code: %s) - DeArrow temporarily not available. - Home tab - You tab - Original thumbnails - DeArrow & Original thumbnails - DeArrow & Still captures - Still captures - Player playlists, recommendations - Search results - Still captures are taken from the beginning / middle / end of each video. These images are built into YouTube and no external API is used. - Still video captures - Using high quality still captures. - Using medium quality still captures. Thumbnails will load faster, but live streams, unreleased, or very old videos may show blank thumbnails. - Use fast still captures - Beginning of video - Middle of video - End of video - Video time to take still captures from - Subscriptions tab - Append time stamp information is disabled. - Append time stamp information is enabled. - Append time stamp information - Append playback speed. - Append video quality. - Append information type - Ambient mode is disabled in battery saver mode. - Ambient mode is enabled in battery saver mode. - Bypass ambient mode restrictions - Switch toggles are used. - Text toggles are used. - Change toggle type - Autoplay - Default - Pause - Repeat - Change shorts repeat state - Default - Explore - History - Library - Liked videos - Search - Shorts - Subscriptions - Trending - Change start page - Generic headers is enabled. - Premium header is enabled. - Change YouTube header - List of component path builder strings to filter separated by new line. - Custom filter - Custom filter is disabled. - Custom filter is enabled. - Enable custom filter - Invalid custom filter: %s. - Old style flyout menu is used. - Custom dialog is used. - Custom playback speed menu type - Custom speeds must be less than %sx. Using default values. - Invalid custom playback speeds. Using default values. - Add or change available playback speeds. - Edit custom playback speeds - Opacity value between 0-100, where 0 is transparent. - Custom player overlay opacity - Type the hex code of the seekbar color. - Custom seekbar color value - To open RVX in an external browser, turn on \'Open supported links\' and enable supported web addresses. - Open default app settings - Default playback speed - Default video quality on Mobile network - Default video quality on Wi-Fi network - Disables ambient mode for fullscreen only. - Disable ambient mode in fullscreen - Disables ambient mode. - Disable ambient mode - Forced auto audio tracks are enabled. - Forced auto audio tracks are disabled. - Disable forced auto audio tracks - Forced auto captions are enabled. - Forced auto captions are disabled. - Disable forced auto captions - Auto player popup panels are disabled. - Auto player popup panels are enabled. - Disable player popup panels - Default playback speed is enabled in live stream. - Default playback speed is disabled in live stream. - Disable playback speed in live stream - Engagement panel is enabled. - Engagement panel is disabled. - Disable engagement panel - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable chapters haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable scrubbing haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable seek haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable seek undo haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable zoom haptic feedback - Auto HDR brightness is enabled. - Auto HDR brightness is disabled. - Disable auto HDR brightness - HDR video is enabled. - HDR video is disabled. - Disable HDR video - Video orientation follows device settings in fullscreen. - Video orientation is portrait mode in fullscreen. - Disable landscape mode - "Disable CronetEngine's QUIC protocol." - Disable QUIC protocol - Shorts player will resume on app startup - Shorts player will not resume on app startup - Disable resuming Shorts player - Rolling numbers are animated. - Rolling numbers are not animated. - Disable rolling number animations - "Disable 'Playing at 2x speed' while holding down. - -Note: -• Disabling the speed overlay restores the 'Slide to seek' behavior of the old layout. -• This setting does not force the speed overlay to be enabled." - Disable speed overlay - Splash animation is enabled. - Splash animation is disabled. - Disable splash animation - "Disables the following interactions when the video description is expanded: - -• Tap to scroll. -• Tap and hold to select text." - Disable video description interaction - Controls overlay fills the fullscreen. - Controls overlay does not fill the fullscreen. - Enable compact controls overlay - Custom playback speed is disabled. - Custom playback speed is enabled. - Enable custom playback speed - Custom seekbar color is disabled. - Custom seekbar color is enabled. - Enable custom seekbar color - Debug logs do not include buffer. - Debug logs include buffer. - Enable debug buffer logging - Debug logs are disabled. - Debug logs are enabled. - Enable debug logging - Default playback speed does not apply to Shorts. - Default playback speed applies to Shorts. - Enable shorts default playback speed - External browser is disabled. - External browser is enabled. - Enable external browser - Gradient loading screen is disabled. - Gradient loading screen is enabled. - Enable gradient loading screen - Spacing between navigation buttons does not become narrower. - Spacing between navigation buttons becomes narrower. - Enable narrow navigation buttons - Following default redirect policy. - Bypassing URL redirects. - Enable open links directly - Tricks the dpi to use some phone layouts. - Enable phone layout - Seekbar tapping is disabled. - Seekbar tapping is enabled. - Enable seekbar tapping - Brightness swipe is disabled. - Brightness swipe is enabled. - Enable brightness gesture - Haptic feedback is disabled. - Haptic feedback is enabled. - Enable haptic feedback - Lowest value of the brightness gesture does not activate auto-brightness. - Lowest value of the brightness gesture activates auto-brightness. - Enable auto-brightness gesture - Touch to activate swipe gesture. - Touch and hold to activate swipe gesture. - Enable press-to-swipe gesture - Volume swipe is disabled. - Volume swipe is enabled. - Enable volume gesture - Tricks the dpi to use some tablet layouts. - Enable tablet layout - Entering fullscreen when swiping down below the video player is disabled. - Entering fullscreen when swiping down below the video player is enabled. - Enable watch panel gestures - "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." - Enable wide search bar in You tab - Wide search bar is disabled. - Wide search bar is enabled. - Enable wide search bar - Wide search bar does not include YouTube header. - Wide search bar includes YouTube header. - Enable wide search bar with header - Description - "Enter a title in the video description panel. -These characters vary depending on your language. -'Expand video description' may not work if you save an incorrect string." - Title in video description panel - Video description is expanded manually. - Video description is expanded automatically. - Expand video description - Restart to load the layout normally - Refresh and restart - Failed to export settings. - Settings were successfully exported. - Export settings to file. - Export settings - Import - Copy - Import or export settings as text. - Import / Export as text - Failed to import settings. - Settings reset to default. - Settings were successfully imported. - Import settings from saved file. - Import settings - Reset - ReVanced Extended - External downloader - Tidak terinstal - "%1$s is not installed. -Please download %2$s from the website." - Warning - %s is not installed. Please install it. - "Videos will be switched to fullscreen in the following situations: - -• When a timestamp in the comments is clicked on. -• When a video is started." - Force fullscreen - List of account menu names to filter separated by a new line. - Account menu filter - "Hide elements of the account menu and You tab. -Some components may not be hidden." - Hide account menu - Album cards are shown. - Album cards are hidden. - Hide album cards - Autoplay preview container is shown. - Autoplay preview container is hidden. - Hide autoplay preview container - Browse store button is shown. - Browse store button is hidden. - Hide browse store button - "Hides following shelves: -• Breaking news -• Continue watching -• Explore more channels -• Listen again -• Shopping -• Watch it again" - Hide carousel shelf - Shown in feed. - Hidden in feed. - Hide in feed - Shown in related videos. - Hidden in related videos. - Hide in related videos - Shown in search results. - Hidden in search results. - Hide in search results - Channel guidelines are shown. - Channel guidelines are hidden. - Hide channel guidelines - Channel member shelf is shown. - Channel member shelf is hidden. - Hide channel member shelf - Links at the top of channel profile is shown. - Links at the top of channel profile is hidden. - Hide channel profile links - "Shorts -Playlists -Store" - List of channel tab names to filter separated by a new line. - Channel tab filter - Channel tab filter is disabled. - Channel tab filter is enabled. - Enable channel tab filter - Channel watermark is shown. - Channel watermark is hidden. - Hide channel watermark - Chapters sections are shown. - Chapters sections are hidden. - Hide chapters sections - Chips shelf is shown. - Chips shelf is hidden. - Hide chips shelf - Clip button is shown. - Clip button is hidden. - Hide clip button - Create shorts button is shown. - Create shorts button is hidden. - Hide create shorts button - Thanks button is shown. - Thanks button is hidden. - Hide thanks button - Timestamp and emoji buttons are shown. - Timestamp and emoji buttons are hidden. - Hide timestamp and emoji buttons - Comments by members banner is shown. - Comments by members banner is hidden. - Hide comments by members banner - Comments section is shown in home feed. - Comments section is hidden in home feed. - Hide comments section in home feed - Comments section is shown. - Comments section is hidden. - Hide comments section - Shown in channel. - Hidden in channel. - Hide in channel - Shown in home feed and related videos. - Hidden in home feed and related videos. - Hide in home feed and related videos - Shown in subscriptions feed. - Hidden in subscriptions feed. - Hide in subscriptions feed - Crowdfunding box is shown. - Crowdfunding box is hidden. - Hide crowdfunding box - Download button is shown. - Download button is hidden. - Hide download button - End screen cards are shown. - End screen cards are hidden. - Hide end screen cards - Expandable chips are shown. - Expandable chips are hidden. - Hide expandable chip under videos - Captions button is shown. - Captions button is hidden. - Hide feed captions button - List of flyout menu names to filter separated by a new line. - Feed flyout menu filter - Feed flyout menu filter is disabled. - Feed flyout menu filter is enabled. - Enable feed flyout menu filter - Feed search bar is shown. - Feed search bar is hidden. - Hide feed search bar - Feed surveys are shown. - Feed surveys are hidden. - Hide feed surveys - Film strip overlay is shown. - Film strip overlay is hidden. - Hide film strip overlay - Floating microphone button is shown. - Floating microphone button is hidden. - Hide floating microphone button - "'For You' shelves are shown." - "'For You' shelves are hidden." - "Hide 'For You' shelf" - Fullscreen ads are shown. - Fullscreen ads are hidden. - Hide fullscreen ads - General ads are shown. - General ads are hidden. - Hide general ads - YouTube Premium promotion is shown. - YouTube Premium promotion is hidden. - Hide YouTube Premium promotion - Gray separators are shown. - Gray separators are hidden. - Hide gray separator - Handle is shown. - Handle is hidden. - Hide handle - Image shelves are shown. - Image shelves are hidden. - Hide image shelf - Info cards sections are shown. - Info cards sections are hidden. - Hide info cards sections - Info cards are shown. - Info cards are hidden. - Hide info cards - Info panels are shown. - Info panels are hidden. - Hide info panels - Join button is shown. - Join button is hidden. - Hide join button - "Home / Subscription / Search results are filtered to hide content that matches keyword phrases. - -Limitations: -• Some Shorts may not be hidden. -• Some UI components may not be hidden. -• Searching for a keyword may show no results." - About keyword filtering - Comments are not filtered. - Comments are filtered. - Hide comments by keywords - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by keywords - "Keywords and phrases to hide, separated by new lines. -Words with uppercase letters in the middle must be entered with the casing (ie: iPhone, TikTok, LeBlanc)." - Keywords to hide - Search results are not filtered. - Search results are filtered. - Hide search results by keywords - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by keywords - Invalid keyword. Cannot use: \'%s\' as a filter - Latest posts are shown. - Latest posts are hidden. - Hide latest posts - "'Latest videos' button is shown." - "'Latest videos' button is hidden." - "Hide 'Latest videos' button" - Like and dislike buttons are shown. - Like and dislike buttons are hidden. - Hide like and dislike buttons - Medical panels are shown. - Medical panels are hidden. - Hide medical panels - Merchandise shelves are shown. - Merchandise shelves are hidden. - Hide merchandise shelf - Mix playlist is shown. - Mix playlist is hidden. - Hide mix playlist - Movies shelves are shown. - Movies shelves are hidden. - Hide movies shelf - Create button is shown. - Create button is hidden. - Hide create button - Home button is shown. - Home button is hidden. - Hide home button - Navigation label is shown. - Navigation label is hidden. - Hide navigation label - Library button is shown. - Library button is hidden. - Hide library button - Notifications button is shown. - Notifications button is hidden. - Hide notifications button - Shorts button is shown. - Shorts button is hidden. - Hide shorts button - Subscriptions button is shown. - Subscriptions button is hidden. - Hide subscriptions button - "'Notify me' button is shown." - "'Notify me' button is hidden." - "Hide 'Notify me' button" - Paid promotion label is shown. - Paid promotion label is hidden. - Hide paid promotion label - Playables are shown. - Playables are hidden. - Hide Playables - Autoplay button is shown. - Autoplay button is hidden. - Hide autoplay button - Captions button is shown. - Captions button is hidden. - Hide captions button - Cast button is shown. - Cast button is hidden. - Hide cast button - Collapse button is shown. - Collapse button is hidden. - Hide collapse button - Audio track menu is shown. - Audio track menu is hidden. - Hide audio track menu - Captions menu footer is shown. - Captions menu footer is hidden. - Hide captions menu footer - Captions menu is shown. - Captions menu is hidden. - Hide captions menu - Help & feedback menu is shown. - Help & feedback menu is hidden. - Hide help & feedback menu - Listen with YouTube Music menu is shown. - Listen with YouTube Music menu is hidden. - Hide listen with YouTube Music menu - Lock screen menu is shown. - Lock screen menu is hidden. - Hide lock screen menu - Loop video menu is shown. - Loop video menu is hidden. - Hide loop video menu - More information menu is shown. - More information menu is hidden. - Hide more information menu - Picture-in-picture menu is shown. - Picture-in-picture menu is hidden. - Hide picture-in-picture menu - Playback speed menu is shown. - Playback speed menu is hidden. - Hide playback speed menu - Premium controls menu is shown. - Premium controls menu is hidden. - Hide premium controls menu - Quality menu footer is shown. - Quality menu footer is hidden. - Hide quality menu footer - Report menu is shown. - Report menu is hidden. - Hide report menu - Stable volume menu is shown. - Stable volume menu is hidden. - Hide stable volume menu - Stats for nerds menu is shown. - Stats for nerds menu is hidden. - Hide stats for nerds menu - Watch in VR menu is shown. - Watch in VR menu is hidden. - Hide watch in VR menu - Fullscreen button is shown. - Fullscreen button is hidden. - Hide fullscreen button - Buttons are shown. - Buttons are hidden. - Hide previous & next button - YouTube Music button is shown. - YouTube Music button is hidden. - Hide YouTube Music button - Save to playlist button is shown. - Save to playlist button is hidden. - Hide save to playlist button - Podcast sections are shown. - Podcast sections are hidden. - Hide podcast sections - Preview comment is shown. - Preview comment is hidden. - Hide preview comment - This changes the size of the comment section, so it is impossible to open a live chat replay in the comment section. - This does not change the size of the comment section, so it is possible to open the live chat replay in the comment section. - Hide preview comment type - Comment button is shown. - Comment button is hidden. - Hide comment button - Dislike button is shown. - Dislike button is hidden. - Hide dislike button - Like button is shown. - Like button is hidden. - Hide like button - Live chat button is shown. - Live chat button is hidden. - Hide live chat button - More button is shown. - More button is hidden. - Hide more button - Open mix playlist button is shown. - Open mix playlist button is hidden. - Hide open mix playlist button - Open playlist button is shown. - Open playlist button is hidden. - Hide open playlist button - Save to playlist button is shown. - Save to playlist button is hidden. - Hide save to playlist button - Share button is shown. - Share button is hidden. - Hide share button - Quick actions container is shown. - Quick actions container is hidden. - Hide quick actions container - "Hides following recommended videos: - -• Videos with 'Only for Membership' tag -• Videos with the phrases such as 'People also watched' at the bottom of the video -• Videos uploaded from channels not subscribed to that have less than 1,000 views" - Hide recommended videos - Related video overlay is shown. - Related video overlay is hidden. - Hide related video overlay - Remix button is shown. - Remix button is hidden. - Hide remix button - Report button is shown. - Report button is hidden. - Hide report button - Rewards button is shown. - Rewards button is hidden. - Hide rewards button - Thumbnails in the search term history are shown. - Thumbnails in the search term history are hidden. - Hide search term thumbnail - Seek message is shown. - Seek message is hidden. - Hide seek message - Seek undo message is shown. - Seek undo message is hidden. - Hide seek undo message - Chapters are shown in seekbar. - Chapters are hidden in seekbar. - Hide seekbar chapters - Video player seekbar is shown. - Video player seekbar is hidden. - Thumbnail seekbar is shown. - Thumbnail seekbar is hidden. - Hide seekbar in video thumbnails - Hide seekbar in video player - Self sponsored cards are shown. - Self sponsored cards are hidden. - Hide self sponsored cards - "Account -Data saving -Captions" - List of YouTube settings menu names to filter separated by a new line. - YouTube settings menu filter - Hide elements in YouTube settings menu. - Hide YouTube settings menu - Share button is shown. - Share button is hidden. - Hide share button - Shop button is shown. - Shop button is hidden. - Hide shop button - Shopping links are shown. - Shopping links are hidden. - Hide shopping links - Channel bar is shown. - Channel bar is hidden. - Hide channel bar - Comments button is shown. - Comments button is hidden. - Hide comments button - Dislike button is shown. - Dislike button is hidden. - Hide dislike button - Video link label is shown. - Video link label is hidden. - Hide full video link label - Info panels are shown. - Info panels are hidden. - Hide info panels - Join button is shown. - Join button is hidden. - Hide join button - Like button is shown. - Like button is hidden. - Hide like button - Navigation bar is shown. - Navigation bar is hidden. - Hide navigation bar - Paid promotion label is shown. - Paid promotion label is hidden. - Hide paid promotion label - Paused overlay buttons are shown. - Paused overlay buttons are hidden. - Hide paused overlay buttons - Remix button is shown. - Remix button is hidden. - Hide remix button - Share button is shown. - Share button is hidden. - Hide share button - Shown in watch history. - Hidden in watch history. - Hide in watch history - Shown in home feed and related videos. - Hidden in home feed and related videos. - Hide in home feed and related videos - Shown in search results. - Hidden in search results. - Hide in search results - Shown in subscriptions feed. - Hidden in subscriptions feed. - Hide in subscriptions feed - "Hides Shorts shelves. - -Limitation: Official headers in search results will be hidden." - Hide shorts shelf - Shop button is shown. - Shop button is hidden. - Hide shop button - Sound button is shown. - Sound button is hidden. - Hide sound button - Metadata label is shown. - Metadata label is hidden. - Hide sound metadata label - Subscribe button is shown. - Subscribe button is hidden. - Hide subscribe button - Tagged products are shown. - Tagged products are hidden. - Hide tagged products - Toolbar is shown. - Toolbar is hidden. - Hide toolbar - Title is shown. - Title is hidden. - Hide video title - "'Show more' button is shown." - "'Show more' button is hidden." - "Hide 'Show more' button" - Snack bar is shown. - Snack bar is hidden. - Hide snack bar - Start trial button is shown. - Start trial button is hidden. - Hide start trial button - Suggested actions shown. - Suggested actions hidden. - Hide suggested actions - "This setting has been deprecated. - -Instead, use the 'Settings → Autoplay → Autoplay next video' setting. - -Note: -• If you have any issues with 'Suggested video end screen', try restarting the app." - Hide suggested video end screen - Thanks button is shown. - Thanks button is hidden. - Hide thanks button - Ticket shelves are shown. - Ticket shelves are hidden. - Hide ticket shelf - Time stamp is shown. - Time stamp is hidden. - Hide time stamp - Timed reactions are shown. - Timed reactions are hidden. - Hide timed reactions - Cast button is shown. - Cast button is hidden. - Hide cast button - Create button is shown. - Create button is hidden. - Hide create button - Notification button is shown. - Notification button is hidden. - Hide notification button - Transcript sections are shown. - Transcript sections are hidden. - Hide transcript sections - Video ads are shown. - Video ads are hidden. - Hide video ads - Hide recommended videos with less than a specified number of views. - Hide recommended videos by views - Videos with views greater than this number will be hidden. - Greater than views - Videos with views less than this number will be hidden. - Less than views - K -> 1 000\nM -> 1 000 000\nB -> 1 000 000 000\nviews -> views - Specify your language template for the number of views shown under each video in the user interface. Each key (a letter/word in your language) -> value (meaning of the key) must be on a new line. Keys go before \"->\" sign. If you switch app or system language you have to reset this setting.\n\nExamples:\nEnglish: 10K views = K -> 1000, views -> views\nSpanish: 10 K vistas = K -> 1000, vistas -> views - View keys - View products banner is shown. - View products banner is hidden. - Hide view products banner - Voice search button is shown. - Voice search button is hidden. - Hide voice search button - Web search results are shown. - Web search results are hidden. - Hide web search results - Custom - Stock - MMT - Revancify Blue - Revancify Red - Keeps landscape mode when turning the screen off and on in fullscreen. - The amount of milliseconds the landscape mode is forced. - Keep landscape mode timeout - Keep landscape mode - Stock - Tombol overlay - "Tap to toggle always repeat states. -Tap and hold to toggle pause after repeat states." - Show always repeat button - "Tap to copy video URL. -Tap and hold to copy video URL with timestamp." - "Tap to copy video URL with timestamp. -Tap and hold to copy video timestamp." - Show copy timestamp URL button - Show copy video URL button - Tap to launch external downloader. - Show external download button - Tap and hold to change button state. - Playback speed reseted (1.0x). - "Tap to open speed dialog. -Tap and hold to set playback speed to 1.0x." - Show speed dialog button - Excluded - Included - Normal - Action buttons - Additional settings - Experimental Flags - Import / Export as file - Import / Export as text - Keyword filter - Others - Overlay buttons - Patch information - Quick actions - Recommended video - Shorts shelf - Tool used - View count filter - Hide or show elements in account menu and You tab. - Account menu - Hide or show action buttons under videos. - Action buttons - Ads - Alternative thumbnails - Bypass ambient mode restrictions or disable ambient mode. - Ambient mode - Hide or show the category bar in the feed, search, and related videos. - Category bar - Hide or show channel bar components under videos. - Channel bar - Hide or show components in the channel profile. - Channel profile - Hide or show comments section components. - Comments - Hide or show community posts in the feed and channel. - Community posts - Hide components using custom filters. - Custom filter - Hide or show flyout menu in the feed. - Flyout menu - Feed - Hide or change components related to fullscreen. - Fullscreen - General - Disable or enable haptic feedback. - Haptic feedback - Import or export settings. - Import / Export settings - Miscellaneous - Information about applied patches. - Patch information - Hide or show buttons in videos. - Player buttons - Hide or change flyout menu in the video player. - Flyout menu - Player - Return YouTube Dislike - SponsorBlock - Customize the seekbar components. - Seekbar - Hide elements in YouTube settings menu. - Settings menu - Hide or show components in the shorts player. - Shorts player - Shorts - Swipe controls - Hide or change components located on the toolbar such as toolbar buttons, search bar, header. - Toolbar - Hide or show video description components. - Video description - Hide videos by keywords or views. - Video filter - Video - Configure the spacing from the seekbar to the quick action container, between 0-32. - Quick actions top margin - "Forcefully rejects the software AV1 codec response. -After about 20 seconds of buffering, switches to different codec." - Reject software AV1 codec response - Fallback process causes about 20 seconds of buffering. - Playback speed changes only apply to the current video. - Playback speed changes apply to all videos. - Remember playback speed changes - Changing default speed to %s. - Quality changes only apply to the current video. - Quality changes apply to all videos. - Remember video quality changes - Changing default mobile data quality to %s. - Failed to set video quality. - Changing default Wi-Fi quality to %s. - "Remove viewer discretion dialog. -This does not bypass the age restriction. It just accepts it automatically." - Remove viewer discretion dialog - Replace software AV1 codec with VP9 codec. - Replace software AV1 codec - Tap to show the remaining time. - Tap to open playback speed or video quality flyout menu. - Replace time stamp action - Replaces create button with settings button. - Replace create button - "Tap to open YouTube Settings. -Tap and hold to open RVX Settings." - "Tap to open RVX Settings. -Tap and hold to open YouTube Settings." - Action type to assign to button - Seekbar thumbnails will appear in fullscreen. - Seekbar thumbnails will appear above the seekbar. - Restore old seekbar thumbnails - Old video quality menu is not shown. - Old video quality menu is shown. - Restore old video quality menu - About - Dislike data is provided by the Return YouTube Dislike API. Tap here to learn more. - ReturnYouTubeDislike.com - Like button styled for best appearance. - Like button styled for minimum width. - Compact like button - Dislikes shown as number. - Dislikes shown as percentage. - Dislikes as percentage - Dislikes are not shown. - Dislikes are shown. - Enable Return YouTube Dislike - Dislikes not available (client API limit reached). - Dislikes not available (status %d). - Dislikes temporarily not available (API timed out). - Dislikes not available (%s). - Reload video to vote using Return YouTube Dislike - Dislikes hidden on Shorts. - Dislikes shown on Shorts. - "Dislikes shown on Shorts. - -Limitation: Dislikes may not appear in incognito mode." - Show dislikes on Shorts - Toast is not shown if Return YouTube Dislike is not available. - Toast is shown if Return YouTube Dislike is not available. - Show a toast if API is not available - Removes tracking query parameters from the URLs when sharing links. - Sanitize sharing links - About - sponsor.ajay.app - Data is provided by the SponsorBlock API. Tap here to learn more and see downloads for other platforms. - API URL changed. - API URL is invalid. - API URL reset. - Appearance - Color changed. - Color: - Invalid color code. - Color reset. - Creating new segments - Change segment behavior - Automatically hide skip button - Skip button displayed for entire segment. - Skip button hides after a few seconds. - Use compact skip button - Skip button styled for best appearance. - Skip button styled for minimum width. - Show create new segment button - Create new segment button is not shown. - Create new segment button is shown. - Enable SponsorBlock - SponsorBlock is a crowd-sourced system for skipping annoying parts of YouTube videos. - Show voting button - Segment voting button is not shown. - Segment voting button is shown. - General - Adjust new segment step - Value must be a positive number. - Number of milliseconds the time adjustment buttons move when creating new segments. - Change API URL - The address SponsorBlock uses to make calls to the server. - Minimum segment duration - Segments shorter than this value (in seconds) will not be shown or skipped. - Enable skip count tracking - Skip count tracking is not enabled. - Lets the SponsorBlock leaderboard know how much time is saved. A message is sent to the leaderboard each time a segment is skipped. - Show a toast when skipping automatically - Toast is not shown. Tap here to see an example. - Toast is shown when a segment is automatically skipped. Tap here to see an example. - Show video length without segments - Full video length shown. - Video length minus all segments, shown in parentheses next to the full video length. - Your private user id - Private user id must be at least 30 characters long. - This should be kept private. This is like a password and should not be shared with anyone. If someone has this, they can impersonate you. - Already read - Read the SponsorBlock guidelines before creating new segments. - Show me - Follow the guidelines - Guidelines contain rules and tips for creating new segments. - View guidelines - Choose the segment category - The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit? - The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit? - Are the times correct? - Category is disabled in settings. Enable category to submit. - Do you want to edit the timing for the start or end of the segment? - Invalid time given. - Edit timing of segment manually - end - Mark two locations on the time bar first. - start - now - Preview the segment, and ensure it skips smoothly. - Start must be before the end. - Time the segment ends at - Time the segment begins at - New SponsorBlock segment - Reset - Reset color - Filler Tangent / Jokes - Tangential scenes added only for filler or humor that are not required to understand the main content of the video. Does not include segments providing context or background details. - Highlight - The part of the video that most people are looking for. - Interaction Reminder (Subscribe) - A short reminder to like, subscribe or follow them in the middle of content. If it is long or about something specific, it should instead be under self promotion. - Intermission / Intro Animation - An interval without actual content. Could be a pause, static frame, or repeating animation. Does not include transitions containing information. - Music: Non-Music Section - Only for use in music videos. Sections of music videos without music, that aren\'t already covered by another category. - Endcards / Credits - Credits or when the YouTube endcards appear. Not for conclusions with information. - Preview / Recap / Hook - Collection of clips that show what is coming up or what happened in the video or in other videos of a series, where all information is repeated elsewhere. - Unpaid / Self Promotion - Similar to \'Sponsor\' except for unpaid or self promotion. Includes sections about merchandise, donations, or information about who they collaborated with. - Sponsor - Paid promotion, paid referrals and direct advertisements. Not for self-promotion or free shout-outs to causes / creators / websites / products they like. - Copy - Failed to export: %s. - Import / Export settings - Your SponsorBlock JSON configuration that can be imported / exported to ReVanced Extended and other SponsorBlock platforms. - Your SponsorBlock JSON configuration that can be imported / exported to ReVanced Extended and other SponsorBlock platforms. This includes your private user id. Be sure to share this wisely. - Failed to import: %s. - Settings imported successfully. - Your settings contain a private SponsorBlock userid.\n\nYour user id is like a password and it should never be shared.\n - Do not show again - Settings copied to clipboard. - Skip automatically - Skip automatically once - Skip - Highlight - Skip filler - Skip to highlight - Skip interact - Skip intro - Skip intermission - Skip intermission - Skip non-music - Skip outro - Skip preview - Skip recap - Skip preview - Skip promo - Skip sponsor - Skip segment - Disable - Show in seek bar - Show a skip button - Skipped filler. - Skipped to highlight. - Skipped annoying reminder. - Skipped intro. - Skipped intermission. - Skipped intermission. - Skipped multiple segments. - Skipped a non-music section. - Skipped outro. - Skipped preview. - Skipped recap. - Skipped preview. - Skipped self promotion. - Skipped sponsor. - Skipped unsubmitted segment. - SponsorBlock temporarily not available. - SponsorBlock temporarily not available (status %d). - SponsorBlock temporarily not available (API timed out). - Stats - Stats temporarily not available (API is down). - Loading... - Your reputation is <b>%.2f</b> - You\'ve saved people from <b>%s</b> segments - %1$s hours %2$s minutes - %1$s minutes %2$s seconds - %s seconds - That\'s <b>%s</b> of their lives.<br>Tap here to see the leaderboard. - Tap here to see the global stats and top contributors. - SponsorBlock leaderboard - SponsorBlock is disabled. - You\'ve skipped <b>%s</b> segments - Reset skipped segments counter? - That\'s <b>%s</b>. - You\'ve created <b>%s</b> segments - Your username: <b>%s</b> - Tap here to change your username - Unable to change username: Status: %1$d %2$s. - Username successfully changed. - Can\'t submit the segment.\nAlready exists. - Can\'t submit the segment: %s. - Unable to submit segment: %s. - Unable to submit segment.\nRate Limited (too many from the same user or IP). - SponsorBlock is temporarily down. - Unable to submit segment (status: %1$d %2$s). - Segment submitted successfully. - Toast is not shown if SponsorBlock is not available. - Toast is shown if SponsorBlock is not available. - Show a toast if API is not available - Change category - Downvote - Unable to vote for segment: %s. - Unable to vote for segment (API timed out). - Unable to vote for segment (status: %1$d %2$s). - There are no segments to vote for. - Upvote - Settings copied to clipboard. - Time stamp copied to clipboard. (%s) - URL copied to clipboard. - URL with timestamp copied to clipboard. - "Shows the video title section in full screen. - -Limitation: Video title disappears when clicked." - Show video title section - If autoplay is turned on, next video will play after the countdown ends. - If autoplay is turned on, next video will play without a countdown. - Skip autoplay countdown - "Skip preloaded buffer at video start to bypass default video quality enforcement delay. - -• When the video starts, there is a delay of approximately 0.3 seconds, but the default video quality is applied immediately. -• Does not apply to HDR videos, live stream videos, videos shorter than 15 seconds." - Skip preloaded buffer - Toast is not shown. - Toast is shown. - Show a toast when skipped - Skipped preloaded buffer. - Speed overlay value between 0-8.0. - Speed overlay value - "Spoofing the client version to the old version. - -• This will change the appearance of the app, but unknown side effects may occur. -• If later turned off, the old UI may remain until clear the app data." - 17.33.42 - Restore old UI layout - 17.41.37 - Restore old playlist shelf - 18.05.40 - Restore old comment input box - 18.17.43 - Restore old player flyout panel - Spoof app version target - Type the spoof app version target. - Edit spoof app version - Spoof app version - Spoofs the device dimensions in order to unlock higher video qualities that may not be available on your device. - Spoof device dimensions - "Swipe gestures are disabled in 'Lock screen' mode." - "Swipe gestures are enabled in 'Lock screen' mode." - "Swipe gestures in 'Lock screen' mode" - Auto - The amount of threshold for swipe to occur. - Swipe magnitude threshold - The visibility of swipe overlay background. - Swipe background visibility - The text size for swipe overlay. - Swipe overlay text size - The amount of milliseconds the overlay is visible. - Swipe overlay timeout - "Switch the positions of the create button and notification button by spoofing device information. - -• Even if you change this setting, it may not take effect until you reboot the device. -• Disabling this setting loads more ads from the server side. -• You should disable this setting to make video ads visible." - Switch create with notifications - Stock - diff --git a/src/main/resources/youtube/translations/in/missing_strings.xml b/src/main/resources/youtube/translations/in/missing_strings.xml deleted file mode 100644 index c8a03773a..000000000 --- a/src/main/resources/youtube/translations/in/missing_strings.xml +++ /dev/null @@ -1,413 +0,0 @@ - - - Don\'t show again - Invalid DeArrow API URL. - Still video captures - The domain to fetch images from.\nNote: Only enter the domain name, i.e., without the \"https\:\/\/\" prefix. - Alternative domain - Using original image host.\n\nEnabling this can fix missing images that are blocked in some regions. - Using image host yt4.ggpht.com. - Bypass image region restrictions - In-app share sheet is used. - System share sheet is used. - Change share sheet - Browse channels - Courses / Learning - Gaming - Live - Movies - Music - Sports - Watch later - Start page changes only once. - "Start page always changes. - -Limitation: Back button on the toolbar may not work." - Change start page type - Player overlay opacity must be between 0-100. - Ambient mode is enabled in fullscreen. - Ambient mode is disabled in fullscreen. - Ambient mode is enabled. - Ambient mode is disabled. - "Auto switch mix playlists is enabled when autoplay is turned on. - -Autoplay can be changed in YouTube settings: -Settings → Autoplay → Autoplay next video" - Auto switch mix playlists is disabled. - Disable switch mix playlists - Enabling this feature will disable automatic switching to YouTube Mix when playing music while autoplay is turned on. - Default playback speed is enabled for music. - "Default playback speed is disabled for music. - -Limitation: This setting may not apply to videos that do not include the 'Listen on YouTube Music' banner." - Disable playback speed for music - Like and Dislike buttons will glow when mentioned. - Like and Dislike buttons will not glow when mentioned. - Disable Like and Dislike button glow - Fountain animation is enabled above the Like button. - Fountain animation is disabled above the Like button. - Disable Like button animation - VP9 codec is enabled. - "VP9 codec is disabled. - -• Maximum resolution is 1080p. -• Video playback will use more internet data than VP9. -• VP9 codec is still used for HDR video." - Disable VP9 codec - Cairo seekbar is disabled. - "Cairo seekbar is enabled. - -Side effect: Cairo theme is also applied to notification dots." - Enable Cairo seekbar - Enable the OPUS codec if the player response includes the OPUS codec. - Enable OPUS codec - Do not save and restore brightness when exiting or entering fullscreen. - Save and restore brightness when exiting or entering fullscreen. - Enable save and restore brightness - Timestamp is disabled. - "Timestamp is enabled. - -Limitations: -• This setting not only enables timestamps, but also allows users to hide the UI by clicking on the player background. -• As this is a feature in the development stage by Google, the layout may be broken." - Enable timestamps - Swiping up / down will not play the next / previous video. - Swiping up / down will play the next / previous video. - Enable swipe to change video - Navigation bar is opaque. - Navigation bar is translucent. - Enable translucent navigation bar - Do you wish to proceed? - Reset to default values. - Search %s - Package name of your installed external downloader app, such as YTDLnis. - Playlist downloader package name - Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. - Long press video downloader package name - Package name of your installed external downloader app, such as NewPipe or YTDLnis. - Video downloader package name - Displays the optimization dialog for GMSCore at each application startup. - Show optimization dialog for GMSCore - Featured places, Games, and Music sections are shown. - Featured places, Games, and Music sections are hidden. - Hide Attributes section - How this content was made section is shown. - How this content was made section is hidden. - Hide Contents section - Double-tap overlay filter is shown. - Double-tap overlay filter is hidden. - Hide double-tap overlay filter - Expandable shelves are shown. - Expandable shelves are hidden. - Hide expandable shelves - "Fullscreen ads are blocked. - -Side effect: Community post images may be blocked in fullscreen." - Fullscreen ads are closed through the Close button. - Close fullscreen ads - Image search button is shown. - Image search button is hidden. - Hide image search button - Key concepts section is shown. - Key concepts section is hidden. - Hide Key concepts section - Surrounding a keyword/phrase with double-quotes will prevent partial matches of video titles and channel names.<br><br>For example,<br><b>\"ai\"</b> will hide the video: <b>How does AI work?</b><br>but will not hide: <b>What does fair use mean?</b> - Match whole words - Keyword will hide all videos: %s. - Add quotes to use keyword: %s. - Keyword has conflicting declarations: %s. - Keyword is too short and requires quotes: %s. - Live chat messages are shown.\n\nThis setting applies to Shorts live videos too. - Live chat messages are hidden.\n\nThis setting applies to Shorts live videos too. - Hide live chat messages - Live chat replay button is shown.\n\nIt appears in fullscreen when closing live chat. - Live chat replay button is hidden.\n\nIt appears in fullscreen when closing live chat. - Hide live chat replay button - Hide videos with less than 1,000 views from home feeds that have been uploaded from unsubscribed channels. - Hide low views video - Navigation bar is shown. - Navigation bar is hidden. - Hide navigation bar - Ambient mode menu is shown. - Ambient mode menu is hidden. - Hide Ambient mode menu - Quality menu header is shown. - Quality menu header is hidden. - Hide quality menu header - Sleep timer menu is shown. - Sleep timer menu is hidden. - Hide Sleep timer menu - Promotion alert banner is shown. - Promotion alert banner is hidden. - Hide promotion alert banner - Related videos are shown. - Related videos are hidden. - Hide related videos - "This setting limits the maximum number of layouts that can be loaded on the player screen. - -If the layout of the player screen changes due to server-side changes, unintended layouts may be hidden on the player screen." - Disabled comments button or with label \"0\" is shown. - Disabled comments button or with label \"0\" is hidden. - Hide disabled comments button - "Floating buttons like 'Use this sound' are shown in the Shorts channel tab." - "Floating buttons like 'Use this sound' are hidden in the Shorts channel tab." - Hide floating button - Green screen button is shown. - Green screen button is hidden. - Hide Green screen button - Live chat header is shown.\n\nBack button in header will not be hidden. - Live chat header is hidden.\n\nBack button in header will not be hidden. - Hide live chat header - Location button is shown. - Location button is hidden. - Hide location button - Paused header is shown. - Paused header is hidden. - Hide paused header - Button background is shown. - Button background is hidden. - Hide Play & Pause button background - Save music button is shown. - Save music button is hidden. - Hide Save music button - Search suggestions button is shown. - Search suggestions button is hidden. - Hide search suggestions button - Shopping button is shown. - Shopping button is hidden. - Hide Shopping button - Stickers are shown. - Stickers are hidden. - Hide stickers - Super Thanks button is shown. - Super Thanks button is hidden. - Hide Super Thanks button - Trends button is shown. - Trends button is hidden. - Hide Trends button - Use template button is shown. - Use template button is hidden. - Hide Use template button - Use this sound button is shown. - Use this sound button is hidden. - Hide Use this sound button - Subscriptions carousel is shown. - Subscriptions carousel is hidden. - Hide subscriptions carousel - Suggested video end screen is shown. - "Suggested video end screen is hidden when autoplay is turned off. - -Autoplay can be changed in YouTube settings: -Settings → Autoplay → Autoplay next video" - "Hide videos with UPCOMING label. - -Note: Enabling this also hides the Notify me button." - Hide UPCOMING video - "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. - -Limitations: -• Shorts cannot be hidden. -• Videos with 0 views are not filtered." - About view count filtering - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by views - Search results are not filtered. - Search results are filtered. - Hide search results by views - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by views - Zoom overlay is shown. - Zoom overlay is hidden. - Hide zoom overlay - Afn Blue - Afn Red - MMT Blue - MMT Green - MMT Orange - MMT Pink - MMT Turquoise - MMT Yellow - Revancify Yellow - Vanced Black - Vanced Light - Xisr Yellow - YouTube - Double-tap action is disabled. - "Double-tap action is enabled. - -• Double-tap to change the minimized video to a larger size. -• Double-tap once more to change to the original size." - Enable double-tap action - Drag and drop is disabled. - Drag and drop is enabled. - Enable drag and drop - Expand and close buttons are shown. - Buttons are hidden.\n(swipe miniplayer to expand or close) - Hide expand and close buttons - Skip forward and back are shown. - Skip forward and back are hidden. - Hide skip forward and back buttons - Subtexts are shown. - Subtexts are hidden. - Hide subtexts - Miniplayer overlay opacity must be between 0-100. - Opacity value between 0-100, where 0 is transparent. - Overlay opacity - Original - Phone - Tablet - Modern 1 - Modern 2 - Modern 3 - Miniplayer type - Tap to mute volume of the current video. Tap again to unmute. - Show mute volume button - "Tap to generate a playlist of all videos from channel from oldest to newest. -Tap and hold to undo." - Show time-ordered playlist button - "Tap to open whitelist dialog. -Tap and hold to open whitelist setting dialog. - Show whitelist button - If shown, the native playlist download button opens the native in-app downloader. - Native playlist download button is always shown, and in public playlists, it opens your external downloader. - Override playlist download button - Native video download button opens the native in-app downloader. - Native video download button opens your external downloader. - Override video download button - YouTube Music is required to override button action. Tap here to download YouTube Music. - Prerequisite - YouTube Music button opens the native app. - YouTube Music button opens the RVX Music. - Override YouTube Music button - Animation / Feedback - Download button - Image region restrictions - Suggested actions - Overrides the click action of in-app buttons. - Hook buttons - Change the style of the in app minimized player. - Miniplayer - Hide or show navigation bar section components. - Navigation bar - Spoof the streaming data to prevent playback issues. - Spoof streaming data - Change settings related with watch history. - Watch history - Quick actions top margin must be between 0-32. - Offset - A toast will not be shown when changing the default playback speed. - A toast will be shown when changing the default playback speed. - Show a toast - A toast will not be shown when changing the default video quality. - A toast will be shown when changing the default video quality. - Show a toast - Channel handle is used. - Channel name is used. - Replace channel handle - Invalid time duration. - Adjust: Mark Start and End Time for segment - Verify the Segment - Edit the Segment - Forward by Specified Time (Default: 150ms) - Set %s as the start or end of a new segment? - Publish Created Segment - Rewind by Specified Time (Default: 150ms) - Tap here to view your segments. - Original - Thumbs up - Thumbs up (Cairo) - Heart - Heart (Tint) - Hidden - Double-tap animation - Meta panel bottom margin must be between 0-64. - Configure the spacing from the seekbar to the meta panel, between 0-64. - Meta panel bottom margin - Height percentage must be between 0-100 (%). - Configure the height percentage of the empty space left when the navigation bar is hidden, between 0 and 100 (%). - Height percentage of empty space - Press and hold the timestamp to change the Shorts repeat status. - Timestamp long press action - Turning on this setting may cause video playback issues. - Speed overlay value must be between 0-8.0. - Version not spoofed - Version spoofed - 18.33.40 - Restore old Shorts action bar - 18.38.45 - Restore old default video quality behavior - 18.48.39 - Disables views and likes from being updated in real time - "App version will be spoofed to an older version of YouTube. - -This will change the appearance and features of the app, but unknown side effects may occur. - -If later turned off, it is recommended to clear the app data to prevent UI bugs." - iOS video codec is AVC (H.264), VP9, or AV1. - iOS video codec is AVC (H.264). - Force iOS AVC (H.264) - "Enabling this might improve battery life and fix playback stuttering. - -AVC (H.264) has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1." - "• Audio track menu is missing. -• Stable volume is not available." - "• Audio track menu is missing. -• Stable volume is not available." - "• Movies or paid videos may not play. -• Livestreams start from the beginning. -• Videos may end 1 second early. -• No opus audio codec." - Spoofing side effects - • Video may not play. - Client used to fetch streaming data is hidden in Stats for nerds. - Client used to fetch streaming data is shown in Stats for nerds. - Show in Stats for nerds - "Streaming data is not spoofed. Video playback may not work." - Streaming data is spoofed. - Spoof streaming data - Android - Android TV - Android VR - iOS - Default client - Turning off this setting may cause video playback issues. - Swipeable area size cannot be more than 50. - Percentage of swipeable screen area.\n\nNote: This will also change the size of the screen area for the double-tap-to-seek gesture. - Swipe overlay screen size - Create button is not switched with Notifications button. - "Create button is switched with Notifications button. - -Note: Enabling this also forcibly hides video ads." - "Disabling this might load more ads from the server. - -Also, ads will no longer be blocked in Shorts. - -If this setting do not take effect, try switching to Incognito mode." - RVX Music - %s is not installed. Please install it. - Package name of installed RVX Music. - RVX Music package name - • Watch history is blocked. - "• Follows the watch history settings of Google account. -• Watch history may not work due to DNS or VPN." - • Follows the watch history settings of Google account. - Status of watch history - Click to open the YouTube watch history management. - Manage all history - Original - Replace domain - Block watch history - Watch history type - Failed to add channel \'%1$s\' to the %2$s whitelist. - Channel \'%1$s\' was added to the %2$s whitelist. - There are no whitelisted channels. - Not added to whitelist. - Failed to load channel information. - Added to whitelist. - Playback speed - Remove channel \'%1$s\' from %2$s whitelist? - Failed to remove channel \'%1$s\' from the %2$s whitelist. - Channel \'%1$s\' was removed from the %2$s whitelist. - Check or remove the list of channels added to the whitelist. - Channel whitelist - SponsorBlock - diff --git a/src/main/resources/youtube/translations/in/strings.xml b/src/main/resources/youtube/translations/in/strings.xml deleted file mode 100644 index 9e9691424..000000000 --- a/src/main/resources/youtube/translations/in/strings.xml +++ /dev/null @@ -1,1193 +0,0 @@ - - - Turn on accessibility controls for the video player? - Your controls are modified because an accessibility service is on. - Continue - "GmsCore does not have permission to run in the background. - -Follow the 'Don't kill my app' guide for your phone, and apply the instructions to your MicroG installation. - -This is required for the app to work." - "GmsCore battery optimizations must be disabled to prevent issues. - -Tap on the continue button and disable battery optimizations." - Open website - Action needed - Enable cloud messaging to receive notifications. - Open GmsCore - GmsCore is not installed. Install it. - "DeArrow provides crowd-sourced thumbnails for YouTube videos. These thumbnails are often more relevant than those provided by YouTube. - -If enabled, video URLs will be sent to the API server and no other data is sent. If a video does not have DeArrow thumbnails, then the original or still captures are shown. - -Tap here to learn more about DeArrow." - DeArrow - The URL of the DeArrow thumbnail cache endpoint. - DeArrow API endpoint - Toast is not shown if DeArrow is not available. - Toast is shown if DeArrow is not available. - Show a toast if API is not available - DeArrow temporarily not available. (status code: %s) - DeArrow temporarily not available. - Home tab - You tab - Original thumbnails - DeArrow & Original thumbnails - DeArrow & Still captures - Still captures - Player playlists, recommendations - Search results - Still captures are taken from the beginning / middle / end of each video. These images are built into YouTube and no external API is used. - Still video captures - Using high quality still captures. - Using medium quality still captures. Thumbnails will load faster, but live streams, unreleased, or very old videos may show blank thumbnails. - Use fast still captures - Beginning of video - Middle of video - End of video - Video time to take still captures from - Subscriptions tab - Append time stamp information is disabled. - Append time stamp information is enabled. - Append time stamp information - Append playback speed. - Append video quality. - Append information type - Ambient mode is disabled in battery saver mode. - Ambient mode is enabled in battery saver mode. - Bypass ambient mode restrictions - Switch toggles are used. - Text toggles are used. - Change toggle type - Autoplay - Default - Pause - Repeat - Change shorts repeat state - Default - Explore - History - Library - Liked videos - Search - Shorts - Subscriptions - Trending - Change start page - Generic headers is enabled. - Premium header is enabled. - Change YouTube header - List of component path builder strings to filter separated by new line. - Custom filter - Custom filter is disabled. - Custom filter is enabled. - Enable custom filter - Invalid custom filter: %s. - Old style flyout menu is used. - Custom dialog is used. - Custom playback speed menu type - Custom speeds must be less than %sx. Using default values. - Invalid custom playback speeds. Using default values. - Add or change available playback speeds. - Edit custom playback speeds - Opacity value between 0-100, where 0 is transparent. - Custom player overlay opacity - Type the hex code of the seekbar color. - Custom seekbar color value - To open RVX in an external browser, turn on \'Open supported links\' and enable supported web addresses. - Open default app settings - Default playback speed - Default video quality on Mobile network - Default video quality on Wi-Fi network - Disables ambient mode for fullscreen only. - Disable ambient mode in fullscreen - Disables ambient mode. - Disable ambient mode - Forced auto audio tracks are enabled. - Forced auto audio tracks are disabled. - Disable forced auto audio tracks - Forced auto captions are enabled. - Forced auto captions are disabled. - Disable forced auto captions - Auto player popup panels are disabled. - Auto player popup panels are enabled. - Disable player popup panels - Default playback speed is enabled in live stream. - Default playback speed is disabled in live stream. - Disable playback speed in live stream - Engagement panel is enabled. - Engagement panel is disabled. - Disable engagement panel - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable chapters haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable scrubbing haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable seek haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable seek undo haptic feedback - Haptic feedback is enabled. - Haptic feedback is disabled. - Disable zoom haptic feedback - Auto HDR brightness is enabled. - Auto HDR brightness is disabled. - Disable auto HDR brightness - HDR video is enabled. - HDR video is disabled. - Disable HDR video - Video orientation follows device settings in fullscreen. - Video orientation is portrait mode in fullscreen. - Disable landscape mode - "Disable CronetEngine's QUIC protocol." - Disable QUIC protocol - Shorts player will resume on app startup - Shorts player will not resume on app startup - Disable resuming Shorts player - Rolling numbers are animated. - Rolling numbers are not animated. - Disable rolling number animations - "Disable 'Playing at 2x speed' while holding down. - -Note: -• Disabling the speed overlay restores the 'Slide to seek' behavior of the old layout. -• This setting does not force the speed overlay to be enabled." - Disable speed overlay - Splash animation is enabled. - Splash animation is disabled. - Disable splash animation - "Disables the following interactions when the video description is expanded: - -• Tap to scroll. -• Tap and hold to select text." - Disable video description interaction - Controls overlay fills the fullscreen. - Controls overlay does not fill the fullscreen. - Enable compact controls overlay - Custom playback speed is disabled. - Custom playback speed is enabled. - Enable custom playback speed - Custom seekbar color is disabled. - Custom seekbar color is enabled. - Enable custom seekbar color - Debug logs do not include buffer. - Debug logs include buffer. - Enable debug buffer logging - Debug logs are disabled. - Debug logs are enabled. - Enable debug logging - Default playback speed does not apply to Shorts. - Default playback speed applies to Shorts. - Enable shorts default playback speed - External browser is disabled. - External browser is enabled. - Enable external browser - Gradient loading screen is disabled. - Gradient loading screen is enabled. - Enable gradient loading screen - Spacing between navigation buttons does not become narrower. - Spacing between navigation buttons becomes narrower. - Enable narrow navigation buttons - Following default redirect policy. - Bypassing URL redirects. - Enable open links directly - Tricks the dpi to use some phone layouts. - Enable phone layout - Seekbar tapping is disabled. - Seekbar tapping is enabled. - Enable seekbar tapping - Brightness swipe is disabled. - Brightness swipe is enabled. - Enable brightness gesture - Haptic feedback is disabled. - Haptic feedback is enabled. - Enable haptic feedback - Lowest value of the brightness gesture does not activate auto-brightness. - Lowest value of the brightness gesture activates auto-brightness. - Enable auto-brightness gesture - Touch to activate swipe gesture. - Touch and hold to activate swipe gesture. - Enable press-to-swipe gesture - Volume swipe is disabled. - Volume swipe is enabled. - Enable volume gesture - Tricks the dpi to use some tablet layouts. - Enable tablet layout - Entering fullscreen when swiping down below the video player is disabled. - Entering fullscreen when swiping down below the video player is enabled. - Enable watch panel gestures - "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." - Enable wide search bar in You tab - Wide search bar is disabled. - Wide search bar is enabled. - Enable wide search bar - Wide search bar does not include YouTube header. - Wide search bar includes YouTube header. - Enable wide search bar with header - Description - "Enter a title in the video description panel. -These characters vary depending on your language. -'Expand video description' may not work if you save an incorrect string." - Title in video description panel - Video description is expanded manually. - Video description is expanded automatically. - Expand video description - Restart to load the layout normally - Refresh and restart - Failed to export settings. - Settings were successfully exported. - Export settings to file. - Export settings - Import - Copy - Import or export settings as text. - Import / Export as text - Failed to import settings. - Settings reset to default. - Settings were successfully imported. - Import settings from saved file. - Import settings - Reset - ReVanced Extended - External downloader - Tidak terinstal - "%1$s is not installed. -Please download %2$s from the website." - Warning - %s is not installed. Please install it. - "Videos will be switched to fullscreen in the following situations: - -• When a timestamp in the comments is clicked on. -• When a video is started." - Force fullscreen - List of account menu names to filter separated by a new line. - Account menu filter - "Hide elements of the account menu and You tab. -Some components may not be hidden." - Hide account menu - Album cards are shown. - Album cards are hidden. - Hide album cards - Autoplay preview container is shown. - Autoplay preview container is hidden. - Hide autoplay preview container - Browse store button is shown. - Browse store button is hidden. - Hide browse store button - "Hides following shelves: -• Breaking news -• Continue watching -• Explore more channels -• Listen again -• Shopping -• Watch it again" - Hide carousel shelf - Shown in feed. - Hidden in feed. - Hide in feed - Shown in related videos. - Hidden in related videos. - Hide in related videos - Shown in search results. - Hidden in search results. - Hide in search results - Channel guidelines are shown. - Channel guidelines are hidden. - Hide channel guidelines - Channel member shelf is shown. - Channel member shelf is hidden. - Hide channel member shelf - Links at the top of channel profile is shown. - Links at the top of channel profile is hidden. - Hide channel profile links - "Shorts -Playlists -Store" - List of channel tab names to filter separated by a new line. - Channel tab filter - Channel tab filter is disabled. - Channel tab filter is enabled. - Enable channel tab filter - Channel watermark is shown. - Channel watermark is hidden. - Hide channel watermark - Chapters sections are shown. - Chapters sections are hidden. - Hide chapters sections - Chips shelf is shown. - Chips shelf is hidden. - Hide chips shelf - Clip button is shown. - Clip button is hidden. - Hide clip button - Create shorts button is shown. - Create shorts button is hidden. - Hide create shorts button - Thanks button is shown. - Thanks button is hidden. - Hide thanks button - Timestamp and emoji buttons are shown. - Timestamp and emoji buttons are hidden. - Hide timestamp and emoji buttons - Comments by members banner is shown. - Comments by members banner is hidden. - Hide comments by members banner - Comments section is shown in home feed. - Comments section is hidden in home feed. - Hide comments section in home feed - Comments section is shown. - Comments section is hidden. - Hide comments section - Shown in channel. - Hidden in channel. - Hide in channel - Shown in home feed and related videos. - Hidden in home feed and related videos. - Hide in home feed and related videos - Shown in subscriptions feed. - Hidden in subscriptions feed. - Hide in subscriptions feed - Crowdfunding box is shown. - Crowdfunding box is hidden. - Hide crowdfunding box - Download button is shown. - Download button is hidden. - Hide download button - End screen cards are shown. - End screen cards are hidden. - Hide end screen cards - Expandable chips are shown. - Expandable chips are hidden. - Hide expandable chip under videos - Captions button is shown. - Captions button is hidden. - Hide feed captions button - List of flyout menu names to filter separated by a new line. - Feed flyout menu filter - Feed flyout menu filter is disabled. - Feed flyout menu filter is enabled. - Enable feed flyout menu filter - Feed search bar is shown. - Feed search bar is hidden. - Hide feed search bar - Feed surveys are shown. - Feed surveys are hidden. - Hide feed surveys - Film strip overlay is shown. - Film strip overlay is hidden. - Hide film strip overlay - Floating microphone button is shown. - Floating microphone button is hidden. - Hide floating microphone button - "'For You' shelves are shown." - "'For You' shelves are hidden." - "Hide 'For You' shelf" - Fullscreen ads are shown. - Fullscreen ads are hidden. - Hide fullscreen ads - General ads are shown. - General ads are hidden. - Hide general ads - YouTube Premium promotion is shown. - YouTube Premium promotion is hidden. - Hide YouTube Premium promotion - Gray separators are shown. - Gray separators are hidden. - Hide gray separator - Handle is shown. - Handle is hidden. - Hide handle - Image shelves are shown. - Image shelves are hidden. - Hide image shelf - Info cards sections are shown. - Info cards sections are hidden. - Hide info cards sections - Info cards are shown. - Info cards are hidden. - Hide info cards - Info panels are shown. - Info panels are hidden. - Hide info panels - Join button is shown. - Join button is hidden. - Hide join button - "Home / Subscription / Search results are filtered to hide content that matches keyword phrases. - -Limitations: -• Some Shorts may not be hidden. -• Some UI components may not be hidden. -• Searching for a keyword may show no results." - About keyword filtering - Comments are not filtered. - Comments are filtered. - Hide comments by keywords - Videos in home feed are not filtered. - Videos in home feed are filtered. - Hide home videos by keywords - "Keywords and phrases to hide, separated by new lines. -Words with uppercase letters in the middle must be entered with the casing (ie: iPhone, TikTok, LeBlanc)." - Keywords to hide - Search results are not filtered. - Search results are filtered. - Hide search results by keywords - Videos in subscriptions feed are not filtered. - Videos in subscriptions feed are filtered. - Hide subscription videos by keywords - Invalid keyword. Cannot use: \'%s\' as a filter - Latest posts are shown. - Latest posts are hidden. - Hide latest posts - "'Latest videos' button is shown." - "'Latest videos' button is hidden." - "Hide 'Latest videos' button" - Like and dislike buttons are shown. - Like and dislike buttons are hidden. - Hide like and dislike buttons - Medical panels are shown. - Medical panels are hidden. - Hide medical panels - Merchandise shelves are shown. - Merchandise shelves are hidden. - Hide merchandise shelf - Mix playlist is shown. - Mix playlist is hidden. - Hide mix playlist - Movies shelves are shown. - Movies shelves are hidden. - Hide movies shelf - Create button is shown. - Create button is hidden. - Hide create button - Home button is shown. - Home button is hidden. - Hide home button - Navigation label is shown. - Navigation label is hidden. - Hide navigation label - Library button is shown. - Library button is hidden. - Hide library button - Notifications button is shown. - Notifications button is hidden. - Hide notifications button - Shorts button is shown. - Shorts button is hidden. - Hide shorts button - Subscriptions button is shown. - Subscriptions button is hidden. - Hide subscriptions button - "'Notify me' button is shown." - "'Notify me' button is hidden." - "Hide 'Notify me' button" - Paid promotion label is shown. - Paid promotion label is hidden. - Hide paid promotion label - Playables are shown. - Playables are hidden. - Hide Playables - Autoplay button is shown. - Autoplay button is hidden. - Hide autoplay button - Captions button is shown. - Captions button is hidden. - Hide captions button - Cast button is shown. - Cast button is hidden. - Hide cast button - Collapse button is shown. - Collapse button is hidden. - Hide collapse button - Audio track menu is shown. - Audio track menu is hidden. - Hide audio track menu - Captions menu footer is shown. - Captions menu footer is hidden. - Hide captions menu footer - Captions menu is shown. - Captions menu is hidden. - Hide captions menu - Help & feedback menu is shown. - Help & feedback menu is hidden. - Hide help & feedback menu - Listen with YouTube Music menu is shown. - Listen with YouTube Music menu is hidden. - Hide listen with YouTube Music menu - Lock screen menu is shown. - Lock screen menu is hidden. - Hide lock screen menu - Loop video menu is shown. - Loop video menu is hidden. - Hide loop video menu - More information menu is shown. - More information menu is hidden. - Hide more information menu - Picture-in-picture menu is shown. - Picture-in-picture menu is hidden. - Hide picture-in-picture menu - Playback speed menu is shown. - Playback speed menu is hidden. - Hide playback speed menu - Premium controls menu is shown. - Premium controls menu is hidden. - Hide premium controls menu - Quality menu footer is shown. - Quality menu footer is hidden. - Hide quality menu footer - Report menu is shown. - Report menu is hidden. - Hide report menu - Stable volume menu is shown. - Stable volume menu is hidden. - Hide stable volume menu - Stats for nerds menu is shown. - Stats for nerds menu is hidden. - Hide stats for nerds menu - Watch in VR menu is shown. - Watch in VR menu is hidden. - Hide watch in VR menu - Fullscreen button is shown. - Fullscreen button is hidden. - Hide fullscreen button - Buttons are shown. - Buttons are hidden. - Hide previous & next button - YouTube Music button is shown. - YouTube Music button is hidden. - Hide YouTube Music button - Save to playlist button is shown. - Save to playlist button is hidden. - Hide save to playlist button - Podcast sections are shown. - Podcast sections are hidden. - Hide podcast sections - Preview comment is shown. - Preview comment is hidden. - Hide preview comment - This changes the size of the comment section, so it is impossible to open a live chat replay in the comment section. - This does not change the size of the comment section, so it is possible to open the live chat replay in the comment section. - Hide preview comment type - Comment button is shown. - Comment button is hidden. - Hide comment button - Dislike button is shown. - Dislike button is hidden. - Hide dislike button - Like button is shown. - Like button is hidden. - Hide like button - Live chat button is shown. - Live chat button is hidden. - Hide live chat button - More button is shown. - More button is hidden. - Hide more button - Open mix playlist button is shown. - Open mix playlist button is hidden. - Hide open mix playlist button - Open playlist button is shown. - Open playlist button is hidden. - Hide open playlist button - Save to playlist button is shown. - Save to playlist button is hidden. - Hide save to playlist button - Share button is shown. - Share button is hidden. - Hide share button - Quick actions container is shown. - Quick actions container is hidden. - Hide quick actions container - "Hides following recommended videos: - -• Videos with 'Only for Membership' tag -• Videos with the phrases such as 'People also watched' at the bottom of the video -• Videos uploaded from channels not subscribed to that have less than 1,000 views" - Hide recommended videos - Related video overlay is shown. - Related video overlay is hidden. - Hide related video overlay - Remix button is shown. - Remix button is hidden. - Hide remix button - Report button is shown. - Report button is hidden. - Hide report button - Rewards button is shown. - Rewards button is hidden. - Hide rewards button - Thumbnails in the search term history are shown. - Thumbnails in the search term history are hidden. - Hide search term thumbnail - Seek message is shown. - Seek message is hidden. - Hide seek message - Seek undo message is shown. - Seek undo message is hidden. - Hide seek undo message - Chapters are shown in seekbar. - Chapters are hidden in seekbar. - Hide seekbar chapters - Video player seekbar is shown. - Video player seekbar is hidden. - Thumbnail seekbar is shown. - Thumbnail seekbar is hidden. - Hide seekbar in video thumbnails - Hide seekbar in video player - Self sponsored cards are shown. - Self sponsored cards are hidden. - Hide self sponsored cards - "Account -Data saving -Captions" - List of YouTube settings menu names to filter separated by a new line. - YouTube settings menu filter - Hide elements in YouTube settings menu. - Hide YouTube settings menu - Share button is shown. - Share button is hidden. - Hide share button - Shop button is shown. - Shop button is hidden. - Hide shop button - Shopping links are shown. - Shopping links are hidden. - Hide shopping links - Channel bar is shown. - Channel bar is hidden. - Hide channel bar - Comments button is shown. - Comments button is hidden. - Hide comments button - Dislike button is shown. - Dislike button is hidden. - Hide dislike button - Video link label is shown. - Video link label is hidden. - Hide full video link label - Info panels are shown. - Info panels are hidden. - Hide info panels - Join button is shown. - Join button is hidden. - Hide join button - Like button is shown. - Like button is hidden. - Hide like button - Navigation bar is shown. - Navigation bar is hidden. - Hide navigation bar - Paid promotion label is shown. - Paid promotion label is hidden. - Hide paid promotion label - Paused overlay buttons are shown. - Paused overlay buttons are hidden. - Hide paused overlay buttons - Remix button is shown. - Remix button is hidden. - Hide remix button - Share button is shown. - Share button is hidden. - Hide share button - Shown in watch history. - Hidden in watch history. - Hide in watch history - Shown in home feed and related videos. - Hidden in home feed and related videos. - Hide in home feed and related videos - Shown in search results. - Hidden in search results. - Hide in search results - Shown in subscriptions feed. - Hidden in subscriptions feed. - Hide in subscriptions feed - "Hides Shorts shelves. - -Limitation: Official headers in search results will be hidden." - Hide shorts shelf - Shop button is shown. - Shop button is hidden. - Hide shop button - Sound button is shown. - Sound button is hidden. - Hide sound button - Metadata label is shown. - Metadata label is hidden. - Hide sound metadata label - Subscribe button is shown. - Subscribe button is hidden. - Hide subscribe button - Tagged products are shown. - Tagged products are hidden. - Hide tagged products - Toolbar is shown. - Toolbar is hidden. - Hide toolbar - Title is shown. - Title is hidden. - Hide video title - "'Show more' button is shown." - "'Show more' button is hidden." - "Hide 'Show more' button" - Snack bar is shown. - Snack bar is hidden. - Hide snack bar - Start trial button is shown. - Start trial button is hidden. - Hide start trial button - Suggested actions shown. - Suggested actions hidden. - Hide suggested actions - "This setting has been deprecated. - -Instead, use the 'Settings → Autoplay → Autoplay next video' setting. - -Note: -• If you have any issues with 'Suggested video end screen', try restarting the app." - Hide suggested video end screen - Thanks button is shown. - Thanks button is hidden. - Hide thanks button - Ticket shelves are shown. - Ticket shelves are hidden. - Hide ticket shelf - Time stamp is shown. - Time stamp is hidden. - Hide time stamp - Timed reactions are shown. - Timed reactions are hidden. - Hide timed reactions - Cast button is shown. - Cast button is hidden. - Hide cast button - Create button is shown. - Create button is hidden. - Hide create button - Notification button is shown. - Notification button is hidden. - Hide notification button - Transcript sections are shown. - Transcript sections are hidden. - Hide transcript sections - Video ads are shown. - Video ads are hidden. - Hide video ads - Hide recommended videos with less than a specified number of views. - Hide recommended videos by views - Videos with views greater than this number will be hidden. - Greater than views - Videos with views less than this number will be hidden. - Less than views - K -> 1 000\nM -> 1 000 000\nB -> 1 000 000 000\nviews -> views - Specify your language template for the number of views shown under each video in the user interface. Each key (a letter/word in your language) -> value (meaning of the key) must be on a new line. Keys go before \"->\" sign. If you switch app or system language you have to reset this setting.\n\nExamples:\nEnglish: 10K views = K -> 1000, views -> views\nSpanish: 10 K vistas = K -> 1000, vistas -> views - View keys - View products banner is shown. - View products banner is hidden. - Hide view products banner - Voice search button is shown. - Voice search button is hidden. - Hide voice search button - Web search results are shown. - Web search results are hidden. - Hide web search results - Custom - Stock - MMT - Revancify Blue - Revancify Red - Keeps landscape mode when turning the screen off and on in fullscreen. - The amount of milliseconds the landscape mode is forced. - Keep landscape mode timeout - Keep landscape mode - Stock - Tombol overlay - "Tap to toggle always repeat states. -Tap and hold to toggle pause after repeat states." - Show always repeat button - "Tap to copy video URL. -Tap and hold to copy video URL with timestamp." - "Tap to copy video URL with timestamp. -Tap and hold to copy video timestamp." - Show copy timestamp URL button - Show copy video URL button - Tap to launch external downloader. - Show external download button - Tap and hold to change button state. - Playback speed reseted (1.0x). - "Tap to open speed dialog. -Tap and hold to set playback speed to 1.0x." - Show speed dialog button - Excluded - Included - Normal - Action buttons - Additional settings - Experimental Flags - Import / Export as file - Import / Export as text - Keyword filter - Others - Overlay buttons - Patch information - Quick actions - Recommended video - Shorts shelf - Tool used - View count filter - Hide or show elements in account menu and You tab. - Account menu - Hide or show action buttons under videos. - Action buttons - Ads - Alternative thumbnails - Bypass ambient mode restrictions or disable ambient mode. - Ambient mode - Hide or show the category bar in the feed, search, and related videos. - Category bar - Hide or show channel bar components under videos. - Channel bar - Hide or show components in the channel profile. - Channel profile - Hide or show comments section components. - Comments - Hide or show community posts in the feed and channel. - Community posts - Hide components using custom filters. - Custom filter - Hide or show flyout menu in the feed. - Flyout menu - Feed - Hide or change components related to fullscreen. - Fullscreen - General - Disable or enable haptic feedback. - Haptic feedback - Import or export settings. - Import / Export settings - Miscellaneous - Information about applied patches. - Patch information - Hide or show buttons in videos. - Player buttons - Hide or change flyout menu in the video player. - Flyout menu - Player - Return YouTube Dislike - SponsorBlock - Customize the seekbar components. - Seekbar - Hide elements in YouTube settings menu. - Settings menu - Hide or show components in the shorts player. - Shorts player - Shorts - Swipe controls - Hide or change components located on the toolbar such as toolbar buttons, search bar, header. - Toolbar - Hide or show video description components. - Video description - Hide videos by keywords or views. - Video filter - Video - Configure the spacing from the seekbar to the quick action container, between 0-32. - Quick actions top margin - "Forcefully rejects the software AV1 codec response. -After about 20 seconds of buffering, switches to different codec." - Reject software AV1 codec response - Fallback process causes about 20 seconds of buffering. - Playback speed changes only apply to the current video. - Playback speed changes apply to all videos. - Remember playback speed changes - Changing default speed to %s. - Quality changes only apply to the current video. - Quality changes apply to all videos. - Remember video quality changes - Changing default mobile data quality to %s. - Failed to set video quality. - Changing default Wi-Fi quality to %s. - "Remove viewer discretion dialog. -This does not bypass the age restriction. It just accepts it automatically." - Remove viewer discretion dialog - Replace software AV1 codec with VP9 codec. - Replace software AV1 codec - Tap to show the remaining time. - Tap to open playback speed or video quality flyout menu. - Replace time stamp action - Replaces create button with settings button. - Replace create button - "Tap to open YouTube Settings. -Tap and hold to open RVX Settings." - "Tap to open RVX Settings. -Tap and hold to open YouTube Settings." - Action type to assign to button - Seekbar thumbnails will appear in fullscreen. - Seekbar thumbnails will appear above the seekbar. - Restore old seekbar thumbnails - Old video quality menu is not shown. - Old video quality menu is shown. - Restore old video quality menu - About - Dislike data is provided by the Return YouTube Dislike API. Tap here to learn more. - ReturnYouTubeDislike.com - Like button styled for best appearance. - Like button styled for minimum width. - Compact like button - Dislikes shown as number. - Dislikes shown as percentage. - Dislikes as percentage - Dislikes are not shown. - Dislikes are shown. - Enable Return YouTube Dislike - Dislikes not available (client API limit reached). - Dislikes not available (status %d). - Dislikes temporarily not available (API timed out). - Dislikes not available (%s). - Reload video to vote using Return YouTube Dislike - Dislikes hidden on Shorts. - Dislikes shown on Shorts. - "Dislikes shown on Shorts. - -Limitation: Dislikes may not appear in incognito mode." - Show dislikes on Shorts - Toast is not shown if Return YouTube Dislike is not available. - Toast is shown if Return YouTube Dislike is not available. - Show a toast if API is not available - Removes tracking query parameters from the URLs when sharing links. - Sanitize sharing links - About - sponsor.ajay.app - Data is provided by the SponsorBlock API. Tap here to learn more and see downloads for other platforms. - API URL changed. - API URL is invalid. - API URL reset. - Appearance - Color changed. - Color: - Invalid color code. - Color reset. - Creating new segments - Change segment behavior - Automatically hide skip button - Skip button displayed for entire segment. - Skip button hides after a few seconds. - Use compact skip button - Skip button styled for best appearance. - Skip button styled for minimum width. - Show create new segment button - Create new segment button is not shown. - Create new segment button is shown. - Enable SponsorBlock - SponsorBlock is a crowd-sourced system for skipping annoying parts of YouTube videos. - Show voting button - Segment voting button is not shown. - Segment voting button is shown. - General - Adjust new segment step - Value must be a positive number. - Number of milliseconds the time adjustment buttons move when creating new segments. - Change API URL - The address SponsorBlock uses to make calls to the server. - Minimum segment duration - Segments shorter than this value (in seconds) will not be shown or skipped. - Enable skip count tracking - Skip count tracking is not enabled. - Lets the SponsorBlock leaderboard know how much time is saved. A message is sent to the leaderboard each time a segment is skipped. - Show a toast when skipping automatically - Toast is not shown. Tap here to see an example. - Toast is shown when a segment is automatically skipped. Tap here to see an example. - Show video length without segments - Full video length shown. - Video length minus all segments, shown in parentheses next to the full video length. - Your private user id - Private user id must be at least 30 characters long. - This should be kept private. This is like a password and should not be shared with anyone. If someone has this, they can impersonate you. - Already read - Read the SponsorBlock guidelines before creating new segments. - Show me - Follow the guidelines - Guidelines contain rules and tips for creating new segments. - View guidelines - Choose the segment category - The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit? - The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit? - Are the times correct? - Category is disabled in settings. Enable category to submit. - Do you want to edit the timing for the start or end of the segment? - Invalid time given. - Edit timing of segment manually - end - Mark two locations on the time bar first. - start - now - Preview the segment, and ensure it skips smoothly. - Start must be before the end. - Time the segment ends at - Time the segment begins at - New SponsorBlock segment - Reset - Reset color - Filler Tangent / Jokes - Tangential scenes added only for filler or humor that are not required to understand the main content of the video. Does not include segments providing context or background details. - Highlight - The part of the video that most people are looking for. - Interaction Reminder (Subscribe) - A short reminder to like, subscribe or follow them in the middle of content. If it is long or about something specific, it should instead be under self promotion. - Intermission / Intro Animation - An interval without actual content. Could be a pause, static frame, or repeating animation. Does not include transitions containing information. - Music: Non-Music Section - Only for use in music videos. Sections of music videos without music, that aren\'t already covered by another category. - Endcards / Credits - Credits or when the YouTube endcards appear. Not for conclusions with information. - Preview / Recap / Hook - Collection of clips that show what is coming up or what happened in the video or in other videos of a series, where all information is repeated elsewhere. - Unpaid / Self Promotion - Similar to \'Sponsor\' except for unpaid or self promotion. Includes sections about merchandise, donations, or information about who they collaborated with. - Sponsor - Paid promotion, paid referrals and direct advertisements. Not for self-promotion or free shout-outs to causes / creators / websites / products they like. - Copy - Failed to export: %s. - Import / Export settings - Your SponsorBlock JSON configuration that can be imported / exported to ReVanced Extended and other SponsorBlock platforms. - Your SponsorBlock JSON configuration that can be imported / exported to ReVanced Extended and other SponsorBlock platforms. This includes your private user id. Be sure to share this wisely. - Failed to import: %s. - Settings imported successfully. - Your settings contain a private SponsorBlock userid.\n\nYour user id is like a password and it should never be shared.\n - Do not show again - Settings copied to clipboard. - Skip automatically - Skip automatically once - Skip - Highlight - Skip filler - Skip to highlight - Skip interact - Skip intro - Skip intermission - Skip intermission - Skip non-music - Skip outro - Skip preview - Skip recap - Skip preview - Skip promo - Skip sponsor - Skip segment - Disable - Show in seek bar - Show a skip button - Skipped filler. - Skipped to highlight. - Skipped annoying reminder. - Skipped intro. - Skipped intermission. - Skipped intermission. - Skipped multiple segments. - Skipped a non-music section. - Skipped outro. - Skipped preview. - Skipped recap. - Skipped preview. - Skipped self promotion. - Skipped sponsor. - Skipped unsubmitted segment. - SponsorBlock temporarily not available. - SponsorBlock temporarily not available (status %d). - SponsorBlock temporarily not available (API timed out). - Stats - Stats temporarily not available (API is down). - Loading... - Your reputation is <b>%.2f</b> - You\'ve saved people from <b>%s</b> segments - %1$s hours %2$s minutes - %1$s minutes %2$s seconds - %s seconds - That\'s <b>%s</b> of their lives.<br>Tap here to see the leaderboard. - Tap here to see the global stats and top contributors. - SponsorBlock leaderboard - SponsorBlock is disabled. - You\'ve skipped <b>%s</b> segments - Reset skipped segments counter? - That\'s <b>%s</b>. - You\'ve created <b>%s</b> segments - Your username: <b>%s</b> - Tap here to change your username - Unable to change username: Status: %1$d %2$s. - Username successfully changed. - Can\'t submit the segment.\nAlready exists. - Can\'t submit the segment: %s. - Unable to submit segment: %s. - Unable to submit segment.\nRate Limited (too many from the same user or IP). - SponsorBlock is temporarily down. - Unable to submit segment (status: %1$d %2$s). - Segment submitted successfully. - Toast is not shown if SponsorBlock is not available. - Toast is shown if SponsorBlock is not available. - Show a toast if API is not available - Change category - Downvote - Unable to vote for segment: %s. - Unable to vote for segment (API timed out). - Unable to vote for segment (status: %1$d %2$s). - There are no segments to vote for. - Upvote - Settings copied to clipboard. - Time stamp copied to clipboard. (%s) - URL copied to clipboard. - URL with timestamp copied to clipboard. - "Shows the video title section in full screen. - -Limitation: Video title disappears when clicked." - Show video title section - If autoplay is turned on, next video will play after the countdown ends. - If autoplay is turned on, next video will play without a countdown. - Skip autoplay countdown - "Skip preloaded buffer at video start to bypass default video quality enforcement delay. - -• When the video starts, there is a delay of approximately 0.3 seconds, but the default video quality is applied immediately. -• Does not apply to HDR videos, live stream videos, videos shorter than 15 seconds." - Skip preloaded buffer - Toast is not shown. - Toast is shown. - Show a toast when skipped - Skipped preloaded buffer. - Speed overlay value between 0-8.0. - Speed overlay value - "Spoofing the client version to the old version. - -• This will change the appearance of the app, but unknown side effects may occur. -• If later turned off, the old UI may remain until clear the app data." - 17.33.42 - Restore old UI layout - 17.41.37 - Restore old playlist shelf - 18.05.40 - Restore old comment input box - 18.17.43 - Restore old player flyout panel - Spoof app version target - Type the spoof app version target. - Edit spoof app version - Spoof app version - Spoofs the device dimensions in order to unlock higher video qualities that may not be available on your device. - Spoof device dimensions - "Swipe gestures are disabled in 'Lock screen' mode." - "Swipe gestures are enabled in 'Lock screen' mode." - "Swipe gestures in 'Lock screen' mode" - Auto - The amount of threshold for swipe to occur. - Swipe magnitude threshold - The visibility of swipe overlay background. - Swipe background visibility - The text size for swipe overlay. - Swipe overlay text size - The amount of milliseconds the overlay is visible. - Swipe overlay timeout - "Switch the positions of the create button and notification button by spoofing device information. - -• Even if you change this setting, it may not take effect until you reboot the device. -• Disabling this setting loads more ads from the server side. -• You should disable this setting to make video ads visible." - Switch create with notifications - Stock - From 85397f85d14e86c598f5df95d79cf8de22dfa891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ho=C3=A0ng=20Gia=20B=E1=BA=A3o?= <70064328+YT-Advanced@users.noreply.github.com> Date: Thu, 3 Oct 2024 19:42:44 +0700 Subject: [PATCH 048/103] fix(YouTube - Hide feed components): `Hide Latest videos button` setting does not support tablets --- .../components/LayoutComponentsPatch.kt | 6 +-- ...ngerprint.kt => ContentPillFingerprint.kt} | 2 +- .../feed/components/FeedComponentsPatch.kt | 54 +++++++++++++------ .../fingerprints/BreakingNewsFingerprint.kt | 7 --- .../ChannelListSubMenuFingerprint.kt | 7 --- .../fingerprints/ContentPillFingerprint.kt | 13 +++++ .../LatestVideosButtonFingerprint.kt | 7 --- .../utils/resourceid/SharedResourceIdPatch.kt | 2 + 8 files changed, 56 insertions(+), 42 deletions(-) rename src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/{ContentPillInFingerprint.kt => ContentPillFingerprint.kt} (76%) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ContentPillFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt index f43d509f2..6a9b3724c 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt @@ -9,7 +9,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.general.components.fingerprints.ChipCloudFingerprint -import app.revanced.patches.music.general.components.fingerprints.ContentPillInFingerprint +import app.revanced.patches.music.general.components.fingerprints.ContentPillFingerprint import app.revanced.patches.music.general.components.fingerprints.FloatingButtonFingerprint import app.revanced.patches.music.general.components.fingerprints.FloatingButtonParentFingerprint import app.revanced.patches.music.general.components.fingerprints.HistoryMenuItemFingerprint @@ -57,7 +57,7 @@ object LayoutComponentsPatch : BaseBytecodePatch( compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( ChipCloudFingerprint, - ContentPillInFingerprint, + ContentPillFingerprint, FloatingButtonParentFingerprint, HistoryMenuItemFingerprint, HistoryMenuItemOfflineTabFingerprint, @@ -208,7 +208,7 @@ object LayoutComponentsPatch : BaseBytecodePatch( // region patch for hide tap to update button - ContentPillInFingerprint.resultOrThrow().let { + ContentPillFingerprint.resultOrThrow().let { it.mutableMethod.apply { addInstructionsWithLabels( 0, diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ContentPillInFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ContentPillFingerprint.kt similarity index 76% rename from src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ContentPillInFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ContentPillFingerprint.kt index 6fed0ad94..cfb292686 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ContentPillInFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ContentPillFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.music.general.components.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint -internal object ContentPillInFingerprint : MethodFingerprint( +internal object ContentPillFingerprint : MethodFingerprint( returnType = "V", strings = listOf("Content pill VE is null") ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt index 1ed6fc011..742a38879 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt @@ -18,6 +18,7 @@ import app.revanced.patches.youtube.feed.components.fingerprints.ChannelListSubM import app.revanced.patches.youtube.feed.components.fingerprints.ChannelListSubMenuTabletSyntheticFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ChannelTabBuilderFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ChannelTabRendererFingerprint +import app.revanced.patches.youtube.feed.components.fingerprints.ContentPillFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ElementParserFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ElementParserParentFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.EngagementPanelUpdateFingerprint @@ -37,8 +38,13 @@ import app.revanced.patches.youtube.utils.integrations.Constants.FEED_PATH import app.revanced.patches.youtube.utils.navigation.NavigationBarHookPatch import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.Bar import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.CaptionToggleContainer +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ChannelListSubMenu +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ContentPill +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.HorizontalCardList import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT import app.revanced.util.alsoResolve import app.revanced.util.getReference import app.revanced.util.getWalkerMethod @@ -46,6 +52,7 @@ import app.revanced.util.indexOfFirstInstruction import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow +import app.revanced.util.injectLiteralInstructionViewCall import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode @@ -78,6 +85,7 @@ object FeedComponentsPatch : BaseBytecodePatch( ChannelListSubMenuTabletFingerprint, ChannelListSubMenuTabletSyntheticFingerprint, ChannelTabRendererFingerprint, + ContentPillFingerprint, ElementParserParentFingerprint, EngagementPanelBuilderFingerprint, FilterBarHeightFingerprint, @@ -106,23 +114,35 @@ object FeedComponentsPatch : BaseBytecodePatch( // region patch for hide carousel shelf, subscriptions channel section, latest videos button - mapOf( - BreakingNewsFingerprint to "hideBreakingNewsShelf", // carousel shelf, only used to tablet layout. - ChannelListSubMenuFingerprint to "hideSubscriptionsChannelSection", // subscriptions channel section - LatestVideosButtonFingerprint to "hideLatestVideosButton", // latest videos button - ).forEach { (fingerprint, methodName) -> - fingerprint.resultOrThrow().let { - it.mutableMethod.apply { - val targetIndex = it.scanResult.patternScanResult!!.endIndex - val targetRegister = - getInstruction(targetIndex).registerA - - addInstruction( - targetIndex + 1, - "invoke-static {v$targetRegister}, $FEED_CLASS_DESCRIPTOR->$methodName(Landroid/view/View;)V" - ) - } - } + listOf( + // carousel shelf, only used to tablet layout. + Triple( + BreakingNewsFingerprint, + "hideBreakingNewsShelf", + HorizontalCardList + ), + // subscriptions channel section. + Triple( + ChannelListSubMenuFingerprint, + "hideSubscriptionsChannelSection", + ChannelListSubMenu + ), + // latest videos button + Triple( + ContentPillFingerprint, + "hideLatestVideosButton", + ContentPill + ), + Triple( + LatestVideosButtonFingerprint, + "hideLatestVideosButton", + Bar + ), + ).forEach { (fingerprint, methodName, literal) -> + val smaliInstruction = """ + invoke-static {v$REGISTER_TEMPLATE_REPLACEMENT}, $FEED_CLASS_DESCRIPTOR->$methodName(Landroid/view/View;)V + """ + fingerprint.injectLiteralInstructionViewCall(literal, smaliInstruction) } // endregion diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/BreakingNewsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/BreakingNewsFingerprint.kt index 2f64e057c..4ff593594 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/BreakingNewsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/BreakingNewsFingerprint.kt @@ -4,15 +4,8 @@ import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.HorizontalCardList import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode internal object BreakingNewsFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - opcodes = listOf( - Opcode.CONST, - Opcode.CONST_4, - Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT_OBJECT - ), literalSupplier = { HorizontalCardList }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuFingerprint.kt index 30da50be5..26979d9c0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ChannelListSubMenuFingerprint.kt @@ -2,14 +2,7 @@ package app.revanced.patches.youtube.feed.components.fingerprints import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ChannelListSubMenu import app.revanced.util.fingerprint.LiteralValueFingerprint -import com.android.tools.smali.dexlib2.Opcode internal object ChannelListSubMenuFingerprint : LiteralValueFingerprint( - opcodes = listOf( - Opcode.CONST, - Opcode.CONST_4, - Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT_OBJECT - ), literalSupplier = { ChannelListSubMenu }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ContentPillFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ContentPillFingerprint.kt new file mode 100644 index 000000000..0b2a092e7 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/ContentPillFingerprint.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.youtube.feed.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ContentPill +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object ContentPillFingerprint : LiteralValueFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("L", "Z"), + literalSupplier = { ContentPill }, +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LatestVideosButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LatestVideosButtonFingerprint.kt index 8ae3e97c4..93ec87b80 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LatestVideosButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/LatestVideosButtonFingerprint.kt @@ -4,17 +4,10 @@ import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.Bar import app.revanced.util.fingerprint.LiteralValueFingerprint import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode internal object LatestVideosButtonFingerprint : LiteralValueFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L", "Z"), - opcodes = listOf( - Opcode.CONST, - Opcode.IGET_OBJECT, - Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT_OBJECT - ), literalSupplier = { Bar }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index a8c77ce03..0320937b2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -42,6 +42,7 @@ object SharedResourceIdPatch : ResourcePatch() { var CompactLink = -1L var CompactListItem = -1L var ComponentLongClickListener = -1L + var ContentPill = -1L var ControlsLayoutStub = -1L var DarkBackground = -1L var DarkSplashAnimation = -1L @@ -150,6 +151,7 @@ object SharedResourceIdPatch : ResourcePatch() { CompactLink = getId(LAYOUT, "compact_link") CompactListItem = getId(LAYOUT, "compact_list_item") ComponentLongClickListener = getId(ID, "component_long_click_listener") + ContentPill = getId(LAYOUT, "content_pill") ControlsLayoutStub = getId(ID, "controls_layout_stub") DarkBackground = getId(ID, "dark_background") DarkSplashAnimation = getId(ID, "dark_splash_animation") From 6df82cfd72951867babd4e985f51098ff773f310 Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Thu, 3 Oct 2024 22:08:28 +0900 Subject: [PATCH 049/103] fix(YouTube - Shorts components): `Hide paused header` setting does not work --- .../shorts/components/ShortsComponentPatch.kt | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt index e30dac5c8..e5ad5ca36 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt @@ -36,6 +36,7 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.video.information.VideoInformationPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT import app.revanced.util.getReference +import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow @@ -283,15 +284,39 @@ object ShortsComponentPatch : BaseBytecodePatch( ShortsPausedHeaderFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = it.scanResult.patternScanResult!!.startIndex - val insertRegister = getInstruction(insertIndex).registerA - - addInstructions( - insertIndex, """ - invoke-static {v$insertRegister}, $SHORTS_CLASS_DESCRIPTOR->hideShortsPausedHeader(Z)Z - move-result v$insertRegister - """ - ) + val targetIndex = it.scanResult.patternScanResult!!.endIndex + 1 + val targetInstruction = getInstruction(targetIndex) + val targetReference = + (targetInstruction as? ReferenceInstruction)?.reference as? MethodReference + val useMethodWalker = targetInstruction.opcode == Opcode.INVOKE_VIRTUAL && + targetReference?.returnType == "V" && + targetReference.parameterTypes.firstOrNull() == "Landroid/view/View;" + + if (useMethodWalker) { + // YouTube 18.29.38 ~ YouTube 19.28.42 + getWalkerMethod(context, targetIndex).apply { + addInstructionsWithLabels( + 0, """ + invoke-static {}, $SHORTS_CLASS_DESCRIPTOR->hideShortsPausedHeader()Z + move-result v0 + if-eqz v0, :show + return-void + """, ExternalLabel("show", getInstruction(0)) + ) + } + } else { + // YouTube 19.29.42 ~ + val insertIndex = it.scanResult.patternScanResult!!.startIndex + val insertRegister = + getInstruction(insertIndex).registerA + + addInstructions( + insertIndex, """ + invoke-static {v$insertRegister}, $SHORTS_CLASS_DESCRIPTOR->hideShortsPausedHeader(Z)Z + move-result v$insertRegister + """ + ) + } } } From 0fd75af93471103146a4f5d89ca669ae3d9de27b Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Thu, 3 Oct 2024 22:36:27 +0900 Subject: [PATCH 050/103] refactor(YouTube - Layout switch): Refine settings --- .../general/layoutswitch/LayoutSwitchPatch.kt | 66 ++++++++++--------- .../FormFactorEnumConstructorFingerprint.kt | 12 ++++ .../fingerprints/GetFormFactorFingerprint.kt | 25 ------- .../youtube/settings/host/values/arrays.xml | 14 ++++ .../youtube/settings/xml/revanced_prefs.xml | 3 +- 5 files changed, 61 insertions(+), 59 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/fingerprints/FormFactorEnumConstructorFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/fingerprints/GetFormFactorFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/LayoutSwitchPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/LayoutSwitchPatch.kt index f4c8c6139..6758e0449 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/LayoutSwitchPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/LayoutSwitchPatch.kt @@ -2,19 +2,22 @@ package app.revanced.patches.youtube.general.layoutswitch import app.revanced.patcher.data.BytecodeContext 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.util.smali.ExternalLabel -import app.revanced.patches.youtube.general.layoutswitch.fingerprints.GetFormFactorFingerprint +import app.revanced.patches.shared.fingerprints.CreatePlayerRequestBodyWithModelFingerprint +import app.revanced.patches.youtube.general.layoutswitch.fingerprints.FormFactorEnumConstructorFingerprint import app.revanced.patches.youtube.general.layoutswitch.fingerprints.LayoutSwitchFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_PATH import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow 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.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference @Suppress("unused") object LayoutSwitchPatch : BaseBytecodePatch( @@ -23,52 +26,51 @@ object LayoutSwitchPatch : BaseBytecodePatch( dependencies = setOf(SettingsPatch::class), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( - GetFormFactorFingerprint, + CreatePlayerRequestBodyWithModelFingerprint, + FormFactorEnumConstructorFingerprint, LayoutSwitchFingerprint ) ) { - override fun execute(context: BytecodeContext) { + private const val INTEGRATIONS_CLASS_DESCRIPTOR = "$GENERAL_PATH/LayoutSwitchPatch;" - // region patch for enable tablet layout + override fun execute(context: BytecodeContext) { - GetFormFactorFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - val jumpIndex = indexOfFirstInstructionReversedOrThrow(Opcode.SGET_OBJECT) + val formFactorEnumClass = FormFactorEnumConstructorFingerprint + .resultOrThrow() + .mutableMethod + .definingClass - addInstructionsWithLabels( - 0, """ - invoke-static { }, $GENERAL_CLASS_DESCRIPTOR->enableTabletLayout()Z - move-result v0 # Free register - if-nez v0, :is_large_form_factor - """, - ExternalLabel( - "is_large_form_factor", - getInstruction(jumpIndex) - ) - ) + CreatePlayerRequestBodyWithModelFingerprint.resultOrThrow().mutableMethod.apply { + val index = indexOfFirstInstructionOrThrow { + val reference = getReference() + opcode == Opcode.IGET && + reference?.definingClass == formFactorEnumClass && + reference.type == "I" } - } + val register = getInstruction(index).registerA - // endregion - - // region patch for enable phone layout + addInstructions( + index + 1, """ + invoke-static {v$register}, $INTEGRATIONS_CLASS_DESCRIPTOR->getFormFactor(I)I + move-result v$register + """ + ) + } LayoutSwitchFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.IF_NEZ) - val insertRegister = getInstruction(insertIndex).registerA + val index = indexOfFirstInstructionReversedOrThrow(Opcode.IF_NEZ) + val register = getInstruction(index).registerA addInstructions( - insertIndex, """ - invoke-static {v$insertRegister}, $GENERAL_CLASS_DESCRIPTOR->enablePhoneLayout(I)I - move-result v$insertRegister + index, """ + invoke-static {v$register}, $INTEGRATIONS_CLASS_DESCRIPTOR->getWidthDp(I)I + move-result v$register """ ) } } - // endregion - /** * Add settings */ diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/fingerprints/FormFactorEnumConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/fingerprints/FormFactorEnumConstructorFingerprint.kt new file mode 100644 index 000000000..2c2f41211 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/fingerprints/FormFactorEnumConstructorFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.youtube.general.layoutswitch.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +internal object FormFactorEnumConstructorFingerprint : MethodFingerprint( + returnType = "V", + strings = listOf( + "UNKNOWN_FORM_FACTOR", + "SMALL_FORM_FACTOR", + "LARGE_FORM_FACTOR" + ) +) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/fingerprints/GetFormFactorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/fingerprints/GetFormFactorFingerprint.kt deleted file mode 100644 index c3f22c424..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/general/layoutswitch/fingerprints/GetFormFactorFingerprint.kt +++ /dev/null @@ -1,25 +0,0 @@ -package app.revanced.patches.youtube.general.layoutswitch.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.MethodFingerprint -import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode - -internal object GetFormFactorFingerprint : MethodFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, - returnType = "L", - parameters = listOf("Landroid/content/Context;", "Ljava/util/List;"), - opcodes = listOf( - Opcode.SGET_OBJECT, - Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT_OBJECT, - Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT, - Opcode.IF_EQZ, - Opcode.SGET_OBJECT, - Opcode.RETURN_OBJECT, - Opcode.INVOKE_STATIC, - Opcode.MOVE_RESULT_OBJECT, - Opcode.RETURN_OBJECT - ) -) \ No newline at end of file diff --git a/src/main/resources/youtube/settings/host/values/arrays.xml b/src/main/resources/youtube/settings/host/values/arrays.xml index 6c1224f35..258155040 100644 --- a/src/main/resources/youtube/settings/host/values/arrays.xml +++ b/src/main/resources/youtube/settings/host/values/arrays.xml @@ -22,6 +22,20 @@ MIDDLE END + + @string/revanced_change_layout_entry_1 + @string/revanced_change_layout_entry_2 + @string/revanced_change_layout_entry_3 + @string/revanced_change_layout_entry_4 + @string/revanced_change_layout_entry_5 + + + ORIGINAL + SMALL_FORM_FACTOR + SMALL_FORM_FACTOR_WIDTH_DP + LARGE_FORM_FACTOR + LARGE_FORM_FACTOR_WIDTH_DP + @string/revanced_change_start_page_entry_default @string/revanced_change_start_page_entry_search diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index f39b91640..9cae2e1eb 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -135,8 +135,7 @@ PREFERENCE_CATEGORY: GENERAL_EXPERIMENTAL_FLAGS --> + SETTINGS: LAYOUT_SWITCH --> From e171e452b1bc936079373afcaedeeb7f30394dec Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:22:37 +0300 Subject: [PATCH 058/103] fix(YouTube Music - Player components): `Hide Audio / Video toggle` setting not working in landscape mode --- .../components/PlayerComponentsPatch.kt | 30 +++++++++++++------ .../AudioVideoSwitchToggleFingerprint.kt | 25 ++++++++++++---- .../utils/resourceid/SharedResourceIdPatch.kt | 2 -- 3 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt index b16e361fd..ffcdedd01 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt @@ -6,6 +6,7 @@ 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.extensions.or import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable @@ -13,6 +14,7 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.player.components.fingerprints.AudioVideoSwitchToggleFingerprint +import app.revanced.patches.music.player.components.fingerprints.AudioVideoSwitchToggleFingerprint.AUDIO_VIDEO_SWITCH_TOGGLE_VISIBILITY import app.revanced.patches.music.player.components.fingerprints.EngagementPanelHeightFingerprint import app.revanced.patches.music.player.components.fingerprints.EngagementPanelHeightParentFingerprint import app.revanced.patches.music.player.components.fingerprints.HandleSearchRenderedFingerprint @@ -46,7 +48,6 @@ import app.revanced.patches.music.utils.integrations.Constants.INTEGRATIONS_PATH import app.revanced.patches.music.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.mainactivity.MainActivityResolvePatch import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch -import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.AudioVideoSwitchToggle import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.ColorGrey import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.DarkBackground import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerPlayPauseReplayButton @@ -629,14 +630,25 @@ object PlayerComponentsPatch : BaseBytecodePatch( // region patch for hide audio video switch toggle AudioVideoSwitchToggleFingerprint.resultOrThrow().mutableMethod.apply { - val constIndex = indexOfFirstWideLiteralInstructionValueOrThrow(AudioVideoSwitchToggle) - val viewIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.MOVE_RESULT_OBJECT) - val viewRegister = getInstruction(viewIndex).registerA - - addInstruction( - viewIndex + 1, - "invoke-static {v$viewRegister}, $PLAYER_CLASS_DESCRIPTOR->hideAudioVideoSwitchToggle(Landroid/view/View;)V" - ) + implementation!!.instructions + .withIndex() + .filter { (_, instruction) -> + val reference = (instruction as? ReferenceInstruction)?.reference + instruction.opcode == Opcode.INVOKE_VIRTUAL && + reference is MethodReference && + reference.toString() == AUDIO_VIDEO_SWITCH_TOGGLE_VISIBILITY + } + .map { (index, _) -> index } + .reversed() + .forEach { index -> + val instruction = getInstruction(index) + + replaceInstruction( + index, + "invoke-static {v${instruction.registerC}, v${instruction.registerD}}," + + "$PLAYER_CLASS_DESCRIPTOR->hideAudioVideoSwitchToggle(Landroid/view/View;I)V" + ) + } } SettingsPatch.addSwitchPreference( diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt index 6101c89e9..1638d3f81 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt @@ -1,12 +1,25 @@ package app.revanced.patches.music.player.components.fingerprints import app.revanced.patcher.extensions.or -import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.AudioVideoSwitchToggle -import app.revanced.util.fingerprint.LiteralValueFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.music.player.components.fingerprints.AudioVideoSwitchToggleFingerprint.AUDIO_VIDEO_SWITCH_TOGGLE_VISIBILITY +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal object AudioVideoSwitchToggleFingerprint : LiteralValueFingerprint( +internal object AudioVideoSwitchToggleFingerprint : MethodFingerprint( returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - literalSupplier = { AudioVideoSwitchToggle }, -) \ No newline at end of file + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = emptyList(), + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.toString() == AUDIO_VIDEO_SWITCH_TOGGLE_VISIBILITY + } >= 0 + } +) { + const val AUDIO_VIDEO_SWITCH_TOGGLE_VISIBILITY = + "Lcom/google/android/apps/youtube/music/player/AudioVideoSwitcherToggleView;->setVisibility(I)V" +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt index 3926a3abf..bd40f4674 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt @@ -16,7 +16,6 @@ import app.revanced.patches.shared.mapping.ResourceType.STYLE @Patch(dependencies = [ResourceMappingPatch::class]) object SharedResourceIdPatch : ResourcePatch() { var AccountSwitcherAccessibility = -1L - var AudioVideoSwitchToggle = -1L var BottomSheetRecyclerView = -1L var ButtonContainer = -1L var ButtonIconPaddingMedium = -1L @@ -62,7 +61,6 @@ object SharedResourceIdPatch : ResourcePatch() { override fun execute(context: ResourceContext) { AccountSwitcherAccessibility = getId(STRING, "account_switcher_accessibility_label") - AudioVideoSwitchToggle = getId(ID, "audio_video_switch_toggle") BottomSheetRecyclerView = getId(LAYOUT, "bottom_sheet_recycler_view") ButtonContainer = getId(ID, "button_container") ButtonIconPaddingMedium = getId(DIMEN, "button_icon_padding_medium") From db80b1d0dd30d0f19323541c9018ff5ab62dae2c Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:31:10 +0300 Subject: [PATCH 059/103] fix(YouTube Music - Player components): Patches do not apply properly in certain versions --- .../components/fingerprints/EngagementPanelHeightFingerprint.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightFingerprint.kt index 85111f705..6c3e8c3a9 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/EngagementPanelHeightFingerprint.kt @@ -11,7 +11,9 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference internal object EngagementPanelHeightFingerprint : MethodFingerprint( returnType = "L", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + // In YouTube Music 7.21.50+, there are two methods with similar structure, so this Opcode pattern must be used. opcodes = listOf( + Opcode.IGET_OBJECT, Opcode.IGET_OBJECT, Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT, From 00c6730ed977274a70bf8cdd75b3d12af6b9f485 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:31:30 +0300 Subject: [PATCH 060/103] feat(YouTube - Toolbar components): Add `Hide YouTube Doodles` setting --- .../general/toolbar/ToolBarComponentsPatch.kt | 23 +++++++++++++++++++ .../YoodlesImageViewFingerprint.kt | 14 +++++++++++ .../utils/resourceid/SharedResourceIdPatch.kt | 2 ++ .../youtube/settings/xml/revanced_prefs.xml | 1 + 4 files changed, 40 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/YoodlesImageViewFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt index 911ecb988..320091e12 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/ToolBarComponentsPatch.kt @@ -24,6 +24,7 @@ import app.revanced.patches.youtube.general.toolbar.fingerprints.SearchBarParent 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.YoodlesImageViewFingerprint import app.revanced.patches.youtube.general.toolbar.fingerprints.YouActionBarFingerprint import app.revanced.patches.youtube.utils.castbutton.CastButtonPatch import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE @@ -42,6 +43,7 @@ import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT import app.revanced.util.alsoResolve import app.revanced.util.doRecursively import app.revanced.util.findMethodOrThrow +import app.revanced.util.findOpcodeIndicesReversed import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow @@ -84,6 +86,7 @@ object ToolBarComponentsPatch : BaseBytecodePatch( SetActionBarRingoFingerprint, SetWordMarkHeaderFingerprint, ImageSearchButtonConfigFingerprint, + YoodlesImageViewFingerprint, ) ) { private const val TARGET_RESOURCE_PATH = "res/layout/action_bar_ringo_background.xml" @@ -366,6 +369,26 @@ object ToolBarComponentsPatch : BaseBytecodePatch( // endregion + // region patch for hide YouTube Doodles + + YoodlesImageViewFingerprint.resultOrThrow().mutableMethod.apply { + findOpcodeIndicesReversed{ + opcode == Opcode.INVOKE_VIRTUAL + && getReference()?.name == "setImageDrawable" + }.forEach { insertIndex -> + val (viewRegister, drawableRegister) = getInstruction(insertIndex).let { + Pair(it.registerC, it.registerD) + } + replaceInstruction( + insertIndex, + "invoke-static {v$viewRegister, v$drawableRegister}, " + + "$GENERAL_CLASS_DESCRIPTOR->hideYouTubeDoodles(Landroid/widget/ImageView;Landroid/graphics/drawable/Drawable;)V" + ) + } + } + + // endregion + // region patch for replace create button CreateButtonDrawableFingerprint.resultOrThrow().mutableMethod.apply { diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/YoodlesImageViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/YoodlesImageViewFingerprint.kt new file mode 100644 index 000000000..90f21ec7b --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/toolbar/fingerprints/YoodlesImageViewFingerprint.kt @@ -0,0 +1,14 @@ +package app.revanced.patches.youtube.general.toolbar.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.YouTubeLogo +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +@Suppress("SpellCheckingInspection") +internal object YoodlesImageViewFingerprint : LiteralValueFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("L", "L"), + returnType = "Landroid/view/View;", + literalSupplier = { YouTubeLogo } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index 0320937b2..0819c4138 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -118,6 +118,7 @@ object SharedResourceIdPatch : ResourcePatch() { var VideoZoomSnapIndicator = -1L var VoiceSearch = -1L var YouTubeControlsOverlaySubtitleButton = -1L + var YouTubeLogo = -1L var YtOutlinePictureInPictureWhite = -1L var YtOutlineVideoCamera = -1L var YtOutlineXWhite = -1L @@ -233,6 +234,7 @@ object SharedResourceIdPatch : ResourcePatch() { VoiceSearch = getId(ID, "voice_search") YouTubeControlsOverlaySubtitleButton = getId(LAYOUT, "youtube_controls_overlay_subtitle_button") + YouTubeLogo = getId(ID, "youtube_logo") YtOutlinePictureInPictureWhite = getId(DRAWABLE, "yt_outline_picture_in_picture_white_24") YtOutlineVideoCamera = getId(DRAWABLE, "yt_outline_video_camera_black_24") YtOutlineXWhite = getId(DRAWABLE, "yt_outline_x_white_24") diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 9cae2e1eb..ee7d8f826 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -97,6 +97,7 @@ From 8bffac49104ff93e0ee515bbee77a3444a54369f Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:31:59 +0300 Subject: [PATCH 061/103] chore(YouTube - Hide feed components): Change default offset for `Hide related videos` setting --- src/main/resources/youtube/settings/host/values/arrays.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/youtube/settings/host/values/arrays.xml b/src/main/resources/youtube/settings/host/values/arrays.xml index 258155040..f3aea7f2c 100644 --- a/src/main/resources/youtube/settings/host/values/arrays.xml +++ b/src/main/resources/youtube/settings/host/values/arrays.xml @@ -230,12 +230,18 @@ 0 +1 +2 + +3 + +4 + +5 -1 0 1 2 + 3 + 4 + 5 @string/revanced_watch_history_type_entry_1 From 819189ed9e66e039c540a78c81c84f9b6bf96682 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:33:40 +0300 Subject: [PATCH 062/103] fix(YouTube - Custom Shorts action buttons): Low icon quality for `Cairo` option on YouTube 18.29.38 --- .../cairo/drawable/ic_right_comment_32c.xml | 865 +++++----- .../drawable/ic_right_dislike_off_32c.xml | 1265 ++++++++------- .../cairo/drawable/ic_right_like_off_32c.xml | 1255 ++++++++------- .../cairo/drawable/ic_right_share_32c.xml | 1429 +++++++++-------- 4 files changed, 2538 insertions(+), 2276 deletions(-) diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_comment_32c.xml b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_comment_32c.xml index 8919e0a6f..3f8a9c6e1 100644 --- a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_comment_32c.xml +++ b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_comment_32c.xml @@ -1,404 +1,461 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_dislike_off_32c.xml b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_dislike_off_32c.xml index 54f0a62ce..0ef38a542 100644 --- a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_dislike_off_32c.xml +++ b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_dislike_off_32c.xml @@ -1,588 +1,677 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_like_off_32c.xml b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_like_off_32c.xml index abbd8382d..4ee76ebcd 100644 --- a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_like_off_32c.xml +++ b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_like_off_32c.xml @@ -1,600 +1,655 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_share_32c.xml b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_share_32c.xml index 12f19f0ef..d3dfe7892 100644 --- a/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_share_32c.xml +++ b/src/main/resources/youtube/shorts/actionbuttons/cairo/drawable/ic_right_share_32c.xml @@ -1,684 +1,745 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ca3dba27402448c8a89c3fc3fabb080f8315c303 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:35:52 +0300 Subject: [PATCH 063/103] fix(YouTube Music - Spoof app version): ListPreference sometimes selects wrong values --- .../general/spoofappversion/SpoofAppVersionPatch.kt | 11 +++++++++++ .../music/utils/settings/SettingsBytecodePatch.kt | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt index b3a40403d..11a691e9c 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt @@ -1,11 +1,15 @@ package app.revanced.patches.music.general.spoofappversion import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patches.music.general.oldstylelibraryshelf.OldStyleLibraryShelfPatch import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.music.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.settings.CategoryType +import app.revanced.patches.music.utils.settings.SettingsBytecodePatch import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.util.appendAppVersion +import app.revanced.util.findMethodOrThrow import app.revanced.util.patch.BaseResourcePatch @Suppress("unused") @@ -24,6 +28,13 @@ object SpoofAppVersionPatch : BaseResourcePatch( if (SettingsPatch.upward0718) { context.appendAppVersion("7.16.53") + + SettingsBytecodePatch.contexts.findMethodOrThrow(GENERAL_CLASS_DESCRIPTOR) { + name == "getSpoofAppVersionDefault" + }.replaceInstruction( + 0, + "const-string v0, \"7.16.53\"" + ) } SettingsPatch.addSwitchPreference( diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsBytecodePatch.kt index e3a25fead..44ac05499 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsBytecodePatch.kt @@ -44,8 +44,10 @@ object SettingsBytecodePatch : BytecodePatch( "$INTEGRATIONS_PATH/settings/preference/ReVancedPreferenceFragment;" private const val INTEGRATIONS_INITIALIZATION_CLASS_DESCRIPTOR = "$UTILS_PATH/InitializationPatch;" + lateinit var contexts: BytecodeContext override fun execute(context: BytecodeContext) { + contexts = context /** * Set SharedPrefCategory From 5bb30320225cc82ef1474b9744844af6e3272eb9 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:36:16 +0300 Subject: [PATCH 064/103] chore(YouTube): Move `TextComponentPatch` to a shared path --- .../textcomponent/TextComponentPatch.kt | 135 ++++++++++++++++++ .../SpannableStringBuilderFingerprint.kt | 26 ++++ .../TextComponentConstructorFingerprint.kt | 2 +- .../TextComponentContextFingerprint.kt | 2 +- .../shorts/components/ShortsComponentPatch.kt | 32 +---- .../TextComponentSpecFingerprint.kt | 8 -- .../general/ReturnYouTubeDislikePatch.kt | 70 +-------- .../shorts/ReturnYouTubeDislikeShortsPatch.kt | 47 ++---- 8 files changed, 180 insertions(+), 142 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt rename src/main/kotlin/app/revanced/patches/{youtube/utils/returnyoutubedislike/general => shared/textcomponent}/fingerprints/TextComponentConstructorFingerprint.kt (80%) rename src/main/kotlin/app/revanced/patches/{youtube/utils/returnyoutubedislike/general => shared/textcomponent}/fingerprints/TextComponentContextFingerprint.kt (86%) delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/TextComponentSpecFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt b/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt new file mode 100644 index 000000000..44aa2ee80 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt @@ -0,0 +1,135 @@ +package app.revanced.patches.shared.textcomponent + +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.replaceInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchException +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod +import app.revanced.patches.shared.textcomponent.fingerprints.SpannableStringBuilderFingerprint +import app.revanced.patches.shared.textcomponent.fingerprints.TextComponentConstructorFingerprint +import app.revanced.patches.shared.textcomponent.fingerprints.TextComponentContextFingerprint +import app.revanced.util.alsoResolve +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import app.revanced.util.indexOfFirstInstructionOrThrow +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 +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +object TextComponentPatch : BytecodePatch( + setOf( + SpannableStringBuilderFingerprint, + TextComponentConstructorFingerprint, + ) +) { + override fun execute(context: BytecodeContext) { + + SpannableStringBuilderFingerprint.resultOrThrow().mutableMethod.apply { + spannedMethod = this + spannedIndex = SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction(this) + spannedRegister = getInstruction(spannedIndex).registerC + spannedContextRegister = + getInstruction(0).registerA + + replaceInstruction( + spannedIndex, + "nop" + ) + addInstruction( + ++spannedIndex, + "invoke-static {v$spannedRegister}, ${SpannableStringBuilderFingerprint.SPANNABLE_STRING_REFERENCE}" + ) + } + + TextComponentContextFingerprint.alsoResolve( + context, TextComponentConstructorFingerprint + ).let { + it.mutableMethod.apply { + textComponentMethod = this + val conversionContextFieldIndex = indexOfFirstInstructionOrThrow { + getReference()?.type == "Ljava/util/Map;" + } - 1 + val conversionContextFieldReference = + getInstruction(conversionContextFieldIndex).reference + + // ~ YouTube 19.32.xx + val legacyCharSequenceIndex = indexOfFirstInstruction { + getReference()?.type == "Ljava/util/BitSet;" + } - 1 + val charSequenceIndex = indexOfFirstInstruction { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL && + reference?.returnType == "V" && + reference.parameterTypes.firstOrNull() == "Ljava/lang/CharSequence;" + } + + val insertIndex: Int + + if (legacyCharSequenceIndex > -2) { + textComponentRegister = + getInstruction(legacyCharSequenceIndex).registerA + insertIndex = legacyCharSequenceIndex - 1 + } else if (charSequenceIndex > -1) { + textComponentRegister = + getInstruction(charSequenceIndex).registerD + insertIndex = charSequenceIndex + } else { + throw PatchException("Could not find insert index") + } + + textComponentContextRegister = getInstruction( + indexOfFirstInstructionOrThrow(insertIndex, Opcode.IGET_OBJECT) + ).registerA + + addInstructions( + insertIndex, """ + move-object/from16 v$textComponentContextRegister, p0 + iget-object v$textComponentContextRegister, v$textComponentContextRegister, $conversionContextFieldReference + """ + ) + textComponentIndex = insertIndex + 2 + } + } + } + + private lateinit var spannedMethod: MutableMethod + private var spannedIndex = 0 + private var spannedRegister = 0 + private var spannedContextRegister = 0 + + private lateinit var textComponentMethod: MutableMethod + private var textComponentIndex = 0 + private var textComponentRegister = 0 + private var textComponentContextRegister = 0 + + fun hookSpannableString( + classDescriptor: String, + methodName: String + ) = spannedMethod.addInstructions( + spannedIndex, """ + invoke-static {v$spannedContextRegister, v$spannedRegister}, $classDescriptor->$methodName(Ljava/lang/Object;Ljava/lang/CharSequence;)Ljava/lang/CharSequence; + move-result-object v$spannedRegister + """ + ) + + fun hookTextComponent( + classDescriptor: String, + methodName: String = "onLithoTextLoaded" + ) = textComponentMethod.apply { + addInstructions( + textComponentIndex, """ + invoke-static {v$textComponentContextRegister, v$textComponentRegister}, $classDescriptor->$methodName(Ljava/lang/Object;Ljava/lang/CharSequence;)Ljava/lang/CharSequence; + move-result-object v$textComponentRegister + """ + ) + textComponentIndex += 2 + } +} + diff --git a/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt new file mode 100644 index 000000000..1d88bab53 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt @@ -0,0 +1,26 @@ +package app.revanced.patches.shared.textcomponent.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.shared.textcomponent.fingerprints.SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object SpannableStringBuilderFingerprint : MethodFingerprint( + returnType = "Ljava/lang/CharSequence;", + strings = listOf("Failed to set PB Style Run Extension in TextComponentSpec. Extension id: %s"), + customFingerprint = { methodDef, _ -> + indexOfSpannableStringInstruction(methodDef) >= 0 + } +) { + const val SPANNABLE_STRING_REFERENCE = + "Landroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;" + + fun indexOfSpannableStringInstruction(methodDef: Method) = + methodDef.indexOfFirstInstruction { + opcode == Opcode.INVOKE_STATIC && + getReference()?.toString() == SPANNABLE_STRING_REFERENCE + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/fingerprints/TextComponentConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/TextComponentConstructorFingerprint.kt similarity index 80% rename from src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/fingerprints/TextComponentConstructorFingerprint.kt rename to src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/TextComponentConstructorFingerprint.kt index fea97280e..264d3d178 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/fingerprints/TextComponentConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/TextComponentConstructorFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints +package app.revanced.patches.shared.textcomponent.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/fingerprints/TextComponentContextFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/TextComponentContextFingerprint.kt similarity index 86% rename from src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/fingerprints/TextComponentContextFingerprint.kt rename to src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/TextComponentContextFingerprint.kt index 85798107a..7815f6cca 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/fingerprints/TextComponentContextFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/TextComponentContextFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints +package app.revanced.patches.shared.textcomponent.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt index e5ad5ca36..bc7f688f3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/shorts/components/ShortsComponentPatch.kt @@ -11,6 +11,7 @@ import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.patches.shared.textcomponent.TextComponentPatch import app.revanced.patches.youtube.shorts.components.fingerprints.ShortsButtonFingerprint import app.revanced.patches.youtube.shorts.components.fingerprints.ShortsPaidPromotionFingerprint import app.revanced.patches.youtube.shorts.components.fingerprints.ShortsPausedHeaderFingerprint @@ -18,7 +19,6 @@ import app.revanced.patches.youtube.shorts.components.fingerprints.ShortsPivotLe import app.revanced.patches.youtube.shorts.components.fingerprints.ShortsSubscriptionsTabletFingerprint import app.revanced.patches.youtube.shorts.components.fingerprints.ShortsSubscriptionsTabletParentFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.youtube.utils.fingerprints.TextComponentSpecFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.SHORTS_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH @@ -35,7 +35,6 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.Right import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.video.information.VideoInformationPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT -import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow @@ -44,7 +43,6 @@ import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.replaceLiteralInstructionCall 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.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @@ -65,7 +63,8 @@ object ShortsComponentPatch : BaseBytecodePatch( ShortsRepeatPatch::class, ShortsTimeStampPatch::class, ShortsToolBarPatch::class, - VideoInformationPatch::class + TextComponentPatch::class, + VideoInformationPatch::class, ), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( @@ -74,7 +73,6 @@ object ShortsComponentPatch : BaseBytecodePatch( ShortsPausedHeaderFingerprint, ShortsPivotLegacyFingerprint, ShortsSubscriptionsTabletParentFingerprint, - TextComponentSpecFingerprint ) ) { private const val INTEGRATION_CLASS_DESCRIPTOR = @@ -324,29 +322,7 @@ object ShortsComponentPatch : BaseBytecodePatch( // region patch for return shorts channel name - TextComponentSpecFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - val insertIndex = indexOfFirstInstructionOrThrow { - getReference()?.toString() == "Landroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;" - } - val charSequenceRegister = - getInstruction(insertIndex).registerC - val conversionContextRegister = - getInstruction(0).registerA - - val replaceReference = - getInstruction(insertIndex).reference - - addInstructions( - insertIndex + 1, """ - invoke-static {v$conversionContextRegister, v$charSequenceRegister}, $INTEGRATION_CLASS_DESCRIPTOR->onCharSequenceLoaded(Ljava/lang/Object;Ljava/lang/CharSequence;)Ljava/lang/CharSequence; - move-result-object v$charSequenceRegister - invoke-static {v$charSequenceRegister}, $replaceReference - """ - ) - removeInstruction(insertIndex) - } - } + TextComponentPatch.hookSpannableString(INTEGRATION_CLASS_DESCRIPTOR, "onCharSequenceLoaded") VideoInformationPatch.hookShorts("$INTEGRATION_CLASS_DESCRIPTOR->newShortsVideoStarted(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V") diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/TextComponentSpecFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/TextComponentSpecFingerprint.kt deleted file mode 100644 index f698f4a9b..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/TextComponentSpecFingerprint.kt +++ /dev/null @@ -1,8 +0,0 @@ -package app.revanced.patches.youtube.utils.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object TextComponentSpecFingerprint : MethodFingerprint( - returnType = "Ljava/lang/CharSequence;", - strings = listOf("Failed to set PB Style Run Extension in TextComponentSpec. Extension id: %s") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt index a580ea3ca..772cdaf9a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt @@ -2,34 +2,22 @@ package app.revanced.patches.youtube.utils.returnyoutubedislike.general import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstructions -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.patcher.patch.PatchException import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.patches.shared.textcomponent.TextComponentPatch import app.revanced.patches.youtube.utils.compatibility.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.returnyoutubedislike.general.fingerprints.DislikeFingerprint import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.LikeFingerprint import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.RemoveLikeFingerprint -import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.TextComponentConstructorFingerprint -import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.TextComponentContextFingerprint import app.revanced.patches.youtube.utils.returnyoutubedislike.rollingnumber.ReturnYouTubeDislikeRollingNumberPatch import app.revanced.patches.youtube.utils.returnyoutubedislike.shorts.ReturnYouTubeDislikeShortsPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.video.information.VideoInformationPatch import app.revanced.patches.youtube.video.videoid.VideoIdPatch -import app.revanced.util.getReference -import app.revanced.util.indexOfFirstInstruction -import app.revanced.util.indexOfFirstInstructionOrThrow 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 -import com.android.tools.smali.dexlib2.iface.reference.FieldReference -import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") object ReturnYouTubeDislikePatch : BaseBytecodePatch( @@ -40,6 +28,7 @@ object ReturnYouTubeDislikePatch : BaseBytecodePatch( ReturnYouTubeDislikeRollingNumberPatch::class, ReturnYouTubeDislikeShortsPatch::class, SettingsPatch::class, + TextComponentPatch::class, VideoInformationPatch::class ), compatiblePackages = COMPATIBLE_PACKAGE, @@ -47,7 +36,6 @@ object ReturnYouTubeDislikePatch : BaseBytecodePatch( DislikeFingerprint, LikeFingerprint, RemoveLikeFingerprint, - TextComponentConstructorFingerprint ) ) { private const val INTEGRATIONS_RYD_CLASS_DESCRIPTOR = @@ -70,59 +58,7 @@ object ReturnYouTubeDislikePatch : BaseBytecodePatch( ) } - - TextComponentConstructorFingerprint.resultOrThrow().let { parentResult -> - // Resolves fingerprints - TextComponentContextFingerprint.resolve(context, parentResult.classDef) - - TextComponentContextFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - val conversionContextFieldIndex = indexOfFirstInstructionOrThrow { - getReference()?.type == "Ljava/util/Map;" - } - 1 - val conversionContextFieldReference = - getInstruction(conversionContextFieldIndex).reference - - val charSequenceIndex1932 = indexOfFirstInstruction { - getReference()?.type == "Ljava/util/BitSet;" - } - 1 - val charSequenceIndex1933 = indexOfFirstInstruction { - val reference = getReference() - opcode == Opcode.INVOKE_VIRTUAL && - reference?.returnType == "V" && - reference.parameterTypes.firstOrNull() == "Ljava/lang/CharSequence;" - } - - val insertIndex: Int - val charSequenceRegister: Int - - if (charSequenceIndex1932 > -2) { - charSequenceRegister = - getInstruction(charSequenceIndex1932).registerA - insertIndex = charSequenceIndex1932 - 1 - } else if (charSequenceIndex1933 > -1) { - charSequenceRegister = - getInstruction(charSequenceIndex1933).registerD - insertIndex = charSequenceIndex1933 - } else { - throw PatchException("Could not find insert index") - } - - val freeRegister = getInstruction( - indexOfFirstInstructionOrThrow(insertIndex, Opcode.IGET_OBJECT) - ).registerA - - addInstructions( - insertIndex, """ - move-object/from16 v$freeRegister, p0 - iget-object v$freeRegister, v$freeRegister, $conversionContextFieldReference - invoke-static {v$freeRegister, v$charSequenceRegister}, $INTEGRATIONS_RYD_CLASS_DESCRIPTOR->onLithoTextLoaded(Ljava/lang/Object;Ljava/lang/CharSequence;)Ljava/lang/CharSequence; - move-result-object v$charSequenceRegister - """ - ) - } - } - } + TextComponentPatch.hookTextComponent(INTEGRATIONS_RYD_CLASS_DESCRIPTOR) // region Inject newVideoLoaded event handler to update dislikes when a new video is loaded. VideoIdPatch.hookVideoId("$INTEGRATIONS_RYD_CLASS_DESCRIPTOR->newVideoLoaded(Ljava/lang/String;)V") diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt index d174f5ece..f26911ea0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt @@ -1,33 +1,29 @@ package app.revanced.patches.youtube.utils.returnyoutubedislike.shorts import app.revanced.patcher.data.BytecodeContext -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.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.smali.ExternalLabel -import app.revanced.patches.youtube.utils.fingerprints.TextComponentSpecFingerprint +import app.revanced.patches.shared.textcomponent.TextComponentPatch import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH import app.revanced.patches.youtube.utils.returnyoutubedislike.shorts.fingerprints.ShortsTextViewFingerprint import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow 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 -import com.android.tools.smali.dexlib2.iface.reference.MethodReference -@Patch(dependencies = [SettingsPatch::class]) +@Patch( + dependencies = [ + SettingsPatch::class, + TextComponentPatch::class + ] +) object ReturnYouTubeDislikeShortsPatch : BytecodePatch( - setOf( - ShortsTextViewFingerprint, - TextComponentSpecFingerprint - ) + setOf(ShortsTextViewFingerprint) ) { private const val INTEGRATIONS_RYD_CLASS_DESCRIPTOR = "$UTILS_PATH/ReturnYouTubeDislikePatch;" @@ -71,31 +67,8 @@ object ReturnYouTubeDislikeShortsPatch : BytecodePatch( } } - if (!SettingsPatch.upward1834) { - return - } - - TextComponentSpecFingerprint.resultOrThrow().let { - it.mutableMethod.apply { - val insertIndex = indexOfFirstInstructionOrThrow { - getReference()?.toString() == "Landroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;" - } - val charSequenceRegister = - getInstruction(insertIndex).registerC - val conversionContextRegister = - getInstruction(0).registerA - val replaceReference = - getInstruction(insertIndex).reference - - addInstructions( - insertIndex + 1, """ - invoke-static {v$conversionContextRegister, v$charSequenceRegister}, $INTEGRATIONS_RYD_CLASS_DESCRIPTOR->onCharSequenceLoaded(Ljava/lang/Object;Ljava/lang/CharSequence;)Ljava/lang/CharSequence; - move-result-object v$charSequenceRegister - invoke-static {v$charSequenceRegister}, $replaceReference - """ - ) - removeInstruction(insertIndex) - } + if (SettingsPatch.upward1834) { + TextComponentPatch.hookSpannableString(INTEGRATIONS_RYD_CLASS_DESCRIPTOR, "onCharSequenceLoaded") } } } From 4492c0a4bd85e7b79f0d54812df4ba95e4726a7b Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:02:48 +0900 Subject: [PATCH 065/103] chore: lint code --- .../general/miniplayer/MiniplayerPatch.kt | 4 ++-- .../youtube/utils/settings/SettingsPatch.kt | 4 ++-- .../PlayerParameterBuilderFingerprint.kt | 24 +++++-------------- .../kotlin/app/revanced/util/BytecodeUtils.kt | 12 ++++++++++ 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt index 8482e06f7..c49dcfb85 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt @@ -93,9 +93,9 @@ object MiniplayerPatch : BaseBytecodePatch( // Modern mini player is only present and functional in 19.15+. // Resource is not present in older versions. Using it to determine, if patching an old version. - val isPatchingOldVersion = !SettingsPatch.upward1912 + val isPatchingOldVersion = !SettingsPatch.upward1915 - // From 19.12 to 19.16 using mixed up drawables for tablet modern. + // From 19.15 to 19.16 using mixed up drawables for tablet modern. val shouldFixMixedUpDrawables = YtOutlineXWhite > 0 && YtOutlinePictureInPictureWhite > 0 // region Enable tablet miniplayer. diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsPatch.kt index 7b3d48312..dfa7cc981 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsPatch.kt @@ -89,7 +89,7 @@ object SettingsPatch : BaseResourcePatch( internal var upward1842 = false internal var upward1849 = false internal var upward1902 = false - internal var upward1912 = false + internal var upward1915 = false internal var upward1923 = false internal var upward1925 = false internal var upward1928 = false @@ -292,7 +292,7 @@ object SettingsPatch : BaseResourcePatch( upward1842 = 234302000 <= playServicesVersion upward1849 = 235000000 <= playServicesVersion upward1902 = 240204000 < playServicesVersion - upward1912 = 241302000 <= playServicesVersion + upward1915 = 241602000 <= playServicesVersion upward1923 = 242402000 <= playServicesVersion upward1925 = 242599000 <= playServicesVersion upward1928 = 242905000 <= playServicesVersion diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/playerresponse/fingerprint/PlayerParameterBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/playerresponse/fingerprint/PlayerParameterBuilderFingerprint.kt index 0cb4f6f3d..39c7834cb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/playerresponse/fingerprint/PlayerParameterBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/playerresponse/fingerprint/PlayerParameterBuilderFingerprint.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patches.youtube.video.playerresponse.fingerprint.PlayerParameterBuilderFingerprint.ENDS_WITH_PARAMETER_LIST import app.revanced.patches.youtube.video.playerresponse.fingerprint.PlayerParameterBuilderFingerprint.STARTS_WITH_PARAMETER_LIST -import app.revanced.patches.youtube.video.playerresponse.fingerprint.PlayerParameterBuilderFingerprint.parametersEqual +import app.revanced.util.parametersEqual import com.android.tools.smali.dexlib2.AccessFlags internal object PlayerParameterBuilderFingerprint : MethodFingerprint( @@ -48,13 +48,13 @@ internal object PlayerParameterBuilderFingerprint : MethodFingerprint( } val startsWithMethodParameterList = parameterTypes.slice(0..5) - val endsWithMethodParameterList = parameterTypes.slice(parameterSize - 7.., - parameters2: Iterable - ): Boolean { - if (parameters1.count() != parameters2.count()) return false - val iterator1 = parameters1.iterator() - parameters2.forEach { - if (!it.startsWith(iterator1.next())) return false - } - return true - } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index 05b26d759..eee10472e 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -41,6 +41,18 @@ fun MethodFingerprint.resultOrThrow() = result ?: throw exception fun MultiMethodFingerprint.resultOrThrow() = result.ifEmpty { throw exception } +fun parametersEqual( + parameters1: Iterable, + parameters2: Iterable +): Boolean { + if (parameters1.count() != parameters2.count()) return false + val iterator1 = parameters1.iterator() + parameters2.forEach { + if (!it.startsWith(iterator1.next())) return false + } + return true +} + /** * The [PatchException] of failing to resolve a [MethodFingerprint]. * From 9f0accb73187322dcaf18aa8d14e8de605c07ba5 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:18:50 +0300 Subject: [PATCH 066/103] chore(YouTube): Replace with a fingerprint that supports a wider range of versions --- .../patches/shared/litho/LithoFilterPatch.kt | 21 ++++---- ...cessibilityOfflineButtonSyncFingerprint.kt | 32 +++++++++--- .../components/PlayerComponentsPatch.kt | 17 ++++--- .../BuildBrowseRequestFingerprint.kt | 2 +- .../SuggestedVideoEndScreenPatch.kt | 30 ++++++++--- .../AutoNavConstructorFingerprint.kt | 11 ++++ .../fingerprints/AutoNavStatusFingerprint.kt | 11 ++++ .../utils/playertype/PlayerTypeHookPatch.kt | 10 ++-- .../fingerprint/VideoStateFingerprint.kt | 12 ++--- .../utils/resourceid/SharedResourceIdPatch.kt | 2 - .../information/VideoInformationPatch.kt | 44 ++++++++++++++-- .../fingerprints/SeekRelativeFingerprint.kt | 5 +- .../youtube/video/videoid/VideoIdPatch.kt | 5 +- .../fingerprints/VideoIdFingerprint.kt | 34 ++++++++++++- .../fingerprints/VideoIdParentFingerprint.kt | 9 ---- .../kotlin/app/revanced/util/BytecodeUtils.kt | 50 ++++++++++++++++++- .../fingerprint/MultiMethodFingerprint.kt | 3 ++ .../util/patch/MultiMethodBytecodePatch.kt | 4 ++ 18 files changed, 234 insertions(+), 68 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/AutoNavConstructorFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/AutoNavStatusFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdParentFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/shared/litho/LithoFilterPatch.kt b/src/main/kotlin/app/revanced/patches/shared/litho/LithoFilterPatch.kt index 5f3092409..44f846c43 100644 --- a/src/main/kotlin/app/revanced/patches/shared/litho/LithoFilterPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/litho/LithoFilterPatch.kt @@ -96,17 +96,20 @@ object LithoFilterPatch : BytecodePatch( } .map { (index, _) -> index } .reversed() - .forEach { - val insertRegister = - getInstruction(it + 1).registerA - val insertIndex = it + 2 - - addInstructionsWithLabels( - insertIndex, """ + .forEach { index -> + val insertInstruction = getInstruction(index + 1) + if (insertInstruction is OneRegisterInstruction) { + val insertRegister = + insertInstruction.registerA + val insertIndex = index + 2 + + addInstructionsWithLabels( + insertIndex, """ if-nez v$insertRegister, :ignore """ + emptyComponentLabel, - ExternalLabel("ignore", getInstruction(insertIndex)) - ) + ExternalLabel("ignore", getInstruction(insertIndex)) + ) + } } emptyComponentLabel = """ diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt index d3cea0a63..3fb775748 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/downloads/fingerprints/AccessibilityOfflineButtonSyncFingerprint.kt @@ -1,12 +1,32 @@ package app.revanced.patches.youtube.general.downloads.fingerprints import app.revanced.patcher.extensions.or -import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.AccessibilityOfflineButtonSync -import app.revanced.util.fingerprint.LiteralValueFingerprint +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.general.downloads.fingerprints.AccessibilityOfflineButtonSyncFingerprint.ENDS_WITH_PARAMETER_LIST +import app.revanced.util.parametersEqual import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.util.MethodUtil -internal object AccessibilityOfflineButtonSyncFingerprint : LiteralValueFingerprint( +internal object AccessibilityOfflineButtonSyncFingerprint : MethodFingerprint( returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literalSupplier = { AccessibilityOfflineButtonSync }, -) \ No newline at end of file + accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, + customFingerprint = custom@{ methodDef, _ -> + if (!MethodUtil.isConstructor(methodDef)) { + return@custom false + } + val parameterTypes = methodDef.parameterTypes + val parameterSize = parameterTypes.size + if (parameterSize < 6) { + return@custom false + } + + val endsWithMethodParameterList = parameterTypes.slice(parameterSize - 3..< parameterSize) + parametersEqual(ENDS_WITH_PARAMETER_LIST, endsWithMethodParameterList) + } +) { + private val ENDS_WITH_PARAMETER_LIST = listOf( + "Lcom/google/android/apps/youtube/app/offline/ui/OfflineArrowView;", + "I", + "Landroid/view/View${'$'}OnClickListener;" + ) +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt index eca7754ce..e87f246ba 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt @@ -50,6 +50,7 @@ import app.revanced.patches.youtube.video.information.VideoInformationPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT import app.revanced.util.findMethodOrThrow import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow @@ -147,13 +148,15 @@ object PlayerComponentsPatch : BaseBytecodePatch( hookInitVideoPanel(1) } else { val syntheticIndex = - indexOfFirstInstructionOrThrow(Opcode.NEW_INSTANCE) - val syntheticReference = - getInstruction(syntheticIndex).reference.toString() - - context.findMethodOrThrow(syntheticReference) { - name == "onClick" - }.hookInitVideoPanel(0) + indexOfFirstInstruction(0, Opcode.NEW_INSTANCE) + if (syntheticIndex >= 0) { + val syntheticReference = + getInstruction(syntheticIndex).reference.toString() + + context.findMethodOrThrow(syntheticReference) { + name == "onClick" + }.hookInitVideoPanel(0) + } } } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/fingerprints/BuildBrowseRequestFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/fingerprints/BuildBrowseRequestFingerprint.kt index d59e46819..1d6862602 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/fingerprints/BuildBrowseRequestFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/fingerprints/BuildBrowseRequestFingerprint.kt @@ -25,7 +25,7 @@ internal object BuildBrowseRequestFingerprint : MethodFingerprint( fun indexOfRequestFinishedListenerInstruction(methodDef: Method) = methodDef.indexOfFirstInstruction { opcode == Opcode.INVOKE_VIRTUAL && - getReference().toString() == "Lorg/chromium/net/ExperimentalUrlRequest${'$'}Builder;->setRequestFinishedListener(Lorg/chromium/net/RequestFinishedInfo${'$'}Listener;)Lorg/chromium/net/ExperimentalUrlRequest${'$'}Builder;" + getReference()?.name == "setRequestFinishedListener" } fun indexOfNewUrlRequestBuilderInstruction(methodDef: Method) = diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt index a4b297c0b..b078d06c2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/SuggestedVideoEndScreenPatch.kt @@ -6,20 +6,28 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.fingerprints.AutoNavConstructorFingerprint +import app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.fingerprints.AutoNavStatusFingerprint import app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.fingerprints.RemoveOnLayoutChangeListenerFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR +import app.revanced.util.alsoResolve +import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch( description = "Fixes an issue where the suggested video end screen is always visible regardless of whether autoplay is set or not." ) object SuggestedVideoEndScreenPatch : BytecodePatch( - setOf(RemoveOnLayoutChangeListenerFingerprint) + setOf( + AutoNavConstructorFingerprint, + RemoveOnLayoutChangeListenerFingerprint + ) ) { override fun execute(context: BytecodeContext) { @@ -36,15 +44,23 @@ object SuggestedVideoEndScreenPatch : BytecodePatch( it.getWalkerMethod(context, it.scanResult.patternScanResult!!.endIndex) walkerIndex.apply { - val invokeInterfaceIndex = - indexOfFirstInstructionOrThrow(opcode = Opcode.INVOKE_INTERFACE) + val autoNavStatusMethodName = AutoNavStatusFingerprint.alsoResolve( + context, AutoNavConstructorFingerprint + ).mutableMethod.name + val invokeIndex = + indexOfFirstInstructionOrThrow { + val reference = getReference() + reference?.returnType == "Z" && + reference.parameterTypes.size == 0 && + reference.name == autoNavStatusMethodName + } val iGetObjectIndex = - indexOfFirstInstructionReversedOrThrow(invokeInterfaceIndex, Opcode.IGET_OBJECT) + indexOfFirstInstructionReversedOrThrow(invokeIndex, Opcode.IGET_OBJECT) - val invokeInterfaceReference = - getInstruction(invokeInterfaceIndex).reference + val invokeReference = getInstruction(invokeIndex).reference val iGetObjectReference = getInstruction(iGetObjectIndex).reference + val opcodeName = getInstruction(invokeIndex).opcode.name addInstructionsWithLabels( 0, @@ -56,7 +72,7 @@ object SuggestedVideoEndScreenPatch : BytecodePatch( iget-object v0, p0, $iGetObjectReference # This reference checks whether autoplay is turned on. - invoke-interface {v0}, $invokeInterfaceReference + $opcodeName {v0}, $invokeReference move-result v0 # Hide suggested video end screen only when autoplay is turned off. diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/AutoNavConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/AutoNavConstructorFingerprint.kt new file mode 100644 index 000000000..348ffbaad --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/AutoNavConstructorFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object AutoNavConstructorFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, + strings = listOf("main_app_autonav"), +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/AutoNavStatusFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/AutoNavStatusFingerprint.kt new file mode 100644 index 000000000..818e4c5f9 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/suggestedvideoendscreen/fingerprints/AutoNavStatusFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object AutoNavStatusFingerprint : MethodFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + returnType = "Z", + parameters = emptyList() +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt index 748a0f96d..aa530b0cc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt @@ -7,7 +7,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.annotation.Patch -import app.revanced.patches.youtube.utils.fingerprints.YouTubeControlsOverlayFingerprint import app.revanced.patches.youtube.utils.integrations.Constants.SHARED_PATH import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH import app.revanced.patches.youtube.utils.playertype.fingerprint.ActionBarSearchResultsFingerprint @@ -18,7 +17,6 @@ import app.revanced.patches.youtube.utils.playertype.fingerprint.VideoStateFinge import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.ReelWatchPlayer import app.revanced.util.addStaticFieldToIntegration -import app.revanced.util.alsoResolve import app.revanced.util.findMethodOrThrow import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow @@ -38,7 +36,7 @@ object PlayerTypeHookPatch : BytecodePatch( BrowseIdClassFingerprint, PlayerTypeFingerprint, ReelWatchPagerFingerprint, - YouTubeControlsOverlayFingerprint + VideoStateFingerprint, ) ) { private const val INTEGRATIONS_PLAYER_TYPE_HOOK_CLASS_DESCRIPTOR = @@ -79,11 +77,9 @@ object PlayerTypeHookPatch : BytecodePatch( // region patch for set video state - VideoStateFingerprint.alsoResolve( - context, YouTubeControlsOverlayFingerprint - ).let { + VideoStateFingerprint.resultOrThrow().let { it.mutableMethod.apply { - val endIndex = it.scanResult.patternScanResult!!.endIndex + val endIndex = it.scanResult.patternScanResult!!.startIndex + 1 val videoStateFieldName = getInstruction(endIndex).reference diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/VideoStateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/VideoStateFingerprint.kt index fffbe452b..b278da576 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/VideoStateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/fingerprint/VideoStateFingerprint.kt @@ -6,22 +6,22 @@ import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference internal object VideoStateFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("Lcom/google/android/libraries/youtube/player/features/overlay/controls/ControlsState;"), opcodes = listOf( - Opcode.CONST_4, - Opcode.IF_EQZ, Opcode.IF_EQZ, Opcode.IGET_OBJECT, // obfuscated parameter field name + Opcode.IGET_OBJECT, + Opcode.IF_NE, ), customFingerprint = { methodDef, _ -> methodDef.indexOfFirstInstruction { - opcode == Opcode.IGET_OBJECT && - getReference()?.definingClass == methodDef.parameterTypes.firstOrNull() + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "equals" } >= 0 - } + }, ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index 0819c4138..db6bd75fd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -17,7 +17,6 @@ import app.revanced.patches.shared.mapping.ResourceType.STYLE @Patch(dependencies = [ResourceMappingPatch::class]) object SharedResourceIdPatch : ResourcePatch() { - var AccessibilityOfflineButtonSync = -1L var AccountSwitcherAccessibility = -1L var ActionBarRingo = -1L var ActionBarRingoBackground = -1L @@ -127,7 +126,6 @@ object SharedResourceIdPatch : ResourcePatch() { override fun execute(context: ResourceContext) { - AccessibilityOfflineButtonSync = getId(STRING, "accessibility_offline_button_sync") AccountSwitcherAccessibility = getId(STRING, "account_switcher_accessibility_label") ActionBarRingo = getId(LAYOUT, "action_bar_ringo") ActionBarRingoBackground = getId(LAYOUT, "action_bar_ringo_background") diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt index bda19a0c3..8a5f61e0d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt @@ -2,7 +2,9 @@ package app.revanced.patches.youtube.video.information 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.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint @@ -38,6 +40,7 @@ import app.revanced.patches.youtube.video.playerresponse.PlayerResponseMethodHoo import app.revanced.patches.youtube.video.videoid.VideoIdPatch import app.revanced.util.addStaticFieldToIntegration import app.revanced.util.alsoResolve +import app.revanced.util.cloneMutable import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow @@ -119,6 +122,7 @@ object VideoInformationPatch : BytecodePatch( private var seekSourceEnumType = "" private var seekSourceMethodName = "" private var seekRelativeSourceMethodName = "" + private var cloneSeekRelativeSourceMethod = false private lateinit var context: BytecodeContext @@ -135,6 +139,32 @@ object VideoInformationPatch : BytecodePatch( internal lateinit var speedSelectionInsertMethod: MutableMethod internal lateinit var videoEndMethod: MutableMethod + private fun cloneSeekRelativeSourceMethod(fingerprintResult: MethodFingerprintResult) { + if (!cloneSeekRelativeSourceMethod) return + + val methods = fingerprintResult.mutableClass.methods + + methods.find { method -> + method.name == seekRelativeSourceMethodName + }?.apply { + methods.add( + cloneMutable( + returnType = "Z" + ).apply { + val lastIndex = implementation!!.instructions.lastIndex + + removeInstruction(lastIndex) + addInstructions( + lastIndex, """ + move-result p1 + return p1 + """ + ) + } + ) + } + } + private fun addSeekInterfaceMethods( result: MethodFingerprintResult, seekMethodName: String, @@ -203,12 +233,16 @@ object VideoInformationPatch : BytecodePatch( // hook the player controller for use through integrations onCreateHook(INTEGRATIONS_CLASS_DESCRIPTOR, "initialize") - seekSourceEnumType = parameterTypes[1].toString() - seekSourceMethodName = name - seekRelativeSourceMethodName = SeekRelativeFingerprint.alsoResolve( + val seekRelativeMethod = SeekRelativeFingerprint.alsoResolve( context, VideoEndFingerprint - ).mutableMethod.name + ).mutableMethod + + seekSourceEnumType = parameterTypes[1].toString() + seekSourceMethodName = name + seekRelativeSourceMethodName = seekRelativeMethod.name + cloneSeekRelativeSourceMethod = seekRelativeMethod.returnType == "V" + cloneSeekRelativeSourceMethod(it) // Create integrations interface methods. addSeekInterfaceMethods( @@ -250,6 +284,8 @@ object VideoInformationPatch : BytecodePatch( // hook the MDX director for use through integrations onCreateHookMdx(INTEGRATIONS_CLASS_DESCRIPTOR, "initializeMdx") + cloneSeekRelativeSourceMethod(it) + // Create integrations interface methods. addSeekInterfaceMethods( it, diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/SeekRelativeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/SeekRelativeFingerprint.kt index a73ab1966..90146b3c7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/SeekRelativeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/SeekRelativeFingerprint.kt @@ -11,12 +11,11 @@ import com.android.tools.smali.dexlib2.Opcode */ internal object SeekRelativeFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - returnType = "Z", + // returnType = "Z", ~ YouTube 19.39.39 + // returnType = "V", YouTube 19.40.xx ~ parameters = listOf("J", "L"), opcodes = listOf( Opcode.ADD_LONG_2ADDR, Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT, - Opcode.RETURN ) ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/VideoIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/VideoIdPatch.kt index 2e3aa2153..c0e9727c1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/VideoIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/VideoIdPatch.kt @@ -10,7 +10,6 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.video.playerresponse.PlayerResponseMethodHookPatch import app.revanced.patches.youtube.video.videoid.fingerprints.VideoIdFingerprint -import app.revanced.patches.youtube.video.videoid.fingerprints.VideoIdParentFingerprint import app.revanced.util.resultOrThrow import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -19,7 +18,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction dependencies = [PlayerResponseMethodHookPatch::class], ) object VideoIdPatch : BytecodePatch( - setOf(VideoIdParentFingerprint) + setOf(VideoIdFingerprint) ) { private var videoIdRegister = 0 private var videoIdInsertIndex = 0 @@ -44,8 +43,6 @@ object VideoIdPatch : BytecodePatch( } } - VideoIdFingerprint.resolve(context, VideoIdParentFingerprint.resultOrThrow().classDef) - VideoIdFingerprint.setFields { method, index, register -> videoIdMethod = method videoIdInsertIndex = index diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdFingerprint.kt index 7158d20dc..a67b54615 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdFingerprint.kt @@ -2,8 +2,13 @@ package app.revanced.patches.youtube.video.videoid.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.utils.PlayerResponseModelUtils.PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference internal object VideoIdFingerprint : MethodFingerprint( returnType = "V", @@ -14,5 +19,30 @@ internal object VideoIdFingerprint : MethodFingerprint( Opcode.MOVE_RESULT_OBJECT, Opcode.INVOKE_INTERFACE, Opcode.MOVE_RESULT_OBJECT - ) -) + ), + customFingerprint = custom@{ methodDef, classDef -> + if (!classDef.fields.any { it.type == "Lcom/google/android/libraries/youtube/player/subtitles/model/SubtitleTrack;" }) { + return@custom false + } + val implementation = methodDef.implementation + ?: return@custom false + val instructions = implementation.instructions + val instructionCount = instructions.count() + if (instructionCount < 30) { + return@custom false + } + + val reference = (instructions.elementAt(instructionCount - 2) as? ReferenceInstruction)?.reference.toString() + if (reference != "Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;") { + return@custom false + } + + methodDef.indexOfFirstInstruction { + val methodReference = getReference() + opcode == Opcode.INVOKE_INTERFACE && + methodReference?.returnType == "Ljava/lang/String;" && + methodReference.parameterTypes.isEmpty() && + methodReference.definingClass == PLAYER_RESPONSE_MODEL_CLASS_DESCRIPTOR + } >= 0 + }, +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdParentFingerprint.kt deleted file mode 100644 index cec98bfca..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprints/VideoIdParentFingerprint.kt +++ /dev/null @@ -1,9 +0,0 @@ -package app.revanced.patches.youtube.video.videoid.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object VideoIdParentFingerprint : MethodFingerprint( - returnType = "V", - parameters = listOf("Ljava/lang/Object;", "Ljava/lang/Exception;"), - strings = listOf("error retrieving subtitle"), -) diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index eee10472e..bb3ea6e8e 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -16,10 +16,12 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableClass import app.revanced.patcher.util.proxy.mutableTypes.MutableField import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable import app.revanced.util.fingerprint.MultiMethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.MethodParameter import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.Instruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -30,6 +32,8 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.iface.reference.Reference import com.android.tools.smali.dexlib2.iface.reference.StringReference import com.android.tools.smali.dexlib2.immutable.ImmutableField +import com.android.tools.smali.dexlib2.immutable.ImmutableMethod +import com.android.tools.smali.dexlib2.immutable.ImmutableMethodImplementation import com.android.tools.smali.dexlib2.util.MethodUtil const val REGISTER_TEMPLATE_REPLACEMENT: String = "REGISTER_INDEX" @@ -67,6 +71,18 @@ val MultiMethodFingerprint.exception fun MethodFingerprint.alsoResolve(context: BytecodeContext, fingerprint: MethodFingerprint) = also { resolve(context, fingerprint.resultOrThrow().classDef) }.resultOrThrow() +fun MethodFingerprint.getMethodCall() = + resultOrThrow().mutableMethod.getMethodCall() + +fun MutableMethod.getMethodCall(): String { + var methodCall = "$definingClass->$name(" + for (i in 0 until parameters.size) { + methodCall += parameterTypes[i] + } + methodCall += ")$returnType" + return methodCall +} + /** * Find the [MutableMethod] from a given [Method] in a [MutableClass]. * @@ -383,7 +399,7 @@ fun Method.findOpcodeIndicesReversed(opcode: Opcode): List = fun Method.findOpcodeIndicesReversed(filter: Instruction.() -> Boolean): List { val indexes = implementation!!.instructions .withIndex() - .filter { (_, instruction) -> filter.invoke(instruction) } + .filter { (_, instruction) -> filter(instruction) } .map { (index, _) -> index } .reversed() @@ -585,6 +601,38 @@ fun BytecodeContext.updatePatchStatus( "const/4 v0, 0x1" ) +/** + * Taken from BiliRoamingX: + * https://github.com/BiliRoamingX/BiliRoamingX/blob/ae58109f3acdd53ec2d2b3fb439c2a2ef1886221/patches/src/main/kotlin/app/revanced/patches/bilibili/utils/Extenstions.kt#L51 + */ +fun Method.cloneMutable( + registerCount: Int = implementation?.registerCount ?: 0, + clearImplementation: Boolean = false, + name: String = this.name, + accessFlags: Int = this.accessFlags, + parameters: List = this.parameters, + returnType: String = this.returnType +): MutableMethod { + val clonedImplementation = implementation?.let { + ImmutableMethodImplementation( + registerCount, + if (clearImplementation) emptyList() else it.instructions, + if (clearImplementation) emptyList() else it.tryBlocks, + if (clearImplementation) emptyList() else it.debugItems, + ) + } + return ImmutableMethod( + definingClass, + name, + parameters, + returnType, + accessFlags, + annotations, + hiddenApiRestrictions, + clonedImplementation + ).toMutable() +} + /** * Return the resolved methods of [MethodFingerprint]s early. */ diff --git a/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt b/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt index b25b53876..54927e034 100644 --- a/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt +++ b/src/main/kotlin/app/revanced/util/fingerprint/MultiMethodFingerprint.kt @@ -13,6 +13,9 @@ private typealias StringMatch = MethodFingerprintResult.MethodFingerprintScanRes private typealias StringsScanResult = MethodFingerprintResult.MethodFingerprintScanResult.StringsScanResult /** + * Taken from BiliRoamingX: + * https://github.com/BiliRoamingX/BiliRoamingX/blob/ae58109f3acdd53ec2d2b3fb439c2a2ef1886221/patches/src/main/kotlin/app/revanced/patches/bilibili/patcher/fingerprint/MultiMethodFingerprint.kt + * * Represents the [MethodFingerprint] for a method. * @param returnType The return type of the method. * @param accessFlags The access flags of the method. diff --git a/src/main/kotlin/app/revanced/util/patch/MultiMethodBytecodePatch.kt b/src/main/kotlin/app/revanced/util/patch/MultiMethodBytecodePatch.kt index fa137319a..fc3e5d18d 100644 --- a/src/main/kotlin/app/revanced/util/patch/MultiMethodBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/util/patch/MultiMethodBytecodePatch.kt @@ -6,6 +6,10 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.util.fingerprint.MultiMethodFingerprint import app.revanced.util.fingerprint.MultiMethodFingerprint.Companion.resolve +/** + * Taken from BiliRoamingX: + * https://github.com/BiliRoamingX/BiliRoamingX/blob/ae58109f3acdd53ec2d2b3fb439c2a2ef1886221/patches/src/main/kotlin/app/revanced/patches/bilibili/patcher/patch/MultiMethodBytecodePatch.kt + */ abstract class MultiMethodBytecodePatch( val fingerprints: Set = setOf(), val multiFingerprints: Set = setOf() From 00793d87e1082d0adbf40f38d5cbd7057c68d6c7 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:40:03 +0300 Subject: [PATCH 067/103] feat(YouTube & YouTube Music - Return YouTube Dislike): Add `Show estimated likes` setting --- .../utils/returnyoutubedislike/ReturnYouTubeDislikePatch.kt | 6 ++++++ src/main/resources/youtube/settings/xml/revanced_prefs.xml | 1 + 2 files changed, 7 insertions(+) diff --git a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikePatch.kt index 1b5ca2d0c..3286063e3 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubedislike/ReturnYouTubeDislikePatch.kt @@ -42,6 +42,12 @@ object ReturnYouTubeDislikePatch : BaseResourcePatch( "false", "revanced_ryd_enabled" ) + SettingsPatch.addSwitchPreference( + CategoryType.RETURN_YOUTUBE_DISLIKE, + "revanced_ryd_estimated_like", + "false", + "revanced_ryd_enabled" + ) SettingsPatch.addSwitchPreference( CategoryType.RETURN_YOUTUBE_DISLIKE, "revanced_ryd_toast_on_connection_error", diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index ee7d8f826..fc07b7f4c 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -637,6 +637,7 @@ + From 3c9e66083aebe89560ded83b36191cf0d73ffc09 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:41:17 +0300 Subject: [PATCH 068/103] feat(YouTube & YouTube Music - Hide settings menu): Add switch preferences for each setting entry --- .../patches/music/ads/general/AdsPatch.kt | 18 --- .../MembershipSettingsFingerprint.kt | 11 -- .../MembershipSettingsParentFingerprint.kt | 12 -- .../components/LayoutComponentsPatch.kt | 108 ++++++++++++++++-- .../fingerprints/ParentToolMenuFingerprint.kt | 20 ++++ .../PreferenceScreenFingerprint.kt | 11 ++ .../music/utils/settings/CategoryType.kt | 1 + .../shared/settingmenu/SettingsMenuPatch.kt | 47 ++++---- .../fingerprints/FindPreferenceFingerprint.kt | 15 +++ .../RemovePreferenceFingerprint.kt | 19 +++ .../fingerprints/SettingsMenuFingerprint.kt | 8 -- .../components/LayoutComponentsPatch.kt | 29 +++++ .../PreferenceScreenFingerprint.kt | 30 +++++ .../youtube/settings/xml/revanced_prefs.xml | 22 +++- 14 files changed, 266 insertions(+), 85 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsParentFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ParentToolMenuFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PreferenceScreenFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/FindPreferenceFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/RemovePreferenceFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PreferenceScreenFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt index 9a1d8d21c..a0de47604 100644 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt @@ -2,7 +2,6 @@ package app.revanced.patches.music.ads.general 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.patches.music.ads.general.MusicAdsPatch.hookLithoFullscreenAds import app.revanced.patches.music.ads.general.MusicAdsPatch.hookNonLithoFullscreenAds @@ -10,8 +9,6 @@ import app.revanced.patches.music.ads.general.fingerprints.AccountMenuFooterFing import app.revanced.patches.music.ads.general.fingerprints.FloatingLayoutFingerprint import app.revanced.patches.music.ads.general.fingerprints.GetPremiumTextViewFingerprint import app.revanced.patches.music.ads.general.fingerprints.InterstitialsContainerFingerprint -import app.revanced.patches.music.ads.general.fingerprints.MembershipSettingsFingerprint -import app.revanced.patches.music.ads.general.fingerprints.MembershipSettingsParentFingerprint import app.revanced.patches.music.ads.general.fingerprints.NotifierShelfFingerprint import app.revanced.patches.music.ads.general.fingerprints.ShowDialogCommandFingerprint import app.revanced.patches.music.navigation.components.NavigationBarComponentsPatch @@ -55,7 +52,6 @@ object AdsPatch : BaseBytecodePatch( FloatingLayoutFingerprint, GetPremiumTextViewFingerprint, InterstitialsContainerFingerprint, - MembershipSettingsParentFingerprint, NotifierShelfFingerprint, ShowDialogCommandFingerprint ) @@ -163,20 +159,6 @@ object AdsPatch : BaseBytecodePatch( } } - // premium membership menu in settings - MembershipSettingsFingerprint.resolve( - context, - MembershipSettingsParentFingerprint.resultOrThrow().classDef - ) - MembershipSettingsFingerprint.resultOrThrow().mutableMethod.addInstructions( - 0, """ - const/4 v0, 0x0 - return-object v0 - """ - ) - - // endregion - LithoFilterPatch.addFilter(ADS_FILTER_CLASS_DESCRIPTOR) SettingsPatch.addSwitchPreference( diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsFingerprint.kt deleted file mode 100644 index af3434c7f..000000000 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsFingerprint.kt +++ /dev/null @@ -1,11 +0,0 @@ -package app.revanced.patches.music.ads.general.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.MethodFingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -internal object MembershipSettingsFingerprint : MethodFingerprint( - returnType = "Ljava/lang/CharSequence;", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = emptyList() -) diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsParentFingerprint.kt deleted file mode 100644 index 54f428559..000000000 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsParentFingerprint.kt +++ /dev/null @@ -1,12 +0,0 @@ -package app.revanced.patches.music.ads.general.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.MethodFingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -internal object MembershipSettingsParentFingerprint : MethodFingerprint( - returnType = "L", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = emptyList(), - strings = listOf("SPmanage_red") -) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt index 6a9b3724c..ff23d1798 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt @@ -15,7 +15,9 @@ import app.revanced.patches.music.general.components.fingerprints.FloatingButton import app.revanced.patches.music.general.components.fingerprints.HistoryMenuItemFingerprint import app.revanced.patches.music.general.components.fingerprints.HistoryMenuItemOfflineTabFingerprint import app.revanced.patches.music.general.components.fingerprints.MediaRouteButtonFingerprint +import app.revanced.patches.music.general.components.fingerprints.ParentToolMenuFingerprint import app.revanced.patches.music.general.components.fingerprints.PlayerOverlayChipFingerprint +import app.revanced.patches.music.general.components.fingerprints.PreferenceScreenFingerprint import app.revanced.patches.music.general.components.fingerprints.SearchBarFingerprint import app.revanced.patches.music.general.components.fingerprints.SearchBarParentFingerprint import app.revanced.patches.music.general.components.fingerprints.SoundSearchFingerprint @@ -26,6 +28,7 @@ import app.revanced.patches.music.general.components.fingerprints.TopBarMenuItem import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.music.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.music.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR +import app.revanced.patches.music.utils.integrations.Constants.GENERAL_PATH import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MusicTasteBuilderShelf import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.PlayerOverlayChip @@ -62,7 +65,9 @@ object LayoutComponentsPatch : BaseBytecodePatch( HistoryMenuItemFingerprint, HistoryMenuItemOfflineTabFingerprint, MediaRouteButtonFingerprint, + ParentToolMenuFingerprint, PlayerOverlayChipFingerprint, + PreferenceScreenFingerprint, SearchBarParentFingerprint, SoundSearchFingerprint, TasteBuilderConstructorFingerprint, @@ -70,9 +75,10 @@ object LayoutComponentsPatch : BaseBytecodePatch( TopBarMenuItemImageViewFingerprint ) ) { + private const val INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR = + "$GENERAL_PATH/SettingsMenuPatch;" private const val CUSTOM_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/CustomFilter;" - private const val LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/LayoutComponentsFilter;" @@ -194,6 +200,35 @@ object LayoutComponentsPatch : BaseBytecodePatch( // endregion + // region patch for hide setting menus + + PreferenceScreenFingerprint.resultOrThrow().mutableMethod.apply { + addInstructions( + implementation!!.instructions.lastIndex, """ + invoke-virtual/range {p0 .. p0}, Lcom/google/android/apps/youtube/music/settings/fragment/SettingsHeadersFragment;->getPreferenceScreen()Landroidx/preference/PreferenceScreen; + move-result-object v0 + invoke-static {v0}, $INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR->hideSettingsMenu(Landroidx/preference/PreferenceScreen;)V + """ + ) + } + + // The lowest version supported by the patch does not have parent tool settings + ParentToolMenuFingerprint.result?.let { + it.mutableMethod.apply { + val index = it.scanResult.patternScanResult!!.startIndex + 1 + val register = getInstruction(index).registerD + + addInstructions( + index, """ + invoke-static {v$register}, $INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR->hideParentToolsMenu(Z)Z + move-result v$register + """ + ) + } + } + + // endregion + // region patch for hide sound search button SoundSearchFingerprint.result?.let { @@ -299,16 +334,6 @@ object LayoutComponentsPatch : BaseBytecodePatch( "revanced_custom_filter_strings", "revanced_custom_filter" ) - SettingsPatch.addSwitchPreference( - CategoryType.GENERAL, - "revanced_hide_settings_menu", - "false" - ) - SettingsPatch.addPreferenceWithIntent( - CategoryType.GENERAL, - "revanced_hide_settings_menu_filter_strings", - "revanced_hide_settings_menu" - ) SettingsPatch.addSwitchPreference( CategoryType.GENERAL, "revanced_hide_button_shelf", @@ -373,5 +398,66 @@ object LayoutComponentsPatch : BaseBytecodePatch( "revanced_hide_voice_search_button", "false" ) + + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_parent_tools", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_general", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_playback", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_data_saving", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_downloads_and_storage", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_notification", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_privacy_and_location", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_recommendations", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_paid_memberships", + "true", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_about", + "false", + false + ) } } diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ParentToolMenuFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ParentToolMenuFingerprint.kt new file mode 100644 index 000000000..39e03d6e7 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ParentToolMenuFingerprint.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.music.general.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +internal object ParentToolMenuFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + opcodes = listOf( + Opcode.CONST_4, + Opcode.INVOKE_VIRTUAL, + Opcode.IGET, + ), + strings = listOf("pref_key_parent_tools"), + customFingerprint = { methodDef, _ -> + methodDef.name == "onSettingsLoaded" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PreferenceScreenFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PreferenceScreenFingerprint.kt new file mode 100644 index 000000000..53e1e95de --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PreferenceScreenFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.music.general.components.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +internal object PreferenceScreenFingerprint : MethodFingerprint( + returnType = "V", + customFingerprint = { methodDef, _ -> + methodDef.definingClass == "Lcom/google/android/apps/youtube/music/settings/fragment/SettingsHeadersFragment;" && + methodDef.name == "onCreatePreferences" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt index 1c7be65d8..2ac57f215 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt @@ -8,6 +8,7 @@ enum class CategoryType(val value: String, var added: Boolean) { FLYOUT("flyout", false), NAVIGATION("navigation", false), PLAYER("player", false), + SETTINGS("settings", false), VIDEO("video", false), RETURN_YOUTUBE_DISLIKE("ryd", false), SPONSOR_BLOCK("sb", false), diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt index d6a487dfb..a95ce1f63 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt @@ -1,42 +1,43 @@ package app.revanced.patches.shared.settingmenu import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.shared.integrations.Constants.PATCHES_PATH -import app.revanced.patches.shared.settingmenu.fingerprints.SettingsMenuFingerprint -import app.revanced.patches.shared.viewgroup.ViewGroupMarginLayoutParamsHookPatch -import app.revanced.util.getReference -import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.resultOrThrow -import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction -import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import app.revanced.patches.shared.settingmenu.fingerprints.FindPreferenceFingerprint +import app.revanced.patches.shared.settingmenu.fingerprints.RemovePreferenceFingerprint +import app.revanced.util.findMethodOrThrow +import app.revanced.util.getMethodCall @Patch( description = "Hide the settings menu for YouTube or YouTube Music.", - dependencies = [ViewGroupMarginLayoutParamsHookPatch::class] ) object SettingsMenuPatch : BytecodePatch( - setOf(SettingsMenuFingerprint) + setOf( + FindPreferenceFingerprint, + RemovePreferenceFingerprint + ) ) { private const val INTEGRATIONS_CLASS_DESCRIPTOR = - "$PATCHES_PATH/SettingsMenuPatch;" + "$PATCHES_PATH/BaseSettingsMenuPatch;" override fun execute(context: BytecodeContext) { - SettingsMenuFingerprint.resultOrThrow().mutableMethod.apply { - val insertIndex = indexOfFirstInstructionOrThrow { - getReference()?.type == "Landroid/support/v7/widget/RecyclerView;" - } - val insertRegister = getInstruction(insertIndex).registerA + val findPreferenceMethodCall = FindPreferenceFingerprint.getMethodCall() + val removePreferenceMethodCall = RemovePreferenceFingerprint.getMethodCall() - addInstruction( - insertIndex, - "invoke-static {v$insertRegister}, " + - "$INTEGRATIONS_CLASS_DESCRIPTOR->hideSettingsMenu(Landroid/support/v7/widget/RecyclerView;)V" - ) - } + context.findMethodOrThrow(INTEGRATIONS_CLASS_DESCRIPTOR) { + name == "removePreference" + }.addInstructionsWithLabels( + 0, """ + invoke-virtual {p0, p1}, $findPreferenceMethodCall + move-result-object v0 + if-eqz v0, :ignore + invoke-virtual {p0, v0}, $removePreferenceMethodCall + :ignore + return-void + """ + ) } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/FindPreferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/FindPreferenceFingerprint.kt new file mode 100644 index 000000000..fe8eb7556 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/FindPreferenceFingerprint.kt @@ -0,0 +1,15 @@ +package app.revanced.patches.shared.settingmenu.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object FindPreferenceFingerprint : MethodFingerprint( + returnType = "Landroidx/preference/Preference;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Ljava/lang/CharSequence;"), + strings = listOf("Key cannot be null"), + customFingerprint = { methodDef, _ -> + methodDef.definingClass == "Landroidx/preference/PreferenceGroup;" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/RemovePreferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/RemovePreferenceFingerprint.kt new file mode 100644 index 000000000..bd158b644 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/RemovePreferenceFingerprint.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.shared.settingmenu.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +internal object RemovePreferenceFingerprint : MethodFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Landroidx/preference/Preference;"), + opcodes = listOf(Opcode.INVOKE_VIRTUAL), + customFingerprint = custom@{ methodDef, _ -> + if (methodDef.definingClass != "Landroidx/preference/PreferenceGroup;") { + return@custom false + } + val instructions = methodDef.implementation?.instructions ?: return@custom false + instructions.elementAt(0).opcode == Opcode.INVOKE_DIRECT + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt deleted file mode 100644 index a9c4293c8..000000000 --- a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt +++ /dev/null @@ -1,8 +0,0 @@ -package app.revanced.patches.shared.settingmenu.fingerprints - -import app.revanced.util.fingerprint.LiteralValueFingerprint - -internal object SettingsMenuFingerprint : LiteralValueFingerprint( - returnType = "Landroid/view/View;", - literalSupplier = { 16908351 }, -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt index dded8f631..579d3a6c6 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt @@ -5,6 +5,7 @@ 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.patch.PatchException import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.litho.LithoFilterPatch @@ -19,11 +20,13 @@ import app.revanced.patches.youtube.general.components.fingerprints.AppBlockingC import app.revanced.patches.youtube.general.components.fingerprints.BottomUiContainerFingerprint import app.revanced.patches.youtube.general.components.fingerprints.FloatingMicrophoneFingerprint import app.revanced.patches.youtube.general.components.fingerprints.PiPNotificationFingerprint +import app.revanced.patches.youtube.general.components.fingerprints.PreferenceScreenFingerprint import app.revanced.patches.youtube.general.components.fingerprints.TooltipContentFullscreenFingerprint import app.revanced.patches.youtube.general.components.fingerprints.TooltipContentViewFingerprint import app.revanced.patches.youtube.utils.compatibility.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.integrations.Constants.GENERAL_PATH import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.AccountSwitcherAccessibility import app.revanced.patches.youtube.utils.settings.SettingsPatch @@ -60,10 +63,13 @@ object LayoutComponentsPatch : BaseBytecodePatch( BottomUiContainerFingerprint, FloatingMicrophoneFingerprint, PiPNotificationFingerprint, + PreferenceScreenFingerprint, TooltipContentFullscreenFingerprint, TooltipContentViewFingerprint ) ) { + private const val INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR = + "$GENERAL_PATH/SettingsMenuPatch;" private const val CUSTOM_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/CustomFilter;" private const val LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR = @@ -193,6 +199,29 @@ object LayoutComponentsPatch : BaseBytecodePatch( // endregion + // region patch for hide setting menus + + PreferenceScreenFingerprint.resultOrThrow().mutableMethod.apply { + val targetIndex = + PreferenceScreenFingerprint.indexOfPreferenceScreenInstruction(this) + val targetRegister = getInstruction(targetIndex).registerC + val targetReference = getInstruction(targetIndex).reference + + val insertIndex = implementation!!.instructions.lastIndex + + addInstructions( + insertIndex + 1, """ + invoke-virtual {v$targetRegister}, $targetReference + move-result-object v$targetRegister + invoke-static {v$targetRegister}, $INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR->hideSettingsMenu(Landroidx/preference/PreferenceScreen;)V + return-void + """ + ) + removeInstruction(insertIndex) + } + + // endregion + // region patch for hide snack bar BottomUiContainerFingerprint.resultOrThrow().let { diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PreferenceScreenFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PreferenceScreenFingerprint.kt new file mode 100644 index 000000000..db92fe910 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PreferenceScreenFingerprint.kt @@ -0,0 +1,30 @@ +package app.revanced.patches.youtube.general.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.general.components.fingerprints.PreferenceScreenFingerprint.indexOfPreferenceScreenInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object PreferenceScreenFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = emptyList(), + strings = listOf(":android:show_fragment_args"), + customFingerprint = { methodDef, classDef -> + AccessFlags.SYNTHETIC.isSet(classDef.accessFlags) && + indexOfPreferenceScreenInstruction(methodDef) >= 0 + } +) { + fun indexOfPreferenceScreenInstruction(methodDef: Method) = + methodDef.indexOfFirstInstructionReversed { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL && + reference?.returnType == "Landroidx/preference/PreferenceScreen;" && + reference.parameterTypes.size == 0 + } +} \ No newline at end of file diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index fc07b7f4c..ef8a6fe1c 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -77,8 +77,26 @@ From 3dbe9c49c984371bf89e8fc13a5acafa0ef83ce2 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:56:14 +0300 Subject: [PATCH 073/103] feat(YouTube & YouTube Music): Add `Return YouTube Username` patch --- .../ReturnYouTubeUsernamePatch.kt | 39 +++++++++++++++++++ .../music/utils/settings/CategoryType.kt | 1 + .../patches/shared/integrations/Constants.kt | 3 +- .../BaseReturnYouTubeUsernamePatch.kt | 19 +++++++++ .../ReturnYouTubeUsernamePatch.kt | 33 ++++++++++++++++ .../utils/settings/SettingsBytecodePatch.kt | 4 +- .../youtube/settings/xml/revanced_prefs.xml | 9 +++++ 7 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/music/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/shared/returnyoutubeusername/BaseReturnYouTubeUsernamePatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt diff --git a/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt new file mode 100644 index 000000000..e690901a6 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt @@ -0,0 +1,39 @@ +package app.revanced.patches.music.utils.returnyoutubeusername + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.music.utils.settings.CategoryType +import app.revanced.patches.music.utils.settings.SettingsPatch +import app.revanced.patches.shared.returnyoutubeusername.BaseReturnYouTubeUsernamePatch +import app.revanced.util.patch.BaseBytecodePatch + +@Suppress("unused") +object ReturnYouTubeUsernamePatch : BaseBytecodePatch( + name = "Return YouTube Username", + description = "Adds option to replace YouTube Handle with Username in comments using YouTube Data API v3.", + dependencies = setOf( + BaseReturnYouTubeUsernamePatch::class, + SettingsPatch::class, + ), + compatiblePackages = COMPATIBLE_PACKAGE +) { + override fun execute(context: BytecodeContext) { + + SettingsPatch.addSwitchPreference( + CategoryType.RETURN_YOUTUBE_USERNAME, + "revanced_return_youtube_username_enabled", + "false" + ) + SettingsPatch.addPreferenceWithIntent( + CategoryType.RETURN_YOUTUBE_USERNAME, + "revanced_return_youtube_username_youtube_data_api_v3_developer_key", + "revanced_return_youtube_username_enabled" + ) + if (SettingsPatch.upward0627) { + SettingsPatch.addPreferenceWithIntent( + CategoryType.RETURN_YOUTUBE_USERNAME, + "revanced_return_youtube_username_youtube_data_api_v3_about" + ) + } + } +} diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt index 2ac57f215..3301aa5a2 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt @@ -11,6 +11,7 @@ enum class CategoryType(val value: String, var added: Boolean) { SETTINGS("settings", false), VIDEO("video", false), RETURN_YOUTUBE_DISLIKE("ryd", false), + RETURN_YOUTUBE_USERNAME("return_youtube_username", false), SPONSOR_BLOCK("sb", false), MISC("misc", false) } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt b/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt index 59d7f47ae..03c2e3fe8 100644 --- a/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt +++ b/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt @@ -6,6 +6,7 @@ object Constants { const val PATCHES_PATH = "$INTEGRATIONS_PATH/patches" const val COMPONENTS_PATH = "$PATCHES_PATH/components" + const val INTEGRATIONS_UTILS_PATH = "$INTEGRATIONS_PATH/utils" const val INTEGRATIONS_SETTING_CLASS_DESCRIPTOR = "$INTEGRATIONS_PATH/settings/Setting;" - const val INTEGRATIONS_UTILS_CLASS_DESCRIPTOR = "$INTEGRATIONS_PATH/utils/Utils;" + const val INTEGRATIONS_UTILS_CLASS_DESCRIPTOR = "$INTEGRATIONS_UTILS_PATH/Utils;" } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/returnyoutubeusername/BaseReturnYouTubeUsernamePatch.kt b/src/main/kotlin/app/revanced/patches/shared/returnyoutubeusername/BaseReturnYouTubeUsernamePatch.kt new file mode 100644 index 000000000..daf5814dd --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/returnyoutubeusername/BaseReturnYouTubeUsernamePatch.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.shared.returnyoutubeusername + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.shared.integrations.Constants.PATCHES_PATH +import app.revanced.patches.shared.textcomponent.TextComponentPatch + +@Patch(dependencies = [TextComponentPatch::class]) +object BaseReturnYouTubeUsernamePatch : BytecodePatch(emptySet()) { + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "$PATCHES_PATH/ReturnYouTubeUsernamePatch;" + + override fun execute(context: BytecodeContext) { + TextComponentPatch.hookSpannableString(INTEGRATIONS_CLASS_DESCRIPTOR, "preFetchLithoText") + TextComponentPatch.hookTextComponent(INTEGRATIONS_CLASS_DESCRIPTOR) + } +} + diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt new file mode 100644 index 000000000..f0018ba62 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubeusername/ReturnYouTubeUsernamePatch.kt @@ -0,0 +1,33 @@ +package app.revanced.patches.youtube.utils.returnyoutubeusername + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patches.shared.returnyoutubeusername.BaseReturnYouTubeUsernamePatch +import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.patch.BaseBytecodePatch + +@Suppress("unused") +object ReturnYouTubeUsernamePatch : BaseBytecodePatch( + name = "Return YouTube Username", + description = "Adds option to replace YouTube Handle with Username in comments using YouTube Data API v3.", + dependencies = setOf( + BaseReturnYouTubeUsernamePatch::class, + SettingsPatch::class, + ), + compatiblePackages = COMPATIBLE_PACKAGE +) { + override fun execute(context: BytecodeContext) { + + /** + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "PREFERENCE_SCREEN: RETURN_YOUTUBE_USERNAME" + ) + ) + + SettingsPatch.updatePatchStatus(this) + + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsBytecodePatch.kt index d4625b195..e46e4a123 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/settings/SettingsBytecodePatch.kt @@ -8,8 +8,8 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.shared.integrations.Constants.INTEGRATIONS_UTILS_CLASS_DESCRIPTOR +import app.revanced.patches.shared.integrations.Constants.INTEGRATIONS_UTILS_PATH import app.revanced.patches.shared.mapping.ResourceMappingPatch -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.mainactivity.MainActivityResolvePatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch @@ -31,7 +31,7 @@ object SettingsBytecodePatch : BytecodePatch( "$UTILS_PATH/InitializationPatch;" private const val INTEGRATIONS_THEME_METHOD_DESCRIPTOR = - "$INTEGRATIONS_PATH/utils/ThemeUtils;->setTheme(Ljava/lang/Enum;)V" + "$INTEGRATIONS_UTILS_PATH/BaseThemeUtils;->setTheme(Ljava/lang/Enum;)V" internal lateinit var contexts: BytecodeContext diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 0ba3fe132..1f8c1a9cc 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -666,6 +666,14 @@ PREFERENCE_SCREEN: RETURN_YOUTUBE_DISLIKE --> + + + + + SETTINGS: SPOOF_APP_VERSION --> @@ -669,6 +669,7 @@ From ef1908ffd3554d787eb4dcc50995e2888a5f3fad Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 16:55:29 +0300 Subject: [PATCH 083/103] fix(YouTube - Spoof streaming data): Wrong register used --- .../youtube/utils/fix/streamingdata/SpoofStreamingDataPatch.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/SpoofStreamingDataPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/SpoofStreamingDataPatch.kt index 3f06ad052..1e17d95f9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/SpoofStreamingDataPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/fix/streamingdata/SpoofStreamingDataPatch.kt @@ -180,7 +180,7 @@ object SpoofStreamingDataPatch : BaseBytecodePatch( # Set streaming data. iget-object v$freeRegister, v$freeRegister, $getStreamingDataField - if-eqz v0, :disabled + if-eqz v$freeRegister, :disabled iput-object v$freeRegister, p0, $setStreamingDataField """, From 1f36b4e843510e74e52c404beeae193cd314db50 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 16:55:54 +0300 Subject: [PATCH 084/103] feat(YouTube Music - Spoof app version): App crashes when first installed --- .../spoofappversion/SpoofAppVersionPatch.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt index 11a691e9c..90ac0f104 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/spoofappversion/SpoofAppVersionPatch.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patches.music.general.oldstylelibraryshelf.OldStyleLibraryShelfPatch import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.music.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR +import app.revanced.patches.music.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.SettingsBytecodePatch import app.revanced.patches.music.utils.settings.SettingsPatch @@ -26,21 +26,30 @@ object SpoofAppVersionPatch : BaseResourcePatch( ) { override fun execute(context: ResourceContext) { + var defaultValue = "false" + if (SettingsPatch.upward0718) { context.appendAppVersion("7.16.53") - SettingsBytecodePatch.contexts.findMethodOrThrow(GENERAL_CLASS_DESCRIPTOR) { - name == "getSpoofAppVersionDefault" + SettingsBytecodePatch.contexts.findMethodOrThrow(PATCH_STATUS_CLASS_DESCRIPTOR) { + name == "SpoofAppVersionDefaultString" }.replaceInstruction( 0, "const-string v0, \"7.16.53\"" ) + SettingsBytecodePatch.contexts.findMethodOrThrow(PATCH_STATUS_CLASS_DESCRIPTOR) { + name == "SpoofAppVersionDefaultBoolean" + }.replaceInstruction( + 0, + "const/4 v0, 0x1" + ) + defaultValue = "true" } SettingsPatch.addSwitchPreference( CategoryType.GENERAL, "revanced_spoof_app_version", - "false" + defaultValue ) SettingsPatch.addPreferenceWithIntent( CategoryType.GENERAL, From aee5a18b837c2f0d139a4a6f312d9df7f1b6de04 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:00:57 +0300 Subject: [PATCH 085/103] fix(YouTube - Hook YouTube Music actions): App crashes when first installed --- .../youtube/general/music/YouTubeMusicActionsPatch.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt index 5c348be0b..b62e7e57d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/music/YouTubeMusicActionsPatch.kt @@ -8,6 +8,7 @@ import app.revanced.patches.youtube.general.music.fingerprints.AppDeepLinkFinger import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.gms.GmsCoreSupportResourcePatch.PackageNameYouTubeMusic import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_PATH +import app.revanced.patches.youtube.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.settings.SettingsBytecodePatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.addEntryValues @@ -91,8 +92,8 @@ object YouTubeMusicActionsPatch : BaseBytecodePatch( musicPackageName ) - SettingsBytecodePatch.contexts.findMethodOrThrow(INTEGRATIONS_CLASS_DESCRIPTOR) { - name == "getRVXMusicPackageName" + SettingsBytecodePatch.contexts.findMethodOrThrow(PATCH_STATUS_CLASS_DESCRIPTOR) { + name == "RVXMusicPackageName" }.apply { val replaceIndex = indexOfFirstInstructionOrThrow(Opcode.CONST_STRING) val replaceRegister = From cca866b218749dd55c52b0616c1d015135a44511 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:01:39 +0300 Subject: [PATCH 086/103] fix(YouTube & YouTube Music - GmsCore support): Unimplemented service in GmsCore causes memory leak --- .../shared/gms/BaseGmsCoreSupportPatch.kt | 77 +++++++++++++------ .../CastDynamiteModuleFingerprint.kt | 7 -- .../CastDynamiteModuleV2Fingerprint.kt | 7 -- .../GmsServiceBrokerFingerprint.kt | 8 ++ .../fingerprints/PrimeMethodFingerprint.kt | 7 -- .../gms/fingerprints/PrimesApiFingerprint.kt | 12 +++ ...imesBackgroundInitializationFingerprint.kt | 18 +++++ .../PrimesLifecycleEventFingerprint.kt | 23 ++++++ 8 files changed, 115 insertions(+), 44 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleV2Fingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/GmsServiceBrokerFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimeMethodFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt index 394b4114e..314a84598 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt @@ -2,9 +2,9 @@ package app.revanced.patches.shared.gms import app.revanced.patcher.PatchClass 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.getInstructions import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patcher.patch.BytecodePatch @@ -15,22 +15,27 @@ import app.revanced.patches.shared.gms.BaseGmsCoreSupportPatch.Constants.PERMISS import app.revanced.patches.shared.gms.BaseGmsCoreSupportResourcePatch.Companion.ORIGINAL_PACKAGE_NAME_YOUTUBE import app.revanced.patches.shared.gms.BaseGmsCoreSupportResourcePatch.Companion.ORIGINAL_PACKAGE_NAME_YOUTUBE_MUSIC import app.revanced.patches.shared.gms.fingerprints.CastContextFetchFingerprint -import app.revanced.patches.shared.gms.fingerprints.CastDynamiteModuleFingerprint -import app.revanced.patches.shared.gms.fingerprints.CastDynamiteModuleV2Fingerprint import app.revanced.patches.shared.gms.fingerprints.CertificateFingerprint import app.revanced.patches.shared.gms.fingerprints.GmsCoreSupportFingerprint +import app.revanced.patches.shared.gms.fingerprints.GmsServiceBrokerFingerprint import app.revanced.patches.shared.gms.fingerprints.GooglePlayUtilityFingerprint -import app.revanced.patches.shared.gms.fingerprints.PrimeMethodFingerprint +import app.revanced.patches.shared.gms.fingerprints.PrimesApiFingerprint +import app.revanced.patches.shared.gms.fingerprints.PrimesBackgroundInitializationFingerprint +import app.revanced.patches.shared.gms.fingerprints.PrimesLifecycleEventFingerprint import app.revanced.patches.shared.gms.fingerprints.ServiceCheckFingerprint import app.revanced.patches.shared.integrations.Constants.PATCHES_PATH import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.resultOrThrow import app.revanced.util.returnEarly import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c 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.formats.Instruction21c +import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.iface.reference.StringReference import com.android.tools.smali.dexlib2.immutable.reference.ImmutableStringReference import com.android.tools.smali.dexlib2.util.MethodUtil @@ -66,11 +71,12 @@ abstract class BaseGmsCoreSupportPatch( fingerprints = setOf( // Google Play Services. CastContextFetchFingerprint, - CastDynamiteModuleFingerprint, - CastDynamiteModuleV2Fingerprint, GmsCoreSupportFingerprint, + GmsServiceBrokerFingerprint, GooglePlayUtilityFingerprint, - PrimeMethodFingerprint, + PrimesApiFingerprint, + PrimesBackgroundInitializationFingerprint, + PrimesLifecycleEventFingerprint, ServiceCheckFingerprint, // Signature verification. @@ -145,18 +151,16 @@ abstract class BaseGmsCoreSupportPatch( return@transform null } - // Specific method that needs to be patched. - transformPrimeMethod(packageName) - // Return these methods early to prevent the app from crashing. listOf( CastContextFetchFingerprint, - CastDynamiteModuleFingerprint, - CastDynamiteModuleV2Fingerprint, + GmsServiceBrokerFingerprint, GooglePlayUtilityFingerprint, ServiceCheckFingerprint ).returnEarly() + transformPrimeMethod() + // Verify GmsCore is installed and whitelisted for power optimizations and background usage. if (checkGmsCore) { mainActivityOnCreateFingerprint.resultOrThrow().mutableMethod.addInstructions( @@ -285,18 +289,42 @@ abstract class BaseGmsCoreSupportPatch( } } - private fun transformPrimeMethod(packageName: String) { - PrimeMethodFingerprint.resultOrThrow().mutableMethod.apply { - var register = 2 - - val index = getInstructions().indexOfFirst { - if (it.getReference()?.string != fromPackageName) return@indexOfFirst false - - register = (it as OneRegisterInstruction).registerA - return@indexOfFirst true + private fun transformPrimeMethod() { + listOf( + PrimesBackgroundInitializationFingerprint, + PrimesLifecycleEventFingerprint + ).forEach { fingerprint -> + fingerprint.resultOrThrow().mutableMethod.apply { + val exceptionIndex = indexOfFirstInstructionReversedOrThrow { + opcode == Opcode.NEW_INSTANCE && + (this as? ReferenceInstruction)?.reference?.toString() == "Ljava/lang/IllegalStateException;" + } + val index = indexOfFirstInstructionReversedOrThrow(exceptionIndex, Opcode.IF_EQZ) + val register = getInstruction(index).registerA + addInstruction( + index, + "const/4 v$register, 0x1" + ) + } + } + PrimesApiFingerprint.resultOrThrow().let { + it.mutableClass.methods.filter { method -> + method.name != "" && + method.returnType == "V" + }.forEach { method -> + method.apply { + val index = if (MethodUtil.isConstructor(method)) + indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_DIRECT && + getReference()?.name == "" + } + 1 + else 0 + addInstruction( + index, + "return-void" + ) + } } - - replaceInstruction(index, "const-string v$register, \"$packageName\"") } } @@ -397,6 +425,9 @@ abstract class BaseGmsCoreSupportPatch( "com.google.android.gms.googlehelp.HELP", "com.google.android.gms.feedback.internal.IFeedbackService", + // cast + "com.google.android.gms.cast.service.BIND_CAST_DEVICE_CONTROLLER_SERVICE", + // chimera "com.google.android.gms.chimera", diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleFingerprint.kt deleted file mode 100644 index b109574dc..000000000 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleFingerprint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.shared.gms.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object CastDynamiteModuleFingerprint : MethodFingerprint( - strings = listOf("com.google.android.gms.cast.framework.internal.CastDynamiteModuleImpl") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleV2Fingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleV2Fingerprint.kt deleted file mode 100644 index a00275974..000000000 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/CastDynamiteModuleV2Fingerprint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.shared.gms.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object CastDynamiteModuleV2Fingerprint : MethodFingerprint( - strings = listOf("Failed to load module via V2: ") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/GmsServiceBrokerFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/GmsServiceBrokerFingerprint.kt new file mode 100644 index 000000000..853480b7e --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/GmsServiceBrokerFingerprint.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.shared.gms.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +internal object GmsServiceBrokerFingerprint : MethodFingerprint( + returnType = "V", + strings = listOf("mServiceBroker is null, client disconnected") +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimeMethodFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimeMethodFingerprint.kt deleted file mode 100644 index 1517b011a..000000000 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimeMethodFingerprint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.shared.gms.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint - -internal object PrimeMethodFingerprint : MethodFingerprint( - strings = listOf("com.google.android.GoogleCamera", "com.android.vending") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt new file mode 100644 index 000000000..e55f5e824 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.shared.gms.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.util.MethodUtil + +internal object PrimesApiFingerprint : MethodFingerprint( + returnType = "V", + strings = listOf("PrimesApiImpl.java"), + customFingerprint = { methodDef, _ -> + MethodUtil.isConstructor(methodDef) + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt new file mode 100644 index 000000000..78f05a7ca --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.shared.gms.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.StringReference + +internal object PrimesBackgroundInitializationFingerprint : MethodFingerprint( + opcodes = listOf(Opcode.NEW_INSTANCE), + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + opcode == Opcode.CONST_STRING && + getReference() + ?.string.toString().startsWith("Primes init triggered from background in package:") + } >= 0 + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt new file mode 100644 index 000000000..70fa68a57 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt @@ -0,0 +1,23 @@ +package app.revanced.patches.shared.gms.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.StringReference + +internal object PrimesLifecycleEventFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, + parameters = emptyList(), + opcodes = listOf(Opcode.NEW_INSTANCE), + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstruction { + opcode == Opcode.CONST_STRING && + getReference() + ?.string.toString().startsWith("Primes did not observe lifecycle events in the expected order.") + } >= 0 + } +) \ No newline at end of file From 7ae875b0393634263178a65260976c05885b9a39 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:03:12 +0300 Subject: [PATCH 087/103] chore(YouTube Music): Replace with a fingerprint that supports a wider range of versions --- .../components/FlyoutMenuComponentsPatch.kt | 29 ++++++---- .../fingerprints/DialogSolidFingerprint.kt | 20 ------- .../fingerprints/ScreenWidthFingerprint.kt | 11 ++++ .../ScreenWidthParentFingerprint.kt | 22 ++++++++ .../branding/icon/CustomBrandingIconPatch.kt | 53 ++++++++++++++++++- .../utils/resourceid/SharedResourceIdPatch.kt | 2 - .../music/utils/settings/SettingsPatch.kt | 2 + 7 files changed, 104 insertions(+), 35 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthParentFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt index 3ec2960fa..79ac01266 100644 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/FlyoutMenuComponentsPatch.kt @@ -6,9 +6,10 @@ 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.util.smali.ExternalLabel -import app.revanced.patches.music.flyoutmenu.components.fingerprints.DialogSolidFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.EndButtonsContainerFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.MenuItemFingerprint +import app.revanced.patches.music.flyoutmenu.components.fingerprints.ScreenWidthFingerprint +import app.revanced.patches.music.flyoutmenu.components.fingerprints.ScreenWidthParentFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.SleepTimerFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.TouchOutsideFingerprint import app.revanced.patches.music.flyoutmenu.components.fingerprints.TrimSilenceConfigFingerprint @@ -25,6 +26,7 @@ import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.music.utils.videotype.VideoTypeHookPatch import app.revanced.patches.music.video.information.VideoInformationPatch import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.util.alsoResolve import app.revanced.util.findMethodOrThrow import app.revanced.util.getReference import app.revanced.util.getWalkerMethod @@ -55,9 +57,9 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( ), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( - DialogSolidFingerprint, EndButtonsContainerFingerprint, MenuItemFingerprint, + ScreenWidthParentFingerprint, SleepTimerFingerprint, TouchOutsideFingerprint, TrimSilenceConfigFingerprint, @@ -72,15 +74,20 @@ object FlyoutMenuComponentsPatch : BaseBytecodePatch( // region patch for enable compact dialog - DialogSolidFingerprint.resultOrThrow().let { - val walkerMethod = - it.getWalkerMethod(context, it.scanResult.patternScanResult!!.endIndex) - walkerMethod.addInstructions( - 2, """ - invoke-static {p0}, $FLYOUT_CLASS_DESCRIPTOR->enableCompactDialog(I)I - move-result p0 - """ - ) + ScreenWidthFingerprint.alsoResolve( + context, ScreenWidthParentFingerprint + ).let { + it.mutableMethod.apply { + val index = it.scanResult.patternScanResult!!.startIndex + val register = getInstruction(index).registerA + + addInstructions( + index, """ + invoke-static {v$register}, $FLYOUT_CLASS_DESCRIPTOR->enableCompactDialog(I)I + move-result v$register + """ + ) + } } // endregion diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt deleted file mode 100644 index 92cb13bdb..000000000 --- a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/DialogSolidFingerprint.kt +++ /dev/null @@ -1,20 +0,0 @@ -package app.revanced.patches.music.flyoutmenu.components.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.DialogSolid -import app.revanced.util.fingerprint.LiteralValueFingerprint -import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode - -internal object DialogSolidFingerprint : LiteralValueFingerprint( - returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = listOf("L"), - opcodes = listOf( - Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT_OBJECT, - Opcode.INVOKE_STATIC - ), - literalSupplier = { DialogSolid }, -) - diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthFingerprint.kt new file mode 100644 index 000000000..68c97b139 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.music.flyoutmenu.components.fingerprints + +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.Opcode + +internal object ScreenWidthFingerprint : LiteralValueFingerprint( + returnType = "Z", + parameters = listOf("L"), + opcodes = listOf(Opcode.IF_LT), + literalSupplier = { 600 }, +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthParentFingerprint.kt new file mode 100644 index 000000000..29dbba28f --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/flyoutmenu/components/fingerprints/ScreenWidthParentFingerprint.kt @@ -0,0 +1,22 @@ +package app.revanced.patches.music.flyoutmenu.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object ScreenWidthParentFingerprint : MethodFingerprint( + returnType = "Landroid/graphics/Bitmap;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, + parameters = listOf("Landroid/app/Activity;", "I"), + customFingerprint = { methodDef, _ -> + methodDef.indexOfFirstInstructionReversed { + opcode == Opcode.INVOKE_VIRTUAL && + getReference()?.name == "destroyDrawingCache" + } >= 0 + } +) + diff --git a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt index 1a4c02fa8..7442a4992 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt @@ -6,6 +6,7 @@ import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.booleanPat import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatchOption import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.music.utils.settings.ResourceUtils.setIconType +import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.util.ResourceGroup import app.revanced.util.Utils.trimIndentMultiline import app.revanced.util.copyResources @@ -15,6 +16,7 @@ import app.revanced.util.underBarOrThrow import org.w3c.dom.Element import java.io.File import java.nio.file.Files +import java.nio.file.StandardCopyOption @Suppress("DEPRECATION", "unused") object CustomBrandingIconPatch : BaseResourcePatch( @@ -23,6 +25,8 @@ object CustomBrandingIconPatch : BaseResourcePatch( compatiblePackages = COMPATIBLE_PACKAGE, use = false, ) { + private const val ADAPTIVE_ICON_BACKGROUND_FILE_NAME = "adaptiveproduct_youtube_music_background_color_108" + private const val ADAPTIVE_ICON_FOREGROUND_FILE_NAME = "adaptiveproduct_youtube_music_foreground_color_108" private const val DEFAULT_ICON_KEY = "Xisr Yellow" private val availableIcon = mapOf( @@ -76,8 +80,8 @@ object CustomBrandingIconPatch : BaseResourcePatch( ).map { "$it.png" }.toTypedArray() private val launcherIconResourceFileNames = arrayOf( - "adaptiveproduct_youtube_music_background_color_108", - "adaptiveproduct_youtube_music_foreground_color_108", + ADAPTIVE_ICON_BACKGROUND_FILE_NAME, + ADAPTIVE_ICON_FOREGROUND_FILE_NAME, "ic_launcher_release" ).map { "$it.png" }.toTypedArray() @@ -260,5 +264,50 @@ object CustomBrandingIconPatch : BaseResourcePatch( setIconType(appIcon) } + + // region fix app icon + + if (!SettingsPatch.upward0723) { + return + } + + fun getAdaptiveIconResourceFile(tag: String): String { + context.xmlEditor["res/mipmap-anydpi/ic_launcher_release.xml"].use { editor -> + val adaptiveIcon = editor + .file + .getElementsByTagName("adaptive-icon") + .item(0) as Element + + val childNodes = adaptiveIcon.childNodes + for (i in 0 until childNodes.length) { + val node = childNodes.item(i) + if (node is Element && node.tagName == tag && node.hasAttribute("android:drawable")) { + return node.getAttribute("android:drawable").split("/")[1] + } + } + throw PatchException("Element not found: $tag") + } + } + + mapOf( + ADAPTIVE_ICON_BACKGROUND_FILE_NAME to getAdaptiveIconResourceFile("background"), + ADAPTIVE_ICON_FOREGROUND_FILE_NAME to getAdaptiveIconResourceFile("foreground") + ).forEach { (oldIconResourceFile, newIconResourceFile) -> + mipmapDirectories.forEach { + val mipmapDirectory = context["res"].resolve(it) + Files.move( + mipmapDirectory + .resolve("$oldIconResourceFile.png") + .toPath(), + mipmapDirectory + .resolve("$newIconResourceFile.png") + .toPath(), + StandardCopyOption.REPLACE_EXISTING + ) + } + } + + // endregion + } } diff --git a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt index bd40f4674..1ff4b5663 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt @@ -23,7 +23,6 @@ object SharedResourceIdPatch : ResourcePatch() { var ColorGrey = -1L var DarkBackground = -1L var DesignBottomSheetDialog = -1L - var DialogSolid = -1L var EndButtonsContainer = -1L var FloatingLayout = -1L var HistoryMenuItem = -1L @@ -68,7 +67,6 @@ object SharedResourceIdPatch : ResourcePatch() { ColorGrey = getId(COLOR, "ytm_color_grey_12") DarkBackground = getId(ID, "dark_background") DesignBottomSheetDialog = getId(LAYOUT, "design_bottom_sheet_dialog") - DialogSolid = getId(STYLE, "Theme.YouTubeMusic.Dialog.Solid") EndButtonsContainer = getId(ID, "end_buttons_container") FloatingLayout = getId(ID, "floating_layout") HistoryMenuItem = getId(ID, "history_menu_item") diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt index 0af833bda..1e89c65ff 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt @@ -44,6 +44,7 @@ object SettingsPatch : BaseResourcePatch( internal var upward0706 = false internal var upward0718 = false internal var upward0720 = false + internal var upward0723 = false override fun execute(context: ResourceContext) { @@ -142,6 +143,7 @@ object SettingsPatch : BaseResourcePatch( upward0706 = 242499000 <= playServicesVersion upward0718 = 243699000 <= playServicesVersion upward0720 = 243899000 <= playServicesVersion + upward0723 = 244199000 <= playServicesVersion break } From 39ae3b0072b1e2a8716777d146ba0b45ec555c3e Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:06:57 +0300 Subject: [PATCH 088/103] feat(YouTube - Hide comments components): Add `Hide highlighted search links` setting --- .../SpannableStringBuilderFingerprint.kt | 4 +- .../textcomponent/TextComponentPatch.kt | 5 +- .../fingerprints/InclusiveSpanFingerprint.kt | 56 +++++++++++++++++++ .../player/comments/CommentsComponentPatch.kt | 52 ++++++++++++++++- .../kotlin/app/revanced/util/BytecodeUtils.kt | 10 ++++ .../youtube/settings/xml/revanced_prefs.xml | 1 + 6 files changed, 122 insertions(+), 6 deletions(-) rename src/main/kotlin/app/revanced/patches/shared/{textcomponent => }/fingerprints/SpannableStringBuilderFingerprint.kt (84%) create mode 100644 src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/InclusiveSpanFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/fingerprints/SpannableStringBuilderFingerprint.kt similarity index 84% rename from src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt rename to src/main/kotlin/app/revanced/patches/shared/fingerprints/SpannableStringBuilderFingerprint.kt index 1d88bab53..840b13b71 100644 --- a/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/SpannableStringBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/fingerprints/SpannableStringBuilderFingerprint.kt @@ -1,7 +1,7 @@ -package app.revanced.patches.shared.textcomponent.fingerprints +package app.revanced.patches.shared.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.patches.shared.textcomponent.fingerprints.SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction +import app.revanced.patches.shared.fingerprints.SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.Opcode diff --git a/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt b/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt index 44aa2ee80..c9996f1f0 100644 --- a/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/textcomponent/TextComponentPatch.kt @@ -8,7 +8,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod -import app.revanced.patches.shared.textcomponent.fingerprints.SpannableStringBuilderFingerprint +import app.revanced.patches.shared.fingerprints.SpannableStringBuilderFingerprint import app.revanced.patches.shared.textcomponent.fingerprints.TextComponentConstructorFingerprint import app.revanced.patches.shared.textcomponent.fingerprints.TextComponentContextFingerprint import app.revanced.util.alsoResolve @@ -33,7 +33,8 @@ object TextComponentPatch : BytecodePatch( SpannableStringBuilderFingerprint.resultOrThrow().mutableMethod.apply { spannedMethod = this - spannedIndex = SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction(this) + spannedIndex = + SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction(this) spannedRegister = getInstruction(spannedIndex).registerC spannedContextRegister = getInstruction(0).registerA diff --git a/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/InclusiveSpanFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/InclusiveSpanFingerprint.kt new file mode 100644 index 000000000..ccb19a1fa --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/InclusiveSpanFingerprint.kt @@ -0,0 +1,56 @@ +package app.revanced.patches.shared.textcomponent.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.shared.textcomponent.fingerprints.InclusiveSpanFingerprint.STARTS_WITH_PARAMETER_LIST +import app.revanced.patches.shared.textcomponent.fingerprints.InclusiveSpanFingerprint.indexOfSetSpanInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed +import app.revanced.util.parametersEqual +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object InclusiveSpanFingerprint : MethodFingerprint( + returnType = "V", + // 19.14 and earlier parameters are: + // "Landroid/text/SpannableString;", + // "Ljava/lang/Object;", + // "I", + // "I" + + // 19.15+ parameters are: + // "Landroid/text/SpannableString;", + // "Ljava/lang/Object;", + // "I", + // "I", + // "Z" + customFingerprint = custom@{ methodDef, _ -> + val parameterTypes = methodDef.parameterTypes + val parameterSize = parameterTypes.size + if (parameterSize != 4 && parameterSize != 5) { + return@custom false + } + val startsWithMethodParameterList = parameterTypes.slice(0..3) + + if (!parametersEqual(STARTS_WITH_PARAMETER_LIST, startsWithMethodParameterList)) { + return@custom false + } + indexOfSetSpanInstruction(methodDef) >= 0 + }, +) { + internal const val SET_SPAN_METHOD_CALL = + "Landroid/text/SpannableString;->setSpan(Ljava/lang/Object;III)V" + + private val STARTS_WITH_PARAMETER_LIST = listOf( + "Landroid/text/SpannableString;", + "Ljava/lang/Object;", + "I", + "I" + ) + + fun indexOfSetSpanInstruction(methodDef: Method) = + methodDef.indexOfFirstInstructionReversed { + opcode == Opcode.INVOKE_VIRTUAL && + getReference().toString() == SET_SPAN_METHOD_CALL + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt index 8add5c0f8..e1009fa5e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt @@ -4,21 +4,29 @@ 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.replaceInstruction +import app.revanced.patches.shared.fingerprints.SpannableStringBuilderFingerprint import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.patches.shared.textcomponent.TextComponentPatch import app.revanced.patches.youtube.player.comments.fingerprints.ShortsLiveStreamEmojiPickerOnClickListenerFingerprint import app.revanced.patches.youtube.player.comments.fingerprints.ShortsLiveStreamEmojiPickerOpacityFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_PATH import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.getFiveRegisters +import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow 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.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") object CommentsComponentPatch : BaseBytecodePatch( @@ -27,19 +35,59 @@ object CommentsComponentPatch : BaseBytecodePatch( dependencies = setOf( LithoFilterPatch::class, SettingsPatch::class, - SharedResourceIdPatch::class + SharedResourceIdPatch::class, + TextComponentPatch::class, ), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( ShortsLiveStreamEmojiPickerOnClickListenerFingerprint, - ShortsLiveStreamEmojiPickerOpacityFingerprint + ShortsLiveStreamEmojiPickerOpacityFingerprint, + SpannableStringBuilderFingerprint, ) ) { private const val FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/CommentsFilter;" + private const val INTEGRATIONS_SEARCH_LINKS_CLASS_DESCRIPTOR = + "$PLAYER_PATH/SearchLinksPatch;" override fun execute(context: BytecodeContext) { + TextComponentPatch.hookSpannableString( + INTEGRATIONS_SEARCH_LINKS_CLASS_DESCRIPTOR, + "setConversionContext" + ) + + SpannableStringBuilderFingerprint.resultOrThrow().mutableMethod.apply { + val spannedIndex = + SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction(this) + val setInclusiveSpanIndex = indexOfFirstInstructionOrThrow(spannedIndex) { + val reference = getReference() + opcode == Opcode.INVOKE_STATIC && + reference?.returnType == "V" && + reference.parameterTypes.size > 3 && + reference.parameterTypes.firstOrNull() == "Landroid/text/SpannableString;" + } + // In YouTube 18.29.38, YouTube 19.41.39, the target method is in class 'La;' + // 'getWalkerMethod' should be used until the dependency is updated to ReVanced Patcher 20+. + // https://github.com/ReVanced/revanced-patcher/issues/309 + val setInclusiveSpanMethod = + getWalkerMethod(context, setInclusiveSpanIndex) + + setInclusiveSpanMethod.apply { + val insertIndex = indexOfFirstInstructionReversedOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference().toString() == "Landroid/text/SpannableString;->setSpan(Ljava/lang/Object;III)V" + } + replaceInstruction( + insertIndex, + "invoke-static { ${getFiveRegisters(insertIndex)} }, " + + INTEGRATIONS_SEARCH_LINKS_CLASS_DESCRIPTOR + + "->" + + "hideSearchLinks(Landroid/text/SpannableString;Ljava/lang/Object;III)V" + ) + } + } + // region patch for emoji picker button in shorts ShortsLiveStreamEmojiPickerOpacityFingerprint.resultOrThrow().let { diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index bb3ea6e8e..f53f590af 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -509,6 +509,16 @@ fun MutableMethod.getWalkerMethod(context: BytecodeContext, offset: Int): Mutabl } } +/** + * Taken from BiliRoamingX: + * https://github.com/BiliRoamingX/BiliRoamingX/blob/ae58109f3acdd53ec2d2b3fb439c2a2ef1886221/patches/src/main/kotlin/app/revanced/patches/bilibili/utils/Extenstions.kt#L151 + */ +fun MutableMethod.getFiveRegisters(index: Int) = + with (getInstruction(index)) { + arrayOf(registerC, registerD, registerE, registerF, registerG) + .take(registerCount).joinToString(",") { "v$it" } + } + fun BytecodeContext.addStaticFieldToIntegration( className: String, methodName: String, diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index b91d3faed..79dd799a2 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -350,6 +350,7 @@ + From 55a695395bff0903d34ca45593d3ff97609fe264 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:12:40 +0300 Subject: [PATCH 089/103] feat(YouTube - Hide feed components): Remove `Hide UPCOMING video` setting --- src/main/resources/youtube/settings/xml/revanced_prefs.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 79dd799a2..97ced42a1 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -248,7 +248,6 @@ - From 428616e2f1426e8128afab8f2b684e35cea3f1cb Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:14:17 +0300 Subject: [PATCH 090/103] feat(YouTube - Shorts components): Add `Hide in channel` setting (Hide the Shorts shelf on the channel home tab) --- src/main/resources/youtube/settings/xml/revanced_prefs.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 97ced42a1..655eb0fde 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -577,6 +577,7 @@ + From ef594d09621e26a0b4824b7236d8915e0fedf5cf Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:16:01 +0300 Subject: [PATCH 091/103] feat(YouTube - Swipe controls): Add `Swipe sensitivity` settings --- .../patches/youtube/swipe/controls/SwipeControlsPatch.kt | 3 --- src/main/resources/youtube/settings/xml/revanced_prefs.xml | 7 ++++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt index 1fcad075e..036468b18 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt @@ -121,7 +121,6 @@ object SwipeControlsPatch : BaseBytecodePatch( """, ExternalLabel("default", getInstruction(0)) ) - settingArray += "PREFERENCE_CATEGORY: SWIPE_CONTROLS_EXPERIMENTAL_FLAGS" settingArray += "SETTINGS: DISABLE_HDR_BRIGHTNESS" } @@ -137,7 +136,6 @@ object SwipeControlsPatch : BaseBytecodePatch( "$INTEGRATIONS_SWIPE_CONTROLS_PATCH_CLASS_DESCRIPTOR->enableSwipeToSwitchVideo()Z" ) - settingArray += "PREFERENCE_CATEGORY: SWIPE_CONTROLS_EXPERIMENTAL_FLAGS" settingArray += "SETTINGS: ENABLE_SWIPE_TO_SWITCH_VIDEO" } @@ -153,7 +151,6 @@ object SwipeControlsPatch : BaseBytecodePatch( "$INTEGRATIONS_SWIPE_CONTROLS_PATCH_CLASS_DESCRIPTOR->enableWatchPanelGestures()Z" ) - settingArray += "PREFERENCE_CATEGORY: SWIPE_CONTROLS_EXPERIMENTAL_FLAGS" settingArray += "SETTINGS: ENABLE_WATCH_PANEL_GESTURES" } diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 655eb0fde..163ef3053 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -602,10 +602,11 @@ - PREFERENCE_SCREEN: SWIPE_CONTROLS --> + - + + + PREFERENCE_SCREEN: SWIPE_CONTROLS --> From ef342ace95a6b935e92545557e7a5d8c9315f81a Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:17:41 +0300 Subject: [PATCH 092/103] chore(YouTube - PlayerType): Supplement PlayerType limits under certain conditions --- .../utils/playertype/PlayerTypeHookPatch.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt index aa530b0cc..e81bb3576 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/playertype/PlayerTypeHookPatch.kt @@ -7,6 +7,8 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.SHARED_PATH import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH import app.revanced.patches.youtube.utils.playertype.fingerprint.ActionBarSearchResultsFingerprint @@ -29,7 +31,12 @@ 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.reference.FieldReference -@Patch(dependencies = [SharedResourceIdPatch::class]) +@Patch( + dependencies = [ + SharedResourceIdPatch::class, + LithoFilterPatch::class + ] +) object PlayerTypeHookPatch : BytecodePatch( setOf( ActionBarSearchResultsFingerprint, @@ -45,6 +52,9 @@ object PlayerTypeHookPatch : BytecodePatch( private const val INTEGRATIONS_ROOT_VIEW_HOOK_CLASS_DESCRIPTOR = "$SHARED_PATH/RootView;" + private const val FILTER_CLASS_DESCRIPTOR = + "$COMPONENTS_PATH/RelatedVideoFilter;" + override fun execute(context: BytecodeContext) { // region patch for set player type @@ -153,5 +163,7 @@ object PlayerTypeHookPatch : BytecodePatch( // endregion + LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) + } } From 9fe964a5484b5e9b69b82a9d1128d6f43ed0052f Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:06:20 +0300 Subject: [PATCH 093/103] feat(YouTube - Spoof app version): Show the dialog when the app is first installed --- .../spoofappversion/SpoofAppVersionPatch.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt index 662a2f932..5fcfa9beb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/spoofappversion/SpoofAppVersionPatch.kt @@ -1,9 +1,13 @@ package app.revanced.patches.youtube.general.spoofappversion import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.youtube.utils.integrations.Constants.PATCH_STATUS_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.settings.SettingsBytecodePatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.appendAppVersion +import app.revanced.util.findMethodOrThrow import app.revanced.util.patch.BaseResourcePatch @Suppress("unused") @@ -13,6 +17,7 @@ object SpoofAppVersionPatch : BaseResourcePatch( "This can be used to restore old UI elements and features.", dependencies = setOf( SettingsPatch::class, + SettingsBytecodePatch::class, SpoofAppVersionBytecodePatch::class ), compatiblePackages = COMPATIBLE_PACKAGE @@ -27,6 +32,15 @@ object SpoofAppVersionPatch : BaseResourcePatch( context.appendAppVersion("18.48.39") if (SettingsPatch.upward1915) { context.appendAppVersion("19.13.37") + + SettingsBytecodePatch.contexts.findMethodOrThrow( + PATCH_STATUS_CLASS_DESCRIPTOR + ) { + name == "SpoofAppVersionDefaultString" + }.replaceInstruction( + 0, + "const-string v0, \"19.13.37\"" + ) } } } @@ -42,7 +56,6 @@ object SpoofAppVersionPatch : BaseResourcePatch( "SETTINGS: SPOOF_APP_VERSION" ) ) - SettingsPatch.updatePatchStatus(this) } } \ No newline at end of file From bce2d55e7cdc075d21c786f0c381ad723e50139d Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:25:58 +0300 Subject: [PATCH 094/103] chore(YouTube - Inclusive Span): Change to shared patch --- .../patches/shared/integrations/Constants.kt | 1 + .../shared/spans/InclusiveSpanPatch.kt | 174 ++++++++++++++++++ .../CustomCharacterStyleFingerprint.kt | 8 + .../player/comments/CommentsComponentPatch.kt | 56 +----- .../youtube/utils/integrations/Constants.kt | 1 + 5 files changed, 192 insertions(+), 48 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/shared/spans/InclusiveSpanPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/shared/spans/fingerprints/CustomCharacterStyleFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt b/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt index 03c2e3fe8..699113f66 100644 --- a/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt +++ b/src/main/kotlin/app/revanced/patches/shared/integrations/Constants.kt @@ -5,6 +5,7 @@ object Constants { const val INTEGRATIONS_PATH = "Lapp/revanced/integrations/shared" const val PATCHES_PATH = "$INTEGRATIONS_PATH/patches" const val COMPONENTS_PATH = "$PATCHES_PATH/components" + const val SPANS_PATH = "$PATCHES_PATH/spans" const val INTEGRATIONS_UTILS_PATH = "$INTEGRATIONS_PATH/utils" const val INTEGRATIONS_SETTING_CLASS_DESCRIPTOR = "$INTEGRATIONS_PATH/settings/Setting;" diff --git a/src/main/kotlin/app/revanced/patches/shared/spans/InclusiveSpanPatch.kt b/src/main/kotlin/app/revanced/patches/shared/spans/InclusiveSpanPatch.kt new file mode 100644 index 000000000..c81c839ae --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/spans/InclusiveSpanPatch.kt @@ -0,0 +1,174 @@ +package app.revanced.patches.shared.spans + +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.replaceInstruction +import app.revanced.patcher.extensions.or +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable +import app.revanced.patches.shared.fingerprints.SpannableStringBuilderFingerprint +import app.revanced.patches.shared.integrations.Constants.SPANS_PATH +import app.revanced.patches.shared.spans.fingerprints.CustomCharacterStyleFingerprint +import app.revanced.patches.shared.textcomponent.TextComponentPatch +import app.revanced.util.findMethodOrThrow +import app.revanced.util.findMethodsOrThrow +import app.revanced.util.getFiveRegisters +import app.revanced.util.getReference +import app.revanced.util.getWalkerMethod +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstInstructionReversedOrThrow +import app.revanced.util.resultOrThrow +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation +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 +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.immutable.ImmutableMethod +import java.io.Closeable + +@Patch(dependencies = [TextComponentPatch::class]) +object InclusiveSpanPatch : BytecodePatch( + setOf( + CustomCharacterStyleFingerprint, + SpannableStringBuilderFingerprint, + ) +), Closeable { + private const val INTEGRATIONS_SPANS_CLASS_DESCRIPTOR = + "$SPANS_PATH/InclusiveSpanPatch;" + + private const val INTEGRATIONS_FILER_ARRAY_DESCRIPTOR = + "[$SPANS_PATH/Filter;" + + private lateinit var filterArrayMethod: MutableMethod + private var filterCount = 0 + + internal lateinit var addFilter: (String) -> Unit + private set + + override fun execute(context: BytecodeContext) { + + TextComponentPatch.hookSpannableString( + INTEGRATIONS_SPANS_CLASS_DESCRIPTOR, + "setConversionContext" + ) + + SpannableStringBuilderFingerprint.resultOrThrow().mutableMethod.apply { + val spannedIndex = + SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction(this) + val setInclusiveSpanIndex = indexOfFirstInstructionOrThrow(spannedIndex) { + val reference = getReference() + opcode == Opcode.INVOKE_STATIC && + reference?.returnType == "V" && + reference.parameterTypes.size > 3 && + reference.parameterTypes.firstOrNull() == "Landroid/text/SpannableString;" + } + // In YouTube 18.29.38, YouTube 19.41.39, the target method is in class 'La;' + // 'getWalkerMethod' should be used until the dependency is updated to ReVanced Patcher 20+. + // https://github.com/ReVanced/revanced-patcher/issues/309 + val setInclusiveSpanMethod = + getWalkerMethod(context, setInclusiveSpanIndex) + + setInclusiveSpanMethod.apply { + val insertIndex = indexOfFirstInstructionReversedOrThrow { + opcode == Opcode.INVOKE_VIRTUAL && + getReference().toString() == "Landroid/text/SpannableString;->setSpan(Ljava/lang/Object;III)V" + } + replaceInstruction( + insertIndex, + "invoke-static { ${getFiveRegisters(insertIndex)} }, " + + INTEGRATIONS_SPANS_CLASS_DESCRIPTOR + + "->" + + "setSpan(Landroid/text/SpannableString;Ljava/lang/Object;III)V" + ) + } + } + + val customCharacterStyle = + CustomCharacterStyleFingerprint.resultOrThrow().mutableClass.type + + context.findMethodOrThrow(INTEGRATIONS_SPANS_CLASS_DESCRIPTOR) { + name == "getSpanType" && + returnType != "Ljava/lang/String;" + }.apply { + val index = indexOfFirstInstructionOrThrow { + opcode == Opcode.INSTANCE_OF && + (this as? ReferenceInstruction)?.reference?.toString() == "Landroid/text/style/CharacterStyle;" + } + val instruction = getInstruction(index) + replaceInstruction( + index, + "instance-of v${instruction.registerA}, v${instruction.registerB}, $customCharacterStyle" + ) + } + + // Create a new method to get the filter array to avoid register conflicts. + // This fixes an issue with Integrations compiled with Android Gradle Plugin 8.3.0+. + // https://github.com/ReVanced/revanced-patches/issues/2818 + val spansFilterMethods = + context.findMethodsOrThrow(INTEGRATIONS_SPANS_CLASS_DESCRIPTOR) + + spansFilterMethods + .first { it.name == "" } + .apply { + val setArrayIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.SPUT_OBJECT && + getReference()?.type == INTEGRATIONS_FILER_ARRAY_DESCRIPTOR + } + val setArrayRegister = + getInstruction(setArrayIndex).registerA + val addedMethodName = "getFilterArray" + + addInstructions( + setArrayIndex, """ + invoke-static {}, $INTEGRATIONS_SPANS_CLASS_DESCRIPTOR->$addedMethodName()$INTEGRATIONS_FILER_ARRAY_DESCRIPTOR + move-result-object v$setArrayRegister + """ + ) + + filterArrayMethod = ImmutableMethod( + definingClass, + addedMethodName, + emptyList(), + INTEGRATIONS_FILER_ARRAY_DESCRIPTOR, + AccessFlags.PRIVATE or AccessFlags.STATIC, + null, + null, + MutableMethodImplementation(3), + ).toMutable().apply { + addInstruction( + 0, + "return-object v2" + ) + } + + spansFilterMethods.add(filterArrayMethod) + } + + addFilter = { classDescriptor -> + filterArrayMethod.addInstructions( + 0, + """ + new-instance v0, $classDescriptor + invoke-direct {v0}, $classDescriptor->()V + const/16 v1, ${filterCount++} + aput-object v0, v2, v1 + """ + ) + } + } + + override fun close() = filterArrayMethod.addInstructions( + 0, + """ + const/16 v0, $filterCount + new-array v2, v0, $INTEGRATIONS_FILER_ARRAY_DESCRIPTOR + """ + ) +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/spans/fingerprints/CustomCharacterStyleFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/spans/fingerprints/CustomCharacterStyleFingerprint.kt new file mode 100644 index 000000000..857b64d8e --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/spans/fingerprints/CustomCharacterStyleFingerprint.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.shared.spans.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +internal object CustomCharacterStyleFingerprint : MethodFingerprint( + returnType = "Landroid/graphics/Path;", + parameters = listOf("Landroid/text/Layout;"), +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt index e1009fa5e..464aca1ce 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/comments/CommentsComponentPatch.kt @@ -4,39 +4,34 @@ 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.replaceInstruction import app.revanced.patches.shared.fingerprints.SpannableStringBuilderFingerprint import app.revanced.patches.shared.litho.LithoFilterPatch -import app.revanced.patches.shared.textcomponent.TextComponentPatch +import app.revanced.patches.shared.spans.InclusiveSpanPatch import app.revanced.patches.youtube.player.comments.fingerprints.ShortsLiveStreamEmojiPickerOnClickListenerFingerprint import app.revanced.patches.youtube.player.comments.fingerprints.ShortsLiveStreamEmojiPickerOpacityFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR -import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_PATH +import app.revanced.patches.youtube.utils.integrations.Constants.SPANS_PATH import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch -import app.revanced.util.getFiveRegisters -import app.revanced.util.getReference import app.revanced.util.getWalkerMethod import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.indexOfFirstWideLiteralInstructionValueOrThrow 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.OneRegisterInstruction -import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Suppress("unused") object CommentsComponentPatch : BaseBytecodePatch( name = "Hide comments components", description = "Adds options to hide components related to comments.", dependencies = setOf( + InclusiveSpanPatch::class, LithoFilterPatch::class, SettingsPatch::class, SharedResourceIdPatch::class, - TextComponentPatch::class, ), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( @@ -45,49 +40,13 @@ object CommentsComponentPatch : BaseBytecodePatch( SpannableStringBuilderFingerprint, ) ) { - private const val FILTER_CLASS_DESCRIPTOR = + private const val COMMENTS_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/CommentsFilter;" - private const val INTEGRATIONS_SEARCH_LINKS_CLASS_DESCRIPTOR = - "$PLAYER_PATH/SearchLinksPatch;" + private const val SEARCH_LINKS_FILTER_CLASS_DESCRIPTOR = + "$SPANS_PATH/SearchLinksFilter;" override fun execute(context: BytecodeContext) { - TextComponentPatch.hookSpannableString( - INTEGRATIONS_SEARCH_LINKS_CLASS_DESCRIPTOR, - "setConversionContext" - ) - - SpannableStringBuilderFingerprint.resultOrThrow().mutableMethod.apply { - val spannedIndex = - SpannableStringBuilderFingerprint.indexOfSpannableStringInstruction(this) - val setInclusiveSpanIndex = indexOfFirstInstructionOrThrow(spannedIndex) { - val reference = getReference() - opcode == Opcode.INVOKE_STATIC && - reference?.returnType == "V" && - reference.parameterTypes.size > 3 && - reference.parameterTypes.firstOrNull() == "Landroid/text/SpannableString;" - } - // In YouTube 18.29.38, YouTube 19.41.39, the target method is in class 'La;' - // 'getWalkerMethod' should be used until the dependency is updated to ReVanced Patcher 20+. - // https://github.com/ReVanced/revanced-patcher/issues/309 - val setInclusiveSpanMethod = - getWalkerMethod(context, setInclusiveSpanIndex) - - setInclusiveSpanMethod.apply { - val insertIndex = indexOfFirstInstructionReversedOrThrow { - opcode == Opcode.INVOKE_VIRTUAL && - getReference().toString() == "Landroid/text/SpannableString;->setSpan(Ljava/lang/Object;III)V" - } - replaceInstruction( - insertIndex, - "invoke-static { ${getFiveRegisters(insertIndex)} }, " + - INTEGRATIONS_SEARCH_LINKS_CLASS_DESCRIPTOR + - "->" + - "hideSearchLinks(Landroid/text/SpannableString;Ljava/lang/Object;III)V" - ) - } - } - // region patch for emoji picker button in shorts ShortsLiveStreamEmojiPickerOpacityFingerprint.resultOrThrow().let { @@ -128,7 +87,8 @@ object CommentsComponentPatch : BaseBytecodePatch( // endregion - LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) + InclusiveSpanPatch.addFilter(SEARCH_LINKS_FILTER_CLASS_DESCRIPTOR) + LithoFilterPatch.addFilter(COMMENTS_FILTER_CLASS_DESCRIPTOR) /** * Add settings diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/Constants.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/Constants.kt index 28b4501fb..bd6be2c49 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/Constants.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/integrations/Constants.kt @@ -15,6 +15,7 @@ object Constants { const val OVERLAY_BUTTONS_PATH = "$PATCHES_PATH/overlaybutton" const val PLAYER_PATH = "$PATCHES_PATH/player" const val SHORTS_PATH = "$PATCHES_PATH/shorts" + const val SPANS_PATH = "$PATCHES_PATH/spans" const val SWIPE_PATH = "$PATCHES_PATH/swipe" const val UTILS_PATH = "$PATCHES_PATH/utils" const val VIDEO_PATH = "$PATCHES_PATH/video" From fc4e293afdfef4139ca8a1667c274efd7164ced1 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:26:19 +0300 Subject: [PATCH 095/103] feat(YouTube - Player components): Add `Sanitize video subtitle` setting --- .../youtube/player/components/PlayerComponentsPatch.kt | 6 ++++++ src/main/resources/youtube/settings/xml/revanced_prefs.xml | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt index e87f246ba..ccb4a3457 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt @@ -11,6 +11,7 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.fingerprints.StartVideoInformerFingerprint import app.revanced.patches.shared.litho.LithoFilterPatch +import app.revanced.patches.shared.spans.InclusiveSpanPatch import app.revanced.patches.youtube.player.components.fingerprints.CrowdfundingBoxFingerprint import app.revanced.patches.youtube.player.components.fingerprints.FilmStripOverlayConfigFingerprint import app.revanced.patches.youtube.player.components.fingerprints.FilmStripOverlayInteractionFingerprint @@ -38,6 +39,7 @@ import app.revanced.patches.youtube.utils.fingerprints.YouTubeControlsOverlayFin import app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.SuggestedVideoEndScreenPatch import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.integrations.Constants.SPANS_PATH import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.DarkBackground @@ -71,6 +73,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( description = "Adds options to hide or change components related to the video player.", dependencies = setOf( ControlsOverlayConfigPatch::class, + InclusiveSpanPatch::class, LithoFilterPatch::class, PlayerTypeHookPatch::class, SettingsPatch::class, @@ -103,6 +106,8 @@ object PlayerComponentsPatch : BaseBytecodePatch( ) { private const val PLAYER_COMPONENTS_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/PlayerComponentsFilter;" + private const val SANITIZE_VIDEO_SUBTITLE_FILTER_CLASS_DESCRIPTOR = + "$SPANS_PATH/SanitizeVideoSubtitleFilter;" override fun execute(context: BytecodeContext) { @@ -428,6 +433,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( // endregion + InclusiveSpanPatch.addFilter(SANITIZE_VIDEO_SUBTITLE_FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(PLAYER_COMPONENTS_FILTER_CLASS_DESCRIPTOR) /** diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 163ef3053..14bf69b6a 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -505,7 +505,8 @@ - SETTINGS: PLAYER_COMPONENTS --> + + SETTINGS: PLAYER_COMPONENTS --> From 1045b3baeddcf16d3dc0aac1ec213cb95560bd3b Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Fri, 18 Oct 2024 21:25:54 +0900 Subject: [PATCH 096/103] chore: lint code --- .../branding/icon/CustomBrandingIconPatch.kt | 6 +- .../gms/fingerprints/PrimesApiFingerprint.kt | 2 +- ...imesBackgroundInitializationFingerprint.kt | 3 +- .../PrimesLifecycleEventFingerprint.kt | 3 +- .../fingerprints/InclusiveSpanFingerprint.kt | 56 ------------------- .../general/miniplayer/MiniplayerPatch.kt | 9 ++- .../player/seekbar/SeekbarComponentsPatch.kt | 8 +-- .../kotlin/app/revanced/util/BytecodeUtils.kt | 2 +- 8 files changed, 17 insertions(+), 72 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/InclusiveSpanFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt index 7442a4992..7d6bcfa2d 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt @@ -25,8 +25,10 @@ object CustomBrandingIconPatch : BaseResourcePatch( compatiblePackages = COMPATIBLE_PACKAGE, use = false, ) { - private const val ADAPTIVE_ICON_BACKGROUND_FILE_NAME = "adaptiveproduct_youtube_music_background_color_108" - private const val ADAPTIVE_ICON_FOREGROUND_FILE_NAME = "adaptiveproduct_youtube_music_foreground_color_108" + private const val ADAPTIVE_ICON_BACKGROUND_FILE_NAME = + "adaptiveproduct_youtube_music_background_color_108" + private const val ADAPTIVE_ICON_FOREGROUND_FILE_NAME = + "adaptiveproduct_youtube_music_foreground_color_108" private const val DEFAULT_ICON_KEY = "Xisr Yellow" private val availableIcon = mapOf( diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt index e55f5e824..5e51b6880 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesApiFingerprint.kt @@ -5,7 +5,7 @@ import com.android.tools.smali.dexlib2.util.MethodUtil internal object PrimesApiFingerprint : MethodFingerprint( returnType = "V", - strings = listOf("PrimesApiImpl.java"), + strings = listOf("PrimesApiImpl.java"), customFingerprint = { methodDef, _ -> MethodUtil.isConstructor(methodDef) } diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt index 78f05a7ca..8ae21f3b4 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesBackgroundInitializationFingerprint.kt @@ -12,7 +12,8 @@ internal object PrimesBackgroundInitializationFingerprint : MethodFingerprint( methodDef.indexOfFirstInstruction { opcode == Opcode.CONST_STRING && getReference() - ?.string.toString().startsWith("Primes init triggered from background in package:") + ?.string.toString() + .startsWith("Primes init triggered from background in package:") } >= 0 } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt index 70fa68a57..8d538ba77 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/fingerprints/PrimesLifecycleEventFingerprint.kt @@ -17,7 +17,8 @@ internal object PrimesLifecycleEventFingerprint : MethodFingerprint( methodDef.indexOfFirstInstruction { opcode == Opcode.CONST_STRING && getReference() - ?.string.toString().startsWith("Primes did not observe lifecycle events in the expected order.") + ?.string.toString() + .startsWith("Primes did not observe lifecycle events in the expected order.") } >= 0 } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/InclusiveSpanFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/InclusiveSpanFingerprint.kt deleted file mode 100644 index ccb19a1fa..000000000 --- a/src/main/kotlin/app/revanced/patches/shared/textcomponent/fingerprints/InclusiveSpanFingerprint.kt +++ /dev/null @@ -1,56 +0,0 @@ -package app.revanced.patches.shared.textcomponent.fingerprints - -import app.revanced.patcher.fingerprint.MethodFingerprint -import app.revanced.patches.shared.textcomponent.fingerprints.InclusiveSpanFingerprint.STARTS_WITH_PARAMETER_LIST -import app.revanced.patches.shared.textcomponent.fingerprints.InclusiveSpanFingerprint.indexOfSetSpanInstruction -import app.revanced.util.getReference -import app.revanced.util.indexOfFirstInstructionReversed -import app.revanced.util.parametersEqual -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.Method -import com.android.tools.smali.dexlib2.iface.reference.MethodReference - -internal object InclusiveSpanFingerprint : MethodFingerprint( - returnType = "V", - // 19.14 and earlier parameters are: - // "Landroid/text/SpannableString;", - // "Ljava/lang/Object;", - // "I", - // "I" - - // 19.15+ parameters are: - // "Landroid/text/SpannableString;", - // "Ljava/lang/Object;", - // "I", - // "I", - // "Z" - customFingerprint = custom@{ methodDef, _ -> - val parameterTypes = methodDef.parameterTypes - val parameterSize = parameterTypes.size - if (parameterSize != 4 && parameterSize != 5) { - return@custom false - } - val startsWithMethodParameterList = parameterTypes.slice(0..3) - - if (!parametersEqual(STARTS_WITH_PARAMETER_LIST, startsWithMethodParameterList)) { - return@custom false - } - indexOfSetSpanInstruction(methodDef) >= 0 - }, -) { - internal const val SET_SPAN_METHOD_CALL = - "Landroid/text/SpannableString;->setSpan(Ljava/lang/Object;III)V" - - private val STARTS_WITH_PARAMETER_LIST = listOf( - "Landroid/text/SpannableString;", - "Ljava/lang/Object;", - "I", - "I" - ) - - fun indexOfSetSpanInstruction(methodDef: Method) = - methodDef.indexOfFirstInstructionReversed { - opcode == Opcode.INVOKE_VIRTUAL && - getReference().toString() == SET_SPAN_METHOD_CALL - } -} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt index c49dcfb85..dbb7d5aa1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/miniplayer/MiniplayerPatch.kt @@ -39,6 +39,7 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.Scrim import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.YtOutlinePictureInPictureWhite import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.YtOutlineXWhite import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.alsoResolve import app.revanced.util.findOpcodeIndicesReversed import app.revanced.util.fingerprint.LiteralValueFingerprint import app.revanced.util.getReference @@ -100,11 +101,9 @@ object MiniplayerPatch : BaseBytecodePatch( // region Enable tablet miniplayer. - MiniplayerOverrideNoContextFingerprint.resolve( - context, - MiniplayerDimensionsCalculatorParentFingerprint.resultOrThrow().classDef - ) - MiniplayerOverrideNoContextFingerprint.resultOrThrow().mutableMethod.apply { + MiniplayerOverrideNoContextFingerprint.alsoResolve( + context, MiniplayerDimensionsCalculatorParentFingerprint + ).mutableMethod.apply { findReturnIndicesReversed().forEach { index -> insertLegacyTabletMiniplayerOverride( index diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt index a34c7e854..bcd3e1821 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/seekbar/SeekbarComponentsPatch.kt @@ -250,11 +250,9 @@ object SeekbarComponentsPatch : BaseBytecodePatch( } } - PlayerButtonsVisibilityFingerprint.resolve( - context, - PlayerButtonsResourcesFingerprint.resultOrThrow().mutableClass - ) - PlayerButtonsVisibilityFingerprint.resultOrThrow().let { + PlayerButtonsVisibilityFingerprint.alsoResolve( + context, PlayerButtonsResourcesFingerprint + ).let { it.mutableMethod.apply { val freeRegister = implementation!!.registerCount - parameters.size - 2 val viewIndex = indexOfFirstInstructionOrThrow(Opcode.INVOKE_INTERFACE) diff --git a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index f53f590af..0f4918862 100644 --- a/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -514,7 +514,7 @@ fun MutableMethod.getWalkerMethod(context: BytecodeContext, offset: Int): Mutabl * https://github.com/BiliRoamingX/BiliRoamingX/blob/ae58109f3acdd53ec2d2b3fb439c2a2ef1886221/patches/src/main/kotlin/app/revanced/patches/bilibili/utils/Extenstions.kt#L151 */ fun MutableMethod.getFiveRegisters(index: Int) = - with (getInstruction(index)) { + with(getInstruction(index)) { arrayOf(registerC, registerD, registerE, registerF, registerG) .take(registerCount).joinToString(",") { "v$it" } } From 2ba1bd5ee917f8145e207b9194daaa8acfaa839c Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:30:56 +0300 Subject: [PATCH 097/103] feat(YouTube Music - Navigation bar components): Do not use hardcoded color, `Enable black navigation bar` setting is turned off --- .../patches/music/utils/settings/SettingsPatch.kt | 15 ++++++++------- .../music/settings/host/values/colors.xml | 4 ++++ 2 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/music/settings/host/values/colors.xml diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt index 1e89c65ff..b4f661425 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/SettingsPatch.kt @@ -65,9 +65,15 @@ object SettingsPatch : BaseResourcePatch( setVersionInfo() /** - * copy strings + * copy arrays, colors and strings */ - context.copyXmlNode("music/settings/host", "values/strings.xml", "resources") + arrayOf( + "arrays.xml", + "colors.xml", + "strings.xml" + ).forEach { xmlFile -> + context.copyXmlNode("music/settings/host", "values/$xmlFile", "resources") + } /** * hide divider @@ -85,11 +91,6 @@ object SettingsPatch : BaseResourcePatch( ) ) - /** - * Copy arrays - */ - contexts.copyXmlNode("music/settings/host", "values/arrays.xml", "resources") - /** * Copy colors */ diff --git a/src/main/resources/music/settings/host/values/colors.xml b/src/main/resources/music/settings/host/values/colors.xml new file mode 100644 index 000000000..19e98c61f --- /dev/null +++ b/src/main/resources/music/settings/host/values/colors.xml @@ -0,0 +1,4 @@ + + + #ff1d1d1d + From 10941604fe812b9fa9c965a183426745ed8519f1 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:33:31 +0300 Subject: [PATCH 098/103] perf(YouTube - GmsCore support): Improve performance by using hashsets --- .../revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt index 314a84598..c3adcd3b2 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt @@ -344,7 +344,7 @@ abstract class BaseGmsCoreSupportPatch( /** * A list of all permissions. */ - val PERMISSIONS = listOf( + val PERMISSIONS = setOf( // C2DM / GCM "com.google.android.c2dm.permission.RECEIVE", "com.google.android.c2dm.permission.SEND", @@ -366,7 +366,7 @@ abstract class BaseGmsCoreSupportPatch( /** * All intent actions. */ - val ACTIONS = listOf( + val ACTIONS = setOf( // location "com.google.android.gms.location.places.ui.PICK_PLACE", "com.google.android.gms.location.places.GeoDataApi", @@ -463,7 +463,7 @@ abstract class BaseGmsCoreSupportPatch( /** * All content provider authorities. */ - val AUTHORITIES = listOf( + val AUTHORITIES = setOf( // gsf "com.google.android.gsf.gservices", "com.google.settings", From b24a63c54d946150db3b8181102034d48ed36187 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:34:11 +0300 Subject: [PATCH 099/103] feat(YouTube & YouTube Music - GmsCore support): Add patch option `Disable GmsService Broker` --- .../patches/shared/gms/BaseGmsCoreSupportPatch.kt | 11 ++++++++--- .../shared/gms/BaseGmsCoreSupportResourcePatch.kt | 13 +++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt index c3adcd3b2..f0cf5fd31 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportPatch.kt @@ -93,6 +93,7 @@ abstract class BaseGmsCoreSupportPatch( var gmsCoreVendor = "app.revanced" var checkGmsCore = true + var disableGmsServiceBroker = false var packageNameYouTube = "com.google.android.youtube" var packageNameYouTubeMusic = "com.google.android.apps.youtube.music" @@ -131,6 +132,7 @@ abstract class BaseGmsCoreSupportPatch( override fun execute(context: BytecodeContext) { gmsCoreVendor = getStringPatchOption("GmsCoreVendorGroupId") checkGmsCore = getBooleanPatchOption("CheckGmsCore") + disableGmsServiceBroker = getBooleanPatchOption("DisableGmsServiceBroker") packageNameYouTube = getStringPatchOption("PackageNameYouTube") packageNameYouTubeMusic = getStringPatchOption("PackageNameYouTubeMusic") @@ -152,12 +154,15 @@ abstract class BaseGmsCoreSupportPatch( } // Return these methods early to prevent the app from crashing. - listOf( + val returnEarly = mutableListOf( CastContextFetchFingerprint, - GmsServiceBrokerFingerprint, GooglePlayUtilityFingerprint, ServiceCheckFingerprint - ).returnEarly() + ) + if (disableGmsServiceBroker) { + returnEarly += GmsServiceBrokerFingerprint + } + returnEarly.returnEarly() transformPrimeMethod() diff --git a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt index 22906d6a3..c6664a49f 100644 --- a/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/gms/BaseGmsCoreSupportResourcePatch.kt @@ -51,6 +51,19 @@ abstract class BaseGmsCoreSupportResourcePatch( """.trimIndentMultiline(), required = true, ) + + private val DisableGmsServiceBroker by booleanPatchOption( + key = "DisableGmsServiceBroker", + default = false, + title = "Disable GmsService Broker", + description = """ + Disabling GmsServiceBroker will somewhat improve crashes caused by unimplemented GmsCore services. + + For YouTube, the 'Spoof streaming data' setting is required. + """.trimIndentMultiline(), + required = true, + ) + internal val PackageNameYouTube = stringPatchOption( key = "PackageNameYouTube", default = DEFAULT_PACKAGE_NAME_YOUTUBE, From 1b8654a9779e0c1029da4b25430d6f0ef946f5e4 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:37:25 +0300 Subject: [PATCH 100/103] fix(YouTube Music - Custom branding icon): Patch fails on certain versions --- .../music/layout/branding/icon/CustomBrandingIconPatch.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt index 7d6bcfa2d..2f065278d 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/branding/icon/CustomBrandingIconPatch.kt @@ -272,6 +272,9 @@ object CustomBrandingIconPatch : BaseResourcePatch( if (!SettingsPatch.upward0723) { return } + if (appIcon == "youtube_music") { + return + } fun getAdaptiveIconResourceFile(tag: String): String { context.xmlEditor["res/mipmap-anydpi/ic_launcher_release.xml"].use { editor -> From 37880edfa8dab10fe849ad7dd5a57363f25ead0b Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 18:06:38 +0300 Subject: [PATCH 101/103] chore(Translation): Update translations --- .../music/settings/host/values/strings.xml | 7 +- .../translations/bg-rBG/missing_strings.xml | 5 + .../music/translations/bg-rBG/strings.xml | 2 +- .../music/translations/bn/missing_strings.xml | 5 + .../music/translations/bn/strings.xml | 2 +- .../translations/cs-rCZ/missing_strings.xml | 5 + .../music/translations/cs-rCZ/strings.xml | 2 +- .../translations/el-rGR/missing_strings.xml | 16 - .../music/translations/el-rGR/strings.xml | 23 +- .../translations/es-rES/missing_strings.xml | 16 - .../music/translations/es-rES/strings.xml | 23 +- .../translations/fr-rFR/missing_strings.xml | 5 + .../music/translations/fr-rFR/strings.xml | 2 +- .../translations/hu-rHU/missing_strings.xml | 5 + .../music/translations/hu-rHU/strings.xml | 2 +- .../translations/id-rID/missing_strings.xml | 5 + .../music/translations/id-rID/strings.xml | 2 +- .../music/translations/in/missing_strings.xml | 5 + .../music/translations/in/strings.xml | 2 +- .../translations/it-rIT/missing_strings.xml | 5 + .../music/translations/it-rIT/strings.xml | 2 +- .../translations/ja-rJP/missing_strings.xml | 5 + .../music/translations/ja-rJP/strings.xml | 2 +- .../translations/ko-rKR/missing_strings.xml | 19 - .../music/translations/ko-rKR/strings.xml | 23 +- .../translations/nl-rNL/missing_strings.xml | 5 + .../music/translations/nl-rNL/strings.xml | 2 +- .../translations/pl-rPL/missing_strings.xml | 3 - .../music/translations/pl-rPL/strings.xml | 20 +- .../translations/pt-rBR/missing_strings.xml | 16 - .../music/translations/pt-rBR/strings.xml | 23 +- .../translations/ro-rRO/missing_strings.xml | 5 + .../music/translations/ro-rRO/strings.xml | 2 +- .../translations/ru-rRU/missing_strings.xml | 5 + .../music/translations/ru-rRU/strings.xml | 2 +- .../translations/tr-rTR/missing_strings.xml | 5 + .../music/translations/tr-rTR/strings.xml | 2 +- .../translations/uk-rUA/missing_strings.xml | 16 - .../music/translations/uk-rUA/strings.xml | 23 +- .../translations/vi-rVN/missing_strings.xml | 16 - .../music/translations/vi-rVN/strings.xml | 27 +- .../translations/zh-rCN/missing_strings.xml | 5 + .../music/translations/zh-rCN/strings.xml | 2 +- .../translations/zh-rTW/missing_strings.xml | 5 + .../music/translations/zh-rTW/strings.xml | 2 +- .../youtube/settings/host/values/strings.xml | 39 +- .../youtube/translations/ar/strings.xml | 45 +- .../translations/bg-rBG/missing_strings.xml | 37 +- .../youtube/translations/bg-rBG/strings.xml | 22 +- .../translations/de-rDE/missing_strings.xml | 31 +- .../youtube/translations/de-rDE/strings.xml | 2 +- .../translations/el-rGR/missing_strings.xml | 28 - .../youtube/translations/el-rGR/strings.xml | 83 ++- .../youtube/translations/es-rES/strings.xml | 271 ++++---- .../youtube/translations/fr-rFR/strings.xml | 57 +- .../translations/hu-rHU/missing_strings.xml | 55 +- .../youtube/translations/hu-rHU/strings.xml | 84 ++- .../translations/it-rIT/missing_strings.xml | 28 - .../youtube/translations/it-rIT/strings.xml | 67 +- .../translations/ja-rJP/missing_strings.xml | 28 - .../youtube/translations/ja-rJP/strings.xml | 76 ++- .../translations/ko-rKR/missing_strings.xml | 7 - .../youtube/translations/ko-rKR/strings.xml | 64 +- .../youtube/translations/pl-rPL/strings.xml | 61 +- .../translations/pt-rBR/missing_strings.xml | 28 - .../youtube/translations/pt-rBR/strings.xml | 69 +- .../translations/ru-rRU/missing_strings.xml | 33 +- .../youtube/translations/ru-rRU/strings.xml | 71 +- .../translations/tr-rTR/missing_strings.xml | 31 +- .../youtube/translations/tr-rTR/strings.xml | 2 +- .../translations/uk-rUA/missing_strings.xml | 6 - .../youtube/translations/uk-rUA/strings.xml | 41 +- .../translations/vi-rVN/missing_strings.xml | 28 - .../youtube/translations/vi-rVN/strings.xml | 627 ++++++++++-------- .../translations/zh-rCN/missing_strings.xml | 61 -- .../youtube/translations/zh-rCN/strings.xml | 148 ++++- .../translations/zh-rTW/missing_strings.xml | 28 - .../youtube/translations/zh-rTW/strings.xml | 79 ++- 78 files changed, 1683 insertions(+), 1030 deletions(-) delete mode 100644 src/main/resources/music/translations/ko-rKR/missing_strings.xml delete mode 100644 src/main/resources/youtube/translations/uk-rUA/missing_strings.xml diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index 0f45dfc8c..963b593e9 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -1,4 +1,4 @@ - + Continue Don\'t show again @@ -303,6 +303,11 @@ Some features may not work properly in the old player layout." Restore old player layout Returns the Library tab to the old style. (Experimental) Restore old style library shelf + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/bg-rBG/missing_strings.xml b/src/main/resources/music/translations/bg-rBG/missing_strings.xml index c6cfd43ca..db42e40fa 100644 --- a/src/main/resources/music/translations/bg-rBG/missing_strings.xml +++ b/src/main/resources/music/translations/bg-rBG/missing_strings.xml @@ -118,6 +118,11 @@ Info: "Returns the player layout to the old style. Some features may not work properly in the old player layout." Restore old player layout + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/bg-rBG/strings.xml b/src/main/resources/music/translations/bg-rBG/strings.xml index e544122a2..41b0fc0a5 100644 --- a/src/main/resources/music/translations/bg-rBG/strings.xml +++ b/src/main/resources/music/translations/bg-rBG/strings.xml @@ -1,4 +1,4 @@ - + Хит-парад Преглед diff --git a/src/main/resources/music/translations/bn/missing_strings.xml b/src/main/resources/music/translations/bn/missing_strings.xml index 41cee5934..bd5f4af77 100644 --- a/src/main/resources/music/translations/bn/missing_strings.xml +++ b/src/main/resources/music/translations/bn/missing_strings.xml @@ -244,6 +244,11 @@ Some features may not work properly in the old player layout." Restore old player layout Returns the Library tab to the old style. (Experimental) Restore old style library shelf + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/bn/strings.xml b/src/main/resources/music/translations/bn/strings.xml index 5a7f67ba4..ec6adbbc9 100644 --- a/src/main/resources/music/translations/bn/strings.xml +++ b/src/main/resources/music/translations/bn/strings.xml @@ -1,4 +1,4 @@ - + ভিন্ন লাইনে ফিল্টারযোগ্য উপাদানের নাম লিখুন। কাস্টম ফিল্টার সম্পাদনা করুন diff --git a/src/main/resources/music/translations/cs-rCZ/missing_strings.xml b/src/main/resources/music/translations/cs-rCZ/missing_strings.xml index af7a9c474..073e422c7 100644 --- a/src/main/resources/music/translations/cs-rCZ/missing_strings.xml +++ b/src/main/resources/music/translations/cs-rCZ/missing_strings.xml @@ -260,6 +260,11 @@ Some features may not work properly in the old player layout." Restore old player layout Returns the Library tab to the old style. (Experimental) Restore old style library shelf + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/cs-rCZ/strings.xml b/src/main/resources/music/translations/cs-rCZ/strings.xml index 5a0c737b3..251e9497c 100644 --- a/src/main/resources/music/translations/cs-rCZ/strings.xml +++ b/src/main/resources/music/translations/cs-rCZ/strings.xml @@ -1,4 +1,4 @@ - + Upravit vlastní filtr Povolit vlastní filtry diff --git a/src/main/resources/music/translations/el-rGR/missing_strings.xml b/src/main/resources/music/translations/el-rGR/missing_strings.xml index 8f08e223b..acebd7abf 100644 --- a/src/main/resources/music/translations/el-rGR/missing_strings.xml +++ b/src/main/resources/music/translations/el-rGR/missing_strings.xml @@ -3,20 +3,4 @@ Don\'t show again Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - Return YouTube Username - Replaces handles with usernames in comments. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Shows the estimated like count of videos. - Show estimated likes - Hidden diff --git a/src/main/resources/music/translations/el-rGR/strings.xml b/src/main/resources/music/translations/el-rGR/strings.xml index b02a85364..6185cda66 100644 --- a/src/main/resources/music/translations/el-rGR/strings.xml +++ b/src/main/resources/music/translations/el-rGR/strings.xml @@ -1,4 +1,4 @@ - + Συνέχεια "Το MicroG GmsCore δεν έχει άδεια να τρέχει στο παρασκήνιο. @@ -257,6 +257,7 @@ Διάφορα Γραμμή πλοήγησης Οθόνη αναπαραγωγής + Return YouTube Username Return YouTube Dislike SponsorBlock Μενού ρυθμίσεων @@ -299,6 +300,23 @@ Οθόνη αναπαραγωγής παλιού στυλ Επιστροφή της ενότητας βιβλιοθήκης στο παλιό στυλ. (Πειραματικό) Ενότητα βιβλιοθήκης παλιού στυλ + \@ψευδώνυμο (Όνομα χρήστη) + Επιλογή της μορφής εμφάνισης ονόματος χρήστη. + Μορφή εμφάνισης + Όνομα χρήστη (@ψευδώνυμο) + Όνομα χρήστη + Εμφάνιση του ονόματος χρήστη αντί για το ψευδώνυμο στα σχόλια. + Επαναφορά ονομάτων χρήστη + "Για να γίνει αντικατάσταση του ψευδωνύμου με όνομα χρήστη, απαιτείται κλειδί προγραμματιστή YouTube Data API v3. + +Η ημερήσια ποσόστωση για τα κλειδιά API στο δωρεάν πακέτο είναι 10,000, και χρησιμοποιείται 1 ποσόστωση για την αντικατάσταση ψευδωνύμου με όνομα χρήστη για 1 σχόλιο. + +Πατήστε για να δείτε πώς να εκδώσετε ένα κλειδί API." + Σχετικά με το κλειδί YouTube Data API + Το κλειδί προγραμματιστή για τη χρήση του YouTube Data API v3. + Κλειδί YouTube Data API + 1. Μεταβείτε στη <a href=%1$s>δημιουργία νέου project</a>.<br>2. Πατήστε το κουμπί <b>CREATE</b>. <br>3. Μεταβείτε στην επιλογή <a href=%2$s>YouTube Data API v3</a>.<br>4. Πατήστε το κουμπί <b>ENABLE</b>.<br>5. Πατήστε το κουμπί <b>CREATE CREDENTIALS</b>.<br>6. Επιλέξτε την επιλογή <b>Public data</b>.<br>7. Πατήστε το κουμπί <b>NEXT</b>.<br>8. Αντιγράψτε το κλειδί API.<br><br>※ Το κλειδί API δεν πρέπει να το μοιράζεστε ποτέ με άλλους, οπότε δεν περιλαμβάνεται κατά την Εισαγωγή / Εξαγωγή ρυθμίσεων. + Έκδοση κλειδιού προγραμματιστή YouTube Data API v3 Σχετικά με Τα δεδομένα Dislike παρέχονται από το Return YouTube Dislike API. Πατήστε για να μάθετε περισσότερα. ReturnYouTubeDislike.com @@ -308,12 +326,15 @@ Εμφάνιση ως ποσοστό Εμφάνιση της ποσότητας των «Δεν μου αρέσει» των βίντεο. Επιστρέψτε το «Δεν μου αρέσει» στο YouTube + Εμφάνιση της εκτιμώμενης ποσότητας των «Μου αρέσει» των βίντεο. + Εμφάνιση εκτιμώμενων likes Δεδομένα dislike μη διαθέσιμα (το όριο API έχει επιτευχθεί). Δεδομένα dislike μη διαθέσιμα (κατάσταση %d). Δεδομένα dislike προσωρινά μη διαθέσιμα (καθυστέρηση API). Δεδομένα dislike μη διαθέσιμα (%s). Να εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike API δεν είναι διαθέσιμο. Μήνυμα αν το API δεν είναι διαθέσιμο + Κρυμμένο Αφαίρεση των παραμέτρων παρακολούθησης από τις διευθύνσεις URL κατά την κοινοποίηση συνδέσμων. Καθαρισμός συνδέσμων κοινοποίησης Σχετικά με diff --git a/src/main/resources/music/translations/es-rES/missing_strings.xml b/src/main/resources/music/translations/es-rES/missing_strings.xml index a17c55562..391f0ac24 100644 --- a/src/main/resources/music/translations/es-rES/missing_strings.xml +++ b/src/main/resources/music/translations/es-rES/missing_strings.xml @@ -5,20 +5,4 @@ Show optimization dialog for GMSCore Fullscreen ads are blocked. (there may be side effects) Fullscreen ads are closed through the Close button. - Return YouTube Username - Replaces handles with usernames in comments. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Shows the estimated like count of videos. - Show estimated likes - Hidden diff --git a/src/main/resources/music/translations/es-rES/strings.xml b/src/main/resources/music/translations/es-rES/strings.xml index 7815588c7..7392ac587 100644 --- a/src/main/resources/music/translations/es-rES/strings.xml +++ b/src/main/resources/music/translations/es-rES/strings.xml @@ -1,4 +1,4 @@ - + Continuar "GmsCore no tiene permiso para ejecutarse en segundo plano. @@ -251,6 +251,7 @@ Esto oculta no solo el menú de ajustes de YT Music, sino también el menú de a Otros Barra de navegación Reproductor + Devolver usuario de YouTube Return YouTube Dislike SponsorBlock Menú de ajustes @@ -293,6 +294,23 @@ Algunas características pueden no funcionar correctamente en la disposición de Activar diseño antiguo del reproductor Devuelve la pestaña Biblioteca al estilo antiguo. (Experimental) Restaurar el estante de la biblioteca de estilo antiguo + \@identificador (Nombre de usuario) + Seleccione el formato para mostrar el nombre de usuario. + Formato de visualización + Nombre de usuario (@identificador) + Nombre de usuario + Reemplaza identificadores con nombres de usuario en los comentarios. + Activa devolver nombre de usuario de YouTube + "Se requiere la clave de desarrollador de la API v3 de datos de YouTube para reemplazar el identificador con el nombre de usuario. + +La cuota diaria para las claves API en el plan gratuito es de 10,000, y se utiliza 1 cuota para reemplazar el identificador con el nombre de usuario en 1 comentario. + +Toca para ver cómo crear una clave de API." + Acerca de la clave API de datos de YouTube + La clave de desarrollador para utilizar la API v3 de datos de YouTube. + Clave API de datos de YouTube + 1. Ve a <a href=%1$s>Crear un nuevo proyecto</a>.<br>2. Pulsa en el botón <b>CREAR</b>.<br>3. 3. Ve a <a href=%2$s>API v3 de datos de YouTube</a>.<br>4. Pulsa en el botón <b>HABILITAR</b>.<br>5. Pulsa en <b>CREAR</b>. Pulsa en el botón <b>CREAR CREDENCIALES</b>.<br>6. Selecciona la opción <b>Datos públicos</b>.<br>7. Pulsa en el botón <b> SIGUIENTE</b>.<br>8. Copia la clave API.<br><br>※ La clave API nunca debe ser compartida con otros, por lo que no se incluye en los ajustes de Importar / Exportar. + Crear clave de desarrollador API v3 de datos de YouTube Acerca de Los datos son proporcionados por la API Return YouTube Dislike. Pulse aquí para obtener más información. ReturnYouTubeDislike.com @@ -302,12 +320,15 @@ Algunas características pueden no funcionar correctamente en la disposición de Porcentaje de No Me Gusta Muestra el número de vídeos que no te gustan. Activar Return YouTube Dislike + Muestra el recuento estimado de \"me gusta\" de los vídeos. + Mostrar \"Me gusta\" estimados Los No Me Gusta no están disponibles (se alcanzó el límite de la API del cliente). Los no me gusta no están disponibles (estado %d). Los no me gusta están temporalmente no disponibles (la API no responde). Los no me gusta no están disponibles (%s). Se muestra el mensaje si la API de ReturnYouTubeDislike no está disponible. Mostrar mensaje si la API no está disponible + Oculto Elimina los parámetros de consulta de seguimiento de las URL al compartir enlaces. Desinfectar enlaces compartidos Acerca de diff --git a/src/main/resources/music/translations/fr-rFR/missing_strings.xml b/src/main/resources/music/translations/fr-rFR/missing_strings.xml index 8f08e223b..b7e1e75f7 100644 --- a/src/main/resources/music/translations/fr-rFR/missing_strings.xml +++ b/src/main/resources/music/translations/fr-rFR/missing_strings.xml @@ -4,6 +4,11 @@ Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore Return YouTube Username + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/fr-rFR/strings.xml b/src/main/resources/music/translations/fr-rFR/strings.xml index ee46f18ea..db9356631 100644 --- a/src/main/resources/music/translations/fr-rFR/strings.xml +++ b/src/main/resources/music/translations/fr-rFR/strings.xml @@ -1,4 +1,4 @@ - + Continuer "GmsCore n'a pas les permissions pour fonctionner en arrière-plan. diff --git a/src/main/resources/music/translations/hu-rHU/missing_strings.xml b/src/main/resources/music/translations/hu-rHU/missing_strings.xml index e108aadb5..2880dda8b 100644 --- a/src/main/resources/music/translations/hu-rHU/missing_strings.xml +++ b/src/main/resources/music/translations/hu-rHU/missing_strings.xml @@ -24,6 +24,11 @@ Show a toast Show a toast when changing the default video quality. Show a toast + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/hu-rHU/strings.xml b/src/main/resources/music/translations/hu-rHU/strings.xml index 56100fa0d..2c5d13d46 100644 --- a/src/main/resources/music/translations/hu-rHU/strings.xml +++ b/src/main/resources/music/translations/hu-rHU/strings.xml @@ -1,4 +1,4 @@ - + Folytatás "A GmsCore-nak nincs engedélye a háttérben történő futtatásra. diff --git a/src/main/resources/music/translations/id-rID/missing_strings.xml b/src/main/resources/music/translations/id-rID/missing_strings.xml index 627696a00..6b0bc8019 100644 --- a/src/main/resources/music/translations/id-rID/missing_strings.xml +++ b/src/main/resources/music/translations/id-rID/missing_strings.xml @@ -22,6 +22,11 @@ Hide Recommendations menu Return YouTube Username Settings menu + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/id-rID/strings.xml b/src/main/resources/music/translations/id-rID/strings.xml index 1a5a6708c..a61be4c8d 100644 --- a/src/main/resources/music/translations/id-rID/strings.xml +++ b/src/main/resources/music/translations/id-rID/strings.xml @@ -1,4 +1,4 @@ - + Continue "GmsCore does not have permission to run in the background. diff --git a/src/main/resources/music/translations/in/missing_strings.xml b/src/main/resources/music/translations/in/missing_strings.xml index 627696a00..6b0bc8019 100644 --- a/src/main/resources/music/translations/in/missing_strings.xml +++ b/src/main/resources/music/translations/in/missing_strings.xml @@ -22,6 +22,11 @@ Hide Recommendations menu Return YouTube Username Settings menu + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/in/strings.xml b/src/main/resources/music/translations/in/strings.xml index 1a5a6708c..a61be4c8d 100644 --- a/src/main/resources/music/translations/in/strings.xml +++ b/src/main/resources/music/translations/in/strings.xml @@ -1,4 +1,4 @@ - + Continue "GmsCore does not have permission to run in the background. diff --git a/src/main/resources/music/translations/it-rIT/missing_strings.xml b/src/main/resources/music/translations/it-rIT/missing_strings.xml index 4f0b2e520..860d4a0dc 100644 --- a/src/main/resources/music/translations/it-rIT/missing_strings.xml +++ b/src/main/resources/music/translations/it-rIT/missing_strings.xml @@ -249,6 +249,11 @@ Some features may not work properly in the old player layout." Restore old player layout Returns the Library tab to the old style. (Experimental) Restore old style library shelf + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/it-rIT/strings.xml b/src/main/resources/music/translations/it-rIT/strings.xml index af5e4e2e4..3a676051e 100644 --- a/src/main/resources/music/translations/it-rIT/strings.xml +++ b/src/main/resources/music/translations/it-rIT/strings.xml @@ -1,4 +1,4 @@ - + Filtra i nomi dei componenti separati da righe. Modifica i filtri personalizzati diff --git a/src/main/resources/music/translations/ja-rJP/missing_strings.xml b/src/main/resources/music/translations/ja-rJP/missing_strings.xml index 2bee832b1..dd6aa3c72 100644 --- a/src/main/resources/music/translations/ja-rJP/missing_strings.xml +++ b/src/main/resources/music/translations/ja-rJP/missing_strings.xml @@ -15,6 +15,11 @@ Hide Recommendations menu Return YouTube Username Settings menu + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/ja-rJP/strings.xml b/src/main/resources/music/translations/ja-rJP/strings.xml index ea5c3af20..c206b2024 100644 --- a/src/main/resources/music/translations/ja-rJP/strings.xml +++ b/src/main/resources/music/translations/ja-rJP/strings.xml @@ -1,4 +1,4 @@ - + 続行 今後表示しない diff --git a/src/main/resources/music/translations/ko-rKR/missing_strings.xml b/src/main/resources/music/translations/ko-rKR/missing_strings.xml deleted file mode 100644 index 7382eecf5..000000000 --- a/src/main/resources/music/translations/ko-rKR/missing_strings.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - Return YouTube Username - Replaces handles with usernames in comments. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Shows the estimated like count of videos. - Show estimated likes - Hidden - diff --git a/src/main/resources/music/translations/ko-rKR/strings.xml b/src/main/resources/music/translations/ko-rKR/strings.xml index 9dd371f2e..deb00f17a 100644 --- a/src/main/resources/music/translations/ko-rKR/strings.xml +++ b/src/main/resources/music/translations/ko-rKR/strings.xml @@ -1,4 +1,4 @@ - + 계속하기 다시 보지 않기 @@ -262,6 +262,7 @@ YT Music 설정 메뉴뿐만 아니라 ReVanced Extended 설정 메뉴도 숨겨 기타 하단바 플레이어 + Return YouTube Username Return YouTube Dislike SponsorBlock 설정 메뉴 @@ -305,6 +306,23 @@ YT Music 설정 메뉴뿐만 아니라 ReVanced Extended 설정 메뉴도 숨겨 이전 플레이어 레이아웃으로 복원 이전 보관함 탭으로 복원합니다. (실험 기능) 이전 보관함 선반으로 복원 + \@핸들 (사용자 이름) + 사용자 이름 표시 형식을 선택하세요. + 표시 형식 + 사용자 이름 (@핸들) + 사용자 이름 + 댓글에서 핸들(@사용자 아이디)이 아닌 사용자 이름을 표시합니다. + Return YouTube Username 활성화 + "핸들을 사용자 이름으로 변경하려면 YouTube Data API v3 Developer Key가 필요합니다. + +무료 요금제에서 API Key의 일일 할당량은 10,000개이며, 1개의 할당량은 댓글 1개에 대해 핸들을 사용자 이름으로 변경하는 데 사용됩니다. + +API Key를 발급받는 방법을 보려면 여기를 누르세요." + YouTube Data API Key에 대한 정보 + YouTube Data API v3를 사용하기 위한 Developer Key입니다. + YouTube Data API Key + 1. <a href=%1$s>새 프로젝트 만들기</a> 로 이동합니다.<br>2. <b>만들기</b> 버튼을 터치합니다.<br>3. <a href=%2$s>YouTube Data API v3</a> 로 이동합니다.<br>4. <b>사용</b> 버튼을 터치합니다.<br>5. <b>사용자 인증 정보 만들기</b> 버튼을 터치합니다.<br>6. <b>공개 데이터</b> 옵션을 선택합니다.<br>7. <b>다음</b> 버튼을 터치합니다.<br>8. API Key를 복사합니다.<br><br>※ API Key는 다른 사람과 공유해서는 안 되므로 가져오기 / 내보내기 설정에 포함되지 않습니다. + YouTube Data API v3 Developer Key 발급 정보 싫어요 수의 데이터는 Return YouTube Dislike API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 누르세요. ReturnYouTubeDislike.com @@ -314,12 +332,15 @@ YT Music 설정 메뉴뿐만 아니라 ReVanced Extended 설정 메뉴도 숨겨 싫어요 수를 퍼센트로 표시 싫어요 수를 표시합니다. Return YouTube Dislike 활성화 + 좋아요 수가 숨겨진 음악(동영상)에서 추정되는 좋아요 수를 표시합니다. + 추정되는 좋아요 수 표시 싫어요 수를 표시할 수 없습니다. (클라이언트 API 제한 도달) 싫어요 수를 표시할 수 없습니다 (상태 코드: %d). 싫어요 수를 일시적으로 표시할 수 없습니다 (응답 시간 초과). 싫어요 수를 표시할 수 없습니다 (%s). ReturnYouTubeDislike를 사용할 수 없을 때, 팝업 메시지를 표시합니다. API를 사용할 수 없을 때 팝업 메시지 표시 + 숨겨짐 링크를 공유할 때, URL에서 추적 쿼리 매개변수를 제거합니다. 추적 쿼리를 제거한 링크 공유 정보 diff --git a/src/main/resources/music/translations/nl-rNL/missing_strings.xml b/src/main/resources/music/translations/nl-rNL/missing_strings.xml index eefb64fc6..dfa811b77 100644 --- a/src/main/resources/music/translations/nl-rNL/missing_strings.xml +++ b/src/main/resources/music/translations/nl-rNL/missing_strings.xml @@ -133,6 +133,11 @@ This hides not only the YT Music settings menu, but also the ReVanced Extended s "Returns the player layout to the old style. Some features may not work properly in the old player layout." Restore old player layout + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/nl-rNL/strings.xml b/src/main/resources/music/translations/nl-rNL/strings.xml index 18df7e9ce..718f5fb21 100644 --- a/src/main/resources/music/translations/nl-rNL/strings.xml +++ b/src/main/resources/music/translations/nl-rNL/strings.xml @@ -1,4 +1,4 @@ - + Componentnamen filteren op lijn spatie Wijzig aangepaste filter diff --git a/src/main/resources/music/translations/pl-rPL/missing_strings.xml b/src/main/resources/music/translations/pl-rPL/missing_strings.xml index 9f457485c..acebd7abf 100644 --- a/src/main/resources/music/translations/pl-rPL/missing_strings.xml +++ b/src/main/resources/music/translations/pl-rPL/missing_strings.xml @@ -3,7 +3,4 @@ Don\'t show again Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - Shows the estimated like count of videos. - Show estimated likes - Hidden diff --git a/src/main/resources/music/translations/pl-rPL/strings.xml b/src/main/resources/music/translations/pl-rPL/strings.xml index 894479443..2b0676ffd 100644 --- a/src/main/resources/music/translations/pl-rPL/strings.xml +++ b/src/main/resources/music/translations/pl-rPL/strings.xml @@ -1,4 +1,4 @@ - + Kontynuuj "GmsCore nie ma uprawnień do działania w tle. @@ -302,7 +302,12 @@ Niektóre ustawienia mogą nie działać poprawnie ze starym układem odtwarzacz Przywróć stary układ odtwarzacza Przywraca zakładkę biblioteki do starego stylu. (Eksperymentalne) Włącz stary styl półek biblioteki - Pokazuje nazwy użytkowników zamiast nicków w komentarzach. + \@nick (Nazwa użytkownika) + Wybierz format wyświetlania nazwy użytkownika. + Format wyświetlania + Nazwa użytkownika (@nick) + Nazwa użytkownika + Zastępuje nicki nazwami użytkowników w komentarzach. Włącz Return YouTube Username "Klucz deweloperski YouTube Data API v3 jest wymagany do zastępowania nicków nazwami użytkownika. @@ -312,7 +317,7 @@ Kliknij, by zobaczyć, jak zgłosić klucz API." O kluczu YouTube Data API Klucz deweloperski używany do korzystania z API YouTube Data V3. Klucz YouTube Data API - 1. Przejdź do <a href=%1$s>Utwórz nowy projekt</a>.<br>2. Kliknij przycisk <b>UTWÓRZ</b><br>3. Przejdź do <a href=%2$s>YouTube Data API v3</a>.<br>4. Kliknij przycisk <b>WŁĄCZ</b><br>5. Kliknij przycisk <b>UTWÓRZ POŚWIADCZENIE</b><br>6. Wybierz opcję <b>Publiczne dane</b><br>7. Kliknij przycisk <b>NASTĘPNE</b><br>8. Skopiuj klucz API<br><br>※ Klucz API nie powinien być współdzielony z innymi, dlatego nie jest zawarty w ustawieniach importu/eksportu + 1. Przejdź do <a href=%1$s>Utwórz nowy projekt</a>.<br>2. Kliknij przycisk <b>UTWÓRZ</b><br>3. Przejdź do <a href=%2$s>YouTube Data API v3</a>.<br>4. Kliknij przycisk <b>WŁĄCZ</b><br>5. Kliknij przycisk <b>UTWÓRZ DANE LOGOWANIA</b><br>6. Wybierz opcję <b>Dane publiczne</b><br>7. Kliknij przycisk <b>DALEJ</b><br>8. Skopiuj klucz API<br><br>※ Klucz API nie powinien być współdzielony z innymi, dlatego nie jest zawarty w ustawieniach importu/eksportu Zgłoś klucz deweloperski YouTube Data API O integracji Dane są dostarczane dzięki API Return YouTube Dislike. Kliknij tutaj, aby dowiedzieć się więcej. @@ -323,12 +328,15 @@ Kliknij, by zobaczyć, jak zgłosić klucz API." Łapki w dół wyświetlane jako procent Pokazuje ilość łapek w dół filmów. Włącz Return YouTube Dislike + Pokazuje szacowaną ilość polubień filmów. + Pokaż szacowaną ilość polubień Łapki w dół nie są dostępne (limit API użytkownika został osiągnięty). Liczba łapek w dół nie jest dostępna (status %d). Łapki w dół są tymczasowo niedostępne (API nie reaguje). Liczba łapek w dół nie jest dostępna (%s). Komunikat wyświetlany w momencie, gdy API ReturnYouTubeDislike jest niedostępne. Pokaż komunikat o niedostępności API + Ukryte Usuwa parametry śledzących zapytań z adresów URL podczas udostępniania linków. Oczyść udostępniane linki O integracji @@ -390,9 +398,9 @@ Kliknij, by zobaczyć, jak zgłosić klucz API." • Zmieni to wygląd aplikacji, lecz mogą pojawić się nieznane efekty uboczne. • Jeśli potem opcja zostanie wyłączona, stary interfejs użytkownika może pozostać do momentu wyczyszczenia danych aplikacji." - 4.27.53 - Wyłącz tryb radia w rejonach kanadyjskich - 6.11.52 - Wyłącz teksty w czasie rzeczywistym - 7.16.53 - Przywróć stary pasek akcji + 4.27.53 - Wyłącza tryb radia w rejonach kanadyjskich + 6.11.52 - Wyłącza teksty w czasie rzeczywistym + 7.16.53 - Przywraca stary pasek akcji Wybierz wersję, którą chcesz oszukiwać. Docelowa wersja aplikacji Oszukaj wersję aplikacji diff --git a/src/main/resources/music/translations/pt-rBR/missing_strings.xml b/src/main/resources/music/translations/pt-rBR/missing_strings.xml index 8f08e223b..acebd7abf 100644 --- a/src/main/resources/music/translations/pt-rBR/missing_strings.xml +++ b/src/main/resources/music/translations/pt-rBR/missing_strings.xml @@ -3,20 +3,4 @@ Don\'t show again Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - Return YouTube Username - Replaces handles with usernames in comments. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Shows the estimated like count of videos. - Show estimated likes - Hidden diff --git a/src/main/resources/music/translations/pt-rBR/strings.xml b/src/main/resources/music/translations/pt-rBR/strings.xml index 6ed048e02..2c58a4357 100644 --- a/src/main/resources/music/translations/pt-rBR/strings.xml +++ b/src/main/resources/music/translations/pt-rBR/strings.xml @@ -1,4 +1,4 @@ - + Continuar "O GmsCore não tem permissão para executar em segundo plano. @@ -259,6 +259,7 @@ Isso oculta não apenas o menu de configurações do YT Music, mas também o men Diversos Barra de Navegação Reprodutor + Return YouTube Username Return YouTube Dislike SponsorBlock Menu de configurações @@ -301,6 +302,23 @@ Alguns recursos podem não funcionar corretamente no layout antigo do reprodutor Restaurar antigo layout do reprodutor Retorna a aba da Biblioteca para o estilo antigo. (Experimental) Restaurar antigo estilo do painel da biblioteca + \@identificador (Nome de usuário) + Selecione o formato de exibição do nome de usuário. + Formato de exibição + Nome de usuário (@identificador) + Nome de usuário + Substitui identificadores por nomes de usuários em comentários. + Ativar Return YouTube Username + "Uma Chave de desenvolvedor da API de Dados do YouTube v3 é necessária para substituir identificadores por nomes de usuários. + +A cota diária para chaves de API no plano gratuito é de 10.000, e 1 cota é usada para substituir um identificador por um nome de usuário para 1 comentário. + +Clique para ver como emitir uma chave de API." + Sobre a chave API de dados do YouTube + A chave de desenvolvedor para usar a API de Dados do YouTube v3. + Chave API dos Dados do YouTube + 1. Vá para <a href=%1$s>Criar um novo projeto</a>.<br>2. Clique no botão <b>CRIAR</b>.<br>3. Vá para <a href=%2$s>API de dados do YouTube v3</a>.<br>4. Clique no botão <b>ATIVAR</b>.<br>5. Clique no botão <b>CRIAR CREDENCIAIS</b>.<br>6. Selecione a opção <b>Dados públicos</b>.<br>7. Clique no botão <b>PRÓXIMO</b>.<br>8. Copie a chave da API.<br><br>※ A chave da API nunca deve ser compartilhada com outras pessoas, portanto, ela não é incluída nas configurações de Importação/Exportação. + Emitir chave de desenvolvedor da API de dados do YouTube v3 Sobre Os dados são fornecidos pela API do Return YouTube Dislike. Toque aqui para saber mais. ReturnYouTubeDislike.com @@ -310,12 +328,15 @@ Alguns recursos podem não funcionar corretamente no layout antigo do reprodutor Dislikes como porcentagem Mostra a contagem de deslike dos vídeos. Ativar Return YouTube Dislike + Mostra a contagem estimada de curtidas dos vídeos. + Exibir curtidas estimadas Dislikes indisponível (limite de API do cliente atingido). Deslikes indisponível (status %d). Dislikes temporariamente indisponível (API expirou). Deslikes indisponível (%s). Notificação flutuante exibida se o Return YouTube Dislike não está disponível. Exibir uma notificação flutuante se a API não estiver disponível + Oculto Remove os parâmetros de consulta de rastreamento das URLs ao compartilhar os links. Limpar links compartilhados Sobre diff --git a/src/main/resources/music/translations/ro-rRO/missing_strings.xml b/src/main/resources/music/translations/ro-rRO/missing_strings.xml index 0479f3c08..9be1519b5 100644 --- a/src/main/resources/music/translations/ro-rRO/missing_strings.xml +++ b/src/main/resources/music/translations/ro-rRO/missing_strings.xml @@ -233,6 +233,11 @@ Some features may not work properly in the old player layout." Restore old player layout Returns the Library tab to the old style. (Experimental) Restore old style library shelf + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/ro-rRO/strings.xml b/src/main/resources/music/translations/ro-rRO/strings.xml index ce6282291..2d2225e76 100644 --- a/src/main/resources/music/translations/ro-rRO/strings.xml +++ b/src/main/resources/music/translations/ro-rRO/strings.xml @@ -1,4 +1,4 @@ - + Filtrează numele componentelor după linie separat. Editați filtrul personalizat diff --git a/src/main/resources/music/translations/ru-rRU/missing_strings.xml b/src/main/resources/music/translations/ru-rRU/missing_strings.xml index 08b28f3f4..96243e8d7 100644 --- a/src/main/resources/music/translations/ru-rRU/missing_strings.xml +++ b/src/main/resources/music/translations/ru-rRU/missing_strings.xml @@ -18,6 +18,11 @@ Hide Recommendations menu Return YouTube Username Settings menu + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/ru-rRU/strings.xml b/src/main/resources/music/translations/ru-rRU/strings.xml index 1c4d31a31..5071616f3 100644 --- a/src/main/resources/music/translations/ru-rRU/strings.xml +++ b/src/main/resources/music/translations/ru-rRU/strings.xml @@ -1,4 +1,4 @@ - + Продолжить "MicroG GmsCore не имеет разрешения на запуск в фоновом режиме. diff --git a/src/main/resources/music/translations/tr-rTR/missing_strings.xml b/src/main/resources/music/translations/tr-rTR/missing_strings.xml index 61b819b7d..2c2593d44 100644 --- a/src/main/resources/music/translations/tr-rTR/missing_strings.xml +++ b/src/main/resources/music/translations/tr-rTR/missing_strings.xml @@ -28,6 +28,11 @@ Show a toast Show a toast when changing the default video quality. Show a toast + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/tr-rTR/strings.xml b/src/main/resources/music/translations/tr-rTR/strings.xml index a4430864b..307acaa79 100644 --- a/src/main/resources/music/translations/tr-rTR/strings.xml +++ b/src/main/resources/music/translations/tr-rTR/strings.xml @@ -1,4 +1,4 @@ - + Devam Et "GmsCore'un arka planda çalışma izni yoktur. diff --git a/src/main/resources/music/translations/uk-rUA/missing_strings.xml b/src/main/resources/music/translations/uk-rUA/missing_strings.xml index 8f08e223b..acebd7abf 100644 --- a/src/main/resources/music/translations/uk-rUA/missing_strings.xml +++ b/src/main/resources/music/translations/uk-rUA/missing_strings.xml @@ -3,20 +3,4 @@ Don\'t show again Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - Return YouTube Username - Replaces handles with usernames in comments. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Shows the estimated like count of videos. - Show estimated likes - Hidden diff --git a/src/main/resources/music/translations/uk-rUA/strings.xml b/src/main/resources/music/translations/uk-rUA/strings.xml index 469413dac..c10af626f 100644 --- a/src/main/resources/music/translations/uk-rUA/strings.xml +++ b/src/main/resources/music/translations/uk-rUA/strings.xml @@ -1,4 +1,4 @@ - + Продовжити "GmsCore не дозволено працювати у фоні. @@ -259,6 +259,7 @@ Різне Панель навігації Плеєр + Повернути ім\'я користувача YouTube Return YouTube Dislike SponsorBlock Меню налаштувань @@ -301,6 +302,23 @@ Відновити старий інтерфейс плеєра Повертає старий стиль вкладки \"Бібліотека\". (Експериментальна опція) Відновити старий стиль вкладки \"Бібліотека\" + \@псевдонім (Ім\'я користувача) + Вибрати формат відображення імені користувача. + Формат відображення + Ім\'я користувача (@псевдонім) + Ім\'я користувача + Замінює псевдоніми на імена користувачів у коментарях. + Увімкнути повернення імені користувача YouTube + "Щоб замінити псевдоніми на імена користувачів, потрібен ключ розробника YouTube Data API v3. + +Щоденна квота для ключів API у безкоштовному тарифі становить 10 000, і 1 квота використовується для заміни псевдоніма на ім’я користувача для 1 коментаря. + +Натисніть, щоб дізнатися, як створити ключ API." + Про ключ YouTube Data API + Ключ розробника для використання API YouTube Data v3. + Ключ YouTube Data API + 1. Перейдіть до <a href=%1$s>Створити New Project</a>.<br>2. Натисніть кнопку <b>CREATE</b>.<br>3. Перейдіть до <a href=%2$s>YouTube Data API v3</a>.<br>4. Натисніть кнопку <b>ENABLE</b>.<br>5. Натисніть кнопку <b>CREATE CREDENTIALS</b>.<br>6. Виберіть <b>Public data</b>.<br>7. Натисніть кнопку <b>NEXT</b>.<br>8. Скопіюйте ключ API.<br><br>※ Ключ API не можна надавати іншим, тому його не включено в Імпорт / Експорт налаштувань. + Створення ключа розробника YouTube Data API v3 Про інтеграцію Дані дизлайків надаються за допомогою Return YouTube Dislike API. Натисніть тут, щоб дізнатися більше. ReturnYouTubeDislike.com @@ -310,12 +328,15 @@ Кількість дизлайків у відсотках Показує кількість дизлайків у треках. Увімкнути Return YouTube Dislike + Показує приблизну кількість лайків відео. + Показати приблизну кількість лайків Дизлайки недоступні (досягнуто ліміт клієнтів сервера API). Дизлайки недоступні (статус %d). Дизлайки тимчасово недоступні (закінчився час API). Дизлайки недоступні (%s). Показує тост, якщо API ReturnYouTubeDislike не доступний. Показувати тост, якщо API не доступний + Приховано Видаляє параметри запиту відстеження з URL-адрес під час обміну посиланнями. Обробляти поширення посилань Про інтеграцію diff --git a/src/main/resources/music/translations/vi-rVN/missing_strings.xml b/src/main/resources/music/translations/vi-rVN/missing_strings.xml index 8f08e223b..acebd7abf 100644 --- a/src/main/resources/music/translations/vi-rVN/missing_strings.xml +++ b/src/main/resources/music/translations/vi-rVN/missing_strings.xml @@ -3,20 +3,4 @@ Don\'t show again Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - Return YouTube Username - Replaces handles with usernames in comments. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Shows the estimated like count of videos. - Show estimated likes - Hidden diff --git a/src/main/resources/music/translations/vi-rVN/strings.xml b/src/main/resources/music/translations/vi-rVN/strings.xml index 67fa174f6..cf7b37e0f 100644 --- a/src/main/resources/music/translations/vi-rVN/strings.xml +++ b/src/main/resources/music/translations/vi-rVN/strings.xml @@ -1,4 +1,4 @@ - + Tiếp tục "GmsCore chưa được cấp quyền để chạy trong nền. @@ -254,12 +254,13 @@ Khi bật không những ẩn mục Cài đặt YT Music, mà còn ẩn mục C Quảng cáo Trình đơn tuỳ chọn Tổng quan - Khác + Cài đặt khác Thanh điều hướng Trình phát + Return YouTube Username Return YouTube Dislike SponsorBlock - Mục Cài đặt + Trình đơn Cài đặt Video Ghi nhớ giá trị tốc độ phát được chọn gần đây nhất. Ghi nhớ thay đổi tốc độ phát @@ -299,6 +300,23 @@ Khi bật không những ẩn mục Cài đặt YT Music, mà còn ẩn mục C Khôi phục bố cục trình phát kiểu cũ Khôi phục lại thẻ Thư viện về kiểu cũ. (Thử nghiệm) Khôi phục thẻ thư viện kiểu cũ + \@handle (Tên người dùng) + Chọn định dạng hiển thị tên người dùng. + Định dạng hiển thị + Tên người dùng (@handle) + Tên người dùng + Hiển thị tên người dùng thay vì tên hiển thị trong phần bình luận. + Kích hoạt Return YouTube Username + "Khoá nhà phát triển YouTube Data API v3 là một mã khoá cho phép các nhà phát triển thao tác lấy dữ liệu từ Youtube, và nó cũng cần thiết để thay thế \"Tên hiển thị\" thành \"Tên người dùng\". + +Giới hạn truy cập hàng ngày cho các khoá API trên gói miễn phí là 10000 lần, với mỗi lượt truy cập chỉ thay thế được 1 bình luận. + +Nhấp vào đây để xem các bước phát hành khóa API." + Giới thiệu về khoá YouTube Data API + Khoá nhà phát triển để sử dụng YouTube Data API v3. + Khoá Youtube Data API + 1. Tạo dự án mới <a href=%1$s>Nhấn vào đây</a>.<br>2. Nhấn vào nút <b>CREATE</b>.<br>3. Đi tới YouTube Data API v3 <a href=%2$s>Nhấn vào đây</a>.<br>4. Nhấn vào nút <b>ENABLE</b>.<br>5. Nhấn vào nút <b>CREATE CREDENTIALS</b>.<br>6. Chọn <b>Public data</b>.<br>7. Nhấn vào nút <b>NEXT</b>.<br>8. Sao chép mã khoá API.<br><br>※ Khoá API không nên được chia sẻ với người khác, vì vậy nó cũng không xuất hiện trong cài đặt Nhập/Xuất. + Phát hành mã khoá Giới thiệu Dữ liệu về số lượt không thích được cung cấp bởi API Return YouTube Dislike. Nhấn vào đây để tìm hiểu thêm. ReturnYouTubeDislike.com @@ -308,12 +326,15 @@ Khi bật không những ẩn mục Cài đặt YT Music, mà còn ẩn mục C Hiện số lượt không thích theo phần trăm Hiển thị số lượt không thích của bài hát và video nhạc. Kích hoạt Hiển thị số lượt không thích + Hiển thị số lượt thích được ước tính của video. + Số lượt thích ước tính Số lượt không thích không khả dụng (đã đạt đến giới hạn API máy khách). Số lượt không thích không khả dụng (trạng thái %d). Số lượt không thích tạm thời không khả dụng (API đã hết thời gian chờ). Số lượt không thích không khả dụng (%s). Hiển thị thông báo ngắn nếu API ReturnYouTubeDislike không khả dụng. Thông báo ngắn nếu API không khả dụng + Ẩn Loại bỏ các tham số truy vấn theo dõi khỏi URL khi chia sẻ liên kết. Liên kết sạch khi chia sẻ Giới thiệu diff --git a/src/main/resources/music/translations/zh-rCN/missing_strings.xml b/src/main/resources/music/translations/zh-rCN/missing_strings.xml index efb894039..f5bbed024 100644 --- a/src/main/resources/music/translations/zh-rCN/missing_strings.xml +++ b/src/main/resources/music/translations/zh-rCN/missing_strings.xml @@ -75,6 +75,11 @@ This hides not only the YT Music settings menu, but also the ReVanced Extended s "Returns the player layout to the old style. Some features may not work properly in the old player layout." Restore old player layout + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/zh-rCN/strings.xml b/src/main/resources/music/translations/zh-rCN/strings.xml index 1ccf15903..6397d8f53 100644 --- a/src/main/resources/music/translations/zh-rCN/strings.xml +++ b/src/main/resources/music/translations/zh-rCN/strings.xml @@ -1,4 +1,4 @@ - + 图表 探索 diff --git a/src/main/resources/music/translations/zh-rTW/missing_strings.xml b/src/main/resources/music/translations/zh-rTW/missing_strings.xml index 7baab5e76..c157a055b 100644 --- a/src/main/resources/music/translations/zh-rTW/missing_strings.xml +++ b/src/main/resources/music/translations/zh-rTW/missing_strings.xml @@ -62,6 +62,11 @@ This hides not only the YT Music settings menu, but also the ReVanced Extended s Show a toast Show a toast when changing the default video quality. Show a toast + @handle (Username) + Select the username display format. + Display format + Username (@handle) + Username Replaces handles with usernames in comments. Enable Return YouTube Username "A YouTube Data API v3 Developer Key is required to replace handles with usernames. diff --git a/src/main/resources/music/translations/zh-rTW/strings.xml b/src/main/resources/music/translations/zh-rTW/strings.xml index 78a9ba431..28e235190 100644 --- a/src/main/resources/music/translations/zh-rTW/strings.xml +++ b/src/main/resources/music/translations/zh-rTW/strings.xml @@ -1,4 +1,4 @@ - + 圖表 探索 diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index d56daef49..b1f68dcf5 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -1,4 +1,4 @@ - + Enable accessibility controls for the video player? Your controls are modified because an accessibility service is on. @@ -322,6 +322,11 @@ The Expand video description option may not work if the entered string does not Do you wish to proceed? Reset to default values. Restart to load the layout normally + "There is a YouTube server-side bug that causes rolling number text such as likes, views, and upload dates to be hidden for some users. + +A temporary workaround for this issue is to spoof the app version to 19.13.37. + +Do you want to spoof the app version before restarting the app?" Refresh and restart Failed to export settings. Settings were successfully exported. @@ -424,6 +429,9 @@ Store" Create a Short button is shown. Create a Short button is hidden. Hide Create a Short button + Highlighted search links are shown. + Highlighted search links are hidden. + Hide highlighted search links Thanks button is shown. Thanks button is hidden. Hide Thanks button @@ -931,6 +939,12 @@ If the layout of the player screen changes due to server-side changes, unintende Share button is shown. Share button is hidden. Hide Share button + Shown in channel. + "Hidden in channel. + +Info: +• Only shelves with the Shorts header on the home tab are hidden." + Hide in channel Shown in watch history. Hidden in watch history. Hide in watch history @@ -1037,10 +1051,6 @@ Settings → Autoplay → Autoplay next video" Transcript section is shown. Transcript section is hidden. Hide Transcript section - "Hide videos with UPCOMING label. - -Note: Enabling this also hides the Notify me button." - Hide UPCOMING video Video ads are shown. Video ads are hidden. Hide video ads @@ -1308,6 +1318,10 @@ Tap and hold to open YouTube settings." Old video quality menu is not shown. Old video quality menu is shown. Restore old video quality menu + @handle (Username) + Display format + Username (@handle) + Username Handle is used. Username is used. Enable Return YouTube Username @@ -1353,6 +1367,9 @@ Limitation: Dislikes may not appear if the user is not logged in or in incognito Hidden Removes tracking query parameters from the URLs when sharing links. Sanitize sharing links + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were shown from the video subtitles." + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were hidden from the video subtitles." + Sanitize video subtitle About sponsor.ajay.app Data is provided by the SponsorBlock API. Tap here to learn more and see downloads for other platforms. @@ -1627,11 +1644,19 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more Streaming data is spoofed. Spoof streaming data Android + Android Creator + Android Embedded Player + Android Testsuite Android TV Android VR iOS + TV HTML5 + Web Default client Turning off this setting may cause video playback issues. + Brightness swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for brightness swiping between 1 and 1000 (%).\nThe shorter the minimum distance, the faster the brightness level changes. + Brightness swipe sensitivity Swipe gestures are disabled in Lock screen mode. Swipe gestures are enabled in Lock screen mode. Swipe gestures in Lock screen mode @@ -1647,6 +1672,9 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more Swipe overlay text size The amount of milliseconds the overlay is visible. Swipe overlay timeout + Volume swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for volume swiping between 1 and 1000 (%).\n\nThe shorter the minimum distance, the faster the volume level changes.\n\nRecommended volume swipe sensitivity is 100% at 15-volume steps and 10% at 150-volume steps. + Volume swipe sensitivity "Swaps the positions of the Create button with the Notifications button by spoofing device information. • The device may need to be rebooted for a change of this setting to take effect. @@ -1664,6 +1692,7 @@ Also, ads will no longer be blocked in Shorts. If this setting do not take effect, try switching to Incognito mode." Stock RVX Music + Warning %s is not installed. Please install it. Package name of installed RVX Music. RVX Music package name diff --git a/src/main/resources/youtube/translations/ar/strings.xml b/src/main/resources/youtube/translations/ar/strings.xml index b8fca78ca..5104b7668 100644 --- a/src/main/resources/youtube/translations/ar/strings.xml +++ b/src/main/resources/youtube/translations/ar/strings.xml @@ -1,4 +1,4 @@ - + تمكين عناصر التحكم في إمكانية الوصول لمشغل الفيديو؟ تم تعديل عناصر التحكم الخاصة بك لأن خدمة إمكانية الوصول قيد التشغيل. @@ -320,6 +320,11 @@ هل ترغب في المتابعة؟ إعادة التعيين إلى القيم الافتراضية. إعادة التشغيل لتحميل التخطيط بشكل طبيعي + "يوجد خطأ في خادم YouTube يتسبب في إخفاء نص الأرقام المتتالية مثل الإعجابات والمشاهدات وتواريخ التحميل لبعض المستخدمين. + +الحل المؤقت لهذه المشكلة هو تزييف إصدار التطبيق إلى 19.13.37. + +هل تريد تزييف إصدار التطبيق قبل إعادة تشغيل التطبيق؟" تحديث وإعادة تشغيل فشل تصدير الإعدادات. تم تصدير الإعدادات بنجاح. @@ -418,6 +423,9 @@ يتم عرض زر إنشاء Short. تم إخفاء زر إنشاء Short. إخفاء زر إنشاء Short + يتم عرض روابط البحث المميزة. + تم إخفاء روابط البحث المميزة. + إخفاء روابط البحث المميزة يتم عرض زر شكرًا. تم إخفاء زر شكرًا. إخفاء زر شكرًا @@ -925,6 +933,12 @@ يتم عرض زر مشاركة. تم إخفاء زر مشاركة. إخفاء زر مشاركة + يُعرض في القناة. + "مخفي في القناة. + +معلومة: +• فقط الأرفف التي تحتوي على عنوان Shorts في علامة تبويب الصفحة الرئيسية تكون مخفية." + إخفاء في القناة يُعرض في سجل المشاهدة. مخفي في سجل المشاهدة. إخفاء في سجل المشاهدة @@ -1031,10 +1045,6 @@ يتم عرض قسم النص. تم إخفاء قسم النص. إخفاء قسم النص - "إخفاء الفيديوهات التي تحمل علامة \"قادم\". - -ملاحظة: يؤدي تمكين هذا أيضًا إلى إخفاء زر \"تنبيهي\"." - إخفاء الفيديو القادم يتم عرض إعلانات الفيديو. تم إخفاء إعلانات الفيديو. إخفاء إعلانات الفيديو @@ -1077,7 +1087,7 @@ إخفاء رسومات YouTube "تظهر رسومات YouTube Doodles لعدة أيام كل عام. -إذا كانت رسومات YouTube Doodles تظهر حاليًا في منطقتك وكان إعداد الإخفاء هذا قيد التشغيل، فسيتم أيضًا إخفاء شريط الفلتر الموجود أسفل شريط البحث." +إذا كانت رسومات YouTube Doodles تظهر حاليًا في منطقتك وكان إعداد الإخفاء هذا قيد التشغيل، فسيتم أيضًا إخفاء فلتر الشريط الموجود أسفل شريط البحث." تم إخفاء تراكب التكبير. يتم عرض تراكب التكبير. إخفاء تراكب التكبير @@ -1292,12 +1302,16 @@ لا يتم عرض قائمة جودة الفيديو القديمة. يتم عرض قائمة جودة الفيديو القديمة. استعادة قائمة جودة الفيديو القديمة + (اسم المستخدم) Handle@ + شكل العرض + اسم المستخدم (Handle@) + اسم المستخدم يتم استخدام الاسم المعرِّف. يتم استخدام اسم المستخدم. تمكين إعادة اسم مستخدم YouTube "مطلوب مفتاح مطور بيانات YouTube API v3 لاستبدال الاسم المعرِّف بـ اسم المستخدم. -الحصة اليومية لمفاتيح API في الخطة المجانية هي 10000، ويتم استخدام حصة واحدة لاستبدال الاسم المعرِّف بـ اسم المستخدم لتعليق واحد. +الحصة اليومية لمفاتيح API في الخطة المجانية هي 10.000، ويتم استخدام حصة واحدة لاستبدال الاسم المعرِّف بـ اسم المستخدم لتعليق واحد. انقر لمعرفة كيفية إصدار مفتاح API." لمحة عن مفتاح YouTube Data API @@ -1337,6 +1351,9 @@ مخفي يزيل معلمات استعلام التتبع من عناوين URL عند مشاركة الروابط. تطهير روابط المشاركة + "يتم عرض عبارات مثل '#'، 'جمع التبرعات'، 'المتجر' و 'المنتجات' من خلال ترجمات الفيديو." + "تم إخفاء عبارات مثل '#'، 'جمع التبرعات'، 'المتجر' و 'المنتجات' من ترجمات الفيديو." + تطهير ترجمة الفيديو لمحة sponsor.ajay.app يتم توفير البيانات بواسطة SponsorBlock API. اضغط هنا لمعرفة المزيد والتنزيل لمنصات أخرى. @@ -1568,7 +1585,7 @@ 18.33.40 - استعادة شريط إجراءات Shorts القديم 18.38.45 - استعادة سلوك جودة الفيديو الافتراضي القديم 18.48.39 - تعطيل تحديث المشاهدات والإعجابات في الوقت الفعلي - 19.13-37 - استعادة حركات عدد المشاهدات والإعجابات القديمة + 19.13-37 - استعادة نمط الرسوم المتحركة القديم للأرقام المتكررة الهدف من خِداع إصدار التطبيق اكتب هدف إصدار التطبيق الوهمي. تعديل إصدار التطبيق الوهمي @@ -1604,11 +1621,19 @@ يتم تزييف بيانات البث. Spoof Streaming Data Android + Android Creator + مشغل Android المضمّن + Android Testsuite Android TV Android VR iOS + TV HTML5 + Web العميل الافتراضي إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو. + يجب أن تكون حساسية تمرير مستوى السطوع بين 1-1000 (%). + تكوين الحد الأدنى للمسافة لتمرير السطوع بين 1 و1000 (%).\nكلما كانت المسافة الدنيا أقصر، كلما تغيرت مستويات السطوع بشكل أسرع. + حساسية تمرير مستوى السطوع تم تعطيل إيماءات التمرير في وضع شاشة القفل. تم تمكين إيماءات التمرير في وضع شاشة القفل. إيماءات التمرير في وضع قفل الشاشة @@ -1632,6 +1657,9 @@ الافتراضي:500 مهلة واجهة إيماءة التمرير + يجب أن تكون حساسية تمرير مستوى الصوت بين 1-1000 (%). + تكوين الحد الأدنى للمسافة لتمرير مستوى الصوت بين 1 و1000 (%).\n\nكلما كانت المسافة الدنيا أقصر، كانت تغييرات مستوى الصوت أسرع.\n\nحساسية التمرير الموصى بها لمستوى الصوت هي 100% عند 15 خطوة لمستوى الصوت و10% عند 150 خطوة لمستوى الصوت. + حساسية تمرير مستوى الصوت "لتبديل مواضع زر الإنشاء و زر الإشعارات عن طريق إيهام معلومات الجهاز. • قد يحتاج الجهاز إلى إعادة التشغيل حتى يسري تغيير هذا الإعداد. @@ -1649,6 +1677,7 @@ إذا لم يتم تفعيل هذا الإعداد، فحاول التبديل إلى وضع التصفح المتخفي." الإفتراضي موسيقى RVX + تحذير %s لم يتم تثبيته. الرجاء تثبيته. اسم الحزمة لموسيقى RVX المثبتة. اسم حزمة موسيقى RVX diff --git a/src/main/resources/youtube/translations/bg-rBG/missing_strings.xml b/src/main/resources/youtube/translations/bg-rBG/missing_strings.xml index b8254a513..ef634199e 100644 --- a/src/main/resources/youtube/translations/bg-rBG/missing_strings.xml +++ b/src/main/resources/youtube/translations/bg-rBG/missing_strings.xml @@ -7,10 +7,18 @@ Chapters are enabled in the seekbar. Chapters are disabled in the seekbar. Disable seekbar chapters + "There is a YouTube server-side bug that causes rolling number text such as likes, views, and upload dates to be hidden for some users. + +A temporary workaround for this issue is to spoof the app version to 19.13.37. + +Do you want to spoof the app version before restarting the app?" Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore + Highlighted search links are shown. + Highlighted search links are hidden. + Hide highlighted search links 1080p Premium menu is shown. 1080p Premium menu is hidden. Hide 1080p Premium menu @@ -40,9 +48,6 @@ Data saving menu is shown. Data saving menu is hidden. Hide Data saving menu - General menu is shown. - General menu is hidden. - Hide General menu Manage all history menu is shown. Manage all history menu is hidden. Hide Manage all history menu @@ -55,12 +60,6 @@ Background menu is shown. Background menu is hidden. Hide Background menu - Watch on TV menu is shown. - Watch on TV menu is hidden. - Hide Watch on TV menu - Family Center menu is shown. - Family Center menu is hidden. - Hide Family Center menu Try experimental new features menu is shown. Try experimental new features menu is hidden. Hide Try experimental new features menu @@ -79,6 +78,12 @@ Disabled comments button or with label \"0\" is shown. Disabled comments button or with label \"0\" is hidden. Hide disabled comments button + Shown in channel. + "Hidden in channel. + +Info: +• Only shelves with the Shorts header on the home tab are hidden." + Hide in channel YouTube Doodles are shown. YouTube Doodles are hidden. Hide YouTube Doodles @@ -96,6 +101,10 @@ If a YouTube Doodle is currently showing in your region and this setting is on, Vanced Light Xisr Yellow Return YouTube Username + @handle (Username) + Display format + Username (@handle) + Username Handle is used. Username is used. Enable Return YouTube Username @@ -113,11 +122,19 @@ Click to see how to issue a API key." Estimated likes are shown. Show estimated likes Hidden + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were shown from the video subtitles." + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were hidden from the video subtitles." + Sanitize video subtitle Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment Forward by Specified Time (Default: 150ms) Publish Created Segment Rewind by Specified Time (Default: 150ms) - 19.13.37 - Restore old style Rolling number animations + Brightness swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for brightness swiping between 1 and 1000 (%).\nThe shorter the minimum distance, the faster the brightness level changes. + Brightness swipe sensitivity + Volume swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for volume swiping between 1 and 1000 (%).\n\nThe shorter the minimum distance, the faster the volume level changes.\n\nRecommended volume swipe sensitivity is 100% at 15-volume steps and 10% at 150-volume steps. + Volume swipe sensitivity diff --git a/src/main/resources/youtube/translations/bg-rBG/strings.xml b/src/main/resources/youtube/translations/bg-rBG/strings.xml index ecf40c9ca..6aa4eea13 100644 --- a/src/main/resources/youtube/translations/bg-rBG/strings.xml +++ b/src/main/resources/youtube/translations/bg-rBG/strings.xml @@ -1,4 +1,4 @@ - + Включване на контролите за достъпност на видеоплеaра? Вашите контроли са променени, защото е активирана услуга за достъпност. @@ -770,6 +770,15 @@ Самоспонсорираните карти са скрити. Скриване на самоспонсорирани карти Скриване на менюто на акаунта + Основни настройки се показват. + Основни настройки са скрити. + Меню \"Основни настройки\" + Менюто за гледане на ТВ се показва. + Менюто за гледане на ТВ е скрито. + Меню за гледане на Телевизор + Меню \"Семеен център\" се показва. + Меню \"Семеен център\" е скрито. + Меню \"Семеен център\" Скриване на елементи в менюто с настройки на YouTube. Филтриране на менюто с настройки на YouTube Бутона за споделяне се показва. @@ -947,10 +956,6 @@ Note: Разделът за транскрипция е показан. Разделът за транскрипция е скрит. Скриване на раздела за транскрипция - "Скриване на видеоклипове с етикет ПРЕДСТОЯЩО. - -Забележка: Активирането на това също ще скрие бутона Уведоми ме." - ПРЕДСТОЯЩО видео Видео рекламите се показват. Видео рекламите са скрити. Скриване на видео рекламите @@ -1454,6 +1459,7 @@ Note: 18.33.40 - Възстановяване на старата лентата с действия за Shorts 18.38.45 - Възстановяване на старото поведение на качеството на видеото по подразбиране 18.48.39 - Деактивира изгледите и харесванията да се актуализират в реално време + 19.13.37 - Стар стил на анимация - въртящи се числа Версия за модификация на приложението Въведете версията на приложението, която да се приложи. Редактирайте версията на приложението, която да бъде приложена @@ -1480,9 +1486,14 @@ AVC (H.264) има максимална разделителна способн Данните за поточно предаване са подправени. Подправяне на поточни данни Андроид + Създател на Android + Вграден Android плейър + Тестов пакет за Android Android TV Android VR iOS + TV HTML5 + Web Клиент по подразбиране Изключването на тази настройка може да причини проблеми с възпроизвеждането на видео. Жестовете за плъзгане са деактивирани в режим „Заключен екран“. @@ -1517,6 +1528,7 @@ AVC (H.264) има максимална разделителна способн Ако деактивирането не влезе в сила, опитайте да превключите към режим „инкогнито“." По подразбиране RVX Music + Внимание %s не е инсталирано. Моля инсталирайте го. Името на пакета с инсталиран RVX Music. Име на пакета RVX Music diff --git a/src/main/resources/youtube/translations/de-rDE/missing_strings.xml b/src/main/resources/youtube/translations/de-rDE/missing_strings.xml index 25e981fbb..de4e6d088 100644 --- a/src/main/resources/youtube/translations/de-rDE/missing_strings.xml +++ b/src/main/resources/youtube/translations/de-rDE/missing_strings.xml @@ -46,6 +46,11 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Save and restore brightness when exiting or entering fullscreen. Enable save and restore brightness Reset to default values. + "There is a YouTube server-side bug that causes rolling number text such as likes, views, and upload dates to be hidden for some users. + +A temporary workaround for this issue is to spoof the app version to 19.13.37. + +Do you want to spoof the app version before restarting the app?" Package name of your installed external downloader app, such as YTDLnis. Playlist downloader package name Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. @@ -54,6 +59,9 @@ Limitation: This setting may not apply to videos that do not include the 'Listen Video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore + Highlighted search links are shown. + Highlighted search links are hidden. + Hide highlighted search links How this content was made section is shown. How this content was made section is hidden. Hide Contents section @@ -170,6 +178,12 @@ If the layout of the player screen changes due to server-side changes, unintende Search suggestions button is shown. Search suggestions button is hidden. Hide search suggestions button + Shown in channel. + "Hidden in channel. + +Info: +• Only shelves with the Shorts header on the home tab are hidden." + Hide in channel Shopping button is shown. Shopping button is hidden. Hide Shopping button @@ -185,10 +199,6 @@ If the layout of the player screen changes due to server-side changes, unintende Use this sound button is shown. Use this sound button is hidden. Hide Use this sound button - "Hide videos with UPCOMING label. - -Note: Enabling this also hides the Notify me button." - Hide UPCOMING video "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: @@ -251,6 +261,10 @@ If a YouTube Doodle is currently showing in your region and this setting is on, A toast will not be shown when changing the default video quality. A toast will be shown when changing the default video quality. Show a toast + @handle (Username) + Display format + Username (@handle) + Username Handle is used. Username is used. Enable Return YouTube Username @@ -268,6 +282,9 @@ Click to see how to issue a API key." Estimated likes are shown. Show estimated likes Hidden + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were shown from the video subtitles." + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were hidden from the video subtitles." + Sanitize video subtitle Invalid time duration. Adjust: Mark Start and End Time for segment Verify the Segment @@ -310,6 +327,12 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more iOS Default client Turning off this setting may cause video playback issues. + Brightness swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for brightness swiping between 1 and 1000 (%).\nThe shorter the minimum distance, the faster the brightness level changes. + Brightness swipe sensitivity + Volume swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for volume swiping between 1 and 1000 (%).\n\nThe shorter the minimum distance, the faster the volume level changes.\n\nRecommended volume swipe sensitivity is 100% at 15-volume steps and 10% at 150-volume steps. + Volume swipe sensitivity Create button is not switched with Notifications button. "Create button is switched with Notifications button. diff --git a/src/main/resources/youtube/translations/de-rDE/strings.xml b/src/main/resources/youtube/translations/de-rDE/strings.xml index 9b9a5cd70..aad7402e5 100644 --- a/src/main/resources/youtube/translations/de-rDE/strings.xml +++ b/src/main/resources/youtube/translations/de-rDE/strings.xml @@ -1,4 +1,4 @@ - + Bedienungshilfen für den Video-Player aktivieren? Ihre Steuerungen wurden angepasst, da ein Barrierefreiheitsdienst aktiviert ist. diff --git a/src/main/resources/youtube/translations/el-rGR/missing_strings.xml b/src/main/resources/youtube/translations/el-rGR/missing_strings.xml index 7235bbe40..a0dadfc3c 100644 --- a/src/main/resources/youtube/translations/el-rGR/missing_strings.xml +++ b/src/main/resources/youtube/translations/el-rGR/missing_strings.xml @@ -2,19 +2,10 @@ Don\'t show again Courses / Learning - Chapters are enabled in the seekbar. - Chapters are disabled in the seekbar. - Disable seekbar chapters Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - 1080p Premium menu is shown. - 1080p Premium menu is hidden. - Hide 1080p Premium menu - Chapter labels next to the timestamp are shown. - Chapter labels next to the timestamp are hidden. - Hide seekbar chapter labels MMT Blue MMT Green MMT Orange @@ -25,29 +16,10 @@ Vanced Black Vanced Light Xisr Yellow - Return YouTube Username - Handle is used. - Username is used. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Estimated likes are hidden. - Estimated likes are shown. - Show estimated likes - Hidden Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment Forward by Specified Time (Default: 150ms) Publish Created Segment Rewind by Specified Time (Default: 150ms) - 19.13.37 - Restore old style Rolling number animations diff --git a/src/main/resources/youtube/translations/el-rGR/strings.xml b/src/main/resources/youtube/translations/el-rGR/strings.xml index a54e6e24d..7548265ce 100644 --- a/src/main/resources/youtube/translations/el-rGR/strings.xml +++ b/src/main/resources/youtube/translations/el-rGR/strings.xml @@ -1,4 +1,4 @@ - + Ενεργοποίηση των στοιχείων ελέγχου προσβασιμότητας για το πρόγραμμα αναπαραγωγής βίντεο; Τα στοιχεία ελέγχου σας τροποποιούνται επειδή είναι ενεργή κάποια υπηρεσία προσβασιμότητας. @@ -198,6 +198,9 @@ Οι αριθμοί κινούνται αυξανόμενοι εκθετικά. Οι αριθμοί δεν κινούνται αυξανόμενοι εκθετικά. Απενεργοποίηση κινήσεων αριθμών + Ο διαχωρισμός της γραμμής προόδου σε κεφάλαια είναι ενεργοποιημένος. + Ο διαχωρισμός της γραμμής προόδου σε κεφάλαια είναι απενεργοποιημένος. + Απενεργοποίηση κεφαλαίων γραμμής προόδου Το εφέ κίνησης πάνω από το κουμπί «Μου αρέσει» είναι ενεργοποιημένο. Το εφέ κίνησης πάνω από το κουμπί «Μου αρέσει» είναι απενεργοποιημένο. Απενεργοποίηση εφέ κουμπιού «Μου αρέσει» @@ -310,15 +313,20 @@ Η ευρεία γραμμή αναζήτησης περιλαμβάνει την επικεφαλίδα του YouTube. Ευρεία γραμμή αναζήτησης με επικεφαλίδα Περιγραφή - "Εισάγετε τον τίτλο του πάνελ περιγραφής βίντεο στη γλώσσα σας. + "Εισάγετε τον τίτλο του πίνακα περιγραφής βίντεο στη γλώσσα σας. Η λειτουργία «Αυτόματο άνοιγμα περιγραφής βίντεο» ενδέχεται να μη λειτουργήσει αν η εισαγόμενη συμβολοσειρά σας δεν ταιριάζει με τον τίτλο." - Τίτλος στον πίνακα περιγραφής βίντεο + Τίτλος του πίνακα περιγραφής βίντεο Η περιγραφή βίντεο ανοίγεται χειροκίνητα. Η περιγραφή βίντεο ανοίγεται αυτόματα. Αυτόματο άνοιγμα περιγραφής βίντεο Θέλετε να συνεχίσετε; Επαναφέρθηκε στην προεπιλεγμένη τιμή. Επανεκκίνηση ώστε να φορτωθεί σωστά η διάταξη + "Υπάρχει ένα σφάλμα από πλευράς διακομιστή του YouTube το οποίο προκαλεί να μην εμφανίζονται κάποιοι αριθμοί όπως τα like, οι προβολές, και οι ημερομηνίες μεταμόρφωσης για κάποιους χρήστες. + +Μια προσωρινή λύση για αυτό το θέμα είναι να γίνει παραποίηση της έκδοσης εφαρμογής σε 19.13.37. + +Θέλετε να γίνει παραποίηση της έκδοσης εφαρμογής πριν γίνει επανεκκίνηση εφαρμογής;" Ανανέωση και επανεκκίνηση Αποτυχία εξαγωγής ρυθμίσεων. Οι ρυθμίσεις εξήχθησαν με επιτυχία. @@ -421,6 +429,9 @@ Playlists Εμφανίζεται. Κρυμμένο. Κουμπί δημιουργίας Shorts + Εμφανίζονται. + Κρυμμένοι. + Επισημασμένοι συνδέσμοι αναζήτησης Εμφανίζεται. Κρυμμένο. Κουμπί «Σας ευχαριστούμε» @@ -650,6 +661,9 @@ Playlists Εμφανίζεται. Κρυμμένο. Μενού «Υπότιτλοι» + Εμφανίζεται. + Κρυμμένο. + Μενού ποιότητας 1080p Premium Εμφανίζεται. Κρυμμένο. Μενού «Βοήθεια & σχόλια» @@ -785,6 +799,9 @@ Playlists Εμφανίζεται. Κρυμμένη. Οδηγία «Αφήστε για ακύρωση» + Εμφανίζονται. + Κρυμμένες. + Τίτλοι κεφαλαίων δίπλα στη χρονοσφραγίδα Εμφανίζεται. Κρυμμένη. Εμφανίζεται. @@ -893,7 +910,7 @@ Playlists Ετικέτα συνδέσμου πλήρους βίντεο Εμφανίζεται. Κρυμμένο. - Κουμπί «Πράσινη οθόνη» + Κουμπί «Green screen» Εμφανίζονται. Κρυμμένα. Πάνελ πληροφοριών @@ -936,6 +953,12 @@ Playlists Εμφανίζεται. Κρυμμένο. Κουμπί «Κοινοποίηση» + Εμφανίζονται. + "Κρυμμένα. + +Πληροφορίες: +• Μόνο οι ενότητες με την επικεφαλίδα Shorts στην καρτέλα «Αρχική» του καναλιού είναι κρυμμένες." + Απόκρυψη στη σελίδα καναλιού Εμφανίζεται. Κρυμμένη. Απόκρυψη στο ιστορικό παρακολούθησης @@ -1041,10 +1064,6 @@ Playlists Εμφανίζεται. Κρυμμένη. Ενότητα απομαγνητοφώνησης - "Απόκρυψη βίντεο με την ετικέτα «ΠΡΟΣΕΧΩΝ». - -Σημείωση: Η ενεργοποίηση αυτής της ρύθμισης θα κρύψει επίσης το κουμπί «Να λαμβάνω ειδοποιήσεις»." - Απόκρυψη προσεχών βίντεο Εμφανίζονται. Κρυμμένες. Διαφημίσεις βίντεο @@ -1087,9 +1106,9 @@ Playlists "Τα YouTube Doodles εμφανίζονται για μερικές μέρες κάθε χρόνο. Αν ένα YouTube Doodle εμφανίζεται αυτή τη στιγμή στην περιοχή σας και αυτή η ρύθμιση απόκρυψης του είναι ενεργοποιημένη, τότε η γραμμή κατηγοριών κάτω από τη γραμμή αναζήτησης θα είναι κρυμμένη επίσης." - Εμφανίζεται. - Κρυμμένη. - Διεπαφή ζουμ + Εμφανίζονται. + Κρυμμένες. + Ειδοποιήσεις αλληλεπιδράσης διεπαφής ζουμ AFN Blue AFN Red Προσαρμοσμένο @@ -1111,7 +1130,7 @@ Playlists Διπλό πάτημα για ενέργεια Η λειτουργία μεταφοράς και απόθεσης της ελαχιστοποιημένης οθόνης είναι απενεργοποιημένη. Η λειτουργία μεταφοράς και απόθεσης της ελαχιστοποιημένης οθόνης είναι ενεργοποιημένη. - Λειτουργία drag and drop + Λειτουργία μεταφοράς και απόθεσης Εμφανίζονται. Κρυμμένα.\n(σύρετε την ελαχιστοποιημένη οθόνη αναπαραγωγής για επέκταση ή κλείσιμο του βίντεο) Κουμπιά επέκτασης και κλεισίματος @@ -1240,6 +1259,7 @@ Playlists Απόκρυψη ή αλλαγή στοιχείων του αναδυόμενου μενού της οθόνης αναπαραγωγής βίντεο. Αναδυόμενο μενού ρυθμίσεων Οθόνη αναπαραγωγής + Return YouTube Username Return YouΤube Dislike SponsorBlock Προσαρμογή των στοιχείων της γραμμής προόδου. @@ -1309,6 +1329,23 @@ Playlists Εμφανίζεται το μενού αλλαγής ποιότητας βίντεο νέου στυλ. Εμφανίζεται το μενού αλλαγής ποιότητας βίντεο παλιού στυλ. Μενού ποιότητας βίντεο παλιού στυλ + \@ψευδώνυμο (Όνομα χρήστη) + Μορφή εμφάνισης + Όνομα χρήστη (@ψευδώνυμο) + Όνομα χρήστη + Εμφανίζεται το ψευδώνυμο. + Εμφανίζεται το όνομα χρήστη. + Επαναφορά ονομάτων χρήστη στα σχόλια + "Για να γίνει αντικατάσταση του ψευδωνύμου με όνομα χρήστη, απαιτείται κλειδί προγραμματιστή YouTube Data API v3. + +Η ημερήσια ποσόστωση για τα κλειδιά API στο δωρεάν πακέτο είναι 10,000, και χρησιμοποιείται 1 ποσόστωση για την αντικατάσταση ψευδωνύμου με όνομα χρήστη για 1 σχόλιο. + +Πατήστε για να δείτε πώς να εκδώσετε ένα κλειδί API." + Σχετικά με το κλειδί YouTube Data API + Το κλειδί προγραμματιστή για τη χρήση του YouTube Data API v3. + Κλειδί YouTube Data API + 1. Μεταβείτε στη <a href=%1$s>δημιουργία νέου project</a>.<br>2. Πατήστε το κουμπί <b>CREATE</b>. <br>3. Μεταβείτε στην επιλογή <a href=%2$s>YouTube Data API v3</a>.<br>4. Πατήστε το κουμπί <b>ENABLE</b>.<br>5. Πατήστε το κουμπί <b>CREATE CREDENTIALS</b>.<br>6. Επιλέξτε την επιλογή <b>Public data</b>.<br>7. Πατήστε το κουμπί <b>NEXT</b>.<br>8. Αντιγράψτε το κλειδί API.<br><br>※ Το κλειδί API δεν πρέπει να το μοιράζεστε ποτέ με άλλους, οπότε δεν περιλαμβάνεται κατά την Εισαγωγή / Εξαγωγή ρυθμίσεων. + Έκδοση κλειδιού προγραμματιστή YouTube Data API v3 Σχετικά με Τα δεδομένα Dislike παρέχονται από το Return YouTube Dislike API. Πατήστε για να μάθετε περισσότερα. ReturnYouTubeDislike.com @@ -1321,6 +1358,9 @@ Playlists Τα «Δεν μου αρέσει» δεν εμφανίζονται. Τα «Δεν μου αρέσει» εμφανίζονται. Επιστροφή του «Δεν μου αρέσει» στο YouTube + Τα εκτιμώμενα like δεν εμφανίζονται. + Τα εκτιμώμενα like εμφανίζονται. + Εμφάνιση εκτιμώμενων likes Δεδομένα dislike μη διαθέσιμα (το όριο API έχει επιτευχθεί). Δεδομένα dislike μη διαθέσιμα (κατάσταση %d). Δεδομένα dislike προσωρινά μή διαθέσιμα (καθυστέρηση API). @@ -1335,8 +1375,12 @@ Playlists Δεν εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike δεν είναι διαθέσιμο. Εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike δεν είναι διαθέσιμο. Μήνυμα αν το API δεν είναι διαθέσιμο + Κρυμμένο Αφαίρεση των παραμέτρων παρακολούθησης από τις διευθύνσεις URL κατά την κοινοποίηση συνδέσμων. Καθαρισμός συνδέσμων κοινοποίησης + "Φράσεις όπως «#», «Έρανος», «Κατάστημα» και «N προϊόντα» εμφανίζονται στους υπότιτλους των βίντεο." + "Φράσεις όπως «#», «Έρανος», «Κατάστημα» και «προϊόντα» είναι κρυμμένες από τους υπότιτλους των βίντεο." + Καθάρισμα υπότιτλων βίντεο Σχετικά με sponsor.ajay.app Τα δεδομένα παρέχονται από το SponsorBlock API. Πατήστε για να μάθετε περισσότερα και να δείτε λήψεις για άλλες πλατφόρμες. @@ -1554,7 +1598,7 @@ Playlists Η προφόρτωση βίντεο παραλείφθηκε. Η ταχύτητα πρέπει να ναι μεταξύ 0-8.0. Τιμή ταχύτητας που εφαρμόζεται κατά το παρατεταμένο πάτημα, μεταξύ 0 και 8.0. - Τιμή διεπαφής ταχύτητας + Αλλαγή τιμής διεπαφής ταχύτητας "Τροποποίηση έκδοσης της εφαρμογής σε παλιότερη έκδοση. Αυτό θα αλλάξει την εμφάνιση της εφαρμογής, αλλά ενδέχεται να προκύψουν άγνωστες παρενέργειες. @@ -1568,6 +1612,7 @@ Playlists 18.33.40 - Επαναφορά γραμμής ενεργειών Shorts στο παλιό στυλ 18.38.45 - Επαναφορά της παλιάς συμπεριφοράς προεπιλεγμένης ποιότητας βίντεο 18.48.39 - Απενεργοποίηση ενημέρωσης των προβολών & αριθμού των «Μου αρέσει» σε πραγματικό χρόνο + 19.13.37 - Επαναφορά των παλιών εφέ κίνησης αριθμών Έκδοση τροποποίησης της εφαρμογής Πληκτρολογήστε την έκδοση εφαρμογής που θα εφαρμοστεί. Επεξεργασία έκδοσης εφαρμογής που θα εφαρμοστεί @@ -1603,11 +1648,19 @@ Playlists Τα δεδομένα ροής παραποιούνται. Παραποίηση δεδομένων ροής Android + Android Creator + Ενσωματωμένος αναπαραγωγέας Android + Android Testsuite Android TV Android VR iOS + TV HTML5 + Ιστός (Web) Προεπιλογή Η απενεργοποίηση αυτής της ρύθμισης ενδέχεται να προκαλέσει προβλήματα αναπαραγωγής βίντεο. + Η ευαισθησία σάρωσης πρέπει να ναι μεταξύ 1-1000 (%). + Ρύθμιση της ευαισθησίας σάρωσης για αλλαγή της φωτεινότητας, μεταξύ 1 και 1000 (%).\nΌσο μικρότερη η ελάχιστη απόσταση, τόσο πιο γρήγορα αλλάζει το επίπεδο φωτεινότητας. + Ευαισθησία σάρωσης φωτεινότητας Οι χειρονομίες σάρωσης είναι απενεργοποιημένες στη λειτουργία «Οθόνη κλειδώματος». Οι χειρονομίες σάρωσης είναι ενεργοποιημένες στη λειτουργία «Οθόνη κλειδώματος». Χρήση στη λειτουργία «Οθόνη κλειδώματος» @@ -1623,6 +1676,9 @@ Playlists Μέγεθος κειμένου φόντου σάρωσης Το χρονικό διάστημα των χιλιοστών του δευτερολέπτου που είναι ορατό το φόντο σάρωσης. Χρονικό όριο φόντου σάρωσης + Η ευαισθησία σάρωσης πρέπει να ναι μεταξύ 1-1000 (%). + Ρύθμιση της ευαισθησίας σάρωσης για αλλαγή της έντασης ήχου, μεταξύ 1 και 1000 (%).\nΌσο μικρότερη η ελάχιστη απόσταση, τόσο πιο γρήγορα αλλάζει το επίπεδο έντασης.\nΗ προτεινόμενη ευαισθησία είναι 100% για 15 βήματα έντασης και 10% για 150 βήματα έντασης. + Ευαισθησία σάρωσης έντασης ήχου "Εναλλαγή θέσεων των κουμπιών «Δημιουργία» και «Ειδοποιήσεις» παραποιώντας τις πληροφορίες συσκευής. • Όταν ενεργοποιηθεί, μπορεί να μη λειτουργήσει μέχρι να γίνει επανεκκίνηση της συσκευής σας. @@ -1639,6 +1695,7 @@ Playlists Αν η απενεργοποίηση δεν τεθεί σε ισχύ, δοκιμάστε να μεταβείτε σε λειτουργία ανώνυμης περιήγησης." Προεπιλογή RVX Music + Προειδοποίηση %s δεν έχει εγκατασταθεί. Παρακαλούμε εγκαταστήστε το. Όνομα πακέτου του εγκατεστημένου RVX Music. Όνομα πακέτου RVX Music diff --git a/src/main/resources/youtube/translations/es-rES/strings.xml b/src/main/resources/youtube/translations/es-rES/strings.xml index 7fabfd787..13365a4ae 100644 --- a/src/main/resources/youtube/translations/es-rES/strings.xml +++ b/src/main/resources/youtube/translations/es-rES/strings.xml @@ -1,4 +1,4 @@ - + ¿Activar controles de accesibilidad para el reproductor de vídeo? Tus controles se modifican porque un servicio de accesibilidad está activado. @@ -321,6 +321,11 @@ Estos caracteres varían dependiendo de tu idioma. ¿Quieres continuar? Restablecer valores predeterminados. Reiniciar para cargar el diseño normalmente + "Existe un error en el servidor de YouTube que hace que el texto de los números rodantes, como los \"Me gusta\", las visualizaciones y las fechas de subida, se oculte para algunos usuarios. + +Una solución temporal para este problema es falsificar la versión de la aplicación a 19.13.37. + +¿Quieres falsificar la versión de la aplicación antes de reiniciarla?" Actualizar y reiniciar Error al exportar los ajustes. Los ajustes se han exportado correctamente. @@ -419,6 +424,9 @@ Tienda" El botón de crear Shorts está visible. El botón de crear Shorts está oculto. Ocultar botón de crear Shorts + Los enlaces de búsqueda destacados están visibles. + Los enlaces de búsqueda destacados están ocultos. + Ocultar enlaces de búsqueda destacados El botón de gracias está visible. El botón de gracias está oculto. Ocultar botón de gracias @@ -631,66 +639,66 @@ Las palabras con letras mayúsculas en el medio deben introducirse con las mayú El botón de contraer está visible. El botón de contraer está oculto. Ocultar botón de contraer - El menú del modo ambiente está visible. - El menú del modo ambiente está oculto. - Ocultar menú del modo ambiente - El menú de pista de audio está visible. - El menú de pista de audio está oculto. - Ocultar menú de pista de audio + El menú \"Modo ambiente\" está visible. + El menú \"Modo ambiente\" está oculto. + Ocultar menú \"Modo ambiente\" + El menú \"Pista de audio\" está visible. + El menú \"Pista de audio\" está oculto. + Ocultar menú \"Pista de audio\" El pie de página del menú de subtítulos está visible. El pie de página del menú de subtítulos está oculto. Ocultar pie de página del menú de subtítulos - El menú de subtítulos está visible. - El menú de subtítulos está oculto. - Ocultar menú de subtítulos - El menú premium 1080p está visible. - El menú premium 1080p está oculto. - Ocultar menú premium 1080p - El menú de ayuda y comentarios está visible. - El menú de ayuda y comentarios está oculto. - Ocultar menú de ayuda y comentarios - El menú de escuchar con YouTube Music está visible. - El menú de escuchar con YouTube Music está oculto. - Ocultar menú de escuchar con YouTube Music - El menú de bloquear pantalla está visible. - El menú de bloquear pantalla está oculto. - Ocultar menú de bloquear pantalla - El menú de reproducción en bucle está visible. - El menú de reproducción en bucle está oculto. - Ocultar menú de reproducción en bucle - El menú de más información está visible. - El menú de más información está oculto. - Ocultar menú de más información - El menú de imagen en imagen está visible. - El menú de imagen en imagen está oculto. - Ocultar menú de imagen en imagen - El menú de velocidad de reproducción está visible. - El menú de velocidad de reproducción está oculto. - Ocultar menú de velocidad de reproducción - El menú de controles premium está visible. - El menú de controles premium está oculto. - Ocultar menú de controles premium + El menú \"Subtítulos\" está visible. + El menú \"Subtítulos\" está oculto. + Ocultar menú \"Subtítulos\" + El menú \"1080p Premium\" está visible. + El menú \"1080p Premium\" está oculto. + Ocultar menú \"1080p Premium\" + El menú \"Ayuda y comentarios\" está visible. + El menú \"Ayuda y comentarios\" está oculto. + Ocultar menú \"Ayuda y comentarios\" + El menú \"Escuchar con YouTube Music\" está visible. + El menú \"Escuchar con YouTube Music\" está oculto. + Ocultar menú \"Escuchar con YouTube Music\" + El menú \"Bloquear pantalla\" está visible. + El menú \"Bloquear pantalla\" está oculto. + Ocultar menú \"Bloquear pantalla\" + El menú \"Reproducción en bucle\" está visible. + El menú \"Reproducción en bucle\" está oculto. + Ocultar menú \"Reproducción en bucle\" + El menú \"Más información\" está visible. + El menú \"Más información\" está oculto. + Ocultar menú \"Más información\" + El menú \"Imagen en imagen\" está visible. + El menú \"Imagen en imagen\" está oculto. + Ocultar menú \"Imagen en imagen\" + El menú \"Velocidad de reproducción\" está visible. + El menú \"Velocidad de reproducción\" está oculto. + Ocultar menú \"Velocidad de reproducción\" + El menú \"Controles premium\" está visible. + El menú \"Controles premium\" está oculto. + Ocultar menú \"Controles premium\" El pie de página del menú de calidad está visible. El pie de página del menú de calidad está oculto. Ocultar pie de página del menú de calidad La cabecera del menú de calidad está visible. La cabecera del menú de calidad está oculta. Ocultar cabecera del menú de calidad - El menú de denunciar está visible. - El menú de denunciar está oculto. - Ocultar menú de denunciar - El menú del temporizador está visible. - El menú del temporizador está oculto. - Ocultar menú de temporizador - El menú de regular volumen está visible. - El menú de regular volumen está oculto. - Ocultar menú de regular volumen - El menú de estadísticas para nerds está visible. - El menú de estadísticas para nerds está oculto. - Ocultar menú de estadísticas para nerds - El menú de ver en realidad virtual está visible. - El menú de ver en realidad virtual está oculto. - Ocultar menú de ver en realidad virtual + El menú \"Denunciar\" está visible. + El menú \"Denunciar\" está oculto. + Ocultar menú \"Denunciar\" + El menú \"Temporizador\" está visible. + El menú \"Temporizador\" está oculto. + Ocultar menú \"Temporizador\" + El menú \"Regular volumen\" está visible. + El menú \"Regular volumen\" está oculto. + Ocultar menú \"Regular volumen\" + El menú \"Estadísticas para nerds\" está visible. + El menú \"Estadísticas para nerds\" está oculto. + Ocultar menú \"Estadísticas para nerds\" + El menú \"Ver en realidad virtual\" está visible. + El menú \"Ver en realidad virtual\" está oculto. + Ocultar menú \"Ver en realidad virtual\" El botón de pantalla completa está visible. El botón de pantalla completa está oculto. Ocultar botón de pantalla completa @@ -790,68 +798,68 @@ Si el diseño de la pantalla del reproductor cambia debido a cambios en el servi Las tarjetas autopatrocinadas están visibles. Las tarjetas autopatrocinadas están ocultas. Ocultar tarjetas autopatrocinadas - El menú de información está visible. - El menú de información está oculto. - Ocultar menú de información - El menú de accesibilidad está visible. - El menú de accesibilidad está oculto. - Ocultar menú de accesibilidad - El menú de cuenta está visible. - El menú de cuenta está oculto. - Ocultar menú de cuenta - El menú de reproducción automática está visible. - El menú de reproducción automática está oculto. - Ocultar menú de reproducción automática - El menú de facturación y pagos está visible. - El menú de facturación y pagos está oculto. - Ocultar menú de facturación y pagos - El menú de subtítulos está visible. - El menú de subtítulos está oculto. - Ocultar menú de subtítulos - El menú de aplicaciones conectadas está visible. - El menú de aplicaciones conectadas está oculto. - Ocultar menú de aplicaciones conectadas - El menú de ahorro de datos está visible. - El menú de ahorro de datos está oculto. - Ocultar menú de ahorro de datos - El menú de general está visible. - El menú de general está oculto. - Ocultar menú de general - El menú de gestionar todo el historial está visible. - El menú de gestionar todo el historial está oculto. - Ocultar menú de gestionar todo el historial - El menú de chat en directo está visible. - El menú de chat en directo está oculto. - Ocultar menú de chat en directo - El menú de notificaciones está visible. - El menú de notificaciones está oculto. - Ocultar menú de notificaciones - El menú de segundo plano está visible. - El menú de segundo plano está oculto. - Ocultar menú de segundo plano - El menú de ver en la televisión está visible. - El menú de ver en la televisión está oculto. - Ocultar menú de ver en la televisión - El menú de centro familiar está visible. - El menú de centro familiar está oculto. - Ocultar menú de centro familiar - El menú de prueba las nuevas funciones experimentales está visible. - El menú de prueba las nuevas funciones experimentales está oculto. - Ocultar menú de prueba las nuevas funciones experimentales - El menú de privacidad está visible. - El menú de privacidad está oculto. - Ocultar menú de privacidad - El menú de compras y suscripciones está visible. - El menú de compras y suscripciones está oculto. - Ocultar menú de compras y suscripciones + El menú \"Información\" está visible. + El menú \"Información\" está oculto. + Ocultar menú \"Información\" + El menú \"Accesibilidad\" está visible. + El menú \"Accesibilidad\" está oculto. + Ocultar menú \"Accesibilidad\" + El menú \"Cuenta\" está visible. + El menú \"Cuenta\" está oculto. + Ocultar menú \"Cuenta\" + El menú \"Reproducción automática\" está visible. + El menú \"Reproducción automática\" está oculto. + Ocultar menú \"Reproducción automática\" + El menú \"Facturación y pagos\" está visible. + El menú \"Facturación y pagos\" está oculto. + Ocultar menú \"Facturación y pagos\" + El menú \"Subtítulos\" está visible. + El menú \"Subtítulos\" está oculto. + Ocultar menú \"Subtítulos\" + El menú \"Aplicaciones conectadas\" está visible. + El menú \"Aplicaciones conectadas\" está oculto. + Ocultar menú \"Aplicaciones conectadas\" + El menú \"Ahorro de datos\" está visible. + El menú \"Ahorro de datos\" está oculto. + Ocultar menú \"Ahorro de datos\" + El menú \"General\" está visible. + El menú \"General\" está oculto. + Ocultar menú \"General\" + El menú \"Gestionar todo el historial\" está visible. + El menú \"Gestionar todo el historial\" está oculto. + Ocultar menú \"Gestionar todo el historial\" + El menú \"Chat en directo\" está visible. + El menú \"Chat en directo\" está oculto. + Ocultar menú \"Chat en directo\" + El menú \"Notificaciones\" está visible. + El menú \"Notificaciones\" está oculto. + Ocultar menú \"Notificaciones\" + El menú \"Segundo plano\" está visible. + El menú \"Segundo plano\" está oculto. + Ocultar menú \"Segundo plano\" + El menú \"Ver en la televisión\" está visible. + El menú \"Ver en la televisión\" está oculto. + Ocultar menú \"Ver en la televisión\" + El menú \"Centro Familiar\" está visible. + El menú \"Centro Familiar\" está oculto. + Ocultar menú \"Centro Familiar\" + El menú \"Prueba las nuevas funciones experimentales\" está visible. + El menú \"Prueba las nuevas funciones experimentales\" está oculto. + Ocultar menú \"Prueba las nuevas funciones experimentales\" + El menú \"Privacidad\" está visible. + El menú \"Privacidad\" está oculto. + Ocultar menú \"Privacidad\" + El menú \"Compras y suscripciones\" está visible. + El menú \"Compras y suscripciones\" está oculto. + Ocultar menú \"Compras y suscripciones\" Ocultar elementos del menú de configuración de YouTube. Ocultar menú de configuración de YouTube - El menú de preferencias de calidad de vídeo está visible. - El menú de preferencias de calidad de vídeo está oculto. - Ocultar menú de preferencias de calidad de vídeo - El menú de tus datos en YouTube está visible. - El menú de tus datos en YouTube está oculto. - Ocultar menú de tus datos en YouTube + El menú \"Preferencias de calidad de vídeo\" está visible. + El menú \"Preferencias de calidad de vídeo\" está oculto. + Ocultar menú \"Preferencias de calidad de vídeo\" + El menú \"Tus datos en YouTube\" está visible. + El menú \"Tus datos en YouTube\" está oculto. + Ocultar menú \"Tus datos en YouTube\" El botón de compartir está visible. El botón de compartir está oculto. Ocultar botón de compartir @@ -921,6 +929,12 @@ Si el diseño de la pantalla del reproductor cambia debido a cambios en el servi El botón de compartir está visible. El botón de compartir está oculto. Ocultar botón de compartir + Visible en el canal. + "Oculto en el canal. + +Información: +• Solo se ocultan las estanterías con la cabecera Shorts en la pestaña de inicio." + Ocultar en canal Visible en el historial de reproducciones. Oculto en el historial de reproducciones. Ocultar en historial de reproducciones @@ -1024,10 +1038,6 @@ La reproducción automática se puede cambiar en la configuración de YouTube: Las secciones de transcripción están visibles. Las secciones de transcripción están ocultas. Ocultar secciones de transcripción - "Oculta vídeos con la etiqueta PRÓXIMAMENTE. - -Nota: Al activar esta opción también se oculta el botón de notificarme." - Ocultar vídeo PRÓXIMO Los anuncios de vídeo están visibles. Los anuncios de vídeo están ocultos. Ocultar anuncios de vídeo @@ -1191,7 +1201,7 @@ Toque y mantenga presionado para abrir el diálogo de configuración de la lista Publicaciones de la comunidad Oculta componentes utilizando filtros personalizados. Filtro personalizado - Ocultar o mostrar el menú desplegable en el feed. + Ocultar o mostrar componentes del menú desplegable en el feed. Menú desplegable Feed Ocultar o cambiar los componentes relacionados con pantalla completa. @@ -1212,7 +1222,7 @@ Toque y mantenga presionado para abrir el diálogo de configuración de la lista Información de parches Ocultar o mostrar botones en vídeos. Botones del reproductor - Ocultar o cambiar el menú desplegable del reproductor de vídeo. + Ocultar o cambiar componentes del menú desplegable en el reproductor de vídeo. Menú desplegable Reproductor Devolver usuario de YouTube @@ -1285,6 +1295,10 @@ Mantén pulsado para abrir la configuración de YouTube." El antiguo menú de calidad de vídeo está oculto. El antiguo menú de calidad de vídeo está visible. Restaurar antiguo menú de calidad de vídeo + \@identificador (Nombre de usuario) + Formato de visualización + Nombre de usuario (@identificador) + Nombre de usuario Se utiliza el identificador. Se utiliza el nombre de usuario. Activar devolver usuario de YouTube @@ -1331,6 +1345,9 @@ Limitación: es posible que los no me gusta no aparezcan en modo incógnito."Oculto Elimina los parámetros de consulta de seguimiento de las URL al compartir enlaces. Desinfectar enlaces compartidos + "Frases como \"#\", \"Tienda\" y \"N productos\" se muestran en los subtítulos de vídeo." + "Frases como \"#\", \"Tienda\" y \"N productos\" se ocultan en los subtítulos de vídeo." + Desinfectar subtítulos de vídeo Información sponsor.ajay.app Los datos son proporcionados por la API de SponsorBlock. Pulsa aquí para aprender más y ver las descargas para otras plataformas. @@ -1580,8 +1597,10 @@ Si se desactiva más tarde, se recomienda borrar los datos de la aplicación par "Activar esto podría mejorar la duración de la batería y solucionar el problema de reproducción entrecortada. AVC (H.264) tiene una resolución máxima de 1080p, y la reproducción de vídeo utilizará más datos de Internet que VP9 o AV1." - "• Falta el menú de la pista de audio." - "• Falta el menú de la pista de audio." + "• Falta el menú \"Pista de audio\". +• \"Regular volumen\" no está disponible." + "• Falta el menú \"Pista de audio\". +• \"Regular volumen\" no está disponible." "• Las películas o vídeos de pago no pueden reproducirse." Efectos secundarios de falsificación • El vídeo no puede reproducirse. @@ -1592,11 +1611,19 @@ AVC (H.264) tiene una resolución máxima de 1080p, y la reproducción de vídeo Los datos de transmisión están falsificados. Falsificar datos de transmisión Android + Creador de Android + Reproductor integrado de Android + Android Testsuite Android TV Android VR iOS + TV HTML5 + Web Cliente predeterminado Desactivar este ajuste puede causar problemas de reproducción de vídeo. + La sensibilidad de deslizamiento del brillo debe estar entre 1-1000 (%). + Configura la distancia mínima para el deslizamiento de brillo entre 1 y 1000 (%).\nCuanto menor sea la distancia mínima, más rápido cambiará el nivel de brillo. + Sensibilidad de deslizamiento del brillo Los gestos deslizantes están desactivados en el modo \"Bloquear pantalla\". Los gestos deslizantes están activados en el modo \"Bloquear pantalla\". Gestos deslizantes en modo \"Bloquear pantalla\" @@ -1612,6 +1639,9 @@ AVC (H.264) tiene una resolución máxima de 1080p, y la reproducción de vídeo Tamaño del texto de superposición de deslizamiento La cantidad de milisegundos que la superposición es visible. Tiempo de espera de superposición de deslizamiento + La sensibilidad de deslizamiento del volumen debe estar entre 1-1000 (%). + Configura la distancia mínima para el deslizamiento del volumen entre 1 y 1000 (%).\n\nCuanto menor sea la distancia mínima, más rápido cambiará el nivel de brillo.\n\nSe recomienda una sensibilidad de deslizamiento del volumen del 100% en pasos de 15 niveles de volumen y del 10% en pasos de 150 niveles de volumen. + Sensibilidad de deslizamiento de volumen "Cambia las posiciones del botón de crear y del botón de notificaciones falsificando la información del dispositivo. • Aunque cambies este ajuste, es posible que no surta efecto hasta que reinicies el dispositivo. @@ -1629,6 +1659,7 @@ Además, los anuncios ya no se bloquearán en Shorts. Si este ajuste no surte efecto, prueba a cambiar al modo incógnito." Predeterminado RVX Music + Advertencia %s no está instalado. Por favor, instálalo. Nombre del paquete de RVX Music instalado. Nombre del paquete de RVX Music diff --git a/src/main/resources/youtube/translations/fr-rFR/strings.xml b/src/main/resources/youtube/translations/fr-rFR/strings.xml index f636acb6e..55fd8e2d0 100644 --- a/src/main/resources/youtube/translations/fr-rFR/strings.xml +++ b/src/main/resources/youtube/translations/fr-rFR/strings.xml @@ -1,4 +1,4 @@ - + Activer les contrôles d\'accessibilité pour le lecteur vidéo ? Vos contrôles sont modifiés car un service d\'accessibilité est activé. @@ -197,7 +197,7 @@ Limitation : Ce paramètre peut ne pas s'appliquer aux vidéos qui n'incluent pa Désac. \"Reprendre la lecture\" sur les Shorts Animation en temps réel des nombres est activé. Animation en temps réel des nombres est désactivé. - Animation en temps réel des nombres + Désactiver l\'animation en temps réel des nombres Les chapitres sont activés sur la barre de progression. Les chapitres sont désactivés sur la barre de progression. Désac. chapitres sur la barre de progression @@ -320,6 +320,11 @@ L'option \"Ouvrir la description automatiquement\" risque de ne pas fonctionner Voulez-vous continuer ? Réinitialiser les valeurs par défaut. Redémarrer pour charger l\'interface correctement + "Il existe un bug côté serveur de YouTube qui empêche l'animation en temps réel des nombres, tels que les mentions \"J'aime\", les vues et les dates de mise en ligne pour certains utilisateurs. + +Un moyen de contourner temporairement ce problème est de falsifier la version de l'application en version 19.13.37. + +Voulez-vous falsifier la version de l'application et redémarrer ?" Appliquer et redémarrer ? Échec de l\'exportation des paramètres. Les paramètres ont été exportés avec succès. @@ -418,6 +423,9 @@ Boutique" Le bouton \"Créer un Short\" est affiché. Le bouton \"Créer un Short\" est masqué. Masquer le bouton \"Créer un Short\" + Les liens de recherche en surbrillance sont affichés. + Les liens de recherche en surbrillance sont masqués. + Marquer les liens de recherche en surbrillance Le bouton \"Merci\" est affiché. Le bouton \"Merci\" est masqué. Masquer le bouton \"Merci\" @@ -922,6 +930,12 @@ Si la mise en page de l'écran du lecteur change en raison de modifications côt Le bouton \"Partager\" est affiché. Le bouton \"Partager\" est masqué. Masquer le bouton \"Partager\" + Affiché sur les chaînes. + "Masqué sur les chaînes. + +Information : +• Seules les étagères dont l'en-tête est Shorts dans l'onglet d'accueil sont masquées." + Masquer sur les chaînes Affiché dans \"Historique\". Masqué dans \"Historique\". Masquer dans \"Historique\" @@ -1025,10 +1039,6 @@ La lecture automatique peut être modifiée dans les paramètres de YouTube : La section \"Transcription\" est affiché. La section \"Transcription\" est masqué. Masquer la section \"Transcription\" - "Masque les vidéos avec l'étiquette 'À SUIVRE'. - -Remarque : Activer ceci masque également le bouton \"M'avertir\"." - Masquer les vidéos À SUIVRE Les publicités vidéos sont affichées. Les publicités vidéos sont masquées. Masquer les publicités vidéo @@ -1070,7 +1080,7 @@ Limitations : Masquer les Doodles YouTube "Les Doodles YouTube apparaissent quelques jours par an. -Si un Doodle YouTube est actuellement diffusé dans votre région et que le paramètre pour le masquer est activé, la barre de filtre située à côté de la barre de recherche sera également masquée." +Si un Doodle YouTube est actuellement diffusé dans votre région et que le paramètre est activé, les filtres situés à côté de la barre de recherche sera également masquée." Le voile du zoom est affiché. Le voile du zoom est masqué. Masquer le voile du zoom @@ -1286,19 +1296,23 @@ Appuyez longuement pour ouvrir les paramètres YouTube." Masque la nouvelle interface de qualité vidéo. Affiche l\'ancienne interface de qualité vidéo. Restaur. ancien. interface de qualité vidéo + \@identifiant (Nom d\'utilisateur) + Format d\'affichage + Nom d\'utilisateur (@identifiant) + Nom d\'utilisateur L\'identifiant est utilisé. Nom d\'utilisateur utilisé. Activer Return YouTube Username - "La clé de développeur pour l'API des données YouTube v3 est nécessaire pour remplacer L'identifiant par les Noms d'utilisateur. + "La clé YouTube Data API v3 est nécessaire pour remplacer les identifiants par des noms d'utilisateurs. -Le quota journalier pour les clés API sur le plan gratuit est de 10 000, et 1 quota est utilisé pour remplacer l'identifiant par les Noms d'utilisateur pour 1 commentaire. +Le quota journalier pour les clés API sur le plan gratuit est de 10 000, et 1 quota est utilisé pour remplacer l'identifiant par un noms d'utilisateur pour 1 commentaire. -Cliquez pour afficher comment obtenir une clé API." - À propos de la clé API de données YouTube +Cliquez pour découvrir comment créer une clé API." + À propos de la clé YouTube Data API La clé de développeur pour utiliser l\'API des données YouTube v3. Clé API des données YouTube - 1. Allez sur <a href=%1$s>Créer un nouveau projet</a>.<br>2. Cliquez sur <b> le bouton</b> Créer.<br>3. Allez sur <a href=%2$s>YouTube Data API v3</a>.<br>4. Cliquez sur <b>le bouton</b> ACTIVER.<br>5. Cliquez sur <b>le bouton</b> CRÉER DES DONNÉES.<br>6. Sélectionnez <b>l\'option</b> Données Publiques.<br>7. Cliquez sur <b>le bouton</b> SUIVANT.<br>8. copier la Clé API.<br><br>※ La clé API ne doit jamais être partagé avec personne d\'autre, par conséquent, il n\'est pas inclus dans les paramètres Importer / Exporter. - Obtenir la clé API des données de développeur v3 + 1. Allez sur <a href=%1$s>Nouveau projet</a>.<br>2. Cliquez sur <b> le bouton</b> Créer.<br>3. Allez sur <a href=%2$s>YouTube Data API v3</a>.<br>4. Cliquez sur <b>le bouton</b> ACTIVER.<br>5. Cliquez sur <b>le bouton</b> CRÉER DES IDENTIFIANTS.<br>6. Sélectionnez <b>l\'option</b> Données Publiques.<br>7. Cliquez sur <b>le bouton</b> SUIVANT.<br>8. copier la Clé API.<br><br>※ La clé API ne doit jamais être partagé avec personne d\'autre, par conséquent, il n\'est pas inclus dans les paramètres Importer / Exporter. + Obtenir une clé développeur pour YouTube Data API v3 À propos Les données des \"Je n\'aime pas\" sont fournies par l\'API de Return YouTube Dislike. Appuyez ici pour en savoir plus. ReturnYouTubeDislike.com @@ -1331,6 +1345,9 @@ Limitation : les \"Je n'aime pas\" ne seront pas affichées si vous n'êtes pas Masqué Supprime les paramètres de suivi (tracking) des URL lors du partage de liens. Nettoyer les liens partagés + "Les phrases telles que '#', 'Financement' 'Magasin' et 'produits' seront affichés sur les sous-titres vidéos." + "Les phrases telles que '#', 'Financement' 'Magasin' et 'produits' seront masqués sur les sous-titres vidéos." + Nettoyer les sous-titres vidéo À propos sponsor.ajay.app Les données sont fournies par l\'API SponsorBlock. Cliquez ici pour en savoir plus et voir les téléchargements pour d\'autres plateformes. @@ -1563,7 +1580,7 @@ Si elle est désactivée ultérieurement, l'ancienne interface utilisateur peut 18.33.40 - Restaure l\'ancienne barre d\'action Shorts 18.38.45 - Restaure l\'ancien menu de qualité vidéo 18.48.39 - Désactive les \"vues\" et \"j\'aime\" en temps réel - 19.13.37 - Restaure l\'animation en temps réel des nombres + 19.13.37 - Restaure l\'ancienne animation en temps réel des nombres Choisir la version à falsifier Saisissez la version de l\'application à falsifier. Saisir la version à falsifier @@ -1599,11 +1616,19 @@ AVC (H.264) a une résolution maximale de 1080p, et la lecture vidéo utilisera Les données de lecture en direct sont falsifiées. Falsifier les données de lecture en direct Android + Android Creator + Lecteur intégré Android + Android Testsuite Android TV Android VR iOS + TV HTML5 + Web Client par défaut Désactiver ce paramètre peut entraîner des problèmes de lecture vidéo. + La sensibilité des gestes de luminosité doit être comprise entre 1-1000 (%). + Configurez la sensibilité minimale des gestes de luminosité entre 1 et 1000 (%).\nPlus la sensibilité minimale est courte, plus le niveau de luminosité change rapidement. + Sensibilité des gestes de luminosité Les contrôles par gestes sont désactivés en mode \"Écran verrouillé\". Les contrôles par gestes sont activés en mode \"Écran verrouillé\". Gestes en mode \"Écran verrouillé\" @@ -1619,6 +1644,9 @@ AVC (H.264) a une résolution maximale de 1080p, et la lecture vidéo utilisera Taille du texte superposé La durée en millisecondes pendant laquelle la superposition est visible. Durée du voile lors des gestes + La sensibilité des gestes de volume doit être comprise entre 1-1000 (%). + Configurer la sensibilité minimale des gestes de volume entre 1 et 1000 (%).\n\nPlus la sensibilité minimale est courte, plus le niveau du volume change rapidement.\n\nLa sensibilité recommandée des gestes de volume est de 100 % par paliers de 15 volumes et de 10 % par paliers de 150 volumes. + Sensibilité des gestes de volume "Échange la position des boutons \"Créer\" et \"Notifications\" en falsifiant les informations de l'appareil. • L'appareil peut nécessiter un redémarrage pour que ce paramètre prenne effet. @@ -1636,6 +1664,7 @@ Note : Activer ceci masquera également les publicités vidéos." Si ce paramètre ne fait pas effet, essayer de passer en mode Incognito." Officiel RVX Music + Attention %s n\'est pas installé. Veuillez l’installer. Nom du paquet de RVX Music installé. Nom du paquet de RVX Music diff --git a/src/main/resources/youtube/translations/hu-rHU/missing_strings.xml b/src/main/resources/youtube/translations/hu-rHU/missing_strings.xml index 7235bbe40..0b95d81d8 100644 --- a/src/main/resources/youtube/translations/hu-rHU/missing_strings.xml +++ b/src/main/resources/youtube/translations/hu-rHU/missing_strings.xml @@ -2,19 +2,24 @@ Don\'t show again Courses / Learning - Chapters are enabled in the seekbar. - Chapters are disabled in the seekbar. - Disable seekbar chapters + "There is a YouTube server-side bug that causes rolling number text such as likes, views, and upload dates to be hidden for some users. + +A temporary workaround for this issue is to spoof the app version to 19.13.37. + +Do you want to spoof the app version before restarting the app?" Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - 1080p Premium menu is shown. - 1080p Premium menu is hidden. - Hide 1080p Premium menu - Chapter labels next to the timestamp are shown. - Chapter labels next to the timestamp are hidden. - Hide seekbar chapter labels + Highlighted search links are shown. + Highlighted search links are hidden. + Hide highlighted search links + Shown in channel. + "Hidden in channel. + +Info: +• Only shelves with the Shorts header on the home tab are hidden." + Hide in channel MMT Blue MMT Green MMT Orange @@ -25,29 +30,23 @@ Vanced Black Vanced Light Xisr Yellow - Return YouTube Username - Handle is used. - Username is used. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Estimated likes are hidden. - Estimated likes are shown. - Show estimated likes - Hidden + @handle (Username) + Display format + Username (@handle) + Username + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were shown from the video subtitles." + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were hidden from the video subtitles." + Sanitize video subtitle Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment Forward by Specified Time (Default: 150ms) Publish Created Segment Rewind by Specified Time (Default: 150ms) - 19.13.37 - Restore old style Rolling number animations + Brightness swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for brightness swiping between 1 and 1000 (%).\nThe shorter the minimum distance, the faster the brightness level changes. + Brightness swipe sensitivity + Volume swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for volume swiping between 1 and 1000 (%).\n\nThe shorter the minimum distance, the faster the volume level changes.\n\nRecommended volume swipe sensitivity is 100% at 15-volume steps and 10% at 150-volume steps. + Volume swipe sensitivity diff --git a/src/main/resources/youtube/translations/hu-rHU/strings.xml b/src/main/resources/youtube/translations/hu-rHU/strings.xml index 38464d7ff..4b80291e0 100644 --- a/src/main/resources/youtube/translations/hu-rHU/strings.xml +++ b/src/main/resources/youtube/translations/hu-rHU/strings.xml @@ -1,4 +1,4 @@ - + Engedélyezi a videolejátszó akadálymentesítési vezérlőit? Az eszközök azért módosulnak, mert egy akadálymentesítési szolgáltatás be van kapcsolva. @@ -192,6 +192,9 @@ Korlátozás: Előfordulhat, hogy ez a beállítás nem vonatkozik azokra a vide A gördülő számok animálva vannak A gördülő számok nem animáltak Gördülőszám-animációk letiltása + A keresősáv fejezetei engedélyezettek. + A keresősáv fejezetei le vannak tiltva. + Keresősáv fejezeteinek letiltása A szökőkút animáció engedélyezve van a Like gombon. A szökőkút animáció le van tiltva a Like gombon. Like gomb animáció elrejtése @@ -238,7 +241,7 @@ Mellékhatás: a Cairo stílus az értesítési pontokra is alkalmazódik."Hibakeresési naplózás engedélyezése Az alapértelmezett lejátszási sebesség nem vonatkozik a Shortokra. Az alapértelmezett lejátszási sebesség vonatkozik a Shortokra. - A Shortok alapértelmezett lejátszási sebességének engedélyezése + Shortok alapértelmezett lejátszási sebességének engedélyezése A külső böngésző le van tiltva. A külső böngésző engedélyezve van. Külső böngésző engedélyezése @@ -260,9 +263,11 @@ Mellékhatás: a Cairo stílus az értesítési pontokra is alkalmazódik."A keresősávon történő érintés engedélyezve van. Érintés engedélyezése a kereső sávon Fejezetek letiltva. - "Fejezetek engedélyezve + "Az időbélyeg engedélyezve van. -Ismert hiba: Mivel ez a funkció a Google fejlesztési szakaszában van, előfordulhat, hogy az elrendezés hibás lesz." +Korlátozások: +• Ez a beállítás nem csak az időbélyegeket engedélyezi, hanem lehetővé teszi a felhasználók számára a felhasználói felület elrejtését is a lejátszó hátterére kattintva. +• Mivel ez a funkció a Google fejlesztési szakaszában van, előfordulhat, hogy az elrendezés hibás." Fejezetek engedélyezése A csúsztatásos fényerő vezérlés le van tiltva. A csúsztatásos fényerő vezérlés engedélyezve van. @@ -384,7 +389,7 @@ Előfordulhat, hogy egyes komponensek nincsenek elrejtve." A csatorna profil tetején lévő linkek láthatóak. A csatorna profil tetején lévő linkek el vannak rejtve. Csatorna profil tetején lévő linkek elrejtése - "Rövid + "Shortok Lejátszási listák Áruház" Szűrendő csatornafül neveinek listája, új sorral elválasztva. @@ -630,6 +635,9 @@ Korlátozások: A feliratok menü megjelenik. A feliratok menü el van rejtve. Feliratok menü elrejtése + A 1080p Premium menü látható. + A 1080p Premium menü el van rejtve. + 1080p Premium menü elrejtése A segítség és visszajelzés menü megjelenik. A segítség és visszajelzés menü el van rejtve. Segítség és visszajelzés menü elrejtése @@ -761,6 +769,9 @@ Ha a lejátszó képernyőjének elrendezése a szerveroldali változtatások mi A keresés visszavonása üzenet látható. A keresés visszavonása üzenet el van rejtve. Keresés visszavonása üzenetet elrejtése + Az időbélyeg melletti fejezetcímkék láthatóak. + Az időbélyeg melletti fejezetcímkék el vannak rejtve. + Keresősáv fejezetcímkéinek elrejtése A videólejátszó folyamatsávja megjelenik A videólejátszó folyamatsávja el van rejtve A minilejátszó folyamatsávja megjelenik @@ -844,8 +855,8 @@ Ha a lejátszó képernyőjének elrendezése a szerveroldali változtatások mi A csatornasáv látható. A csatornasáv el van rejtve. Csatornasáv elrejtése - A megjegyzések gomb megjelenik - A megjegyzések gomb el van rejtve + A megjegyzések gomb látható. + A megjegyzések gomb el van rejtve. Megjegyzések gomb elrejtése A letiltott megjegyzések gomb vagy \'null\' címkével látható. A letiltott megjegyzések gomb vagy \'null\' címkével el van rejtve. @@ -877,8 +888,8 @@ Ha a lejátszó képernyőjének elrendezése a szerveroldali változtatások mi A hely gomb látható. A hely gomb el van rejtve. Hely gomb elrejtése - A navigációs sáv megjelenik - A navigációs sáv el van rejtve + A navigációs sáv látható. + A navigációs sáv el van rejtve. Navigációs sáv elrejtése A fizetett promóciós címke látható. A fizetett promóciós címke el van rejtve. @@ -892,8 +903,8 @@ Ha a lejátszó képernyőjének elrendezése a szerveroldali változtatások mi A gomb háttere látható. A gomb háttere elrejtve. Lejátszás & Szünet gomb hátterének elrejtése - A remix gomb megjelenik - A remix gomb el van rejtve + A remix gomb látható. + A remix gomb el van rejtve. Remix gomb elrejtése A zene mentés gomb látható. A zene mentés gomb el van rejtve. @@ -901,8 +912,8 @@ Ha a lejátszó képernyőjének elrendezése a szerveroldali változtatások mi A keresési javaslatok gomb látható. A keresési javaslatok gomb el van rejtve. Keresési javaslatok gomb elrejtése - A megosztás gomb látható - A megosztás gomb el van rejtve + A megosztás gomb látható. + A megosztás gomb el van rejtve. Megosztás gomb elrejtése Megjelenítve a nézési előzmények között. Elrejtve a nézési előzmények között. @@ -926,8 +937,8 @@ Mellékhatás: A hivatalos fejlécek a keresési eredményekben el lesznek rejtv A vásárlás gomb látható. A vásárlás gomb el van rejtve Vásárlás gomb elrejtése - A hang gomb megjelenik - A hang gomb el van rejtve + A hang gomb látható. + A hang gomb el van rejtve. Hang gomb elrejtése A metaadat címke látható. A metaadat címke el van rejtve. @@ -1010,10 +1021,6 @@ Beállítások → Automatikus lejátszás → Következő videó automatikus le Az átirat rész megjelenik Az átirat rész el van rejtve Átirat rész elrejtése - "Videók elrejtése KÖZELGŐ címkével. - -Megjegyzés: Ha ezt engedélyezi, akkor az Értesíts gomb is el lesz rejtve." - KÖZELGŐ videó elrejtése A videó hirdetések láthatók A videó hirdetések el vannak rejtve Videó hirdetések elrejtése @@ -1199,6 +1206,7 @@ Tartsa nyomva a sebesség alaphelyzetbe állításához." A videólejátszóban található kinyíló menü elemeinek elrejtése vagy módosítása. Felugró menü Lejátszó + YouTube-felhasználónév visszaadása Visszatérés a YouTube Dislike-ba Szponzor Blokk Szabja meg a keresősáv komponenseit. @@ -1268,6 +1276,19 @@ Ide hosszan nyomva tartva megnyílik a YouTube beállítások." A régi videóminőség menü nem jelenik meg A régi videóminőség menü jelenik meg Régi videóminőség menü visszaállítása + A kezelő van használatban. + A felhasználónév van használatban. + A YouTube-felhasználónév visszaadás engedélyezése + "A YouTube Data API v3 fejlesztői kulcsa szükséges ahhoz, hogy a Kezelő-t Felhasználónév-re cseréljék. + +Az API-kulcsok napi kvótája az ingyenes csomagban 10 000, és 1 kvótával cseréli le a Kezelő-t a Felhasználónévre 1 megjegyzés esetén. + +Kattintson az API-kulcs kiadás folyamatának megtekintéséhez." + A YouTube Data API-kulcsról + A fejlesztői kulcs a YouTube Data API v3 használatához. + YouTube adat API kulcs + 1. Nyissa meg a(z) <a href=%1$s>Új projekt létrehozását</a>.<br>2. Kattintson a <b>LÉTREHOZÁS</b> gomb.<br>3. Lépj a <a href=%2$s>YouTube Data API v3</a> oldalára.<br>4. Kattintson az <b>Engedélyezés</b> gombra.<br>5. Kattintson a <b>HITELESÍTÉSI ADATOK LÉTREHOZÁSA</b> gombra.<br>6. Válassza ki a <b>Nyilvános adatok</b> lehetőség.<br>7. Kattintson a <b>KÖVETKEZŐ</b> gombra.<br>8. Másolja ki az API-kulcsot.<br><br>※ Az API-kulcsot soha ne ossza meg másokkal, így az nem szerepel az importálási/exportálási beállításokban. + YouTube Data API v3 fejlesztői kulcs kiadás Rólunk Az adatokat a Return YouTube Dislike API biztosítja. További információért koppintson ide ReturnYouTubeDislike.com @@ -1280,18 +1301,24 @@ Ide hosszan nyomva tartva megnyílik a YouTube beállítások." A nem tetszések nem jelennek meg A nem tetszések megjelennek Return YouTube Dislike + A becsült kedvelések el vannak rejtve. + A becsült kedvelések láthatóak. + Becsült kedvelések megjelenítése A nem tetszik funkció nem elérhető A nem tetszik funkció nem elérhető (állapot: %d) A nem tetszik funkció átmenetileg nem elérhető A nem tetszik funkció nem elérhető (%s) Töltse újra a videót a Return YouTube Dislike-hoz A nem tetszések el vannak rejtve a Shorts videóknál - A nem tetszések megjelennek a Shorts videóknál - "A nem tetszések megjelennek a Shorts videóknál\n\nKorlátozás: A nem tetszések lehet nem jelennek meg inkognitó módban" - A nem tetszések megjelenítése a Shorts videóknál + A Shorts videók nem tetszései láthatóak. + "A Shorts videók nem tetszései láthatóak. + +Korlátozás: A nem tetszések lehet nem jelennek meg kijelentkezett felhasználóval vagy inkognitó módban." + Shorts videók nem tetszéseiek megjelenítése Nem jelenik meg üzenet, ha a Return YouTube Dislike nem elérhető Üzenet megjelenítése, ha a Return YouTube Dislike nem elérhető Üzenet megjelenítése, ha az API nem elérhető + Rejtett Linkek megosztásakor eltávolítja a nyomkövetés lekérdezési paramétereket az URL-ekből. Megosztási linkek tisztítása Rólunk @@ -1329,7 +1356,7 @@ Ide hosszan nyomva tartva megnyílik a YouTube beállítások." Az a cím, amelyet a SponsorBlock a szervere eléréséhez használ Minimális szegmens időtartam Érvénytelen időtartam. - A beállított értéknél (másodpercben) rövidebb szakaszokat nem hagyja ki vagy nem jeleníti meg + A beállított értéknél (másodpercben) rövidebb szakaszokat nem hagyja ki vagy jeleníti meg. Átugrásszámláló bekapcsolása A kihagyások számának követése nem engedélyezett Értesíti a SponsorBlock ranglistáját, hogy mennyi időt takarított meg. Minden egyes szakasz kihagyásakor üzenetet küld a ranglistának @@ -1373,7 +1400,7 @@ Ide hosszan nyomva tartva megnyílik a YouTube beállítások." Kiemelt A videónak azon része, amit a legtöbben keresnek Interakció emlékeztető (Feliratkozás) - Egy rövid emlékeztető arról, hogy like-oljunk, iratkozzunk fel, vagy kövessük a tartalom közben. Ha hosszabb szakasz, vagy egy adott témáról van, inkább az önpromóció alá tartozik + Egy rövid emlékeztető arról, hogy like-oljunk, iratkozzunk fel, vagy kövessük őket a tartalom közben. Ha ez hosszabb vagy egy adott témáról szól, inkább az önpromóció alá tartozik. Megszakítás/Intro animáció Egy részlet tartalom nélkül. Lehet szünet, álló képkocka, vagy ismétlődő animáció. Nem használandó információt tartalmazó átmeneteknél Zene: zenementes rész @@ -1484,7 +1511,7 @@ Ide hosszan nyomva tartva megnyílik a YouTube beállítások." Szív (színárnyalatos) Rejtett Dupla koppintás animáció - A Meta panel alsó margójának 0-64 között kell lennie. Alapértelmezett értékekre visszaállítása. + A Meta panel alsó margójának 0-64 között kell lennie. Állítsd be a keresősáv és a meta panel közötti távolságot 0-64 között. Meta panel alsó margó A magasság százalékának 0-100 (%) között kell lennie. @@ -1526,6 +1553,7 @@ Info: 18.33.40 - Régi Shorts művelet sáv visszaállítása 18.38.45 - Visszaállítja a régi alapértelmezett videó minőség viselkedést 18.48.39 - Letiltja a \'Megtekintések\' és a \'Kedvelések\' valós idejű frissítését + 19.13.37 - Visszaállítja a régi stílusú gördülő szám animációkat Hamis alkalmazásverzió Írja be a hamis alkalmazásverziót. Hamisított alkalmazásverzió célja @@ -1554,9 +1582,14 @@ Ha kikapcsolja, akkor ajánlott törölni az app adatait, hogy elkerülje a UI h Az adatfolyam hamisított. Adatfolyam meghamisítása Android + Android Creator + Android beágyazott lejátszó + Android tesztcsomag Android TV Android VR iOS + TV HTML5 + Web Alapértelmezett kliens A beállítás kikapcsolása videólejátszási problémákat okozhat. A csúsztatási mozdulatok le vannak tiltva a \'Képernyő lezárása\' módban. @@ -1590,6 +1623,7 @@ Tovább, a reklámok nem lesznek tiltva a Shortokban. Ha ez a beállítás nem működik, váltson inkognító módra." Készlet RVX Music + Figyelmeztetés %s nincs telepítve. Kérlek telepítsd. A telepített RVX Music csomag neve. RVX Music csomag név diff --git a/src/main/resources/youtube/translations/it-rIT/missing_strings.xml b/src/main/resources/youtube/translations/it-rIT/missing_strings.xml index 137a64738..e61c58590 100644 --- a/src/main/resources/youtube/translations/it-rIT/missing_strings.xml +++ b/src/main/resources/youtube/translations/it-rIT/missing_strings.xml @@ -1,36 +1,8 @@ - Chapters are enabled in the seekbar. - Chapters are disabled in the seekbar. - Disable seekbar chapters Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name - 1080p Premium menu is shown. - 1080p Premium menu is hidden. - Hide 1080p Premium menu - Chapter labels next to the timestamp are shown. - Chapter labels next to the timestamp are hidden. - Hide seekbar chapter labels MMT Orange MMT Pink MMT Turquoise - Return YouTube Username - Handle is used. - Username is used. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Estimated likes are hidden. - Estimated likes are shown. - Show estimated likes - Hidden - 19.13.37 - Restore old style Rolling number animations diff --git a/src/main/resources/youtube/translations/it-rIT/strings.xml b/src/main/resources/youtube/translations/it-rIT/strings.xml index 8c52a6b8f..153af3bde 100644 --- a/src/main/resources/youtube/translations/it-rIT/strings.xml +++ b/src/main/resources/youtube/translations/it-rIT/strings.xml @@ -1,4 +1,4 @@ - + Vuoi attivare i controlli di accessibilità del riproduttore? I tuoi controlli sono diversi poiché un servizio di accessibilità è attivato. @@ -204,6 +204,9 @@ Limitazione: Questa impostazione potrebbe non applicarsi ai video che non includ Le animazioni degli aggiornamenti in tempo reale dei contatori sono attivate Le animazioni degli aggiornamenti in tempo reale dei contatori sono disattivate Disattiva le animazioni degli aggiornamenti in tempo reale dei contatori + I capitoli sono abilitati nella barra di avanzamento. + I capitoli sono disabilitati nella barra di avanzamento. + Disabilita i capitoli della barra di avanzamento L\'animazione della fontana è abilitata sopra il pulsante mi piace. L\'animazione della fontana è disabilitata sopra il pulsante mi piace. Disabilita animazione pulsante Mi piace @@ -321,6 +324,11 @@ Scheda Tu → Visualizza canale → Menu → Impostazioni" Desideri procedere? Ripristina ai valori predefiniti. Riavvia per caricare l\'interfaccia normalmente + "C'è un bug sul lato server di YouTube che fa sì che il testo del numero rotante come mi piace, le viste e le date di caricamento siano nascosti per alcuni utenti. + +Una soluzione temporanea per questo problema è quello di camuffare la versione app a 19.13.37. + +Vuoi camuffare la versione dell'app prima di riavviare l'app?" Aggiorna e riavvia Impossibile esportare le impostazioni Impostazioni esportate con successo @@ -420,6 +428,9 @@ Negozio" Il pulsante Crea shorts è visibile. Il pulsante Crea Shorts è nascosto. Nascondi il pulsante Crea Short + I collegamenti di ricerca evidenziati sono mostrati. + I collegamenti di ricerca evidenziati sono nascosti. + Nascondi collegamenti di ricerca evidenziati Il pulsante Grazie è visibile. Il pulsante Grazie è nascosto. Nascondi il pulsante Grazie @@ -644,6 +655,9 @@ Parole con lettere maiuscole all'interno devono essere inserite con il maiuscolo Il menu Sottotitoli è visibile. Il menu Sottotitoli è nascosto. Nascondi il menu Sottotitoli + Il menu Premium 1080p è mostrato. + Il menu Premium 1080p è nascosto. + Nascondi il menu Premium 1080p Il menu Guida & feedback è visibile. Il menu Guida & feedback è nascosto. Nascondi menu Guida & feedback @@ -775,6 +789,9 @@ Se il layout della schermata del player cambia a causa di modifiche lato server, Il messaggio di annullamento è visibile Il messaggio di annullamento è nascosto Nascondi il messaggio di annullamento + Le etichette del capitolo accanto al timestamp sono nascoste. + Le etichette del capitolo accanto al timestamp sono nascoste. + Nascondi le etichette dei capitoli della barra di avanzamento La barra di avanzamento è visibile La barra di avanzamento è nascosta La barra di avanzamento nel thumbnail dei video è visibile @@ -918,6 +935,12 @@ Se il layout della schermata del player cambia a causa di modifiche lato server, Il pulsante condividi è mostrato. Il pulsante Condividi è nascosto. Nascondi il pulsante Condividi + Mostrato nel canale. + "Nascosto nel canale. + +Informazione: +• Solo gli scaffali con l'intestazione Shorts nella scheda home sono nascosti." + Nascondi nel canale Mostrato nella cronologia delle visualizzazioni. Nascosto nella cronologia delle visualizzazioni. Nascondi nella cronologia delle visualizzazioni @@ -1022,10 +1045,6 @@ Impostazioni → Riproduzione automatica → Riproduzione automatica del video s La sezione Trascrizione è visibile La sezione Trascrizione è nascosta Nascondi la sezione Trascrizione - "Nascondi i video con l'etichetta PROSSIMAMENTE. - -Nota: Abilitare questo nasconde anche il pulsante Notificami." - Nascondi i video PROSSIMAMENTE Gli annunci video sono visibili. Gli annunci video sono nascosti. Nascondi gli annunci video @@ -1223,6 +1242,7 @@ Tocca e tieni premuto per aprire la finestra delle impostazioni della whitelist. Nascondi o cambia i componenti del menu a comparsa nel riproduttore video. Menu a comparsa Riproduttore + Return YouTube Username Return YouTube Dislike SponsorBlock Personalizza i componenti della barra di avanzamento. @@ -1292,6 +1312,23 @@ Tocca e tieni premuto per aprire le impostazioni di YouTube." Il vecchio menu di qualità video non è mostrato. Vecchio menu di qualità video è mostrato. Ripristina il vecchio menu di qualità video + \@maniglia (Nome utente) + Formato di visualizzazione + Nome utente (@maniglia) + Nome utente + La maniglia è usata. + Il Nome utente è usato. + Attiva Return YouTube Username + "La chiave sviluppatore YouTube API v3 è necessaria per sostituire la Maniglia con il Nome utente. + +La quota giornaliera per le chiavi API sul piano gratuito è di 10.000, e 1 quota è utilizzata per sostituire la Maniglia con il Nome utente per 1 commento. + +Clicca per vedere come emettere una chiave API." + Informazioni sulla chiave API dati di YouTube + La chiave sviluppatore per l\'utilizzo dell\'API dati di YouTube v3. + Chiave API dati di YouTube + 1. Vai su <a href=%1$s>Crea un nuovo progetto</a>.<br>. Clicca il pulsante <b>CREA</b>.<br>3. Vai su <a href=%2$s>dati YouTube API v3</a>.<br>4. Fare clic sul pulsante <b>ABILITA</b>.<br>5. Fare clic sul pulsante <b>CREA CREDENZIALI</b>.<br>6. Selezionare l\'opzione <b>Dati pubblici</b>.<br>7. Fare clic sul pulsante <b>PROSSIMO</b><br>8. Copia la chiave API.<br><br>※ La chiave API non dovrebbe mai essere condivisa con gli altri, quindi non è inclusa nelle impostazioni di Importazione / Esportazione. + Inserimento chiave dati sviluppatore API di YouTube v3 Informazioni I dati relativi ai Non Mi Piace sono forniti dall\'API di Return YouTube Dislike. Tocca qui per saperne di più ReturnYouTubeDislike.com @@ -1304,6 +1341,9 @@ Tocca e tieni premuto per aprire le impostazioni di YouTube." I Non Mi Piace sono nascosti I Non Mi Piace sono visibili Attiva Return YouTube Dislike + I Mi piace stimati sono nascosti. + I Mi piace stimati sono mostrati. + Mostra i Mi piace stimati Non Mi Piace non disponibili (è stato raggiunto il limite del client API) Non Mi Piace non disponibili (stato: %d) Non Mi Piace temporaneamente non disponibili (API scaduto) @@ -1318,8 +1358,12 @@ Limitazione: Non mi piace possono non apparire se l'utente non è registrato o i Notifica toast nascosta se l\'API di ReturnYouTubeDislike non è disponibile Notifica toast visibile se l\'API di ReturnYouTubeDislike non è disponibile Mostra una notifica toast se l\'API non è disponibile + Nascosto Rimuove i parametri della query di tracciamento dagli URL durante la condivisione dei link Sanitizza i link di condivisione + "Frasi come '#', 'Raccolta fondi', 'Negozio' e 'Prodotti' sono state mostrate nei sottotitoli video." + "Frasi come '#', 'Raccolta fondi', 'Negozio' e 'Prodotti' sono state nascoste nei sottotitoli video." + Sanitizza sottotitoli video Informazioni sponsor.ajay.app I dati sono forniti dall\'API di SponsorBlock. Tocca qui per saperne di più e vedere i download per altre piattaforme. @@ -1559,6 +1603,7 @@ Note: 18.33.40 - Ripristina la vecchia barra d\'azione degli Shorts 18.38.45 - Ripristina il comportamento della vecchia qualità video predefinita 18.48.39 - Disabilita l\'aggiornamento in tempo reale di visualizzazioni e dei Mi piace + 19.13.37 - Ripristina le vecchie animazioni dei numeri in rotazione La versione dell\'app da simulare Digita la versione dell\'app da simulare Modifica la versione da camuffare dell\'app @@ -1588,11 +1633,19 @@ AVC (H. 264) ha una risoluzione massima di 1080p e la riproduzione video utilizz I dati in streaming sono camuffati. Camuffa data streaming Android + Creatore Android + Riproduttore Incorporato Android + Suite di test Android Android TV Android VR iOS + TV HTML5 + Web Client predefinito Disattivare questa impostazione potrebbe causare problemi di riproduzione video. + La sensibilità dello scorrimento della luminosità deve essere compresa tra 1 e 1000 (%). + Configura la distanza minima per scorrere la luminosità tra 1 e 1000 (%).\nPiù breve è la distanza minima, più velocemente cambia il livello di luminosità. + Sensibilità dello scorrimento luminosità I gesti di trascinamento in modalità Blocca Schermo sono disattivati I gesti di trascinamento in modalità Blocca Schermo sono attivati Attiva i gesti di trascinamento in modalità Blocca Schermo @@ -1608,6 +1661,9 @@ AVC (H. 264) ha una risoluzione massima di 1080p e la riproduzione video utilizz La dimensione del testo del trascinamento La visibilità in millisecondi della sovrapposizione La durata della sovrapposizione del trascinamento + La sensibilità dello scorrimento del volume deve essere compresa tra 1-1000 (%). + Configurare la distanza minima per scorrere il volume tra 1 e 1000 (%).\n\nPiù breve è la distanza minima, più il livello del volume cambia.\n\nLa sensibilità consigliata dello scorrimento del volume è 100% a livelli di 15 e 10% a livelli di 150 volumi. + Sensibilità scorrimento del volume "Scambia le posizioni del pulsante Crea con il pulsante notifiche camuffando informazioni del dispositivo. • Potrebbe essere necessario riavviare il dispositivo per rendere effettiva la modifica di questa impostazione. @@ -1625,6 +1681,7 @@ Inoltre, gli annunci non saranno più bloccati negli Shorts. Se questa impostazione non ha effetto, prova a passare alla modalità Incognito." Inventario RVX Music + Attenzione %s Non è installato. Per favore installalo. Nome del pacchetto di RVX Music installato. Nome pacchetto RVX Music diff --git a/src/main/resources/youtube/translations/ja-rJP/missing_strings.xml b/src/main/resources/youtube/translations/ja-rJP/missing_strings.xml index c031ad1f7..f82015e55 100644 --- a/src/main/resources/youtube/translations/ja-rJP/missing_strings.xml +++ b/src/main/resources/youtube/translations/ja-rJP/missing_strings.xml @@ -1,34 +1,6 @@ - Chapters are enabled in the seekbar. - Chapters are disabled in the seekbar. - Disable seekbar chapters - 1080p Premium menu is shown. - 1080p Premium menu is hidden. - Hide 1080p Premium menu - Chapter labels next to the timestamp are shown. - Chapter labels next to the timestamp are hidden. - Hide seekbar chapter labels MMT Orange MMT Pink MMT Turquoise - Return YouTube Username - Handle is used. - Username is used. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Estimated likes are hidden. - Estimated likes are shown. - Show estimated likes - Hidden - 19.13.37 - Restore old style Rolling number animations diff --git a/src/main/resources/youtube/translations/ja-rJP/strings.xml b/src/main/resources/youtube/translations/ja-rJP/strings.xml index 56740b439..5705b78fb 100644 --- a/src/main/resources/youtube/translations/ja-rJP/strings.xml +++ b/src/main/resources/youtube/translations/ja-rJP/strings.xml @@ -1,4 +1,4 @@ - + 動画プレーヤーのアクセシビリティコントロールをオンにしますか? ユーザー補助サービスがオンになっているため、操作方法が変わります。 @@ -199,6 +199,9 @@ DeArrow の詳細については、ここをタップしてください。"高評価数と視聴回数の回転アニメーションを無効にします。 高評価数と視聴回数の回転アニメーションを無効にします。 数字の回転アニメーションを無効化 + シークバーからチャプターを非表示にします。 + シークバーからチャプターを非表示にします。 + シークバーのチャプターを非表示 「高評価」ボタンの上部に表示されるアニメーションを無効化します。 「高評価」ボタンの上部に表示されるアニメーションを無効化します。 高評価ボタンのアニメーションを無効化 @@ -321,6 +324,11 @@ DeArrow の詳細については、ここをタップしてください。"続行しますか? デフォルト値にリセットしました。 再起動してレイアウトを正常に読み込みます + "YouTube サーバー側のバグにより、高評価数、再生回数、アップロード日などの数字のテキストが一部のユーザーに対して非表示になります。 + +この問題は、アプリのバージョンを 19.13.37 に偽装することで回避できます。(一時的な回避策) + +アプリを再起動する前にアプリのバージョンを偽装しますか?" 再起動して設定を適用します 設定のエクスポートに失敗しました。 設定は正常にエクスポートされました。 @@ -423,6 +431,9 @@ DeArrow の詳細については、ここをタップしてください。"「ショートの作成」ボタンを非表示にします。 「ショートの作成」ボタンを非表示にします。 ショートの作成ボタンを非表示 + コメント欄のハイライト表示された検索リンク(虫眼鏡マークが付いている水色の文字)を非表示にします。 + コメント欄のハイライト表示された検索リンク(虫眼鏡マークが付いている水色の文字)を非表示にします。 + ハイライト表示された検索リンクを非表示 「Thanks」ボタンを非表示にします。 「Thanks」ボタンを非表示にします。 「Thanks」ボタンを非表示 @@ -649,6 +660,9 @@ DeArrow の詳細については、ここをタップしてください。"「字幕」メニューを非表示にします。 「字幕」メニューを非表示にします。 「字幕」を非表示 + 画質設定メニューから「1080p Premium」を非表示にします。 + 画質設定メニューから「1080p Premium」を非表示にします。 + 1080p Premium メニューを非表示 「ヘルプとフィードバック」メニューを非表示にします。 「ヘルプとフィードバック」メニューを非表示にします。 「ヘルプとフィードバック」を非表示 @@ -781,6 +795,9 @@ DeArrow の詳細については、ここをタップしてください。"シーク取り消しのメッセージを非表示にします。 シーク取り消しのメッセージを非表示にします。 シーク取り消しメッセージを非表示 + タイムスタンプの横に表示されるチャプターのラベルを非表示にします。 + タイムスタンプの横に表示されるチャプターのラベルを非表示にします。 + チャプターのラベルを非表示 プレーヤーのシークバーを非表示にします。 プレーヤーのシークバーを非表示にします。 動画のサムネイルのシークバーを非表示にします。 @@ -924,6 +941,11 @@ DeArrow の詳細については、ここをタップしてください。"「共有」ボタンを非表示にします。 「共有」ボタンを非表示にします。 「共有」ボタンを非表示 + チャンネルページの「ホーム」からショート欄を非表示にします。\n\n注意: 「ショート」ヘッダーがあるショート欄のみが非表示になります。 + "チャンネルページの「ホーム」からショート欄を非表示にします。 + +注意: 「ショート」ヘッダーがあるショート欄のみが非表示になります。" + チャンネルページから非表示 再生履歴から非表示にします。 再生履歴から非表示にします。 再生履歴から非表示 @@ -1024,14 +1046,10 @@ DeArrow の詳細については、ここをタップしてください。"概要欄の文字起こしセクションを非表示にします。 概要欄の文字起こしセクションを非表示にします。 文字起こし欄を非表示 - "「プレミア公開」ラベルがついた動画を非表示にします。 - -注意: これを有効にすると「通知する」ボタンも非表示になります。" - プレミア公開動画を非表示 プレーヤー内の広告を非表示にします。 プレーヤー内の広告を非表示にします。 動画広告を非表示 - "ホーム / 登録チャンネル / 検索結果はフィルタリングされ、設定した値よりも少ない視聴回数の動画を非表示にします。 + "ホーム / 登録チャンネル / 検索結果はフィルタリングされ、設定した値よりも少ない再生回数の動画を非表示にします。 注意: • ショート動画は非表示にできません。 @@ -1206,7 +1224,7 @@ DeArrow の詳細については、ここをタップしてください。"全般 触覚フィードバックを無効化または有効化します。 触覚フィードバック - YouTube 内の「YouTube Music」ボタンを置換します。 + YouTube アプリ内の「YouTube Music」ボタンを置換します。 ボタンをフック 設定をインポートまたはエクスポートします。 設定のインポート/エクスポート @@ -1222,6 +1240,7 @@ DeArrow の詳細については、ここをタップしてください。"プレーヤーのフライアウトメニューを非表示または変更します。 フライアウトメニュー プレーヤー + Return YouTube Username Return YouTube Dislike SponsorBlock シークバーのコンポーネントをカスタマイズします。 @@ -1291,6 +1310,23 @@ DeArrow の詳細については、ここをタップしてください。"古いスタイルの画質設定メニューを復活させます。 古いスタイルの画質設定メニューを復活させます。 古いスタイルの画質メニューを復元 + \@ハンドル名 + (ユーザー名) + 表示形式 + ユーザー名 + (@ハンドル名) + ユーザー名のみ + ユーザー名の表示を復活させます。 + ユーザー名の表示を復活させます。 + Return YouTube Username を有効化 + "ハンドル名をユーザー名に置き換えるには、YouTube Data API v3 の開発者キーが必要です。 + +無料プランの API キーの 1 日あたりの割り当ては 10,000 で、コメント 1 件につきハンドル名をユーザー名に置き換えるのに 1 つの割り当てが使用されます。 + +API キーの発行方法については、ここをタップしてください。" + YouTube Data API キーについて + YouTube Data API v3 を使用するための開発者キーです。 + YouTube Data API キーを入力 + 1. 「<a href=%1$s>新しいプロジェクトの作成</a>」に移動します。<br>2. 「<b>作成</b>」をタップします。<br>3. 「<a href=%2$s>YouTube Data API v3</a>」に移動します。<br>4. 「<b>有効にする</b>」をタップします。<br>5. 「<b>認証情報を作成</b>」をタップします。<br>6. 「<b>一般公開データ</b>」オプションを選択します。<br>7. 「<b>次へ</b>」をタップします。<br>8. API キーをコピーします。<br><br>※API キーは他人と共有してはならないため、インポート/エクスポート設定には含まれません。 + YouTube Data API v3 の開発者キーを発行 Return YouTube Dislike について 低評価のデータは、Return YouTube Dislike API によって提供されています。詳細はここをタップしてください。 ReturnYouTubeDislike.com @@ -1303,6 +1339,9 @@ DeArrow の詳細については、ここをタップしてください。"低評価数の表示を復活させます。\n\n注意: 正確な値ではありません。 低評価数の表示を復活させます。\n\n注意: 正確な値ではありません。 Return YouTube Dislike を有効化 + 高評価数が非公開の動画で高評価数を推定して表示します。 + 高評価数が非公開の動画で高評価数を推定して表示します。 + 推定の高評価数を表示 低評価数は一時的に利用できません。 (クライアント API が制限に達しました) 低評価数は一時的に利用できません。(ステータス: %d) 低評価数は一時的に利用できません。(API がタイムアウトしました) @@ -1317,8 +1356,12 @@ DeArrow の詳細については、ここをタップしてください。"Return YouTube Dislike が利用できない場合にトーストを表示します。 Return YouTube Dislike が利用できない場合にトーストを表示します。 API が利用できない場合にトーストを表示 + 非表示 リンクを共有する際に、URL からトラッキングクエリパラメーターを削除します。 共有リンクのクリーンアップ + "動画のタイトルの横にある「#」、「寄付」、「ショップ」、「商品」のようなサブタイトルを非表示にします。" + "動画のタイトルの横にある「#」、「寄付」、「ショップ」、「商品」のようなサブタイトルを非表示にします。" + 動画のサブタイトルをサニタイズ SponsorBlock について spon.ajay.app データは SponsorBlock API によって提供されています。他のプラットフォームのダウンロードや詳細については、ここをタップしてください。 @@ -1551,11 +1594,12 @@ DeArrow の詳細については、ここをタップしてください。"アプリのバージョンは偽装されています。 17.33.42 - 古い UI レイアウトを復元 17.41.37 - 古い再生リスト欄を復元 - 18.05.40 - 古いコメント入力ボックスを復元 + 18.05.40 - 古いコメント入力欄を復元 18.17.43 - 古いプレーヤーフライアウトパネルを復元 - 18.33.40 - 古いショートのアクションバーを復元 + 18.33.40 - ショートの古いアクションバーを復元 18.38.45 - 以前のデフォルトの画質の動作を復元 - 18.48.39 - リアルタイムで更新される「再生回数」と「高評価数」を無効化 + 18.48.39 - リアルタイムで更新される再生回数と高評価数を無効化 + 19.13.37 - 古いスタイルの数字の回転アニメーションを復元 偽装するバージョン 偽装するバージョンを入力してください。 偽装するアプリのバージョンを編集 @@ -1591,11 +1635,19 @@ DeArrow の詳細については、ここをタップしてください。"ストリーミングデータを偽装していない場合、動画の再生ができない可能性があります。 ストリーミングデータを偽装 Android + Android Creator + Android 埋め込みプレーヤー + Android Testsuite Android TV Android VR iOS + TV HTML5 + Web 偽装するクライアントの種類 この設定をオフにした場合、バッファリングの問題が発生する可能性があります。 + 感度は1 ~ 1000 (%)の間でなければなりません。 + スワイプして明るさを調整する際の感度を 1 ~ 1000 (%) の間で設定できます。 + 明るさのスワイプ感度 スワイプジェスチャーを「画面のロック」モードで有効化します。 スワイプジェスチャーを「画面のロック」モードで有効化します。 「画面のロック」時のスワイプジェスチャーを有効化 @@ -1611,6 +1663,9 @@ DeArrow の詳細については、ここをタップしてください。"スワイプオーバーレイのテキストサイズ スワイプオーバーレイが表示される時間 (単位: ミリ秒) スワイプオーバーレイのタイムアウト + 感度は1 ~ 1000 (%)の間でなければなりません。 + スワイプして音量を調整する際の感度を 1 ~ 1000 (%) の間で設定できます。\n\n推奨される音量スワイプ感度は、15 音量ステップで 100%、150 音量ステップで 10% です。 + 音量のスワイプ感度 "デバイスの情報を偽装して、作成ボタンと通知ボタンの位置を入れ替えます。 • この設定を変更しても、デバイスを再起動するまで有効にならない場合があります。 • この設定を無効にすると、サーバーからさらに多くの広告が読み込まれます。 @@ -1627,6 +1682,7 @@ DeArrow の詳細については、ここをタップしてください。" オリジナル RVX Music + 注意 %s はインストールされていません。インストールしてください。 インストールされている RVX Music のパッケージ名です。 RVX Music のパッケージ名 diff --git a/src/main/resources/youtube/translations/ko-rKR/missing_strings.xml b/src/main/resources/youtube/translations/ko-rKR/missing_strings.xml index 2530da017..4995e20be 100644 --- a/src/main/resources/youtube/translations/ko-rKR/missing_strings.xml +++ b/src/main/resources/youtube/translations/ko-rKR/missing_strings.xml @@ -6,11 +6,4 @@ MMT Pink MMT Turquoise Xisr Yellow - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key diff --git a/src/main/resources/youtube/translations/ko-rKR/strings.xml b/src/main/resources/youtube/translations/ko-rKR/strings.xml index 28d848ae8..7a97956e1 100644 --- a/src/main/resources/youtube/translations/ko-rKR/strings.xml +++ b/src/main/resources/youtube/translations/ko-rKR/strings.xml @@ -1,4 +1,4 @@ - + 플레이어에 접근성 컨트롤을 표시하시겠습니까? 접근성 서비스가 켜져있기 때문에 플레이어 컨트롤을 변경합니다. @@ -323,6 +323,11 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 계속하시겠습니까? 기본값으로 초기화합니다. 레이아웃을 정상적으로 불러오기 위해 다시 시작합니다. + "일부 사용자에게 좋아요, 조회수 및 업로드 날짜와 같은 롤링 넘버 텍스트가 숨겨지는 YouTube 서버 측 문제가 있습니다. + +이 문제에 대한 임시 해결 방법은 앱 버전을 19.13.37로 변경하는 것입니다. + +앱을 다시 시작하기 전에 앱 버전을 변경하시겠습니까?" 새로고침 및 다시 시작 설정을 내보낼 수 없습니다. 설정을 성공적으로 내보냈습니다. @@ -428,6 +433,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." Shorts 만들기 버튼이 표시됩니다. Shorts 만들기 버튼이 숨겨집니다. Shorts 만들기 버튼 숨기기 + 강조 표시된 검색 링크가 표시됩니다.\n• 돋보기 마크가 있는 파란색 강조 글씨 + 강조 표시된 검색 링크가 숨겨집니다.\n• 돋보기 마크가 있는 파란색 강조 글씨 + 강조 표시된 검색 링크 숨기기 Thanks 버튼이 표시됩니다. Thanks 버튼이 숨겨집니다. Thanks 버튼 숨기기 @@ -934,6 +942,12 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 공유 버튼이 표시됩니다. 공유 버튼이 숨겨집니다. 공유 버튼 숨기기 + 채널에서 표시됩니다. + "채널에서 숨겨집니다. + +알림: +• 홈 탭에 있는 Shorts 헤더 선반만 숨겨집니다." + 채널에서 숨기기 시청 기록에서 Shorts 선반이 표시됩니다. 시청 기록에서 Shorts 선반이 숨겨집니다. 시청 기록에서 Shorts 선반이 숨기기 @@ -1044,10 +1058,6 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 스크립트 섹션이 표시됩니다. 스크립트 섹션이 숨겨집니다. 스크립트 섹션 숨기기 - "(게시) 예정 라벨이 있는 동영상이 숨겨집니다. - -알림: 이 설정을 활성화하면 '알림 받기' 버튼도 숨겨집니다." - (게시) 예정 동영상 숨기기 동영상 광고가 표시됩니다. 동영상 광고가 숨겨집니다. 동영상 광고 숨기기 @@ -1264,7 +1274,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 시청 기록과 관련된 설정을 변경할 수 있습니다. 시청 기록 빠른 작업 상단 여백 값은 0-32 사이어야 합니다. - 재생바에서 빠른 작업 컨테이너까지의 간격을 0-32 사이로 지정할 수 있습니다. + 재생바에서 빠른 작업 컨테이너까지의 간격을 0-32 사이에서 지정할 수 있습니다. 빠른 작업 상단 여백 "AV1 코덱 응답을 강제로 거부합니다. 약 20초정도의 버퍼링 후에 다른 코덱으로 전환됩니다." @@ -1310,12 +1320,23 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 이전 동영상 화질 설정을 비활성화합니다. 이전 동영상 화질 설정 메뉴를 활성화합니다. 이전 동영상 화질 설정 메뉴 활성화하기 - 핸들(@사용자 아이디)를 사용합니다. + 핸들 (사용자 이름) + 표시 형식 + 사용자 이름 (핸들) + 사용자 이름 + 핸들(@사용자 아이디)을 사용합니다. 사용자 이름을 사용합니다. Return YouTube Username 활성화하기 - YouTube Data API key에 대한 정보 - YouTube Data API v3가 사용된 개발자 키입니다. + "핸들을 사용자 이름으로 변경하려면 YouTube Data API v3 Developer Key가 필요합니다. + +무료 요금제에서 API Key의 일일 할당량은 10,000개이며, 1개의 할당량은 댓글 1개에 대해 핸들을 사용자 이름으로 변경하는 데 사용됩니다. + +API Key를 발급받는 방법을 보려면 여기를 누르세요." + YouTube Data API Key에 대한 정보 + YouTube Data API v3를 사용하기 위한 Developer Key입니다. YouTube Data API Key + 1. <a href=%1$s>새 프로젝트 만들기</a> 로 이동합니다.<br>2. <b>만들기</b> 버튼을 터치합니다.<br>3. <a href=%2$s>YouTube Data API v3</a> 로 이동합니다.<br>4. <b>사용</b> 버튼을 터치합니다.<br>5. <b>사용자 인증 정보 만들기</b> 버튼을 터치합니다.<br>6. <b>공개 데이터</b> 옵션을 선택합니다.<br>7. <b>다음</b> 버튼을 터치합니다.<br>8. API Key를 복사합니다.<br><br>※ API Key는 다른 사람과 공유해서는 안 되므로 가져오기 / 내보내기 설정에 포함되지 않습니다. + YouTube Data API v3 Developer Key 발급받기 정보 싫어요 수의 데이터는 Return YouTube Dislike API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 누르세요. ReturnYouTubeDislike.com @@ -1328,9 +1349,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 싫어요 수를 표시하지 않습니다. 싫어요 수를 표시합니다. Return YouTube Dislike 활성화하기 - 예상된 \'좋아요\'가 숨겨집니다. - 예상된 \'좋아요\'가 표시됩니다. - 예상된 \'좋아요\' 표시하기 + 좋아요 수가 숨겨진 동영상에서 추정되는 좋아요 수를 표시하지 않습니다. + 좋아요 수가 숨겨진 동영상에서 추정되는 좋아요 수를 표시합니다. + 추정되는 좋아요 수 표시하기 싫어요 수를 표시할 수 없습니다 (클라이언트 API 제한 도달). 싫어요 수를 표시할 수 없습니다 (상태 코드: %d). 싫어요 수를 일시적으로 표시할 수 없습니다 (응답 시간 초과). @@ -1348,6 +1369,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 숨겨짐 링크를 공유할 때, URL에서 추적 쿼리 매개변수를 제거합니다. (URL의 뒷부분 \'?si=...\' 이 제거됨.) 추적 쿼리를 제거한 링크 공유하기 + "동영상 자막에서 '#', '모금 행사', '쇼핑', '제품'과 같은 문구가 표시됩니다." + "동영상 자막에서 '#', '모금 행사', '쇼핑', '제품'과 같은 문구가 숨겨집니다." + 불필요한 동영상 자막 문구 숨기기 정보 sponsor.ajay.app 건너뛸 구간의 데이터는 SponsorBlock API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 누르세요. @@ -1545,10 +1569,10 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요." 숨겨짐 두 번 누르기 애니메이션 메타 패널 하단 여백은 0-64 사이여야 합니다. - 재생바에서 메타 패널까지의 간격을 0-64 사이로 지정할 수 있습니다. + 재생바에서 메타 패널까지의 간격을 0-64 사이에서 지정할 수 있습니다. 메타 패널 하단 여백 높이 비율은 0-100 사이어야 합니다 (백분율). - 하단바가 숨겨졌을 때, 남는 빈 공간의 높이 비율을 0에서 100사이로 지정할 수 있습니다 (백분율). + 하단바가 숨겨졌을 때, 남는 빈 공간의 높이 비율을 0-100 사이에서 지정할 수 있습니다. (백분율) 빈 공간의 높이 비율 타임스탬프를 길게 눌러서 Shorts 반복 상태를 변경할 수 있습니다. 타임스탬프 길게 누르기 동작 @@ -1612,11 +1636,19 @@ AVC (H.264)의 최대 화질 값은 1080p이며 동영상을 재생하면 VP9 스트리밍 데이터를 변경합니다. 스트리밍 데이터 변경하기 Android + Android Creator + Android Embedded Player + Android TestSuite Android TV Android VR iOS + TV HTML5 + Web 기본 클라이언트 이 설정을 비활성화하면 동영상 재생 문제가 발생할 수 있습니다. + 밝기 스와이프 감도는 1-1000 사이어야 합니다. (퍼센트) + 밝기 스와이프의 최소 거리를 1-1000 사이에서 지정할 수 있습니다. (퍼센트)\n\n최소 거리가 짧을수록 밝기 레벨이 더 빠르게 변경됩니다. + 밝기 스와이프 감도 잠금 화면 모드에서 스와이프 제스처를 비활성화합니다. 잠금 화면 모드에서 스와이프 제스처를 활성화합니다. 잠금 화면 모드에서 스와이프 제스처 활성화하기 @@ -1632,6 +1664,9 @@ AVC (H.264)의 최대 화질 값은 1080p이며 동영상을 재생하면 VP9 오버레이 텍스트 크기 오버레이가 표시되는 시간을 지정할 수 있습니다. (밀리초) 오버레이 타임아웃 + 볼륨 스와이프 감도는 1-1000 사이어야 합니다. (퍼센트) + 볼륨 스와이프의 최소 거리를 1-1000 사이에서 지정할 수 있습니다. (퍼센트)\n\n최소 거리가 짧을수록 볼륨 레벨이 더 빨리 변경됩니다.\n\n권장 볼륨 스와이프 감도는 15단계 볼륨에서 100%, 150단계 볼륨에서 10%입니다. + 볼륨 스와이프 감도 "기기 정보를 변경하여 만들기 버튼과 알림 버튼의 위치를 교환합니다. • 이 설정을 변경하더라도 기기를 다시 시작할 때까지 적용되지 않을 수 있습니다. • 이 설정을 비활성화하면 서버에서 광고 필터에 등록되지 않은 광고(Shorts 광고)가 로드됩니다. @@ -1649,6 +1684,7 @@ AVC (H.264)의 최대 화질 값은 1080p이며 동영상을 재생하면 VP9 이 설정이 적용되지 않는 경우에는 시크릿 모드로 전환해 보세요." YouTube RVX Music + 경고 %s 이 설치되어 있지 않습니다. 설치하세요. 이 기기에 설치된 RVX Music 앱 패키지명을 설정하세요. RVX Music 앱 패키지명 diff --git a/src/main/resources/youtube/translations/pl-rPL/strings.xml b/src/main/resources/youtube/translations/pl-rPL/strings.xml index 1673d3cd5..46607ed06 100644 --- a/src/main/resources/youtube/translations/pl-rPL/strings.xml +++ b/src/main/resources/youtube/translations/pl-rPL/strings.xml @@ -1,4 +1,4 @@ - + Włączyć gesty ułatwień dostępu dla odtwarzacza filmów? Twoje ustawienia są zmienione, ponieważ serwis ułatwień dostępu jest włączony. @@ -320,6 +320,11 @@ Opcja rozwijania opisu filmu może nie działać, jeśli wprowadzony ciąg znak Czy chcesz kontynuować? Przywrócono domyślne wartości. Uruchom ponownie, aby wczytać poprawnie układ aplikacji + "Istnieje błąd po stronie serwera YouTube, który u niektórych użytkowników powoduje ukrywanie się tekstu liczb posiadających animację, takich jak polubienia, wyświetlenia, daty opublikowania filmów. + +Tymczasowym obejściem dla tego błędu jest oszukanie wersji aplikacji do 19.13.37. + +Czy chcesz oszukać wersję aplikacji przed ponownym uruchomieniem?" Odśwież i uruchom ponownie Nie udało się wyeksportować ustawień. Ustawienia zostały pomyślnie wyeksportowane. @@ -422,6 +427,9 @@ Sklep" Widoczny Ukryty Przycisk od tworzenia Shortsów + Widoczne + Ukryte + Najciekawsze wyniki wyszukiwania (linki) Widoczny Ukryty Przycisk od dziękowania @@ -651,7 +659,7 @@ Słowa z wielkimi literami w środku muszą być wpisane z odpowiednią wielkoś Menu od napisów Widoczne Ukryte - Menu 1080p Premium + Menu jakości 1080p Premium Widoczne Ukryte Menu od pomocy i opinii @@ -929,6 +937,12 @@ Jeśli układ ekranu odtwarzacza zmieni się w skutek zmian po stronie serwera, Widoczny Ukryty Przycisk od udostępniania + Widoczne + "Ukryte + +Informacja: +• Tylko półki z nagłówkiem Shorts będą ukryte na stronie głównej kanału" + Na stronie kanału Widoczne Ukryte W historii oglądania @@ -1032,10 +1046,6 @@ Autoodtwarzanie można zmienić w ustawieniach YouTube: Widoczne Ukryte Transkrypcje - "Ukryj filmy z etykietą WKRÓTCE. - -Uwaga: Włączenie tego ustawienia ukryje też przycisk 'Powiadom mnie'." - Ukryj zaplanowane filmy Widoczne Ukryte Reklamy w filmach @@ -1304,9 +1314,13 @@ Stuknij i przytrzymaj, by otworzyć ustawienia YouTube." Niewidoczne Widoczne Stare menu od jakości filmu - Po nicku - Po nazwie użytkownika - Tryb wyświetlania nazw użytkowników + \@nick (Nazwa użytkownika) + Format wyświetlania + Nazwa użytkownika (@nick) + Nazwa użytkownika + Wyłączone + Włączone + Return YouTube Username "Klucz deweloperski YouTube Data API v3 jest wymagany do zastępowania nicków nazwami użytkownika. Dzienny limit kluczy API w planie darmowym wynosi 10 000, a 1 limit służy do zastąpienia nicku nazwą użytkownika dla 1 komentarza. @@ -1315,20 +1329,23 @@ Kliknij, by zobaczyć, jak zgłosić klucz API." O kluczu YouTube Data API Klucz deweloperski używany do korzystania z API YouTube Data V3. Klucz YouTube Data API - 1. Przejdź do <a href=%1$s>Utwórz nowy projekt</a>.<br>2. Kliknij przycisk <b>UTWÓRZ</b><br>3. Przejdź do <a href=%2$s>YouTube Data API v3</a>.<br>4. Kliknij przycisk <b>WŁĄCZ</b><br>5. Kliknij przycisk <b>UTWÓRZ POŚWIADCZENIE</b><br>6. Wybierz opcję <b>Publiczne dane</b><br>7. Kliknij przycisk <b>NASTĘPNE</b><br>8. Skopiuj klucz API<br><br>※ Klucz API nie powinien być współdzielony z innymi, dlatego nie jest zawarty w ustawieniach importu/eksportu + 1. Przejdź do <a href=%1$s>Utwórz nowy projekt</a>.<br>2. Kliknij przycisk <b>UTWÓRZ</b><br>3. Przejdź do <a href=%2$s>YouTube Data API v3</a>.<br>4. Kliknij przycisk <b>WŁĄCZ</b><br>5. Kliknij przycisk <b>UTWÓRZ DANE LOGOWANIA</b><br>6. Wybierz opcję <b>Dane publiczne</b><br>7. Kliknij przycisk <b>DALEJ</b><br>8. Skopiuj klucz API<br><br>※ Klucz API nie powinien być współdzielony z innymi, dlatego nie jest zawarty w ustawieniach importu/eksportu Zgłoś klucz deweloperski YouTube Data API O integracji Dane o łapkach w dół są dostarczane przez API Return YouTube Dislike. Stuknij tutaj by dowiedzieć się więcej. ReturnYouTubeDislike.com Przycisk łapki w górę ładnie wygląda Przycisk łapki w górę zajmuje mało miejsca - Przycisk łapki w górę jest kompaktowy + Kompaktowy przycisk łapki w górę Liczba Tak Łapki w dół wyświetlane jako procent Łapki w dół są niewidoczne Łapki w dół są widoczne Return YouTube Dislike + Ukryta + Widoczna + Szacowana ilość polubień Liczba łapek w dół nie jest dostępna (limit API użytkownika został osiągnięty). Liczba łapek w dół nie jest dostępna (status %d). Łapki w dół są tymczasowo niedostępne (API nie reaguje). @@ -1343,8 +1360,12 @@ Ograniczenie: Liczba łapek w dół może nie być widoczna, gdy użytkownik nie Ukryty Widoczny Komunikat, jeśli API jest niedostępne + Ukryte Usuwa śledzące parametry z adresów URL podczas udostępniania linków Oczyść udostępniane linki + "Frazy takie jak '#', 'Zbiórka', 'Sklep' i 'Produkty' są widoczne" + "Frazy takie jak '#', 'Zbiórka', 'Sklep' i 'Produkty' są ukryte" + Oczyść napisy w filmach O integracji sponsor.ajay.app Dane są dostarczane przez API SponsorBlock. Stuknij tutaj, aby dowiedzieć się więcej i pobrać na inne platformy. @@ -1583,7 +1604,7 @@ Informacje: 18.33.40 - Przywraca stary pasek akcji Shortsów 18.38.45 - Przywraca stare zachowanie domyślnej jakości filmu 18.48.39 - Wyłącza aktualizowanie wyświetleń i łapek w górę w czasie rzeczywistym - 19.13.37 - Przywróć stary styl animacji liczb + 19.13.37 - Przywraca stary styl animacji liczb Oszukiwana wersja aplikacji Wpisz wersję, którą chcesz oszukiwać Zmień oszukiwaną wersję aplikacji @@ -1619,11 +1640,19 @@ Kodek AVC (H.264) obsługuje maksymalnie rozdzielczość 1080p, a odtwarzanie fi Włączone Oszukuj strumień danych Android + Android Creator + Wbudowany odtwarzacz Androida + Klient Testowy Androida Android TV Android VR iOS + TV HTML5 + Przeglądarka Domyślny klient Wyłączenie tej opcji może spowodować problemy z odtwarzaniem filmów. + Czułość przesuwania gestu jasności musi być pomiędzy 1 a 1000 (%). + Skonfiguruj minimalną odległość dla przesuwania jasności, pomiędzy 1 a 1000 (%).\nIm mniejsza minimalna odległość, tym szybciej zmienia się poziom jasności. + Czułość przesuwania jasności Wyłączone Włączone Przesuwanie podczas trybu blokady ekranu @@ -1639,6 +1668,9 @@ Kodek AVC (H.264) obsługuje maksymalnie rozdzielczość 1080p, a odtwarzanie fi Rozmiar tekstu nakładki przesuwania Ilość milisekund, przez które nakładka jest widoczna Limit czasu widoczności nakładki + Czułość przesuwania gestu głośności musi być pomiędzy 1 a 1000 (%). + Skonfiguruj minimalną odległość dla przesuwania głośności, pomiędzy 1 a 1000 (%).\n\nIm mniejsza minimalna odległość, tym szybciej zmienia się poziom głośności.\n\nZalecana czułość przesuwania głośności wynosi 100% przy 15 krokach głośności i 10% przy 150 krokach głośności. + Czułość przesuwania głośności "Zamienia pozycję przycisku od przesyłania z przyciskiem do powiadomień oszukując informacje o urządzeniu. • Nawet jeśli zmienisz to ustawienie, może się nic nie zmienić dopóki nie zrestartujesz urządzenia. @@ -1656,6 +1688,7 @@ Dodatkowo, reklamy nie będą już blokowane w Shortsach. Jeśli opcja nie przynosi skutku, spróbuj przełączyć się na tryb incognito." Domyślny RVX Music + Ostrzeżenie %s nie jest zainstalowany. Proszę go zainstalować. Nazwa pakietu zainstalowanego RVX Music Nazwa pakietu RVX Music @@ -1683,8 +1716,4 @@ Jeśli opcja nie przynosi skutku, spróbuj przełączyć się na tryb incognito. Sprawdź lub usuń listę kanałów dodanych do białej listy Biała lista kanałów SponsorBlock - Ukryta - Widoczna - Szacowana ilość polubień - Ukryte diff --git a/src/main/resources/youtube/translations/pt-rBR/missing_strings.xml b/src/main/resources/youtube/translations/pt-rBR/missing_strings.xml index 7235bbe40..a0dadfc3c 100644 --- a/src/main/resources/youtube/translations/pt-rBR/missing_strings.xml +++ b/src/main/resources/youtube/translations/pt-rBR/missing_strings.xml @@ -2,19 +2,10 @@ Don\'t show again Courses / Learning - Chapters are enabled in the seekbar. - Chapters are disabled in the seekbar. - Disable seekbar chapters Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - 1080p Premium menu is shown. - 1080p Premium menu is hidden. - Hide 1080p Premium menu - Chapter labels next to the timestamp are shown. - Chapter labels next to the timestamp are hidden. - Hide seekbar chapter labels MMT Blue MMT Green MMT Orange @@ -25,29 +16,10 @@ Vanced Black Vanced Light Xisr Yellow - Return YouTube Username - Handle is used. - Username is used. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Estimated likes are hidden. - Estimated likes are shown. - Show estimated likes - Hidden Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment Forward by Specified Time (Default: 150ms) Publish Created Segment Rewind by Specified Time (Default: 150ms) - 19.13.37 - Restore old style Rolling number animations diff --git a/src/main/resources/youtube/translations/pt-rBR/strings.xml b/src/main/resources/youtube/translations/pt-rBR/strings.xml index 2596181fd..0035054a4 100644 --- a/src/main/resources/youtube/translations/pt-rBR/strings.xml +++ b/src/main/resources/youtube/translations/pt-rBR/strings.xml @@ -1,4 +1,4 @@ - + Ativar os controles de acessibilidade para o reprodutor de vídeo? Seus controles foram modificados porque um serviço de acessibilidade está ativado. @@ -198,6 +198,9 @@ Limitação: esta configuração pode não se aplicar a vídeos que não incluem As rolagens números são animadas. As rolagens números não são animadas. Desativar animações de rolagem de números + Os capítulos na barra de progresso estão ativados. + Os capítulos na barra de progresso estão desativados. + Desativar capítulos na barra de progresso A animação da fonte está ativada acima do botão Curtir. A animação da fonte está desativada acima do botão Curtir. Desativar animação do botão Curtir @@ -316,6 +319,11 @@ Estes caracteres variam dependendo do seu idioma. Você deseja continuar? Redefinir para os valores padrão. Reinicie para carregar o layout normalmente + "Há um bug do lado do servidor do YouTube que faz com que o texto de números contínuos, como curtidas, visualizações e datas de upload, fique oculto para alguns usuários. + +Uma solução temporária para esse problema é falsificar a versão do aplicativo para 19.13.37. + +Você quer falsificar a versão do aplicativo antes de reiniciá-lo?" Atualizar e reiniciar Falha ao exportar configurações. As configurações foram exportadas com sucesso. @@ -331,7 +339,7 @@ Estes caracteres variam dependendo do seu idioma. Importar configurações de um arquivo salvo. Importar configurações Redefinir - Buscar %s + Pesquisar %s ReVanced Extended Aplicativo de download externo Não instalado @@ -414,6 +422,9 @@ Loja" O botão de criação de shorts será exibido. O botão de criação de shorts está oculto. Ocultar botão de criação de shorts + Os links de pesquisa em destaque serão exibidos. + Os links de pesquisa em destaque estão ocultos. + Ocultar links de pesquisa em destaque O botão valeu será exibido. O botão valeu está oculto. Ocultar botão valeu @@ -638,6 +649,9 @@ Palavras com letras maiúsculas no meio devem ser inseridas com maiúsculas (ou O menu legendas será exibido. O menu legendas está oculto. Ocultar menu legendas + O menu 1080p Premium será exibido. + O menu 1080p Premium está oculto. + Ocultar o menu 1080p Premium O menu ajuda & feedback será exibido. O menu ajuda & feedback está oculto. Ocultar menu ajuda & feedback @@ -770,6 +784,9 @@ Se o layout da tela do reprodutor mudar devido a alterações no lado do servido A mensagem de desfazer busca será exibida. A mensagem de desfazer busca está oculta. Ocultar mensagem de desfazer busca + Os rótulos dos capítulos ao lado da marcação de tempo serão exibidos. + Os rótulos dos capítulos ao lado da marcação de tempo estão ocultos. + Ocultar rótulos dos capítulos na barra de progresso A barra de progresso no reprodutor de vídeo será exibida. A barra de progresso no reprodutor de vídeo está oculta. A barra de progresso em miniaturas será exibida. @@ -913,6 +930,12 @@ Se o layout da tela do reprodutor mudar devido a alterações no lado do servido O botão compartilhar será exibido. O botão compartilhar está oculto. Ocultar botão compartilhar + Exibindo no canal. + "Oculto no canal. + +info: +• Somente painéis com o cabeçalho Shorts na aba home são ocultadas." + Ocultar no canal Exibindo no histórico de exibição. Oculto no histórico de exibição. Ocultar no histórico de exibição @@ -1016,10 +1039,6 @@ A reprodução automática pode ser alterada nas configurações do YouTube: As seções de transcrição serão exibidas. As seções de transcrição estão ocultas. Ocultar seções de transcrição - "Ocultar vídeos com a etiqueta PRÓXIMO. - -Nota: Ativar isso também oculta o botão Notificar-me." - Ocultar PRÓXIMO vídeo Os anúncios de vídeo serão exibidos. Os anúncios de vídeo estão ocultos. Ocultar anúncios de vídeo @@ -1208,6 +1227,7 @@ Toque e segure para abrir a caixa de diálogo de configuração da lista branca. Ocultar ou alterar o menu flutuante no reprodutor de vídeo. Menu flutuante Reprodutor + Return YouTube Username Return YouTube Dislike SponsorBlock Personalize os componentes da barra de progresso. @@ -1277,6 +1297,23 @@ Toque e segure para abrir as Configurações do YouTube." O menu antigo de qualidade de vídeo não está sendo exibido. O menu antigo de qualidade de vídeo está sendo exibido. Restaurar menu antigo de qualidade de vídeo + \@identificador (Nome de usuário) + Formato de exibição + Nome de usuário (@identificador) + Nome de usuário + O identificador é utilizado. + Username é utilizado. + Ativar Return YouTube Username + "A Chave de desenvolvedor da API de dados do YouTube v3 é necessária para substituir o identificador por nome de usuário. + +A cota diária para chaves de API no plano gratuito é de 10.000, e 1 cota é usada para substituir o identificador por nome de usuário para 1 comentário. + +Clique para ver como emitir uma chave de API." + Sobre a chave API de dados do YouTube + A chave de desenvolvedor para usar a API de Dados do YouTube v3. + Chave API dos Dados do YouTube + 1. Vá para <a href=%1$s>Criar um novo projeto</a>.<br>2. Clique no botão <b>CRIAR</b>.<br>3. Vá para <a href=%2$s>API de dados do YouTube v3</a>.<br>4. Clique no botão <b>ATIVAR</b>.<br>5. Clique no botão <b>CRIAR CREDENCIAIS</b>.<br>6. Selecione a opção <b>Dados públicos</b>.<br>7. Clique no botão <b>PRÓXIMO</b>.<br>8. Copie a chave da API.<br><br>※ A chave da API nunca deve ser compartilhada com outras pessoas, portanto, ela não é incluída nas configurações de Importação/Exportação. + Emitir chave de desenvolvedor da API de dados do YouTube v3 Sobre Os dados de dislikes são fornecidos pela API do Return YouTube Dislike. Toque aqui para saber mais. ReturnYouTubeDislike.com @@ -1289,6 +1326,9 @@ Toque e segure para abrir as Configurações do YouTube." Os dislikes não serão exibidos. Os dislikes serão exibidos. Ativar Return YouTube Dislike + As curtidas estimadas estão ocultas. + As curtidas estimadas serão exibidas. + Exibir curtidas estimadas Dislikes indisponível (limite da API do cliente atingido). Deslikes indisponível (status %d). Dislikes temporariamente indisponível (API expirou). @@ -1303,8 +1343,12 @@ Limitação: Dislikes pode não aparecer no modo incógnito." Uma notificação flutuante não é exibida se o Retorn YouTube Dislike não estiver disponível. Uma notificação flutuante é exibida se o Retorn YouTube Dislike não estiver disponível. Exibir uma notificação flutuante se a API não estiver disponível + Oculto Remove os parâmetros de consulta de rastreamento das URLs ao compartilhar os links. Limpar links compartilhados + "Frases como '#', 'Arrecadação de fundos', 'Loja' e 'produtos' serão exibidos nas legendas do vídeo." + "Frases como '#', 'Arrecadação de fundos', 'Loja' e 'produtos' foram ocultadas das legendas do vídeo." + Limpar legendas de vídeo Sobre sponsor.ajay.app Os dados são fornecidos pela API do SponsorBlock. Toque aqui para aprender mais e ver downloads para outras plataformas. @@ -1536,6 +1580,7 @@ Limitação: Título do vídeo desaparece quando clicado." 18.33.40 - Restaurar barra de ação antiga do shorts 18.38.45 - Restaurar antigo comportamento padrão de qualidade de vídeo 18.48.39 - Desativa a atualização em tempo real de \'visualizações\' e \'curtidas\' + 19.13.37 - Restaura as animações de números de rolagem do antigo estilo Versão da falsificação do aplicativo Digite a versão do app para falsificação Editar versão de falsificação do app @@ -1566,11 +1611,19 @@ AVC (H. 64) tem uma resolução máxima de 1080p, e a reprodução de vídeo usa Os dados de streaming são falsificados. Dados de streaming falsos Android + Criador Android + Reprodutor Incorporado Android + Suite de teste Android Android TV Android VR iOS + TV HTML5 + Web Cliente padrão Desativar esta configuração pode causar problemas de reprodução de vídeo. + A sensibilidade de deslizamento de brilho deve estar entre 1-1000 (%). + Configure a sensibilidade do deslize para o brilho entre 1 e 1000 (%). + Sensibilidade de deslizar brilho Os gestos de deslize estão desativados no modo \'Tela de bloqueio\'. Os gestos de deslize estão ativados no modo \'Tela de bloqueio\'. Gestos de deslize no modo \'Tela de bloqueio\' @@ -1586,6 +1639,9 @@ AVC (H. 64) tem uma resolução máxima de 1080p, e a reprodução de vídeo usa Tamanho do texto da sobreposição de gestos A quantidade de milissegundos em que a sobreposição é visível. Tempo limite da sobreposição de gestos + A sensibilidade do deslizamento de volume deve estar entre 1-1000 (%). + Configure a sensibilidade do movimento de deslizar o volume entre 1 e 1000 (%).\nA sensibilidade do movimento de deslizar o volume recomendada é de 100% em etapas de 15 volumes e 10% em etapas de 150 volumes. + Sensibilidade de deslizar volume "Alterne as posições do botão de criação e do botão de notificação falsificando as informações do dispositivo. • Mesmo que você altere esta configuração, ela poderá não entrar em vigor até que você reinicie o dispositivo. @@ -1603,6 +1659,7 @@ Além disso, os anúncios não serão mais bloqueados no Shorts. Se essa configuração não surtir efeito, tente alternar para o modo anônimo." Padrão RVX Music + Aviso %s não está instalado. Por favor, instale-o. Nome do pacote do RVX Music instalado. Nome do pacote do RVX Music diff --git a/src/main/resources/youtube/translations/ru-rRU/missing_strings.xml b/src/main/resources/youtube/translations/ru-rRU/missing_strings.xml index a85ca0263..fb2850fcf 100644 --- a/src/main/resources/youtube/translations/ru-rRU/missing_strings.xml +++ b/src/main/resources/youtube/translations/ru-rRU/missing_strings.xml @@ -1,43 +1,20 @@ - Chapters are enabled in the seekbar. - Chapters are disabled in the seekbar. - Disable seekbar chapters + "There is a YouTube server-side bug that causes rolling number text such as likes, views, and upload dates to be hidden for some users. + +A temporary workaround for this issue is to spoof the app version to 19.13.37. + +Do you want to spoof the app version before restarting the app?" Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name - 1080p Premium menu is shown. - 1080p Premium menu is hidden. - Hide 1080p Premium menu - Chapter labels next to the timestamp are shown. - Chapter labels next to the timestamp are hidden. - Hide seekbar chapter labels MMT Orange MMT Pink MMT Turquoise Xisr Yellow - Return YouTube Username - Handle is used. - Username is used. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Estimated likes are hidden. - Estimated likes are shown. - Show estimated likes - Hidden Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment Forward by Specified Time (Default: 150ms) Publish Created Segment Rewind by Specified Time (Default: 150ms) - 19.13.37 - Restore old style Rolling number animations diff --git a/src/main/resources/youtube/translations/ru-rRU/strings.xml b/src/main/resources/youtube/translations/ru-rRU/strings.xml index da8d24370..e8801dd70 100644 --- a/src/main/resources/youtube/translations/ru-rRU/strings.xml +++ b/src/main/resources/youtube/translations/ru-rRU/strings.xml @@ -1,4 +1,4 @@ - + Включить специальные возможности в плеере? Служба специальных возможностей включена. Управление изменено. @@ -201,6 +201,9 @@ Анимация прокручивания чисел включена. Анимация прокручивания чисел отключена. Анимация прокручивания чисел + Главы в шкале воспроизведения отображены. + Главы в шкале воспроизведения скрыты. + Главы в шкале воспроизведения Анимация кнопки \"Лайк\" включена. Анимация кнопки \"Лайк\" отключена. Анимация кнопки \"Лайк\" @@ -408,9 +411,9 @@ Shorts Водяной знак канала отображен. Водяной знак канала скрыт. Водяной знак канала - Секция \"Главы\" отображена. - Секция \"Главы\" скрыта. - Секция \"Главы\" + Главы отображены. + Главы скрыты. + Главы Секция эпизодов отображена. Секция эпизодов скрыта. Секция эпизодов @@ -420,6 +423,9 @@ Shorts Кнопка \"Создать Shorts\" отображена. Кнопка \"Создать Shorts\" скрыта. Кнопка Создать \"Shorts\" + Подсвеченные ссылки поиска отображены. + Подсвеченные ссылки поиска скрыты. + Подсвеченные ссылки поиска Кнопка \"Спасибо\" отображена. Кнопка \"Спасибо\" скрыта. Кнопка \"Спасибо\" @@ -647,6 +653,9 @@ Shorts Меню \"Субтитры\" отображено. Меню \"Субтитры\" скрыто. Меню \"Субтитры\" + Меню 1080p Premium отображено. + Меню 1080p Premium скрыто. + Меню 1080p Premium Меню \"Справка и Отзывы\" отображено. Меню \"Справка и Отзывы\" скрыто. Меню \"Справка и Отзывы\" @@ -779,6 +788,9 @@ Shorts Сообщение при отмотке назад отображено. Сообщение при отмотке назад скрыто. Сообщение при отмотке назад + Метки глав в шкале воспроизведения отображены. + Метки глав в шкале воспроизведения скрыты. + Метки глав в шкале воспроизведения Шкала воспроизведения отображена. Шкала воспроизведения скрыта. Миниатюры шкалы воспроизведения отображены. @@ -926,6 +938,12 @@ Shorts Кнопка \"Поделиться\" отображена. Кнопка \"Поделиться\" скрыта. Кнопка \"Поделиться\" + Показано в канале. + "Скрыто в канале. + +Информация: +• Скрыты только полки с заголовком Shorts на домашней вкладке." + Скрывать в канале В истории просмотра отображены. В истории просмотра скрыты. Shorts в истории просмотра @@ -1030,9 +1048,6 @@ Shorts Секция \"Расшифровка видео\" отображена. Секция \"Расшифровка видео\" скрыта. Секция \"Расшифровка видео\" - "Скрывает видео с меткой \"подготовленное\" к воспроизведению. -Примечание: Также скроется кнопка \"Уведомить\"." - Подготовленное видео Реклама в видео отображена. Реклама в видео скрыта. Реклама в видео @@ -1237,6 +1252,7 @@ Shorts Скрыть или изменить \"Выдвижное меню\" в плеере. Выдвижное меню плеера Плеер + Имя пользователя YouTube - \"RYU\" Return YouTube Dislike SponsorBlock Настроить компоненты шкалы воспроизведения. @@ -1288,7 +1304,7 @@ Shorts Заменить программный кодек AV1 Используется псевдоним канала. Используется имя канала. - Заменить дескриптор канала + Заменить псевдоним канала Нажмите, чтобы показать оставшееся время. Нажмите, чтобы открыть меню скорости воспроизведения или качества видео. Заменить действие метки времени @@ -1305,6 +1321,23 @@ Shorts Старое меню качества скрыто. Старое меню качества отображено. Старое меню качества + \@псевдоним (Имя пользователя) + Вид отображения + Имя пользователя (@псевдоним) + Имя пользователя + Имя пользователя YouTube отключено. + Имя пользователя YouTube включено. + Включить Имя пользователя YouTube - \"RYU\" + "Ключ разработчика \"Return YouTube Username\" (RYU) API Data v3 необходим для замены псевдонима на имя пользователя. + +Ежедневная, бесплатная, квота ключей API составляет 10 000, и 1 квота используется для замены псевдонима на имя пользователя для комментария. + +Нажмите, чтобы увидеть, как выпустить API ключ." + О ключе \"RYU\" Data API + Ключ разработчика для \"RYU\" Data API v3. + Ключ \"RYU\" Data API + 1. Перейдите <a href=\"%1$s\">Новый проект</a>.<br>2. Нажмите <b>Создать</b>.<br>3. Перейдите <a href=\"%2$s\">YouTube Data API v3</a>.<br>4. Нажмите <b>Включить</b>.<br>5. Нажмите <b>Создать учетные данные</b>.<br>6. Выберите <b>Публичные данные</b>.<br>7. Нажмите <b>Далее</b>.<br>8. Скопируйте ключ API.<br><br>※ Ключом API нельзя поделиться, поэтому он не доступен в настройках Импорт/Экспорт. + Проблема с ключом разработчика \"RYU\" Data API v3 О \"Return YouTube Dislike\" Данные об отметках \"Не нравится\" предоставлены Return YouTube Dislike API.\nНажмите здесь, чтобы узнать больше. ReturnYouTubeDislike.com @@ -1317,6 +1350,9 @@ Shorts Кнопка \"Дизлайк\" скрыта. Кнопка \"Дизлайк\" отображена. Включить Return YouTube Dislike + Соотношение лайков скрыто. + Соотношение лайков отображено. + Соотношение лайков Return YouTube Dislike недоступен (достигнут лимит клиента API). Return YouTube Dislike недоступен (статус %d). Return YouTube Dislike недоступен (время ожидания API истекло). @@ -1332,8 +1368,12 @@ Shorts Уведомление при недоступности Return YouTube Dislike API отключено. Уведомление при недоступности Return YouTube Dislike API включено. Уведомление при недоступности Return YouTube Dislike API + Скрыто владельцем Убирает параметры отслеживания запросов из URL при отправке ссылки. Очистить ссылки при отправке + "Фильтр фраз типа \"#\", \"Магазин\" и \"N продуктов\" в субтитрах включен." + "Фильтр фраз типа \"#\", \"Магазин\" и \"N продуктов\" в субтитрах отключен." + Фильтр фраз в субтитрах О \"SponsorBlock\" Об API (sponsor.ajay.app) Данные предоставлены SponsorBlock API. Нажмите здесь, чтобы узнать больше и скачать версии для других платформ. @@ -1569,6 +1609,7 @@ Shorts 18.33.40 - Восстановление старой панели действий Shorts 18.38.45 - Восстановление старого поведения качества видео по умолчанию 18.48.39 - Отключение обновления \"просмотров\" и \"лайков\" в реальном времени + 19.13.37 - Старый стиль анимаций - вращающиеся цифры Целевая версия приложения при подмене Введите целевую версию приложения для подмены. Целевая версия подмены @@ -1599,11 +1640,19 @@ AVC (H.264) имеет максимальное разрешение 1080p, и Подмена потоковых данных включена. Подмена потоковых данных Android + Android Создатель + Встроенный Android плеер + Android Тестовый набор Android TV Android VR iOS + TV HTML5 + Веб Клиент по умолчанию Отключение этой настройки вызовет проблемы с воспроизведением видео. + Значение должно быть от 1 до 1000 (%). + Настройка чувствительности жеста яркости от 1 до 1000 (%). + Чувствительность жеста яркости Жесты в режиме \"Блокировка экрана\" отключены. Жесты в режиме \"Блокировка экрана\" включены. Жесты в режиме \"Блокировка экрана\" @@ -1619,6 +1668,11 @@ AVC (H.264) имеет максимальное разрешение 1080p, и Размер текста при жесте Количество миллисекунд отображения наложения. Таймаут наложения при жесте + Значение должно быть от 1 до 1000 (%). + Настройка чувствительности жеста громкости от 1 до 1000 (%). + +Рекомендованная чувствительность жеста 100% при шаге 15 громкости и 10% при шаге 150 громкости. + Чувствительность жеста громкости "Подмена осуществляется с помощью подмены габаритов устройства. • Если подмена кнопки не происходит, перезагрузите устройство. @@ -1636,6 +1690,7 @@ AVC (H.264) имеет максимальное разрешение 1080p, и Если эта настройка не вступила в силу, попробуйте перейти в режим инкогнито." По умолчанию RVX Music + Предупреждение %s не установлен. Установите его. Название пакета установленной RVX Music. Имя пакета RVX Music diff --git a/src/main/resources/youtube/translations/tr-rTR/missing_strings.xml b/src/main/resources/youtube/translations/tr-rTR/missing_strings.xml index 714ab4080..9293ac240 100644 --- a/src/main/resources/youtube/translations/tr-rTR/missing_strings.xml +++ b/src/main/resources/youtube/translations/tr-rTR/missing_strings.xml @@ -41,11 +41,19 @@ Limitation: This setting may not apply to videos that do not include the 'Listen • Video playback will use more internet data than VP9. • VP9 codec is still used for HDR video." Disable VP9 codec + "There is a YouTube server-side bug that causes rolling number text such as likes, views, and upload dates to be hidden for some users. + +A temporary workaround for this issue is to spoof the app version to 19.13.37. + +Do you want to spoof the app version before restarting the app?" Package name of your installed external downloader app, such as YTDLnis. Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore + Highlighted search links are shown. + Highlighted search links are hidden. + Hide highlighted search links Expandable shelves are shown. Expandable shelves are hidden. Hide expandable shelves @@ -145,6 +153,12 @@ If the layout of the player screen changes due to server-side changes, unintende Search suggestions button is shown. Search suggestions button is hidden. Hide search suggestions button + Shown in channel. + "Hidden in channel. + +Info: +• Only shelves with the Shorts header on the home tab are hidden." + Hide in channel Shopping button is shown. Stickers are shown. Stickers are hidden. @@ -155,10 +169,6 @@ If the layout of the player screen changes due to server-side changes, unintende Use this sound button is shown. Use this sound button is hidden. Hide Use this sound button - "Hide videos with UPCOMING label. - -Note: Enabling this also hides the Notify me button." - Hide UPCOMING video "Home / Subscription / Search results are filtered to hide videos with views less or greater than a specified number. Limitations: @@ -214,6 +224,10 @@ If a YouTube Doodle is currently showing in your region and this setting is on, A toast will not be shown when changing the default video quality. A toast will be shown when changing the default video quality. Show a toast + @handle (Username) + Display format + Username (@handle) + Username Handle is used. Username is used. Enable Return YouTube Username @@ -231,6 +245,9 @@ Click to see how to issue a API key." Estimated likes are shown. Show estimated likes Hidden + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were shown from the video subtitles." + "Phrases like '#', 'Fundraiser', 'Shop' and 'products' were hidden from the video subtitles." + Sanitize video subtitle Invalid time duration. Adjust: Mark Start and End Time for segment Verify the Segment @@ -271,6 +288,12 @@ AVC (H.264) has a maximum resolution of 1080p, and video playback will use more iOS Default client Turning off this setting may cause video playback issues. + Brightness swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for brightness swiping between 1 and 1000 (%).\nThe shorter the minimum distance, the faster the brightness level changes. + Brightness swipe sensitivity + Volume swipe sensitivity must be between 1-1000 (%). + Configure the minimum distance for volume swiping between 1 and 1000 (%).\n\nThe shorter the minimum distance, the faster the volume level changes.\n\nRecommended volume swipe sensitivity is 100% at 15-volume steps and 10% at 150-volume steps. + Volume swipe sensitivity Create button is not switched with Notifications button. "Create button is switched with Notifications button. diff --git a/src/main/resources/youtube/translations/tr-rTR/strings.xml b/src/main/resources/youtube/translations/tr-rTR/strings.xml index 49eb0bb15..c963c18c5 100644 --- a/src/main/resources/youtube/translations/tr-rTR/strings.xml +++ b/src/main/resources/youtube/translations/tr-rTR/strings.xml @@ -1,4 +1,4 @@ - + Video oynatıcı için erişilebilirlik kontrolleri açılsın mı? Bir erişilebilirlik hizmeti açık olduğundan kontrolleriniz değiştirildi. diff --git a/src/main/resources/youtube/translations/uk-rUA/missing_strings.xml b/src/main/resources/youtube/translations/uk-rUA/missing_strings.xml deleted file mode 100644 index f82015e55..000000000 --- a/src/main/resources/youtube/translations/uk-rUA/missing_strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - MMT Orange - MMT Pink - MMT Turquoise - diff --git a/src/main/resources/youtube/translations/uk-rUA/strings.xml b/src/main/resources/youtube/translations/uk-rUA/strings.xml index fe4f4a895..d826bed45 100644 --- a/src/main/resources/youtube/translations/uk-rUA/strings.xml +++ b/src/main/resources/youtube/translations/uk-rUA/strings.xml @@ -1,4 +1,4 @@ - + Увімкнути спеціальні можливості для відеоплеєра? Керування змінено, оскільки служба спеціальних можливостей увімкнена. @@ -315,6 +315,11 @@ Бажаєте продовжити? Скинуто. Перезапустіть, щоб нормально завантажився макет + "Помилка зі сторони сервера YouTube спричиняє приховування тексту лічильників таких як вподобайки, перегляди, та дати завантаження для деяких користувачів. + +Тимчасовим вирішенням цієї проблеми є підміна версії програми на 19.13.37. + +Бажаєте підмінити версію програми перед перезапуском програми?" Поновити й перезапустити Не вдалося експортувати налаштування. Налаштування було вдало експортовано. @@ -417,6 +422,9 @@ Кнопку створення Shorts показується. Кнопку створення Shorts приховано. Приховати кнопку створення Shorts + Виділені пошукові посилання показується. + Виділені пошукові посилання приховано. + Приховати виділені пошукові посилання Кнопку подяки показується. Кнопку подяки приховано. Приховати кнопку подяки @@ -924,6 +932,12 @@ Кнопку Поділитися показується. Кнопку Поділитися приховано. Приховати кнопку Поділитися + Показується в каналі. + "Приховується в каналі. + +Інформація: +• Лише полиці з заголовком Shorts на головній вкладці приховано." + Приховати у каналі Показується в історії перегляду. Приховано в історії перегляду. Приховати в історії перегляду @@ -1030,10 +1044,6 @@ Секції Текст відео показується. Секції Текст відео приховано. Приховати секції Текст відео - "Приховати відео з міткою НЕЗАБАРОМ. - -Примітка: Увімкнення також приховає кнопку Сповістити." - Приховати відео НЕЗАБАРОМ Відеорекламу показується. Відеорекламу приховано. Приховати відеорекламу @@ -1301,6 +1311,10 @@ Старе меню якості відео не показується. Старе меню якості відео показується. Відновити старе меню якості відео + \@ідентифікатор (Назва користувача) + Формат відображення + Назва користувача (@ідентифікатор) + Назва користувача Використовується ідентифікатор. Використовується назву користувача. Ввімкнути Повернення назви користувача YouTube @@ -1328,7 +1342,7 @@ Ввімкнути повернення дизлайків YouTube Розрахункові лайки приховано. Розрахункові лайки показується. - Увімкнути розрахункові лайки + Показувати розрахункові лайки Дизлайки недоступні (досягнутий ліміт клієнта API) Дизлайки недоступні (статус %d). Дизлайки тимчасово недоступні (закінчився час API). @@ -1346,6 +1360,9 @@ Приховано Вилучає параметри запиту відстеження з посилань під час поширення посилань. Обробляти поширення посилань + "Фрази типу '#', 'Збір коштів', 'Магазин' та 'товари' показується в субтитрах відео." + "Фрази типу '#', 'Збір коштів', 'Магазин' та 'товари' приховано з субтитрів відео." + Обробляти субтитри відео Про Спонсорблок sponsor.ajay.app Дані надаються Спонсорблок API. Натисніть тут, щоб дізнатися більше та побачити завантаження для інших платформ @@ -1619,11 +1636,19 @@ AVC (H.264) має максимальну роздільну здатність Дані трансляції підроблено. Підробити дані трансляції Android + Розробник Android + Вбудований плеєр Android + Тестовий Android Android TV Android VR iOS + TV HTML5 + Web Основний клієнт Вимикання цього налаштування може призвести до проблем відтворення відео. + Чутливість жесту яскравості повинна бути в межах 1-1000 (%). + Налаштуйте мінімальну відстань жесту яскравості від 1 до 1000 (%).\nЧим менша мінімальна відстань, тим швидше змінюється рівень яскравості. + Чутливість жесту яскравості Жести переміщення вимкнено в режимі \'Блокування екрана\'. Жести переміщення увімкнено в режимі \'Блокування екрана\'. Жести переміщення в режимі \'Блокування екрана\' @@ -1639,6 +1664,9 @@ AVC (H.264) має максимальну роздільну здатність Розмір шрифту панелі Скільки мілісекунд панель буде показуватися Час показу панелі + Чутливість жесту гучності повинна бути в межах 1-1000 (%). + Налаштуйте мінімальну відстань жесту гучності від 1 до 1000 (%).\n\nЧим менша мінімальна відстань, тим швидше змінюється рівень гучності.\n\nРекомендована чутливість жесту гучності 100% при 15 поділках і 10% при 150 поділках. + Чутливість жесту гучності "Поміняти місцями кнопку створення та кнопку сповіщення підробленням інформації про пристрій. • Навіть якщо ви зміните це налаштування, воно може не набути чинності, доки ви не перезапустите пристрій. @@ -1656,6 +1684,7 @@ AVC (H.264) має максимальну роздільну здатність Якщо це налаштування не діє, спробуйте перемкнути Анонімний режим." Стандартна RVX Music + Зауваження %s не встановлено. Будь ласка, встановіть. Назва пакету встановленого RVX Music. Назва пакету RVX Music diff --git a/src/main/resources/youtube/translations/vi-rVN/missing_strings.xml b/src/main/resources/youtube/translations/vi-rVN/missing_strings.xml index 7235bbe40..a0dadfc3c 100644 --- a/src/main/resources/youtube/translations/vi-rVN/missing_strings.xml +++ b/src/main/resources/youtube/translations/vi-rVN/missing_strings.xml @@ -2,19 +2,10 @@ Don\'t show again Courses / Learning - Chapters are enabled in the seekbar. - Chapters are disabled in the seekbar. - Disable seekbar chapters Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name Displays the optimization dialog for GMSCore at each application startup. Show optimization dialog for GMSCore - 1080p Premium menu is shown. - 1080p Premium menu is hidden. - Hide 1080p Premium menu - Chapter labels next to the timestamp are shown. - Chapter labels next to the timestamp are hidden. - Hide seekbar chapter labels MMT Blue MMT Green MMT Orange @@ -25,29 +16,10 @@ Vanced Black Vanced Light Xisr Yellow - Return YouTube Username - Handle is used. - Username is used. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Estimated likes are hidden. - Estimated likes are shown. - Show estimated likes - Hidden Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment Forward by Specified Time (Default: 150ms) Publish Created Segment Rewind by Specified Time (Default: 150ms) - 19.13.37 - Restore old style Rolling number animations diff --git a/src/main/resources/youtube/translations/vi-rVN/strings.xml b/src/main/resources/youtube/translations/vi-rVN/strings.xml index b8dc028a4..e282a79cf 100644 --- a/src/main/resources/youtube/translations/vi-rVN/strings.xml +++ b/src/main/resources/youtube/translations/vi-rVN/strings.xml @@ -1,4 +1,4 @@ - + Bật các điều khiển trợ năng cho trình phát video? Các điều khiển của bạn đã được sửa đổi vì dịch vụ trợ năng đang bật. @@ -23,9 +23,9 @@ Nếu được bật, chỉ có URL video được gửi đến máy chủ API, Nhấn vào đây để tìm hiểu thêm về DeArrow." Giới thiệu về DeArrow URL của API DeArrow không hợp lệ. - URL điểm cuối của bộ nhớ đệm hình thu nhỏ DeArrow. Không thay đổi URL này trừ khi bạn biết mình đang làm gì. + URL của điểm cuối của bộ nhớ đệm hình thu nhỏ DeArrow. Điểm cuối API DeArrow - Thông báo ngắn nếu API DeArrow không khả dụng đã tắt. + Không hiện thông báo ngắn nếu API DeArrow không khả dụng. Hiển thị thông báo ngắn nếu API DeArrow không khả dụng. Thông báo ngắn nếu API không khả dụng DeArrow tạm thời không khả dụng (Mã trạng thái: %s). @@ -36,27 +36,27 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow." DeArrow & Hình thu nhỏ gốc DeArrow & Hình thu nhỏ tự động Hình thu nhỏ tự động - Danh sách phát, video đề xuất, video liên quan + Danh sách phát của trình phát, đề xuất Kết quả tìm kiếm Hình thu nhỏ tự động Hình thu nhỏ tự động là ảnh tĩnh ở đầu, giữa hoặc cuối video, được tạo tự động bởi YouTube và không sử dụng bất kỳ API bên ngoài nào. Giới thiệu về Hình thu nhỏ tự động Đang sử dụng ảnh tĩnh chất lượng cao làm hình thu nhỏ video. - Đang sử dụng ảnh tĩnh chất lượng trung bình làm hình thu nhỏ video. Hình thu nhỏ sẽ tải nhanh hơn, tuy nhiên các sự kiện trực tiếp, video sắp xuất bản và video đã rất cũ có thể hiển thị hình thu nhỏ trống. + Đang sử dụng ảnh tĩnh chất lượng trung bình làm hình thu nhỏ video. Hình thu nhỏ sẽ tải nhanh hơn, tuy nhiên các sự kiện trực tiếp, sắp diễn ra và video đã rất cũ có thể hiển thị hình thu nhỏ trống. Hình thu nhỏ nhanh Đầu video Giữa video Cuối video Thời điểm để lấy ảnh tĩnh từ video Thẻ Kênh đăng ký - Thông tin không còn được thêm vào mốc thời gian. - Thông tin được thêm vào mốc thời gian. - Thêm thông tin vào mốc thời gian + Thông tin không còn được thêm vào dấu thời gian. + Thông tin được thêm vào dấu thời gian. + Thêm thông tin vào dấu thời gian Thêm Tốc độ phát. Thêm Chất lượng video. Loại thông tin cần thêm - Chế độ môi trường xung quanh đang vô hiệu hoá trong chế độ tiết kiệm pin. - Chế độ môi trường xung quanh đã được kích hoạt trong chế độ tiết kiệm pin. + Chế độ môi trường xung quanh sẽ bị vô hiệu hoá trong chế độ tiết kiệm pin. + Chế độ môi trường xung quanh vẫn được kích hoạt trong Chế độ tiết kiệm pin. Không giới hạn Chế độ môi trường xung quanh Tên miền để tìm nạp hình ảnh.\nLưu ý: Chỉ nhập tên miền, không có tiền tố \"https://\" Tên miền thay thế @@ -68,7 +68,7 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow." Điện thoại (Tối đa 480 dpi) Máy tính bảng Máy tính bảng (Tối thiểu 600 dpi) - Thay đổi bố cục + Thay đổi giao diện Đang sử dụng kiểu bật/tắt tuỳ chọn dạng công tắc. Đang sử dụng kiểu bật/tắt tuỳ chọn dạng văn bản. Đổi kiểu bật/tắt tuỳ chọn @@ -100,13 +100,13 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow." Trang khởi động chỉ thay đổi một lần. "Trang khởi động sẽ liên tục thay đổi. -Hạn chế: Nút Quay lại trên thanh công cụ có thể không hoạt động được." - Thay đổi trang khởi động +Hạn chế: Nút Quay lại trên thanh công cụ có thể không hoạt động." + Thay đổi kiểu trang khởi động Tiêu đề Youtube mặc định. Tiêu đề Premium được kích hoạt. Thay đổi tiêu đề YouTube Nhập tên các mục mà bạn muốn lọc được phân cách bằng dòng. - Chỉnh sửa bộ lọc + Cài đặt bộ lọc Bộ lọc tuỳ chỉnh đã tắt. Bộ lọc tuỳ chỉnh đã bật. Bộ lọc tuỳ chỉnh @@ -123,22 +123,22 @@ Hạn chế: Nút Quay lại trên thanh công cụ có thể không hoạt đ Độ mờ lớp phủ trình phát Nhập mã màu hex của thanh tiến trình video mà bạn muốn thay đổi. Thay đổi màu thanh tiến trình - Để mở liên kết YouTube trong RVX, hãy kích hoạt \'Mở liên kết được hỗ trợ\' và bật các địa chỉ web được hỗ trợ. + Để mở liên kết YouTube trong RVX, hãy kích hoạt \'Mở các đường liên kết được hỗ trợ\' và thêm các đường liên kết được hỗ trợ. Mở theo mặc định Tốc độ phát mặc định Chất lượng video mặc định trên mạng di động Chất lượng video mặc định trên mạng Wi-Fi Tắt chế độ môi trường xung quanh khi xem video ở chế độ toàn màn hình. Chế độ môi trường xung quanh đã được kích hoạt ở chế độ toàn màn hình. - Chế độ môi trường xung quanh đã được vô hiệu hoá ở chế độ toàn màn hình. + Chế độ môi trường xung quanh sẽ bị vô hiệu hoá ở chế độ toàn màn hình. Tắt chế độ môi trường khi toàn màn hình Luôn tắt chế độ môi trường xung quanh. Chế độ môi trường xung quanh đã được kích hoạt. Chế độ môi trường xung quanh đã được vô hiệu hoá. Tắt chế độ môi trường xung quanh - Buộc tự động phát bản âm thanh đã được bật. - Buộc tự động phát bản âm thanh đã bị tắt. - Tắt buộc tự động phát bản âm thanh + Tự động phát bản âm thanh khi phát video có bản âm thanh đã bật. + Tự động phát bản âm thanh khi phát video có bản âm thanh đã tắt. + Tắt tự động phát bản âm thanh Tự động hiển thị phụ đề khi phát video có phụ đề đã bật. Tự động hiển thị phụ đề khi phát video có phụ đề đã tắt. Tắt tự động hiển thị phụ đề @@ -163,19 +163,19 @@ Hạn chế: Cài đặt này có thể sẽ không áp dụng cho các video kh Bảng điều khiển tương tác đã được bật. Bảng tương tác đã vô hiệu hóa. Vô hiệu hóa bảng tương tác - Phản hồi xúc giác được kích hoạt. + Phản hồi xúc giác được bật. Phản hồi xúc giác đã tắt. - Tắt phản hồi xúc giác trong các chương - Phản hồi xúc giác được kích hoạt. + Tắt phản hồi xúc giác khi chuyển chương + Phản hồi xúc giác được bật. Phản hồi xúc giác đã tắt. Tắt phản hồi xúc giác khi đăng ký kênh - Phản hồi xúc giác được kích hoạt. + Phản hồi xúc giác được bật. Phản hồi xúc giác đã tắt. Tắt phản hồi xúc giác khi trượt để tua - Phản hồi xúc giác được kích hoạt. + Phản hồi xúc giác được bật. Phản hồi xúc giác đã tắt. Tắt phản hồi xúc giác khi huỷ tua - Phản hồi xúc giác được kích hoạt. + Phản hồi xúc giác được bật. Phản hồi xúc giác đã tắt. Tắt phản hồi xúc giác khi chụm để thu phóng Độ sáng HDR tự động đã bật. @@ -194,10 +194,13 @@ Hạn chế: Cài đặt này có thể sẽ không áp dụng cho các video kh Vô hiệu hoá giao thức QUIC Trinh phát Shorts sẽ tiếp tục khi ứng dụng khởi chạy. Trinh phát Shorts sẽ không tiếp tục khi ứng dụng khởi chạy. - Tắt tính năng tiếp tục trình phát - Đã bật Hoạt ảnh số cuộn. - Đã tắt Hoạt ảnh số cuộn. - Tắt hoạt ảnh số cuộn + Tắt tính năng tiếp tục phát video Shorts + Đã kích hoạt hoạt ảnh Số cuộn. + Đã vô hiệu hoá hoạt ảnh Số cuộn. + Vô hiệu hoá hoạt ảnh Số cuộn + Các Chương đã được kích hoạt trên thanh tiến trình. + Các Chương đã bị vô hiệu hoá trên thanh tiến trình. + Vô hiệu hoá các Chương trong thanh tiến trình Đã kích hoạt hiệu ứng phun nước trên nút Thích. Đã vô hiệu hoá hiệu ứng phun nước trên nút Thích. Vô hiệu hoá hiệu ứng nút Thích @@ -206,10 +209,10 @@ Hạn chế: Cài đặt này có thể sẽ không áp dụng cho các video kh Lưu ý: • Vô hiệu hoá lớp phủ tốc độ phát sẽ khôi phục lại thao tác trượt để tua giống bố cục cũ. • Tắt cài đặt này có thể không cưỡng ép bật lại lớp phủ tốc độ phát." - Tắt nhấn và giữ để phát nhanh 2x - Ảnh động khởi chạy đã bật. - Ảnh động khởi chạy đã tắt. - Tắt ảnh động khởi chạy + Vô hiệu hoá nhấn giữ để phát 2x>> + Đã kích hoạt hoạt ảnh khởi động. + Đã vô hiệu hoá hoạt ảnh khởi động. + Vô hiệu hoá hoạt ảnh khởi động "Tắt các tương tác sau khi mô tả video được mở rộng: • Nhấn để cuộn. @@ -222,11 +225,11 @@ Lưu ý: • Việc phát video sẽ sử dụng nhiều dữ liệu di động hơn so với VP9. • Bộ giải mã VP9 vẫn được sử dụng cho video HDR." Vô hiệu hoá bộ giải mã VP9 - Thanh điều hướng kiểu Cairo đã được vô hiệu hoá. - "Thanh điều hướng kiểu Cairo đã được bật + Thanh tiến trình kiểu Cairo đã bị vô hiệu hoá. + "Thanh tiến trình kiểu Cairo đã được kích hoạt. -Hạn chế: Chủ đề Cairo cũng được áp dụng cho dấu chấm thông báo của ứng dụng." - Sử dụng thanh điều hướng kiểu Cairo +Hạn chế: Chủ đề Cairo cũng sẽ áp dụng cho dấu chấm thông báo của ứng dụng." + Kích hoạt thanh tiến trình kiểu Cairo Lớp phủ điều khiển trình phát thu gọn đã tắt. Lớp phủ điều khiển trình phát thu gọn đã bật. Lớp phủ điều khiển trình phát thu gọn @@ -234,8 +237,8 @@ Hạn chế: Chủ đề Cairo cũng được áp dụng cho dấu chấm thông Đang áp dụng các giá trị tốc độ phát video tùy chỉnh. Tốc độ phát tùy chỉnh Đang sử dụng màu thanh tiến trình video mặc định. - Đang sử dụng màu thanh tiến trình video tùy chỉnh. - Màu thanh tiến trình tùy chỉnh + Đang sử dụng màu thanh tiến trình video tuỳ chỉnh. + Màu thanh tiến trình tuỳ chỉnh Đang ghi nhật ký gỡ lỗi mà không có thông tin bộ đệm. Đang ghi nhật ký gỡ lỗi bao gồm thông tin bộ đệm. Nhật ký gỡ lỗi bộ đệm @@ -248,68 +251,68 @@ Hạn chế: Chủ đề Cairo cũng được áp dụng cho dấu chấm thông Đang mở các liên kết xuất hiện trên YouTube trong ứng dụng. Đang mở các liên kết xuất hiện trên YouTube bằng trình duyệt bên ngoài. Mở liên kết bằng trình duyệt bên ngoài - Màn hình tải màu gradient đã tắt. - Màn hình tải màu gradient đã bật. + Đã vô hiệu hoá màn hình tải màu Gradient. + Đã kích hoạt màn hình tải màu Gradient. Màn hình tải màu gradient - Thanh điều hướng thu gọn đã tắt. - Thanh điều hướng thu gọn đã bật. Khoảng cách giữa các nút trên thanh điều hướng sẽ hẹp hơn. - Thanh điều hướng thu gọn + Khoảng cách giữa các nút trên thanh điều hướng về mặc định. + Khoảng cách giữa các nút trên thanh điều hướng sẽ hẹp hơn. + Nút điều hướng thu gọn Đang chuyển hướng URL khi mở các liên kết xuất hiện trên YouTube. Đang bỏ qua chuyển hướng URL khi mở các liên kết xuất hiện trên YouTube. Mở liên kết trực tiếp Kích hoạt bộ giải mã OPUS nếu phản hồi của trình phát bao gồm bộ giải mã OPUS. Kích hoạt bộ giải mã OPUS - Không lưu và khôi phục độ sáng khi thoát ra hoặc vào chế độ toàn màn hình. - Lưu và khôi phục độ sáng khi thoát ra hoặc vào chế độ toàn màn hình. - Bật lưu và khôi phục độ sáng + Không lưu độ sáng khi thoát ra hoặc vào chế độ toàn màn hình. + Lưu độ sáng khi thoát ra hoặc vào chế độ toàn màn hình. + Lưu độ sáng Chạm thanh tiến trình video để tua đã tắt. Chạm thanh tiến trình video để tua đã bật. Chạm thanh tiến trình để tua - Đã vô hiệu hoá Mốc thời gian. - "Đã kích hoạt Mốc thời gian. + Đã vô hiệu hoá Dấu thời gian. + "Đã kích hoạt Dấu thời gian. Hạn chế: -• Cài đặt này không chỉ kích hoạt Mốc thời gian mà còn cho phép ẩn giao diện người dùng bằng cách nhấn vào nền trình phát. +• Cài đặt này không chỉ kích hoạt Dấu thời gian mà còn cho phép ẩn giao diện người dùng bằng cách nhấn vào nền trình phát. • Vì đây là tính năng đang trong giai đoạn phát triển của Google nên bố cục có thể bị hỏng." - Bật Mốc thời gian - Cử chỉ vuốt Độ sáng đã tắt. - Cử chỉ vuốt Độ sáng đã bật. - Vuốt Độ sáng + Bật Dấu thời gian + Đã vô hiệu hoá cử chỉ vuốt điều chỉnh độ sáng. + Đã kích hoạt cử chỉ vuốt điều chỉnh độ sáng. + Vuốt điều chỉnh độ sáng Phản hồi xúc giác đã tắt. Phản hồi xúc giác đã bật. Phản hồi xúc giác - Giá trị thấp nhất của cử chỉ độ sáng không kích hoạt độ sáng tự động. - Giá trị thấp nhất của cử chỉ độ sáng sẽ kích hoạt độ sáng tự động. - Bật cử chỉ điều chỉnh độ sáng tự động - Nhấn và giữ để vuốt đã tắt. - Nhấn và giữ để kích hoạt cử chỉ vuốt. + Chế độ độ sáng tự động sẽ không được bật khi vuốt độ sáng về mức tổi thiểu. + Chế độ độ sáng tự động sẽ được bật khi vuốt độ sáng về mức tổi thiểu. + Cử chỉ điều chỉnh độ sáng tự động + Nhấn và giữ để vuốt đã bị vô hiệu hoá. + Nhấn và giữ để vuốt đã được kích hoạt. Nhấn và giữ để vuốt - Vuốt lên/xuống sẽ không phát video tiếp theo/trước đó. - Vuốt lên/xuống sẽ phát video tiếp theo/trước đó. - Kích hoạt vuốt để chuyển video - Cử chỉ vuốt Âm lượng đã tắt. - Cử chỉ vuốt Âm lượng đã bật. - Vuốt Âm lượng + Vuốt lên/xuống sẽ không phát video tiếp theo hoặc trước đó. + Vuốt lên/xuống sẽ phát video tiếp theo hoặc trước đó. + Vuốt để chuyển video + Đã vô hiệu hoá cử chỉ vuốt điều chỉnh âm lượng. + Đã kích hoạt cử chỉ vuốt điều chỉnh âm lượng. + Vuốt điều chỉnh âm lượng Thanh điều hướng đã được hiển thị. Thanh điều hướng đã được làm trong suốt. Kích hoạt thanh điều hướng trong suốt - Cử chỉ vuốt xuống từ khu vực bên dưới trình phát để xem ở chế độ toàn màn hình dọc đã tắt. - Cử chỉ vuốt xuống từ khu vực bên dưới trình phát để xem ở chế độ toàn màn hình dọc đã bật. + Đã vô hiệu hoá cử chỉ vuốt xuống từ khu vực bên dưới trình phát để xem ở chế độ toàn màn hình dọc. + Đã kích hoạt cử chỉ vuốt xuống từ khu vực bên dưới trình phát để xem ở chế độ toàn màn hình dọc. Cử chỉ bên dưới trình phát - "Bật thanh tìm kiếm rộng trên thẻ Bạn. + "Bật cài đặt này sẽ làm vô hiệu hoá nút Cài đặt trong thẻ Bạn. -Tuỳ chọn này sẽ ẩn nút Cài đặt trên thẻ Bạn. Để truy cập phần Cài đặt, vui lòng làm theo các bước sau: -Thẻ Bạn → Xem kênh → Trình đơn → Cài đặt." +Trong trường hợp đó, vui lòng làm theo các bước sau để truy cập Cài đặt: +Thẻ Bạn → Xem kênh → Trình đơn → Cài đặt" Thanh tìm kiếm rộng trên thẻ Bạn - Thanh tìm kiếm rộng đã tắt. - Thanh tìm kiếm rộng đã bật. + Đang áp dụng thanh tìm kiếm mặc định. + Đang áp dụng thanh tìm kiếm rộng. Thanh tìm kiếm rộng - Thanh tìm kiếm rộng với tiêu đề YouTube đã tắt. - Thanh tìm kiếm rộng với tiêu đề YouTube đã bật. + Thanh tìm kiếm rộng sẽ ẩn tiêu đề YouTube. + Thanh tìm kiếm rộng đồng thời với tiêu đề YouTube. Thanh tìm kiếm rộng với tiêu đề YouTube Mô tả "Nhập tiêu đề vào bảng mô tả video. -Mở rộng mô tả video có thể không hoạt động nếu bạn lưu chuỗi không chính xác." +Mở rộng mô tả video có thể không hoạt động nếu bạn nhập nội dung không khớp với tiêu đề thực tế của bảng mô tả video." Tiêu đề trong bảng mô tả video Mô tả video được mở rộng thủ công. Mô tả video được mở rộng tự động. @@ -317,6 +320,11 @@ Mở rộng mô tả video có thể không hoạt động nếu bạn lưu chu Bạn có muốn tiếp tục không? Đặt lại về giá trị mặc định. Vui lòng khởi động lại ứng dụng trong lần đầu khởi chạy để các tính năng hoạt động bình thường + "Hiện có một lỗi phía máy chủ YouTube khiến các văn bản dạng số cuộn như số lượt thích, số lượt xem và ngày tải lên bị ẩn đối với một số người dùng. + +Giải pháp tạm thời cho sự cố này là giả mạo phiên bản ứng dụng thành 19.13.37. + +Bạn có muốn giả mạo phiên bản ứng dụng trước khi khởi động lại ứng dụng không?" Làm mới và khởi động lại Xuất cài đặt thất bại. Cài đặt đã được xuất thành công. @@ -334,12 +342,12 @@ Mở rộng mô tả video có thể không hoạt động nếu bạn lưu chu Đặt lại Tìm kiếm %s ReVanced Extended - Trình tải xuống bên ngoài + Trình tải xuống bên thứ ba Chưa được cài đặt - "%1$s chưa được cài đặt. + "Có vẻ như %1$s chưa được cài đặt. Vui lòng tải xuống %2$s từ trang web." - Cảnh báo - %s chưa được cài đặt. Hãy cài đặt và thử lại. + Chú ý + Hiện %s chưa được cài đặt. Hãy cài đặt và thử lại. Nhập tên gói ứng dụng trình tải xuống đã cài đặt trên thiết bị của bạn, chẳng hạn như YTDLnis. Tên gói trình tải xuống danh sách phát Nhập tên gói ứng dụng trình tải xuống đã cài đặt trên thiết bị của bạn, chẳng hạn như NewPipe hoặc YTDLnis. @@ -347,32 +355,33 @@ Mở rộng mô tả video có thể không hoạt động nếu bạn lưu chu "Video sẽ chuyển sang chế độ toàn màn hình trong các trường hợp sau: • Khi video bắt đầu. -• Khi nhấn vào mốc thời gian trong phần bình luận." +• Khi nhấn vào dấu thời gian trong phần bình luận." Buộc áp dụng chế độ toàn màn hình Nhập tên các mục thành phần của trình đơn Tài khoản mà bạn muốn lọc được phân cách bằng dòng. - Chỉnh sửa bộ lọc + Cài đặt bộ lọc "Ẩn các thành phần của trình đơn Tài khoản và thẻ Bạn. Một số thành phần có thể không bị ẩn." Bộ lọc trình đơn Tài khoản - Đĩa nhạc được hiển thị trong kết quả tìm kiếm. - Đĩa nhạc đã ẩn khỏi kết quả tìm kiếm. - Ẩn Đĩa nhạc - Phần \'Địa điểm nổi bật\', Trò chơi và Âm nhạc được hiện. - Phần \'Địa điểm nổi bật\', Trò chơi và Âm nhạc được ẩn. + Đã hiện thẻ album. + Đã ẩn thẻ album. + Ẩn thẻ album + Phần Địa điểm nổi bật, Trò chơi và Âm nhạc được hiển thị. + Phần Địa điểm nổi bật, Trò chơi và Âm nhạc đã ẩn. Ẩn phần Thuộc tính Bảng video tiếp theo được hiển thị ở màn hình kết thúc. Bảng video tiếp theo đã ẩn khỏi màn hình kết thúc. Ẩn bảng video tiếp theo - Nút Chuyển đến cửa hàng được hiển thị. - Nút Chuyển đến cửa hàng đã ẩn. + Đã hiện nút Chuyển đến cửa hàng. + Đã ẩn nút Chuyển đến cửa hàng. Ẩn nút Chuyển đến cửa hàng "Ẩn các kệ sau: - • Tin nổi bật - • Tiếp tục xem - • Khám phá thêm kênh - • Nghe lại - • Mua sắm - • Xem lại" + +• Tin nổi bật +• Tiếp tục xem +• Khám phá thêm kênh +• Nghe lại +• Mua sắm +• Xem lại" Ẩn các kệ được cá nhân hoá Thanh danh mục được hiển thị trong bảng tin. Thanh danh mục đã ẩn trong bảng tin. @@ -392,22 +401,22 @@ Một số thành phần có thể không bị ẩn." Các đường liên kết ở đầu hồ sơ kênh được hiển thị. Các đường liên kết ở đầu hồ sơ kênh đã ẩn. Ẩn đường liên kết trên hồ sơ kênh - "Video ngắn + "Shorts Danh sách phát Cửa hàng" Nhập tên các thẻ trên kênh mà bạn muốn lọc được phân cách bằng dòng. - Chỉnh sửa bộ lọc + Cài đặt bộ lọc Bộ lọc thẻ trên kênh đã tắt. Bộ lọc thẻ trên kênh đã bật. Bộ lọc thẻ trên kênh - Hình mờ video được hiển thị. - Hình mờ video đã ẩn. - Ẩn hình mờ video - Phần Chương được hiển thị. - Phần Chương được ẩn. + Hình mờ kênh được hiển thị. + Hình mờ của kênh đã ẩn. + Ẩn hình mờ của kênh + Phần Chương đã hiển thị. + Phần Chương đã ẩn. Ẩn phần Chương - Kệ danh mục được đề xuất được hiển thị. - Kệ danh mục được đề xuất đã ẩn. + Đã hiện kệ danh mục được đề xuất. + Đã ẩn kệ danh mục được đề xuất. Ẩn kệ danh mục được đề xuất Nút Tạo đoạn video được hiển thị. Nút Tạo đoạn video đã ẩn. @@ -415,12 +424,15 @@ Cửa hàng" Đã hiện nút Tạo video ngắn. Đã ẩn nút Tạo video ngắn. Ẩn nút Tạo video ngắn + Bình luận chữ xanh đã được hiển thị. + Bình luận chữ xanh đã bị ẩn. + Ẩn bình luận chữ xanh Nút Cảm ơn được hiển thị. Nút Cảm ơn đã ẩn. Ẩn nút Cảm ơn - Mốc thời gian và các nút Biểu tượng cảm xúc được hiển thị. - Mốc thời gian và các nút biểu tượng cảm xúc đã ẩn. - Ẩn mốc thời gian và các nút biểu tượng cảm xúc + Dấu thời gian và các nút Biểu tượng cảm xúc được hiển thị. + Dấu thời gian và các nút Biểu tượng cảm xúc đã ẩn. + Ẩn dấu thời gian và các nút Biểu tượng cảm xúc Biểu ngữ Bình luận của hội viên được hiển thị. Biểu ngữ Bình luận của hội viên đã ẩn. Ẩn biểu ngữ Bình luận của hội viên @@ -451,34 +463,34 @@ Cửa hàng" Nút Tải xuống được hiển thị. Nút Tải xuống đã ẩn. Ẩn nút Tải xuống - Màn hình kết thúc được hiển thị. - Màn hình kết thúc đã ẩn. - Ẩn màn hình kết thúc - Bảng giới thiệu mở rộng được hiển thị bên dưới video. - Bảng giới thiệu mở rộng đã ẩn bên dưới video. + Đã hiện các thẻ màn hình kết thúc. + Đã ẩn các thẻ màn hình kết thúc. + Ẩn các thẻ màn hình kết thúc + Đã hiện bảng giới thiệu mở rộng bên dưới video. + Đã ẩn bảng giới thiệu mở rộng bên dưới video. Ẩn bảng giới thiệu mở rộng - Kệ Mở rộng đã hiển thị. - Kệ Mở rộng đã ẩn. + Đã hiện kệ Mở rộng. + Đã ẩn kệ Mở rộng. Ẩn kệ Mở rộng - Nút Phụ đề được hiển thị. - Nút Phụ đề đã ẩn. + Đã hiện nút Phụ đề. + Đã ẩn nút Phụ đề. Ẩn nút Phụ đề - Nhập tên các mục thành phần của mục tuỳ chọn mà bạn muốn lọc được phân cách bằng dòng. - Chỉnh sửa bộ lọc + Nhập tên các mục thành phần của trình đơn tuỳ chọn mà bạn muốn lọc được phân cách bằng dòng. + Cài đặt bộ lọc Bộ lọc trình đơn tuỳ chọn trên bảng tin đã tắt. Bộ lọc trình đơn tuỳ chọn trên bảng tin đã bật. - Bật bộ lọc trình đơn tuỳ chọn trên bảng tin + Bộ lọc trình đơn tuỳ chọn trên bảng tin Thanh tìm kiếm được hiển thị. - Thanh tìm kiếm đã ẩn. + Thanh tìm kiếm đã bị ẩn. Ẩn thanh tìm kiếm - Khảo sát được hiển thị. - Khảo sát đã ẩn. - Ẩn Khảo sát + Đã hiện khảo sát. + Đã ẩn khảo sát. + Ẩn khảo sát Tua chính xác đã bật. Tua chính xác đã tắt. Tắt tua chính xác - Nút Tìm kiếm bằng giọng nói được hiển thị khi tìm kiếm. - Nút Tìm kiếm bằng giọng nói đã ẩn khi tìm kiếm. + Đã ẩn nút Tìm kiếm bằng giọng nói. + Đã ẩn nút Tìm kiếm bằng giọng nói. Ẩn nút Tìm kiếm bằng giọng nói Kệ Dành cho bạn được hiển thị. Kệ Dành cho bạn đã ẩn. @@ -497,18 +509,18 @@ Hạn chế: Hình ảnh của bài đăng cộng đồng ở chế độ toàn Quảng cáo YouTube Premium được hiển thị. Quảng cáo YouTube Premium đã ẩn. Ẩn quảng cáo YouTube Premium - Dải phân cách màu xám được hiển thị. - Dải phân cách màu xám đã ẩn. + Đã hiện dải phân cách màu xám. + Đã ẩn dải phân cách màu xám. Ẩn dải phân cách màu xám - Tên người dùng được hiển thị. - Tên người dùng đã ẩn. - Ẩn tên người dùng + Tên hiển thị được hiển thị. + Tên hiển thị đã ẩn. + Ẩn tên hiển thị Nút tìm kiếm bằng hình ảnh được hiển thị. Nút tìm kiếm bằng hình ảnh đã bị ẩn. Ẩn nút tìm kiếm bằng hình ảnh - Kệ Hình ảnh từ web được hiển thị trong kết quả tìm kiếm. - Kệ Hình ảnh từ web đã ẩn khỏi kết quả tìm kiếm. - Ẩn kệ Hình ảnh từ web + Đã hiện kệ Hình ảnh. + Đã ẩn kệ Hình ảnh. + Ẩn kệ Hình ảnh Phần thẻ thông tin được hiển thị. Phần thẻ thông tin đã ẩn. Ẩn phần thẻ thông tin @@ -533,9 +545,9 @@ Hạn chế: Hình ảnh của bài đăng cộng đồng ở chế độ toàn Giới thiệu về lọc từ khoá Việc đặt từ/cụm từ cần lọc trong dấu ngoặc kép sẽ ngăn chặn các kết quả chỉ trùng một phần với tiêu đề video và tên kênh.<br><br>Ví dụ,<br><b>\"ai\"</b> sẽ ẩn video: <b>How does AI work?</b><br>nhưng sẽ không ẩn: <b>What does fair use mean?</b> Khớp toàn bộ từ - Bình luận không được lọc theo từ khoá đã đặt. - Bình luận đã được lọc theo từ khoá đã đặt. - Ẩn bình luận theo từ khoá + Các bình luận không được lọc theo từ khoá đã đặt. + Các bình luận đã được lọc theo từ khoá đã đặt. + Ẩn các bình luận theo từ khoá Các Video trên thẻ Trang chủ không được lọc theo từ khoá đã đặt. Các Video trên thẻ Trang chủ đã được lọc theo từ khoá đã đặt. Ẩn video trên thẻ Trang chủ theo từ khoá @@ -556,11 +568,11 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Hãy thêm dấu ngoặc kép để sử dụng từ khoá: %s. Từ khóa có các định nghĩa mâu thuẫn với nhau. %s. Từ khóa quá ngắn và cần phải có dấu ngoặc kép: %s. - Bài đăng mới nhất được hiển thị. - Bài đăng mới nhất đã ẩn. + Đã hiện bài đăng mới nhất. + Đã ẩn bài đăng mới nhất. Ẩn bài đăng mới nhất - Nút Video mới nhất được hiển thị. - Nút Video mới nhất đã ẩn. + Đã hiện nút Video mới nhất. + Đã ẩn nút Video mới nhất. Ẩn nút Video mới nhất Các nút Thích và Không thích được hiển thị. Các nút Thích và Không thích đã ẩn. @@ -579,49 +591,49 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Kệ Sản phẩm được hiển thị. Kệ Sản phẩm đã ẩn. Ẩn kệ Sản phẩm - Danh sách kết hợp được hiển thị. - Danh sách kết hợp đã ẩn. + Đã hiện Danh sách kết hợp. + Đã ẩn Danh sách kết hợp. Ẩn Danh sách kết hợp - Phim và chương trình truyền hình được hiển thị. - Phim và chương trình truyền hình đã ẩn. - Ẩn phim và chương trình truyền hình + Đã hiện kệ Phim và chương trình truyền hình. + Đã ẩn kệ Phim và chương trình truyền hình. + Ẩn kệ Phim và chương trình truyền hình Thanh điều hướng đã được hiển thị. Thanh điều hướng đã bị ẩn. Ẩn Thanh điều hướng - Nút Tạo được hiển thị. - Nút Tạo đã ẩn. + Đã hiện nút Tạo. + Đã ẩn nút Tạo. Ẩn nút Tạo - Nút Trang chủ được hiển thị. - Nút Trang chủ đã ẩn. + Đã hiện nút Trang chủ. + Đã ẩn nút Trang chủ. Ẩn nút Trang chủ - Tên nút được hiển thị. - Tên nút đã ẩn. - Ẩn tên nút - Nút Bạn được hiển thị. - Nút Bạn đã ẩn. + Đã hiện tên các thẻ. + Đã ẩn tên các thẻ. + Ẩn tên các thẻ + Đã hiện nút Bạn. + Đã ẩn nút Bạn. Ẩn nút Bạn - Nút Thông báo được hiển thị. - Nút Thông báo đã ẩn. + Đã hiện nút Thông báo. + Đã ẩn nút Thông báo. Ẩn nút Thông báo Đã hiện nút Shorts. Đã ẩn nút Shorts. Ẩn nút Shorts - Nút Kênh đăng ký được hiển thị. - Nút Kênh đăng ký đã ẩn. + Đã hiện nút Kênh đăng ký. + Đã ẩn nút Kênh đăng ký. Ẩn nút Kênh đăng ký - Nút Thông báo cho tôi được hiển thị bên dưới video sắp xuất bản. - Nút Thông báo cho tôi đã ẩn bên dưới video sắp xuất bản. + Đã hiện nút \'Thông báo cho tôi\' bên dưới video sắp diễn ra. + Đã ẩn nút \'Thông báo cho tôi\' bên dưới video sắp diễn ra. Ẩn nút Thông báo cho tôi Nhãn Nội dung được trả tiền để quảng cáo được hiển thị. Nhãn Nội dung được trả tiền để quảng cáo đã ẩn. Ẩn nhãn quảng cáo được tài trợ - Kệ Chơi game trên YouTube được hiển thị. - Kệ Chơi game trên YouTube đã ẩn. + Đã hiện kệ Chơi game trên YouTube. + Đã ẩn kệ Chơi game trên YouTube. Ẩn kệ Chơi game trên YouTube Nút Tự động phát được hiển thị. Nút Tự động phát đã ẩn. Ẩn nút Tự động phát - Nút phụ đề được hiển thị. + Nút Phụ đề được hiển thị. Nút Phụ đề đã ẩn. Ẩn nút Phụ đề Nút Truyền được hiển thị. @@ -642,9 +654,12 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Mục Phụ đề được hiển thị. Mục Phụ đề đã ẩn. Ẩn mục Phụ đề - Trợ giúp & Phản hồi được hiển thị. - Trợ giúp & Phản hồi đã ẩn. - Ẩn Trợ giúp & Phản hồi + Mục 1080p Premium đã hiển thị. + Mục 1080p Premium đã ẩn. + Ẩn mục 1080p Premium + Mục Trợ giúp & phản hồi được hiển thị. + Mục Trợ giúp & phản hồi đã ẩn. + Ẩn mục Trợ giúp & phản hồi Mục \'Nghe nhạc trên YouTube Music\' được hiển thị. Mục \'Nghe nhạc trên YouTube Music\' đã bị ẩn. Ẩn mục \'Nghe nhạc trên YouTube Music\' @@ -653,7 +668,7 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Ẩn mục Khoá màn hình Mục lặp lại video được hiển thị. Mục lặp lại video đã ẩn. - Ẩn mục Lặp lại video + Ẩn mục Cho video lặp lại Mục Nội dung khác từ kênh được hiển thị. Mục Nội dung khác từ kênh đã ẩn. Ẩn mục Nội dung khác từ kênh @@ -675,9 +690,9 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Mục Báo vi phạm được hiển thị. Mục Báo vi phạm đã ẩn. Ẩn mục Báo cáo - Mục Hẹn giờ đi ngủ đã hiển thị. - Mục Hẹn giờ đi ngủ đã ẩn. - Ẩn mục Hẹn giờ đi ngủ + Mục Hẹn giờ ngủ đã hiển thị. + Mục Hẹn giờ ngủ đã ẩn. + Ẩn mục Hẹn giờ ngủ Mục Âm lượng ổn định được hiển thị. Mục Âm lượng ổn định đã ẩn. Ẩn mục Âm lượng ổn định @@ -690,8 +705,8 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Nút Toàn màn hình được hiển thị. Nút Toàn màn hình đã ẩn. Ẩn nút Toàn màn hình - Các Nút được hiển thị. - Các Nút được ẩn. + Các nút được hiển thị. + Các nút đã ẩn. Ẩn các nút Chuyển đến video trước đó/tiếp theo Nút YouTube Music được hiển thị. Nút YouTube Music đã ẩn. @@ -711,8 +726,8 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Biểu ngữ thông báo khuyến mãi đã hiển thị. Biểu ngữ thông báo khuyến mãi đã ẩn. Ẩn biểu ngữ thông báo khuyến mãi - Nút bình luận được hiển thị. - Nút bình luận đã ẩn. + Nút Bình luận được hiển thị. + Nút Bình luận đã ẩn. Ẩn nút Bình luận Nút Không thích đã được hiển thị. Nút Không thích đã bị ẩn. @@ -749,30 +764,33 @@ Bộ lọc có phân biệt chữ hoa chữ thường, vì vậy bạn cần nh Phần video thêm trong bảng nút thao tác nhanh và lớp phủ video liên quan đã được hiển thị. Phần video thêm trong bảng nút thao tác nhanh và lớp phủ video liên quan đã bị ẩn. Ẩn lớp phủ video liên quan - Nút Video có liên quan được hiển thị. + Các Video có liên quan được hiển thị. Các video có liên quan đã bị ẩn. Ẩn các video có liên quan "Cài đặt này giới hạn số lượng bố cục tối đa có thể được tải trên màn hình trình phát. Nếu bố cục của màn hình trình phát thay đổi do các thay đổi từ phía máy chủ, các bố cục không mong muốn có thể bị ẩn trên màn hình trình phát." - Nút Remix được hiển thị. - Nút Remix đã ẩn. - Ẩn nút Remix + Nút Phối lại được hiển thị. + Nút Phối lại đã ẩn. + Ẩn nút Phối lại Nút Báo vi phạm được hiển thị. Nút Báo vi phạm đã ẩn. Ẩn nút Báo vi phạm Nút Quà thưởng được hiển thị. Nút Quà thưởng đã ẩn. Ẩn nút Quà thưởng - Hình thu nhỏ của cụm từ tìm kiếm được hiển thị trong nhật ký tìm kiếm. - Hình thu nhỏ của cụm từ tìm kiếm đã ẩn khỏi nhật ký tìm kiếm. - Ẩn hình thu nhỏ cụm từ tìm kiếm + Hình thu nhỏ của từ khoá tìm kiếm được hiển thị trong lịch sử tìm kiếm. + Hình thu nhỏ của từ khoá tìm kiếm đã ẩn khỏi lịch sử tìm kiếm. + Ẩn hình thu nhỏ của từ khoá tìm kiếm Thông báo \"Trượt sang trái hoặc phải để tua\" được hiển thị. Thông báo \"Trượt sang trái hoặc phải để tua\" đã ẩn. Ẩn thông báo khi trượt để tua Thông báo \"Thả ra để huỷ\" được hiển thị. Thông báo \"Thả ra để huỷ\" đã ẩn. Ẩn thông báo khi huỷ tua + Nhãn Chương kế bên dấu thời gian đã hiện. + Nhãn Chương kế bên dấu thời gian đã ẩn. + Ẩn nhãn Chương trên thanh tiến trình Thanh tiến trình video được hiển thị trong trình phát. Thanh tiến trình video đã ẩn khỏi trình phát. Thanh tiến trình được hiển thị trong trình phát thu nhỏ video. @@ -818,12 +836,12 @@ Nếu bố cục của màn hình trình phát thay đổi do các thay đổi t Đã hiện mục Thông báo. Đã ẩn mục Thông báo. Ẩn mục Thông báo - Đã hiện mục Phát trong nên và nội dung tải xuống. - Đã ẩn mục Phát trong nên và nội dung tải xuống. - Ẩn mục Phát trong nên và nội dung tải xuống - Đã hiện mục xem trên TV. - Đã ẩn mục xem trên TV. - Ẩn mục xem trên TV + Đã hiện mục Phát trong nền và nội dung tải xuống. + Đã ẩn mục Phát trong nền và nội dung tải xuống. + Ẩn mục Phát trong nền và nội dung tải xuống + Đã hiện mục Xem trên TV. + Đã ẩn mục Xem trên TV. + Ẩn mục Xem trên TV Đã hiện mục Trung tâm dành cho gia đình. Đã ẩn mục Trung tâm dành cho gia đình. Ẩn mục Trung tâm dành cho gia đình @@ -916,6 +934,12 @@ Nếu bố cục của màn hình trình phát thay đổi do các thay đổi t Đã hiện nút Chia sẻ. Đã ẩn nút Chia sẻ. Ẩn nút Chia sẻ + Đã hiện trong hồ sơ kênh. + "Đã ẩn trong hồ sơ kênh. + +Cụ thể: +• Chỉ những kệ có tiêu đề Shorts trên thẻ trang chủ mới bị ẩn." + Ẩn trong hồ sơ kênh Hiển thị trong phần Nhật ký xem. Ẩn trong phần Nhật ký xem. Ẩn trong phần Nhật ký xem @@ -969,8 +993,8 @@ Nếu bố cục của màn hình trình phát thay đổi do các thay đổi t Đã hiện Tiêu đề. Đã ẩn Tiêu đề. Ẩn Tiêu đề video - Nút Hiện thêm được hiển thị. - Nút Hiện thêm đã ẩn. + Đã ẩn nút Hiện thêm. + Đã ẩn nút Hiện thêm. Ẩn nút Hiện thêm Thanh thông báo nhanh được hiển thị. Thanh thông báo nhanh đã ẩn. @@ -1002,9 +1026,9 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Kệ bán vé được hiển thị. Kệ bán vé đã ẩn. Ẩn kệ bán vé - Mốc thời gian được hiển thị. - Mốc thời gian đã ẩn. - Ẩn Mốc thời gian + Dấu thời gian được hiển thị. + Dấu thời gian đã ẩn. + Ẩn Dấu thời gian Phản ứng theo thời gian được hiển thị. Phản ứng theo thời gian đã ẩn. Ẩn phản ứng theo thời gian @@ -1020,10 +1044,6 @@ Cài đặt → Tự động phát → Tự động phát video tiếp theo."Phần Bản chép lời được hiển thị. Phần Bản chép lời đã ẩn. Ẩn phần Bản chép lời - "Ẩn các video có nhãn \"SẮP DIỄN RA\". - -Lưu ý: Việc bật tính năng này cũng sẽ ẩn nút Thông báo cho tôi." - Ẩn video SẮP DIỄN RA Quảng cáo dạng video được hiển thị. Quảng cáo dạng video đã ẩn. Ẩn quảng cáo dạng video @@ -1054,52 +1074,52 @@ Hạn chế: Nhãn Xem sản phẩm được hiển thị. Nhãn Xem sản phẩm đã ẩn. Ẩn nhãn Xem sản phẩm - Nút Tìm kiếm bằng giọng nói được hiển thị. - Nút Tìm kiếm bằng giọng nói đã ẩn. + Đã hiện nút Tìm kiếm bằng giọng nói. + Đã ẩn nút Tìm kiếm bằng giọng nói. Ẩn nút Tìm kiếm bằng giọng nói Kết quả tìm kiếm từ web được hiển thị. Kết quả tìm kiếm từ web đã ẩn. Ẩn kết quả tìm kiếm từ web - Đã hiện YouTube Doodles. - Đã ẩn YouTube Doodles. + YouTube Doodles đã được hiển thị. + YouTube Doodles đã bị ẩn. Ẩn YouTube Doodles "YouTube Doodles là những hình ảnh hoặc thiết kế cách điệu được YouTube sử dụng tạm thời trên logo của mình trong một số dịp đặc biệt, tương tự như Google Doodles trên trang chủ của Google. Và chúng thường chỉ xuất hiện trong một khoảng thời gian ngắn, có thể là vài ngày mỗi năm. Nếu YouTube Doodle đang hiển thị đồng thời tuỳ chọn ẩn này cũng đang bật, thì bộ lọc tìm kiếm cũng sẽ bị ẩn." Lớp phủ khi chụm để thu phóng đã được hiển thị. Lớp phủ khi chụm để thu phóng đã bị ẩn. - Ẩn lớp phủ khi chụm để thu phóng - AFN Xanh - AFN Đỏ + Ẩn chụm để thu phóng + AFN Blue + AFN Red Tùy chỉnh - Nguyên gốc + Stock MMT - Revancify Xanh - Revancify Đỏ + Revancify Blue + Revancify Red YouTube Giữ chế độ toàn màn hình hoạt động trong lúc bạn tắt và đánh thức thiết bị khi đang xem chế độ toàn màn hình. Số mili giây mà chế độ toàn màn hình được giữ. - Thời gian giữ chế độ toàn màn hình (mili giây) + Thời gian giữ chế độ toàn màn hình Giữ chế độ toàn màn hình Nguyên gốc - Thao tác nhấn đúp đã tắt. - "Thao tác nhấn đúp đã được bật. + Đã vô hiệu hoá thao tác nhấn đúp. + "Đã kích hoạt thao tác nhấn đúp. • Nhấn đúp để phóng to video đang thu nhỏ. • Nhấn đúp một lần nữa để trả về kích thước ban đầu." Thao tác nhấn đúp Đã vô hiệu kéo và thả. Đã kích hoạt kéo và thả. - Kích hoạt kéo và thả - Các nút Mở rộng và Đóng được hiển thị. - Các nút được ẩn.\n(vuốt trình phát thu nhỏ để mở rộng hoặc đóng) + Kéo và thả + Đã hiện các nút Mở rộng và Đóng. + Đã ẩn các nút.\n(vuốt trình phát thu nhỏ để mở rộng hoặc đóng) Ẩn các nút Mở rộng và Đóng - Các nút Chuyển về video trước và Chuyển đến video tiếp theo được hiển thị. - Các nút Chuyển về video trước và Chuyển đến video tiếp theo đã ẩn. - Ẩn các nút Chuyển đến video trước/tiếp theo - Văn bản được hiển thị. - Văn bản đã ẩn. - Ẩn văn bản + Đã hiện các nút tua tới và tua lùi. + Đã ẩn các nút tua tới và tua lùi. + Ẩn các nút tua tới và tua lùi + Đã hiện các văn bản phụ. + Đã ẩn các văn bản phụ. + Ẩn các văn bản phụ Độ mờ của lớp phủ trình phát thu nhỏ phải nằm trong khoảng 0 - 100. Giá trị độ mờ của lớp phủ trình phát thu nhỏ trong khoảng từ 0 đến 100, trong đó 0 là trong suốt. Độ mờ lớp phủ @@ -1112,36 +1132,36 @@ Nếu YouTube Doodle đang hiển thị đồng thời tuỳ chọn ẩn này c Loại trình phát thu nhỏ Nút trên lớp phủ trình phát "Nhấn để luôn phát lặp lại video. -Nhấn và giữ để tạm dừng sau khi hết thời lượng video đó." +Nhấn giữ để tạm dừng sau khi hết thời lượng video." Nút Phát lặp lại một video "Nhấn để sao chép URL video. -Nhấn và giữ để sao chép URL video kèm theo mốc thời gian hiện tại." - "Nhấn để sao chép URL video với mốc thời gian. -Nhấn và giữ để sao chép mốc thời gian hiện tại." - Hiển thị nút sao chép URL cùng mốc thời gian +Nhấn giữ để sao chép URL video kèm theo dấu thời gian hiện tại." + "Nhấn để sao chép URL video với dấu thời gian. +Nhấn và giữ để sao chép dấu thời gian hiện tại." + Nút Sao chép URL video với dấu thời gian Nút Sao chép URL video Nhấn để khởi chạy trình tải xuống bên ngoài. Nút Tải xuống bên ngoài - Nhấn để tắt âm lượng video hiện tại. Nhấn lần nữa để bật lại. - Hiển thị nút tắt âm lượng + Nhấn để tắt tiếng của video hiện tại. Nhấn lần nữa để bật trở lại. + Nút Tắt tiếng Nhấn giữ để thay đổi trạng thái nút. Đã đặt lại Tốc độ phát: %sx. "Nhấn để mở hộp thoại Tốc độ phát. -Nhấn và giữ để đặt lại tốc độ phát video bình thường (1.0x). Nhấn và giữ lần nữa để đặt lại về tốc độ mặc định." +Nhấn giữ để đặt lại tốc độ phát video bình thường (1.0x). Nhấn giữ lần nữa để đặt lại về tốc độ mặc định đã đặt." Nút Tốc độ phát - "Nhấn để tạo danh sách phát tất cả video từ kênh cũ nhất đến mới nhất. + "Nhấn để tạo danh sách phát gồm tất cả video từ kênh từ cũ nhất đến mới nhất. Nhấn và giữ để hoàn tác." - Hiển thị nút danh sách phát theo thứ tự thời gian - \"Nhấn để mở hộp thoại Danh sách trắng. -Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng. - Hiển thị nút Danh sách trắng + Nút danh sách phát theo thứ tự thời gian + Nhấn để mở hộp thoại Danh sách trắng. +Nhấn giữ để mở hộp thoại cài đặt Danh sách trắng. + Nút Danh sách trắng Nếu được hiển thị, nút tải xuống danh sách phát sẽ mở trình tải xuống tích hợp sẵn trong ứng dụng. Nút tải xuống danh sách phát sẽ luôn được hiển thị, và khi thao tác sẽ mở trình tải xuống bên ngoài đối với các danh sách phát công khai. Ghi đè nút tải xuống danh sách phát Nút tải xuống video sẽ mở trình tải xuống tích hợp sẵn trong ứng dụng. Nút tải xuống video sẽ mở trình tải xuống bên ngoài của bạn. Ghi đè nút tải xuống video - Cần phải có YouTube Music để ghi đè hành động của nút. Nhấn vào đây để tải YouTube Music. + Cần phải có YouTube Music để ghi đè chức năng của nút. Nhấn vào đây để tải YouTube Music. Điều kiện tiên quyết Nút Youtube Music sẽ mở ứng dụng YT Music. Nút Youtube Music sẽ mở ứng dụng RVX Music. @@ -1150,7 +1170,7 @@ Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng.Đã bao gồm Bình thường Nút thao tác - Cài đặt bổ sung + Chế độ cài đặt khác Hoạt ảnh / Phản hồi Nút tải xuống Tính năng thử nghiệm @@ -1195,7 +1215,7 @@ Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng.Tổng quan Tắt hoặc bật phản hồi xúc giác. Phản hồi xúc giác - Ghi đè thao tác nhấn của các nút trong ứng dụng. + Ghi đè chức năng của các nút trong ứng dụng. Điều chỉnh nút Nhập hoặc xuất cài đặt. Nhập/Xuất cài đặt @@ -1206,23 +1226,24 @@ Nhấn và giữ để mở hộp thoại cài đặt Danh sách trắng.Thanh điều hướng Thông tin về các bản vá đã được áp dụng. Thông tin bản vá - Ẩn hoặc hiển thị các nút trong video. + Ẩn hoặc hiển thị các nút trong trình phát. Nút trong trình phát Ẩn hoặc thay đổi thành phần của trình đơn tuỳ chọn trong trình phát video. Trình đơn tuỳ chọn Trình phát + Return YouTube Username Return YouTube Dislike SponsorBlock - Tùy chỉnh thanh tiến trình + Tùy chỉnh thanh tiến trình. Thanh tiến trình Ẩn các thành phần của trình đơn Cài đặt YouTube. Trình đơn Cài đặt Ẩn hoặc hiển thị các thành phần trong trình phát Shorts. Trình phát Shorts - Shorts + Trình Shorts Giả mạo dữ liệu phát trực tiếp để ngăn chặn sự cố phát. Giả mạo dữ liệu phát trực tiếp - Điều khiển vuốt + Cử chỉ vuốt Ẩn hoặc thay đổi các thành phần trên thanh công cụ, chẳng hạn như thanh tìm kiếm, các nút trên thanh công cụ và tiêu đề YouTube. Thanh công cụ Ẩn hoặc hiển thị các thành phần mô tả video. @@ -1256,18 +1277,17 @@ Một bộ giải mã khác sẽ được áp dụng sau khoảng 20 giây tải Thay đổi chất lượng trên dữ liệu di động mặc định thành %s. Không thể đặt chất lượng video. Thay đổi chất lượng trên WiFi mặc định thành %s. - "Đóng hộp thoại cảnh báo nội dung cần cân nhắc trước khi xem. - -Tuỳ chọn này chỉ tự động chấp nhận hộp thoại cảnh báo, không thể bỏ qua giới hạn về độ tuổi." - Đóng hộp thoại cảnh báo trước khi xem + "Loại bỏ hộp thoại cảnh báo nội dung cần cân nhắc trước khi xem. +Tuỳ chọn này chỉ tự động chấp nhận hộp thoại cảnh báo, chứ không thể bỏ qua giới hạn về độ tuổi." + Loại bỏ hộp thoại cảnh báo trước khi xem Thay thế bộ giải mã phần mềm AV1 bằng bộ giải mã VP9. Thay thế bộ giải mã phần mềm AV1 - Đang hiển thị tên người dùng (@username). - Đang hiển thị tên kênh. - Thay đổi tên người dùng Shorts + Đang áp dụng tên hiển thị của kênh (@handle). + Đang áp dụng tên kênh. + Thay thế tên hiển thị của kênh Nhấn để hiển thị thời gian còn lại. Nhấn để mở mục Tốc độ phát hoặc Chất lượng video. - Thay thế hành động của mốc thời gian + Thay thế hành động của dấu thời gian Thay thế nút Tạo bằng nút Cài đặt. Thay thế nút Tạo "Nhấn để mở cài đặt YouTube. @@ -1275,12 +1295,29 @@ Nhấn và giữ để mở cài đặt RVX." "Nhấn để mở cài đặt RVX. Nhấn và giữ để mở cài đặt YouTube." Thao tác kích hoạt nút - Hình ảnh khi tua sẽ hiển thị toàn màn hình. + Hình thu nhỏ khi tua sẽ xuất hiện ở chế độ toàn màn hình. Hình thu nhỏ khi tua sẽ xuất hiện phía trên thanh tiến trình. - Khôi phục thanh tiến trình hình thu nhỏ kiểu cũ + Khôi phục hình thu nhỏ trên thanh tiến trình kiểu cũ Mục chất lượng video kiểu cũ không được hiển thị. Mục chất lượng video kiểu cũ được hiển thị. Khôi phục mục chất lượng video kiểu cũ + \@handle (Tên người dùng) + Định dạng hiển thị + Tên người dùng (@handle) + Tên người dùng + Tên hiển thị (@handle) đã được áp dụng. + Tên người dùng đang được áp dụng. + Kích hoạt Return YouTube Username + "Khoá nhà phát triển YouTube Data API v3 là một mã khoá cho phép các nhà phát triển thao tác lấy dữ liệu từ Youtube, và nó cũng cần thiết để thay thế tên hiển thị thành tên người dùng. + +Giới hạn truy cập hàng ngày cho các khoá API trên gói miễn phí là 10000 lần, với mỗi lượt truy cập chỉ thay thế được 1 bình luận. + +Nhấp vào đây để xem các bước phát hành khóa API." + Giới thiệu về khoá YouTube Data API + Khoá nhà phát triển để sử dụng YouTube Data API v3. + Khoá Youtube Data API + 1. Tạo dự án mới <a href=%1$s>Nhấn vào đây</a>.<br>2. Nhấn vào nút <b>CREATE</b>.<br>3. Đi tới YouTube Data API v3 <a href=%2$s>Nhấn vào đây</a>.<br>4. Nhấn vào nút <b>ENABLE</b>.<br>5. Nhấn vào nút <b>CREATE CREDENTIALS</b>.<br>6. Chọn <b>Public data</b>.<br>7. Nhấn vào nút <b>NEXT</b>.<br>8. Sao chép mã khoá API.<br><br>※ Khoá API không nên được chia sẻ với người khác, vì vậy nó cũng không xuất hiện trong cài đặt Nhập/Xuất. + Phát hành mã khoá Giới thiệu Dữ liệu về lượt không thích được cung cấp bởi API Return YouTube Dislike. Nhấn vào đây để tìm hiểu thêm. ReturnYouTubeDislike.com @@ -1293,6 +1330,9 @@ Nhấn và giữ để mở cài đặt YouTube." Số lượt Không thích đã bị ẩn. Số lượt không thích được hiển thị. Hiện số lượt không thích + Số lượt thích ước tính đã ẩn. + Số lượt thích ước tính đã hiển thị. + Hiển thị số lượt thích ước tính Số lượt không thích không khả dụng (đã đạt đến giới hạn API máy khách). Số lượt không thích không khả dụng (trạng thái %d). Số lượt không thích tạm thời không khả dụng (API đã hết thời gian chờ). @@ -1307,8 +1347,12 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Thông báo ngắn nếu API Return YouTube Dislike không khả dụng đã tắt. Hiển thị thông báo ngắn nếu API Return YouTube Dislike không khả dụng. Thông báo ngắn nếu API không khả dụng + Đã ẩn Loại bỏ các tham số truy vấn theo dõi khỏi URL khi chia sẻ liên kết. - Liên kết sạch khi chia sẻ + Làm sạch liên kết chia sẻ + "Các cụm từ như '#', 'Fundraiser', 'Shop' và 'products' đã được hiển thị trong phụ đề video." + "Các cụm từ như '#', 'Fundraiser', 'Shop' và 'products' đã bị ẩn khỏi phụ đề video." + Làm sạch phụ đề video Giới thiệu sponsor.ajay.app Dữ liệu này được cung cấp bởi API SponsorBlock. Nhấn vào đây để tìm hiểu thêm và xem các bản tải xuống cho các nền tảng khác. @@ -1316,8 +1360,8 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người URL API không hợp lệ. Đặt lại URL API. Giao diện - Màu sắc đã thay đổi. - Màu sắc: + Đã thay đổi màu. + Màu: Mã màu không hợp lệ. Đặt lại màu Tạo phân đoạn mới @@ -1358,11 +1402,11 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người ID người dùng riêng tư phải dài ít nhất 30 ký tự. Mã Id này giống như mật khẩu của bạn vậy, do đó không nên chia sẻ với bất kỳ ai. Nếu ai đó có được nó, họ có thể mạo danh bạn. Đã đọc - Hãy đọc hướng dẫn của SponsorBlock trước khi tạo phân đoạn mới. + Hãy đọc nguyên tắc của SponsorBlock trước khi tạo phân đoạn mới. Xem ngay - Thực hiện theo các hướng dẫn - Hướng dẫn bao gồm các quy tắc và mẹo về cách tạo phân đoạn mới. - Xem hướng dẫn + Thực hiện theo các nguyên tắc + Hướng dẫn bao gồm các nguyên tắc và mẹo về cách tạo phân đoạn mới. + Xem nguyên tắc Chọn danh mục phân đoạn The segment lasts from %1$02d:%2$02d to %3$02d:%4$02d (%5$d minutes %6$02d seconds)\nIs it ready to submit? Phân đoạn bắt đầu từ\n\n%1$s\nđến\n%2$s\n\n%3$s\n\nSẵn sàng gửi? @@ -1489,9 +1533,9 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Không có phân đoạn nào để bình chọn. Ủng hộ Đã sao chép cài đặt sang bảng nhớ tạm. - Đã sao chép mốc thời gian vào bảng nhớ tạm. (%s) + Đã sao chép dấu thời gian vào bảng nhớ tạm. (%s) Đã sao chép URL sang bảng nhớ tạm. - Đã sao chép URL cùng mốc thời gian vào bảng nhớ tạm. + Đã sao chép URL cùng dấu thời gian vào bảng nhớ tạm. Gốc Thích Thích (Cairo) @@ -1505,14 +1549,14 @@ Hạn chế: Lượt không thích có thể không hiển thị nếu người Chiều cao phải nằm trong khoảng từ 0 đến 100 (%). Cấu hình chiều cao của khoảng trống còn lại khi thanh điều hướng bị ẩn, nằm trong khoảng từ 0 đến 100 (%). Chiều cao của khoảng trống - Nhấn và giữ vào Mốc thời gian để thay đổi trạng thái phát lặp lại trên trình phát Shorts. - Thao tác nhấn giữ Mốc thời gian + Nhấn và giữ vào Dấu thời gian để thay đổi trạng thái phát lặp lại trên trình phát Shorts. + Thao tác nhấn giữ Dấu thời gian "Hiển thị phần tiêu đề video ở chế độ toàn màn hình. Hạn chế: Tiêu đề video sẽ biến mất khi nhấn vào." Hiển thị phần tiêu đề video - Bỏ qua đếm ngược tự động phát đã tắt.\nNếu tính năng Tự động phát được bật, video tiếp theo sẽ phát sau khi hết thời gian đếm ngược. - Bỏ qua đếm ngược tự động phát đã bật.\nNếu tính năng Tự động phát được bật, video tiếp theo sẽ phát ngay lập tức mà không cần đếm ngược. + Nếu tính năng Tự động phát được bật, video tiếp theo sẽ được phát sau khi đếm ngược kết thúc. + Nếu tính năng Tự động phát được bật, video tiếp theo sẽ được phát ngay lập tức. Bỏ qua tự động đếm ngược trước khi phát "Bỏ qua bộ đệm tải trước ở đầu video để áp dụng ngay chất lượng video mặc định. @@ -1534,16 +1578,17 @@ Lưu ý:\n- Tuỳ chọn này sẽ thay đổi giao diện ứng dụng, tuy nhi - Nếu tắt tuỳ chọn này sau đó, giao diện cũ có thể vẫn tồn tại cho đến khi bạn xoá dữ liệu ứng dụng." Phiên bản không được giả mạo Phiên bản đã được giả mạo - 17.33.42 - Khôi phục bố cục giao diện kiểu cũ + 17.33.42 - Khôi phục giao diện kiểu cũ 17.41.37 - Khôi phục kệ Danh sách phát kiểu cũ - 18.05.40 - Khôi phục hộp Viết bình luận kiểu cũ - 18.17.43 - Khôi phục trình đơn Cài đặt trình phát kiểu cũ - 18.33.40 - Khôi phục bảng nút thao tác Shorts kiểu cũ + 18.05.40 - Khôi phục hộp nhập bình luận kiểu cũ + 18.17.43 - Khôi phục bảng điều khiển trình phát cũ + 18.33.40 - Khôi phục bảng nút thao tác trình Shorts kiểu cũ 18.38.45 - Khôi phục phương thức áp dụng chất lượng video mặc định kiểu cũ - 18.48.39 - Tắt cập nhật số \"lượt xem\" và \"lượt thích\" theo thời gian thực + 18.48.39 - Vô hiệu hoá cập nhật số \"lượt xem\" và \"lượt thích\" theo thời gian thực + 19.13.37 - Khôi phục hoạt ảnh Số cuộn kiểu cũ Phiên bản giả mạo - Nhập phiên bản YouTube mà bạn muốn giả mạo. - Chỉnh sửa phiên bản giả mạo + Nhập phiên bản giả mạo mà bạn muốn hướng tới. + Tuỳ chọn phiên bản giả mạo Giả mạo phiên bản ứng dụng "Phiên bản ứng dụng sẽ được giả mạo thành một phiên bản cũ hơn của Youtube. @@ -1560,9 +1605,9 @@ Chất lượng cao có thể được mở khóa trên một số video yêu c AVC (H.264) có độ phân giải tối đa 1080p, và phát video sẽ dùng nhiều dữ liệu di động hơn với VP9 hoặc AV1." "• Mục Bản âm thanh bị thiếu. -• Mục 'Âm lượng ổn định' không khả dụng." +• Mục Âm lượng ổn định không khả dụng." "• Mục Bản âm thanh bị thiếu. -• Mục 'Âm lượng ổn định' không khả dụng." +• Mục Âm lượng ổn định không khả dụng." "• Phim hoặc video trả phí có thể không phát được. • Video phát trực tiếp sẽ khởi chạy từ đầu. • Video có thể kết thúc sớm 1 giây. @@ -1576,43 +1621,55 @@ AVC (H.264) có độ phân giải tối đa 1080p, và phát video sẽ dùng n Đã giả mạo dữ liệu phát trực tiếp. Giả mạo dữ liệu phát trực tiếp Android + Android Creator + Trình phát nhúng Android + Thử nghiệm Android Android TV Android VR iOS + TV HTML5 + Trang Web Máy khách mặc định Việc tắt cài đặt này có thể gây ra sự cố khi phát video. - Vuốt ở chế độ Khóa màn hình đã tắt. - Cử chỉ vuốt đã bật ở chế độ Khóa màn hình. - Vuốt ở chế độ Khóa màn hình + Độ nhạy khi vuốt để điều chỉnh độ sáng phải nằm trong khoảng từ 1-1000 (%). + Cấu hình khoảng cách tối thiểu để vuốt điều chỉnh độ sáng trong khoảng từ 1 đến 1000 (%).\nKhoảng cách tối thiểu càng ngắn thì mức độ sáng thay đổi càng nhanh. + Độ nhạy khi vuốt để điều chỉnh độ sáng + Đã vô hiệu hoá cử chỉ vuốt ở chế độ Khóa màn hình. + Đã kích hoạt cử chỉ vuốt ở chế độ Khóa màn hình. + Vuốt ở chế độ Khoá màn hình Tự động Độ rộng của ngưỡng vuốt để thực hiện cử chỉ vuốt. Độ rộng ngưỡng vuốt - Độ mờ của nền lớp phủ vuốt khi thực hiện cử chỉ vuốt. - Độ mờ nền lớp phủ vuốt + Độ trong suốt của nền khi thực hiện cử chỉ vuốt. + Độ trong suốt lớp phủ Kích thước khu vực vuốt không được lớn hơn 50. - Phần diện tích màn hình có thể vuốt.\n\nLưu ý: Thao tác này cũng sẽ thay đổi kích thước vùng màn hình đối với cử chỉ nhấn đúp để tua. - Kích thước văn bản trên lớp phủ vuốt - Độ to nhỏ của văn bản được hiển thị trên lớp phủ vuốt. - Kích thước văn bản trên lớp phủ vuốt - Số mili giây mà lớp phủ vuốt được hiển thị. - Thời gian hiển thị lớp phủ vuốt (mili giây) + Phần diện tích màn hình có thể vuốt (tính bằng %).\n\nLưu ý: Tuỳ chọn này cũng sẽ thay đổi kích thước vùng màn hình đối với cử chỉ nhấn đúp để tua. + Kích thước màn hình lớp phủ + Độ lớn của văn bản được hiển thị trên lớp phủ khi vuốt. + Kích thước văn bản trên lớp phủ + Số mili giây mà lớp phủ khi vuốt được hiển thị. + Thời gian hiển thị lớp phủ + Độ nhạy khi vuốt để điều chỉnh âm lượng phải nằm trong khoảng từ 1 đến 1000 (%). + Cấu hình khoảng cách tối thiểu để vuốt điều chỉnh âm lượng trong khoảng từ 1 đến 1000 (%).\n\nKhoảng cách tối thiểu càng ngắn thì mức âm lượng thay đổi càng nhanh.\n\nĐộ nhạy vuốt âm lượng được khuyến nghị là 100% với mức âm lượng 15 và 10% với mức âm lượng 150. + Độ nhạy khi vuốt để điều chỉnh âm lượng "Hoán đổi vị trí của nút Tạo và nút Thông báo bằng cách giả mạo thông tin thiết bị. • Tuỳ chọn này có thể không có hiệu lực cho đến khi khởi động lại thiết bị. • Tắt tuỳ chọn này sẽ tải thêm quảng cáo từ phía máy chủ. • Tắt tuỳ chọn này có thể hiển thị quảng cáo dạng video." - Nút Tạo không được hoán đổi với nút Thông báo. - "Nút Tạo đã được hoán đổi với nút Thông báo. + Nút Tạo và nút Thông báo như mặc định. + "Nút Tạo đã được đổi vị trí với nút Thông báo. -Lưu ý: Việc bật tuỳ chọn này cũng sẽ ẩn các quảng cáo trong video." - Hoán đổi nút Tạo và nút Thông báo - "Tắt tùy chọn này có thể hiện quảng cáo từ máy chủ. +Lưu ý: Việc bật tuỳ chọn này cũng sẽ ẩn các quảng cáo video." + Đổi vị trí nút Tạo và nút Thông báo + "Tắt tùy chọn này có thể tải thêm quảng cáo từ máy chủ. Ngoài ra, quảng cáo sẽ không còn bị chặn trong trình phát Shorts. Nếu cài đặt này không có hiệu lực, hãy thử chuyển sang chế độ Ẩn danh." Nguyên gốc RVX Music + Chú ý Hiện %s chưa được cài đặt. Hãy cài đặt và thử lại. Tên gói của RVX Music đã được cài đặt. Tên gói của RVX Music diff --git a/src/main/resources/youtube/translations/zh-rCN/missing_strings.xml b/src/main/resources/youtube/translations/zh-rCN/missing_strings.xml index bc1d1bf30..e61c58590 100644 --- a/src/main/resources/youtube/translations/zh-rCN/missing_strings.xml +++ b/src/main/resources/youtube/translations/zh-rCN/missing_strings.xml @@ -1,69 +1,8 @@ - Chapters are enabled in the seekbar. - Chapters are disabled in the seekbar. - Disable seekbar chapters Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name - 1080p Premium menu is shown. - 1080p Premium menu is hidden. - Hide 1080p Premium menu - Chapter labels next to the timestamp are shown. - Chapter labels next to the timestamp are hidden. - Hide seekbar chapter labels - About menu is shown. - About menu is hidden. - Hide About menu - Accessibility menu is shown. - Accessibility menu is hidden. - Hide Accessibility menu - Billing and payments menu is shown. - Billing and payments menu is hidden. - Hide Billing and payments menu - Captions menu is shown. - Captions menu is hidden. - Hide Captions menu - Connected apps menu is shown. - Connected apps menu is hidden. - Hide Connected apps menu - Live chat menu is shown. - Live chat menu is hidden. - Hide Live chat menu - Notifications menu is shown. - Notifications menu is hidden. - Hide Notifications menu - Try experimental new features menu is shown. - Try experimental new features menu is hidden. - Hide Try experimental new features menu - Purchases and memberships menu is shown. - Purchases and memberships menu is hidden. - Hide Purchases and memberships menu - YouTube Doodles are shown. - YouTube Doodles are hidden. - Hide YouTube Doodles - "YouTube Doodles show up a few days each year. - -If a YouTube Doodle is currently showing in your region and this setting is on, the filter bar below the search bar will also be hidden." MMT Orange MMT Pink MMT Turquoise - Return YouTube Username - Handle is used. - Username is used. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Estimated likes are hidden. - Estimated likes are shown. - Show estimated likes - Hidden - 19.13.37 - Restore old style Rolling number animations diff --git a/src/main/resources/youtube/translations/zh-rCN/strings.xml b/src/main/resources/youtube/translations/zh-rCN/strings.xml index 9a52779c5..edbdfb52d 100644 --- a/src/main/resources/youtube/translations/zh-rCN/strings.xml +++ b/src/main/resources/youtube/translations/zh-rCN/strings.xml @@ -1,4 +1,4 @@ - + 开启视频播放器的访问控制? 由于无障碍服务已启用,您的控制被修改 @@ -80,7 +80,7 @@ 默认 暂停 重复播放 - 更改短片重复状态 + 更改 Shorts 重复状态 浏览频道 课程 / 学习资源 默认 @@ -194,12 +194,15 @@ 禁用点赞和点踩按钮动效 "禁用 Cronet 引擎的 QUIC 协议" 禁用 QUIC 协议 - 应用启动时恢复短片播放器 - 应用启动时不会恢复短片播放器 - 禁用恢复短片播放器 + 应用启动时恢复 Shorts 播放器 + 应用启动时不会恢复 Shorts 播放器 + 禁止恢复 Shorts 播放器 滚动动画已启用 滚动动画已禁用 禁用滚动数字动画 + 进度条章节已启用 + 进度条章节已禁用 + 禁用进度条章节 点赞按钮动画已启用 点赞按钮动画已禁用 禁用点赞按钮动画 @@ -317,6 +320,11 @@ 你想继续吗? 重置为默认值 重启应用以正常加载界面布局 + "YouTube 服务端的一个错误会导致一些用户隐藏像点赞数、播放量和上传日期这样的滚动数字文本 + +此问题的临时解决方法是伪装应用版本为19.13.37 + +您是否想要在重启应用程序之前伪装应用版本?" 刷新并重启 导出配置失败 导出配置成功 @@ -394,7 +402,7 @@ 频道简介顶部的连结已显示 频道简介顶部的连结已隐藏 隐藏频道个人档案的链接 - "短视频 + "Shorts 播放列表 商店" 要过滤的频道标签名称列表,每行一个名称 @@ -414,9 +422,12 @@ 剪辑按钮已显示 剪辑按钮已隐藏 隐藏剪辑按钮 - 创建短片按钮已显示 - 创建短片按钮已隐藏 - 隐藏创建短片按钮 + 创建 Shorts 按钮已显示 + 创建 Shorts 按钮已隐藏 + 隐藏创建 Shorts 按钮 + 高亮搜索链接已显示 + 高亮搜索链接已隐藏 + 隐藏高亮搜索链接 感谢按钮已显示 感谢按钮已隐藏 隐藏感谢按钮 @@ -529,8 +540,8 @@ "搜索、首页、订阅和评论会被过滤以隐藏与关键词短语匹配的内容 限制: -• 某些Shorts可能不会隐藏 -• 某些UI组件可能不会隐藏 +• 某些 Shorts 可能不会隐藏 +• 某些 UI 组件可能不会隐藏 • 搜索关键词可能不会显示任何结果" 关于关键词过滤 环绕一个关键字/短语带双引号会防止视频标题和频道名称<br><br>例如,<br><b>\"ai\"</b> 将隐藏视频: <b>How does AI work?</b><br>但不会隐藏: <b>What does fair use mean?</b> @@ -564,8 +575,8 @@ 显示赞和踩按钮 隐藏赞和踩按钮 隐藏赞和踩按钮 - 实时聊天消息已隐藏\n\n此设置也适用于短视频 - 实时聊天消息已隐藏\n\n此设置也适用于短视频 + 实时聊天消息已显示\n\n此设置也适用于 Shorts + 实时聊天消息已隐藏\n\n此设置也适用于 Shorts 隐藏实时聊天消息 实时聊天重播按钮已显示\n\n关闭实时聊天时它会以全屏显示 实时聊天重播按钮已隐藏\n\n在关闭实时聊天时它会以全屏显示 @@ -641,6 +652,9 @@ 字幕菜单已显示 字幕菜单已隐藏 隐藏字幕菜单 + 1080p Premium 菜单已显示 + 1080p Premium 菜单已隐藏 + 隐藏 1080p Premium 菜单 帮助 & 反馈菜单已显示 帮助 & 反馈菜单已隐藏 隐藏帮助 & 反馈菜单 @@ -773,6 +787,9 @@ 进度条跳转撤销讯息已显示 进度条撤销消息已隐藏 隐藏进度条跳转撤销消息 + 时间戳旁的章节标签已显示 + 时间戳旁的章节标签已隐藏 + 隐藏进度条章节标签 视频播放器进度条已显示 视频播放器进度条已隐藏 进度条缩略图预览已显示 @@ -782,12 +799,27 @@ 自我推广卡片已显示 自我推广卡片已隐藏 隐藏自我推广卡片 + 关于菜单已显示 + 关于菜单已隐藏 + 隐藏关于菜单 + 辅助功能菜单已显示 + 辅助功能菜单已隐藏 + 隐藏辅助功能菜单 账户菜单已显示 账户菜单已隐藏 隐藏账户菜单 自动播放菜单已显示 自动播放菜单已隐藏 隐藏自动播放菜单 + 账单和支付菜单已显示 + 账单和支付菜单已隐藏 + 隐藏账单和支付菜单 + 字幕菜单已显示 + 字幕菜单已隐藏 + 隐藏字幕菜单 + 已连接的应用菜单已显示 + 已连接的应用菜单已隐藏 + 隐藏已连接应用菜单 数据保存菜单已显示 数据保存菜单已隐藏 隐藏数据保存菜单 @@ -797,6 +829,12 @@ 管理全部历史记录菜单已显示 管理全部历史记录菜单已隐藏 隐藏管理全部历史记录菜单 + 实时聊天菜单已显示 + 实时聊天菜单已隐藏 + 隐藏实时聊天菜单 + 通知菜单已显示 + 通知菜单已隐藏 + 隐藏通知菜单 背景菜单已显示 背景菜单已隐藏 隐藏背景菜单 @@ -806,9 +844,15 @@ 家庭中心菜单已显示 家庭中心菜单已隐藏 隐藏家庭中心菜单 + 新实验性功能菜单已显示 + 新实验性功能菜单已隐藏 + 隐藏新实验性功能菜单 隐私菜单已显示 隐私菜单已隐藏 隐藏隐私菜单 + 购买和会员菜单已显示 + 购买和会员菜单已隐藏 + 隐藏购买与会员菜单 隐藏 YouTube 设置菜单中的元素 YouTube 设置菜单 视频质量首选项菜单已显示 @@ -839,7 +883,7 @@ 点踩按钮已隐藏 隐藏点踩按钮 "‘使用此声音’等浮动按钮已在短视频频道标签中显示" - "‘使用此声音’等浮动按钮已在短视频频道标签中隐藏" + "‘使用此声音’等浮动按钮已在 Shorts 频道标签中隐藏" 隐蔽悬浮按钮 视频链接标签已显示 视频链接标签已隐藏 @@ -889,6 +933,12 @@ 分享按钮已显示 分享按钮已隐藏 隐藏分享按钮 + 频道中的社区帖子已显示 + "已在频道中隐藏 + +信息: +• 仅隐藏主页选项卡上带有 Shorts 标题的架子" + 隐藏频道中的社区帖子 在观看历史中显示 在观看历史中隐藏 在观看历史中隐藏 @@ -995,17 +1045,13 @@ Note: 转写文稿部分已显示 转写文稿部分已隐藏 隐藏转写文稿部分 - "隐藏带有 UPCOMING 标签的视频 - -注意:启用此选项也隐藏通知按钮" - 隐藏 UPCOMING 视频 视频广告已显示 视频广告已隐藏 隐藏视频广告 "主页/订阅/搜索结果被过滤以隐藏视图小于或大于指定数字的视频 限制: -• 不能隐藏短视频 +• 不能隐藏 Shorts • 不能过滤 0 播放量的视频" 关于播放量过滤 首页订阅内容的关键词过滤已禁用 @@ -1035,6 +1081,12 @@ Note: 网页搜索结果已显示 网页搜索结果已隐藏 隐藏网页搜索结果 + YouTube 涂鸦已显示 + YouTube 涂鸦已隐藏 + 隐藏 YouTube 涂鸦 + "YouTube 涂鸦每年显示几天 + +如果 YouTube 涂鸦目前在您的地区显示且此设置已开启,搜索栏下方的过滤栏也会隐藏" 缩放叠加层已显示 缩放叠加层已隐藏 隐藏缩放叠加层 @@ -1187,6 +1239,7 @@ Note: 隐藏或更改视频播放器中的弹出菜单 弹出菜单 播放器 + 返回 YouTube 用户名 Return YouTube Dislike SponsorBlock 自定义进度条组件 @@ -1194,8 +1247,8 @@ Note: 隐藏 YouTube 设置菜单中的元素 设置菜单 隐藏或显示短视频播放器中的组件 - 短视频播放器 - 短视频 + Shorts 播放器 + Shorts 伪装流媒体数据以防止播放问题 伪装流媒体数据 滑动控制 @@ -1253,6 +1306,23 @@ Note: 不显示旧的视频画质菜单 显示旧的视频画质菜单 恢复旧的视频画质菜单 + \@handle (用户名) + 显示格式 + 用户名 (@handle) + 用户名 + Handle 已使用 + 用户名已使用 + 启用返回 YouTube 用户名 + "需要 YouTube Data API v3 开发者密钥才能将 handle 替换为用户名 + +免费计划下的 API 密钥每日配额为 10,000,其中每替换 1 条评论的 handle 为用户名会消耗 1 个配额 + +点击查看如何获取 API 密钥" + 关于 YouTube Data API 密钥 + 使用 YouTube Data API v3 的开发者密钥 + YouTube Data API 密钥 + 1. 前往 <a href=%1$s> 创建一个新项目 </a>.<br>2. 点击 <b> 创建 </b> 按钮 <br>3. 前往 <a href=%2$s> YouTube Data API v3 </a>.<br>4. 点击 <b> 启用 </b> 按钮 <br>5. 点击 <b> 创建凭据 </b> 按钮 <br>6. 选择 <b> 公共数据 </b> 选项 <br>7. 点击 <b> 下一步 </b> 按钮 <br>8. 复制 API 密钥 <br><br>※ API 密钥绝不可与他人分享,因此不包含在导入 / 导出设置中 + 获取 YouTube Data API v3 开发者密钥 关于 点踩数据由 Return YouTube Dislike API 提供。点击了解更多信息 ReturnYouTubeDislike.com @@ -1265,22 +1335,29 @@ Note: 点踩数已隐藏 点踩数已显示 Return YouTube Dislike + 预估点赞数已隐藏 + 预估点赞数已显示 + 显示预估点赞数 点踩数不可用(已达到客户端 API 限制) 点踩数不可用(状态 %d) 点踩数暂时不可用(API 连接超时) 点踩数不可用(%s) 重新加载视频以使用 Return YouTube Dislike进行投票 - 点踩已隐藏 - Shorts 中显示的不喜欢内容 %s - "在短视频中显示点踩 + 点踩数已在 Shorts 中隐藏 + 点踩数已在 Shorts 中显示 + "在 Shorts 中显示点踩数 -限制:在无痕模式下,点踩可能不会显示" - 点踩 +限制:在无痕模式下,点踩数可能不会显示" + 在 Shorts 中显示点踩数 如果 YouTube Dislike 不可用,不会显示 Toast 如果 YouTube Dislike 不可用,会显示 Toast 如果 API 不可用,显示 Toast + 隐藏 共享链接时,删除 URL 中的跟踪查询参数 清理共享链接 + "像'#', 'Shop' 和 'N products' 这样的词组已在视频字幕中显示" + "像'#', 'Shop' 和 'N products' 这样的词组已在视频字幕中隐藏" + 清理视频字幕 关于 sponsor.ajay.app 数据由SponsorBlock API提供点击此处了解更多信息并查看其他平台的下载 @@ -1477,11 +1554,11 @@ Note: 心形(着色) 隐藏 双击动画 - Meta 面板底边距必须在0-64之间 已重置为默认值 + Meta 面板底边距必须在 0-64 之间 已重置为默认值 配置从搜索栏到 Meta 面板的间距,范围在 0-64 之间 Meta 面板底边距 - 高度百分比必须介于0-100之间(%) - 配置隐藏导航栏时空白空间的高度百分比,介于0至100之间(%) + 高度百分比必须介于 0-100 之间(%) + 配置隐藏导航栏时空白空间的高度百分比,介于 0 到 100 之间(%) 空白空间的高度百分比 长按时间戳以更改 Shorts 重复状态 时间戳长按操作 @@ -1518,6 +1595,7 @@ Note: 18.33.40 - 恢复旧的 Shorts 选项卡 18.38.45 - 恢复旧的默认视频质量行为 \"18.48.39 - 禁止实时更新“播放量”和“喜欢次数” + 19.13.37 - 恢复旧版数字滚动动画风格 伪装应用版本 选择伪装的应用版本 编辑伪装应用版本 @@ -1547,11 +1625,19 @@ AVC (H.264) 的最大解析度为 1080p,且视频播放将使用比 VP9 或 AV 流媒体数据已伪装 伪装流媒体数据 Android + Android 创建者 + Android 嵌入式播放器 + Android 测试套件 Android TV Android VR iOS + TV HTML5 + 网址 默认客户端 关闭此选项可能会导致视频不能正常播放 + 亮度滑动灵敏度必须介于 1-1000 之间 (%) + 配置亮度滑动的最小距离范围为 1 到 1000 (%)\n最小距离越短,亮度变化越快 + 亮度滑动灵敏度 在“锁定屏幕”模式下禁用滑动手势 在“锁定屏幕”模式下启用滑动手势 在“锁定屏幕”模式下滑动手势 @@ -1567,6 +1653,9 @@ AVC (H.264) 的最大解析度为 1080p,且视频播放将使用比 VP9 或 AV 滑动叠加层上的文本大小 滑动叠加层显示的时长(毫秒) 滑动叠加层时长 + 音量滑动灵敏度必须介于 1-1000 之间 (%) + 配置音量滑动的最小距离范围为 1 到 1000 (%)\n\n最小距离越短,音量等级变化越快\n\n推荐的音量滑动灵敏度:在 15 级音量调节为 100%,在 150 级音量调节为 10% + 音量滑动灵敏度 "通过伪装设备信息,交换创建按钮和通知按钮的位置 • 更改此设置,可能需要重新启动设备才能生效 @@ -1584,6 +1673,7 @@ AVC (H.264) 的最大解析度为 1080p,且视频播放将使用比 VP9 或 AV 如果此设置未生效,请尝试切换到隐身模式" Stock RVX Music + 警告 %s 未安装,请先安装 已安装的 RVX Music 包名 RVX Music 包名 diff --git a/src/main/resources/youtube/translations/zh-rTW/missing_strings.xml b/src/main/resources/youtube/translations/zh-rTW/missing_strings.xml index a85ca0263..28ad67da1 100644 --- a/src/main/resources/youtube/translations/zh-rTW/missing_strings.xml +++ b/src/main/resources/youtube/translations/zh-rTW/missing_strings.xml @@ -1,43 +1,15 @@ - Chapters are enabled in the seekbar. - Chapters are disabled in the seekbar. - Disable seekbar chapters Package name of your installed external downloader app, such as NewPipe or YTDLnis, on long press. Long press video downloader package name - 1080p Premium menu is shown. - 1080p Premium menu is hidden. - Hide 1080p Premium menu - Chapter labels next to the timestamp are shown. - Chapter labels next to the timestamp are hidden. - Hide seekbar chapter labels MMT Orange MMT Pink MMT Turquoise Xisr Yellow - Return YouTube Username - Handle is used. - Username is used. - Enable Return YouTube Username - "A YouTube Data API v3 Developer Key is required to replace handles with usernames. - -The daily quota for API keys on the free plan is 10,000, and 1 quota is used to replace a handle with a username for 1 comment. - -Click to see how to issue a API key." - About YouTube Data API key - The developer key for using the YouTube Data API v3. - YouTube Data API key - 1. Go to <a href=%1$s>Create a new project</a>.<br>2. Click the <b>CREATE</b> button.<br>3. Go to <a href=%2$s>YouTube Data API v3</a>.<br>4. Click the <b>ENABLE</b> button.<br>5. Click the <b>CREATE CREDENTIALS</b> button.<br>6. Select the <b>Public data</b> option.<br>7. Click the <b>NEXT</b> button.<br>8. Copy the API key.<br><br>※ API key should never be shared with others, so it is not included in Import / Export settings. - Issue YouTube Data API v3 developer key - Estimated likes are hidden. - Estimated likes are shown. - Show estimated likes - Hidden Adjust: Mark Start and End Time for segment Verify the Segment Edit the Segment Forward by Specified Time (Default: 150ms) Publish Created Segment Rewind by Specified Time (Default: 150ms) - 19.13.37 - Restore old style Rolling number animations diff --git a/src/main/resources/youtube/translations/zh-rTW/strings.xml b/src/main/resources/youtube/translations/zh-rTW/strings.xml index 2d4281809..823d0f566 100644 --- a/src/main/resources/youtube/translations/zh-rTW/strings.xml +++ b/src/main/resources/youtube/translations/zh-rTW/strings.xml @@ -1,6 +1,6 @@ - + - 要啟用影片播放器的無障礙控制嗎? + 是否啟用影片播放器的無障礙控制? 由於已啟用無障礙服務,因此您的控制項被修改。 繼續 不再顯示 @@ -126,7 +126,7 @@ 自訂播放器的不透明度 輸入套用於搜尋欄的十六進制顏色代碼 自定義進度條顏色 - 若要以外部瀏覽器開啟 RVX,請開啟「開啟支援連結」並啟用支援的網址。 + 若要以外部瀏覽器開啟 RVX,請在設定開啟「開啟支援連結」並啟用支援的網址。 開啟預設應用程式設定 預設播放速度 行動數據的預設影片畫質 @@ -201,6 +201,9 @@ 滾動動畫已啟用 滾動動畫已停用 停用滾動數字動畫 + 搜尋欄中的章節已啟用。 + 搜尋欄中的章節已停用。 + 停用搜尋列章節 點讚按鈕上方的噴泉動畫已啟用。 點讚按鈕上方的噴泉動畫已停用。 停用讚按鈕動畫 @@ -315,6 +318,11 @@ 你想繼續嗎? 重設為預設值。 重新啟動以套用更改後的介面 + "YouTube 伺服器端存在一個錯誤,導致某些用戶隱藏滾動數位文字,例如按讚數、觀看次數和上傳日期。 + +此問題的臨時解決方法是將應用程式版本欺騙為 19.13.37。 + +您想在重新啟動應用程式之前偽裝應用程式版本嗎?" 重新啟動以重新整理介面 導出配置失敗 導出配置成功 @@ -415,6 +423,9 @@ 創建短片按鈕已顯示 創建短片按鈕已隱藏 隱藏創建短片按鈕 + 被標記的搜尋連結已顯示 + 被標記的搜尋連結已隱藏 + 隱藏被標記的搜尋連結 感謝按鈕已顯示 感謝按鈕已隱藏 隱藏感謝按鈕 @@ -639,6 +650,9 @@ 字幕選單已顯示 字幕選單已隱藏 隱藏字幕選單 + 1080p 進階選單已顯示。 + 1080p 進階選單已隱藏。 + 隱藏 1080p 進階選單 幫助與反饋選單已顯示 幫助與反饋選單已隱藏 隱藏幫助與反饋選單 @@ -770,6 +784,9 @@ 進度條跳轉撤銷訊息已顯示 進度條撤銷訊息已隱藏 隱藏進度條跳轉撤銷訊息 + 時間戳旁邊的章節標籤已隱藏。 + 時間戳旁邊的章節標籤已隱藏。 + 隱藏搜尋列章節標籤 影片播放器進度條已顯示 影片播放器進度條已隱藏 進度條縮略圖預覽已顯示 @@ -913,6 +930,12 @@ 分享按鈕已顯示 分享按鈕已隱藏 隱藏分享按鈕 + 顯示在頻道中。 + "隱藏在頻道中。 + +資訊: +• 僅隱藏主頁標籤上有 Shorts 標題的書架。" + 隱藏在頻道中 在觀看歷史中顯示 在觀看歷史中隱藏 在觀看歷史中隱藏 @@ -1019,10 +1042,6 @@ Note: 轉寫文稿部分已顯示 轉寫文稿部分已隱藏 隱藏轉寫文稿部分 - "隱藏帶有即將推出的標籤的影片。 - -注意:啟用此功能也會隱藏「通知我」按鈕。" - 隱藏即將發布的影片 影片廣告已顯示 影片廣告已隱藏 隱藏影片廣告 @@ -1216,6 +1235,7 @@ Note: 隱藏或更改影片播放器中的彈出選單 彈出選單 播放器 + 恢復 YouTube 使用者名稱 恢復 YouTube 倒讚 贊助區塊阻擋(SponsorBlock) 自定義進度條組件 @@ -1285,6 +1305,23 @@ Note: 不顯示舊的影片畫質選單 顯示舊的影片畫質選單 恢復舊的影片畫質選單 + \@使用者帳號 (使用者名稱) + 顯示的格式 + 使用者名稱 (@使用者帳號) + 使用者名稱 + 使用者名稱已使用 + 使用者名稱已被使用 + 啟用恢復 YouTube 使用者名稱 + "需要 YouTube 資料 API v3 開發人員金鑰才能將名字替換為使用者名稱。 + +免費方案的 API 金鑰每日配額為 10,000 個, 1個配額用於將名字替換為使用者名稱 以獲得1條留言。 + +按一下查看如何取得 API 金鑰。" + 關於 YouTube 資料 API 金鑰 + 使用 YouTube 資料 API v3 的開發人員金鑰 + YouTube 資料 API 金鑰 + 1. 前往 <a href=%1$s>建立新專案&p;.<br>2.點擊<b>創建</b> 按鈕。<br>3.<br>轉到 <a href=%2$s>YouTube 資料 API v3</a>.<br>4.點選<b>啟用</b> 按鈕。<br>5.點選<b>建立憑證<b> 按鈕。 <br>6.選擇<b>公共資料</b> 選項。<br>7.點選<b>下一步</b> 按鈕。<br>8.複製 API 金鑰。<br><br>※ API 金鑰不應與其他人共用,因此它不包含在匯入/匯出設定中。 + 取得 YouTube 資料 API v3 開發人員金鑰 關於 倒讚資訊由 Return YouTube Dislike API 提供 @@ -1299,6 +1336,9 @@ Note: 倒讚數已隱藏 倒讚數已顯示 啟用恢復 YouTube 倒讚 + 估計喜歡的次數已隱藏。 + 估計喜歡的次數已顯示。 + 顯示估計喜歡的次數 倒讚數不可用(已達到用戶端 API 限制) 倒讚數不可用(狀態 %d) 倒讚數暫時不可用(API 連接超時) @@ -1313,8 +1353,12 @@ Note: 如果 恢復 YouTube 倒讚 無法使用,不顯示訊息 如果 恢復 YouTube 倒讚 無法使用,則顯示提示訊息 如果 API 無法使用,顯示提示訊息 + 隱藏 共享連結時,刪除 URL 中的跟蹤查詢參數 清理共享連結 + "像這樣的短語 '#', 'Shop' 和 'N products' 被顯示在影片字幕中。" + "像這樣的短語 '#', 'Shop' 和 'N products' 被隱藏在影片字幕中。" + 清理影片字幕 關於 sponsor.ajay.app 數據由 SponsorBlock API 提供 @@ -1476,10 +1520,10 @@ Note: 那是 <b>%s</b>。 你已經創建了 <b>%s</b> 段影片 點擊此處查看您的片段。 - 你的用戶名:<b>%s</b> - 點擊這裡更改你的用戶名 - 無法更改用戶名:狀態:%1$d %2$s。 - 用戶名成功更改。 + 你的使用者名稱:<b>%s</b> + 點擊這裡變更你的使用者名稱 + 無法更改使用者名稱:狀態:%1$d %2$s。 + 使用者名稱變更完成 無法提交該段影片。\n已存在。 無法提交片段:%s 無法提交片段:%s @@ -1551,6 +1595,7 @@ Note: 18.33.40 - 恢復舊的 Shorts 頁籤 18.38.45 - 恢復舊版預設影片畫質 18.48.39 - 停用即時更新「觀看次數」和「喜歡次數」 + 19.13.37 - 恢復舊式滾動數位動畫 欺騙應用程式版本目標 輸入欺騙的應用程式版本目標 編輯欺騙應用程式版本 @@ -1580,11 +1625,19 @@ AVC (H.264) 的最大解析度為 1080p,影片播放將比 VP9 或 AV1 使用 串流資料已偽裝。 偽裝串流數據 安卓 + 安卓創作者 + Android 嵌入式播放器 + Android 測試套件 Android 電視 Android VR iOS + TV HTML5 + Web 預設客戶端 關閉此設定可能會導致影片播放問題。 + 滑動控制 (亮度) 靈敏度的值必須在 1-1000 (%) 之間 + 配置亮度滑動的最小距離,範圍為 1 到 1000 (%)。\n最小距離越短,亮度等級變化越快。 + 滑動控制 (亮度) 靈敏度 在「鎖定螢幕」模式下停用滑動手勢 在「鎖定螢幕」模式下啟用滑動手勢 在「鎖定螢幕」模式下滑動手勢 @@ -1600,6 +1653,9 @@ AVC (H.264) 的最大解析度為 1080p,影片播放將比 VP9 或 AV1 使用 滑動疊加層上的檔案大小 滑動疊加層顯示的時長(毫秒) 滑動疊加層時長 + 滑動控制 (音量) 靈敏度的值必須在 1-1000 (%) 之間 + 將音量滑動的最小距離配置為1 到1000 (%) 之間。 \n\n最小距離越短,亮度等級變化越快。 \n\n建議的音量滑動靈敏度在 15 個音量步長時為 100%,在 150 個音量步長時為 10%。 + 滑動控制 (音量) 靈敏度 "交換創作按鈕與通知按鈕的位置,透過偽裝裝置資訊來實現 • 變更這項設定可能需要重新啟動裝置 @@ -1617,6 +1673,7 @@ AVC (H.264) 的最大解析度為 1080p,影片播放將比 VP9 或 AV1 使用 若此設定未生效,請嘗試切換至無痕模式。" 預設 RVX 音樂 + 警告 %s 未安裝。 請安裝它。 已安裝的 RVX 音樂 套件名稱。 RVX 音樂包名稱 From d1235f7148335885fbcb85411bdba4ccddba9ab7 Mon Sep 17 00:00:00 2001 From: Aaron Veil <70171475+anddea@users.noreply.github.com> Date: Wed, 23 Oct 2024 18:11:12 +0300 Subject: [PATCH 102/103] build: update api --- api/revanced-patches.api | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/api/revanced-patches.api b/api/revanced-patches.api index f605368af..3cd9098f2 100644 --- a/api/revanced-patches.api +++ b/api/revanced-patches.api @@ -299,6 +299,7 @@ public final class app/revanced/patches/music/utils/integrations/Constants { public static final field NAVIGATION_CLASS_DESCRIPTOR Ljava/lang/String; public static final field NAVIGATION_PATH Ljava/lang/String; public static final field PATCHES_PATH Ljava/lang/String; + public static final field PATCH_STATUS_CLASS_DESCRIPTOR Ljava/lang/String; public static final field PLAYER_CLASS_DESCRIPTOR Ljava/lang/String; public static final field PLAYER_PATH Ljava/lang/String; public static final field SHARED_PATH Ljava/lang/String; @@ -332,7 +333,6 @@ public final class app/revanced/patches/music/utils/resourceid/SharedResourceIdP public final fun getColorGrey ()J public final fun getDarkBackground ()J public final fun getDesignBottomSheetDialog ()J - public final fun getDialogSolid ()J public final fun getEndButtonsContainer ()J public final fun getFloatingLayout ()J public final fun getHistoryMenuItem ()J @@ -374,7 +374,6 @@ public final class app/revanced/patches/music/utils/resourceid/SharedResourceIdP public final fun setColorGrey (J)V public final fun setDarkBackground (J)V public final fun setDesignBottomSheetDialog (J)V - public final fun setDialogSolid (J)V public final fun setEndButtonsContainer (J)V public final fun setFloatingLayout (J)V public final fun setHistoryMenuItem (J)V @@ -771,6 +770,7 @@ public final class app/revanced/patches/shared/integrations/Constants { public static final field INTEGRATIONS_UTILS_CLASS_DESCRIPTOR Ljava/lang/String; public static final field INTEGRATIONS_UTILS_PATH Ljava/lang/String; public static final field PATCHES_PATH Ljava/lang/String; + public static final field SPANS_PATH Ljava/lang/String; } public final class app/revanced/patches/shared/litho/LithoFilterPatch : app/revanced/patcher/patch/BytecodePatch, java/io/Closeable { @@ -856,6 +856,13 @@ public final class app/revanced/patches/shared/settingmenu/SettingsMenuPatch : a public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V } +public final class app/revanced/patches/shared/spans/InclusiveSpanPatch : app/revanced/patcher/patch/BytecodePatch, java/io/Closeable { + public static final field INSTANCE Lapp/revanced/patches/shared/spans/InclusiveSpanPatch; + public fun close ()V + public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V + public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V +} + public abstract class app/revanced/patches/shared/spoofappversion/BaseSpoofAppVersionPatch : app/revanced/patcher/patch/BytecodePatch { public fun (Ljava/lang/String;)V public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V @@ -1460,6 +1467,7 @@ public final class app/revanced/patches/youtube/utils/integrations/Constants { public static final field SHARED_PATH Ljava/lang/String; public static final field SHORTS_CLASS_DESCRIPTOR Ljava/lang/String; public static final field SHORTS_PATH Ljava/lang/String; + public static final field SPANS_PATH Ljava/lang/String; public static final field SWIPE_PATH Ljava/lang/String; public static final field UTILS_PATH Ljava/lang/String; public static final field VIDEO_PATH Ljava/lang/String; @@ -1888,6 +1896,7 @@ public final class app/revanced/util/BytecodeUtilsKt { public static final fun findOpcodeIndicesReversed (Lcom/android/tools/smali/dexlib2/iface/Method;Lkotlin/jvm/functions/Function1;)Ljava/util/List; public static final fun getException (Lapp/revanced/patcher/fingerprint/MethodFingerprint;)Lapp/revanced/patcher/patch/PatchException; public static final fun getException (Lapp/revanced/util/fingerprint/MultiMethodFingerprint;)Lapp/revanced/patcher/patch/PatchException; + public static final fun getFiveRegisters (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;I)Ljava/lang/String; public static final fun getMethodCall (Lapp/revanced/patcher/fingerprint/MethodFingerprint;)Ljava/lang/String; public static final fun getMethodCall (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;)Ljava/lang/String; public static final fun getWalkerMethod (Lapp/revanced/patcher/fingerprint/MethodFingerprintResult;Lapp/revanced/patcher/data/BytecodeContext;I)Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod; From 94248b8aaa0d9537b69952101bb47582326a2ea4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 24 Oct 2024 16:31:25 +0000 Subject: [PATCH 103/103] chore(release): 2.230.0-dev.6 [skip ci] # [2.230.0-dev.6](https://github.com/anddea/revanced-patches/compare/v2.230.0-dev.5...v2.230.0-dev.6) (2024-10-24) ### Bug Fixes * **YouTube - Hook YouTube Music actions:** App crashes when first installed ([aee5a18](https://github.com/anddea/revanced-patches/commit/aee5a18b837c2f0d139a4a6f312d9df7f1b6de04)) * **YouTube - SponsorBlock:** The new segment window never showed up with Bold icons selected due to the missing drag handle ([c736841](https://github.com/anddea/revanced-patches/commit/c736841774e3b527871d6afe4b6d311a2bc2e573)) * **YouTube - Spoof streaming data:** Wrong register used ([ef1908f](https://github.com/anddea/revanced-patches/commit/ef1908ffd3554d787eb4dcc50995e2888a5f3fad)) * **YouTube & YouTube Music - GmsCore support:** Unimplemented service in GmsCore causes memory leak ([cca866b](https://github.com/anddea/revanced-patches/commit/cca866b218749dd55c52b0616c1d015135a44511)) * **YouTube Music - Custom branding icon:** Patch fails on certain versions ([1b8654a](https://github.com/anddea/revanced-patches/commit/1b8654a9779e0c1029da4b25430d6f0ef946f5e4)) ### Features * **YouTube - Hide comments components:** Add `Hide highlighted search links` setting ([39ae3b0](https://github.com/anddea/revanced-patches/commit/39ae3b0072b1e2a8716777d146ba0b45ec555c3e)) * **YouTube - Hide feed components:** Remove `Hide UPCOMING video` setting ([55a6953](https://github.com/anddea/revanced-patches/commit/55a695395bff0903d34ca45593d3ff97609fe264)) * **YouTube - Player components:** Add `Sanitize video subtitle` setting ([fc4e293](https://github.com/anddea/revanced-patches/commit/fc4e293afdfef4139ca8a1667c274efd7164ced1)) * **YouTube - Shorts components:** Add `Hide in channel` setting (Hide the Shorts shelf on the channel home tab) ([428616e](https://github.com/anddea/revanced-patches/commit/428616e2f1426e8128afab8f2b684e35cea3f1cb)) * **YouTube - Spoof app version:** Show the dialog when the app is first installed ([9fe964a](https://github.com/anddea/revanced-patches/commit/9fe964a5484b5e9b69b82a9d1128d6f43ed0052f)) * **YouTube - Swipe controls:** Add `Swipe sensitivity` settings ([ef594d0](https://github.com/anddea/revanced-patches/commit/ef594d09621e26a0b4824b7236d8915e0fedf5cf)) * **YouTube & YouTube Music - GmsCore support:** Add patch option `Disable GmsService Broker` ([b24a63c](https://github.com/anddea/revanced-patches/commit/b24a63c54d946150db3b8181102034d48ed36187)) * **YouTube & YouTube Music - Return YouTube Username:** Add `Display format` setting ([aa617ea](https://github.com/anddea/revanced-patches/commit/aa617eaf1beddbabc9239e067027fa76e58378b3)) * **YouTube Music - Navigation bar components:** Do not use hardcoded color, `Enable black navigation bar` setting is turned off ([2ba1bd5](https://github.com/anddea/revanced-patches/commit/2ba1bd5ee917f8145e207b9194daaa8acfaa839c)) * **YouTube Music - Spoof app version:** App crashes when first installed ([1f36b4e](https://github.com/anddea/revanced-patches/commit/1f36b4e843510e74e52c404beeae193cd314db50)) ### Performance Improvements * **YouTube - GmsCore support:** Improve performance by using hashsets ([1094160](https://github.com/anddea/revanced-patches/commit/10941604fe812b9fa9c965a183426745ed8519f1)) --- CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4f430929..c733a6d49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,33 @@ +# [2.230.0-dev.6](https://github.com/anddea/revanced-patches/compare/v2.230.0-dev.5...v2.230.0-dev.6) (2024-10-24) + + +### Bug Fixes + +* **YouTube - Hook YouTube Music actions:** App crashes when first installed ([aee5a18](https://github.com/anddea/revanced-patches/commit/aee5a18b837c2f0d139a4a6f312d9df7f1b6de04)) +* **YouTube - SponsorBlock:** The new segment window never showed up with Bold icons selected due to the missing drag handle ([c736841](https://github.com/anddea/revanced-patches/commit/c736841774e3b527871d6afe4b6d311a2bc2e573)) +* **YouTube - Spoof streaming data:** Wrong register used ([ef1908f](https://github.com/anddea/revanced-patches/commit/ef1908ffd3554d787eb4dcc50995e2888a5f3fad)) +* **YouTube & YouTube Music - GmsCore support:** Unimplemented service in GmsCore causes memory leak ([cca866b](https://github.com/anddea/revanced-patches/commit/cca866b218749dd55c52b0616c1d015135a44511)) +* **YouTube Music - Custom branding icon:** Patch fails on certain versions ([1b8654a](https://github.com/anddea/revanced-patches/commit/1b8654a9779e0c1029da4b25430d6f0ef946f5e4)) + + +### Features + +* **YouTube - Hide comments components:** Add `Hide highlighted search links` setting ([39ae3b0](https://github.com/anddea/revanced-patches/commit/39ae3b0072b1e2a8716777d146ba0b45ec555c3e)) +* **YouTube - Hide feed components:** Remove `Hide UPCOMING video` setting ([55a6953](https://github.com/anddea/revanced-patches/commit/55a695395bff0903d34ca45593d3ff97609fe264)) +* **YouTube - Player components:** Add `Sanitize video subtitle` setting ([fc4e293](https://github.com/anddea/revanced-patches/commit/fc4e293afdfef4139ca8a1667c274efd7164ced1)) +* **YouTube - Shorts components:** Add `Hide in channel` setting (Hide the Shorts shelf on the channel home tab) ([428616e](https://github.com/anddea/revanced-patches/commit/428616e2f1426e8128afab8f2b684e35cea3f1cb)) +* **YouTube - Spoof app version:** Show the dialog when the app is first installed ([9fe964a](https://github.com/anddea/revanced-patches/commit/9fe964a5484b5e9b69b82a9d1128d6f43ed0052f)) +* **YouTube - Swipe controls:** Add `Swipe sensitivity` settings ([ef594d0](https://github.com/anddea/revanced-patches/commit/ef594d09621e26a0b4824b7236d8915e0fedf5cf)) +* **YouTube & YouTube Music - GmsCore support:** Add patch option `Disable GmsService Broker` ([b24a63c](https://github.com/anddea/revanced-patches/commit/b24a63c54d946150db3b8181102034d48ed36187)) +* **YouTube & YouTube Music - Return YouTube Username:** Add `Display format` setting ([aa617ea](https://github.com/anddea/revanced-patches/commit/aa617eaf1beddbabc9239e067027fa76e58378b3)) +* **YouTube Music - Navigation bar components:** Do not use hardcoded color, `Enable black navigation bar` setting is turned off ([2ba1bd5](https://github.com/anddea/revanced-patches/commit/2ba1bd5ee917f8145e207b9194daaa8acfaa839c)) +* **YouTube Music - Spoof app version:** App crashes when first installed ([1f36b4e](https://github.com/anddea/revanced-patches/commit/1f36b4e843510e74e52c404beeae193cd314db50)) + + +### Performance Improvements + +* **YouTube - GmsCore support:** Improve performance by using hashsets ([1094160](https://github.com/anddea/revanced-patches/commit/10941604fe812b9fa9c965a183426745ed8519f1)) + # [2.230.0-dev.5](https://github.com/anddea/revanced-patches/compare/v2.230.0-dev.4...v2.230.0-dev.5) (2024-10-16) diff --git a/gradle.properties b/gradle.properties index 5d4d9b688..236c008e8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.230.0-dev.5 +version = 2.230.0-dev.6 diff --git a/patches.json b/patches.json index f54c3c76f..aaf641748 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Ambient mode control","description":"Adds options to disable Ambient mode and to bypass Ambient mode restrictions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Amoled","description":"Applies a pure black theme to some components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bitrate default value","description":"Sets the audio quality to \u0027Always High\u0027 when you first install the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Certificate spoof","description":"Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Changes the package name for Reddit to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"PackageNameReddit","default":"com.reddit.frontpage","values":{"Clone":"com.reddit.frontpage.revanced","Default":"com.reddit.frontpage.rvx","Original":"com.reddit.frontpage"},"title":"Package name of Reddit","description":"The name of the package to rename the app to.","required":true}]},{"name":"Change player flyout menu toggles","description":"Adds an option to use text toggles instead of switch toggles within the additional settings menu.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change version code","description":"Changes the version code of the app to the value specified in options.json. Except when mounting, this can prevent app stores from updating the app and allow the app to be installed over an existing installation that has a higher version code. By default, the highest version code is set.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"ChangeVersionCode","default":false,"values":null,"title":"Change version code","description":"Changes the version code of the app.","required":true},{"key":"VersionCode","default":"2147483647","values":null,"title":"Version code","description":"The version code to use. (1 ~ 2147483647)","required":true}]},{"name":"Custom Shorts action buttons","description":"Changes, at compile time, the icon of the action buttons of the Shorts player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"round","values":{"Cairo":"round","Outline":"outline","OutlineCircle":"outlinecircle","Round":"round","YouTube":"youtube","YouTubeOutline":"youtubeoutline"},"title":"Shorts icon style ","description":"The style of the icons for the action buttons in the Shorts player.","required":true}]},{"name":"Custom branding icon for YouTube","description":"Changes the YouTube app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube":"youtube"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"CustomHeader","default":"","values":null,"title":"Custom header","description":"The header to apply to the app.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- yt_premium_wordmark_header_dark.png\n- yt_premium_wordmark_header_light.png\n- yt_wordmark_header_dark.png\n- yt_wordmark_header_light.png\n\nThe image dimensions must be as follows:\n- drawable-xxxhdpi: 512px x 192px\n- drawable-xxhdpi: 387px x 144px\n- drawable-xhdpi: 258px x 96px\n- drawable-hdpi: 194px x 72px\n- drawable-mdpi: 129px x 48px","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashAnimation","default":true,"values":null,"title":"Restore old splash animation","description":"Restore the old style splash animation.","required":true}]},{"name":"Custom branding icon for YouTube Music","description":"Changes the YouTube Music app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube Music":"youtube_music"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_music_background_color_108.png\n- adaptiveproduct_youtube_music_foreground_color_108.png\n- ic_launcher_release.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashIcon","default":false,"values":null,"title":"Restore old splash icon","description":"Restore the old style splash icon.\n\nIf you enable both the old style splash icon and the Cairo splash animation,\n\nOld style splash icon will appear first and then the Cairo splash animation will start.","required":true}]},{"name":"Custom branding name for Reddit","description":"Renames the Reddit app to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"Reddit","values":{"Default":"RVX Reddit","Original":"Reddit"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube","description":"Renames the YouTube app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"RVX","values":{"ReVanced Extended":"ReVanced Extended","RVX":"RVX","YouTube RVX":"YouTube RVX","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube Music","description":"Renames the YouTube Music app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppNameNotification","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in notification panel","description":"The name of the app as it appears in the notification panel.","required":true},{"key":"AppNameLauncher","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in launcher","description":"The name of the app as it appears in the launcher.","required":true}]},{"name":"Custom double tap length","description":"Adds Double-tap to seek values that are specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DoubleTapLengthArrays","default":"3, 5, 10, 15, 20, 30, 60, 120, 180","values":null,"title":"Double-tap to seek values","description":"A list of custom Double-tap to seek lengths to be added, separated by commas.","required":true}]},{"name":"Custom header for YouTube Music","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube Music\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube Music\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- action_bar_logo.png\n- logo_music.png\n- ytm_logo.png\n\nThe image \u0027action_bar_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 320px x 96px\n- drawable-xxhdpi: 240px x 72px\n- drawable-xhdpi: 160px x 48px\n- drawable-hdpi: 121px x 36px\n- drawable-mdpi: 80px x 24px\n\nThe image \u0027logo_music.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 576px x 200px\n- drawable-xxhdpi: 432px x 150px\n- drawable-xhdpi: 288px x 100px\n- drawable-hdpi: 217px x 76px\n- drawable-mdpi: 144px x 50px\n\nThe image \u0027ytm_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 412px x 144px\n- drawable-xxhdpi: 309px x 108px\n- drawable-xhdpi: 206px x 72px\n- drawable-hdpi: 155px x 54px\n- drawable-mdpi: 103px x 36px","required":true}]},{"name":"Description components","description":"Adds options to hide and disable description components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Cairo splash animation","description":"Adds an option to disable Cairo splash animation.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["7.06.54","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable QUIC protocol","description":"Adds an option to disable CronetEngine\u0027s QUIC protocol.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto audio tracks","description":"Adds an option to disable audio tracks from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dislike redirection","description":"Adds an option to disable redirection to the next track when clicking the Dislike button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable haptic feedback","description":"Adds options to disable haptic feedback when swiping in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Adds an option to disable the popup that appears when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable splash animation","description":"Adds an option to disable the splash animation on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an option to use the OPUS audio codec instead of the MP4A audio codec.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable external browser","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable gradient loading screen","description":"Adds an option to enable the gradient loading screen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable landscape mode","description":"Adds an option to enable landscape mode when rotating the screen on phones.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Flyout menu components","description":"Adds options to hide or change flyout menu components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Force player buttons background","description":"Changes the dark background surrounding the video player controls at compile time.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"BackgroundColor","default":"?ytOverlayBackgroundMediumLight","values":{"Default":"?ytOverlayBackgroundMediumLight","Transparent":"@android:color/transparent","Opacity10":"#1a000000","Opacity20":"#33000000","Opacity30":"#4d000000","Opacity40":"#66000000","Opacity50":"#80000000","Opacity60":"#99000000","Opacity70":"#b3000000","Opacity80":"#cc000000","Opacity90":"#e6000000","Opacity100":"#ff000000"},"title":"Background color","description":"Specify a background color for player buttons using a hex color code. The first two symbols of the hex code represent the alpha channel, which is used to change the opacity.","required":false}]},{"name":"Force snackbar theme","description":"Force snackbar background color to match selected theme.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CornerRadius","default":"8.0dip","values":null,"title":"Corner radius","description":"Specify a corner radius for the snackbar.","required":false},{"key":"BackgroundColor","default":"?ytChipBackground","values":{"Chip":"?ytChipBackground","Base":"?ytBaseBackground"},"title":"Background color","description":"Specify a background color for the snackbar. You can specify hex color.","required":false},{"key":"StrokeColor","default":"none","values":{"None":"none","Accent":"?attr/colorAccent","Inverted":"?attr/ytInvertedBackground"},"title":"Stroke color","description":"Specify a stroke color for the snackbar. You can specify hex color.","required":false}]},{"name":"Fullscreen components","description":"Adds options to hide or change components related to fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"Hide Recently Visited shelf","description":"Adds an option to hide the Recently Visited shelf in the sidebar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts dimming","description":"Removes, at compile time, the dimming effect at the top and bottom of Shorts videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide account components","description":"Adds options to hide components related to the account menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action bar components","description":"Adds options to hide action bar components and replace the offline download button with an external download button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action buttons","description":"Adds options to hide action buttons under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide comments components","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed components","description":"Adds options to hide components related to feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed flyout menu","description":"Adds the ability to hide feed flyout menu components using a custom filter.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide navigation buttons","description":"Adds options to hide buttons in the navigation bar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide overlay filter","description":"Removes, at compile time, the dark overlay that appears when player flyout menus are open.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds options to hide buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player flyout menu","description":"Adds options to hide player flyout menu components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player overlay filter","description":"Removes, at compile time, the dark overlay that appears when single-tapping in the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended communities shelf","description":"Adds an option to hide the recommended communities shelves in subreddits.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide shortcuts","description":"Remove, at compile time, the app shortcuts that appears when app icon is long pressed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"Explore","default":false,"values":null,"title":"Hide Explore","description":"Hide Explore from shortcuts.","required":true},{"key":"Subscriptions","default":false,"values":null,"title":"Hide Subscriptions","description":"Hide Subscriptions from shortcuts.","required":true},{"key":"Search","default":false,"values":null,"title":"Hide Search","description":"Hide Search from shortcuts.","required":true},{"key":"Shorts","default":true,"values":null,"title":"Hide Shorts","description":"Hide Shorts from shortcuts.","required":true}]},{"name":"Hook YouTube Music actions","description":"Adds support for opening music in RVX Music using the in-app YouTube Music button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hook download actions","description":"Adds support to download videos with an external downloader app using the in-app download button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Layout switch","description":"Adds an option to spoof the dpi in order to use a tablet or phone layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"MaterialYou","description":"Applies the MaterialYou theme for Android 12+ devices.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Miniplayer","description":"Adds options to change the in app minimized player, and if patching target 19.16+ adds options to use modern miniplayers.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Overlay buttons","description":"Adds options to display overlay buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"rounded","values":{"Bold":"bold","Rounded":"rounded","Thin":"thin"},"title":"Icon type","description":"The icon type.","required":true},{"key":"BottomMargin","default":"5.0dip","values":{"Wider":"10.0dip","Default":"5.0dip"},"title":"Bottom margin","description":"The bottom margin for the overlay buttons and timestamp.","required":true},{"key":"WiderButtonsSpace","default":false,"values":null,"title":"Wider between-buttons space","description":"Prevent adjacent button presses by increasing the horizontal spacing between buttons.","required":true},{"key":"ChangeTopButtons","default":false,"values":null,"title":"Change top buttons","description":"Change the icons at the top of the player.","required":true}]},{"name":"Player components","description":"Adds options to hide or change components related to the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player components","description":"Adds options to hide or change components related to the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Premium icon","description":"Unlocks premium app icons.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for music and kids videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for kids videos.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove subreddit dialog","description":"Adds options to remove the NSFW community warning and notifications suggestion dialogs by dismissing them automatically.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old style library shelf","description":"Adds an option to return the Library tab to the old style.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of songs using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Username","description":"Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Username","description":"Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar components","description":"Adds options to hide or change components related to the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CairoStartColor","default":"#ffff2791","values":null,"title":"Cairo start color","description":"Set Cairo start color for the seekbar.","required":false},{"key":"CairoEndColor","default":"#ffff0033","values":null,"title":"Cairo end color","description":"Set Cairo end color for the seekbar.","required":false}]},{"name":"Settings for Reddit","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"InsertPosition","default":"About","values":{"Parent settings":"@string/parent_tools_key","General":"@string/general_key","Account":"@string/account_switcher_key","Data saving":"@string/data_saving_settings_key","Autoplay":"@string/auto_play_key","Video quality preferences":"@string/video_quality_settings_key","Background":"@string/offline_key","Watch on TV":"@string/pair_with_tv_key","Manage all history":"@string/history_key","Your data in YouTube":"@string/your_data_key","Privacy":"@string/privacy_key","History \u0026 privacy":"@string/privacy_key","Try experimental new features":"@string/premium_early_access_browse_page_key","Purchases and memberships":"@string/subscription_product_setting_key","Billing \u0026 payments":"@string/billing_and_payment_key","Billing and payments":"@string/billing_and_payment_key","Notifications":"@string/notification_key","Connected apps":"@string/connected_accounts_browse_page_key","Live chat":"@string/live_chat_key","Captions":"@string/captions_key","Accessibility":"@string/accessibility_settings_key","About":"@string/about_key"},"title":"Insert position","description":"The settings menu name that the RVX settings menu should be above.","required":true},{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube Music","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Shorts components","description":"Adds options to hide or change components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"OutlineIcon","default":true,"values":null,"title":"Outline icons","description":"Apply the outline icon.","required":true},{"key":"NewSegmentAlignment","default":"right","values":{"Right":"right","Left":"left"},"title":"New segment alignment","description":"Align new segment window.","required":true}]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube client version. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof streaming data","description":"Adds options to spoof the streaming data to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof watch history","description":"Adds an option to change the domain of the watch history or check its status.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options for controlling volume and brightness with swiping, and whether to enter fullscreen when swiping down below the player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Changes the app\u0027s theme to the values specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DarkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled Black":"@android:color/black","Catppuccin (Mocha)":"#FF181825","Dark Pink":"#FF290025","Dark Blue":"#FF001029","Dark Green":"#FF002905","Dark Yellow":"#FF282900","Dark Orange":"#FF291800","Dark Red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true},{"key":"LightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Catppuccin (Latte)":"#FFE6E9EF","Light Pink":"#FFFCCFF3","Light Blue":"#FFD1E0FF","Light Green":"#FFCCFFCC","Light Yellow":"#FFFDFFCC","Light Orange":"#FFFFE6CC","Light Red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true}]},{"name":"Toolbar components","description":"Adds options to hide or change components located on the toolbar, such as toolbar buttons, search bar, and header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Translations for YouTube","description":"Add translations or remove string resources.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomTranslation","default":"","values":null,"title":"Custom translation","description":"The path to the \u0027strings.xml\u0027 file.\nPlease note that applying the \u0027strings.xml\u0027 file will overwrite all existing translations.","required":true},{"key":"SelectedTranslations","default":"ar, bg-rBG, de-rDE, el-rGR, es-rES, fr-rFR, hu-rHU, it-rIT, ja-rJP, ko-rKR, pl-rPL, pt-rBR, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Translations to add","description":"A list of translations to be added for the RVX settings, separated by commas.","required":true},{"key":"SelectedStringResources","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"String resources to keep","description":"A list of string resources to be kept, separated by commas.\nString resources not in the list will be removed from the app.\n\nDefault string resource, English, is not removed.","required":true}]},{"name":"Translations for YouTube Music","description":"Add translations or remove string resources.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomTranslation","default":"","values":null,"title":"Custom translation","description":"The path to the \u0027strings.xml\u0027 file.\nPlease note that applying the \u0027strings.xml\u0027 file will overwrite all existing language translations.","required":true},{"key":"SelectedTranslations","default":"bg-rBG, bn, cs-rCZ, el-rGR, es-rES, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, nl-rNL, pl-rPL, pt-rBR, ro-rRO, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Translations to add","description":"A list of translations to be added for the RVX settings, separated by commas.","required":true},{"key":"SelectedStringResources","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"String resources to keep","description":"A list of string resources to be kept, separated by commas.\nString resources not in the list will be removed from the app.\n\nDefault string resource, English, is not removed.","required":true}]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Visual preferences icons for YouTube","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored","RVX Letters":"rvx_letters","RVX Letters Bold":"rvx_letters_bold","YT Alt":"yt_alt"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true}]},{"name":"Visual preferences icons for YouTube Music","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"Extended icon","description":"Apply different icons for Extended preference.","required":false}]}] \ No newline at end of file +[{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Ambient mode control","description":"Adds options to disable Ambient mode and to bypass Ambient mode restrictions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Amoled","description":"Applies a pure black theme to some components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bitrate default value","description":"Sets the audio quality to \u0027Always High\u0027 when you first install the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass image region restrictions","description":"Adds an option to use a different host for static images, so that images blocked in some countries can be received.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Certificate spoof","description":"Enables YouTube Music to work with Android Auto by spoofing the YouTube Music certificate.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Changes the package name for Reddit to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"PackageNameReddit","default":"com.reddit.frontpage","values":{"Clone":"com.reddit.frontpage.revanced","Default":"com.reddit.frontpage.rvx","Original":"com.reddit.frontpage"},"title":"Package name of Reddit","description":"The name of the package to rename the app to.","required":true}]},{"name":"Change player flyout menu toggles","description":"Adds an option to use text toggles instead of switch toggles within the additional settings menu.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change share sheet","description":"Add option to change from in-app share sheet to system share sheet.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change version code","description":"Changes the version code of the app to the value specified in options.json. Except when mounting, this can prevent app stores from updating the app and allow the app to be installed over an existing installation that has a higher version code. By default, the highest version code is set.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"ChangeVersionCode","default":false,"values":null,"title":"Change version code","description":"Changes the version code of the app.","required":true},{"key":"VersionCode","default":"2147483647","values":null,"title":"Version code","description":"The version code to use. (1 ~ 2147483647)","required":true}]},{"name":"Custom Shorts action buttons","description":"Changes, at compile time, the icon of the action buttons of the Shorts player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"round","values":{"Cairo":"round","Outline":"outline","OutlineCircle":"outlinecircle","Round":"round","YouTube":"youtube","YouTubeOutline":"youtubeoutline"},"title":"Shorts icon style ","description":"The style of the icons for the action buttons in the Shorts player.","required":true}]},{"name":"Custom branding icon for YouTube","description":"Changes the YouTube app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube":"youtube"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"CustomHeader","default":"","values":null,"title":"Custom header","description":"The header to apply to the app.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- yt_premium_wordmark_header_dark.png\n- yt_premium_wordmark_header_light.png\n- yt_wordmark_header_dark.png\n- yt_wordmark_header_light.png\n\nThe image dimensions must be as follows:\n- drawable-xxxhdpi: 512px x 192px\n- drawable-xxhdpi: 387px x 144px\n- drawable-xhdpi: 258px x 96px\n- drawable-hdpi: 194px x 72px\n- drawable-mdpi: 129px x 48px","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashAnimation","default":true,"values":null,"title":"Restore old splash animation","description":"Restore the old style splash animation.","required":true}]},{"name":"Custom branding icon for YouTube Music","description":"Changes the YouTube Music app icon to the icon specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppIcon","default":"Xisr Yellow","values":{"AFN Blue":"afn_blue","AFN Red":"afn_red","MMT":"mmt","MMT Blue":"mmt_blue","MMT Green":"mmt_green","MMT Orange":"mmt_orange","MMT Pink":"mmt_pink","MMT Turquoise":"mmt_turquoise","MMT Yellow":"mmt_yellow","Revancify Blue":"revancify_blue","Revancify Red":"revancify_red","Vanced Black":"vanced_black","Vanced Light":"vanced_light","Xisr Yellow":"xisr_yellow","YouTube Music":"youtube_music"},"title":"App icon","description":"The icon to apply to the app.\n\nIf a path to a folder is provided, the folder must contain the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders must contain the following files:\n\n- adaptiveproduct_youtube_music_background_color_108.png\n- adaptiveproduct_youtube_music_foreground_color_108.png\n- ic_launcher_release.png","required":true},{"key":"ChangeHeader","default":true,"values":null,"title":"Change header","description":"Apply the custom branding icon to the header.","required":true},{"key":"ChangeSplashIcon","default":true,"values":null,"title":"Change splash icons","description":"Apply the custom branding icon to the splash screen.","required":true},{"key":"RestoreOldSplashIcon","default":false,"values":null,"title":"Restore old splash icon","description":"Restore the old style splash icon.\n\nIf you enable both the old style splash icon and the Cairo splash animation,\n\nOld style splash icon will appear first and then the Cairo splash animation will start.","required":true}]},{"name":"Custom branding name for Reddit","description":"Renames the Reddit app to the name specified in options.json.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"Reddit","values":{"Default":"RVX Reddit","Original":"Reddit"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube","description":"Renames the YouTube app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppName","default":"RVX","values":{"ReVanced Extended":"ReVanced Extended","RVX":"RVX","YouTube RVX":"YouTube RVX","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":true}]},{"name":"Custom branding name for YouTube Music","description":"Renames the YouTube Music app to the name specified in options.json.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"AppNameNotification","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in notification panel","description":"The name of the app as it appears in the notification panel.","required":true},{"key":"AppNameLauncher","default":"RVX Music","values":{"ReVanced Extended Music":"ReVanced Extended Music","RVX Music":"RVX Music","YouTube Music":"YouTube Music","YT Music":"YT Music"},"title":"App name in launcher","description":"The name of the app as it appears in the launcher.","required":true}]},{"name":"Custom double tap length","description":"Adds Double-tap to seek values that are specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DoubleTapLengthArrays","default":"3, 5, 10, 15, 20, 30, 60, 120, 180","values":null,"title":"Double-tap to seek values","description":"A list of custom Double-tap to seek lengths to be added, separated by commas.","required":true}]},{"name":"Custom header for YouTube Music","description":"Applies a custom header in the top left corner within the app.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"CustomHeader","default":"custom_branding_icon","values":{"Custom branding icon":"custom_branding_icon"},"title":"Custom header","description":"The header to apply to the app.\n\nPatch option \u0027Custom branding icon\u0027 applies only when:\n\n1. Patch \u0027Custom branding icon for YouTube Music\u0027 is included.\n2. Patch option for \u0027Custom branding icon for YouTube Music\u0027 is selected from the preset.\n\nIf a path to a folder is provided, the folder must contain one or more of the following folders, depending on the DPI of the device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-hdpi\n- drawable-mdpi\n\nEach of the folders must contain all of the following files:\n\n- action_bar_logo.png\n- logo_music.png\n- ytm_logo.png\n\nThe image \u0027action_bar_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 320px x 96px\n- drawable-xxhdpi: 240px x 72px\n- drawable-xhdpi: 160px x 48px\n- drawable-hdpi: 121px x 36px\n- drawable-mdpi: 80px x 24px\n\nThe image \u0027logo_music.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 576px x 200px\n- drawable-xxhdpi: 432px x 150px\n- drawable-xhdpi: 288px x 100px\n- drawable-hdpi: 217px x 76px\n- drawable-mdpi: 144px x 50px\n\nThe image \u0027ytm_logo.png\u0027 dimensions must be as follows:\n\n- drawable-xxxhdpi: 412px x 144px\n- drawable-xxhdpi: 309px x 108px\n- drawable-xhdpi: 206px x 72px\n- drawable-hdpi: 155px x 54px\n- drawable-mdpi: 103px x 36px","required":true}]},{"name":"Description components","description":"Adds options to hide and disable description components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Cairo splash animation","description":"Adds an option to disable Cairo splash animation.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["7.06.54","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable QUIC protocol","description":"Adds an option to disable CronetEngine\u0027s QUIC protocol.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto audio tracks","description":"Adds an option to disable audio tracks from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dislike redirection","description":"Adds an option to disable redirection to the next track when clicking the Dislike button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable haptic feedback","description":"Adds options to disable haptic feedback when swiping in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Adds an option to disable the popup that appears when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable splash animation","description":"Adds an option to disable the splash animation on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an options to enable the OPUS audio codec if the player response includes.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable OPUS codec","description":"Adds an option to use the OPUS audio codec instead of the MP4A audio codec.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debug logging","description":"Adds an option to enable debug logging.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable external browser","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable gradient loading screen","description":"Adds an option to enable the gradient loading screen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable landscape mode","description":"Adds an option to enable landscape mode when rotating the screen on phones.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Flyout menu components","description":"Adds options to hide or change flyout menu components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Force player buttons background","description":"Changes the dark background surrounding the video player controls at compile time.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"BackgroundColor","default":"?ytOverlayBackgroundMediumLight","values":{"Default":"?ytOverlayBackgroundMediumLight","Transparent":"@android:color/transparent","Opacity10":"#1a000000","Opacity20":"#33000000","Opacity30":"#4d000000","Opacity40":"#66000000","Opacity50":"#80000000","Opacity60":"#99000000","Opacity70":"#b3000000","Opacity80":"#cc000000","Opacity90":"#e6000000","Opacity100":"#ff000000"},"title":"Background color","description":"Specify a background color for player buttons using a hex color code. The first two symbols of the hex code represent the alpha channel, which is used to change the opacity.","required":false}]},{"name":"Force snackbar theme","description":"Force snackbar background color to match selected theme.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CornerRadius","default":"8.0dip","values":null,"title":"Corner radius","description":"Specify a corner radius for the snackbar.","required":false},{"key":"BackgroundColor","default":"?ytChipBackground","values":{"Chip":"?ytChipBackground","Base":"?ytBaseBackground"},"title":"Background color","description":"Specify a background color for the snackbar. You can specify hex color.","required":false},{"key":"StrokeColor","default":"none","values":{"None":"none","Accent":"?attr/colorAccent","Inverted":"?attr/ytInvertedBackground"},"title":"Stroke color","description":"Specify a stroke color for the snackbar. You can specify hex color.","required":false}]},{"name":"Fullscreen components","description":"Adds options to hide or change components related to fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"DisableGmsServiceBroker","default":false,"values":null,"title":"Disable GmsService Broker","description":"Disabling GmsServiceBroker will somewhat improve crashes caused by unimplemented GmsCore services.\n\nFor YouTube, the \u0027Spoof streaming data\u0027 setting is required.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"GmsCoreVendorGroupId","default":"app.revanced","values":{"ReVanced":"app.revanced"},"title":"GmsCore vendor group ID","description":"The vendor\u0027s group ID for GmsCore.","required":true},{"key":"CheckGmsCore","default":true,"values":null,"title":"Check GmsCore","description":"Check if GmsCore is installed on the device and has battery optimizations disabled when the app starts. \n\nIf GmsCore is not installed the app will not work, so disabling this is not recommended.","required":true},{"key":"DisableGmsServiceBroker","default":false,"values":null,"title":"Disable GmsService Broker","description":"Disabling GmsServiceBroker will somewhat improve crashes caused by unimplemented GmsCore services.\n\nFor YouTube, the \u0027Spoof streaming data\u0027 setting is required.","required":true},{"key":"PackageNameYouTube","default":"anddea.youtube","values":{"Clone":"bill.youtube","Default":"anddea.youtube"},"title":"Package name of YouTube","description":"The name of the package to use in GmsCore support.","required":true},{"key":"PackageNameYouTubeMusic","default":"anddea.youtube.music","values":{"Clone":"bill.youtube.music","Default":"anddea.youtube.music"},"title":"Package name of YouTube Music","description":"The name of the package to use in GmsCore support.","required":true}]},{"name":"Hide Recently Visited shelf","description":"Adds an option to hide the Recently Visited shelf in the sidebar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts dimming","description":"Removes, at compile time, the dimming effect at the top and bottom of Shorts videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide account components","description":"Adds options to hide components related to the account menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action bar components","description":"Adds options to hide action bar components and replace the offline download button with an external download button.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide action buttons","description":"Adds options to hide action buttons under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to hide ads.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Hide comments components","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed components","description":"Adds options to hide components related to feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide feed flyout menu","description":"Adds the ability to hide feed flyout menu components using a custom filter.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide navigation buttons","description":"Adds options to hide buttons in the navigation bar.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide overlay filter","description":"Removes, at compile time, the dark overlay that appears when player flyout menus are open.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds options to hide buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player flyout menu","description":"Adds options to hide player flyout menu components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player overlay filter","description":"Removes, at compile time, the dark overlay that appears when single-tapping in the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended communities shelf","description":"Adds an option to hide the recommended communities shelves in subreddits.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide shortcuts","description":"Remove, at compile time, the app shortcuts that appears when app icon is long pressed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[{"key":"Explore","default":false,"values":null,"title":"Hide Explore","description":"Hide Explore from shortcuts.","required":true},{"key":"Subscriptions","default":false,"values":null,"title":"Hide Subscriptions","description":"Hide Subscriptions from shortcuts.","required":true},{"key":"Search","default":false,"values":null,"title":"Hide Search","description":"Hide Search from shortcuts.","required":true},{"key":"Shorts","default":true,"values":null,"title":"Hide Shorts","description":"Hide Shorts from shortcuts.","required":true}]},{"name":"Hook YouTube Music actions","description":"Adds support for opening music in RVX Music using the in-app YouTube Music button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hook download actions","description":"Adds support to download videos with an external downloader app using the in-app download button.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Layout switch","description":"Adds an option to spoof the dpi in order to use a tablet or phone layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"MaterialYou","description":"Applies the MaterialYou theme for Android 12+ devices.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Miniplayer","description":"Adds options to change the in app minimized player, and if patching target 19.16+ adds options to use modern miniplayers.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation bar components","description":"Adds options to hide or change components related to the navigation bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links directly","description":"Adds an option to skip over redirection URLs in external links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Overlay buttons","description":"Adds options to display overlay buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"IconType","default":"rounded","values":{"Bold":"bold","Rounded":"rounded","Thin":"thin"},"title":"Icon type","description":"The icon type.","required":true},{"key":"BottomMargin","default":"5.0dip","values":{"Wider":"10.0dip","Default":"5.0dip"},"title":"Bottom margin","description":"The bottom margin for the overlay buttons and timestamp.","required":true},{"key":"WiderButtonsSpace","default":false,"values":null,"title":"Wider between-buttons space","description":"Prevent adjacent button presses by increasing the horizontal spacing between buttons.","required":true},{"key":"ChangeTopButtons","default":false,"values":null,"title":"Change top buttons","description":"Change the icons at the top of the player.","required":true}]},{"name":"Player components","description":"Adds options to hide or change components related to the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player components","description":"Adds options to hide or change components related to the player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Premium icon","description":"Unlocks premium app icons.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for music and kids videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove background playback restrictions","description":"Removes restrictions on background playback, including for kids videos.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove subreddit dialog","description":"Adds options to remove the NSFW community warning and notifications suggestion dialogs by dismissing them automatically.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old style library shelf","description":"Adds an option to return the Library tab to the old style.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of songs using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Username","description":"Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Username","description":"Adds an option to replace YouTube handles with usernames in comments using YouTube Data API v3.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Adds an option to remove tracking query parameters from URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar components","description":"Adds options to hide or change components related to the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CairoStartColor","default":"#ffff2791","values":null,"title":"Cairo start color","description":"Set Cairo start color for the seekbar.","required":false},{"key":"CairoEndColor","default":"#ffff0033","values":null,"title":"Cairo end color","description":"Set Cairo end color for the seekbar.","required":false}]},{"name":"Settings for Reddit","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":["2023.12.0","2024.17.0"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"InsertPosition","default":"About","values":{"Parent settings":"@string/parent_tools_key","General":"@string/general_key","Account":"@string/account_switcher_key","Data saving":"@string/data_saving_settings_key","Autoplay":"@string/auto_play_key","Video quality preferences":"@string/video_quality_settings_key","Background":"@string/offline_key","Watch on TV":"@string/pair_with_tv_key","Manage all history":"@string/history_key","Your data in YouTube":"@string/your_data_key","Privacy":"@string/privacy_key","History \u0026 privacy":"@string/privacy_key","Try experimental new features":"@string/premium_early_access_browse_page_key","Purchases and memberships":"@string/subscription_product_setting_key","Billing \u0026 payments":"@string/billing_and_payment_key","Billing and payments":"@string/billing_and_payment_key","Notifications":"@string/notification_key","Connected apps":"@string/connected_accounts_browse_page_key","Live chat":"@string/live_chat_key","Captions":"@string/captions_key","Accessibility":"@string/accessibility_settings_key","About":"@string/about_key"},"title":"Insert position","description":"The settings menu name that the RVX settings menu should be above.","required":true},{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Settings for YouTube Music","description":"Applies mandatory patches to implement ReVanced Extended settings into the application.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"RVXSettingsMenuName","default":"ReVanced Extended","values":null,"title":"RVX settings menu name","description":"The name of the RVX settings menu.","required":true}]},{"name":"Shorts components","description":"Adds options to hide or change components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"OutlineIcon","default":true,"values":null,"title":"Outline icons","description":"Apply the outline icon.","required":true},{"key":"NewSegmentAlignment","default":"right","values":{"Right":"right","Left":"left"},"title":"New segment alignment","description":"Align new segment window.","required":true}]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube client version. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds options to spoof the YouTube Music client version. This can remove the radio mode restriction in Canadian regions or disable real-time lyrics.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof streaming data","description":"Adds options to spoof the streaming data to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof watch history","description":"Adds an option to change the domain of the watch history or check its status.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options for controlling volume and brightness with swiping, and whether to enter fullscreen when swiping down below the player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Changes the app\u0027s theme to the values specified in options.json.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"DarkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled Black":"@android:color/black","Catppuccin (Mocha)":"#FF181825","Dark Pink":"#FF290025","Dark Blue":"#FF001029","Dark Green":"#FF002905","Dark Yellow":"#FF282900","Dark Orange":"#FF291800","Dark Red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true},{"key":"LightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Catppuccin (Latte)":"#FFE6E9EF","Light Pink":"#FFFCCFF3","Light Blue":"#FFD1E0FF","Light Green":"#FFCCFFCC","Light Yellow":"#FFFDFFCC","Light Orange":"#FFFFE6CC","Light Red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":true}]},{"name":"Toolbar components","description":"Adds options to hide or change components located on the toolbar, such as toolbar buttons, search bar, and header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Translations for YouTube","description":"Add translations or remove string resources.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomTranslation","default":"","values":null,"title":"Custom translation","description":"The path to the \u0027strings.xml\u0027 file.\nPlease note that applying the \u0027strings.xml\u0027 file will overwrite all existing translations.","required":true},{"key":"SelectedTranslations","default":"ar, bg-rBG, de-rDE, el-rGR, es-rES, fr-rFR, hu-rHU, it-rIT, ja-rJP, ko-rKR, pl-rPL, pt-rBR, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Translations to add","description":"A list of translations to be added for the RVX settings, separated by commas.","required":true},{"key":"SelectedStringResources","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"String resources to keep","description":"A list of string resources to be kept, separated by commas.\nString resources not in the list will be removed from the app.\n\nDefault string resource, English, is not removed.","required":true}]},{"name":"Translations for YouTube Music","description":"Add translations or remove string resources.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"CustomTranslation","default":"","values":null,"title":"Custom translation","description":"The path to the \u0027strings.xml\u0027 file.\nPlease note that applying the \u0027strings.xml\u0027 file will overwrite all existing language translations.","required":true},{"key":"SelectedTranslations","default":"bg-rBG, bn, cs-rCZ, el-rGR, es-rES, fr-rFR, hu-rHU, id-rID, in, it-rIT, ja-rJP, ko-rKR, nl-rNL, pl-rPL, pt-rBR, ro-rRO, ru-rRU, tr-rTR, uk-rUA, vi-rVN, zh-rCN, zh-rTW","values":null,"title":"Translations to add","description":"A list of translations to be added for the RVX settings, separated by commas.","required":true},{"key":"SelectedStringResources","default":"af, am, ar, ar-rXB, as, az, b+es+419, b+sr+Latn, be, bg, bn, bs, ca, cs, da, de, el, en-rAU, en-rCA, en-rGB, en-rIN, en-rXA, en-rXC, es, es-rUS, et, eu, fa, fi, fr, fr-rCA, gl, gu, hi, hr, hu, hy, id, in, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, nb, ne, nl, no, or, pa, pl, pt, pt-rBR, pt-rPT, ro, ru, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, uk, ur, uz, vi, zh, zh-rCN, zh-rHK, zh-rTW, zu","values":null,"title":"String resources to keep","description":"A list of string resources to be kept, separated by commas.\nString resources not in the list will be removed from the app.\n\nDefault string resource, English, is not removed.","required":true}]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video playback","description":"Adds options to customize settings related to video playback, such as default video quality and playback speed.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Visual preferences icons for YouTube","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.29.38","18.33.40","18.38.44","18.48.39","19.05.36","19.16.39"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored","RVX Letters":"rvx_letters","RVX Letters Bold":"rvx_letters_bold","YT Alt":"yt_alt"},"title":"RVX settings menu icon","description":"The icon for the RVX settings menu.","required":true}]},{"name":"Visual preferences icons for YouTube Music","description":"Adds icons to specific preferences in the settings.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":["6.20.51","6.29.59","6.42.55","6.51.53","7.16.53"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"ExtendedIcon","default":"Extension","values":{"Custom branding icon":"custom_branding_icon","Extension":"extension","Gear":"gear","ReVanced":"revanced","ReVanced Colored":"revanced_colored"},"title":"Extended icon","description":"Apply different icons for Extended preference.","required":false}]}] \ No newline at end of file

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 V(?qL&2mk;8002ovPDHLkV1kmXr3U~2 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/splash/drawable-xhdpi/record.png b/src/main/resources/music/branding/mmt_orange/splash/drawable-xhdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..0d04a49d95cf3b49174dfba590a4f1a252cbddef GIT binary patch literal 8932 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 PUU{Z0uK}u-1&90(V>K+I literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/splash/drawable-xlarge-hdpi/record.png b/src/main/resources/music/branding/mmt_orange/splash/drawable-xlarge-hdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..1c84d459a3103d1db53d0f4326ed833de0928dca GIT binary patch literal 14582 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 Tw4%YkXGBm@(3G!~wFvuP+R~z& literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/splash/drawable-xlarge-mdpi/record.png b/src/main/resources/music/branding/mmt_orange/splash/drawable-xlarge-mdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..0d04a49d95cf3b49174dfba590a4f1a252cbddef GIT binary patch literal 8932 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 PUU{Z0uK}u-1&90(V>K+I literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_orange/splash/drawable-xxhdpi/record.png b/src/main/resources/music/branding/mmt_orange/splash/drawable-xxhdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..1c84d459a3103d1db53d0f4326ed833de0928dca GIT binary patch literal 14582 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 Tw4%YkXGBm@(3G!~wFvuP+R~z& literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/header/drawable-hdpi/action_bar_logo.png b/src/main/resources/music/branding/mmt_pink/header/drawable-hdpi/action_bar_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e724259aa6f70ef5ba6044b5acf676851889a2 GIT binary patch literal 3749 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 P00000NkvXXu0mjfu^&K) literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/header/drawable-hdpi/logo_music.png b/src/main/resources/music/branding/mmt_pink/header/drawable-hdpi/logo_music.png new file mode 100644 index 0000000000000000000000000000000000000000..c5fb9a612fa40f23bf3849af59abec2e392b393c GIT binary patch literal 9148 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 N002ovPDHLkV1nHJrW^nO literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/header/drawable-xhdpi/action_bar_logo.png b/src/main/resources/music/branding/mmt_pink/header/drawable-xhdpi/action_bar_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..34c54379f3f3b2cba7f37e2df87bac2894a33e1e GIT binary patch literal 5168 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/header/drawable-xhdpi/ytm_logo.png b/src/main/resources/music/branding/mmt_pink/header/drawable-xhdpi/ytm_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..377eb8fbeec88640148fdd74013afe51e6f55ca8 GIT binary patch literal 18913 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 z z)yp_{(-KtHG-6Mn0A-;f{x0dvt16MwM$!o@SC9(5|0=xO3JS%H$12+{5n&{SP(Dr4 zqVs!`syMb#r2O70w3t|@@Uw}$_#uKiWY{;l+m6>D(MRBDfvrPHWPEcpG8&Bg= zl5{?&a=uo^JV9!^Q^I~KBGz86}ab9_e0<7O4WSm7qjR(;8;L&~jUB`oY926j>ejAWrk+dgAKONi!Q+MS?mmNQWZqPiScw_zd{UodNk|amrpjk+x?b;I z5Thw+zzi~g#iOc9YCAF5QIWZ_6`TU$ohm@a0}Z}z-o;SfyBVXZrnH?lqXEL0;#o2< zJF>W3R!|uP_65jlsPMe@1gX$&eY#SeQ21crSLd}Wj}(Pc9JOM96L`-`QgO2QOZplEgsoabCYCR9 zBFT+kE0ZBcxim6pwI`@^xt-IdGKEn6z>RPDM0UU_q!UPI^LRE%5mHX>BU41C15Q3& zNvhj;y%r19^H|!z9VENDVVX<69o|hkbY7>R63uge&wKqoNvm(DzO|Mk)q-wzc#myk z4D62c5_W3E0?V4$QK8Z7LOy3YLMEM{fyFAdaBr;VOHGA3D5x{KG4{ydbSY^L=>d}J zIz`o6J&SBBu|j@tCnz&(HW^?MX)Z|#DAK4DCv6A0>Qbd)Dn8qd6qc|0S(5Hqyrw`D zJ4m|AeP+OwVS$}{8aLO4k2(|-f+yyEHGJ5<5MfBS?kqPx&$z(*kaUkFsY8t1d=4j7 z_z>fl0MoxL7}mdx^5O3RGfTM zgrF-1jzA9ec;_{6Ot_t-ej_MMGoDNxg+<;S-c1VBrkC@XQfl+y`6Yd?BE4&T zkT|rAYKw)-W0AlH*y$A?thHziKU4-n9sMLeM_c6iIvH==xK`XqRvEgSRBfkgX*m$5 z{-6M#TS#u)O7da1Eg%t>tlCe(MOW~AEe1e4Uz07$2OOlyw?BZI{RVqEza z@8>xj)A4w&qq)(!4kIb7Q`S^8xCM%llDW0oEJ4f1NJW2D@z3){6jOMye@OPHs zk35HJK5O;;V@XbHLq#DqT)Ev+XVvDm8V#?Z_V@)!=ePQVGH$ix-g$hakmZ0Af*H)ITwIqd)}Rn+7QbU2NgKq}(0HYpXt(e5ML|(7s9xMZ-DO z7LwE&K%};7yPEfviYT?1!28ycu)1$m0~tnA8%ATFrJcw&BW+4$l{6S?2^dQ^ZbA$k z1sPdBI2pLK3`Bc^UYOFdCXsP7dZoTB>_Ns*Uyk-?yM)ZLb z2ANm^*pkF@;M?UfwiOnUH0ghW%$xR+H;XJ%fuu2T6l7$TC{aOx3rKdgi&FuOUb6V9 zZtwy!ZbwS3%OZwt z25t^Av#gbhl946!V3MLvVs>FQgNzgkQ&aSj!u%GIY1?BcWENSZ6m7!5QIL^kt&}9z zYH?y>1)R%NA6@@cmc-`PR$1Sq2CGb}EQzwp$rvSO-Atz4XUeB$kwt3&{{i92$S*~D Ru5thX002ovPDHLkV1gEjw7~!X literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/header/drawable-xxhdpi/logo_music.png b/src/main/resources/music/branding/mmt_pink/header/drawable-xxhdpi/logo_music.png new file mode 100644 index 0000000000000000000000000000000000000000..b6edcef887eb5ffd36b7278d94ee58cb4865462a GIT binary patch literal 22751 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 Kmii@O68wKH(Nqlp literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/header/drawable-xxxhdpi/ytm_logo.png b/src/main/resources/music/branding/mmt_pink/header/drawable-xxxhdpi/ytm_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6cab734f6f5dff78f32bdcc1a10c825a7fc75dc5 GIT binary patch literal 26578 zcmd43{#5Q>3^gxD|JI3KWMREfjZ$;O?%)U5ab*0)^u4#oZwg+#kNb`*X{m z@SGPp=fx&xc4udHX0B@z`9(zz6O9B71_lOGL0(!N1_n<2{dpJ#>HTxGJr)}VMjS># zT0+wk_N)uJlUxT}E0V-AeB4DuIh`ivZt!kckFtD0cmO_r zlDPf*#XueMfj;D$e83X-j*;WvuA#Jf@AN8@;iMapNl(bm>|}06*WEwwyt|i|b*{#P zG3&Qx^XfM*9i^lMaVi`X1h~NeAKsR!IEs1K!)m*zII<6p0j^#O^v>kLak7JjgZWR2 z?Rh6guFUNvt~dXTuMxQc|2qq3DjWm`WJ_QE#8tBB2^s&7T{wm@Dzf2)^Zic@uL@zj z`5r}!`C>A8GT4Q$V*lrhUgG(gn9kViE!RcH#VX7bk%uQ!UnPn1MJeSI@5#h#rMkn{ z!)qk-q@@1udJV+{^l3TBy&)QgQ%C^GVym!Htr*)0UKqUaNcxFzB>#78z6XN&MQyiu zdcj^ni7cJ)%U@;5U7x~}>F6)v`~PPg6^=YT;7x%4R04?ck{D(F`gTc8{ zVQ?Z0B(9H6mra|~am#F<3m3e_QiKn1e54BbA8l4g^`HVynalCRqZ7iloh#>0B(Bls z%pR!!SKCu?D3)vdlx`+<-p5UN;GgcGh2Y7uFLz96sQ>dbfpjvPH~rq2%f~L>70Mw7 z3b#CSU2*?M-h5OX$CBh^AHKqQI;7xnF;??DDY>Hm`<4I{{y8_gM-IWI2*v8zlaQkg z8M(s$JAevhjD})E_IsSF-Ef{u$SN79b}X#q|IC-;3kv`09!@M_6i8p<&l}MvchPzH zL*f6c_2ZbH;gA+YOcPEHV)>BQstGVfFXDf%eK295TJdU^kBQl04^Cc9$n5aG60)6D zObGISk8l&;oDZodI9o;;garQWZ_~+>`A#b%j`BatP!Sq{S$W__E*X5v&4v`8C^lH| zebi4NYX%MLJyle{e*3Eux&w2`|*`2S?>$(P$aoGy}@DiE z?EWvYk$`XsxrqQD;p1En6(V^o3gI6yWCAlH^X}LmIi=wxsR5&)fi{jW_C3^Y~?w* ze4~?pu;APaEDg2xROvoNRLYY8FNYsL=P#-55iaeQW~SS5i&pj5SEgE=-jGJNOd=-B zXYQsxZ3zon3#_@1eHs+*5v%FrbS0f!fQ~r`1K{CeC3#ioCRz$IU*2uz4nEKu(YJU$ zf2qs+4q+E=h6mZrzcLeDWSCa76r@dARJb}*9xLpW{GlB>J27=+*+pozla-(PI$NLu>kiu>n6TqqVl2~!UEws>BQxkGhpc04WE`b?r9UgB44cl30F z+Nl?wf@P`1GoS3m>2D~;?4a5gO8}#2e zYjP&1J&7J8b>rU+Y77>D+|r8{i%zB!&~S+@;Y_h1yxeiJl_eR56K~0vhm&s&ozzHn$IZYI)H{dcT@DCg- z3H6P157zX*!-w)T)s_CJQ0Pf#flT@CQ6zJ1r!(#HRNpEAeGL}-2mo2J3QQqOgr$i< zvl=GXGqSm%#vG=NH~M?SsB11RPD;sodE3Q~|09=q%!3{F651O7A|mBb+E#>8pNZ6} zBnUrnTGs+7Zdbm?5&yXWqZ=vwO7!JOb+L0cfj%hqn2vo@X7;l5~iPMp7o*iLY1DBB?cK@p2Q^YkUVBRRxK$!EFA~s=+t#& z8kpN5Lo964jO9Gu`@HSI+!&Um+`a3Q_&82@yuVlLD>%yJOPA$&bOdfNR_+*&P(DiNGki z;y79Q9-k9Nz`&l!gy*NxPL2Y%dmPs-flPB+I#wLv8Wqr0?2pcZM!gv_j98vbPpbIK zZiUzS`f&OxG6lg-nmB-j$(x3=S)vCr4GuUeJ_wSS@*oz36^p|A88mIlc5p*St+Mp^ z36#FqJ)TN{yMl(}DFk_zMTGoi7NMnTtApRhYQzL;l&QFJ9^%a@3VYRIrV8O^kWl9X z7o5Mgk`H9=@_iqajfEiNFeU!!(ZQ2HBInxcR--owLx2P0)M31cxjIn{2CreJ7VrK+ z9f)0mt*7RP<%xTr?kH_f0%VF-E{=b&p2OHFCJUk;J#+X3>F%!cXT|no47>q|cdPuU zC1vT66|@NpP)dD6w`(=d&MawFq|lIyD@iiwA$&9Wt?Fz4j1)=dB^s6IG|>8JetmiJeFUR9SY%%Eouy zj7*A`9^Rom&jrSaH-;)B9xXgh^ttf-V6Grsq)p# zq%F^HJBl=T5Ck{@oGH*|@nOOUF0s+Fr}Cd^973vnfHF{Jfc_R-Axyb5zAv{akhJ;F zCHxTO1CSMz=w66d@$Lr7d0^W!J^QD0LNjn{_au9UZ^{mw1^CI^j-?wueY8V>;|>u} zI9KS(h?l=JrFXJWZG-Zs_aeQ|X<)cD6ag+6E^wx9UKH<%xE)m_lWPl) zkzTyk%*q!hAA@Qk3g!sn!P!r1gozME<%krwq1hiy=Tuqp%;D5LGq-B@H(e{P7khFg zlgHzH)oFFH0;?Qg1j;8%a?#2JFknX#z>mLHNTGpAakJm|shgbm=%isnL8`&k1mg0b zM<>~x4V`LkXNPpvac+V+MxA!*1|^&0KAZMk}6PX91K*ySwq3S@e>T;-pF_`*Squ&D@B6bEp0+hEvW7$9veVVJ1d8E_C-; z*U*uHc4cEg2?)Xqr~=5tac2Qr>7B^quu_O`;pPOTXv{ksMr7;m3B5=?tNNU9@~cn= zp5P;UjIpE*RUf(tUyyJU`&%~-FzTBq=m7kI0 zGbH2E$^t$F?Y14{Djgy&@b1kCu-{V6cIEo+5{Wlpeat{nLW_j*5TYFa;=1$J}LN!H!gh z_==g`+1DT|-qBzBAWaUq%vadS^%k+kU97Z^JHN4X^A+8Fd3D&j<9yX&blSeb!7X>+ z<0BH=FvPaBd)|0C_n?P(4hkh5&6btLzBZVRCe`}CoDAPAe$6A}|E6bcB(VSEJDxk5 z@{h8_v1|b@-+4WT)HZsvrI+NsO!W<&QGS!1`WPXx27+TH%D6PntrvFPjs(# z;8(H3H|uTg>yK_wTfoElh@$dd<$YJ^27241BvsXCdJQK*qM;GDd{h2iIkU{NegYNTn3p7Wiz@Ja7E8OWLO8=`^Rd>IIz?l6`QXnH4WM(W`nPCj0-y)8Tx4mZopBt6 zK@(Tu?i_vr9D;HyJ?W*{R&xUMQ@W8m#hL+;za=TZs{H;w1@;8c^zeNHi++A^(|e|M z)zz7Xb*HG_YhP7aIlAl+3o-M5Td3CeXl`yMXKCAWlGjEU=`nX(oPE+Z>0X}|t9UuZ z&%2j~Mt9#wpGk?4zobiN`#^_>J-VOPQUJct#F7fD0Dma_|1}bHEgvXp3qy{sVwqm9-UDz|09I;5pBRY$_f53}Fz<1$O#MU=cy9eN z(I1JQ>@q3B*LJ@htx*|Im=Q==pUG*a=sY2C0Qipy&3f`UIe?=7cq5a{l7z7Lehg0| z`p7@lg0B?O_f0Q-a+!LnmW!$b9G340lE?5C&9pcPa@}TF$ZNLUZzU1??5+4Juc3_> zG5a3@iDOVSqhWjzF0AceJ_XxmH}a0*VWCdBEgGh0JN`k1Pn)b+65NU5N*ZPBV9~4l zCea>b(?c_>)PqNTK&>#v*0!5uIs<62uu^mq1?3JjPvcjX$jzfAO~7w^J7On}(Fv^z z*fu3NGk*M8Dc)Wx`Avm(>XROP*skTJp0eKB7)>B_gvcAWuW8qvtDZvXC|F34@LiHsDMi2E3D^q)*S)~C%mX&Fu?P31w%e<>eQ=eLMgMI6@L1nTwrA`@7 zWlCgGU;Nd+TP)W5PJ9M!0aA#vf%^ZF{d`(DnL!@H&3_r>BDQJX zq&GmNG=S#gaC-Oi-mdEFu4iY5+-uZLT?0A=!3pM=>vK zi(Z*puWGX3G#8vMi3V$BHnvepb*{{+7tq@ywV=))&pYj99#Pc10kiKv&WxZWEc)Sm zU%GaObDPzzDxf{WSrRxrA>C}2dICF8LfVQN&{0>BM;~0NwWI@{KT(qLIwt;QP+@eO z*s{dHQpx%_aDHYLI^e5k)HCk)>YpGGgxt2FGeX~eC9>LN$1goMGuwitTco71<2l2?NwbUH z>j#tf_43+Sh_kELcRIQZwKi5OtnmfD{O5>_!Afb>f7OEITp6#kT<69u@Hb_P4Z4yO zz@kqIHqo}E|0KejJ3GXRm@!{BoP1MGpSVA7#m9uIsi|;d<$g$GGW%sE31+(F?;T!uKT$nlnJdD?85DOd6K z1{E)v1h33fh}`m_`!Y$C?BafYQD3o>CMOg3B@rl~-+g_PqHgTW*Q?lY>2@0Md?Q+` z>FmM#d0U+hy$+*A2ogDcWQsffBvVZiCi~7}q~wF%gLudrA4j_6WUsYqY&l-cHD{>< zXaCeu_>y%IK^tREke-vsz^~c`vV>xfN%hQC^pVrhY}74N_4%Bx#Fp!8e}_n(r3GN6Lp~jF zXgmWJ+dW{+wcBm!;|+JpI(cG{3?Rh6AZs$~2X5rOJs)VmUDe0?vWPIz*ldqUd(pEh z2lV&5vKe*qH>a)nzrDn&1c|Do=tsinZ7r=dZ;MJ!UJ8&jr)pxnPB8Hjx;T21=_sVe z+OabGkTyS*W9ojzBzQYlJ8fg9?Ydo92}Q~`==~)|8jz*Xzr#}JgK0d;fG6r_8M)G7 zF_~+|B3hR?q1Btd6ChS}aUkv24ciUG1J|*8TRgOq^RNT3wCKfCq)3%VBQTF?Tv6K- z4rU|XJkNom6A+h^;M*qG*1fL;kyc=e?)|L=N2Ad8x=qwSZRt)nXjl1pZv{(=QaIQWt-s$wut#v z|2A2kWqci>?Pjl*iWjGVlyJFkg9h^TeZE~j$x3W=jH~{H&&^d)Z zs;P;8qgKm;f8d9Ox+C3LT%LY*%!mL@YU_{DhC65tr<(O~dNOUX@7|XmjeVRUX^Xn> zfOeWp?{q>>z~sE`LgJqZ*$jR>pLD<4KttJmsE6CH*PWm%4&5ScPv;$3FY=LojU(=Z z@Y>BtJaxMDodtnA>CD!4c6L97zTQ4Q-@9l{q=3C=ul`}KDwb*&KCBc_562Ve zEkrFVswTC>t!)b7QN4UxhZjUf8HM1;kK!l)?Ij%Oyjz>A8xGc<|xl9+zfPVcd z1j&)HPf74_t8dEf)k2roLO}nb_53rOes|jO zj{veS`=iZaWVzJkwkG76dWidT_!*Jo8JAQhfVJFptVaxr(chK^d5E0O{#9gngk>mQ67 ze9*!j;fHupm-~;edd9|kpXYn~Ku-D69 zZj#JMqkJ*1<~G8F^+#XiD@eld)}U21OJ0G+Um0R7-@B!WNWeT(-#$&yGd?nbWjg&@ zElkzL>vK@BKV9-{)UP%ADDLl~;*}m^l`5FWd9D2`Um)w=%J^IdikJWPuXd94I*791 z>CtDOD^KC|eOodc!lv%^nfh>oFM5%a^&Pr+j2SJ^sb>Wk$GGGt1W&4D*HR`FKPOww zqEp_XcopL70_WKBmH$5ui@Vx^gY6 z_%(RpLHG#aQg~4B;I69^(1#~~TGHMY0)!hQix4(34=-adEOVFu6Gf=(;0vP5vF%vW-dwuw={7-}4}V^k{p9qpuM>!uwYh1V`09 zIBEXX8B008+$_>FYgbwRqyBW8FTcFJ+#snRe`h!M!k=jb*hu@!w%tGO_FRhs3+-^P zk*Q`e+iRDiNznqhm5xW2=k)uwNM>TglG5)hH{-e}{531r4wbdljnroHa|M;M$!$3G zA`;1CfIx}}+tPwMItf!sQxBFD>tC?5t9HioS_+5?L7|T^HhFLTPO8ols@TZ0T$A`N zwfVJvHi}*;`PT*t*;)WJTM59o^))8BFtAVm-0C~>SN!jmieh&j9DvH5exIM@4+8j zaMjrMJ7a^lDmFKKKo4&&OpvH_yMS=rPVjOiDBrriD`sMT(j_PIv5TicKEL{_(Kr*& zRr%!oKDBuF+|bWjoz5<5L=IL!`2C?!Qb^QHG^O^3=r7E%QLCCzJimXImP~GOY7~Xrgb(M>omlfD z1T+08Unp!nWHrLrcdd7pZQxTsWe_g+9l9L;PCBO-_V19VQXPb`5Q)kO8KrWvyU#28 ze0OM7B+No?Q;#z`c_P1I)z6HrbC^Q*T#x_V=u~2@;k%rIhZ9ftSjQg%Y`0KO{B9MA zSnt}(KMiz>Y3oTb>8^We?}`9YJ`Bkv{ihso6jjecAt3QMEk~)WT3YKG#7$|qeUUMG zqElm#!J_|*1^iygm^Hhb;3_o!tdp&_*&tm~0cmF%dkJKS(7I_s%QXZcijnk27l4-A zhg?!(&xB{yO=Oa_0Gfk4a$5BB9KsgVKYE3OcG~u>PHp>hd(YTLl2a|^U1;-5ro$AN zqx$)6ghG-jLQS0KRC>N2Rv(TZlBZ-mwTi}_%U06dXQ)Jl^|O|;maI{ zZw>C1F9_&F5Y`M`%57gUJbpdYnPyMDw!Y|y^bT*WY}TuOa3ZrNX%fC;(91Y6@j22y zxjnq1@*WCL$bLsp7!w~3<-{_dXT@GL{*JB>KZgWk&x!=Es)p~4uW74Kdlr|?E4k|4 zX60%PWJgh`mFAa>POtS`hTyBn^YbyyhMZA|j9)swK0h2m-xMPag<jy8II zn7KxYp+~eRx|$N+qecwiEHHDVT;vh<%zPp^98jn48MtLI`&U2~*%e~;8<6eHfGhT~ z*?5wfw+?GBcWi<3S2XF=*ls6odT($UeG9wk{R!L*H|cneT&q@7XPerI;o;eRR~W}F zN9-=xPro~cZllVj|5EGl;~|`8Omu{Hd&wd9AAJ?#HIlI^ghLZy<}rlm;_~S=!PBb} zc3;M}>lvkFvHM^#`FDUyl$ix)VSA%D7Mb2eRZHAEW^IA;Xl9;*(W zrcjadJ5t?@q7DyI`uiw`DTaT%J&@6Qg(w11e+ZfIB`jUp>J?y|^*;UzLdcC=?x@i% zr?O?KiZDN4>+pc{HnLK#7^n+$8~8l3cNvmc#<`|i)J!6FTWI)KQC%!rJI(MVcB5IU zhZ;3r^@j|2Xg+sy0iFZcAMe-|>;>g*jZ4clG*ps_qAxbJder6U*lEpi?8@`!iN zto3;kYh|ar&o~XYjM;RLf!~TKmgh=MDEQIhpf1_8n%mTz`i1ISS>ILvD$J#_gO`S? zQkwToU{FGpQJ3JuWxRj3N{ah%*Auec#_ui~=xp*J9(DLX;i9p%pFpjfBt&#Vzzx8V zpm-E}B;ln=Z0}ys}@>dixv0cwn9gkS-*n{|_YyJ*9nG_L` z-LD%`TY?oLa-)-dhyM9rC7R{sK|W&fKhk6lCAk+{X5@Fv5PEQqZLsBdl|dm&@h*n_ zZbE)OStmS)U8^3nVvn{)P69phL#zhAZ*5U7HKxm#DES zxmNS$Fl|vxN1I0t9R*wXFCc)-aZeBqVDw-?;177)pPqM1OH?QX=AqHZsW-BjVi=zHx%ZevAVh&__cc9 zoe%b`3;xuR?R$&QjPJaHak__HtQH>4;^SA1oOgtRaos}5+wGG=VXShkPxhsR5Ak8+ zC+@2^9;*9GD5@$*Y%^{9M>(5}-HbOK9cH2bx`O|3&^tvZAt0<}vx#(TT6x6pq~% zmWF~ChZigEz=FUVrqr10D)U#yuPTcEr`S-KJ!_g{v?3Y=OCHP>jr;nSF|NrmGwS>p zrA!K1wid_c7&98R&J8s>lOv-c_*jH-7C*=pRcMWM2={AaSJJcTRNwnGRjqfkXz`)EpX1=c%&hi!r0NA{TF^eRdnl`!uPRa}5cFjcl z)r3$oD9bnpW9{1@LH4wO1?Yt6`#nfmJ3ni>Dm8rL9>7#9U=V!^b4l}2A@tZ(@nw`& z$k9|4>PRuTRa%b|zz|a^{Fz!?Z#g$Ea?0z9UmGpG{Z3$aep-$Fj(2P#eRgJZ%E{=X zOlA|uF3=6!SN%)q;Egqqs)8qVy3eiN5Pqv$tq zyQ`2U$zMy4y{*TK0DyP!*&&_XgXYrj`w74^>i@D;pzyojs$r(9pa34gYHbx&Xm^6v zk{I=L!|g{=ml&YdXyz|RniSemGNuS!r@YUNfkU85#q}x}oq{&6$5wPJ90bKDiP#ch zer$#-pA2=*ra49j5p-gSt{~iopMUhAO z{k+Fc|MhvBXx7)u*;{jp8q=Vi^D~X6(q-|zEb$|A$uxG?5VDa{In(7z>&nV0E2cL8 ztt~m)D6RJH&QUex;JiX^Td^zXmk4|HAo%5=L))2NxEzL7Or`E~OHuhTox@*s!R*-s@Mn z*ZeUq69N`JEC5Z#VMC8Kt=YZHbD6omiNEvkTv@8LU_(3Y#OD}U?@GsNj$8@8bP^1E zu4pL&CCAhi(16uHUNlhLP2UK8rS8!g6$NSQt!#ko7r$nqxoRXwOBch}>q@!Mi=TJfaNn{xbuv#tG~!hjD~ z#7LtyZM|R;Iq&48aRW>Qf<Tt(OgYSm2?eOU>C(l8B*iDRmMiYlzCU=%l1 zg}W!+*lsYZ_#+sjzZU{@5vaO(R-)C3{8F~0ml3;vR^^Hz3ujs;1E(on)$*$V6y%Ki z(|L1u5=U@z?KoeNYb@%Q6=@77O03VkBvj7-T5j0m_f<~Fr&-u~BycG)ri${nhHdNo zJ~h@m5N4)USduEOF3I}N9r}WKAwhfUAQn^0SVk1-0Z)^JXcP|B+H%p@ce_TsH5D@6 zWD364(QKsEaBgC_g!#fx4Y)4Y)YTu>NSerUm8xD;qS!(y5i^FfTag-I6aoxb=hMwH z{B;0+l_u@ztda()q;7sah(f_@b<^3ST2MR{k80doA^>gQ95?|)K__I9ulfCW{F#3A zq^8`Hvn#w|LGkoVvjADQ`mk9T)}+;#h#<4{a10>=x+`s2ZF<{ug~g|9F-D8EK&b~L zAK=2&BOiFejP3Co2?l4TBN%@mJFc_VLc!U4Mv0GygQ92(4J)*IxMTF;VSc`j6reZ+F^=i+>G*) zlkYpby}}sYaOc7>Jn@J_T`}58NXkdltN}2io63JBMuO>E52{U@epzY>9Cy4Mt_3@)e$vv^IlEOZ(i4hR zL+8HJle#q0?Zo4h7SlXH9B-ts5UAh}(9%j*REW*rJ%ZI1`4c=WMH0W81M#tluPn=E z5P3(F?RSTU=aOhp)hUck?6$w?vPws%T3O>T8aVOF3wp&Ot+3dZ^y*2l>v1{fj{JKd zwvn-zBOt)5r}YyX?E<(%^pJBwyH7Adz5K9JCeQ zhX*BrKO*&BOR6I9L@f^Gm@r)tpA?~-)b$3;;s5$P_ovaf!)+jX`+VAEf9xprvnNa? za}BTEvZlNGW$HkUIdgA0z$@0}FK*R(G^=Vrz%fh~LTM#Kt4FBZ0(Y{Rln4>aJF_b> zQ#xzA?cHxB#7?*mLCv2T1rzbuB}ourM?yl}X+fr~@|>c1oKTm9XSvpv7+r~dJBF|M z*);<%FZYbNQ<84P^9?QuZ>gvWeIC50p!%5ugLvp$wJS+FZhAVCm60`Ffy;4r_ow38 z?Kl;&qbr7(&WGvv#kN=90NNlH@0I9QcJu@Grutnyu0tcx4_z-MyaN~KW8gxQnK3dQp>gmW=)B(H@DrBvv+gEFAhy+aSLC0`nP|Z<{Ag^i zkmCdT=_wp~p8b|w#_I;R2O88>pUXuM&IPe&dn;_Ktz?S2N?2$1}{y&rrpc z{`O)vJ0qeJE2|3)*XPw-{^_6!d?k+0EBq=~TUzj}dhNaX)#K@`CW?cVXwXJ8qjSU!fQ{>anhIU6oR0Q!(RI4=+cdWP1h0UMrDG z5s~>d^M|H#wn#WtPjzdc5e+vV_T-mTBZB44@%#}75n@r6YKI3zWp$Q5{$gv<_Gi0Q zVm42N>j@^ed?!;>m~=BQT?k}!!;RNj@OBnesIJIolKEWF;s`IEqcDN`p*o$h9bh#~z-z~N$Lbz`V;{&_-k z`ruY?U?UvDw2kA*6<5?x{->0b1YjWuj;b5IQ!OK*94)60xo%l)|#tU_m^evC`*nR z-60noi=oeKk^zpnAQrMhW$cc3Sg@0C>rP`;=d-1C`gZB%KZx9k>OQ1-fN}1=P{xV? zZ2e_o9GaoeNVaVhoy;_SY2EcZ{&BiZFTC}9k7?^S(HULpFIU3ibz*Hk)g6f&oYsf^ ztmN^m9Q0+qCO8FGfLsz)`j4mecc+e)q4iFt_`-$$g_T~{L$<8&tFlsne2xXSfL`NQ zmz%kt8p;PuuJi;0=$gbY?OSU#+Z5EioLN(%3aG}qf!483uanZ;E}@EKYclRULf5=5 z6p0}TMmP!b8*-xEQ71Iqsu`!p&3$|aYOmRSCg85XCjtX^km$Ai$IDTO> zFlNS#SL>dph;LV-6M59p2)V4pfum5m{5R>xo5+6+s9SL@(aD`R5_ymdRJ_B1g3z7T z)vIrbM{vK2Rh52V3i>`&6orBV5s4>oLPnlG-(E-SAE4Gi+EJltL@*4yZDGtp77q8< z)n=D`!}g+-8EK#dpm4OKNr6FrWU^J-6t0*wcMj08<8P#-TI+v4DSAA?+x#k)S60C6 zr+*n=<-GeLIC4w+4sfg21Z5T3;;qs<{7iv4qZe05NY$4o$8kg%&C#Irf4&q9xi!H7 zCDswov2-HQij!KWO_6wi{`(C@st!(j&Qjd(^pk*<#`x@xyL~{PUaHUAEnV3comjeD zg1_;1quXj*qz}fzXGeN%p-t~0Bc->i&|%M7Jn#zPyct2yJ}PQYc}64$N?-p-Y<8$! z!*}^aac(y#*-jNu;zm3e$i0ih38o9Ir`1fJ_)>x(58Y`!P=Q9V~y^{zcbQVcmvNEe0`0@jF z9*;ZpxxQxY6)AVptuAmtM+e z3Fmn&og2Yxt!RcXi~x!*2{TP}h{krG5joGLPXQ{l$uBHV~X2*GB7n=MsNzHV)q=vIGI@UfxBBlqAp>bdbR z$dd$0f+CO%ke1=NH(@Xw5txADyu_nO{57nkopkcy9TP&3&Rq+!C%v`sNP}Cy1wD&- z+ne-{9-BRZvYgF=$j17kgyrX`S5IqjpN7r!3Y znh_|(le4CaAi<7A86|gprPP5yr_wb(fJesyAJl)aS9XcKF$K7_jY;z*Gs}(0gpz1uMKtJya zZ8UBZ_zv%T%9caMT`6g6$zUTyO@~K?{G21Kd5Hsa?z@O&N~5IMb=!=w>5O8VE%Yjllric^=k_P(&B%o^;=;PBDX&-7Y}$DT)w2Q zSm5ro5I`FjUgW)yhw19^{L@5fv@;4)W-uJ%?&UhS>Sb2)mz{z<3hfNlcDqj zxe-&}Ga1>o;!ZD%p6=~qFNP-1?D_cw<=g#Wvj6LW|3ue!7oP2%irU6W(T>SrtxDWD zOgGgm0qs6WwjV}&!)HiZyNC$(m@yJPw*`=a5!NI=R^fg}G1GnuvfOL~SBYXFX+p+1 zI@318u8{Gtt+3i`{ft3h+>29Zi&p|~YjD?C|9!UYim(QKddK>M)=N47b11VT9~bl4dm`+}kE(!X1yX~KN4o$ow?PD`p zub1F~hmXix(hmv7Hw>Nf>BnYJ&^5ntOycoUbU;r~1=*#ZweZxWxv6kEwxcQuJ=) zDU2E<6*DwO)LODsO6=nbMM?PyWGM15uTb_k&bDXhD00g4l#nVRyHR$Xl({-KR4O#h z(>`MnDG9>!#o(BbAgorH$btZzXn`^&Yl*j8#y*-DJ7_wjn&t&m7ISj8pP9vJTC%5= zF`asKx<5g>Cb^b%B{eHrSRfufVfoYc$j_^k|5kb7J^iKth5#y zl;+R)lxooTmKdOpfs+h$Sk;d+2O}FO97a~rAUI0V7G9S74k!&*8r@W6Vtc2~9$qXy z-eB@=&*2f~V~|pp{*%yaaMF|2ORzP?8@c3|qi8@V=ewE!pp4nR<_#+Pyce)_2|Lqm zhNxr$8mv?mg8YylYY%yZT}pJT!)3zp;t*b?uNSA^BLBV?V*6~u+rusEgAbZbIHyK8 z*HD}|loq0noq7ZvIN;NOXEk1rkBi;8KBwO)m44X{n+xxJ{~RawdcS);tEx&&s;ZD; z;U^H2CUYHbH<7HNA^;TOZeFL%4sSLA58>^Bx@{0w@cLLj(n~~F_I++pqnA?RXQFs3 zCbNQdMpUkSdiugk|J~TtOnJcz*z2#5L0(1d4inPLl7iShoufNWX`(w8cZYOMbDdg_ z(5WqD@>uy+G>y(M`uzv}(bSS%LOxGF^K1qD>J9TR+?$%@r`S0vFKQbZH|(WO2b`^B zp`WMDnLZc6l%I9H+P0aaEpMh3x%^*!NW)CuyNe=S+~29l8rtu$Bq-_7u1reFC;M!j zt3R>*vM5u?!+vIAA&t$+tu;ZBDI5sSk=wvARhnso(a?E`^y!^T2N4~ zcuQg0Jh0rX$^<&mq4(F3Fh3d9A4xC_vL}1ImO594tc1W?nJ4m_a<@!Q_xP5B8MZy+ z$G=PqH=Py)Ojq%woGgdm0==%8=a+qh8crzyq4R;~5uM*N@!iQnZwFjA@0Iz_cXLiI z65cqVPz*UJmq~wwG#tbkE`cDWY zRR8ZP6Chr6@B3pT2aRvf5daukcaiaf<`z<(!*${*naz7IA>qt)qI?-Jx_{>(wk0zn zY|s;c*!^L*KX6`sY#HTrAzGM!npv5TpW)vU6<3-F%_Rfuw zU%!m=0CZmobtm&br^;j(T`e#E<`uXa<2v~T5K(%D{$^&QI9&e5+&wb<@QE+DJ+TBf z5vHv|cBbH?7&?4X!OE<=Za%GkI>vb5l+DX9Q&@LS8xCn(7$O6+SMY`JNS*W`^->vw zi~q>Y+66 z5%!JbPK&+0_WJ_fn#)-;UQtF=f3-m%oDjgpgKWHTpbf({pk zFbfzN=1K0R?-0Isc9@I(moy{^^ppcXJ2RdbDQAfQ80unw1VzA5u%@9ohyu^Wegb%? zV7V~-&dk?gS#gI^p;}eC57Xv=oMHJXt!JsPA~T%$%$I()WKW!s3aBbRm&*y@J?wYs zB;$KI*6Ge{MPrU`-JSOJC1eF@rjBDah8V_syf=_8DMve6Y5GjVp1O*Gq!Y*Ovknv3fe!6`Oy__P{?n@q` zr@|DyMnJh@QYzjO;k>fKPa;XuY(#{4_s&e|Si0h8oE*y(C}44%Gk7!7rcj%V+toE7He9 zYoH78!@OWxa|{`Oqld?Vm?&&yKUPox^>gR4Q=HU`!d=T&~cf1R+T zt|{`9?Gw!fd}y1TPZ#`(``#6>JHlOfZ`^qB*?!XuCbau_f6eqSo$k)AiBevG5bV@+ zIAL^!0hGe1Y#*&{LYbVgu7K0@V3~_PKc7d2coKcmg}Ct~jEVWxydao9ug7l+8KS)^ zA2j22sS#q{F-T^R){pFll+l1+`WOTwr+x{5T6%(SFiY|7N8vlcJBAC!p=dNA%xUOl zpw*i#u+qS1M_G3q7hOl`BbbL?uwbD&;$B$NY(S&=$hXp>ik%HVw=6GEFn9M;FE*d0 zXoUH%aEw3aS6Lryn(5EDcKTrjkw68V8k4o5J+WJjV zuUesg`SJN7u0)u^;dhN1z3?(3?_&{)rUZ5?Iq05Os zw?z=W35$gIp|MuzT3NC?x;&kc@0Bwd7sjWSh3A2>*tggaqz7w(udFaxS4bJ18dPm2 zBDVTimDy$Wem7vS@n+>h!0sB?&KY5fhvF#$8TO9734sr!V3YIG=iT%%X`rNf#Vw%h zy{hStC22ug-Q1nihA02o1KY{f{_UJtJOtD{xXlT`mS1Gp(Dk`HF7wYu`Cm)bhq!9k zl*EUob#8Q=I9#=$oL@VRbP{PxV?~`8?F|F(4BpBKwIPk3+S1*W#WdpWOEyO)BTJ0l zD+n-(+N4A!58iA-FV+S31zzJf0Pa~DRw@Q=OFYxqAA?_<_a~aBV>I3dkg8GBO`j~7 zZxfE2<;dL-94BDkP3;dNv-FHVu+{gFbnaS%MZzS{ZuLv$5_!zUn_A{+C5 zzq|x9+-@|_gaPYokwQ#j?O39-wa=ZA|ArXcFKB1mz!B*C>SPacfAZmsB7I%vl z$2ytbg0TJPM`|lRTJY84HO%-Xk4O-7hL_UzjLWT#SznH3&VW4)f@HLIZ%Q&W4qt!dw9_iq7mf^tE`a_^zWF6MhRc`1qr?-PTI9VUiKa+(lF@3q^B;y(`9QJw`NlWC0eq&}yCI`1 zh~twd4)6~7MrLvvzTtO+ziZ5A|9D{RxrPNZ%I%ZNLuK(>c^nq#7fpi#>fJ0f^?j`% z2%{GOgL%xz0(!B)L4C64!xM!2)bWKHb-#QZ*C7_fTuQo=6hqt0>;IUcyC0MyyP7qq z+SvzMri9cY`(pq{PWA!<5W0j?>$7t8^d2~+p{_z;{T%9A@++JLYy#5ekr|qUebt{p zLQ)jA!L!L$Fu6ghQrctX=zN-S*W*f8u94507tdP9YsQ@FWTabE(;ayM!n0OT=Ijc4 ze{BN+Gs1bFc?}PBqTW77aLg6`S-B5+bV-K7Bth>kFpo|yKKEA4SMMiZdFkh>KhfYEPp@BTxQt1kG~4+ zL`tc2>nZ!Nea+f+4ZdcBt>SW19=nskS{4IS1HQPzwL@p;VH72( z&*dyTZ^a)QG6^2QRM?FrgP+lX1vbLAVA$_LY7r(U*J#-R6*-ZoXSl?Nz92nLW>B1o z$5ZrRIw1PA@7j3x-Ly*->3{aeXSY&jzOodZ3qPwiOmza>lnVFjzAxmF)0oxl?cGr^ zm*yr$v3}fI&3o$+JVpYwaFo?G@)+ll_TTU&n4t&gHK!Mz6t60mJ$N}y(bE;t2#6%n zrNCZQ-cQvOwqf8p69A?#aj7v{-CSQ}5I8{#z|ujCaOGn3;^gL-w=CEafl3Xrc)ac+ zKz0eVOST>q?o?rwYYasy!h4H0*An{$aKvMT0XB*y^@(iFAzveFN3HkK@-8x3Iq^4T zci5vN2MWIqLR^22*4hVb21AtXu??E+wcVHP$`}SIeT@9@g-Y05dKjkpRl>6yOmR4Cc-!K{>?ZE9_*(OcS zSjD#eGxghbWK21(5(?ps0PTX!J(cwII(EZm`q6ZDMd)pmK0$2Lfz4FNIE)Nc&yp%1 zM_q{ZcB|zFT2-+Me?+}t$SV*0Jxk`a6y(L?LGIQB!KP1v5QeUz+R&zWce-|R)g@G~ z+Q`q@(I0$#Ah|~5f_+v@@82dGv8+FXze@qBmh=!l&{aZuVdvuvyFzphUvyfr*R^-I zkZlxug%b0?NBVJc^*FlN@Y~+JOORz46(LED`J`YfD3OCRbLA7G2#GspkrR2eRYjCv zHTM1HF4b`cCz@^ZqzOKS_F@5gGH9*Ub+=+;6ym6e}Tpz5H?mtMH*M z0o^JAz6yw2x%VyeZA(NY8=)ktq#0^Wl`I=WTrxddNr_gbjazR2{74r*SDe!qs>p6Z zZJ9KFpwdZj(xrzcZ~4#N6uTtmN-!DsTKlrXwKm>JmB`OE7;-Q-e)A9P1J&?P_H3Qn z7k4Qc3A3@geA4h46K{gJ>HDi!Z|_H#+v917BfPnhQOG@%HPUN^5e zD{}n2m=P_aKXts$>p(o7sFGiYG~Zni>+i70&z^6$SwN`v8DoGYJu#ucjN{9FU53ei zafifq;~Kp>+NL|L;bb-W(@Q_70!oF9YN^Q?<&bMaeakE{;|HO)^WWTIbQ;OI`mlRj zvG0HVvKyvTNRBsuM7(cJFtMpyu4CFTgl4r0Ueh$Ca{JepLzNQkzNIo>r&==oS$T7y z%F{1n$~Hv+8=ajQgWWG0KqGKj6TSqqTYwuCEaHN8^Z+T5Erf(Jq+-;kb>*9O)- z5aMBcvHMGyVUJI(Y)d8E6}O<|*a5ofdCdsAn@&u=g+u?56%?3ZUR+STV>;)Jl~c)i zTjke>w$f6@G~}Oo&}cWCtX?D|(Ds%=`kgn9zbfeqfu`N4479t-Oz4^C=SX6EyvnZI+<_Alb}th+}_6cNr>OGTb8dIz1>zQR&s1#miU9pSVOxaVOq;K z(DmNjYtKO=4BO%!ab6s_~PV9k+zwI?5cQP{YW|Qb{9SGBZbiYiQH@hg+}+k%S~)e?u`{*MM{p{ zyu~(Xj(uIT@UCq;DuABb3aU}Of!(}4K&+t%&dyt8=aTI(3dqI3BYl@S&=GGdM9fXQ zF7&*S3{JKDNZC!!RY!8HCS_8G=gDu$As8z&?eVu_{x_+_dRnQmRU*)B+MT}b+OR^8 z%!>3O^abWB`p{=3mGE?cV6;HZ5F2rD**z`M*7N=7z%e=%F!Whk^tY5cpB>dQmxg6D zx$e%;C!k*k$eu-I(`#J`$#0R^gtmIKZdS!95%EeWZPjToYX^?Dacs2^C_B(t9VYrG zG@6V4ZatxP`W%UOIvCNr1tGOvAE7FXrzv@F{X{||#wat|NBey(w(e8SZYL`m;QU}J z=WAsTW59r9Xh!t2-`|`F@ugPTTP8^L!-;9d=IAh~IT}uxNFc46^u@r24+Nj!fvB>s zT^QFQ-mT|;cjgy1fG|wAQkb9eDH87 zxD&_g%{TLDlsPeTONflIoJKK6(_aO%1WAU9tSWh?yifHW9qEObipL)^f>v23Y?iy5 zWHmAtXXl`SPeua>%mj6!c zw^Bk{F{!@B=za{W=Uvg29wFz+>EYT691W1ffdZ}y5dc<-eYZi(aCq#;9@)6udhcB8g}Rk8L34w;|!=zfx=GnG-(E#^F?`D z+$zL`vi=G}ZIc~?s)@i1;Pyt~uUd_@@CA2>y6JTJCBjjRH)-K#u{JzMs`$(1BG$u? zRGB{I1LwX5t8#)WAs&^#XFL%{VvG&COO{VAHMdA7T>OVAyK+fld8^MC63^j5GkOI`YL!{FCFW*B) z$lP+S)hkDDu{ZQ$Z0gW;EH>O~NmHkr%94q&jB!NT!?CsT!51b>UnuQ`atD(OXWn_t z<(SMqMYXj+K%!(y6Qh_8;6yqoiugG`6p01nLkk>8K^$Lk19zpxK0Lkh#7s-+EFRUvejSJJ31F|lsc9EWFrxT+159dTo Sd=mYQz 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 QA1G`*UHx3vIVCg!0P_1^0ssI2 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_foreground_color_108.png b/src/main/resources/music/branding/mmt_pink/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..0657a7b0cf28dafa24859e697f09e1b51d85f9c5 GIT binary patch literal 1710 zcmah~`!^E`9N$6SM#^KJWnLqOizV;(V;)1ejFRU4NUIUjJ)&l)yx)0FT+O3yqge}4 z&D>dK?0W86^QK%i%OhR){sH%X&-r}5KYl;wb3W(u#UZ?1rNouQ0RVuMyPK2W(N6dW zqQXb~AS#Fs00?8;o$SxwxUe~$nQ$UfMP%z@FOrOz6HbAilx)ZvPKYZso~<3DiBDKd`|h_w>z8Tjscf56hBZv!NW*_kuEAQ9N`9a2jBL!CGydW6qO989 z=&hx+&bzMHTn^hXz~Xa>`=~V!eeK>zrCr^8D|u|s&_+_DP@l6r!{TX5Jwi#rJnp;k zE2FHdKl|VCXO!VFGMft_V}ryMI`t;8^w0eW9}CPM^O_Z;LMxmYo^~3&`+cv%^TQGY z7aCPx?>Bd^bdqvUeEG9qPciaG@l_C{TW_8)j^rQEd4|}Xhx3v?2D8C-uubJQYf?@& z2mH}aL-iqQWf`iKhWjuV4QWlRLhoUA-zx?>gvSd(vJx*|CIQiv6QO~WbvCn=-|y^o zzxn!Thy&%Oo0y;|oSMod>;0(jDTOdi*Picjv&1u7jgPMWcv`!D78}?A`|K}~LT^$A zA=~sv+EwY{ouH89&`!Kl+(?`6wRJt>Ey2990Vf-lF>q6m0t)X>yKO?AM8tJ@yd1<& zU<=GajbmSVE~>GPR<9O@>Gv4+j&vrb6$jYzt7_@wI6@QLnh00EVMb$-wR>^>;d=$?EFAm!{L;Jo>t4W3QkOQObyJIm{^Sn~ z`kGPhzf2fudh|j(ju=o3H^x%N+!})Cq;Szu3N;%cIlcLEUj$E0KJS%QqdI4+{$08TV$9$h?&-P7SUv%v z=@e|R>H(d!Y=YJaNK}ta3^Y<2Vc^PS^of?EL_W-=ekdonDmhsRYr7<84mDCVq%cXC zyy~Fd+wm>E36cGBaxF=hErYFfp0yAP&l;&m3M=_4bY&gOZ2O)u^&}_6#HMAbAmGrp zuE=ck@b^?`Z2n*)wdu)QjuGu~)eY&5<2DQ0{twu!XrVjG9>;S?s6z(Fy1N-=vg_4c z(>uO0Q)c=o^G+=14ntu7(-%Cq2_H$ zco1pnDq{3`AFp$Zc`$daZ6Z)E#RCeerr12i)H46|X69`G)n1iZqe6W)4Ox>gyDUJ@ zU{1yVHZj{baou1YKq|#|!-Uh66M41XR>W@=c0SD4L)L_n$9dV)1eitP>yIU?=jnQV zB_Ymv4EM>pX4EQ)Nub(*tzCR^ck{STFAV{Q_4Cze=+Zj~Vta_tu(gYP` zsy>L+|AsQxRR@P5H9g7eXXw=dgamD$2H08zub66^88R9$4JEYhKwI_igPG;UU14J= zjni7TaIsTon}lV{Ukr}LhDG7Koz4jF=&(G2YnKf-QSB|rH|-~0+S;*P1HV{9FmA3| z&5R8#+Q!X`7GX)x`y29z11ZUJR}omAHrA{;-82joDn4FxMMUdcJHOl?ixDIJ?myB|$+Mk^8U$qj(r%!yxQ$5Qnfj&k z&GoALM`KPDAPP=a-h)|^xW~8_ojzyV?4e@6z9y2GW*q0WCnt;8_3m+g)jf`@o7{KP zR8FT3@+~AycS%yjL~X%dr5ZP?7W03-K5WqR3&2eWe9$qx1p4OzxI240bvlIK{u_(2 BE`b05 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/launcher/mipmap-mdpi/ic_launcher_release.png b/src/main/resources/music/branding/mmt_pink/launcher/mipmap-mdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..8c85169bef3e8a79e3225a765cfcc929cafbfc27 GIT binary patch literal 2449 zcmV;C32yd@P)pgKdgnMTig{*(D*5y}Nt+eRm)1Zj#Mz2w=a=H|N}Q zv-f_#bAIP{e&<~LzrztJyA}NgkH}_`N4o3=AV6NJ{qH|p!k68LZZUv@`?L63gu~TD z_9Amgp_!~FYssVJLGlm{I?eK$&}9QCTH+>>kCS7`-ee}YM7~YFM((09GBRUiYygGJ zEvA$6$=lV|4fqGSl-x)|>(QV=p>Ng<>=YFLV-_39 zp?1UdK{+`yzh|HN2JgA*a8qh@Isz2#Wbra7m${M9NH64Qgu<8YBjpHCyzak3K4mxD zSd1q7aWr;vG^}t_Tc~$aVKF%?T)ipKyQQH+bT|U+{U=$x7{0ox7|l_r>u652I|nF! z6bnTJkKJ(d(MaCQ`OwCQHZDZ*Jy|~AI|Gq zvzk%ox`g-LHCSi8jW^7XQOY!`vv3%PX*A%^k@{5wC|=KagZ!4=kc11qCXD^cFueNe zD&!Xwz%)%%S6AcLi(bZ|{crL2!@}Yntytx{ACETQhu)1vK#(1+KS$U=hvnc)`C7)m zOP-6^l>1jaX>LV{RRnipe|Cf&%IKwQb1!s#3k2X!fgYLmN!zh&o zVp?q%qW?3jU>>P#uw67Zo2VGv*LEQZPKHLLq@)C6?jDVSy2D(wKEAq*{;cC|* zm-2W#m@#7pcI@7ZPeyuh_wjjn$gILkEl04JoZ?@J1$nFB&G#mZ1cDCS5n!gyu$#s@ zA+6FJb0MvCJ;T*&Lnvei2i!Gk6#lSc1%5W~Y2af&M!NEFJ6VWJqaTCOiA#yv5L!8q#WK3Q+^HNS!2f3!)RePoF-R^`qISy!S3_ZkmIw^wJ7L(V!UB zj{m^S^2a8&+$r0iiy;nmu4%WWfV4_;%z!i|f9B9=jlBjCL9QA} zK`B$%zm6K9soxr|b`PA4HuB_y`ww9Kw!dLo&*hkkZrgPPjf7U| zlh#>YwG9$UkXCz`q6SU(95vXh$ z1IuJ5Mn*vfTy%S}i+NJ9qr+`V6w=zHO1uH*!qu)rtFu<=nwlCceD+!Va{f=Tq~Zst z@=U|@tiG6vlrU~Cz)P%>ikD=^Bf38j8WKPg(E5^fK$Xph-74F6Cz$T{EMUg3;64Ds!Y}){) z5>j@8Jgn=Epogo+qrL9)`cSo|3J*=XA4h9Wp|pGiHkhZdt;aqz_VmH93>ZOXt|2~N zF_To?8FbqBn(`a5zGx?=SieIt)9Lu$OaW;;5z!pZg_u()omME-p7TMqCBtnv(bUw0 z2PS?K1%-w9@YpfD@WLXzvhp|FnGJ_0Cp`7sl(9B+02i`PBilpQ$#x;jU_$5SU3Um( zk5*iwzrS1f0hVQL#dGFv_WUjO8j&V+%yKxoABg=bvY{D3?jpaawq$5i^X+ep#-Kq1 zux8yh_|7(=j3 z#lK0Nh=1Ci0jeuI(J92iFmY$cM?Z(Fi0YcY}uIJgKdvz0!S7AT81) zZC7J3k+5b*CbNb{pMqrN_4*EwDV`^F644rUohaHQ9W=tC5wh|_vWV12jhl%zq#{p4 zyz4~K#sEQEH5#F8PYZ@V;0;szO~7XI8S)~X7F=$(4EG<3Mb zX?FyK$b671>Fc3Bi|T|}ktwZYBd-VE zBj=Kuu*!MNRN{q%bs!bEMre`KUR0abN67D!w~^g}<75@Nh5U?cq42a0h|)Gdh@=~G zAsM2y{Q1dKxHkx~Uu-6&wu^ dtcl?e>xpMf67!xE%>bq~22WQ%mvv4FO#s-r!g2rr literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_foreground_color_108.png b/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..b3eea0d0d5ba0702b159a863800b921a219cce27 GIT binary patch literal 3848 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_background_color_108.png b/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..d6cec4cce33552f4813eaa20c70111056576f08e GIT binary patch literal 1024 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4kn<;g^mjo85o$4d%8G=RLpsM*^&2v0>gm= zhLU>%8tN-&L~OcnNAtz<XX9Pxt iN5f<^K@50qkdZB5`cTZDeGr(l89ZJ6T-G@yGywp-Kw-E5 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png b/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..4f782df5feb0d76fff35f976b30357affc0c9b60 GIT binary patch literal 6388 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 KEYo=L?*9PO7UdfN literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxhdpi/ic_launcher_release.png b/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxhdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..90e837721f51293ea14e564b18c7cbe7a1a8c920 GIT binary patch literal 9329 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_background_color_108.png b/src/main/resources/music/branding/mmt_pink/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef5ac482974b81f480d17016cb0b20e1aec018c GIT binary patch literal 1335 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 + + diff --git a/src/main/resources/music/branding/mmt_pink/settings/drawable/revanced_extended_settings_key_icon.xml b/src/main/resources/music/branding/mmt_pink/settings/drawable/revanced_extended_settings_key_icon.xml new file mode 100755 index 000000000..c772d6c56 --- /dev/null +++ b/src/main/resources/music/branding/mmt_pink/settings/drawable/revanced_extended_settings_key_icon.xml @@ -0,0 +1,1038 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/music/branding/mmt_pink/splash/drawable-hdpi/action_bar_logo_release.png b/src/main/resources/music/branding/mmt_pink/splash/drawable-hdpi/action_bar_logo_release.png new file mode 100644 index 0000000000000000000000000000000000000000..817836ce56ae936868b4386c51e7eb8a61a5055f GIT binary patch literal 2527 zcmV<52_W`~P)Ly%6ffjx7+xS%Sl}e0~k@ z!j?d!KRIrEkwq27OX{UG7^D=|jhj9oc(ZH>&Tnl%z2qEhbxq;t&>3>6Iv7AV6x?GSGM zKZQt}V1-U7GUPbYWNzit}m< zcx#S|v>{f37#4>`dem{-B2L}aAU+%W0D1j$AyTahrv|1z923S%^3JPC^R>7k5X0T< zIf%sFj=Nt_#MueIq72_~WW2jnC^eAA96C_BTzRcNEZjLpc`djt5K{o-RN!Z@pqa7QNS3G_w-&8wG!nS?RXDj=nvN7; zgY31vRYegGftr~I5Je7{DJwy>t&+Q;iC@MI(vI{WQ8I*HnifY7I&VzjM(=O#NZmdwWYF9B+Xb z0b2>Hgh>7ENDwf9Z$_;&3@`qc3OUueVeZCwwSa^iLR~I>neyufQm%Dpg%vKt3u zW_$>hdliIpWqAVvb*K7lZv8e~tUiZh$SK-oF2Ei`(fbR>4UWvMdIa^;REV`&oEsn3 zj3*0rj=&hQ2DwehE*&%Uu^9ls?JT`U-LV4M!{3Z`p_f6g;8o;^Vx|56o-4i?wc?W#Xn0x`T$R{@dM z!7`nYJD^*xLHAs*+~`18l|3rDBvYVf9*6CQNVhnyOLV@t46|ZXtB5w1){Fd}fvF%6 zGX%C5B0cQ5u_Hd7(Li4L{iyRR?q-HHBvk}rI>9zTq&HxBPAEn?T`of_`bc?^<2PTyxsb-DaQ<%P!MFT%@4o`~{&nv8~27Kj(p_B*GTP!8NzO?_%cQP1^PQhX@=?HG%#P8x3)O~U z9{HwynuKZo9T@Lct9IPBpcV8$7x@vAwHy+117$V5BR-yXMO|)%?Dv|NF60fzc(WME z^;C2#btMLjK!rH}wLADUkpgjUvj(;j;)JY?WWlZ}~5fz+I}!aoZyMzMf4NyRAe^cr2`! zUBD5G%%o@IxMvkl z?w6tNx)*nde(k0`I6D^R7If`ZXf+Z4oQnnGy}^HU+@SC;_7*^xxNZJMsWAvO*gOa| z69ah<6^;$fI*YMp8wTQ^Kp6h@WK^&~+|Bsq$J&wB{2KNs#Bp`2TqtBwc^>(^V=&`Q zgAIdNy%6?vm=^G5ZYeyg^6yqPYX=$TPI0O<=CvmK&Jd{xhmEjNFuu`yupdL1koiHp zktN$YQGNCe7*q$4)JxF1`jgMd!V^15sD(4HSx+AG80xs=5T=@h|F}3YIez0Bgvy7x pvo|MAnlx$Bq)C$|&Hpe&{{;=$X6sRJ<7of@002ovPDHLkV1k{EzhVFY literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/splash/drawable-hdpi/record.png b/src/main/resources/music/branding/mmt_pink/splash/drawable-hdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..92b6ba1ee587c7a51d3f879fc4e7cd6cad6d8094 GIT binary patch literal 6262 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/splash/drawable-large-mdpi/record.png b/src/main/resources/music/branding/mmt_pink/splash/drawable-large-mdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..08e70487b7dc52943d4fb4e060976178ad947151 GIT binary patch literal 6321 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/splash/drawable-mdpi/record.png b/src/main/resources/music/branding/mmt_pink/splash/drawable-mdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..d33676d94ebfeac903f78b1dbaf56d596db2dfb9 GIT binary patch literal 3939 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_pink/splash/drawable-xlarge-mdpi/record.png b/src/main/resources/music/branding/mmt_pink/splash/drawable-xlarge-mdpi/record.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c77be01d3ffe4fa5dc1040c10287c695738d70 GIT binary patch literal 8920 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/header/drawable-hdpi/action_bar_logo.png b/src/main/resources/music/branding/mmt_turquoise/header/drawable-hdpi/action_bar_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..24b413f647fe16b72c07eaace202dc348d7a9524 GIT binary patch literal 3718 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/header/drawable-hdpi/logo_music.png b/src/main/resources/music/branding/mmt_turquoise/header/drawable-hdpi/logo_music.png new file mode 100644 index 0000000000000000000000000000000000000000..ab9a78bcb9d52564814f01abc30f2565503f667e GIT binary patch literal 9125 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 N002ovPDHLkV1nHJrW^nO literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/header/drawable-xhdpi/action_bar_logo.png b/src/main/resources/music/branding/mmt_turquoise/header/drawable-xhdpi/action_bar_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2102141154041b268ce3c1c1bf59c32683db3d GIT binary patch literal 5107 zcmV001xu1^@s6mZ@=W000xZNklBLXz&Dd#k#d>fgV*tCx_VxrcY^SMj@+|L=eQz4u>L z49NgWO83pjW?#smkOLrlLwZAYhIE1u4UiuoRgkYCpFuu=EUB)lY{Iq!zd)o#KoIXY z*qj4739<(y80dzlnFri)EgJdJaM=|&Ur%h7L3rMH zxEkl19xk_g;JN5Tz709dJP?hEc$QJ&a>n3l$ANr1Vlx-g*5o6oeP`gFvaH>d&=}sv z!+zmyBJ2h6;(WD)x7!Oi&&A8pKJs~g~*xYFCwM#sJdpsyy&NK=k)NZZ_YsjA^0b%29!scJrUJO3N|EKH- zx*>{y=va>aKUsV27DbQ;aj(g)x_ANGgG-6=K*x-$K0jA5&ig5Z+K?J=3*>c3t2k4t z2D|~{>L~_-L0S7#oz&Iyo;;!jgQlupLRA|i=#Wqq2HQqBwfz6&aV%trRZI&TA!-<9 z|M1og10d9tPSitm;h60X&~l6x90?f+`5ojC$jLaq3fqh$5{7|BA@Qhw>HWqa1fGz9 z2OqePtX;cKKKE5fi`28+sB#0GSRVPM|koeC%TyjdgNme#4hw348Rnz7sX{uN( z!4Li?@}pmj-klQ!g<`N6GN`($lD0`)VA^E3gwICuIPo!LH%M1=&%zSO!D#T!)^0R# zuA8x$VC_ZlAIPo{#!Q_UhVw9l)BzVb2}sA|c55#d)m2~10}oA-!RHQ^4I4Jf{CV?a z{M}{Jsj#bb-LbPtP!l}kdT6%X2FbbPXvzES(UQGuUoo-wq{@0)c=uH8n}a`xP=_!Xxt8$Dc^g-lbIEA~nro9N1L~M-GvkzI%(|&yx@|rYq-Y>t39$-pUup64^D8%aw;UD~1?7|yz8heBRJ z-I#Uq@cl7#b`*qmDn_(9z_`A?7Qz*ch4?LPycpp346|^ZzX!xg8XkWWzpJ!%V}al1 zV#6t$_uLo4nUufdv$2htVDbviu>#u&Yy#5reV%0($Zp* z&FAw;Rn-caHFKs+pEgmt6zwSmI|ro8)LSKckAo%DjJAuY#yBw02mX*WE?X=$+ew08ACZFXrA>Ou+Nq8ZJkG^RQEy$LO4Dxkfq`@-T$) zQzujc-h~a<(^YJM^g&(Pq$W^TH`UuX5_R7TmrbBPGnDR!&}NGV8t{LG+~T|*fpd^V zY$u(UKLYiqgv(LD?+(XiB82&%@xXl0GMs0!wY${`VOmuJL=y=YH8o*rX>S>I^C+1< zW48Emvt;G+<|V==BbrbI}b*zP#bx9ShuN&nooUV&vkLHr(?4Kl8Af+2gxwVEc{Lvbaz|s)ZP!y zL5=qkBoX-tMp-7|HzTcGG#a!YJ8_V;n>MQ}}bow>Ia zj0JYFic!#oXgDp=VevTHG7EHOcWfSkPWPh{I-+@HX1WJ zw6>pD1YzUhgfd{j0J;0#u~If+id0XXD_`Fg9l&`aSbyS@CIri^r)SnSIqU^2=IIyF}ff%?J6(p z%&i65Y`XsAbjPJjY8z@O9WKCgr898ojHzY~!2wNEgQ5;@g6+!zV0HkPpH$;HCD1l3 zE-sb}FB&5A7rZ7%740QUhmDa9PdqN`%O=XEp=DAtbee3uc8qL%@^NWi``;K6(qZY; zyPssAe}sfq(Zov#8qCxJsQ~7P!6`>Iu4%ZdWFyISjZO0MAyk#Vtw5(n1xN06csAO3 zw732Mso;MoI1u6tL3sv<%h`jkW9Tp**BwJaS!eSSj2f5?$M{t`qaX^@hICHotUNO9 zVY%^^(enM&XQlbom14ByqnFT+KX#I)NeiWR{(K3wVD@rO$7niVc8=ur>58JKfH&C6#B!9k9R~X>n-8Fd4l)LkFgG_>PB`%dIr+@P zrPJ^sQgqeTQgrn|39f?Xs|iSO`8OaLLtPFM2K{0%c)foSe7?9LJ{#$p5U>TJ8jYZ7 z;`DfRd2*G|F1*3Entth->bx})<3y_%0g0g^Uiwuc(C*X?Jcg8QUSuIApLBRXdO>m=2l^23J+k0U_Fi zfVgjVv`(`Tqw#FctRXrBZ$daFG5|jZ!k51|_)>wJ-OcINsWn*E*-{)lK@u>D%!1@V zTaW~-sHl*IF^A^K^*~A@3}4TZg{I=7f3no-OTF*SwF;v+3hExd?w^P$mNh! z-}7*rx*4Z*5|ACsFcmc+BMux095nnWK{I>zCrHMTm6atmH8nEl**P-g++mVa-yr@q zhO~Ty`>O@Ps+UR5`12)a_x|vFora!)eN4^k)}VxbPpn(01=d@|lwe;$bwt=UeXOEs zXW3;Nwgb}E;9G-kT8t!|2NFI2$phJ%A#MTgWZ^aL$o{zo!evMKQNs(6`W% z5nxUZHEfiIcNdFMs4hBa!4b!2NEalas!46F#|XaqIx5#RtF2<&0i8&V!Z!!qKu3ei ziVHzP=Nfjp@Z|a9{+I|sTlq`KO2|e?9fbX6j&iEtbf&Nf{C>YQHg1tc3m3^nr(Y_w zXFVpnm)#&;hYpi27hfjDlgCQ&q_MK&xZ7oiV@?)dHVDRLI0u-Vuw~T>34DM-&CHm@ z;CriFXipa;F&E99V5*kARY&|{G-5{DEnVO~W?{p%*mz)q!W$r=TkNh)Kmu|Ur)r3r zKm(ZMTeYfMrcRzBLoXaG>-Wo%{x43K!qd+J(F)A0n5>=pNOt#r;xFg{or{^zsrd+K z&cK#h+5Gz3B0pf@a@j61KCiB-^t^8820R1p6m=Trd&C4|WzLWcVLKr00=R#^GRcI9 zc%b9(EJ(;ihjsxUI*-c@x+u9PaJpsinU2QD5jV*r4~>`I#toO!veA;e*Fk6)rdC1A zk!-N-Oi{F+2|6r+2B}?8E-h2u6Qk7A^h>0C?;5BC?1j!^n2JGH6|SjCZ3U31eE9zd@d!^|YLQ+C}o-Ta{9>YhTIRufJsN z*weBsRV}B1;q#ko!?oov!c(3t#;$zr!xK1om{gi6sHEa3;Pgvl-U({U_TYfT03>_} z8>ZJKvWv?=!c)TKRN!fPN(7sLj1PTh6*Vv~72v~}Lam3AR905X*fC?}uG?;qZoBL( zCA)z*4LMRX@oA}h^JNJ(*NKsZnJbe0;t+-)c^v@hE~x!7 zNd#&@=XB1cE_!XM24v^9$~zL70Q!i@2Yhdanc8k(BaaDd_*B5KiYMS2`H(J@0TrO7l_dtwxM_O5wjCz zLnjHYhByPecKlD(fb{Cxg#+RS+#l1-PK8h-x`D|EUUCR^aEl+4Q)(wNQI><2%7U5q zA3hfDS zf3)^YFwVwrr8u)j?#6HU`l1Q^<^*hBhS)QT4K*X0@7(a+8x{2A`=f4TxeRsrZnn;| zW%%M))O{aycs<6~7!4d{V)T@xxI!lFEd-%)q|T+KYhwRvKwAbRnx$=K?zL$P#SKYC-tM|%a%JANbt=y5?al-;fhlsAMvmk@}&UP z4&+LLnzEE>`!6ZA?*IoD2Mq0C+VK=lyHQ_{02xT+$E>{==n@LNz-hG0m2gc9Wi63;0mhedDHS3)9yMqw6h%*#0K44kHJ#=XW1HKYS-w|JVB4WFt5;uf#uQlDyP z>auTCP%r450lw2hQaeG7qpO>043+Os>j+Ja>ioC?)An^=lAxK;sA@oxkZ+15imJCI zZo@rlUn|TII0&_~Kp0#Bp%zR9baHf73pK`2kR}U4Pm#9bmFEA%2kk*Mjf`Lx3_mpK z#JLbPN05YckAB1l+lcv)DoA|iwQ2k5vaZdTYYYLyxD(PIKaD#H08a9uD$WtLBA#?(C>%}~OO6Ej( z5WZsV#o&5eb3TNx`i{2_MS&&`Lw|Y#qLbMPLm_6Rb^`ZY~ht71nh;HI9y)Jdds|b?2vc zqdgW6425tCX1q+bb)%dW5Qv}DP34Pb3|2>85O=_h6EV+%YjZI2#iL|EyKyvrYd)7N z0SRHG3rMV9QEw)yV&5h*P~v{fJ9xsLcn)Hehpy;kDawl;_|#C{UZF9Z5sppo_t^% zsUabv9=~%7BiYyHU(B+vZO0cmaJag}X_w!niAo;!Oh5u8?D#`9+X+Aj_KzJGY(d8- zvL!QyWUieQ0d0VY9e=8;0~tX|1hfGncKorz4y1*&2xtRDq^-n-{*FJ_+JPh>@_#h4 VXtL?$+xGwf002ovPDHLkV1i&5l6?RG literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/header/drawable-xhdpi/logo_music.png b/src/main/resources/music/branding/mmt_turquoise/header/drawable-xhdpi/logo_music.png new file mode 100644 index 0000000000000000000000000000000000000000..035c0e01ecd9892ce09ce81b30541ba1cb6e3310 GIT binary patch literal 13152 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/header/drawable-xxhdpi/logo_music.png b/src/main/resources/music/branding/mmt_turquoise/header/drawable-xxhdpi/logo_music.png new file mode 100644 index 0000000000000000000000000000000000000000..df8af881e432efd34086a94344eb85a08b80cedf GIT binary patch literal 22670 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 N002ovPDHLkV1lrOxc~qF literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/header/drawable-xxhdpi/ytm_logo.png b/src/main/resources/music/branding/mmt_turquoise/header/drawable-xxhdpi/ytm_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..377eb8fbeec88640148fdd74013afe51e6f55ca8 GIT binary patch literal 18913 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 BI3)l8 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/header/drawable-xxxhdpi/ytm_logo.png b/src/main/resources/music/branding/mmt_turquoise/header/drawable-xxxhdpi/ytm_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6cab734f6f5dff78f32bdcc1a10c825a7fc75dc5 GIT binary patch literal 26578 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 Sd=mYQz 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 QA1G`*UHx3vIVCg!0P_1^0ssI2 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_foreground_color_108.png b/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-mdpi/adaptiveproduct_youtube_music_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..743b3944ae275ac03b00dff7671265a523416f61 GIT binary patch literal 1646 zcmV-!29f!RP)3i3r976GL07Ed^?el(+hhv57%H$cu?6V6djVe2}OZF={YG zV^9<;6h8ISyWR1b-M#jJyOy--?Op!A6ptc&4N1X{Lk;&X zZZm!%PS_?e3Tp}->ZzPY2V=XaDk!)=&E~C{+Pe3tARo0%a96QlYLa=1vV`$@|KA1U zA{gMTw@Fuewobb^zk17DrWrqCV|EH`Egjx5TYb(`y+omXYc`{s(fnm@k2-df&QsL~ z#z#_E@|4UGG`P^uDU5!%IKXc|Jf&^_GUFqgvQuCKsi3N(&CfuDBP-M8kl)oqx0^0`sor1BSn zO4@pzIcfD7Ei_K|YF+iGbLJFV9Wj?Efk|@F@fOtv3htH`AoriyGuNx$_6?21D51%~ z`~jEtOaAdZd+dnB>l_w|+$WTw*HHNP7(Iii&nvHW>Q`PfE`1RRCb;VKJ2GZl9Wj?k zfrXS(HBe{^&E~*dfjzWH={+C)V#6skcahbIxkL<1N~79Np*QyuStbAAzR^oGCF_HLlC`PJnZDHcB#cA% zor@lrV8%|rO&-l8dSDqs2;R#?cpA}?i3^Dy*kR7O_&KHH3y0pmQq|iloT5|Sw_Qh5 z+;zx{@6tJQ4E{lV&-pfYZ=UrCwKe*ux9go2T$ENh^kB+eY7>u8>5 zPH9!CeO}Iq*Gr<@{Ck^fR(M#2ZTnYv)w>$}$_NT86v~Z3NrQ)_Fuzw}o>g`VONz(9 z&QU!`LA^@lmmM>kw~i}ltJxjo86OFjG*b2rk4BMoRyO6>?+vPW3#^)|h=Qs$oAT9w z_s4dtchzY;wY>k0siBf1P-jVc=jxN$kM+%ob`mdvd8igqP_nLj7iJI7Hw$MP{~mxM^{9RxsO-5_1{Zqkx*;C&mo28tAT{( zHQiWXIK;(SCv)sMvO;d_M;i1U+Nv<5Pd`` zE)~p`&jr6zaA90cxL~@jD3|1RlT+(BWT%_rxI>|FD%(6P1ONa4000000000000000 s00000000000000000000_^&Yb4{(qrzWLXJT>t<807*qoM6N<$f}*z#o&W#< literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-mdpi/ic_launcher_release.png b/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-mdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..98f3da5578ee45fbf9c9c7d00d84002ea8062ca7 GIT binary patch literal 2417 zcmV-%36A!OP)LO*3EAAk`O?j;hFE-Z?oq- z@Atj$`@P>e;HwTJ*bXSJ8-7y;n=CTL900mWchkoobXp$=4g+EU1rKF&TaeWnA`8e& zQs^Krl1=1M@?CO24f-G3%R;{mplFGkPCh{1K^BsI!3FXk20!X0dWPs(MkCbZJaxEg-zWABK&0u-fxDYMOW%CZHdL{~fe*n#=F98{;K<7D>RaC*@h>?jU`uuqq zm1S^@E`xK#Fmu@V(HZzpG$U}j8AeeN=Qhn8PZFx5Cef8zt&hG@L;Dw%zdU`;bP`kc2x@2(xLx>%smPS%~80PAkbV=0F5KZ|%U;+it|7MGH|< zT8irGYD}JXCq6pSfa4$RM^1i;DIU%37_?#@@*esL(r*|CM-IiOaK#+FJZYq+!I7Jb zv=PIRG5H(7&^&nG*ast*Zf+!HMJBV-7JF|98Nk7jY@Q_T61WFi-5y*&dKhZ%se#k! zW>+#@cFmocZ?wW!@zg=LuUJ{T-X*Cgkhi?YkKEX$!si~=$UNap#cW=h*u{YxQ zy!p7ac?bM17u_cXhEunZ@tk$8UJqB%q|nf;nmgf~I?fFKBoNYSx)A-JPKqU@s=;2- z*5Spd;pL_aNpK{zBE`kUm^kTMsH_@=t+lnd(0l=TY|NQE7rXxSHg3P@ zMZ^6+Mcad`;CXqEN!Q|~xb%nh2(-DQf;N5pI2a{^xvXEfY79uLX{Bv|cDj74dwKB7 zuZdeHOu$R8zKmZkd4dOF9~>jHEe@?lSKS7*?>`75EJgzSowFbhj%psSI}#qsq}8kx z>?>$D(UXJ$fgRwbOt%XcF2tmo2^jR^aulq6f}0mpDJtRl*ZbTP=AmIR0_0rT?YbPUenOafT`IwKx@`zbq59xx`*V| z*Vkj`rhVvK_8cxOU5UVFevY3(`YqLP$e=JI%w3wLhEWt%vqeH$z3SKoFrvUBXJC-R z)ahcj*|^~~%$qd>MPLzk*bV=YHuyhjK-%n?$h_nBaP6|#EHV5io9Q6-^RSqZ)^>Hm z4LECc`w#8T+NB#C8}aL3)nfVMzd+TBWyt^C!$_Gi9w{|rko8P0@*keha)L=D81RBZ z!P9t(n^_ZQz?Kyg(kjg%0~9sKt#1Dy;U13{yLRou-4iEc+sOu8zhxcr=G=#zAAA>u zzgdF9rNjO zpytpD2r{6>>h=yJB3YS%N=L5$XFV1ycnB}Ouo9JXXQ5=lkC0MYf&f#g8OeeiJ~Hd* zEJ1d>dl2pwbufmN2ET|4X$(!aX#h(JDLX~Jr_ZsV+iS+{S#P=2g1U8enECy?akTL? zhE!C;d+-F@Z@mM5yW6aT&d##2GfRxQMu zLglnlsn+jajYT4r7jJKG$34@(gWSA4G#opIr=NZnudIEZC$nl~XEG&9oW}>xw!gx2 zk#Uxt!5W9I!{1s(94Eo+rN6hL^T<)S)^A1UnyoO(853!t%03bFnB_gXkm-k^sRvysCy5V9JrO_Cn*r)80qZH;8jVFluJg$`9!K3RC>~mlv=nE^ z#bct&hrk8yJ6*wjlI4O?$c0W%dd9<{ig_*BO#{qZhYS#Cgsxgf{*mn0`QQp-KY1V7 zY-b=LGHSFepOHFRnmgT>1kxf+(iWD3!_LG)FqpM8dKDxquhe^hzTzoTPa?W(*Rc`h zh&t`l2wB-c@^k^c)VP*dM=JBU!d=HkuaTsq8jVo3rwv0d@WyNW8ekh)OMXuAX7w3~ zcsqxFaE@F`uGhd-hVH3*OGB^Xg_yZ47!PtKy*<=xQ9U76W{N)14=i-QXGuL^R?vDP z{XQHq4G_YNP!c~BNQS8FxQm=YDpTpnc3+?;%zB-=ljK2w=S-`{*R1!* z_3_Xr18f9$Y#E|cdLB87yoLNasa4UbLeIRO6$hZq)#MGs2700000NkvXXu0mjf0@|1c literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_background_color_108.png b/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..a95aff113feca8206ec73eadb36b4a7d5805841f GIT binary patch literal 658 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$!2}rUz?b^k_z!d4};uumf=j|m!#sdaC2R5uR zDC0f&{Q1dKxHkx~Uu-6&wu^ dtcl?e>xpMf67!xE%>bq~22WQ%mvv4FO#s-r!g2rr literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_foreground_color_108.png b/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xhdpi/adaptiveproduct_youtube_music_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..684757788b13e28c77a7efd2fa0114926679aad4 GIT binary patch literal 3896 zcmcIn`9Bkm8;_KugoMaZDV1Zskz9=q_gStn#=^|89F<(5r0{W+b8Z!*nYkI3Te-G5 zV%p4n5X&)yx#sxl`#*f2*XwznpPuJ=KhH1k=NM;q8aDiJubrnAYZ2=R!DnzVPtG_QQlw1}79ijZ1)~<)vkU zX31d?X-U=$u1p|R*R1Z}8Hj|Fv=z?euIFs!s;+2Oa2_G~zncFg4CuAzr-}KWvS)ur z7SRwzJ6820z41+ATE#%Agx!bp{zkJ>{fDFf(mtrQ!N)aC##^WfpF2Wb9>?wEy@Ir; z*++i9kGJcpDx)qa2EiGrx=PH5+Uf<|j16@ULV|OZ37sv+%ud}z_ZKY`^%aR4@3#Qo zyqMkO22^3=<;Xi>PK=jCwk|cSoiaOA3ap4;685WNn$td3TY3P) zCeVawd|IFM+(Pahb&1Qua;f~*{1_D-g%Vs2qgZlB{85G@1Ur#Uqyn32<=E>eJX`1K z;GUdS%&V&xIUFwvsD4F7w|v;;=B4!0UB~U^c|$!I(=v8!zU4q$XFm`(YP77{CQySv z($2ng?&ENG{)%gbb3^grscs_16UZrQ*pYr!AP03)??U#bven`Bd!{=lHOrPL0ZH;L z%B~_1=5K<%Pia(oEah#&7X;qb&|v#VBM_Tau|M|j?R^<%K^}WaUi;T~_TJmzJRhtR zswk&~ds43B{E`MfBgEk~~az0c*Gn1s<>OkDCQFCAR zjCKH^@US!cN{UO<>U{{O;JbRwtQrS5o!dinOR%s%So6#pl}W5h}SG zT+l+%adfHmbf2G|AJWei;min~K#3anIDe4e%$87JACvze(!1>gIx+kll3B@ZtG_z^ zR@M|LSbc=y$BCV{AB75e$5CF9o&P9lh-Pbi5 ze}*_Wpic%8;9o)Bb6kLn}3&48F-*jvl##J~5o5Mg?Z=cO{P_X%6{Ai%2lc_%6}gq<~IfmoKd@HixHP z+dmk-73$^{E4@TpP-K~+L05X33zc|#OadmQ@62kpQq@RL-?zd~GK+t}KV<~{F71fx zE)}B*`rMc0v1d0pESU3B%;~PKC?wIz2d*fcbKzj`#(KETI^-?yCkGV&d;S4y;>P29 zwqn0k;Unefxd+D+jSAj>yEXJ3AN$A5L)3(r4Eet1X)0@gD9~-M+SLgio@{KLzt=*A z-NFo}7YNP%Hqwx_@_O-r7$@>$8HX)H7&3l^AuEGhbL7jb)5&aU+R#cyW0hRjC1?OC zpiKgSRGAT14~>sAr#`jZIwVT97@+GkYD`}tkhthuRN(xIBfSuHeU<_tsL@ir<4^nT?4)0j{r^xOnq#mtHH2PrB4Eby!Ck&XG;Ha^4 zez{i{pksSbt_c~^0yk>0|Cvw+4*qr+Iwj6wYUy#hP`uys`z^VqC-*STFNqarSo>>r zIW^3+JZyZXLU)*^rfpWU2CU#1hpC?jtw1v`5{t_OR~Yrw?#>J-ityp)Jlkn9MSwxK zjYJG3fBKI=$^n5tIK#9@I#~s$YILIppDCi#(8gBLcF0)M4DE>{9nkELyYkp~Lw)-K z3PwzLDQ%vnd?yxhO0~4ozF%QCL0RM7QUhV-y;T`vmpRE*r;#de-W`5-G)q)hjtnhu zdrOZ?iZc5LQ@gm%h<@JJIXNU$nN)&F)8tqK`u#C;tCyc#-7-8E!PxgXb*(%xqL6m^ zbq`YE>xJ{z9)#+QrBCQ-&*Cekq&OBc30MDPY1*?J9G`z6qdUy>+#Ck^sK6sd`*N$c z9^z2_hc7!jn_ZRFd;du7zFCsXM~wEKVQ#xx3O#7k0z8vHv|B-2$?Di-=+ag~3|X0i zRiUCrfhiK}`Vp;@2`-eEmgL5#B;EpR$2_Mt+HWPikE#}K47u(V|0)nMW~3~dr>_r6 z|HXc?=#4VF=9+{ubEuwTAD9J-`^Z&#rZD@{-5nkaXZ+f>{b{DvUIu_)gi7T!+C=kf zB_6Fzq*ZH&7XC15C#ODct)Xi_dTfV5ds^1_YBpLWVY59bw!?v%RhW`gp*RajlYPF0Ny9C661Y=*Z zM}{TFeB=Vpwe0#+LL7??1Qy8jYe~NDX3L7_j@{a zT+C@f^;gos3ge7Z-y{T&4xF!y@=f7FeEQvLd<-}X?GK98JKkK`AuJkqz*yhD!zpH9}DG><;UW7$usNk^Kc1xu#mKyS=!=wMC zUXcH+(it=MH6n1h@a=#jmtr$eS!t(Y~jP0NUlPoIeH3$_#% zcg8mfe+kZv{4+-8$QFbnUZksx>6YN~XqU3B1-2)1=TapR>gvG}zzQMD%OvW3rK z;D9!J{IJ}r9~E)AU1eQQeSz&0aX@U=7n^hvdXD=Q*y6)_w@h4_Nu1QcTiTKb#jmM` znFrYnPVT1r9YlxD25r(<5r^Z%=+)QtdJ??)v^)z z>F8R+7z5+zy~mOFKF#i4@s_ihYc12wU7 zpL$|J@Gba;wf6eYIW1T13rzZ;q|3nX=AgNJ4Irhvr_y&I>8Nr#O`|CBw$H6OVgf*QkGs>fr#T z5F2l^XH&bI%VMpO*MqjhgfQ^zcNlWrNV``wX7+dcbWsDhsunf4#gzSi#&|9dDHlc;hpfRjP-kC3)1=+?YY zUV6rq3Q%my#p`#)kjBUK{^NR*y?+7mwnWd8KZIUD&(NW)DoJl`# zd=VO#$0S3PSf|hzt~kl)JEl~65>#bkR9x~i#pqkLcAtLceWc2IUP7^^U^`Rl-~I0w z1`fNqTuEHgwW1qK6O1;Ohu+OGKQuW;)eRldLJDLc=~3xecs<~}@8ZX@>ouj+h3&G( zsROOb69D!E|z&4t!@eUv@t!tC`UtKSCvUAlp5aw8mb?v!8>!iJe>r6Y4m+gA_i}y-c z(!o;Q`(6KD<5HnYt}9SvUnls6>Ko&)lP3FS9isryYDOAxyM(Hg?>VPOifwp+P{@RH zmQ2|9Shy7OH>%d!CDnIw;MW?SG@|CDC9;x_R|tSLS88@zHD=V4@Bh_2)e3(#kDqZ? z4ly(AKq&<*KjnSMKWrO1BAV`)%=S-y(F75z%;N;%#goVx7w`hFuC7=`!F@n6vO1Vz z`F^EEyO8cp1Sk*u=>8Yd2~IK>Zx%&BRX8js@lP68JYJ6D|Edd*ntPry*_TNpEc2T{nb80M literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xhdpi/ic_launcher_release.png b/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xhdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..f4f9d8f9e137139192d7d5ab22600abcaf5c84d9 GIT binary patch literal 5627 zcmVl0>Ztgt^0rEc2`<#<=PR{av z|Nnj8znpW?hd%V75Bm>ReA(+!S~=RoMHZP!`p68@i7*)?o5;YH^`A$yvA3gF8h~O; z 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 VGJkc$E13WQ002ovPDHLkV1mO?+d=>U literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_background_color_108.png b/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..d6cec4cce33552f4813eaa20c70111056576f08e GIT binary patch literal 1024 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4kn<;g^mjo85o$4d%8G=RLpsM*^&2v0>gm= zhLU>%8tN-&L~OcnNAtz<XX9Pxt iN5f<^K@50qkdZB5`cTZDeGr(l89ZJ6T-G@yGywp-Kw-E5 literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png b/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxhdpi/adaptiveproduct_youtube_music_foreground_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..ca5978b3dc386522aedf1ca9562f886a3dc982b2 GIT binary patch literal 6319 zcmds6_ct5f|88lGs@d8#TB|~-+SHCc6H&FIC@N+Vu~mnW7FD%ZZ4t!Yqebme#9mcW z5+kKzq{i3#^JjeTIro=)&VBAZuh)4!_jz77*33kg{sz~LD_5@2>+1o*SFT(I{x@l; zE?4Xcy1iGfa0KWBH6Ve|oh8~($kbflo?mMEfTkQ9FJYG4#7}TXLCP`y)dcjDJnPgO0RC%pK~hfJC&R=Z)j(g?7IhV)lK zgm5P&jAM6zNx%JMV=-h@Mfd9E;r~y^7iOPiPRXASAF^Oxsac@SFz`lrKN@Tm<$hi8 zs^^T41-y#?Y0lEFxR%w@!GbMLd z_nKqIY*mn}Uy!1CSpmch7L7GP9oew6Cl9&zZZ-rzZ*5bl7;SL!f?9c%s75~ZG2`bF zGaDR``W&xylFexbDoD@z8gM$+1Sk_nv_8s?sl!M3XM$Mk%a@py$tLGHtVNX$klyV$ z@8O-jS;8?NMMtE%5hY9163)2>D+-2E1O^y}-IKL|Wn3#L;GP@_@)oVVhcPy>*z9Gl z9!$Y%dG-~z5pQu`jb#u z_nL0^=?$GOX&bKyufgIUT}$4%m5zIjdE)|1VJ2Nw$!)_Q37p;vRjEb2`u8Oc7|w_p z_%a`_F%E#ob3bpb7Ya@t#mkf8DQZj-&J zmRLRGq!!)RAnHPIBUoPf5fsquVKG^GG-vWBCM{h+qm+0><{&wIhaX-astfU`UZnS) zS}*5lEespT=%N0h#}uO~92pqd_E;?WmbYGf$7!p+CWspLhEQ+hEMFn6SUc|}SE=-) zxDoAJWRV*jy#_w^**`a_M4~)g7sw6DDd#S=FaNm{>A|eaeTjG)AYYPtn+cTnZ#)B% z*MB_X+<~^&b1x-0U?WMzrc>_4f#8g%lDG?-LBfv&jbl$T#!bn2FksLn12#h3INg4cmkeq?j@+W~isn9?eV`mH@ExBb zLgsY>rhC0}DlAktbcTxVU470J z91}Mt1jZQ5LN|GMRhKMP19HHW_ExDgQr%r2!3(7^Om^|?xl+W9Tz;B9+5I4}`MFkCmf(QQq3_r*PGsT#;JOT9Q7k4|7X znoks^>FG60@I7tB8nPfuzS}TN=+o_zt9d--mweu9*5@V8+2UHRPg|bY<&p=s`zj4& z?ol$uaPX5XX}>QNGPraUz-pZ=t$xIMP5wQ4q;kU@FH-DO#(xmxu+g_E>cT+5Y)yw+ z(QoI^OFOtvupbQ!46yifb~kACJH}O!RhI0w+WSTBcBl9z`CyE#-d$F&Awp^ z@$Mc=gEK?Ty{te(7B;?+H8m=UV=K&Jzf$u}N%QzTzTN&)vkz$xkbX`j%jd=5C;7B) z#V>7V3PouPAV$L`DbTo9APl_qE59bt(5`v#F?@ANjlR@t#+$DGF$e=sn-lmEydRKU zvqVBjZpt}ksTze|aeK{sufwzht01cK(>JuOs8Wz=nJ66)oI1v*uwuq-A1{eX9zR&$ z@i?iU;-O?)IZ6TwOwdHew2&h|^ZGRF7^p>oT}^Lh|C=gHF^^gp?b?f)Zx|1$RP-}d z>3iX*q!W#%9zkOKqGUAr?{PjTI(RiS$%5qh^#Bf;JE+)C2>EcwoC)eviINN5t}sf8 zMR*(}iC<-vMvejkgtIbV05kZR62-F}*$vyp^8&-$glLI}oHnphlp3tn9Um73c)y8z z%ILM6uL>vSF0{fHxH6XSpv}TSSkJDPTi!~-<1sSo{J)-&K9VoX5Qr*Az=cjSzMc*jmchH}+2n%_DSDDVvT*&# zf11)s?^gKnOC;sTFMHkh{p{Mric)V+(v1t_;6)im;@JTkhh~|X^o_A~p?=Sv68{kpBWTmx%;JX0j)2iz5lb>>3&u_3JKv8`{93&k}ef$|dsnNRn*Ep!4sXxZ_ z4fYOxZztxOqm7*9^(B#gG0QfqWZaVxV&Dag6&yT$6rOFXR9*zmwn@bWsH!y1HwnWU zUhHsa-(Bi1U%3UnSSU+&s*Lae&8*4?dj65781I`9XL84%<@FidmpEkD^6EjmHd;-D z_dM5?Rgqj4lR-#skxsVJuDpsbM~ib>)YF_ z=$LDs4OKM!-Tm3D!gnGwPLq52w1^v1f^5X#tynsi5BfVA6T#i-C%WD|zS_ew!#pQ8 z7acWW1LU4)hB-W)h<)3Ts;?u~V|mb@WO9SVj8tN3M4S1aH1i$ulC1NYRki;M5OsdB ztHXsp?8Dn%(}C|9vlJ1>)fz_!HXZ%$h~ylg9baB4;?EE=R0-{~;QYq*{8fqN=?9QY zAu^|}g57i~((U z9Tm#mrgv8S7N3_)~u26g7qTJ}|_FgIy6th(vo$tP4NZNlF#T{|{F_M)} zfNA_=iy{6WlF>l+D1%F9JcrfE2;pi>*cEC4xcn~N&l(NG?jF-T4vkRyjtlk3oO(Ok-XnS&6gNcGZwDn@tUFEk&!SzqwOl zKc!JQiAXK}Zy!e!c6pF+@J6GAg!Lv*xXoCyJkR8F)4vY!4(pqfv;K=!4xyxpZPkQw zy*44YGj@70hK25n-Inhn+@iu0*cjA=kFSu*4wGQ{w=<% z0@GW*WY`uGMLt++b!17iK;Nv#Ybz?;|70FOpcsdwwA$e;D{|9cyc%PQ`BN)z&Cb4) zWFj`7T%KUTm7wJcQqYol7$lCTo^Dnzdte+P}{b_mv_%?mxO1HCta>5Z~DGgDRYz zUyp4R+UYSJm5hI?o69MEur?LlnY!7lR>HgjzH;6(;>zdVV_LSk-UJPfP6&x6t*uWi zkl$5A@@bb(Ps>+g8R=B2?jSvVv{r*eI##^9!n=9t-}71gDR3<;4(zN@b8faXp|jCu zi9&G_f3!2weh1+Bh1(O=2-J}@ohO;t7kHlOt+0k$2Fckro=~TrjW;DQGi_9ib24$j z_kgY9&)v(==Y<#xfi3kpykZ-%1y5RaNii8C3xyIl;TI3{?*$w$O#~cmjr$!lMbfDK zKrejw$lqoKOPzsqHf+F~$E1*&sBIo=lOn)kZ5c!36VZh)! zD8ASQ4u2t#R15{|7GX?(Tg2~uno;(TD?;i?~TWdM1 z9k2#KedV_Z{-6Ja8jcZ^ud?t*Pypx%F^v^=Os=FRkz>ip| zpfJL5SpYbeDjkdK1@6SOr`tFCCgK%9mO&xGgRvgHM%{ohJXV^c-n7xFn$4lLUuJRM zHEF9>_gHpjwtDVKZS*KHfDgS;c=bQUaG$9FJfZaC-W=)o- zJ36zRBlU$Q7eCX>D*yS@+{?@(&NKh90+vh3g>218e+9-Y2?;XUk{F ze4B~5NAUGZQ(Z|<%dR9*x3}s&-|nZjXcHW1yR`RG1hcA+Bkem8UEVA4T%OS_I_Az~ zp*{w>usq&GjN1mcP5C%Rgey^)1}L~iiSiSoF)Tcc5FlPLvGTEsPGUC+x$kk9ZR=K# zFC>zRU~odz^D<;<-t>9+VJyt_Qpvwo2ioCfPkB?g02-z2u6hPUT+$fkX3jq^?W(2w zTC)0!V#B4Cc@IB3K}5S}1Bq>Gy=|Xf0J-imf!NW75{VOZO%yRRMiDE_7Q8}NbXz&UHXMV zizIVHJ}!%b;PVF_2;QIlLcYS(dB3@o#mclYF=wt9YJ_E(iAz~?Hhx6oo~va7`?>y! zGduHW`Qh0d@);%?R_?+>Z<%n{)t7^7zjOaZz;hhVFyU-!C|0NNk`Y2Chs^P@J;4b{ z>%6jl$uIYm8yV)7Pjf6C%SIkrGG+z((Y5a--CS2utVOrD;r3VgNG%#G*6JAoOdvFb zz|Qg(p)b__cj>G4EpNN=Q*4Ciuv=I@j)0d*4~s1ii7I}(%FHT;32R-Ur*F_;W00g^ z&VUYB9o?|sXGmhN&$0lCamd-7ZQ2Sv+eWfkJm_@%{c0;mzmEUXAI4=aGoHX`yTpp* z0*$FR*4Dhjr0&=TMdmeZ``m2b2o;8kZea$@DnU;YS*^mQRJw;U}~)4PXPBH;N|S+KC376V^~4X9&JYhUa2e6AN6NA<9PEs zc`Ea)+ZWFTz`%|U zn`Kv()R*W@rwJ{rp@+&(9v&GLAK&O}4sYnM_}gJ>GI#ECvdCt}p=s-Ox5{kw$@6E% zr!p$K7jd>HB5d}H^;4D31&x`VL1$-4PwR`T`I*9uC|gq2 zo@XUIB%vmSfy-~axT~_@p3BRXm}K|337gCdxWEiZ#<1(fuJ~krg57ZrNoL z6n8Un(}^YK4Gwo5^}KQQ)SwJV0MTlxQ1@CEyP(Q9F2at+hH91UIb{EiA=BTnd{~~i zAQ^f?ae@DY(HRdwAv3w2t|x!#T8y7*mFgh>>+k@xS-kbKIlW6W=fDC&G#eq&=cK>v z7R#T!60)A_zSl`Nd3LED%f9-Ps6gbp#eau~t4-yVDpT$4R(Ax-UXRnW8oX1R&g{>G zEww1B@Y>}B-r^Fa7~c@Q9X&9VTXgVn2O*j?;detskAom#I?qAQdDQ7K4X{ycw1xFi zZ0rocR=y#f5ps6A!9K-EPG7f*5Wm=?t;s`mk;)@p;tXcxRtof)#i^h62*ILR)_r=; ze%{ZhuL_Cw0MW$_jo-v0<-&MoW3UEd+(hSi7MlT^f}YdZ=R{@s_N>h z_kHUB|G#G;k390oBab|C6Fz4-Zqd|y+NjfD_ty26vpViDt_0)}OET_V!ZGI=BBJpk zsxc{`7(%hUnabn*Tm)Ryu?5aD8ua~;vkV*Zyb&%3;r#yK?>fsdDXLfrm2-$98Zlxr zjr%2#dWRFpMsfx@jhsw2khSD-WHIT@Y@M%<+)f@O_mM5+4sr{*mpnl37x}vqm$@zp z)tt{>jukPv6Fn#4dD?9li@<$NT%79g1ac;Myu(yrv%^i~Mshv*8n0(Jm%1Ja$&I6| zVy+?Q1mp*TgZStX>b5RhYW1SOP7oGS7k zNr^{wHRBPgW0Ht&Cl6_Z13QhfK}Z=Fkjq{99h0q6)rZM%lhesOfNkXU;8Nyp;TBQi+sDZ2XzLnfxs|#2RJ75}DvEZScA*F4gw*Bl2!CFP>vVX{5AL znjPn)q4Lq^q-|P})*s{z+BfP@IG6l)@;v)f9wWtb@ z^*Yy(KOxl&kw;>X_5LWSCX%(JT$y4^#YMh!#6@WlkRu*ZPlnp5zD~-Imy&sm4obrh zk;==LNOd`}^EDm8b;cFLj!n}A=52dlvT4}DdS01FSgq9K)=5brP z5fwSr!7GpSKwWiDCgsl5{nj=Vsc>gW7m!Olg4~wca`NIyKlI?LAzFQox=7msC0j%$ zqmu%UOAdlryOZu(kLiY zh*n5~8a0w4AV)kVXf7nxru79fkLcaFriKv473V9-#M{YrR_El1OXgtb@F`_TIT$d4$Mo*|iQy#eq<(=|yFkhWK zjvFIYolb6kOd|!)PnEaIW0T*<#4!~{73xG%q{ecoy-Sr(8eNeR z=z?~)b;9akhS*gUon!$fPMwIt0u#Td37tV$`_-Axg71Vn_-dR2XDE!o%xNgTRA?)0GnV_-niNb>c71KOOIR_l2mdugBrThw%1WZ)53Q%it@u&@{2i zwoEC5?zk_^RBMC(+!IkScP9L$l_)#!EEG(ohiCRHU;|&vLZ~Z_+RBvg>S3XIuw!1Wx&5ecSs!r{ z`4Fjgl$2oiz7D+q!uh!2YyX6kPoBlh;*(1rJa`am*RG?8eu4j4{xl{}pKNbWI>HfH zJG$VXU5BzyUxdQBr=f6KBm4zL%x@ZCw{Y!MZ@TiD+?S>6XC6dC{Rr;Zi{RSz=)UJM zMBZqFZyGI9ATBSFZfI&^RWPbe!xj)3(+b7(2`=lSV`P04WL@EWPC8^&IuG{ZD_{K_ zF1X-4L?V$vmXwsBxw#qh=bw)9$`U-W{8{wz(#lJd7>`n>7eEKI(sm0aTT!q@&njvm#Aegqe zy%uMlc_vOi^(1WFv;iC5*vRWt_v=yMKp%W3H=y*&i&3@clPErW0sK|fv>v>5iZ^MH zPYVQi?kW_{nS~O%X*Aa$e3)U!w!=WFLd>jy@>|2BHK(=uPzw@J)F&vafE?>1YQMfH zx24!8Wjzgp5>P`euDtRJ6c$FeED}*cK>$$@=tAB9wd;!|g#aMlcjyAC3}dIx;fSrcUI)ejmD zq)E}0u#s3T^-%@HgN^&rW1+kHOHz|~rwp<{^%JV`$xr>&G20@cA;?UMEL6_@NN_P z&7?ynRql*|b+BhYBCoaZ^N|N2%}}B&BM*~uUq|(u9wH!@^)cHuno;kkNLlgSAQ=KO zkci3|V4ry6Nwh|DvA1O>*1!A)ipq+e_B0;@*HVOE-iiK=e+C*VP&m1PHkVI(Hn=re zq6xJKG)+X`hPQy-9hs_ZRAOi#qNWxWY!SsHAW2>atN5<@_fn2z3P>0Tu>FjOnsDB^ z=b*l^h5_~pbVtIdlr`er`KpUx9q2~i1FH~fqcu{qg{)DQKn=B#u1=QB)*WfcO)q3P z^sWxg0;^0p%8hviq=O7K`8UhC_OP9lBiRBnkdP`XEA8U`yUsZc+cs~)+i&hfrRrOR zLO*=vg$TX63w%0VZRorI zSy=T2D4044{t6aEyc&{=qh+(}nv_~*KQq^-=8t4%GOycTQ3)&5h5lvh>2_0ElM)LW z0{sMO;-De5(t`r>#6Mcs3u-@0svRulNTq-b)HXhWE^7W6^BG{z#_O-Wfo&Uhp{mvq zN=bojjrt#1hmfxW{`wjOXua&%i2HqvpR8a%BK!6t)VdR)1Fh(Jc`f=kZ{|*JKeXSr z6uy!Y_>1@*wSSEkfdE}uEqY&G19Y)al>QccY2go~1|SN$sX;g96_98Iq&fCJN2Ueo z5Rf2iR9sw)*(cA&ym_Z081BKU6)&Kys*1*gw=L^ZQ;f*EZRq{^lkm-`WH4I~f3XjJ zTXvx5ndi}Q%TjdTejj>&{S@Pq*XuVt_qw-aJfhnuJFlT!D_B ze#T3Vo1irU-CEzOHxQ(?>3`!bbl$O$15c*S;vR&M}$ z=$;xVlHuHlZNVs*-JR(F!zx57d?-AA8bu^GnV^U)9}23<5el{;^z3GyKkc#5I#RRX zOFYH`**D`&2_tP4)=Gp$QAEqTQV z-tSvo4Bzy6^#1q>blm?CthP3pJ!j_#LE))%=;H%6P#8)(qy-t4qYzC%+9u1SF0A7M zvP9yH<7Z&eqHD0^r$0nlSvhuVv_+y;Ly%x56{Gj|htU0m=D4)2e*)n3G5?C@%!03x z)-4&q`N$wGNE6b>kf*>cAoosLpmF!cKsCx%u;~8LkNzLr^D_P%K&K6q+5;L9OuLAr1tT88 zEMr{Xym(@uy}cd9JouI=yrtE(>JtEH5Mns;O>oKZG~m zcoSvij3@gFaOjRl5M1*l3cArjIEc&QGQU(tiUJ1C#fa>oz(}oY+h7uVU~M^!($9PtftrSdyq67?-V&|J9v!5Gs5Pmv1f+6= zdZLY6$Zdr}Aw2fjA93T2x8U_nyHQ=~8CxJ%Rp4;A%E6%0z8}RGo&|q(m5Ox(+eZk7 z>CRf(AuU9`=vXn34%XCK;|{Vget!VFcJ0QJB|pMvuUL!?TU#(?Vx?`35`nd=3uRwl zh?2Q;U?tj)#p?>~Y=hO_Yp9G$;K5V9`#Fl@x>SMt#ADs zzJ1ewVAAwDOsFbNTs(VvQ1qGeQTD<20!4Il37tp%l0xWNv1(w-Jhh3X7t(?>VK8_B zUJGPIB%8Zi8^!}9oIoIeg9qDj-@W(Yv)6tZkNkcGrp%a5&y-+h(b8Dky5M_fJ<9*; zBPgh^PuO)SyR2}~o+{6kcj<(*AWay33_b<6fIQQeX~9fEzmXqr|#V0DyVo&AVttUamqVe?R#eYg+S_8ll$^j_5d>kTNHKAi%H8iU3K zAFr{0TML5gHVsVHnSQY7XKTXfWN^y6Xf90Dqq3hI(~#Ba?Ci1wS_uY3tzI)4^D6Ol(1eUUtIySmPcFl3=bss{- z$1g@;Qk|W2p|*pFbRI--^B#2HyBt_HT>Fevm z%P+lx@BYW_ShZpeCQhwKk;Z)K0J<$}TPq6YACJ;&K7q2c7XXD!4pVwkab2k|;N zg1KuYk&15m(wKq7vu|IkZFR1=dNJ0$zJU);qg}gf=ZjoXpM~NteH>N)@;Q{Bdo~3@ zmtk8GCuy{9TvAa5P%>eF#Z^o-Ca3ld9zRORvUMEB;a@I;f69Ob%mAbTX+fHB65+^| zxCP|iDRz@)Fj-DRfwK78Yp>&$TW-Zaed&6X7y3|Ft>OQKtj!pl%J z>m9JvNIG1xTl?HhHkdoz&%cE5YUW{PYM=#aKw8iZ8Vn1wUN!BV2pc z7tz_#L6_y4<-V7J^0tF0Tl7BEeB~Mx&znQ5!+oO-d`Alf&Yhj;`NPwQtlkAwDJ0DZ zl=sqr5s=ZxAO;2GstYm#5?V+zxlqnPu}*(~5YIld0^j(?w{XYzzC+ zdCjQ))jy;1Z!bq-LnEwF6}OWF3D}CD`-N5LS@JM^&7+)1eRNRXO9O%t&=3q~fn>wA ze1Xgf7^~CTx*toI-i=RQx(H7`vxedsI>n>a7eeX#-ht{bT#1r1&jiXVm}glc9$rW9 zOKZ^mlLz3Nn(>iUDuKDRVC%zO@ffRjT<-Nwp+i0FDzP& zoh|z*9>z0A-Rcqej;lb|k_XZC_*1YbJe7Dd1^u?Jq3emK&~e+{h-})QiP<-zL3ys> zBX0NQZ8sg(h3QNBvKrA|CezTtY@mrD9!NYrJ-v2U)31H)oA}v}|C`10X{b?i#4zHq zLCa(v>O$ui?nKAW??-6I4xNxY;`{C7fWO7x4D+{j4W0jRr+rPR%(&$dl-J60%@b`5 ziP6On#IoP!VDrUI=KTCE{boCVTi2j#$#Bf$hVoi@F2od%aMTrR z>N3}KcS=c>ePx9-In8^>l-#AdPDmK<|G@iDQ?1upIy+pD)loOob?aWmZMS_FOMmiH z)HOAtsyy*2aD6qU2>*F6`u=AXf`?iWsH=j%tkj-X4wjN2YPyXaymnuJman@Tp{-lc zanJA2{e#~iys6b5aF|60*<0%>Ox-TKB7$_hu+#-@))yo?$B=r)Gq(gn~ zwzjn6{B!2xq!UlDOH^)1TnF3Rv258N@OPj8I(F{ZiHVJkd}v2+Eqt2Jj@B!*W{W*9 zVz`2qyQm2MDovKDT43ilMq=S~tSI65Eks)PqnE<(e)4H_e(`REHg1Qnw2(YfH{oN=j1x`KnR8-eg+r0s` zU1Cy)ub=(bUAXzin^9X^b)?TuvY_9Rkg5w2TK+2f*1n41-dzapXtBFc_=_y~!kU_e zNv0NeiORV?Lw&YWEX0SnzXMjV8^M-6=zjER^gQ@Sblvs~gja5ZZ+e9-9{c$0!>>ub zY)-%9)tAwD+Mw4{vXm&t-lkJBx z3MiBb3>V8B*Q8X;)OC*>KO=7?B_2`5_?YpJFzn;t>0~A=Bq5za{*-JW^B6l&x7Dl3 zS4as*)@MlPv1mBfqaoFq`XF10q+Y(EnalGSTTq@VZ%tm?fioG^@)!&&AjfPO5$UAz zhlZ2csXVoD*Oy-drP+lp|ly^ho9x`t6 z2yt5=!4*skW?drGkH1aMA)ClNvKOjpR^Y6bQHe*^M*_0rpOIJ}VMG?lIk~Yy`axrb zBp~_JACP)EYaZDN<&E-4!7D$LvtT#)|JEHa!Df$93kL<&D$wx^E zMr~bs__Z!E#T_`iF=7D;6p`g|X9lupa%Bpx)##c>_CO8b>S<^iN{#DESUf^P0ume% zIiG9`J|ydbki6VPomaG7?psWc*yxQr1+=v>SEWBvO-hIJkpQVK(j7Oq$fdD=@Qg@GLPgzBP#xr)Env2A|4^B0urK#NK5Y&Am4(A0=>igBh{(_c+?u>m!S!+EWNpY}#L$DNU|Azc zWo<-vz$~W3@))EZtn;>w1`JYseptiA~H+epeReE zrG}NrBx_Pb75DQU^@l>@P!U}{37>U78<(Y}iFZW%K~1%Igp>I8{8?%WvfN6%@OzjyqUZdPbcHAr&wIZQ9_Pv_X_;WNB0qGt@YI zv6}oFQnN)2ny_&ORTXPClwXmWc1}VOB^pDwaMCIsA?*SZJk!S*5vfC(gyR;Hwkx=n zh(183WOA!4gkl?&tRx;y_#~0Ig`;&7C>!yl#btSs5dj%Evws*NNi3qVKt@Osn3l82 zi^z|XvQA?WvN8{mkCCe8kXR%TBOK8!98sdlhgqs;h5MltuD)pj0;F`i6|Z+8NnznI)~H? z@iee8qc4?60IES&1G8p>SHZzFjY}j(Fj|^*uW&MEb==4b0U5*)l8KMp?oHG_LG?zm zM5mFO1oTwWc@bFFK_#a@k38K? zBnHJV>P?`EPkokPWNBn^5D`Oxb7=d_c1f^rNuHVgi;TUASfDAlB5{;OQklZu^ zGV5BJ;|<;W%u?I6u4ObRGnL84N*Dpif|yJ5G$dw8lGU= zPy%sNf^gGpb1&WBbDv8vO9PXc?u<5~(b5RUyL8hWXXrjxR+Oqn3U4Ci6rxxqL$5g8 zBJqmHeVkyHg7yjSjP+)`TMSxCDDLgv{bng>-9|2oM=%ML({Kq%FzZ^nX~YuivnaUN zy)c>V6@mF|)}wtE4ea$?6^$FQ5-R86u})?g&$@f*hF1X5KD)Pjmt#UOUPMc%F$a%@ r5@LOhCq3LE@CxE6fs94b90BmZAF?kWdtDWK00000NkvXXu0mjfMVnGv literal 0 HcmV?d00001 diff --git a/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_background_color_108.png b/src/main/resources/music/branding/mmt_turquoise/launcher/mipmap-xxxhdpi/adaptiveproduct_youtube_music_background_color_108.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef5ac482974b81f480d17016cb0b20e1aec018c GIT binary patch literal 1335 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