Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,38 @@
# [5.47.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.4...v5.47.0-dev.5) (2025-11-13)


### Bug Fixes

* **YouTube - Hide player flyout menu items:** Allow hiding audio menu with 'Android No SDK' client type ([9495cf4](https://github.com/ReVanced/revanced-patches/commit/9495cf49ef8a872be64de6c971c1919b4b9a8720))

# [5.47.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.3...v5.47.0-dev.4) (2025-11-12)


### Bug Fixes

* **YouTube - Sanitize sharing links:** Handle non hierarchical urls ([654d091](https://github.com/ReVanced/revanced-patches/commit/654d091e650cda37650b57cbf3ba6f1cdd6d47d3))

# [5.47.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.2...v5.47.0-dev.3) (2025-11-12)


### Features

* **Instagram:** Add `Disable auto story flipping` patch ([#6262](https://github.com/ReVanced/revanced-patches/issues/6262)) ([2f0de15](https://github.com/ReVanced/revanced-patches/commit/2f0de15e67e4f99ed6ecdc136d04cceb23b0d069))

# [5.47.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.1...v5.47.0-dev.2) (2025-11-12)


### Bug Fixes

* **Instagram - Disable signature check:** Change patch to default excluded ([#6283](https://github.com/ReVanced/revanced-patches/issues/6283)) ([bb745b5](https://github.com/ReVanced/revanced-patches/commit/bb745b555b3808b7679c5995319aa365630fbd76))

# [5.47.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.46.0...v5.47.0-dev.1) (2025-11-12)


### Features

* **Instagram:** Add `Anonymous story viewing` patch ([#6263](https://github.com/ReVanced/revanced-patches/issues/6263)) ([94ae84a](https://github.com/ReVanced/revanced-patches/commit/94ae84ad0fc3a9197c82d5356301d464730c3b17))

# [5.46.0](https://github.com/ReVanced/revanced-patches/compare/v5.45.0...v5.46.0) (2025-11-10)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,15 @@ public String sanitizeUrlString(String url) {

public Uri sanitizeUri(Uri uri) {
try {
String scheme = uri.getScheme();
if (scheme == null || !(scheme.equals("http") || scheme.equals("https"))) {
// Opening YouTube share sheet 'other' option passes the video title as a URI.
// Checking !uri.isHierarchical() works for all cases, except if the
// video title starts with / and then it's hierarchical but still an invalid URI.
Logger.printDebug(() -> "Ignoring uri: " + uri);
return uri;
}

Uri.Builder builder = uri.buildUpon().clearQuery();

if (!parametersToRemove.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public static ClientType getPreferredClient() {
public static boolean spoofingToClientWithNoMultiAudioStreams() {
return isPatchIncluded()
&& SPOOF_STREAMING_DATA
&& preferredClient != ClientType.IPADOS;
&& !preferredClient.supportsMultiAudioTracks;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,14 @@

@SuppressWarnings("unused")
public final class LayoutComponentsFilter extends Filter {
private static final StringTrieSearch mixPlaylistsExceptions = new StringTrieSearch(
private static final StringTrieSearch mixPlaylistsContextExceptions = new StringTrieSearch(
"V.ED", // Playlist browse id.
"java.lang.ref.WeakReference"
);
private static final ByteArrayFilterGroup mixPlaylistsExceptions2 = new ByteArrayFilterGroup(
private static final ByteArrayFilterGroup mixPlaylistsBufferExceptions = new ByteArrayFilterGroup(
null,
"cell_description_body"
"cell_description_body",
"channel_profile"
);
private static final ByteArrayFilterGroup mixPlaylists = new ByteArrayFilterGroup(
null,
Expand Down Expand Up @@ -380,17 +381,15 @@ public static boolean filterMixPlaylists(Object conversionContext, @Nullable fin
return false;
}

// Prevent playlist items being hidden, if a mix playlist is present in it.
if (mixPlaylistsExceptions.matches(conversionContext.toString())) {
return false;
}

// Prevent hiding the description of some videos accidentally.
if (mixPlaylistsExceptions2.check(bytes).isFiltered()) {
return false;
}

if (mixPlaylists.check(bytes).isFiltered()) {
if (mixPlaylists.check(bytes).isFiltered()
// Prevent hiding the description of some videos accidentally.
&& !mixPlaylistsBufferExceptions.check(bytes).isFiltered()
// Prevent playlist items being hidden, if a mix playlist is present in it.
// Check last since it requires creating a context string.
//
// FIXME: The conversion context passed in does not always generate a valid toString.
// This string check may no longer be needed, or the patch may be broken.
&& !mixPlaylistsContextExceptions.matches(conversionContext.toString())) {
Logger.printDebug(() -> "Filtered mix playlist");
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,9 @@
public class PlayerFlyoutMenuItemsFilter extends Filter {

public static final class HideAudioFlyoutMenuAvailability implements Setting.Availability {
private static final boolean AVAILABLE_ON_LAUNCH = !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();

@Override
public boolean isAvailable() {
// Check conditions of launch and now. Otherwise if spoofing is changed
// without a restart the setting will show as available when it's not.
return AVAILABLE_ON_LAUNCH && !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
return !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
org.gradle.parallel = true
android.useAndroidX = true
kotlin.code.style = official
version = 5.46.0
version = 5.47.0-dev.5
8 changes: 8 additions & 0 deletions patches/api/patches.api
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,10 @@ public final class app/revanced/patches/instagram/feed/LimitFeedToFollowedProfil
public static final fun getLimitFeedToFollowedProfiles ()Lapp/revanced/patcher/patch/BytecodePatch;
}

public final class app/revanced/patches/instagram/ghost/story/AnonymousStoryViewingPatchKt {
public static final fun getAnonymousStoryViewingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}

public final class app/revanced/patches/instagram/hide/explore/HideExploreFeedKt {
public static final fun getHideExploreFeedPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
Expand Down Expand Up @@ -316,6 +320,10 @@ public final class app/revanced/patches/instagram/misc/signature/SignatureCheckP
public static final fun getSignatureCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}

public final class app/revanced/patches/instagram/story/flipping/DisableStoryAutoFlippingPatchKt {
public static final fun getDisableStoryAutoFlippingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}

public final class app/revanced/patches/irplus/ad/RemoveAdsPatchKt {
public static final fun getRemoveAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package app.revanced.patches.instagram.ghost.story

import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.Utils.trimIndentMultiline
import app.revanced.util.returnEarly

@Suppress("unused")
val anonymousStoryViewingPatch = bytecodePatch(
name = "Anonymous story viewing",
description = """
View stories without sending any information to the server.
Your view will not appear in the story viewers list.
Note: Since no data is sent, a story you have already viewed may appear as new on another device.
""".trimIndentMultiline(),
use = false
) {
compatibleWith("com.instagram.android")

execute {
// Prevent the hashmap of the seen media to be filled
setMediaSeenHashmapFingerprint.method.returnEarly()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package app.revanced.patches.instagram.ghost.story

import app.revanced.patcher.fingerprint

internal val setMediaSeenHashmapFingerprint = fingerprint {
parameters()
returns("V")
strings("media/seen/")
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import app.revanced.util.returnEarly
@Suppress("unused")
val signatureCheckPatch = bytecodePatch(
name = "Disable signature check",
description = "Disables the signature check that causes the app to crash on startup."
description = "Disables the signature check that can cause the app to crash on startup. " +
"Including this patch may cause issues with sharing or opening external Instagram links.",
use = false
) {
compatibleWith("com.instagram.android")

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package app.revanced.patches.instagram.story.flipping

import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly

@Suppress("unused")
val disableStoryAutoFlippingPatch = bytecodePatch(
name = "Disable story auto flipping",
description = "Disable stories automatically flipping/skipping after some seconds.",
use = false
) {
compatibleWith("com.instagram.android")

execute {
onStoryTimeoutActionFingerprint.method.returnEarly()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package app.revanced.patches.instagram.story.flipping

import app.revanced.patcher.fingerprint

internal val onStoryTimeoutActionFingerprint = fingerprint {
parameters("Ljava/lang/Object;")
returns("V")
strings("userSession")
custom { _, classDef ->
classDef.type == "Linstagram/features/stories/fragment/ReelViewerFragment;"
}
}
22 changes: 11 additions & 11 deletions patches/src/main/resources/addresources/values-az-rAZ/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -342,18 +342,18 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
<string name="revanced_hide_podcast_section_title">\'Podkastı araşdırın\"-ı Gizlət</string>
<string name="revanced_hide_podcast_section_summary_on">Podkast bölməsin araşdırın gizlidir</string>
<string name="revanced_hide_podcast_section_summary_off">Podkast bölməsin araşdırın görünür</string>
<string name="revanced_hide_featured_section_title">Önə çıxan məzmunu gizlət</string>
<string name="revanced_hide_featured_section_summary_on">Önə çıxan məzmun bölməsi gizlənib</string>
<string name="revanced_hide_featured_section_summary_off">Önə çıxan məzmun bölməsi göstərilir</string>
<string name="revanced_hide_featured_section_title">Seçilən məzmunu gizlət</string>
<string name="revanced_hide_featured_section_summary_on">Seçilən məzmun bölməsi gizlidir</string>
<string name="revanced_hide_featured_section_summary_off">Seçilən məzmun bölməsi göstərilir</string>
<string name="revanced_hide_info_cards_section_title">Məlumat Kartlarını Gizlət</string>
<string name="revanced_hide_info_cards_section_summary_on">Məlumat kartları bölməsi gizlədilir</string>
<string name="revanced_hide_info_cards_section_summary_off">Məlumat kartları bölməsi göstərilir</string>
<string name="revanced_hide_key_concepts_section_title">\"Əsas konseptlər-i\" gizlət</string>
<string name="revanced_hide_key_concepts_section_summary_on">Əsas konseptlər bölməsi gizlidir</string>
<string name="revanced_hide_key_concepts_section_summary_off">Əsas konseptlər bölməsi görünür</string>
<string name="revanced_hide_description_subscribe_button_title">Abunə ol düyməsini gizlət</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Abunə düyməsi gizlidir</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Abunə düyməsi görünür</string>
<string name="revanced_hide_description_subscribe_button_summary_on">Abunə ol düyməsi gizlidir</string>
<string name="revanced_hide_description_subscribe_button_summary_off">Abunə ol düyməsi görünür</string>
<string name="revanced_hide_transcript_section_title">Transkript-i Gizlət</string>
<string name="revanced_hide_transcript_section_summary_on">Transkripsiya bölməsi gizlidir</string>
<string name="revanced_hide_transcript_section_summary_off">Transkripsiya bölməsi göstərilir</string>
Expand Down Expand Up @@ -1680,9 +1680,9 @@ Video oynatma AV1 ilə ilişə bilər və ya kadrlar buraxıla bilər."</string>
<string name="revanced_music_hide_cast_button_title">Yayım düyməsini gizlət</string>
<string name="revanced_music_hide_cast_button_summary_on">Yayım düyməsi gizlidir</string>
<string name="revanced_music_hide_cast_button_summary_off">Yayım düyməsi göstərilir</string>
<string name="revanced_music_hide_history_button_title">Keçmiş düyməsini gizlət</string>
<string name="revanced_music_hide_history_button_summary_on">Keçmiş düyməsi gizlidir</string>
<string name="revanced_music_hide_history_button_summary_off">Keçmiş düyməsi görünür</string>
<string name="revanced_music_hide_history_button_title">Tarixçə düyməsini gizlət</string>
<string name="revanced_music_hide_history_button_summary_on">Tarixçə düyməsi gizlidir</string>
<string name="revanced_music_hide_history_button_summary_off">Tarixçə düyməsi görünür</string>
<string name="revanced_music_hide_notification_button_title">Bildiriş düyməsini gizlət</string>
<string name="revanced_music_hide_notification_button_summary_on">Bildiriş düyməsi gizlidir</string>
<string name="revanced_music_hide_notification_button_summary_off">Bildiriş düyməsi görünür</string>
Expand All @@ -1696,9 +1696,9 @@ Video oynatma AV1 ilə ilişə bilər və ya kadrlar buraxıla bilər."</string>
<string name="revanced_music_hide_category_bar_summary_off">Kateqoriya cizgisi görünür</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Miniplayer rəngini dəyişdirin</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Miniplayer rəngi tam ekran pleyeri ilə eynidir</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Miniplayer defolt rəngdən istifadə edir</string>
<string name="revanced_music_change_miniplayer_color_title">Kiçik oynadıcı rəngini dəyişdir</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Kiçik oynadıcı rəngi tam ekran oynadıcıya bərabərdir</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Kiçik oynadıcı ilkin rəngi istifadə edir</string>
</patch>
<patch id="layout.navigationbar.navigationBarPatch">
<string name="revanced_music_navigation_bar_screen_title">Fəaliyyət cizgisi</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,9 +344,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_podcast_section_title">Ενότητα «Εξερευνήστε το podcast»</string>
<string name="revanced_hide_podcast_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_podcast_section_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_featured_section_title">Απόκρυψη Προβεβλημένου περιεχομένου</string>
<string name="revanced_hide_featured_section_summary_on">Η ενότητα Προβεβλημένου περιεχομένου είναι κρυμμένη</string>
<string name="revanced_hide_featured_section_summary_off">Η ενότητα Προβεβλημένου περιεχομένου εμφανίζεται</string>
<string name="revanced_hide_featured_section_title">Ενότητα προτεινόμενων συνδέσμων</string>
<string name="revanced_hide_featured_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_featured_section_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_info_cards_section_title">Κάρτες πληροφοριών</string>
<string name="revanced_hide_info_cards_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_info_cards_section_summary_off">Εμφανίζεται</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Second \"item\" text"</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK käännöspäivä on vioittunut</string>
</patch>
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Ilmoitus</string>
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced-ilmoitus</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Kellon historiaa ei tallenneta.&lt;br&gt;&lt;br&gt;Tämä todennäköisesti johtuu DNS mainosten estäjä tai verkkovälityspalvelin.&lt;br&gt;&lt;br&gt;Korjataksesi tämän, valkoiselle listalle &lt;b&gt;s.youtube.com&lt;/b&gt; tai poistaaksesi kaikki DNS-estäjät ja -profiilit.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Älä näytä uudelleen</string>
</patch>
Expand Down Expand Up @@ -164,7 +164,7 @@ Et saa ilmoituksia odottamattomista tapahtumista."</string>
<string name="revanced_debug_logs_clear_buffer_title">Tyhjennä virheenkorjauslokit</string>
<string name="revanced_debug_logs_clear_buffer_summary">Tyhjentää kaikki tallennetut ReVanced-virheenkorjauslokit</string>
<string name="revanced_debug_logs_clear_toast">Lokit tyhjennetty</string>
<string name="revanced_debug_feature_flags_manager_title">Ominaisuuslippujen Manager</string>
<string name="revanced_debug_feature_flags_manager_title">Ominaisuuslippujen hallinta</string>
<string name="revanced_debug_feature_flags_manager_summary">Hallitse totuusarvo-ominaisuuslippuja</string>
<string name="revanced_debug_feature_flags_manager_active_header">Aktiiviset liput (%d)</string>
<string name="revanced_debug_feature_flags_manager_blocked_header">Estetyt liput (%d)</string>
Expand Down Expand Up @@ -343,8 +343,8 @@ Jos Doodle näkyy tällä hetkellä alueellasi ja tämä piilotusasetus on käyt
<string name="revanced_hide_podcast_section_summary_on">Tutustu podcastiin -osio piilotetaan</string>
<string name="revanced_hide_podcast_section_summary_off">Tutustu podcastiin -osio näytetään</string>
<string name="revanced_hide_featured_section_title">Piilota esitelty sisältö</string>
<string name="revanced_hide_featured_section_summary_on">Esitelty sisältö -osio on piilotettu</string>
<string name="revanced_hide_featured_section_summary_off">Esitelty sisältö -osio näytetään</string>
<string name="revanced_hide_featured_section_summary_on">Suositellun sisällön osio piilotetaan</string>
<string name="revanced_hide_featured_section_summary_off">Suositellun sisällön osio näytetään</string>
<string name="revanced_hide_info_cards_section_title">Piilota tietokortit</string>
<string name="revanced_hide_info_cards_section_summary_on">Infokortit-osio piilotetaan</string>
<string name="revanced_hide_info_cards_section_summary_off">Infokortit-osio näytetään</string>
Expand Down Expand Up @@ -1697,7 +1697,7 @@ AV1-videon toisto saattaa pätkiä."</string>
<string name="revanced_music_hide_category_bar_summary_off">Kategoriapalkki näytetään</string>
</patch>
<patch id="layout.miniplayercolor.changeMiniplayerColor">
<string name="revanced_music_change_miniplayer_color_title">Vaihda minisoittimen väri</string>
<string name="revanced_music_change_miniplayer_color_title">Muuta minisoittimen väriä</string>
<string name="revanced_music_change_miniplayer_color_summary_on">Minisoittimen väri vastaa kokoruudun soitinta</string>
<string name="revanced_music_change_miniplayer_color_summary_off">Minisoitin käyttää oletusväriä</string>
</patch>
Expand Down
Loading