diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java index 32576479d..bd650b243 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java @@ -1,9 +1,6 @@ package app.revanced.extension.youtube.patches; import android.app.Activity; -import android.os.Build; - -import androidx.annotation.RequiresApi; import java.lang.ref.WeakReference; import java.util.Objects; @@ -58,7 +55,6 @@ public class ShortsAutoplayPatch { /** * @return If the app is currently in background PiP mode. */ - @RequiresApi(api = Build.VERSION_CODES.N) private static boolean isAppInBackgroundPiPMode() { Activity activity = mainActivityRef.get(); return activity != null && activity.isInPictureInPictureMode(); @@ -80,7 +76,6 @@ public class ShortsAutoplayPatch { /** * Injection point. */ - @RequiresApi(api = Build.VERSION_CODES.N) public static Enum changeShortsRepeatBehavior(Enum original) { try { final boolean autoplay; diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/announcements/AnnouncementsPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/announcements/AnnouncementsPatch.java index 92490aabd..3e465a6c3 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/announcements/AnnouncementsPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/announcements/AnnouncementsPatch.java @@ -7,13 +7,10 @@ import static app.revanced.extension.youtube.patches.announcements.requests.Anno import android.app.Activity; import android.app.AlertDialog; -import android.os.Build; import android.text.Html; import android.text.method.LinkMovementMethod; import android.widget.TextView; -import androidx.annotation.RequiresApi; - import org.json.JSONArray; import java.io.IOException; @@ -31,7 +28,6 @@ public final class AnnouncementsPatch { private AnnouncementsPatch() { } - @RequiresApi(api = Build.VERSION_CODES.O) private static boolean isLatestAlready() throws IOException { HttpURLConnection connection = AnnouncementsRoutes.getAnnouncementsConnectionFromRoute(GET_LATEST_ANNOUNCEMENT_IDS); @@ -70,7 +66,6 @@ public final class AnnouncementsPatch { return Settings.ANNOUNCEMENT_LAST_ID.get() == id; } - @RequiresApi(api = Build.VERSION_CODES.O) public static void showAnnouncement(final Activity context) { if (!Settings.ANNOUNCEMENTS.get()) return; diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroupList.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroupList.java index ac0e23ca8..c10b563e9 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroupList.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroupList.java @@ -1,9 +1,6 @@ package app.revanced.extension.youtube.patches.components; -import android.os.Build; - import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; import java.util.*; import java.util.function.Consumer; @@ -44,13 +41,11 @@ abstract class FilterGroupList> implements Iterable< return filterGroups.iterator(); } - @RequiresApi(api = Build.VERSION_CODES.N) @Override public void forEach(@NonNull Consumer action) { filterGroups.forEach(action); } - @RequiresApi(api = Build.VERSION_CODES.N) @NonNull @Override public Spliterator spliterator() { diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/KeywordContentFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/KeywordContentFilter.java index ff55d18a9..d365d6802 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/KeywordContentFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/KeywordContentFilter.java @@ -4,11 +4,8 @@ import static app.revanced.extension.shared.StringRef.str; import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton; import static java.lang.Character.UnicodeBlock.*; -import android.os.Build; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import java.nio.charset.StandardCharsets; import java.util.LinkedHashMap; @@ -44,7 +41,6 @@ import app.revanced.extension.youtube.shared.PlayerType; * - When using whole word syntax, some keywords may need additional pluralized variations. */ @SuppressWarnings("unused") -@RequiresApi(api = Build.VERSION_CODES.N) final class KeywordContentFilter extends Filter { /** diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java index 0b43c821c..23b609328 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java @@ -3,11 +3,9 @@ package app.revanced.extension.youtube.patches.components; import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton; import android.graphics.drawable.Drawable; -import android.os.Build; import android.view.View; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; @@ -38,6 +36,7 @@ public final class LayoutComponentsFilter extends Filter { private final StringTrieSearch exceptions = new StringTrieSearch(); private final StringFilterGroup inFeedSurvey; private final StringFilterGroup notifyMe; + private final StringFilterGroup singleItemInformationPanel; private final StringFilterGroup expandableMetadata; private final ByteArrayFilterGroup searchResultRecommendations; private final StringFilterGroup searchResultVideo; @@ -47,7 +46,6 @@ public final class LayoutComponentsFilter extends Filter { private final StringFilterGroup likeSubscribeGlow; private final StringFilterGroup horizontalShelves; - @RequiresApi(api = Build.VERSION_CODES.N) public LayoutComponentsFilter() { exceptions.addPatterns( "home_video_with_context", @@ -123,8 +121,12 @@ public final class LayoutComponentsFilter extends Filter { ); final var infoPanel = new StringFilterGroup( - Settings.HIDE_HIDE_INFO_PANELS, - "publisher_transparency_panel", + Settings.HIDE_INFO_PANELS, + "publisher_transparency_panel" + ); + + singleItemInformationPanel = new StringFilterGroup( + Settings.HIDE_INFO_PANELS, "single_item_information_panel" ); @@ -269,6 +271,7 @@ public final class LayoutComponentsFilter extends Filter { compactChannelBarInner, medicalPanel, infoPanel, + singleItemInformationPanel, emergencyBox, subscribersCommunityGuidelines, channelGuidelines, @@ -285,6 +288,19 @@ public final class LayoutComponentsFilter extends Filter { @Override boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray, StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) { + // This identifier is used not only in players but also in search results: + // https://github.com/ReVanced/revanced-patches/issues/3245 + // Until 2024, medical information panels such as Covid 19 also used this identifier and were shown in the search results. + // From 2025, the medical information panel is no longer shown in the search results. + // Therefore, this identifier does not filter when the search bar is activated. + if (matchedGroup == singleItemInformationPanel) { + if (PlayerType.getCurrent().isMaximizedOrFullscreen() || !NavigationBar.isSearchBarActive()) { + return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex); + } + + return false; + } + if (matchedGroup == searchResultVideo) { if (searchResultRecommendations.check(protobufBufferArray).isFiltered()) { return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java index 888687d8c..6b59d484e 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java @@ -1,9 +1,6 @@ package app.revanced.extension.youtube.patches.components; -import android.os.Build; - import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import app.revanced.extension.youtube.settings.Settings; import app.revanced.extension.youtube.shared.PlayerType; @@ -16,7 +13,6 @@ public class PlayerFlyoutMenuItemsFilter extends Filter { private final ByteArrayFilterGroup exception; private final StringFilterGroup videoQualityMenuFooter; - @RequiresApi(api = Build.VERSION_CODES.N) public PlayerFlyoutMenuItemsFilter() { exception = new ByteArrayFilterGroup( // Whitelist Quality menu item when "Hide Additional settings menu" is enabled diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java index 8ce9172b8..528703310 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java @@ -5,15 +5,12 @@ import static app.revanced.extension.shared.Utils.getResourceIdentifier; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; -import android.os.Build; import android.preference.PreferenceFragment; import android.util.TypedValue; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toolbar; -import androidx.annotation.RequiresApi; - import java.util.Objects; import app.revanced.extension.shared.Logger; @@ -79,7 +76,6 @@ public class LicenseActivityHook { *

* Hooks LicenseActivity#onCreate in order to inject our own fragment. */ - @RequiresApi(api = Build.VERSION_CODES.N) public static void initialize(Activity licenseActivity) { try { ThemeHelper.setActivityTheme(licenseActivity); @@ -119,7 +115,6 @@ public class LicenseActivityHook { } } - @RequiresApi(api = Build.VERSION_CODES.N) @SuppressLint("UseCompatLoadingForDrawables") private static void createToolbar(Activity activity, String toolbarTitleResourceName) { // Replace dummy placeholder toolbar. diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java index 72f946a7d..c00b861c0 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java @@ -137,7 +137,7 @@ public class Settings extends BaseSettings { public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE); public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE); public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE); - public static final BooleanSetting HIDE_HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE); + public static final BooleanSetting HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE); public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE); public static final BooleanSetting HIDE_JOIN_MEMBERSHIP_BUTTON = new BooleanSetting("revanced_hide_join_membership_button", TRUE); public static final BooleanSetting HIDE_MEDICAL_PANELS = new BooleanSetting("revanced_hide_medical_panels", TRUE); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/HtmlPreference.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/HtmlPreference.java index bd9db08f5..ecdcf03cf 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/HtmlPreference.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/HtmlPreference.java @@ -3,18 +3,14 @@ package app.revanced.extension.youtube.settings.preference; import static android.text.Html.FROM_HTML_MODE_COMPACT; import android.content.Context; -import android.os.Build; import android.preference.Preference; import android.text.Html; import android.util.AttributeSet; -import androidx.annotation.RequiresApi; - /** * Allows using basic html for the summary text. */ @SuppressWarnings({"unused", "deprecation"}) -@RequiresApi(api = Build.VERSION_CODES.O) public class HtmlPreference extends Preference { { setSummary(Html.fromHtml(getSummary().toString(), FROM_HTML_MODE_COMPACT)); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java index 3a826107f..6a99f144b 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java @@ -17,8 +17,6 @@ import android.view.WindowInsets; import android.widget.TextView; import android.widget.Toolbar; -import androidx.annotation.RequiresApi; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -98,7 +96,6 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment { listPreference.setEntryValues(sortedEntryValues); } - @RequiresApi(api = Build.VERSION_CODES.O) @Override protected void initialize() { super.initialize(); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java index a302a59ba..6f2deca16 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java @@ -3,11 +3,9 @@ package app.revanced.extension.youtube.shared; import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton.CREATE; import android.app.Activity; -import android.os.Build; import android.view.View; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import java.lang.ref.WeakReference; import java.util.Arrays; @@ -257,7 +255,6 @@ public final class NavigationBar { * Injection point. * Fixes missing drawable. */ - @RequiresApi(api = Build.VERSION_CODES.N) @SuppressWarnings({"unchecked", "rawtypes"}) public static void setCairoNotificationFilledIcon(EnumMap enumMap, Enum tabActivityCairo) { if (fillBellCairoBlack != 0) {