From 36132df4be6a04c08b6f3dd79de1bcea93a80fb8 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 2 Mar 2024 11:27:05 +0400 Subject: [PATCH] feat(YouTube): Reorganize settings menu (#2737) Co-authored-by: oSumAtrIX Co-authored-by: semantic-release-bot Co-authored-by: dic1911 --- api/revanced-patches.api | 30 ++- .../reddit/ad/comments/HideCommentAdsPatch.kt | 2 +- .../piracy/DisablePiracyDetectionPatch.kt | 11 +- .../settings/BaseSettingsResourcePatch.kt | 12 +- .../preference/BasePreferenceScreen.kt | 34 ++- .../settings/preference/IntentPreference.kt | 7 +- .../preference/NonInteractivePreference.kt | 6 +- .../settings/preference/PreferenceScreen.kt | 34 ++- .../patches/twitch/ad/audio/AudioAdsPatch.kt | 4 +- .../patches/twitch/ad/video/VideoAdsPatch.kt | 4 +- .../patches/twitch/debug/DebugModePatch.kt | 4 +- .../twitch/misc/settings/SettingsPatch.kt | 5 +- .../ad/general/HideAdsResourcePatch.kt | 3 +- .../ad/getpremium/HideGetPremiumPatch.kt | 4 +- .../patches/youtube/ad/video/VideoAdsPatch.kt | 4 +- .../copyvideourl/CopyVideoUrlResourcePatch.kt | 14 +- .../RemoveViewerDiscretionDialogPatch.kt | 4 +- .../ExternalDownloadsResourcePatch.kt | 14 +- .../DisablePreciseSeekingGesturePatch.kt | 2 +- .../seekbar/EnableSeekbarTappingPatch.kt | 4 +- .../seekbar/EnableSlideToSeekPatch.kt | 4 +- .../SwipeControlsResourcePatch.kt | 32 ++- .../layout/autocaptions/AutoCaptionsPatch.kt | 4 +- .../branding/header/ChangeHeaderPatch.kt | 2 +- .../layout/buttons/action/HideButtonsPatch.kt | 5 +- .../autoplay/HideAutoplayButtonPatch.kt | 4 +- .../captions/HideCaptionsButtonPatch.kt | 4 +- .../buttons/cast/HideCastButtonPatch.kt | 4 +- .../navigation/NavigationButtonsPatch.kt | 43 ++-- .../player/hide/HidePlayerButtonsPatch.kt | 4 +- .../albumcards/AlbumCardsResourcePatch.kt | 4 +- .../breakingnews/BreakingNewsResourcePatch.kt | 4 +- .../layout/hide/comments/CommentsPatch.kt | 4 +- .../CrowdfundingBoxResourcePatch.kt | 4 +- .../HideEndscreenCardsResourcePatch.kt | 4 +- .../filterbar/HideFilterBarResourcePatch.kt | 4 +- ...deFloatingMicrophoneButtonResourcePatch.kt | 4 +- .../DisableFullscreenAmbientModePatch.kt | 2 +- .../hide/general/HideLayoutComponentsPatch.kt | 115 +++++---- .../infocards/HideInfocardsResourcePatch.kt | 4 +- .../HideLoadMoreButtonResourcePatch.kt | 4 +- .../HideEmailAddressPatch.kt | 0 .../HidePlayerFlyoutMenuPatch.kt | 2 +- .../DisableRollingNumberAnimationPatch.kt | 2 +- .../layout/hide/seekbar/HideSeekbarPatch.kt | 4 +- .../HideShortsComponentsResourcePatch.kt | 32 ++- ...bleSuggestedVideoEndScreenResourcePatch.kt | 2 +- .../layout/hide/time/HideTimestampPatch.kt | 4 +- .../panels/popup/PlayerPopupPanelsPatch.kt | 4 +- ...CustomPlayerOverlayOpacityResourcePatch.kt | 2 +- .../ReturnYouTubeDislikeResourcePatch.kt | 13 +- .../layout/searchbar/WideSearchbarPatch.kt | 4 +- .../RestoreOldSeekbarThumbnailsPatch.kt | 7 +- .../layout/seekbar/SeekbarPreferencesPatch.kt | 34 --- .../sponsorblock/SponsorBlockResourcePatch.kt | 12 +- .../spoofappversion/SpoofAppVersionPatch.kt | 2 +- .../layout/startpage/ChangeStartPagePatch.kt | 2 +- .../DisableResumingShortsOnStartupPatch.kt | 2 +- .../layout/tablet/EnableTabletLayoutPatch.kt | 4 +- .../tabletminiplayer/TabletMiniPlayerPatch.kt | 6 +- .../layout/theme/ThemeBytecodePatch.kt | 4 +- .../layout/theme/ThemeResourcePatch.kt | 4 +- .../thumbnails/AlternativeThumbnailsPatch.kt | 85 +++---- .../AlternativeThumbnailsResourcePatch.kt | 19 -- .../misc/announcements/AnnouncementsPatch.kt | 4 +- .../misc/autorepeat/AutoRepeatPatch.kt | 4 +- .../youtube/misc/debugging/DebuggingPatch.kt | 12 +- .../spoof/SpoofDeviceDimensionsPatch.kt | 4 +- .../misc/fix/playback/SpoofSignaturePatch.kt | 14 +- .../misc/links/BypassURLRedirectsPatch.kt | 4 +- .../misc/links/OpenLinksExternallyPatch.kt | 4 +- .../MinimizedPlaybackPatch.kt | 8 +- .../RemoveTrackingQueryParameterPatch.kt | 4 +- .../youtube/misc/settings/SettingsPatch.kt | 84 +++++-- .../misc/settings/SettingsResourcePatch.kt | 26 ++- .../misc/zoomhaptics/ZoomHapticsPatch.kt | 4 +- .../video/hdrbrightness/HDRBrightnessPatch.kt | 4 +- .../resources/addresources/values/strings.xml | 218 ++++++++---------- .../layout/revanced_settings_with_toolbar.xml | 2 +- .../resources/settings/xml/revanced_prefs.xml | 4 +- 80 files changed, 606 insertions(+), 505 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/HideEmailAddressPatch.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarPreferencesPatch.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsResourcePatch.kt diff --git a/api/revanced-patches.api b/api/revanced-patches.api index e380e87b..f0d4cd1a 100644 --- a/api/revanced-patches.api +++ b/api/revanced-patches.api @@ -723,10 +723,8 @@ public abstract class app/revanced/patches/shared/misc/settings/preference/BaseP } public class app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen : app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$BasePreferenceCollection { - public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V - public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V - public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting;)V + public synthetic fun (Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun addPreferences ([Lapp/revanced/patches/shared/misc/settings/preference/BasePreference;)V public final fun getCategories ()Ljava/util/Set; public synthetic fun transform ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreference; @@ -798,12 +796,22 @@ public class app/revanced/patches/shared/misc/settings/preference/PreferenceCate } public class app/revanced/patches/shared/misc/settings/preference/PreferenceScreen : app/revanced/patches/shared/misc/settings/preference/BasePreference { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting;Ljava/lang/String;Ljava/util/Set;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting;Ljava/lang/String;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getPreferences ()Ljava/util/Set; public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } +public final class app/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting : java/lang/Enum { + public static final field BY_KEY Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting; + public static final field BY_TITLE Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting; + public static final field UNSORTED Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public final fun getKeySuffix ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting; + public static fun values ()[Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen$Sorting; +} + public final class app/revanced/patches/shared/misc/settings/preference/SummaryType : java/lang/Enum { public static final field DEFAULT Lapp/revanced/patches/shared/misc/settings/preference/SummaryType; public static final field OFF Lapp/revanced/patches/shared/misc/settings/preference/SummaryType; @@ -1468,7 +1476,6 @@ public final class app/revanced/patches/youtube/layout/tabletminiplayer/TabletMi public static final field INSTANCE Lapp/revanced/patches/youtube/layout/tabletminiplayer/TabletMiniPlayerPatch; public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V - public final fun unwrap (Lapp/revanced/patcher/fingerprint/MethodFingerprint;)Lkotlin/Triple; } public final class app/revanced/patches/youtube/layout/theme/ThemeBytecodePatch : app/revanced/patcher/patch/BytecodePatch { @@ -1617,9 +1624,14 @@ public final class app/revanced/patches/youtube/misc/settings/SettingsPatch$Pref public static final field INSTANCE Lapp/revanced/patches/youtube/misc/settings/SettingsPatch$PreferenceScreen; public fun commit (Lapp/revanced/patches/shared/misc/settings/preference/PreferenceScreen;)V public final fun getADS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; - public final fun getINTERACTIONS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; - public final fun getLAYOUT ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; + public final fun getALTERNATIVE_THUMBNAILS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; + public final fun getFEED ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; + public final fun getGENERAL_LAYOUT ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; public final fun getMISC ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; + public final fun getPLAYER ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; + public final fun getSEEKBAR ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; + public final fun getSHORTS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; + public final fun getSWIPE_CONTROLS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; public final fun getVIDEO ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; } diff --git a/src/main/kotlin/app/revanced/patches/reddit/ad/comments/HideCommentAdsPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/ad/comments/HideCommentAdsPatch.kt index 298f7017..fa1ad21a 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/ad/comments/HideCommentAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/ad/comments/HideCommentAdsPatch.kt @@ -7,7 +7,7 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.reddit.ad.comments.fingerprints.HideCommentAdsFingerprint -@Patch(description = "Removes ads in the comments.",) +@Patch(description = "Removes ads in the comments.") object HideCommentAdsPatch : BytecodePatch( setOf(HideCommentAdsFingerprint) ) { diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/detection/piracy/DisablePiracyDetectionPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/detection/piracy/DisablePiracyDetectionPatch.kt index e075ee69..f941550b 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/detection/piracy/DisablePiracyDetectionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/detection/piracy/DisablePiracyDetectionPatch.kt @@ -6,18 +6,13 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.reddit.customclients.syncforreddit.detection.piracy.fingerprints.PiracyDetectionFingerprint -@Patch(description = "Disables detection of modified versions.",) +@Patch(description = "Disables detection of modified versions.") object DisablePiracyDetectionPatch : BytecodePatch(setOf(PiracyDetectionFingerprint)) { override fun execute(context: BytecodeContext) { // Do not throw an error if the fingerprint is not resolved. // This is fine because new versions of the target app do not need this patch. PiracyDetectionFingerprint.result?.mutableMethod?.apply { - addInstruction( - 0, - """ - return-void - """ - ) + addInstruction(0, "return-void") } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/app/revanced/patches/shared/misc/settings/BaseSettingsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/shared/misc/settings/BaseSettingsResourcePatch.kt index 8af71dfe..f1e48837 100644 --- a/src/main/kotlin/app/revanced/patches/shared/misc/settings/BaseSettingsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/misc/settings/BaseSettingsResourcePatch.kt @@ -41,12 +41,18 @@ abstract class BaseSettingsResourcePatch( } override fun close() { - fun Node.addPreference(preference: BasePreference) { + fun Node.addPreference(preference: BasePreference, prepend: Boolean = false) { preference.serialize(ownerDocument) { resource -> // TODO: Currently, resources can only be added to "values", which may not be the correct place. // It may be necessary to ask for the desired resourceValue in the future. AddResourcesPatch("values", resource) - }.let(this::appendChild) + }.let { preferenceNode -> + if (prepend && firstChild != null) { + insertBefore(preferenceNode, firstChild) + } else { + appendChild(preferenceNode) + } + } } // Add the root preference to an existing fragment if needed. @@ -54,7 +60,7 @@ abstract class BaseSettingsResourcePatch( context.xmlEditor["res/xml/$fragment.xml"].use { editor -> val document = editor.file - document.getNode("PreferenceScreen").addPreference(intentPreference) + document.getNode("PreferenceScreen").addPreference(intentPreference, true) } } diff --git a/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt b/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt index 29bf976a..381a2cf3 100644 --- a/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt +++ b/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen.kt @@ -1,9 +1,10 @@ package app.revanced.patches.shared.misc.settings.preference +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting import java.io.Closeable abstract class BasePreferenceScreen( - private val root: MutableSet = mutableSetOf() + private val root: MutableSet = mutableSetOf(), ) : Closeable { override fun close() { @@ -24,33 +25,27 @@ abstract class BasePreferenceScreen( titleKey: String = "${key}_title", private val summaryKey: String? = "${key}_summary", preferences: MutableSet = mutableSetOf(), - val categories: MutableSet = mutableSetOf() + val categories: MutableSet = mutableSetOf(), + private val sorting: Sorting = Sorting.BY_TITLE, ) : BasePreferenceCollection(key, titleKey, preferences) { - /** - * Initialize using title and summary keys with suffix "_title" and "_summary". - */ - constructor( - key: String? = null, - preferences: MutableSet = mutableSetOf(), - categories: MutableSet = mutableSetOf() - ) : this(key, key + "_title", key + "_summary", preferences, categories) - override fun transform(): PreferenceScreen { return PreferenceScreen( key, titleKey, summaryKey, + sorting, // Screens and preferences are sorted at runtime by integrations code, - // so they appear in alphabetical order for the localized language in use. - preferences = preferences + categories.map { it.transform() } + // so title sorting uses the localized language in use. + preferences = preferences + categories.map { it.transform() }, ) } private fun ensureScreenInserted() { // Add to screens if not yet done - if (!root.contains(this)) + if (!root.contains(this)) { root.add(this) + } } fun addPreferences(vararg preferences: BasePreference) { @@ -61,13 +56,13 @@ abstract class BasePreferenceScreen( open inner class Category( key: String? = null, titleKey: String = "${key}_title", - preferences: MutableSet = mutableSetOf() + preferences: MutableSet = mutableSetOf(), ) : BasePreferenceCollection(key, titleKey, preferences) { override fun transform(): PreferenceCategory { return PreferenceCategory( key, titleKey, - preferences = preferences + preferences = preferences, ) } @@ -75,8 +70,9 @@ abstract class BasePreferenceScreen( ensureScreenInserted() // Add to the categories if not done yet. - if (!categories.contains(this)) + if (!categories.contains(this)) { categories.add(this) + } this.preferences.addAll(preferences) } @@ -86,8 +82,8 @@ abstract class BasePreferenceScreen( abstract class BasePreferenceCollection( val key: String? = null, val titleKey: String = "${key}_title", - val preferences: MutableSet = mutableSetOf() + val preferences: MutableSet = mutableSetOf(), ) { abstract fun transform(): BasePreference } -} \ No newline at end of file +} diff --git a/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt b/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt index 3c933a72..dbc109ae 100644 --- a/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt +++ b/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/IntentPreference.kt @@ -1,19 +1,16 @@ package app.revanced.patches.shared.misc.settings.preference -import app.revanced.patches.shared.misc.settings.preference.IntentPreference.Intent import app.revanced.util.resource.BaseResource import org.w3c.dom.Document /** * A preference that opens an intent. * - * @param key The preference key. If null, other parameters must be specified. + * @param key Optional preference key. * @param titleKey The preference title key. * @param summaryKey The preference summary key. * @param tag The preference tag. * @param intent The intent to open. - * - * @see Intent */ class IntentPreference( key: String? = null, @@ -21,7 +18,7 @@ class IntentPreference( summaryKey: String? = "${key}_summary", tag: String = "Preference", val intent: Intent, -) : BasePreference(null, titleKey, summaryKey, tag) { +) : BasePreference(key, titleKey, summaryKey, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { diff --git a/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt b/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt index b4b9155a..f9525f92 100644 --- a/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt +++ b/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/NonInteractivePreference.kt @@ -6,10 +6,12 @@ import org.w3c.dom.Document /** * A non-interactive preference. * + * Typically used to present static text, but also used for custom integration code that responds to taps. + * * @param key The preference key. * @param summaryKey The preference summary key. - * @param tag The preference tag. - * @param selectable Whether the preference is selectable. + * @param tag The tag or full class name of the preference. + * @param selectable If the preference is selectable and responds to tap events. */ @Suppress("MemberVisibilityCanBePrivate") class NonInteractivePreference( diff --git a/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreen.kt b/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreen.kt index f03dd23a..049966a2 100644 --- a/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreen.kt +++ b/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/PreferenceScreen.kt @@ -9,6 +9,8 @@ import org.w3c.dom.Document * @param key The key of the preference. If null, other parameters must be specified. * @param titleKey The key of the preference title. * @param summaryKey The key of the preference summary. + * @param sorting Sorting to use. If the sorting is not [Sorting.UNSORTED], + * then the key parameter will be modified to include the sort type. * @param tag The tag or full class name of the preference. * @param preferences The preferences in this screen. */ @@ -17,14 +19,40 @@ open class PreferenceScreen( key: String? = null, titleKey: String = "${key}_title", summaryKey: String? = "${key}_summary", + sorting: Sorting = Sorting.BY_TITLE, tag: String = "PreferenceScreen", - val preferences: Set -) : BasePreference(key, titleKey, summaryKey, tag) { - + val preferences: Set, + // Alternatively, instead of repurposing the key for sorting, + // an extra bundle parameter can be added to the preferences XML declaration. + // This would require bundling and referencing an additional XML file + // or adding new attributes to the attrs.xml file. + // Since the key value is not currently used by integrations, + // for now it's much simpler to modify the key to include the sort parameter. +) : BasePreference(if (sorting == Sorting.UNSORTED) key else (key + sorting.keySuffix), titleKey, summaryKey, tag) { override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) = super.serialize(ownerDocument, resourceCallback).apply { preferences.forEach { appendChild(it.serialize(ownerDocument, resourceCallback)) } } + + /** + * How a PreferenceScreen should be sorted. + */ + enum class Sorting(val keySuffix: String) { + /** + * Sort by the localized preference title. + */ + BY_TITLE("_sort_by_title"), + + /** + * Sort by the preference keys. + */ + BY_KEY("_sort_by_key"), + + /** + * Unspecified sorting. + */ + UNSORTED("_sort_by_unsorted"), + } } diff --git a/src/main/kotlin/app/revanced/patches/twitch/ad/audio/AudioAdsPatch.kt b/src/main/kotlin/app/revanced/patches/twitch/ad/audio/AudioAdsPatch.kt index 75f9df43..31b398ca 100644 --- a/src/main/kotlin/app/revanced/patches/twitch/ad/audio/AudioAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/twitch/ad/audio/AudioAdsPatch.kt @@ -26,7 +26,9 @@ object AudioAdsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.ADS.CLIENT_SIDE.addPreferences(SwitchPreference("revanced_block_audio_ads")) + SettingsPatch.PreferenceScreen.ADS.CLIENT_SIDE.addPreferences( + SwitchPreference("revanced_block_audio_ads") + ) // Block playAds call with(AudioAdsPresenterPlayFingerprint.result!!) { diff --git a/src/main/kotlin/app/revanced/patches/twitch/ad/video/VideoAdsPatch.kt b/src/main/kotlin/app/revanced/patches/twitch/ad/video/VideoAdsPatch.kt index ab00fe79..c238c491 100644 --- a/src/main/kotlin/app/revanced/patches/twitch/ad/video/VideoAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/twitch/ad/video/VideoAdsPatch.kt @@ -35,7 +35,9 @@ object VideoAdsPatch : BaseAdPatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.ADS.CLIENT_SIDE.addPreferences(SwitchPreference("revanced_block_video_ads")) + SettingsPatch.PreferenceScreen.ADS.CLIENT_SIDE.addPreferences( + SwitchPreference("revanced_block_video_ads") + ) /* Amazon ads SDK */ context.blockMethods( diff --git a/src/main/kotlin/app/revanced/patches/twitch/debug/DebugModePatch.kt b/src/main/kotlin/app/revanced/patches/twitch/debug/DebugModePatch.kt index 644b614c..ad595c9e 100644 --- a/src/main/kotlin/app/revanced/patches/twitch/debug/DebugModePatch.kt +++ b/src/main/kotlin/app/revanced/patches/twitch/debug/DebugModePatch.kt @@ -32,7 +32,9 @@ object DebugModePatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.MISC.OTHER.addPreferences(SwitchPreference("revanced_twitch_debug_mode")) + SettingsPatch.PreferenceScreen.MISC.OTHER.addPreferences( + SwitchPreference("revanced_twitch_debug_mode") + ) listOf( IsDebugConfigEnabledFingerprint, diff --git a/src/main/kotlin/app/revanced/patches/twitch/misc/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/twitch/misc/settings/SettingsPatch.kt index e8ec635c..719c6559 100644 --- a/src/main/kotlin/app/revanced/patches/twitch/misc/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/twitch/misc/settings/SettingsPatch.kt @@ -25,7 +25,6 @@ import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.immutable.ImmutableField import java.io.Closeable - @Patch( name = "Settings", description = "Adds settings menu to Twitch.", @@ -62,7 +61,9 @@ object SettingsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - PreferenceScreen.MISC.OTHER.addPreferences(SwitchPreference("revanced_debug")) + PreferenceScreen.MISC.OTHER.addPreferences( + SwitchPreference("revanced_debug") + ) // Hook onCreate to handle fragment creation SettingsActivityOnCreateFingerprint.result?.apply { diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsResourcePatch.kt index d7c3a359..c89ba7ec 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsResourcePatch.kt @@ -8,7 +8,6 @@ import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.misc.litho.filter.LithoFilterPatch import app.revanced.patches.youtube.misc.settings.SettingsPatch -import app.revanced.patches.youtube.misc.settings.SettingsPatch.PreferenceScreen @Patch( dependencies = [ @@ -27,7 +26,7 @@ object HideAdsResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - PreferenceScreen.ADS.addPreferences( + SettingsPatch.PreferenceScreen.ADS.addPreferences( SwitchPreference("revanced_hide_general_ads"), SwitchPreference("revanced_hide_fullscreen_ads"), SwitchPreference("revanced_hide_buttoned_ads"), diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt index 24cb84a8..5cc676ff 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt @@ -44,7 +44,9 @@ object HideGetPremiumPatch : BytecodePatch(setOf(GetPremiumViewFingerprint)) { override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.ADS.addPreferences(SwitchPreference("revanced_hide_get_premium")) + SettingsPatch.PreferenceScreen.ADS.addPreferences( + SwitchPreference("revanced_hide_get_premium") + ) GetPremiumViewFingerprint.result?.let { it.mutableMethod.apply { diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt index bface060..d03c3ff2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt @@ -49,7 +49,9 @@ object VideoAdsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.ADS.addPreferences(SwitchPreference("revanced_hide_video_ads")) + SettingsPatch.PreferenceScreen.ADS.addPreferences( + SwitchPreference("revanced_hide_video_ads") + ) val loadVideoAdsFingerprintMethod = LoadVideoAdsFingerprint.result!!.mutableMethod diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlResourcePatch.kt index 83a44568..23476080 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlResourcePatch.kt @@ -4,7 +4,6 @@ import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.all.misc.resources.AddResourcesPatch -import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.misc.playercontrols.BottomControlsResourcePatch import app.revanced.patches.youtube.misc.settings.SettingsPatch @@ -22,14 +21,9 @@ internal object CopyVideoUrlResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.INTERACTIONS.addPreferences( - PreferenceScreen( - "revanced_copy_video_url_preference_screen", - preferences = setOf( - SwitchPreference("revanced_copy_video_url"), - SwitchPreference("revanced_copy_video_url_timestamp") - ) - ) + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( + SwitchPreference("revanced_copy_video_url"), + SwitchPreference("revanced_copy_video_url_timestamp") ) context.copyResources( @@ -40,8 +34,6 @@ internal object CopyVideoUrlResourcePatch : ResourcePatch() { ) ) - AddResourcesPatch(this::class) - BottomControlsResourcePatch.addControls("copyvideourl") } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt index e67cdb9f..591e16bf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt @@ -50,7 +50,9 @@ object RemoveViewerDiscretionDialogPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.INTERACTIONS.addPreferences(SwitchPreference("revanced_remove_viewer_discretion_dialog")) + SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences( + SwitchPreference("revanced_remove_viewer_discretion_dialog") + ) CreateDialogFingerprint.result?.mutableMethod?.apply { val showDialogIndex = implementation!!.instructions.lastIndex - 2 diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/ExternalDownloadsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/ExternalDownloadsResourcePatch.kt index 656eb13d..e24b7e6c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/ExternalDownloadsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/ExternalDownloadsResourcePatch.kt @@ -6,6 +6,7 @@ import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.settings.preference.InputType import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.shared.misc.settings.preference.TextPreference import app.revanced.patches.youtube.misc.playercontrols.BottomControlsResourcePatch @@ -18,25 +19,26 @@ import app.revanced.util.copyResources BottomControlsResourcePatch::class, SettingsPatch::class, AddResourcesPatch::class, - ] + ], ) internal object ExternalDownloadsResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.INTERACTIONS.addPreferences( + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( PreferenceScreen( - "revanced_external_downloader_preference_screen", + key = "revanced_external_downloader_screen", + sorting = Sorting.UNSORTED, preferences = setOf( SwitchPreference("revanced_external_downloader"), - TextPreference("revanced_external_downloader_name", inputType = InputType.TEXT) + TextPreference("revanced_external_downloader_name", inputType = InputType.TEXT), ), - ) + ), ) context.copyResources( "downloads", - ResourceGroup("drawable", "revanced_yt_download_button.xml") + ResourceGroup("drawable", "revanced_yt_download_button.xml"), ) BottomControlsResourcePatch.addControls("downloads") diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt index 6aebf707..a7cbd0a7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt @@ -50,7 +50,7 @@ object DisablePreciseSeekingGesturePatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.INTERACTIONS.addPreferences( + SettingsPatch.PreferenceScreen.SEEKBAR.addPreferences( SwitchPreference("revanced_disable_precise_seeking_gesture") ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt index ed67a5eb..0b11595d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt @@ -51,7 +51,9 @@ object EnableSeekbarTappingPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.INTERACTIONS.addPreferences(SwitchPreference("revanced_seekbar_tapping")) + SettingsPatch.PreferenceScreen.SEEKBAR.addPreferences( + SwitchPreference("revanced_seekbar_tapping") + ) // Find the required methods to tap the seekbar. val seekbarTappingMethods = OnTouchEventHandlerFingerprint.result?.let { diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt index f5dd14ad..ec38b7e7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt @@ -50,7 +50,9 @@ object EnableSlideToSeekPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.INTERACTIONS.addPreferences(SwitchPreference("revanced_slide_to_seek")) + SettingsPatch.PreferenceScreen.SEEKBAR.addPreferences( + SwitchPreference("revanced_slide_to_seek") + ) arrayOf( // Restore the behaviour to slide to seek. diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsResourcePatch.kt index de615456..70fe6e50 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsResourcePatch.kt @@ -5,7 +5,6 @@ import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.settings.preference.InputType -import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.shared.misc.settings.preference.TextPreference import app.revanced.patches.youtube.misc.settings.SettingsPatch @@ -13,27 +12,22 @@ import app.revanced.util.ResourceGroup import app.revanced.util.copyResources @Patch( - dependencies = [SettingsPatch::class, AddResourcesPatch::class] + dependencies = [SettingsPatch::class, AddResourcesPatch::class], ) internal object SwipeControlsResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.INTERACTIONS.addPreferences( - PreferenceScreen( - key = "revanced_swipe_controls_preference_screen", - preferences = setOf( - SwitchPreference("revanced_swipe_brightness"), - SwitchPreference("revanced_swipe_volume"), - SwitchPreference("revanced_swipe_press_to_engage"), - SwitchPreference("revanced_swipe_haptic_feedback"), - SwitchPreference("revanced_swipe_save_and_restore_brightness"), - TextPreference("revanced_swipe_overlay_timeout", inputType = InputType.NUMBER), - TextPreference("revanced_swipe_text_overlay_size", inputType = InputType.NUMBER), - TextPreference("revanced_swipe_overlay_background_alpha", inputType = InputType.NUMBER), - TextPreference("revanced_swipe_threshold", inputType = InputType.NUMBER) - ), - ) + SettingsPatch.PreferenceScreen.SWIPE_CONTROLS.addPreferences( + SwitchPreference("revanced_swipe_brightness"), + SwitchPreference("revanced_swipe_volume"), + SwitchPreference("revanced_swipe_press_to_engage"), + SwitchPreference("revanced_swipe_haptic_feedback"), + SwitchPreference("revanced_swipe_save_and_restore_brightness"), + TextPreference("revanced_swipe_overlay_timeout", inputType = InputType.NUMBER), + TextPreference("revanced_swipe_text_overlay_size", inputType = InputType.NUMBER), + TextPreference("revanced_swipe_overlay_background_alpha", inputType = InputType.NUMBER), + TextPreference("revanced_swipe_threshold", inputType = InputType.NUMBER), ) context.copyResources( @@ -43,8 +37,8 @@ internal object SwipeControlsResourcePatch : ResourcePatch() { "revanced_ic_sc_brightness_auto.xml", "revanced_ic_sc_brightness_manual.xml", "revanced_ic_sc_volume_mute.xml", - "revanced_ic_sc_volume_normal.xml" - ) + "revanced_ic_sc_volume_normal.xml", + ), ) } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt index 80d33fd6..6afc7290 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt @@ -48,7 +48,9 @@ object AutoCaptionsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_auto_captions")) + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( + SwitchPreference("revanced_auto_captions") + ) mapOf( StartVideoInformerFingerprint to 0, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt index 96f8a22a..d0614297 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt @@ -82,7 +82,7 @@ object ChangeHeaderPatch : ResourcePatch() { } /** - * A function that overwrites both header variants from [from] to [to] in the target resource directories. + * A function that overwrites both header variants in the target resource directories. */ val overwriteFromTo: (String, String) -> Unit = { from: String, to: String -> targetResourceDirectories.forEach { directory -> diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt index ca9c19de..6debdf1a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt @@ -48,12 +48,11 @@ object HideButtonsPatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( PreferenceScreen( - "revanced_hide_buttons_preference_screen", + "revanced_hide_buttons_screen", preferences = setOf( SwitchPreference("revanced_hide_like_dislike_button"), - SwitchPreference("revanced_hide_live_chat_button"), SwitchPreference("revanced_hide_share_button"), SwitchPreference("revanced_hide_report_button"), SwitchPreference("revanced_hide_remix_button"), diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/HideAutoplayButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/HideAutoplayButtonPatch.kt index 79ee7e6a..5937185e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/HideAutoplayButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/HideAutoplayButtonPatch.kt @@ -57,7 +57,9 @@ object HideAutoplayButtonPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_autoplay_button")) + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( + SwitchPreference("revanced_hide_autoplay_button") + ) LayoutConstructorFingerprint.result?.mutableMethod?.apply { val layoutGenMethodInstructions = implementation!!.instructions diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/HideCaptionsButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/HideCaptionsButtonPatch.kt index 45fe579f..a9f2b9f7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/HideCaptionsButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/HideCaptionsButtonPatch.kt @@ -48,7 +48,9 @@ object HideCaptionsButtonPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_captions_button")) + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( + SwitchPreference("revanced_hide_captions_button") + ) val subtitleButtonControllerMethod = SubtitleButtonControllerFingerprint.result!!.mutableMethod diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/cast/HideCastButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/cast/HideCastButtonPatch.kt index 24dda9fd..aaec9870 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/cast/HideCastButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/cast/HideCastButtonPatch.kt @@ -27,7 +27,9 @@ object HideCastButtonPatch : BytecodePatch(emptySet()) { override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_cast_button")) + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( + SwitchPreference("revanced_hide_cast_button") + ) val buttonClass = context.findClass("MediaRouteButton") ?: throw PatchException("MediaRouteButton class not found.") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt index 71e7374d..a8ac8121 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt @@ -8,6 +8,7 @@ import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.layout.buttons.navigation.fingerprints.* import app.revanced.patches.youtube.layout.buttons.navigation.utils.InjectionUtils.REGISTER_TEMPLATE_REPLACEMENT @@ -24,7 +25,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction IntegrationsPatch::class, SettingsPatch::class, ResolvePivotBarFingerprintsPatch::class, - AddResourcesPatch::class + AddResourcesPatch::class, ], compatiblePackages = [ CompatiblePackage( @@ -42,14 +43,14 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "19.02.39", "19.03.35", "19.03.36", - "19.04.37" - ] - ) - ] + "19.04.37", + ], + ), + ], ) @Suppress("unused") object NavigationButtonsPatch : BytecodePatch( - setOf(AddCreateButtonViewFingerprint) + setOf(AddCreateButtonViewFingerprint), ) { private const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/youtube/patches/NavigationButtonsPatch;" @@ -57,17 +58,18 @@ object NavigationButtonsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences( PreferenceScreen( - key = "revanced_navigation_buttons_preference_screen", + key = "revanced_navigation_buttons_screen", + sorting = Sorting.UNSORTED, preferences = setOf( SwitchPreference("revanced_hide_home_button"), SwitchPreference("revanced_hide_shorts_button"), - SwitchPreference("revanced_hide_subscriptions_button"), SwitchPreference("revanced_hide_create_button"), + SwitchPreference("revanced_hide_subscriptions_button"), SwitchPreference("revanced_switch_create_with_notifications_button"), ), - ) + ), ) /* @@ -82,14 +84,14 @@ object NavigationButtonsPatch : BytecodePatch( if (!it.resolve( context, initializeButtonsResult.mutableMethod, - initializeButtonsResult.mutableClass + initializeButtonsResult.mutableClass, ) - ) + ) { throw it.exception + } } .map { it.result!!.scanResult.patternScanResult!! } - val enumScanResult = fingerprintResults[0] val buttonViewResult = fingerprintResults[1] @@ -101,14 +103,14 @@ object NavigationButtonsPatch : BytecodePatch( */ val enumHook = "sput-object v$REGISTER_TEMPLATE_REPLACEMENT, " + - "$INTEGRATIONS_CLASS_DESCRIPTOR->lastNavigationButton:Ljava/lang/Enum;" + "$INTEGRATIONS_CLASS_DESCRIPTOR->lastNavigationButton:Ljava/lang/Enum;" val buttonHook = "invoke-static { v$REGISTER_TEMPLATE_REPLACEMENT }, " + - "$INTEGRATIONS_CLASS_DESCRIPTOR->hideButton(Landroid/view/View;)V" + "$INTEGRATIONS_CLASS_DESCRIPTOR->hideButton(Landroid/view/View;)V" // Inject bottom to top to not mess up the indices mapOf( buttonHook to buttonHookInsertIndex, - enumHook to enumHookInsertIndex + enumHook to enumHookInsertIndex, ).forEach { (hook, insertIndex) -> initializeButtonsResult.mutableMethod.injectHook(hook, insertIndex) } @@ -131,7 +133,7 @@ object NavigationButtonsPatch : BytecodePatch( """ invoke-static { }, $INTEGRATIONS_CLASS_DESCRIPTOR->switchCreateWithNotificationButton()Z move-result v$conditionRegister - """ + """, ) } } ?: throw AddCreateButtonViewFingerprint.exception @@ -141,8 +143,9 @@ object NavigationButtonsPatch : BytecodePatch( */ InitializeButtonsFingerprint.result!!.let { - if (!PivotBarCreateButtonViewFingerprint.resolve(context, it.mutableMethod, it.mutableClass)) + if (!PivotBarCreateButtonViewFingerprint.resolve(context, it.mutableMethod, it.mutableClass)) { throw PivotBarCreateButtonViewFingerprint.exception + } } PivotBarCreateButtonViewFingerprint.result!!.apply { @@ -152,9 +155,9 @@ object NavigationButtonsPatch : BytecodePatch( * Inject hooks */ val hook = "invoke-static { v$REGISTER_TEMPLATE_REPLACEMENT }, " + - "$INTEGRATIONS_CLASS_DESCRIPTOR->hideCreateButton(Landroid/view/View;)V" + "$INTEGRATIONS_CLASS_DESCRIPTOR->hideCreateButton(Landroid/view/View;)V" mutableMethod.injectHook(hook, insertIndex) } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/HidePlayerButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/HidePlayerButtonsPatch.kt index bf52cb06..7d16a8e3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/HidePlayerButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/HidePlayerButtonsPatch.kt @@ -52,7 +52,9 @@ object HidePlayerButtonsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_player_buttons")) + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( + SwitchPreference("revanced_hide_player_buttons") + ) PlayerControlsVisibilityModelFingerprint.result?.apply { val callIndex = scanResult.patternScanResult!!.endIndex diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/AlbumCardsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/AlbumCardsResourcePatch.kt index e05b3e8b..08b54204 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/AlbumCardsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/AlbumCardsResourcePatch.kt @@ -21,7 +21,9 @@ internal object AlbumCardsResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_album_cards")) + SettingsPatch.PreferenceScreen.FEED.addPreferences( + SwitchPreference("revanced_hide_album_cards") + ) albumCardId = ResourceMappingPatch.resourceMappings.single { it.type == "layout" && it.name == "album_card" diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/BreakingNewsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/BreakingNewsResourcePatch.kt index 31fb0b4a..81b69fe4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/BreakingNewsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/BreakingNewsResourcePatch.kt @@ -21,7 +21,9 @@ internal object BreakingNewsResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_breaking_news")) + SettingsPatch.PreferenceScreen.FEED.addPreferences( + SwitchPreference("revanced_hide_breaking_news") + ) horizontalCardListId = ResourceMappingPatch.resourceMappings.single { it.type == "layout" && it.name == "horizontal_card_list" diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/CommentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/CommentsPatch.kt index ee2a9411..cfff7f9e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/CommentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/CommentsPatch.kt @@ -47,9 +47,9 @@ object CommentsPatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( PreferenceScreen( - "revanced_comments_preference_screen", + "revanced_comments_screen", preferences = setOf( SwitchPreference("revanced_hide_comments_section"), SwitchPreference("revanced_hide_preview_comment") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/CrowdfundingBoxResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/CrowdfundingBoxResourcePatch.kt index 0ce74f7f..4e61c095 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/CrowdfundingBoxResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/CrowdfundingBoxResourcePatch.kt @@ -21,7 +21,9 @@ internal object CrowdfundingBoxResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_crowdfunding_box")) + SettingsPatch.PreferenceScreen.FEED.addPreferences( + SwitchPreference("revanced_hide_crowdfunding_box") + ) crowdfundingBoxId = ResourceMappingPatch.resourceMappings.single { it.type == "layout" && it.name == "donation_companion" diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsResourcePatch.kt index 6f601391..13231b7b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsResourcePatch.kt @@ -23,7 +23,9 @@ internal object HideEndscreenCardsResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_endscreen_cards")) + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( + SwitchPreference("revanced_hide_endscreen_cards") + ) fun findEndscreenResourceId(name: String) = ResourceMappingPatch.resourceMappings.single { it.type == "layout" && it.name == "endscreen_element_layout_$name" diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/HideFilterBarResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/HideFilterBarResourcePatch.kt index 70ef188f..a10d22a0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/HideFilterBarResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/HideFilterBarResourcePatch.kt @@ -18,9 +18,9 @@ internal object HideFilterBarResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.FEED.addPreferences( PreferenceScreen( - key = "revanced_hide_filter_bar_preference", + key = "revanced_hide_filter_bar_screen", preferences = setOf( SwitchPreference("revanced_hide_filter_bar_feed_in_feed"), SwitchPreference("revanced_hide_filter_bar_feed_in_search"), diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/HideFloatingMicrophoneButtonResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/HideFloatingMicrophoneButtonResourcePatch.kt index 92f8f423..7dbd6a15 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/HideFloatingMicrophoneButtonResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/HideFloatingMicrophoneButtonResourcePatch.kt @@ -22,7 +22,9 @@ internal object HideFloatingMicrophoneButtonResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_floating_microphone_button")) + SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences( + SwitchPreference("revanced_hide_floating_microphone_button") + ) fabButtonId = ResourceMappingPatch.resourceMappings.find { it.type == "id" && it.name == "fab" }?.id ?: throw PatchException("Can not find required fab button resource id") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt index 0825d786..caf22e8a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt @@ -45,7 +45,7 @@ object DisableFullscreenAmbientModePatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( SwitchPreference("revanced_disable_fullscreen_ambient_mode") ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt index de05d885..f72d80a3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt @@ -12,6 +12,8 @@ import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.settings.preference.InputType +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.shared.misc.settings.preference.TextPreference import app.revanced.patches.youtube.layout.hide.general.fingerprints.ParseElementFromBufferFingerprint @@ -19,7 +21,6 @@ import app.revanced.patches.youtube.layout.hide.general.fingerprints.PlayerOverl import app.revanced.patches.youtube.layout.hide.general.fingerprints.ShowWatermarkFingerprint import app.revanced.patches.youtube.misc.litho.filter.LithoFilterPatch import app.revanced.patches.youtube.misc.settings.SettingsPatch -import app.revanced.patches.youtube.misc.settings.SettingsPatch.PreferenceScreen import app.revanced.util.exception import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction @@ -31,11 +32,12 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction dependencies = [ LithoFilterPatch::class, SettingsPatch::class, - AddResourcesPatch::class + AddResourcesPatch::class, ], compatiblePackages = [ CompatiblePackage( - "com.google.android.youtube", [ + "com.google.android.youtube", + [ "18.32.39", "18.37.36", "18.38.44", @@ -48,14 +50,14 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction "19.02.39", "19.03.35", "19.03.36", - "19.04.37" - ] - ) - ] + "19.04.37", + ], + ), + ], ) @Suppress("unused") object HideLayoutComponentsPatch : BytecodePatch( - setOf(ParseElementFromBufferFingerprint, PlayerOverlayFingerprint) + setOf(ParseElementFromBufferFingerprint, PlayerOverlayFingerprint), ) { private const val LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/youtube/patches/components/LayoutComponentsFilter;" @@ -64,59 +66,68 @@ object HideLayoutComponentsPatch : BytecodePatch( private const val CUSTOM_FILTER_CLASS_NAME = "Lapp/revanced/integrations/youtube/patches/components/CustomFilter;" - override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - PreferenceScreen.LAYOUT.addPreferences( - SwitchPreference("revanced_hide_gray_separator"), - SwitchPreference("revanced_hide_join_membership_button"), - SwitchPreference("revanced_hide_channel_watermark"), - SwitchPreference("revanced_hide_for_you_shelf"), - SwitchPreference("revanced_hide_notify_me_button"), - SwitchPreference("revanced_hide_timed_reactions"), - SwitchPreference("revanced_hide_search_result_recommendations"), - SwitchPreference("revanced_hide_search_result_shelf_header"), - SwitchPreference("revanced_hide_channel_guidelines"), - SwitchPreference("revanced_hide_expandable_chip"), - SwitchPreference("revanced_hide_video_quality_menu_footer"), - SwitchPreference("revanced_hide_chapters"), - SwitchPreference("revanced_hide_community_posts"), - SwitchPreference("revanced_hide_compact_banner"), - SwitchPreference("revanced_hide_movies_section"), - SwitchPreference("revanced_hide_feed_survey"), - SwitchPreference("revanced_hide_community_guidelines"), - SwitchPreference("revanced_hide_subscribers_community_guidelines"), - SwitchPreference("revanced_hide_channel_member_shelf"), - SwitchPreference("revanced_hide_emergency_box"), - SwitchPreference("revanced_hide_info_panels"), - SwitchPreference("revanced_hide_medical_panels"), + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( SwitchPreference("revanced_hide_channel_bar"), - SwitchPreference("revanced_hide_quick_actions"), - SwitchPreference("revanced_hide_related_videos"), - SwitchPreference("revanced_hide_image_shelf"), - SwitchPreference("revanced_hide_latest_posts_ads"), - SwitchPreference("revanced_hide_mix_playlists"), - SwitchPreference("revanced_hide_artist_cards"), + SwitchPreference("revanced_hide_channel_guidelines"), + SwitchPreference("revanced_hide_channel_member_shelf"), + SwitchPreference("revanced_hide_channel_watermark"), SwitchPreference("revanced_hide_chips_shelf"), - app.revanced.patches.shared.misc.settings.preference.PreferenceScreen( - "revanced_hide_description_components_preference_screen", + SwitchPreference("revanced_hide_community_guidelines"), + PreferenceScreen( + key = "revanced_hide_description_components_screen", preferences = setOf( + SwitchPreference("revanced_hide_chapters"), SwitchPreference("revanced_hide_info_cards_section"), SwitchPreference("revanced_hide_game_section"), SwitchPreference("revanced_hide_music_section"), SwitchPreference("revanced_hide_podcast_section"), SwitchPreference("revanced_hide_transcript_section"), - ) + ), ), - app.revanced.patches.shared.misc.settings.preference.PreferenceScreen( - "revanced_custom_filter_preference_screen", + SwitchPreference("revanced_hide_emergency_box"), + SwitchPreference("revanced_hide_expandable_chip"), + SwitchPreference("revanced_hide_info_panels"), + SwitchPreference("revanced_hide_medical_panels"), + SwitchPreference("revanced_hide_quick_actions"), + SwitchPreference("revanced_hide_related_videos"), + SwitchPreference("revanced_hide_subscribers_community_guidelines"), + SwitchPreference("revanced_hide_timed_reactions"), + ) + + SettingsPatch.PreferenceScreen.FEED.addPreferences( + SwitchPreference("revanced_hide_artist_cards"), + SwitchPreference("revanced_hide_community_posts"), + SwitchPreference("revanced_hide_compact_banner"), + SwitchPreference("revanced_hide_feed_survey"), + SwitchPreference("revanced_hide_for_you_shelf"), + SwitchPreference("revanced_hide_image_shelf"), + SwitchPreference("revanced_hide_join_membership_button"), + SwitchPreference("revanced_hide_latest_posts_ads"), + SwitchPreference("revanced_hide_mix_playlists"), + SwitchPreference("revanced_hide_movies_section"), + SwitchPreference("revanced_hide_notify_me_button"), + SwitchPreference("revanced_hide_search_result_recommendations"), + SwitchPreference("revanced_hide_search_result_shelf_header"), + ) + + SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences( + SwitchPreference("revanced_hide_gray_separator"), + PreferenceScreen( + key = "revanced_custom_filter_screen", + sorting = Sorting.UNSORTED, preferences = setOf( SwitchPreference("revanced_custom_filter"), // TODO: This should be a dynamic ListPreference, which does not exist yet - TextPreference("revanced_custom_filter_strings", inputType = InputType.TEXT_MULTI_LINE) - ) - ) + TextPreference("revanced_custom_filter_strings", inputType = InputType.TEXT_MULTI_LINE), + ), + ), + ) + + SettingsPatch.PreferenceScreen.VIDEO.addPreferences( + SwitchPreference("revanced_hide_video_quality_menu_footer"), ) LithoFilterPatch.addFilter(LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR) @@ -136,14 +147,15 @@ object HideLayoutComponentsPatch : BytecodePatch( val byteBufferRegister = getInstruction(consumeByteBufferIndex).registerD addInstructionsWithLabels( - consumeByteBufferIndex, """ + consumeByteBufferIndex, + """ invoke-static {v$conversionContextRegister, v$byteBufferRegister}, $LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR->filterMixPlaylists(Ljava/lang/Object;[B)Z move-result v0 # Conveniently same register happens to be free. if-nez v0, :return_empty_component - """, ExternalLabel("return_empty_component", returnEmptyComponentInstruction) + """, + ExternalLabel("return_empty_component", returnEmptyComponentInstruction), ) } - } ?: throw ParseElementFromBufferFingerprint.exception // endregion @@ -157,10 +169,11 @@ object HideLayoutComponentsPatch : BytecodePatch( removeInstruction(index) addInstructions( - index, """ + index, + """ invoke-static {}, $LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR->showWatermark()Z move-result p2 - """ + """, ) } ?: throw ShowWatermarkFingerprint.exception diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfocardsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfocardsResourcePatch.kt index cde96076..6ac2377f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfocardsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfocardsResourcePatch.kt @@ -21,7 +21,9 @@ object HideInfocardsResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_info_cards")) + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( + SwitchPreference("revanced_hide_info_cards") + ) drawerResourceId = ResourceMappingPatch.resourceMappings.single { it.type == "id" && it.name == "info_cards_drawer_header" diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/HideLoadMoreButtonResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/HideLoadMoreButtonResourcePatch.kt index 4ab73f3a..86d4734f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/HideLoadMoreButtonResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/HideLoadMoreButtonResourcePatch.kt @@ -21,7 +21,9 @@ internal object HideLoadMoreButtonResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_load_more_button")) + SettingsPatch.PreferenceScreen.FEED.addPreferences( + SwitchPreference("revanced_hide_load_more_button") + ) expandButtonDownId = ResourceMappingPatch.resourceMappings.single { it.type == "layout" && it.name == "expand_button_down" diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/HideEmailAddressPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/HideEmailAddressPatch.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt index 1185ba7f..bdc042ab 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt @@ -50,7 +50,7 @@ object HidePlayerFlyoutMenuPatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( PreferenceScreen( key = KEY, preferences = setOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt index 70fde81b..1e1c1d93 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt @@ -49,7 +49,7 @@ object DisableRollingNumberAnimationPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( SwitchPreference("revanced_disable_rolling_number_animations") ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt index 263b7bad..588367fd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt @@ -8,7 +8,6 @@ import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.layout.seekbar.SeekbarColorBytecodePatch -import app.revanced.patches.youtube.layout.seekbar.SeekbarPreferencesPatch import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.SettingsPatch import app.revanced.patches.youtube.shared.fingerprints.SeekbarFingerprint @@ -21,7 +20,6 @@ import app.revanced.patches.youtube.shared.fingerprints.SeekbarOnDrawFingerprint IntegrationsPatch::class, SettingsPatch::class, SeekbarColorBytecodePatch::class, - SeekbarPreferencesPatch::class, AddResourcesPatch::class ], compatiblePackages = [ @@ -51,7 +49,7 @@ object HideSeekbarPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SeekbarPreferencesPatch.addPreferences( + SettingsPatch.PreferenceScreen.SEEKBAR.addPreferences( SwitchPreference("revanced_hide_seekbar"), SwitchPreference("revanced_hide_seekbar_thumbnail") ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsResourcePatch.kt index b9f411fe..83528f34 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsResourcePatch.kt @@ -5,7 +5,6 @@ import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch -import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.misc.settings.SettingsPatch @@ -17,24 +16,19 @@ object HideShortsComponentsResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( - PreferenceScreen( - "revanced_shorts_preference_screen", - preferences = setOf( - SwitchPreference("revanced_hide_shorts"), - SwitchPreference("revanced_hide_shorts_join_button"), - SwitchPreference("revanced_hide_shorts_subscribe_button"), - SwitchPreference("revanced_hide_shorts_subscribe_button_paused"), - SwitchPreference("revanced_hide_shorts_thanks_button"), - SwitchPreference("revanced_hide_shorts_comments_button"), - SwitchPreference("revanced_hide_shorts_remix_button"), - SwitchPreference("revanced_hide_shorts_share_button"), - SwitchPreference("revanced_hide_shorts_info_panel"), - SwitchPreference("revanced_hide_shorts_channel_bar"), - SwitchPreference("revanced_hide_shorts_sound_button"), - SwitchPreference("revanced_hide_shorts_navigation_bar") - ) - ) + SettingsPatch.PreferenceScreen.SHORTS.addPreferences( + SwitchPreference("revanced_hide_shorts"), + SwitchPreference("revanced_hide_shorts_join_button"), + SwitchPreference("revanced_hide_shorts_subscribe_button"), + SwitchPreference("revanced_hide_shorts_subscribe_button_paused"), + SwitchPreference("revanced_hide_shorts_thanks_button"), + SwitchPreference("revanced_hide_shorts_comments_button"), + SwitchPreference("revanced_hide_shorts_remix_button"), + SwitchPreference("revanced_hide_shorts_share_button"), + SwitchPreference("revanced_hide_shorts_info_panel"), + SwitchPreference("revanced_hide_shorts_channel_bar"), + SwitchPreference("revanced_hide_shorts_sound_button"), + SwitchPreference("revanced_hide_shorts_navigation_bar") ) ResourceMappingPatch.resourceMappings.find { diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenResourcePatch.kt index b190b321..28122d1a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenResourcePatch.kt @@ -21,7 +21,7 @@ internal object DisableSuggestedVideoEndScreenResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( SwitchPreference("revanced_disable_suggested_video_end_screen") ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt index 673816e3..17d96a2f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt @@ -42,7 +42,9 @@ object HideTimestampPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_timestamp")) + SettingsPatch.PreferenceScreen.SEEKBAR.addPreferences( + SwitchPreference("revanced_hide_timestamp") + ) TimeCounterFingerprint.result?.apply { mutableMethod.addInstructionsWithLabels( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt index eaf67270..47760116 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt @@ -43,7 +43,9 @@ object PlayerPopupPanelsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_hide_player_popup_panels")) + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( + SwitchPreference("revanced_hide_player_popup_panels") + ) val engagementPanelControllerMethod = EngagementPanelControllerFingerprint .result?.mutableMethod ?: throw EngagementPanelControllerFingerprint.exception diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityResourcePatch.kt index a409030c..147ccacc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityResourcePatch.kt @@ -18,7 +18,7 @@ internal object CustomPlayerOverlayOpacityResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.PLAYER.addPreferences( TextPreference("revanced_player_overlay_opacity", inputType = InputType.NUMBER) ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikeResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikeResourcePatch.kt index 848b86af..06226fc0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikeResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikeResourcePatch.kt @@ -7,6 +7,7 @@ import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch import app.revanced.patches.shared.misc.settings.preference.IntentPreference import app.revanced.patches.youtube.misc.settings.SettingsPatch +import app.revanced.patches.youtube.misc.settings.SettingsResourcePatch @Patch( dependencies = [ @@ -20,15 +21,13 @@ internal object ReturnYouTubeDislikeResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( - IntentPreference( - "revanced_ryd_settings", - intent = SettingsPatch.newIntent("revanced_ryd_settings_intent") - ) + SettingsResourcePatch += IntentPreference( + key = "revanced_settings_screen_09", + titleKey = "revanced_ryd_settings_title", + summaryKey = null, + intent = SettingsPatch.newIntent("revanced_ryd_settings_intent") ) - AddResourcesPatch(this::class) - oldUIDislikeId = ResourceMappingPatch.resourceMappings.single { it.type == "id" && it.name == "dislike_button" }.id diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt index 5fe87e4f..f981f8a5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt @@ -54,7 +54,9 @@ object WideSearchbarPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_wide_searchbar")) + SettingsPatch.PreferenceScreen.FEED.addPreferences( + SwitchPreference("revanced_wide_searchbar") + ) val result = CreateSearchSuggestionsFingerprint.result ?: throw CreateSearchSuggestionsFingerprint.exception diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/RestoreOldSeekbarThumbnailsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/RestoreOldSeekbarThumbnailsPatch.kt index 665190fd..a300571e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/RestoreOldSeekbarThumbnailsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/RestoreOldSeekbarThumbnailsPatch.kt @@ -10,12 +10,13 @@ import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.layout.seekbar.fingerprints.FullscreenSeekbarThumbnailsFingerprint import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch +import app.revanced.patches.youtube.misc.settings.SettingsPatch import app.revanced.util.exception @Patch( name = "Restore old seekbar thumbnails", description = "Adds an option to restore the old seekbar thumbnails that appear above the seekbar while seeking instead of fullscreen thumbnails.", - dependencies = [IntegrationsPatch::class, SeekbarPreferencesPatch::class, AddResourcesPatch::class], + dependencies = [IntegrationsPatch::class, AddResourcesPatch::class], compatiblePackages = [ CompatiblePackage( "com.google.android.youtube", [ @@ -45,7 +46,9 @@ object RestoreOldSeekbarThumbnailsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SeekbarPreferencesPatch.addPreferences(SwitchPreference("revanced_restore_old_seekbar_thumbnails")) + SettingsPatch.PreferenceScreen.SEEKBAR.addPreferences( + SwitchPreference("revanced_restore_old_seekbar_thumbnails") + ) FullscreenSeekbarThumbnailsFingerprint.result?.mutableMethod?.apply { val moveResultIndex = getInstructions().lastIndex - 1 diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarPreferencesPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarPreferencesPatch.kt deleted file mode 100644 index 0a9f7e27..00000000 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarPreferencesPatch.kt +++ /dev/null @@ -1,34 +0,0 @@ -package app.revanced.patches.youtube.layout.seekbar - -import app.revanced.patcher.data.ResourceContext -import app.revanced.patcher.patch.ResourcePatch -import app.revanced.patcher.patch.annotation.Patch -import app.revanced.patches.all.misc.resources.AddResourcesPatch -import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch -import app.revanced.patches.shared.misc.settings.preference.BasePreference -import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen -import app.revanced.patches.youtube.misc.settings.SettingsPatch -import java.io.Closeable - -@Patch(dependencies = [SettingsPatch::class, ResourceMappingPatch::class, AddResourcesPatch::class]) -internal object SeekbarPreferencesPatch : ResourcePatch(), Closeable { - private val seekbarPreferences = mutableSetOf() - - override fun execute(context: ResourceContext) { - // Nothing to do here. All work is done in close method. - } - - override fun close() { - AddResourcesPatch(this::class) - - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( - PreferenceScreen( - "revanced_seekbar_preference_screen", - preferences = seekbarPreferences, - ) - ) - } - - internal fun addPreferences(vararg preferencesToAdd: BasePreference) = - seekbarPreferences.addAll(preferencesToAdd) -} diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockResourcePatch.kt index 335126a8..6484216c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockResourcePatch.kt @@ -8,6 +8,7 @@ import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch import app.revanced.patches.shared.misc.settings.preference.IntentPreference import app.revanced.patches.youtube.misc.settings.SettingsPatch +import app.revanced.patches.youtube.misc.settings.SettingsResourcePatch import app.revanced.util.ResourceGroup import app.revanced.util.copyResources import app.revanced.util.copyXmlNode @@ -24,12 +25,13 @@ internal object SponsorBlockResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( - IntentPreference( - "revanced_sb_settings", - intent = SettingsPatch.newIntent("revanced_sb_settings_intent"), - ), + SettingsResourcePatch += IntentPreference( + key = "revanced_settings_screen_10", + titleKey = "revanced_sb_settings_title", + summaryKey = null, + intent = SettingsPatch.newIntent("revanced_sb_settings_intent") ) + arrayOf( ResourceGroup( "layout", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt index 8ac79711..eea41751 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt @@ -49,7 +49,7 @@ object SpoofAppVersionPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences( SwitchPreference("revanced_spoof_app_version"), ListPreference( key = "revanced_spoof_app_version_target", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/startpage/ChangeStartPagePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/startpage/ChangeStartPagePatch.kt index 9016385a..e4f42397 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/startpage/ChangeStartPagePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/startpage/ChangeStartPagePatch.kt @@ -33,7 +33,7 @@ object ChangeStartPagePatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences( ListPreference( key = "revanced_start_page", summaryKey = null, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt index 1cf63fc0..425adf11 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt @@ -56,7 +56,7 @@ object DisableResumingShortsOnStartupPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SettingsPatch.PreferenceScreen.SHORTS.addPreferences( SwitchPreference("revanced_disable_resuming_shorts_player") ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch.kt index 10dadae3..f09c7d69 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch.kt @@ -28,7 +28,9 @@ object EnableTabletLayoutPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_tablet_layout")) + SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences( + SwitchPreference("revanced_tablet_layout") + ) GetFormFactorFingerprint.result?.let { it.mutableMethod.apply { diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/TabletMiniPlayerPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/TabletMiniPlayerPatch.kt index e50e1a24..454cced2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/TabletMiniPlayerPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/TabletMiniPlayerPatch.kt @@ -55,7 +55,9 @@ object TabletMiniPlayerPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_tablet_miniplayer")) + SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences( + SwitchPreference("revanced_tablet_miniplayer") + ) // First resolve the fingerprints via the parent fingerprint. MiniPlayerDimensionsCalculatorParentFingerprint.result @@ -127,7 +129,7 @@ object TabletMiniPlayerPatch : BytecodePatch( ) } - fun MethodFingerprint.unwrap(): Triple { + private fun MethodFingerprint.unwrap(): Triple { val result = this.result!! val scanIndex = result.scanResult.patternScanResult!!.endIndex val method = result.mutableMethod diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeBytecodePatch.kt index be9aaaea..3ac26ac9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeBytecodePatch.kt @@ -100,7 +100,9 @@ object ThemeBytecodePatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(SwitchPreference("revanced_gradient_loading_screen")) + SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences( + SwitchPreference("revanced_gradient_loading_screen") + ) UseGradientLoadingScreenFingerprint.result?.mutableMethod?.apply { val isEnabledIndex = indexOfFirstWideLiteralInstructionValue(GRADIENT_LOADING_SCREEN_AB_CONSTANT) + 3 diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeResourcePatch.kt index 2d5fef1e..80cff8a7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeResourcePatch.kt @@ -9,7 +9,6 @@ import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch import app.revanced.patches.shared.misc.settings.preference.InputType import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.shared.misc.settings.preference.TextPreference -import app.revanced.patches.youtube.layout.seekbar.SeekbarPreferencesPatch import app.revanced.patches.youtube.layout.theme.ThemeBytecodePatch.darkThemeBackgroundColor import app.revanced.patches.youtube.layout.theme.ThemeBytecodePatch.lightThemeBackgroundColor import app.revanced.patches.youtube.misc.settings.SettingsPatch @@ -19,7 +18,6 @@ import org.w3c.dom.Element dependencies = [ SettingsPatch::class, ResourceMappingPatch::class, - SeekbarPreferencesPatch::class, AddResourcesPatch::class, ], ) @@ -29,7 +27,7 @@ internal object ThemeResourcePatch : ResourcePatch() { override fun execute(context: ResourceContext) { AddResourcesPatch(this::class) - SeekbarPreferencesPatch.addPreferences( + SettingsPatch.PreferenceScreen.SEEKBAR.addPreferences( SwitchPreference("revanced_seekbar_custom_color"), TextPreference("revanced_seekbar_custom_color_value", inputType = InputType.TEXT_CAP_CHARACTERS), ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt index 2bda4802..4c642c7b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt @@ -11,7 +11,10 @@ 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.all.misc.resources.AddResourcesPatch -import app.revanced.patches.shared.misc.settings.preference.* +import app.revanced.patches.shared.misc.settings.preference.ListPreference +import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference +import app.revanced.patches.shared.misc.settings.preference.SwitchPreference +import app.revanced.patches.shared.misc.settings.preference.TextPreference import app.revanced.patches.youtube.layout.thumbnails.fingerprints.MessageDigestImageUrlFingerprint import app.revanced.patches.youtube.layout.thumbnails.fingerprints.MessageDigestImageUrlParentFingerprint import app.revanced.patches.youtube.layout.thumbnails.fingerprints.cronet.RequestFingerprint @@ -34,8 +37,7 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod dependencies = [ IntegrationsPatch::class, SettingsPatch::class, - AlternativeThumbnailsResourcePatch::class, - AddResourcesPatch::class + AddResourcesPatch::class, ], compatiblePackages = [ CompatiblePackage( @@ -53,10 +55,10 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod "19.02.39", "19.03.35", "19.03.36", - "19.04.37" - ] - ) - ] + "19.04.37", + ], + ), + ], ) @Suppress("unused") object AlternativeThumbnailsPatch : BytecodePatch( @@ -64,7 +66,7 @@ object AlternativeThumbnailsPatch : BytecodePatch( MessageDigestImageUrlParentFingerprint, OnResponseStartedFingerprint, RequestFingerprint, - ) + ), ) { private const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/youtube/patches/AlternativeThumbnailsPatch;" @@ -88,7 +90,7 @@ object AlternativeThumbnailsPatch : BytecodePatch( """ invoke-static { p1 }, $targetMethodClass->overrideImageURL(Ljava/lang/String;)Ljava/lang/String; move-result-object p1 - """ + """, ) loadImageUrlIndex += 2 } @@ -102,7 +104,7 @@ object AlternativeThumbnailsPatch : BytecodePatch( loadImageSuccessCallbackMethod.addInstruction( loadImageSuccessCallbackIndex++, "invoke-static { p1, p2 }, $targetMethodClass->handleCronetSuccess(" + - "Lorg/chromium/net/UrlRequest;Lorg/chromium/net/UrlResponseInfo;)V" + "Lorg/chromium/net/UrlRequest;Lorg/chromium/net/UrlResponseInfo;)V", ) } @@ -114,44 +116,32 @@ object AlternativeThumbnailsPatch : BytecodePatch( loadImageErrorCallbackMethod.addInstruction( loadImageErrorCallbackIndex++, "invoke-static { p1, p2, p3 }, $targetMethodClass->handleCronetFailure(" + - "Lorg/chromium/net/UrlRequest;Lorg/chromium/net/UrlResponseInfo;Ljava/io/IOException;)V" + "Lorg/chromium/net/UrlRequest;Lorg/chromium/net/UrlResponseInfo;Ljava/io/IOException;)V", ) } override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( - PreferenceScreen( - "revanced_alt_thumbnail_preference_screen", - preferences = setOf( - NonInteractivePreference( - "revanced_alt_thumbnail_about", - null, // Summary is dynamically updated based on the current settings. - tag = "app.revanced.integrations.youtube.settings.preference.AlternativeThumbnailsStatusPreference" - ), - SwitchPreference("revanced_alt_thumbnail_dearrow"), - SwitchPreference("revanced_alt_thumbnail_dearrow_connection_toast"), - TextPreference("revanced_alt_thumbnail_dearrow_api_url"), - NonInteractivePreference( - "revanced_alt_thumbnail_dearrow_about", - // Custom about preference with link to the DeArrow website. - tag = "app.revanced.integrations.youtube.settings.preference.AlternativeThumbnailsAboutDeArrowPreference", - selectable = true - ), - SwitchPreference("revanced_alt_thumbnail_stills"), - ListPreference( - "revanced_alt_thumbnail_stills_time", - summaryKey = null, - ), - SwitchPreference("revanced_alt_thumbnail_stills_fast"), - NonInteractivePreference( - "revanced_alt_thumbnail_stills_about", - // Restore the preference dividers to keep it from looking weird. - selectable = true - ) - ) - ) + SettingsPatch.PreferenceScreen.ALTERNATIVE_THUMBNAILS.addPreferences( + NonInteractivePreference( + "revanced_alt_thumbnail_about", + null, // Summary is dynamically updated based on the current settings. + tag = "app.revanced.integrations.youtube.settings.preference.AlternativeThumbnailsStatusPreference", + ), + SwitchPreference("revanced_alt_thumbnail_dearrow"), + SwitchPreference("revanced_alt_thumbnail_dearrow_connection_toast"), + TextPreference("revanced_alt_thumbnail_dearrow_api_url"), + NonInteractivePreference( + "revanced_alt_thumbnail_dearrow_about", + // Custom about preference with link to the DeArrow website. + tag = "app.revanced.integrations.youtube.settings.preference.AlternativeThumbnailsAboutDeArrowPreference", + selectable = true, + ), + SwitchPreference("revanced_alt_thumbnail_stills"), + ListPreference("revanced_alt_thumbnail_stills_time", summaryKey = null), + SwitchPreference("revanced_alt_thumbnail_stills_fast"), + NonInteractivePreference("revanced_alt_thumbnail_stills_about"), ) fun MethodFingerprint.getResultOrThrow() = @@ -162,7 +152,7 @@ object AlternativeThumbnailsPatch : BytecodePatch( fun MethodFingerprint.resolveAndLetMutableMethod( fingerprint: MethodFingerprint, - block: (MutableMethod) -> Unit + block: (MutableMethod) -> Unit, ) = alsoResolve(fingerprint).also { block(it.mutableMethod) } MessageDigestImageUrlFingerprint.resolveAndLetMutableMethod(MessageDigestImageUrlParentFingerprint) { @@ -203,15 +193,16 @@ object AlternativeThumbnailsPatch : BytecodePatch( AccessFlags.PUBLIC.value, null, null, - MutableMethodImplementation(2) + MutableMethodImplementation(2), ).toMutable().apply { addInstructions( """ - iget-object v0, p0, $definingClass->${urlFieldName}:Ljava/lang/String; + iget-object v0, p0, $definingClass->$urlFieldName:Ljava/lang/String; return-object v0 - """ + """, ) - }) + }, + ) } } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsResourcePatch.kt deleted file mode 100644 index d926b4a4..00000000 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsResourcePatch.kt +++ /dev/null @@ -1,19 +0,0 @@ -package app.revanced.patches.youtube.layout.thumbnails - -import app.revanced.patcher.data.ResourceContext -import app.revanced.patcher.patch.ResourcePatch -import app.revanced.patcher.patch.annotation.Patch -import app.revanced.patches.all.misc.resources.AddResourcesPatch -import app.revanced.patches.youtube.misc.settings.SettingsPatch - -@Patch( - dependencies = [ - SettingsPatch::class, - AddResourcesPatch::class - ] -) -internal object AlternativeThumbnailsResourcePatch : ResourcePatch() { - override fun execute(context: ResourceContext) { - AddResourcesPatch(this::class) - } -} diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/announcements/AnnouncementsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/announcements/AnnouncementsPatch.kt index 66b01d8e..f7b43a2b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/announcements/AnnouncementsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/announcements/AnnouncementsPatch.kt @@ -29,7 +29,9 @@ object AnnouncementsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.MISC.addPreferences(SwitchPreference("revanced_announcements")) + SettingsPatch.PreferenceScreen.MISC.addPreferences( + SwitchPreference("revanced_announcements") + ) val onCreateMethod = MainActivityFingerprint.result?.let { it.mutableClass.methods.find { method -> method.name == "onCreate" } diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt index 5f3eb7ae..f30ce323 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt @@ -47,7 +47,9 @@ object AutoRepeatPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.MISC.addPreferences(SwitchPreference("revanced_auto_repeat")) + SettingsPatch.PreferenceScreen.MISC.addPreferences( + SwitchPreference("revanced_auto_repeat") + ) //Get Result from the ParentFingerprint which is the playMethod we need to get. val parentResult = AutoRepeatParentFingerprint.result diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/DebuggingPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/DebuggingPatch.kt index 01576ee2..523a76d5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/DebuggingPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/DebuggingPatch.kt @@ -6,6 +6,7 @@ import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.SettingsPatch @@ -14,7 +15,7 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch name = "Enable debugging", description = "Adds options for debugging.", dependencies = [IntegrationsPatch::class, SettingsPatch::class, AddResourcesPatch::class], - compatiblePackages = [CompatiblePackage("com.google.android.youtube")] + compatiblePackages = [CompatiblePackage("com.google.android.youtube")], ) @Suppress("unused") object DebuggingPatch : ResourcePatch() { @@ -23,14 +24,15 @@ object DebuggingPatch : ResourcePatch() { SettingsPatch.PreferenceScreen.MISC.addPreferences( PreferenceScreen( - "revanced_debug_preference_screen", + key = "revanced_debug_screen", + sorting = Sorting.UNSORTED, preferences = setOf( SwitchPreference("revanced_debug"), SwitchPreference("revanced_debug_protobuffer"), SwitchPreference("revanced_debug_stacktrace"), - SwitchPreference("revanced_debug_toast_on_error") - ) - ) + SwitchPreference("revanced_debug_toast_on_error"), + ), + ), ) } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt index 21819947..5e871159 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt @@ -45,7 +45,9 @@ object SpoofDeviceDimensionsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.MISC.addPreferences(SwitchPreference("revanced_spoof_device_dimensions",)) + SettingsPatch.PreferenceScreen.MISC.addPreferences( + SwitchPreference("revanced_spoof_device_dimensions") + ) DeviceDimensionsModelToStringFingerprint.result ?.mutableClass?.methods?.find { method -> method.name == "" } diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofSignaturePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofSignaturePatch.kt index 25c31d66..5a00c791 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofSignaturePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofSignaturePatch.kt @@ -10,8 +10,19 @@ import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.misc.fix.playback.fingerprints.* +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.ParamsMapPutFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.PlayerResponseModelImplGeneralFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.PlayerResponseModelImplLiveStreamFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.PlayerResponseModelImplRecommendedLevelFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.ScrubbedPreviewLayoutFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.StoryboardRendererDecoderRecommendedLevelFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.StoryboardRendererDecoderSpecFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.StoryboardRendererSpecFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.StoryboardThumbnailFingerprint +import app.revanced.patches.youtube.misc.fix.playback.fingerprints.StoryboardThumbnailParentFingerprint import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.misc.settings.SettingsPatch import app.revanced.patches.youtube.video.information.VideoInformationPatch @@ -54,7 +65,8 @@ object SpoofSignaturePatch : BytecodePatch( SettingsPatch.PreferenceScreen.MISC.addPreferences( PreferenceScreen( - "revanced_spoof_signature_verification", + key = "revanced_spoof_signature_verification_screen", + sorting = Sorting.UNSORTED, preferences = setOf( SwitchPreference("revanced_spoof_signature_verification_enabled"), SwitchPreference("revanced_spoof_signature_in_feed_enabled"), diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt index d5e7a5f7..b140c3b5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt @@ -44,7 +44,9 @@ object BypassURLRedirectsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.MISC.addPreferences(SwitchPreference("revanced_bypass_url_redirects" )) + SettingsPatch.PreferenceScreen.MISC.addPreferences( + SwitchPreference("revanced_bypass_url_redirects") + ) mapOf( ABUriParserFingerprint to 7, // Offset to Uri.parse. diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt index 76c5764b..a76331da 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt @@ -71,7 +71,9 @@ object OpenLinksExternallyPatch : BaseTransformInstructionsPatch> override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.MISC.addPreferences(SwitchPreference("revanced_external_browser")) + SettingsPatch.PreferenceScreen.MISC.addPreferences( + SwitchPreference("revanced_external_browser") + ) super.execute(context) } diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt index f89938ed..e83b4b49 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt @@ -61,13 +61,7 @@ object MinimizedPlaybackPatch : BytecodePatch( AddResourcesPatch(this::class) SettingsPatch.PreferenceScreen.MISC.addPreferences( - NonInteractivePreference( - "revanced_minimized_playback_enabled", - "revanced_minimized_playback_summary_on", - // Use horizontal dividers to keep the settings from looking weird. - // If PreferenceCategories are added, then this should be removed. - selectable = true - ) + NonInteractivePreference("revanced_minimized_playback") ) MinimizedPlaybackManagerFingerprint.result?.apply { diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt index 0414cb7f..06c737fe 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt @@ -51,7 +51,9 @@ object RemoveTrackingQueryParameterPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.MISC.addPreferences(SwitchPreference("revanced_remove_tracking_query_parameter")) + SettingsPatch.PreferenceScreen.MISC.addPreferences( + SwitchPreference("revanced_remove_tracking_query_parameter") + ) fun MethodFingerprint.hook( getInsertIndex: PatternScanResult.() -> Int, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt index dd33c863..0ada6925 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsPatch.kt @@ -9,10 +9,11 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.all.misc.packagename.ChangePackageNamePatch import app.revanced.patches.all.misc.resources.AddResourcesPatch +import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen import app.revanced.patches.shared.misc.settings.preference.InputType import app.revanced.patches.shared.misc.settings.preference.IntentPreference +import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting import app.revanced.patches.shared.misc.settings.preference.TextPreference -import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.fingerprints.LicenseActivityOnCreateFingerprint import app.revanced.patches.youtube.misc.settings.fingerprints.SetThemeFingerprint @@ -27,12 +28,14 @@ import java.io.Closeable dependencies = [ IntegrationsPatch::class, SettingsResourcePatch::class, - AddResourcesPatch::class - ] + AddResourcesPatch::class, + ], ) -object SettingsPatch : BytecodePatch( - setOf(LicenseActivityOnCreateFingerprint, SetThemeFingerprint) -), Closeable { +object SettingsPatch : + BytecodePatch( + setOf(LicenseActivityOnCreateFingerprint, SetThemeFingerprint), + ), + Closeable { private const val INTEGRATIONS_PACKAGE = "app/revanced/integrations/youtube" private const val ACTIVITY_HOOK_CLASS_DESCRIPTOR = "L$INTEGRATIONS_PACKAGE/settings/LicenseActivityHook;" @@ -48,8 +51,8 @@ object SettingsPatch : BytecodePatch( titleKey = "revanced_pref_import_export_title", summaryKey = "revanced_pref_import_export_summary", inputType = InputType.TEXT_MULTI_LINE, - tag = "app.revanced.integrations.shared.settings.preference.ImportExportPreference" - ) + tag = "app.revanced.integrations.shared.settings.preference.ImportExportPreference", + ), ) SetThemeFingerprint.result?.mutableMethod?.let { setThemeMethod -> @@ -66,7 +69,7 @@ object SettingsPatch : BytecodePatch( replaceInstruction( returnIndex, "invoke-static { v$register }, " + - "$THEME_HELPER_DESCRIPTOR->$SET_THEME_METHOD_NAME(Ljava/lang/Object;)V" + "$THEME_HELPER_DESCRIPTOR->$SET_THEME_METHOD_NAME(Ljava/lang/Object;)V", ) addInstruction(returnIndex + 1, "return-object v$register") } @@ -82,7 +85,7 @@ object SettingsPatch : BytecodePatch( """ invoke-static { p0 }, $ACTIVITY_HOOK_CLASS_DESCRIPTOR->initialize(Landroid/app/Activity;)V return-void - """ + """, ) // Remove other methods as they will break as the onCreate method is modified above. @@ -97,18 +100,67 @@ object SettingsPatch : BytecodePatch( */ fun newIntent(settingsName: String) = IntentPreference.Intent( data = settingsName, - targetClass = "com.google.android.libraries.social.licenses.LicenseActivity" + targetClass = "com.google.android.libraries.social.licenses.LicenseActivity", ) { // The package name change has to be reflected in the intent. ChangePackageNamePatch.setOrGetFallbackPackageName("com.google.android.youtube") } object PreferenceScreen : BasePreferenceScreen() { - val ADS = Screen("revanced_ads_screen") - val INTERACTIONS = Screen("revanced_interactions_screen") - val LAYOUT = Screen("revanced_layout_screen") - val VIDEO = Screen("revanced_video_screen") - val MISC = Screen("revanced_misc_screen") + // Sort screens in the root menu by key, to not scatter related items apart + // (sorting key is set in revanced_prefs.xml). + // If no preferences are added to a screen, the screen will not be added to the settings. + val ADS = Screen( + key = "revanced_settings_screen_01_ads", + summaryKey = null, + ) + val ALTERNATIVE_THUMBNAILS = Screen( + key = "revanced_settings_screen_02_alt_thumbnails", + summaryKey = null, + sorting = Sorting.UNSORTED, + ) + val FEED = Screen( + key = "revanced_settings_screen_03_feed", + summaryKey = null, + ) + val PLAYER = Screen( + key = "revanced_settings_screen_04_player", + summaryKey = null, + ) + val GENERAL_LAYOUT = Screen( + key = "revanced_settings_screen_05_general", + summaryKey = null, + ) + // Don't sort, as related preferences are scattered apart. + // Can use title sorting after PreferenceCategory support is added. + val SHORTS = Screen( + key = "revanced_settings_screen_06_shorts", + summaryKey = null, + sorting = Sorting.UNSORTED, + ) + // Don't sort, because title sorting scatters the custom color preferences. + val SEEKBAR = Screen( + key = "revanced_settings_screen_07_seekbar", + summaryKey = null, + sorting = Sorting.UNSORTED, + ) + val SWIPE_CONTROLS = Screen( + key = "revanced_settings_screen_08_swipe_controls", + summaryKey = null, + sorting = Sorting.UNSORTED, + ) + + // RYD and SB are items 9 and 10. + // Menus are added in their own patch because they use an Intent and not a Screen. + + val MISC = Screen( + key = "revanced_settings_screen_11_misc", + summaryKey = null, + ) + val VIDEO = Screen( + key = "revanced_settings_screen_12_video", + summaryKey = null, + ) override fun commit(screen: app.revanced.patches.shared.misc.settings.preference.PreferenceScreen) { SettingsResourcePatch += screen diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsResourcePatch.kt index 3fbbc87f..3f8b1d16 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/SettingsResourcePatch.kt @@ -1,6 +1,7 @@ package app.revanced.patches.youtube.misc.settings import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.patch.PatchException import app.revanced.patches.all.misc.resources.AddResourcesPatch import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch import app.revanced.patches.shared.misc.settings.BaseSettingsResourcePatch @@ -11,7 +12,8 @@ import org.w3c.dom.Element object SettingsResourcePatch : BaseSettingsResourcePatch( IntentPreference( - "revanced_settings", + titleKey = "revanced_settings_title", + summaryKey = null, intent = SettingsPatch.newIntent("revanced_settings_intent"), ) to "settings_fragment", dependencies = @@ -40,12 +42,29 @@ object SettingsResourcePatch : BaseSettingsResourcePatch( context.copyResources("settings", resourceGroup) } + // Remove horizontal divider from the settings Preferences + // To better match the appearance of the stock YouTube settings. + context.xmlEditor["res/values/styles.xml"].use { editor -> + val resourcesNode = editor.file.getElementsByTagName("resources").item(0) as Element + + for (i in 0 until resourcesNode.childNodes.length) { + val node = resourcesNode.childNodes.item(i) as? Element ?: continue + val name = node.getAttribute("name") + if (name == "Theme.YouTube.Settings" || name == "Theme.YouTube.Settings.Dark") { + val listDividerNode = editor.file.createElement("item") + listDividerNode.setAttribute("name", "android:listDivider") + listDividerNode.appendChild(editor.file.createTextNode("@null")) + node.appendChild(listDividerNode) + } + } + } + // Modify the manifest and add a data intent filter to the LicenseActivity. // Some devices freak out if undeclared data is passed to an intent, // and this change appears to fix the issue. + var modifiedIntent = false context.xmlEditor["AndroidManifest.xml"].use { editor -> val document = editor.file - // A xml regular-expression would probably work better than this manual searching. val manifestNodes = document.getElementsByTagName("manifest").item(0).childNodes for (i in 0..manifestNodes.length) { @@ -62,11 +81,14 @@ object SettingsResourcePatch : BaseSettingsResourcePatch( mimeType.setAttribute("android:mimeType", "text/plain") intentFilter.appendChild(mimeType) applicationChild.appendChild(intentFilter) + modifiedIntent = true break } } } } } + + if (!modifiedIntent) throw PatchException("Could not modify activity intent") } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatch.kt index aadee4ab..261005b3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatch.kt @@ -25,7 +25,9 @@ object ZoomHapticsPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.MISC.addPreferences(SwitchPreference("revanced_disable_zoom_haptics")) + SettingsPatch.PreferenceScreen.MISC.addPreferences( + SwitchPreference("revanced_disable_zoom_haptics") + ) val zoomHapticsFingerprintMethod = ZoomHapticsFingerprint.result!!.mutableMethod diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/HDRBrightnessPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/HDRBrightnessPatch.kt index d8da8dc4..cb255b32 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/HDRBrightnessPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/HDRBrightnessPatch.kt @@ -45,7 +45,9 @@ object HDRBrightnessPatch : BytecodePatch( override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) - SettingsPatch.PreferenceScreen.VIDEO.addPreferences(SwitchPreference("revanced_hdr_auto_brightness")) + SettingsPatch.PreferenceScreen.VIDEO.addPreferences( + SwitchPreference("revanced_hdr_auto_brightness") + ) val method = HDRBrightnessFingerprint.result!!.mutableMethod diff --git a/src/main/resources/addresources/values/strings.xml b/src/main/resources/addresources/values/strings.xml index 390750d1..c7461f62 100644 --- a/src/main/resources/addresources/values/strings.xml +++ b/src/main/resources/addresources/values/strings.xml @@ -18,37 +18,29 @@ - - Showing original YouTube thumbnails - Showing still video captures - Showing DeArrow thumbnails. If a video has no DeArrow thumbnails then the original YouTube thumbnails are shown - Showing DeArrow thumbnails. If a video has no DeArrow thumbnails then still video captures are shown - DeArrow temporarily not available (status code: %s) - DeArrow temporarily not available - ReVanced - ReVanced specific settings Import / Export Import / Export ReVanced settings - Ads - Ad related settings - Interactions - Settings related to interactions - Layout - Settings related to the layout - Video - Settings related to the video player - Misc - Miscellaneous patches + Ads + Alternative thumbnails + Feed + Player + General layout + Shorts + Seekbar + Swipe controls + Misc + Video + Debugging + Enable or disable debugging options Debug logging Debug logs are enabled Debug logs are disabled - Debugging Log protocol buffer Debug logs include proto buffer Debug logs do not include proto buffer @@ -59,18 +51,15 @@ Toast shown if error occurs Toast not shown if error occurs Turning off error toasts hides all ReVanced error notifications.\n\nYou will not be notified of any unexpected events. - Enable or disable debugging options - Ads - Ad related settings Hide gray separator Gray separators are hidden Gray separators are shown Hide \'Join\' button Button is hidden Button is shown - Hide channel watermark in video player + Hide channel watermark Watermark is hidden Watermark is shown Hide \'For you\' shelf in channel page @@ -97,9 +86,6 @@ Hide video quality menu footer Video quality menu footer is hidden Video quality menu footer is shown - Hide chapters in the video description - Chapters are hidden - Chapters are shown Hide community posts Community posts are hidden Community posts are shown @@ -154,10 +140,12 @@ Hide chips shelf Chips shelf is hidden Chips shelf is shown - Hide components in the video description Hide info cards section Info cards section is hidden Info cards section is shown + Hide chapters + Chapters are hidden + Chapters are shown Hide game section Game section is hidden Game section is shown @@ -170,14 +158,15 @@ Hide transcript section Transcript section is hidden Transcript section is shown - Hide components under the video description - Custom filter + Video description + Hide or show video description components + Custom filter + Hide components using custom filters Enable custom filter Custom filter is enabled Custom filter is disabled Custom filter List of component path builder strings to filter separated by new line - Hide components using custom filters Invalid custom filter (must be ASCII only): %s Invalid custom filter: %s Custom filter reset to default @@ -224,14 +213,12 @@ URL copied to clipboard URL with timestamp copied - Copy video URL settings Show copy video URL button Button is shown. Tap to copy video URL. Tap and hold to copy video URL with timestamp Button is not shown Show copy timestamp URL button Button is shown. Tap to copy video URL with timestamp. Tap and hold to copy video without timestamp Button is not shown - Settings related to copy URL buttons in video player Remove viewer discretion dialog @@ -240,14 +227,14 @@ This does not bypass the age restriction. It just accepts it automatically. - %s is not installed. Please install it. - External download settings + External downloads + Settings for using an external downloader Show external download button Download button shown in player Download button not shown in player Downloader package name Package name of your installed external downloader app, such as NewPipe or Seal - Settings for using an external downloader + %s is not installed. Please install it. Disable precise seeking gesture @@ -260,7 +247,6 @@ Seekbar tapping is disabled - Swipe controls Enable brightness gesture Brightness swipe is enabled Brightness swipe is disabled @@ -284,7 +270,6 @@ The visibility of swipe overlay background Swipe magnitude threshold The amount of threshold for swipe to occur - Control volume and brightness Disable auto captions @@ -292,38 +277,35 @@ Auto captions are enabled - Hide action buttons - Hide like and dislike buttons - Like and dislike buttons are hidden - Like and dislike buttons are shown - Hide live chat button - Live chat button is hidden - Live chat button is shown - Hide share button + Action buttons + Hide or show buttons under videos + Hide Like and Dislike + Like and Dislike buttons are hidden + Like and Dislike buttons are shown + Hide Share Share button is hidden Share button is shown - Hide report button + Hide Report Report button is hidden Report button is shown - Hide remix button + Hide Remix Remix button is hidden Remix button is shown - Hide download button + Hide Download Download button is hidden Download button is shown - Hide thanks button + Hide Thanks Thanks button is hidden Thanks button is shown - Hide clip button + Hide Clip Clip button is hidden Clip button is shown - Hide save to playlist button - Save button is hidden - Save button is shown - Hide shop button + Hide Save to playlist + Save to playlist button is hidden + Save to playlist button is shown + Hide Shop Shop button is hidden Shop button is shown - Hide or show buttons under videos Hide autoplay button @@ -341,57 +323,57 @@ Cast button is shown - Navigation buttons - Hide home button + Navigation buttons + Hide or change buttons in the navigation bar + Hide Home Home button is hidden Home button is shown - Hide Shorts button + Hide Shorts Shorts button is hidden Shorts button is shown - Hide subscriptions button - Home subscriptions is hidden - Home subscriptions is shown - Hide create button + Hide Create Create button is hidden Create button is shown - Switch create with notifications button - Create button is switched with notifications - Create button is not switched with notifications - Hide or change buttons in the navigation bar + Hide Subscriptions + Subscriptions button is hidden + Subscriptions button is shown + Switch Create with Notifications + Create button is switched with Notifications button + Create button is not switched with Notifications button - Player flyout menu items - Manage the visibility of player flyout menu items - Hide Captions menu - Captions menu item is hidden - Captions menu item is shown - Hide Additional settings menu - Additional settings menu item is hidden - Additional settings menu item is shown - Hide Loop video menu - Loop video menu item is hidden - Loop video menu item is shown - Hide Ambient mode menu - Ambient mode menu item is hidden - Ambient mode menu item is shown - Hide Report menu - Report menu item is hidden - Report menu item is shown - Hide Help menu - Help menu item is hidden - Help menu item is shown - Hide Speed menu - Speed menu item is hidden - Speed menu item is shown - Hide More info menu - More info menu item is hidden - More info menu item is shown - Hide Audio track menu - Audio track menu item is hidden - Audio track menu item is shown - Hide Watch in VR menu - Watch in VR menu item is hidden - Watch in VR menu item is shown + Flyout menu + Hide or show player flyout menu items + Hide Captions + Captions menu is hidden + Captions menu is shown + Hide Additional settings + Additional settings menu is hidden + Additional settings menu is shown + Hide Loop video + Loop video menu is hidden + Loop video menu is shown + Hide Ambient mode + Ambient mode menu is hidden + Ambient mode menu is shown + Hide Report + Report menu is hidden + Report menu is shown + Hide Help & feedback + Help & feedback menu is hidden + Help & feedback menu is shown + Hide Playback speed + Playback speed menu is hidden + Playback speed menu is shown + Hide More info + More info menu is hidden + More info menu is shown + Hide Audio track + Audio track menu is hidden + Audio track menu is shown + Hide Watch in VR + Watch in VR menu is hidden + Watch in VR menu is shown Hide previous & next video buttons @@ -409,14 +391,14 @@ Breaking news are shown - Comments + Comments + Hide or show comments section components Hide comments section Comment section is hidden Comment section is shown Hide preview comment Preview comment is hidden Preview comment is shown - Manage the visibility of comments section components Hide crowdfunding box @@ -429,7 +411,8 @@ End screen cards are shown - Hide filter bar + Filter bar + Hide or show the filter bar in the feed, search, and related videos Hide in feed Hidden in feed Shown in feed @@ -439,7 +422,6 @@ Hide in related videos Hidden in related videos Shown in related videos - Manage the visibility of the filter bar in the feed, search and related videos Hide floating microphone button @@ -478,7 +460,6 @@ Thumbnail seekbar is shown - Shorts components Hide Shorts in feed Shorts are hidden Shorts are shown @@ -515,7 +496,6 @@ Hide navigation bar Navigation bar is hidden Navigation bar is shown - Manage the visibility of Shorts components Disable suggested video end screen @@ -538,7 +518,6 @@ Return YouTube Dislike - Settings for Return YouTube Dislike Hidden Dislikes temporarily not available (API timed out) Dislikes not available (status %d) @@ -594,13 +573,8 @@ Seekbar thumbnails will appear above the seekbar Seekbar thumbnails will appear in fullscreen - - Seekbar - Settings for the seekbar - SponsorBlock - SponsorBlock related settings Enable SponsorBlock SponsorBlock is a crowd-sourced system for skipping annoying parts of YouTube videos Appearance @@ -833,7 +807,6 @@ Invalid seekbar color value. Using default value. - Alternative thumbnails Thumbnails in use Enable DeArrow thumbnails Using DeArrow thumbnails @@ -857,7 +830,12 @@ Using high quality still captures About still video captures Still captures are taken from the beginning/middle/end of each video. These images are built into YouTube and no external API is used - Video thumbnail settings + Showing original YouTube thumbnails + Showing still video captures + Showing DeArrow thumbnails. If a video has no DeArrow thumbnails then the original YouTube thumbnails are shown + Showing DeArrow thumbnails. If a video has no DeArrow thumbnails then still video captures are shown + DeArrow temporarily not available (status code: %s) + DeArrow temporarily not available Show ReVanced announcements @@ -877,7 +855,8 @@ Device dimensions not spoofed\n\nSpoofing the device dimensions can unlock higher video qualities but unknown side effects may occur - Spoof app signature + Spoof app signature + Spoof the app signature to prevent playback issues Spoof app signature App signature spoofed\n\nSide effects include:\n• Enhanced bitrate is not available\n• Videos cannot be downloaded\n• No seekbar thumbnails for paid videos App signature not spoofed\n\nVideo playback may not work @@ -888,7 +867,6 @@ Spoof storyboard Storyboard spoofed Storyboard not spoofed\n\nSide effects include:\n• No ambient mode\n• Seekbar thumbnails are hidden - Spoof the app signature to prevent playback issues Spoof storyboard temporarily not available (API timed out) Spoof storyboard temporarily not available: %s @@ -907,8 +885,8 @@ Opening links in app - Minimized playback - This setting can be found in Settings -> Background + Minimized playback + This setting can be found in Settings -> Background Remove tracking query parameter @@ -1006,9 +984,6 @@ ReVanced Settings - Debug logging - Debug logs are enabled - Debug logs are disabled Ads Ad blocking settings Chat @@ -1019,6 +994,9 @@ Other settings Client-side ads Server-side surestream ads + Debug logging + Debug logs are enabled + Debug logs are disabled \ No newline at end of file diff --git a/src/main/resources/settings/layout/revanced_settings_with_toolbar.xml b/src/main/resources/settings/layout/revanced_settings_with_toolbar.xml index 15008811..c78967c6 100644 --- a/src/main/resources/settings/layout/revanced_settings_with_toolbar.xml +++ b/src/main/resources/settings/layout/revanced_settings_with_toolbar.xml @@ -13,7 +13,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/yt_white1" - android:elevation="4dp"> + android:elevation="0dp"> + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:yt="http://schemas.android.com/apk/res-auto" + android:key="revanced_settings_root_screen_sort_by_key"> \ No newline at end of file