feat(YouTube): Add Hide videos by duration and Hide videos by views count greater than specified value (#48)

* Patch description changes (#46)

* fix(YouTube/Video playback): Typo in patch description

* feat(YouTube): Improve patch description

fix(YouTube/Change shorts repeat state): Patch description issues

feat(YouTube/Custom double tap length): Clarify patch description

fix(YouTube/Description components): Grammar in patch description

fix(YouTube/Disable haptic feedback): Patch description grammar

feat(YouTube/Disable splash animation): Clarify patch description

fix(YouTube/Enable gradient loading screen): Grammar

fix(YouTube/Hide feed components): Grammar

feat(YouTube/Layout switch): Clarify patch description

fix(YouTube/MaterialYou): Add punctuation to patch description

fix(YouTube/Navigation bar components): Grammar

(feat(YouTube/Overlay buttons): Clarify patch description

fix(YouTube/Player components): Grammar

fix(YouTube/RYD): Make patch description consistent

fix(YouTube/Seekbar components): Incorrect patch description

fix(YouTube/SponsorBlock): Grammar

fix(YouTube/Shorts outline icon): Make patch description consistent

fix(YouTube/Spoof format stream data): Grammar

feat(YouTube/Spoof test client): Clarify patch description

fix(YouTube/Theme): Grammar

fix(YouTube/Toolbar components): Punctuation

fix(YouTube/Translations): Consistent grammar

* fix(YouTube/Custom double tap length): Unclear wording

* feat(YouTube/Custom branding icon): Use consistent patch description

* feat(YouTube/Custom branding name): Use consistent patch description

* feat(YouTube): Make patch descriptions consistent with YT Music

* feat(YT Music): Improve patch descriptions

* feat(YT Music/Hide overlay filter): Clarify patch description

* chore: Update gitignore

* feat(YouTube): Add `Hide videos by duration` and `Hide videos by views count` greater than specified value

---------

Co-authored-by: KobeW50 <84587632+KobeW50@users.noreply.github.com>
This commit is contained in:
Aaron Veil 2024-05-15 15:28:42 +03:00 committed by GitHub
parent 545cdc01da
commit 8f3f20036b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
37 changed files with 57 additions and 38 deletions

2
.gitignore vendored
View File

@ -124,3 +124,5 @@ node_modules/
# gradle properties, due to Github token
./gradle.properties
.DS_Store

View File

@ -24,7 +24,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Suppress("unused")
object AccountComponentsPatch : BaseBytecodePatch(
name = "Hide account components",
description = "Adds the options to hide components related to account menu.",
description = "Adds options to hide components related to the account menu.",
dependencies = setOf(
SettingsPatch::class,
SharedResourceIdPatch::class

View File

@ -27,7 +27,7 @@ import com.android.tools.smali.dexlib2.iface.reference.Reference
@Suppress("unused")
object DislikeRedirectionPatch : BaseBytecodePatch(
name = "Disable dislike redirection",
description = "Adds an option to disable redirection to the next track when clicking dislike button.",
description = "Adds an option to disable redirection to the next track when clicking the dislike button.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(

View File

@ -7,7 +7,7 @@ import app.revanced.util.patch.BaseResourcePatch
@Suppress("DEPRECATION", "unused")
object OverlayFilterPatch : BaseResourcePatch(
name = "Hide overlay filter",
description = "Hides the dark overlay when comment, share, save to playlist, and flyout panels are open.",
description = "Hides the dark overlay when player flyout menus are open.",
dependencies = setOf(OverlayFilterBytecodePatch::class),
compatiblePackages = COMPATIBLE_PACKAGE,
use = false

View File

@ -8,7 +8,7 @@ import app.revanced.util.patch.BaseResourcePatch
@Suppress("unused")
object PlayerOverlayFilterPatch : BaseResourcePatch(
name = "Hide player overlay filter",
description = "Hides the dark overlay when single-tapping player.",
description = "Hides the dark overlay when single-tapping the player.",
compatiblePackages = COMPATIBLE_PACKAGE,
use = false
) {

View File

@ -10,7 +10,7 @@ import app.revanced.util.patch.BaseResourcePatch
@Suppress("unused")
object ForceOpusCodecPatch : BaseResourcePatch(
name = "Enable opus codec",
description = "Adds an option use the opus audio codec instead of the mp4a audio codec.",
description = "Adds an option to use the opus audio codec instead of the mp4a audio codec.",
dependencies = setOf(
ForceOpusCodecBytecodePatch::class,
SettingsPatch::class

View File

@ -25,7 +25,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
@Suppress("DEPRECATION", "SpellCheckingInspection", "unused")
object NavigationBarComponentsPatch : BaseBytecodePatch(
name = "Navigation bar components",
description = "Adds options to hide or change components related to navigation bar.",
description = "Adds options to hide or change components related to the navigation bar.",
dependencies = setOf(
SettingsPatch::class,
SharedResourceIdPatch::class

View File

@ -78,7 +78,7 @@ import kotlin.properties.Delegates
@Suppress("unused", "LocalVariableName")
object PlayerComponentsPatch : BaseBytecodePatch(
name = "Player components",
description = "Adds options to hide or change components related to player.",
description = "Adds options to hide or change components related to the player.",
dependencies = setOf(
LithoFilterPatch::class,
PlayerComponentsResourcePatch::class,

View File

@ -18,7 +18,7 @@ import org.w3c.dom.Element
@Suppress("DEPRECATION", "SameParameterValue", "unused")
object SponsorBlockPatch : BaseResourcePatch(
name = "SponsorBlock",
description = "Adds options to enable and configure SponsorBlock, which can skip undesired video segments such as non-music sections.",
description = "Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as non-music sections.",
dependencies = setOf(
SettingsPatch::class,
SponsorBlockBytecodePatch::class

View File

@ -24,7 +24,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
@Suppress("unused")
object VideoPlaybackPatch : BaseBytecodePatch(
name = "Video playback",
description = "Adds options to customize settings related to video playback," +
description = "Adds options to customize settings related to video playback, " +
"such as default video quality and playback speed.",
dependencies = setOf(
CustomPlaybackSpeedPatch::class,

View File

@ -50,7 +50,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
@Suppress("unused")
object FeedComponentsPatch : BaseBytecodePatch(
name = "Hide feed components",
description = "Adds options to hide components related to feed.",
description = "Adds options to hide components related to the feed.",
dependencies = setOf(
LithoFilterPatch::class,
NavigationBarHookPatch::class,

View File

@ -20,7 +20,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Suppress("unused")
object LayoutSwitchPatch : BaseBytecodePatch(
name = "Layout switch",
description = "Adds an option to trick dpi to use tablet or phone layout.",
description = "Adds an option to spoof the dpi in order to use a tablet or phone layout.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(

View File

@ -12,7 +12,7 @@ import app.revanced.util.patch.BaseBytecodePatch
@Suppress("unused")
object GradientLoadingScreenPatch : BaseBytecodePatch(
name = "Enable gradient loading screen",
description = "Adds an option to enable gradient loading screen.",
description = "Adds an option to enable the gradient loading screen.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(

View File

@ -22,7 +22,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Suppress("unused")
object NavigationBarComponentsPatch : BaseBytecodePatch(
name = "Navigation bar components",
description = "Adds options to hide or change components related to navigation bar.",
description = "Adds options to hide or change components related to the navigation bar.",
dependencies = setOf(
SettingsPatch::class,
NavigationBarHookPatch::class

View File

@ -18,7 +18,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Suppress("unused")
object SplashAnimationPatch : BaseBytecodePatch(
name = "Disable splash animation",
description = "Adds an option to disable splash animation.",
description = "Adds an option to disable the splash animation on app startup.",
dependencies = setOf(
SettingsPatch::class,
SharedResourceIdPatch::class

View File

@ -62,7 +62,7 @@ import org.w3c.dom.Element
@Suppress("DEPRECATION", "unused")
object ToolBarComponentsPatch : BaseBytecodePatch(
name = "Toolbar components",
description = "Adds options to hide or change components located on the toolbar such as toolbar buttons, search bar, and header.",
description = "Adds options to hide or change components located on the toolbar, such as toolbar buttons, search bar, and header.",
dependencies = setOf(
CastButtonPatch::class,
SettingsPatch::class,

View File

@ -15,7 +15,7 @@ import java.nio.file.Files
@Suppress("DEPRECATION", "unused")
object CustomBrandingIconPatch : BaseResourcePatch(
name = "Custom branding icon YouTube",
description = "Change the YouTube launcher icon to the icon specified in options.json.",
description = "Changes the YouTube app icon to the icon specified in options.json.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE
) {

View File

@ -12,7 +12,7 @@ import app.revanced.util.patch.BaseResourcePatch
@Suppress("DEPRECATION", "unused")
object CustomBrandingNamePatch : BaseResourcePatch(
name = "Custom branding name YouTube",
description = "Rename the YouTube app to the name specified in options.json.",
description = "Renames the YouTube app to the name specified in options.json.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE
) {

View File

@ -14,7 +14,7 @@ import java.nio.file.Files
@Suppress("DEPRECATION", "unused")
object DoubleTapLengthPatch : BaseResourcePatch(
name = "Custom double tap length",
description = "Add 'double-tap to seek' value.",
description = "Adds 'double-tap to seek' values that are specified in options.json.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE
) {

View File

@ -13,7 +13,7 @@ import app.revanced.util.patch.BaseResourcePatch
@Suppress("DEPRECATION", "unused")
object MaterialYouPatch : BaseResourcePatch(
name = "MaterialYou",
description = "Enables MaterialYou theme for Android 12+",
description = "Enables MaterialYou theme for Android 12+.",
dependencies = setOf(
BaseThemePatch::class,
SettingsPatch::class,

View File

@ -13,7 +13,7 @@ import org.w3c.dom.Element
@Suppress("DEPRECATION", "unused")
object ThemePatch : BaseResourcePatch(
name = "Theme",
description = "Change the app's theme to the values specified in options.json.",
description = "Changes the app's theme to the values specified in options.json.",
dependencies = setOf(
BaseThemePatch::class,
SettingsPatch::class

View File

@ -9,7 +9,7 @@ import app.revanced.util.patch.BaseResourcePatch
@Suppress("unused")
object TranslationsPatch : BaseResourcePatch(
name = "Translations",
description = "Add Crowdin translations for YouTube.",
description = "Adds Crowdin translations for YouTube.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE
) {

View File

@ -25,7 +25,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
@Suppress("unused")
object SpoofTestClientPatch : BaseBytecodePatch(
name = "Spoof test client",
description = "Adds an option to spoof as test client.",
description = "Adds an option to spoof the client as a test client.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(

View File

@ -25,7 +25,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
@Suppress("unused")
object AmbientModeSwitchPatch : BaseBytecodePatch(
name = "Ambient mode control",
description = "Adds an option to bypass the restrictions of ambient mode or disable it completely.",
description = "Adds options to disable ambient mode and to bypass ambient mode restrictions.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(

View File

@ -57,7 +57,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction
@Suppress("unused")
object PlayerComponentsPatch : BaseBytecodePatch(
name = "Player components",
description = "Adds options to hide or change components related to player.",
description = "Adds options to hide or change components related to the video player.",
dependencies = setOf(
ControlsOverlayConfigPatch::class,
LithoFilterPatch::class,

View File

@ -27,7 +27,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
@Suppress("unused")
object DescriptionComponentsPatch : BaseBytecodePatch(
name = "Description components",
description = "Adds an option to hide or disable description components.",
description = "Adds options to hide and disable description components.",
dependencies = setOf(
BottomSheetRecyclerViewPatch::class,
LithoFilterPatch::class,

View File

@ -22,7 +22,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Suppress("unused")
object HapticFeedBackPatch : BaseBytecodePatch(
name = "Disable haptic feedback",
description = "Adds an option to disable haptic feedback when swiping the video player.",
description = "Adds options to disable haptic feedback when swiping in the video player.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(

View File

@ -19,7 +19,7 @@ import org.w3c.dom.Element
@Suppress("DEPRECATION", "unused")
object OverlayButtonsPatch : BaseResourcePatch(
name = "Overlay buttons",
description = "Adds an option to display overlay buttons in the video player.",
description = "Adds options to display overlay buttons in the video player.",
dependencies = setOf(
FullscreenButtonViewStubPatch::class,
PlayerControlsPatch::class,

View File

@ -48,7 +48,7 @@ import org.w3c.dom.Element
@Suppress("DEPRECATION", "unused")
object SeekbarComponentsPatch : BaseBytecodePatch(
name = "Seekbar components",
description = "Adds options to hide or change components related to player.",
description = "Adds options to hide or change components related to the seekbar.",
dependencies = setOf(
DrawableColorPatch::class,
FlyoutMenuHookPatch::class,

View File

@ -10,7 +10,7 @@ import app.revanced.util.patch.BaseResourcePatch
@Suppress("unused")
object ShortsOutlineButtonPatch : BaseResourcePatch(
name = "Shorts outline button",
description = "Apply the outline icon to the action button of the Shorts player.",
description = "Applies the outline icon to the action buttons in the Shorts player.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE
) {

View File

@ -23,7 +23,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
@Suppress("unused")
object ShortsRepeatPatch : BaseBytecodePatch(
name = "Change shorts repeat state",
description = "Adds an options for whether shorts should repeat, autoplay, or stop.",
description = "Adds an option to control whether Shorts should repeat, autoplay, or pause upon ending.",
dependencies = setOf(SettingsPatch::class),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(ReelEnumConstructorFingerprint)

View File

@ -33,7 +33,7 @@ import com.android.tools.smali.dexlib2.iface.reference.Reference
@Suppress("unused")
object SpoofFormatStreamDataPatch : BaseBytecodePatch(
name = "Spoof format stream data",
description = "Adds options to spoof format stream data to prevent playback issues.",
description = "Adds an option to spoof the format stream data to prevent playback issues.",
dependencies = setOf(
SettingsPatch::class,
VideoInformationPatch::class,

View File

@ -27,7 +27,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
@Suppress("unused")
object ReturnYouTubeDislikePatch : BaseBytecodePatch(
name = "Return YouTube Dislike",
description = "Shows the dislike count of videos using the Return YouTube Dislike API.",
description = "Adds an option to show the dislike count of videos using the Return YouTube Dislike API.",
dependencies = setOf(
LithoFilterPatch::class,
ReturnYouTubeDislikeRollingNumberPatch::class,

View File

@ -14,7 +14,7 @@ import app.revanced.util.patch.BaseResourcePatch
@Suppress("DEPRECATION", "unused")
object SponsorBlockPatch : BaseResourcePatch(
name = "SponsorBlock",
description = "Integrates SponsorBlock which allows skipping video segments such as sponsored content.",
description = "Adds options to enable and configure SponsorBlock, which can skip undesired video segments, such as sponsored content.",
dependencies = setOf(
SettingsPatch::class,
SponsorBlockBytecodePatch::class

View File

@ -47,8 +47,8 @@ import com.android.tools.smali.dexlib2.util.MethodUtil
@Suppress("unused")
object VideoPlaybackPatch : BaseBytecodePatch(
name = "Video playback",
description = "Adds options to customize settings related to video playback," +
"such as default video quality and playback speed, etc.",
description = "Adds options to customize settings related to video playback, " +
"such as default video quality and playback speed.",
dependencies = setOf(
BottomSheetRecyclerViewPatch::class,
CustomPlaybackSpeedPatch::class,

View File

@ -245,12 +245,23 @@ Limitations:
• Videos with phrases such as 'People also watched' underneath.
• Videos uploaded from channels not subscribed to that have less than 1,000 views."</string>
<!-- PreferenceScreen: Feed, PreferenceCategory: Feed, PreferenceScreen: Video filter, PreferenceCategory: Duration filter -->
<string name="revanced_preference_category_duration_filter">Duration filter</string>
<string name="revanced_hide_video_by_duration_title">Hide videos based on duration</string>
<string name="revanced_hide_video_by_duration_summary">Hide videos with shorter than or longer than duration.\n\nKnown issue: It will not hide videos in the player related videos, instead it will hide the timestamp.</string>
<string name="revanced_hide_video_by_duration_longer_than_title">Longer than duration</string>
<string name="revanced_hide_video_by_duration_longer_than_summary">Videos with duration longer than this number will be hidden.</string>
<string name="revanced_hide_video_by_duration_shorter_than_title">Shorter than duration</string>
<string name="revanced_hide_video_by_duration_shorter_than_summary">Videos with duration shorter than this number will be hidden.</string>
<!-- PreferenceScreen: Feed, PreferenceCategory: Feed, PreferenceScreen: Video filter, PreferenceCategory: View count filter -->
<string name="revanced_preference_category_view_counts_filter">View count filter</string>
<string name="revanced_hide_video_by_view_counts_title">Hide recommended videos by views</string>
<string name="revanced_hide_video_by_view_counts_summary">Hide recommended videos with less than a specified number of views.</string>
<string name="revanced_hide_video_view_counts_title">Number of views</string>
<string name="revanced_hide_video_view_counts_summary">Recommended videos with views less than this number will be hidden.</string>
<string name="revanced_hide_video_view_counts_greater_than_title">Greater than views</string>
<string name="revanced_hide_video_view_counts_greater_than_summary">Videos with views greater than this number will be hidden.</string>
<string name="revanced_hide_video_view_counts_less_than_title">Less than views</string>
<string name="revanced_hide_video_view_counts_less_than_summary">Videos with views less than this number will be hidden.</string>
<string name="revanced_hide_video_view_counts_multiplier_title">View keys</string>
<string name="revanced_hide_video_view_counts_multiplier_summary">Specify your language template for the number of views shown under each video in the user interface. Each key (a letter/word in your language) -> value (meaning of the key) must be on a new line. Keys go before "->" sign. If you change the app or system language you need to reset this setting.\n\nExamples:\nEnglish: 10K views = K -> 1000, views -> views\nSpanish: 10 K vistas = K -> 1000, vistas -> views</string>
<string name="revanced_hide_video_view_counts_multiplier_default_value">K -> 1 000\nM -> 1 000 000\nB -> 1 000 000 000\nviews -> views</string>

View File

@ -74,9 +74,15 @@
<PreferenceCategory android:title="@string/revanced_preference_category_recommended_video" android:layout="@layout/revanced_settings_preferences_category">
<SwitchPreference android:title="@string/revanced_hide_recommended_video_title" android:key="revanced_hide_recommended_video" android:defaultValue="false" android:summary="@string/revanced_hide_recommended_video_summary" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/revanced_preference_category_duration_filter" android:layout="@layout/revanced_settings_preferences_category">
<SwitchPreference android:title="@string/revanced_hide_video_by_duration_title" android:key="revanced_hide_video_by_duration" android:defaultValue="false" android:summary="@string/revanced_hide_video_by_duration_summary" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_video_by_duration_shorter_than_title" android:key="revanced_hide_video_by_duration_shorter_than" android:defaultValue="0:10" android:summary="@string/revanced_hide_video_by_duration_shorter_than_summary" android:inputType="text" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_video_by_duration_longer_than_title" android:key="revanced_hide_video_by_duration_longer_than" android:defaultValue="10:10:10:10" android:summary="@string/revanced_hide_video_by_duration_longer_than_summary" android:inputType="text" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/revanced_preference_category_view_counts_filter" android:layout="@layout/revanced_settings_preferences_category">
<SwitchPreference android:title="@string/revanced_hide_video_by_view_counts_title" android:key="revanced_hide_video_by_view_counts" android:defaultValue="false" android:summary="@string/revanced_hide_video_by_view_counts_summary" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_video_view_counts_title" android:key="revanced_hide_video_view_counts" android:defaultValue="1000" android:summary="@string/revanced_hide_video_view_counts_summary" android:inputType="number" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_video_view_counts_less_than_title" android:key="revanced_hide_video_view_counts_less_than" android:defaultValue="1000" android:summary="@string/revanced_hide_video_view_counts_less_than_summary" android:inputType="number" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_video_view_counts_greater_than_title" android:key="revanced_hide_video_view_counts_greater_than" android:defaultValue="1 000 000 000 000" android:summary="@string/revanced_hide_video_view_counts_greater_than_summary" android:inputType="number" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:title="@string/revanced_hide_video_view_counts_multiplier_title" android:key="revanced_hide_video_view_counts_multiplier" android:defaultValue="@string/revanced_hide_video_view_counts_multiplier_default_value" android:summary="@string/revanced_hide_video_view_counts_multiplier_summary" android:inputType="textMultiLine" />
</PreferenceCategory>
</PreferenceScreen>