From 23496c7c361154ff60ab0103b1a8d6e8c4246a7c Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Thu, 21 Aug 2025 16:17:29 -0300 Subject: [PATCH 01/27] fix(Spotify - Unlock Premium): Make compatible with latest versions again by fixing fingerprint (#5684) --- .../kotlin/app/revanced/patches/spotify/misc/Fingerprints.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/spotify/misc/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/spotify/misc/Fingerprints.kt index 2d7155a53..5ad833222 100644 --- a/patches/src/main/kotlin/app/revanced/patches/spotify/misc/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/spotify/misc/Fingerprints.kt @@ -49,8 +49,8 @@ internal val contextMenuViewModelConstructorFingerprint = fingerprint { /** * Used to find the interface name of a context menu item. */ -internal val removeAdsContextMenuItemClassFingerprint = fingerprint { - strings("remove_ads_item", "ui_navigate") +internal val removeItemFromPlaylistContextMenuItemClassFingerprint = fingerprint { + strings("spotify:playlist:", "REMOVE_TRACK") } internal const val CONTEXT_MENU_ITEM_CLASS_DESCRIPTOR_PLACEHOLDER = "Lapp/revanced/ContextMenuItemPlaceholder;" From 51237c177a547a71dc8e013e4dbb51128200fe14 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 21 Aug 2025 19:20:39 +0000 Subject: [PATCH 02/27] chore: Release v5.34.1-dev.1 [skip ci] ## [5.34.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.34.0...v5.34.1-dev.1) (2025-08-21) ### Bug Fixes * **Spotify - Unlock Premium:** Make compatible with latest versions again by fixing fingerprint ([#5684](https://github.com/ReVanced/revanced-patches/issues/5684)) ([23496c7](https://github.com/ReVanced/revanced-patches/commit/23496c7c361154ff60ab0103b1a8d6e8c4246a7c)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be06e75fe..359736653 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.34.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.34.0...v5.34.1-dev.1) (2025-08-21) + + +### Bug Fixes + +* **Spotify - Unlock Premium:** Make compatible with latest versions again by fixing fingerprint ([#5684](https://github.com/ReVanced/revanced-patches/issues/5684)) ([30dcff1](https://github.com/ReVanced/revanced-patches/commit/30dcff13a56883efc499b71faadb403877cd1c67)) + # [5.34.0](https://github.com/ReVanced/revanced-patches/compare/v5.33.0...v5.34.0) (2025-08-19) diff --git a/gradle.properties b/gradle.properties index 080bfa2b2..e87f8e3b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M org.gradle.parallel = true android.useAndroidX = true kotlin.code.style = official -version = 5.34.0 +version = 5.34.1-dev.1 From 189529151aea81478620499a32237a9b97dca051 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Fri, 22 Aug 2025 00:09:46 -0400 Subject: [PATCH 03/27] fix(Proton mail): Constrain patches to last working app target --- .../patches/protonmail/account/RemoveFreeAccountsLimitPatch.kt | 2 +- .../protonmail/signature/RemoveSentFromSignaturePatch.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/protonmail/account/RemoveFreeAccountsLimitPatch.kt b/patches/src/main/kotlin/app/revanced/patches/protonmail/account/RemoveFreeAccountsLimitPatch.kt index 473d8d400..cd81f1bb4 100644 --- a/patches/src/main/kotlin/app/revanced/patches/protonmail/account/RemoveFreeAccountsLimitPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/protonmail/account/RemoveFreeAccountsLimitPatch.kt @@ -8,7 +8,7 @@ val removeFreeAccountsLimitPatch = resourcePatch( name = "Remove free accounts limit", description = "Removes the limit for maximum free accounts logged in.", ) { - compatibleWith("ch.protonmail.android") + compatibleWith("ch.protonmail.android"("4.15.0")) execute { document("res/values/integers.xml").use { document -> diff --git a/patches/src/main/kotlin/app/revanced/patches/protonmail/signature/RemoveSentFromSignaturePatch.kt b/patches/src/main/kotlin/app/revanced/patches/protonmail/signature/RemoveSentFromSignaturePatch.kt index a59b8e7dd..44098a2df 100644 --- a/patches/src/main/kotlin/app/revanced/patches/protonmail/signature/RemoveSentFromSignaturePatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/protonmail/signature/RemoveSentFromSignaturePatch.kt @@ -10,7 +10,7 @@ val removeSentFromSignaturePatch = resourcePatch( name = "Remove 'Sent from' signature", description = "Removes the 'Sent from Proton Mail mobile' signature from emails.", ) { - compatibleWith("ch.protonmail.android") + compatibleWith("ch.protonmail.android"("4.15.0")) execute { val stringResourceFiles = mutableListOf() From aace741e25cce3d53a389abaa8bc6ebdfd73a985 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 22 Aug 2025 04:12:59 +0000 Subject: [PATCH 04/27] chore: Release v5.34.1-dev.2 [skip ci] ## [5.34.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.34.1-dev.1...v5.34.1-dev.2) (2025-08-22) ### Bug Fixes * **Proton mail:** Constrain patches to last working app target ([1895291](https://github.com/ReVanced/revanced-patches/commit/189529151aea81478620499a32237a9b97dca051)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 359736653..3f231ea55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.34.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.34.1-dev.1...v5.34.1-dev.2) (2025-08-22) + + +### Bug Fixes + +* **Proton mail:** Constrain patches to last working app target ([21c34b9](https://github.com/ReVanced/revanced-patches/commit/21c34b908e07a97de8c31c7c828b44a8cc4739b6)) + ## [5.34.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.34.0...v5.34.1-dev.1) (2025-08-21) diff --git a/gradle.properties b/gradle.properties index e87f8e3b4..ab95efdab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M org.gradle.parallel = true android.useAndroidX = true kotlin.code.style = official -version = 5.34.1-dev.1 +version = 5.34.1-dev.2 From 829ca58a55122592a218008fd035e6fc85804e19 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 23 Aug 2025 23:23:49 -0400 Subject: [PATCH 05/27] chore: Sync translations (#5707) --- .../addresources/values-de-rDE/strings.xml | 2 +- .../addresources/values-el-rGR/strings.xml | 2 +- .../addresources/values-ja-rJP/strings.xml | 14 +++++++------- .../addresources/values-ko-rKR/strings.xml | 6 +++--- .../addresources/values-sv-rSE/strings.xml | 4 ++-- .../addresources/values-zh-rTW/strings.xml | 6 ++++++ 6 files changed, 20 insertions(+), 14 deletions(-) diff --git a/patches/src/main/resources/addresources/values-de-rDE/strings.xml b/patches/src/main/resources/addresources/values-de-rDE/strings.xml index b45989a12..73ba5aefc 100644 --- a/patches/src/main/resources/addresources/values-de-rDE/strings.xml +++ b/patches/src/main/resources/addresources/values-de-rDE/strings.xml @@ -61,7 +61,7 @@ Um neue Sprachen zu übersetzen, besuchen Sie translate.revanced.app" ReVanced-Einstellungen importieren/exportieren Sie verwenden ReVanced-Patches Version <i>%s</i> - Anmerkung + Notiz Diese Version ist eine Vorabversion, es kann zu unerwarteten Problemen kommen Offizielle Links diff --git a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml index 23d203e21..22964966c 100644 --- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml +++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml @@ -549,8 +549,8 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 自動字幕表示を無効化 - 自動字幕表示は無効です\n\n動画を開いた際にデフォルトで字幕は表示されません - 自動字幕表示は有効です\n\n動画を開いた際にデフォルトで字幕が表示される場合があります + 自動字幕表示は無効です\n\n字幕がオフの状態で動画を開きます + 自動字幕表示は有効です\n\n字幕がオンの状態で動画を開く場合があります アクション ボタン @@ -878,12 +878,12 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に ナビゲーション バーは表示されます - 再生終了時の「関連動画」を非表示 - "再生が終了したときに、「関連動画」はプレーヤー画面に表示されませんが、自動再生がオンの場合は次の動画が自動で再生されます + 終了画面の「関連動画」を非表示 + "終了画面の「関連動画」は表示されませんが、自動再生がオンの場合は関連動画が自動で再生されます 自動再生の設定は YouTube の設定で変更できます: 設定 → 再生 → 次の動画を自動再生" - 再生が終了したときに「関連動画」がプレーヤー画面に表示されます + 終了画面の「関連動画」は表示されます 関連動画オーバーレイを非表示 @@ -1451,8 +1451,8 @@ Automotive レイアウト オリジナルの音声を強制的に使用 - オリジナルの音声トラック (言語) を使用します - アプリが選択した音声トラック (言語) を使用します + オリジナルの音声トラック (言語) を使用します\n\nオートダビングを含む吹き替えの音声トラックは使用しません + アプリが選択した音声トラック (言語) を使用します\n\nオートダビングを含む吹き替えの音声トラックを使用する場合があります この機能を使用するには、「動画ストリームを偽装」のクライアントを iOS TV に変更してください diff --git a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml index 26e27fab7..bf43182c4 100644 --- a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml +++ b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml @@ -775,8 +775,8 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 구독 피드에서 숨겨집니다 구독 피드에서 표시됩니다 시청 기록에서 Shorts 숨기기 - 시청 기록에서 Shorts가 숨겨집니다 - 시청 기록에서 Shorts가 표시됩니다 + 시청 기록에서 숨겨집니다 + 시청 기록에서 표시됩니다 Super Thanks 구매 버튼 숨기기 Super Thanks 구매 버튼이 숨겨집니다 Super Thanks 구매 버튼이 표시됩니다 @@ -1361,7 +1361,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 구독 탭 내 페이지 탭 - 플레이어: 재생목록, 관련 동영상, etc. + 플레이어 재생목록 & 추천 동영상 검색 결과 원본 썸네일 DeArrow & 원본 썸네일 diff --git a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml index 6a8d09a56..87ec54748 100644 --- a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml +++ b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml @@ -583,8 +583,8 @@ Justera volymen genom att svepa vertikalt till höger på skärmen" Dölj Hajp - Hype-knappen är dold - Knappen Hype visas + Knappen Hajp är dold + Knappen Hajp visas Dölj Marknadsför Knappen Marknadsför är dold diff --git a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml index fadc1dd18..734dadba4 100644 --- a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml @@ -582,7 +582,13 @@ Second \"item\" text" 已顯示「下載」按鈕 + 隱藏「熱推」 + 「熱推」按鈕已隱藏 + 「熱推」按鈕已顯示 + 隱藏推廣 + 「推廣」按鈕已隱藏 + 「推廣」按鈕已顯示 隱藏感謝 已隱藏「感謝」按鈕 From 1473db0bef9b74b21e432aa79cc5c23dbd59e340 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 23 Aug 2025 23:26:02 -0400 Subject: [PATCH 06/27] fix(YouTube - Hide layout components): Hide Playable shelf header --- .../patches/components/LayoutComponentsFilter.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 6033f26fe..e04b7a182 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 @@ -45,6 +45,7 @@ public final class LayoutComponentsFilter extends Filter { private final StringFilterGroup chipBar; private final StringFilterGroup channelProfile; private final ByteArrayFilterGroupList channelProfileBuffer; + private final ByteArrayFilterGroup playablesBuffer; public LayoutComponentsFilter() { exceptions.addPatterns( @@ -190,6 +191,12 @@ public final class LayoutComponentsFilter extends Filter { "mini_game_card.eml" ); + // Playable horizontal shelf header. + playablesBuffer = new ByteArrayFilterGroup( + Settings.HIDE_PLAYABLES, + "mini_game" + ); + final var quickActions = new StringFilterGroup( Settings.HIDE_QUICK_ACTIONS, "quick_actions" @@ -342,7 +349,9 @@ public final class LayoutComponentsFilter extends Filter { } if (matchedGroup == horizontalShelves) { - return contentIndex == 0 && (hideShelves() || ticketShelf.check(buffer).isFiltered()); + return contentIndex == 0 && (hideShelves() + || ticketShelf.check(buffer).isFiltered() + || playablesBuffer.check(buffer).isFiltered()); } if (matchedGroup == chipBar) { From f14259f9ef96dc889c2394390fb292610fc0f92c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 24 Aug 2025 03:30:00 +0000 Subject: [PATCH 07/27] chore: Release v5.34.1-dev.3 [skip ci] ## [5.34.1-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.34.1-dev.2...v5.34.1-dev.3) (2025-08-24) ### Bug Fixes * **YouTube - Hide layout components:** Hide Playable shelf header ([1473db0](https://github.com/ReVanced/revanced-patches/commit/1473db0bef9b74b21e432aa79cc5c23dbd59e340)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f231ea55..859676005 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.34.1-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.34.1-dev.2...v5.34.1-dev.3) (2025-08-24) + + +### Bug Fixes + +* **YouTube - Hide layout components:** Hide Playable shelf header ([fbb5046](https://github.com/ReVanced/revanced-patches/commit/fbb50463f0e3f533a278c5251cfbce59f09ce641)) + ## [5.34.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.34.1-dev.1...v5.34.1-dev.2) (2025-08-22) diff --git a/gradle.properties b/gradle.properties index ab95efdab..750b16aaa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M org.gradle.parallel = true android.useAndroidX = true kotlin.code.style = official -version = 5.34.1-dev.2 +version = 5.34.1-dev.3 From 0df6315f9c993817986cd0f203ae2dadfd1132ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 12:40:08 +0200 Subject: [PATCH 08/27] chore(deps): Bump cycjimmy/semantic-release-action from 4 to 5 (#5741) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0e2278b3a..65661d94d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,7 +51,7 @@ jobs: fingerprint: ${{ vars.GPG_FINGERPRINT }} - name: Release - uses: cycjimmy/semantic-release-action@v4 + uses: cycjimmy/semantic-release-action@v5 id: release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From ed31d0cab64c6df9f8f03b02176057c31fe80273 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 12:41:29 +0200 Subject: [PATCH 09/27] chore(deps): Bump actions/checkout from 4 to 5 (#5745) --- .github/workflows/build_pull_request.yml | 2 +- .github/workflows/open_pull_request.yml | 2 +- .github/workflows/pull_strings.yml | 2 +- .github/workflows/push_strings.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/update-gradle-wrapper.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml index c7ffa59f1..9956857f0 100644 --- a/.github/workflows/build_pull_request.yml +++ b/.github/workflows/build_pull_request.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup Java uses: actions/setup-java@v4 diff --git a/.github/workflows/open_pull_request.yml b/.github/workflows/open_pull_request.yml index 33c8a7211..6e3eddd18 100644 --- a/.github/workflows/open_pull_request.yml +++ b/.github/workflows/open_pull_request.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Open pull request uses: repo-sync/pull-request@v2 diff --git a/.github/workflows/pull_strings.yml b/.github/workflows/pull_strings.yml index 6f0f6f6cd..be27b0687 100644 --- a/.github/workflows/pull_strings.yml +++ b/.github/workflows/pull_strings.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: ref: dev clean: true diff --git a/.github/workflows/push_strings.yml b/.github/workflows/push_strings.yml index 1be23c2a5..c51254f75 100644 --- a/.github/workflows/push_strings.yml +++ b/.github/workflows/push_strings.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Preprocess strings env: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 65661d94d..c5f332557 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup Java uses: actions/setup-java@v4 diff --git a/.github/workflows/update-gradle-wrapper.yml b/.github/workflows/update-gradle-wrapper.yml index 8136ad5f3..765927aaf 100644 --- a/.github/workflows/update-gradle-wrapper.yml +++ b/.github/workflows/update-gradle-wrapper.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Update Gradle Wrapper uses: gradle-update/update-gradle-wrapper-action@v1 From dfc127048af60879dcd3cf62abc6e25fa31a3701 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 12:42:08 +0200 Subject: [PATCH 10/27] chore(deps): Bump actions/attest-build-provenance from 2 to 3 (#5743) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c5f332557..cf11b3d2e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,7 +58,7 @@ jobs: - name: Attest if: steps.release.outputs.new_release_published == 'true' - uses: actions/attest-build-provenance@v2 + uses: actions/attest-build-provenance@v3 with: subject-name: 'ReVanced Patches ${{ steps.release.outputs.new_release_git_tag }}' subject-path: patches/build/libs/patches-*.rvp From a392bc0dfd3c9ddbf7cf7fcc8b02a6a431377b71 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 12:43:12 +0200 Subject: [PATCH 11/27] chore(deps): Bump actions/setup-java from 4 to 5 (#5746) --- .github/workflows/build_pull_request.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml index 9956857f0..3e2f365f7 100644 --- a/.github/workflows/build_pull_request.yml +++ b/.github/workflows/build_pull_request.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@v5 - name: Setup Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cf11b3d2e..607ff8293 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v5 - name: Setup Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '17' From d2f043e11a931fa1955d4e9c4041c61406f083f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 17:10:45 +0200 Subject: [PATCH 12/27] chore(deps): Bump com.google.protobuf:protobuf-javalite from 4.31.1 to 4.32.0 (#5750) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6af604481..88e44fbdb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ appcompat = "1.7.0" okhttp = "5.0.0-alpha.14" retrofit = "2.11.0" guava = "33.4.0-jre" -protobuf-javalite = "4.31.1" +protobuf-javalite = "4.32.0" protoc = "4.31.1" protobuf = "0.9.5" antlr4 = "4.13.2" From f6917dc3612ec0fbe83d7615e9695bfaa89d138a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 18:28:15 +0200 Subject: [PATCH 13/27] chore(deps): Bump com.google.protobuf:protoc from 4.31.1 to 4.32.0 (#5751) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 88e44fbdb..f55818425 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ okhttp = "5.0.0-alpha.14" retrofit = "2.11.0" guava = "33.4.0-jre" protobuf-javalite = "4.32.0" -protoc = "4.31.1" +protoc = "4.32.0" protobuf = "0.9.5" antlr4 = "4.13.2" nanohttpd = "2.3.1" From 1dbc2d40578c7bf730d7503b241c437769532245 Mon Sep 17 00:00:00 2001 From: PainfulPaladins <122171814+PainfulPaladins@users.noreply.github.com> Date: Wed, 3 Sep 2025 20:39:25 +0300 Subject: [PATCH 14/27] feat(Instagram): Add `Hide navigation buttons` patch (#5678) Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Co-authored-by: oSumAtrIX --- patches/api/patches.api | 4 + .../instagram/hide/navigation/Fingerprints.kt | 29 +++++++ .../hide/navigation/HideNavigationButtons.kt | 78 +++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100644 patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/Fingerprints.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt diff --git a/patches/api/patches.api b/patches/api/patches.api index aae1502c1..fd788e221 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -264,6 +264,10 @@ public final class app/revanced/patches/instagram/ads/HideAdsPatchKt { public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/instagram/hide/navigation/HideNavigationButtonsKt { + public static final fun getHideNavigationButtonsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/instagram/misc/signature/SignatureCheckPatchKt { public static final fun getSignatureCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/Fingerprints.kt new file mode 100644 index 000000000..3b401a842 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/Fingerprints.kt @@ -0,0 +1,29 @@ + +package app.revanced.patches.instagram.hide.navigation + +import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.Opcode + +internal val tabCreateButtonsLoopStartFingerprint = fingerprint { + returns("V") + strings("InstagramMainActivity.createTabButtons") + opcodes( + //Loop Start + Opcode.IF_GE, // Check if index is finished (index, size) + //Injection + Opcode.INVOKE_INTERFACE, + Opcode.MOVE_RESULT_OBJECT + ) +} + +internal val tabCreateButtonsLoopEndFingerprint = fingerprint { + returns("V") + strings("InstagramMainActivity.createTabButtons") + opcodes( + Opcode.IPUT_OBJECT, + // Injection Jump + Opcode.ADD_INT_LIT8, //Increase Index + Opcode.GOTO_16 // Jump to loopStart + // LoopEnd + ) +} diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt new file mode 100644 index 000000000..f63d55b62 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt @@ -0,0 +1,78 @@ +package app.revanced.patches.instagram.hide.navigation + +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.patch.booleanOption +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.util.findFreeRegister +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import java.util.logging.Logger + +@Suppress("unused") +val hideNavigationButtonsPatch = bytecodePatch( + name = "Hide navigation buttons", + description = "Hides navigation bar buttons, such as the Reels and Create button.", + use = false +) { + compatibleWith("com.instagram.android") + + val hideReels by booleanOption( + key = "hideReels", + default = true, + title = "Hide Reels" + ) + + val hideCreate by booleanOption( + key = "hideCreate", + default = true, + title = "Hide Create" + ) + + execute { + if (!hideReels!! && !hideCreate!!) { + return@execute Logger.getLogger(this::class.java.name).warning( + "No hide navigation buttons options are enabled. No changes made." + ) + } + + tabCreateButtonsLoopStartFingerprint.method.apply { + // Check the current loop index, and skip over adding the + // navigation button view if the index matches a given button. + + val startIndex = tabCreateButtonsLoopStartFingerprint.patternMatch!!.startIndex + val endIndex = tabCreateButtonsLoopEndFingerprint.patternMatch!!.endIndex + val insertIndex = startIndex + 1 + val loopIndexRegister = getInstruction(startIndex).registerA + val freeRegister = findFreeRegister(insertIndex, loopIndexRegister) + val instruction = getInstruction(endIndex - 1) + + var instructions = buildString { + if (hideCreate!!) { + appendLine( + """ + const v$freeRegister, 0x2 + if-eq v$freeRegister, v$loopIndexRegister, :skipAddView + """ + ) + } + + if (hideReels!!) { + appendLine( + """ + const v$freeRegister, 0x3 + if-eq v$freeRegister, v$loopIndexRegister, :skipAddView + """ + ) + } + } + + addInstructionsWithLabels( + insertIndex, + instructions, + ExternalLabel("skipAddView", instruction) + ) + } + } + } + From 2b2307416a102235a9431239f6d497bddcfb17f2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:41:04 +0200 Subject: [PATCH 15/27] chore: Sync translations (#5755) --- .../addresources/values-el-rGR/strings.xml | 2 +- .../addresources/values-iw-rIL/strings.xml | 212 +++++++++--------- .../addresources/values-ja-rJP/strings.xml | 198 ++++++++-------- .../addresources/values-ko-rKR/strings.xml | 30 +-- .../addresources/values-tr-rTR/strings.xml | 6 +- 5 files changed, 224 insertions(+), 224 deletions(-) diff --git a/patches/src/main/resources/addresources/values-el-rGR/strings.xml b/patches/src/main/resources/addresources/values-el-rGR/strings.xml index 9cfe151b0..1d9d95f0e 100644 --- a/patches/src/main/resources/addresources/values-el-rGR/strings.xml +++ b/patches/src/main/resources/addresources/values-el-rGR/strings.xml @@ -176,7 +176,7 @@ Second \"item\" text" • Εξερευνήστε περισσότερα κανάλια • Πιο σχετικά • Shopping -• Παρακολουθήστε ξανά" +• Παρακολούθηση ξανά" Εμφανίζονται Ενότητα εικόνων στα αποτελέσματα αναζήτησης Κρυμμένη diff --git a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml index f05fcf947..29b99f4e8 100644 --- a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml +++ b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml @@ -33,12 +33,12 @@ Second \"item\" text" הגדרות - האם בטוח שברצונך להמשיך? + האם אתה בטוח שברצונך להמשיך? איפוס אפס צבע צבע לא חוקי - יש להפעיל מחדש - יש להפעיל מחדש את האפליקציה כדי שהשינוי ישפיע. + נדרשת הפעלה מחדש + יש להפעיל מחדש את היישום כדי שהשינוי ייכנס לתוקף. הפעלה מחדש ייבוא העתק @@ -137,7 +137,7 @@ Second \"item\" text" תיעוד איתור באגים מושבת לא נמצאו יומנים היומנים הועתקו - נכשל ייצוא יומנים: %s + נכשל לייצא יומנים: %s נקה יומני איתור באגים מנקה את כל היומנים לאיתור באגים של Revanced המאוחסנים היומנים נוקו @@ -161,21 +161,21 @@ Second \"item\" text" הסתר תיבת מימון המונים תיבת מימון המונים מוסתרת תיבת מימון המונים מוצגת - הסתר כרטיס מתרחב - כרטיס מתרחב מתחת לסרטונים מוסתר - כרטיס מתרחב מתחת לסרטונים מוצג + הסתר כרטיס הניתן להרחבה + כרטיס הניתן להרחבה מתחת לסרטונים מוסתר + כרטיס הניתן להרחבה מתחת לסרטונים מוצג הסתר לחצן מיקרופון צף - כפתור מיקרופון צף בחיפוש מוסתר - כפתור מיקרופון צף בחיפוש מוצג + לחצן מיקרופון צף בחיפוש מוסתר + לחצן מיקרופון צף בחיפוש מוצג הסתר מדפים אופקיים "מדפים אופקיים מוסתרים, כגון: -• חדשות חמות +• מבזקי חדשות • המשך צפייה -• חקור עוד ערוצים -• הרלוונטיים ביותר +• גלה עוד ערוצים +• רלוונטיות • קניות • צפה שוב" - מוצגים מדפים אופקיים + מדפים אופקיים מוצגים הסתר מדף תמונות מדף תמונות בתוצאות חיפוש מוסתר מדף תמונות בתוצאות חיפוש מוצג @@ -191,30 +191,30 @@ Second \"item\" text" הסתר לחצן \'אני רוצה לקבל התראה\' - כפתור \'הודע לי\' מוסתר - כפתור \"הודע לי\" מוצג + הלחצן \'הודע לי\' מוסתר + הלחצן \'הודע לי\' מוצג הסתר משחקייה המשחקייה מוסתרת המשחקייה מוצגת הסתר לחצן \'הצג עוד\' - כפתור \"הצג עוד\" בתוצאות חיפוש מוסתר - כפתור הצג עוד בתוצאות החיפוש מוצג + הלחצן \'הצג עוד\' בתוצאות חיפוש מוסתר + הלחצן \'הצג עוד\' בתוצאות החיפוש מוצג הסתר סקרים - סקרים מוסתרים - סקרים מוצגים + הסקרים מוסתרים + הסקרים מוצגים הסתר מדף כרטיסים מדף כרטיסים מוסתר מדף כרטיסים מוצג - הסתר תוויות המלצות וידאו - בתוצאות החיפוש מוסתרות - תוויות \"אנשים גם צפו\" ו\"אולי תאהב גם\" בתוצאות חיפוש מוצגות + הסתר תוויות המלצות סרטונים + התוויות \'אנשים גם צפו\' ו\'אולי תאהב גם\' בתוצאות החיפוש מוסתרות + התוויות \'אנשים גם צפו\' ו\'אולי תאהב גם\' בתוצאות חיפוש מוצגות הסתר YouTube Doodles - אנימציית Doodles של YouTube על הלוגו מוסתרת - אנימציית YouTube Doodles על הלוגו מוצגת + הנפשת YouTube Doodles על הלוגו מוסתרת + הנפשת YouTube Doodles על הלוגו מוצגת "שרבוטים (Doodles) של YouTube מוצגים למשך כמה ימים בכל שנה. אם Doodle מוצג כרגע באזור שלך והגדרת ההסתרה הזו מופעלת, אז גם סרגל הסינון שמתחת לסרגל החיפוש יוסתר." @@ -233,8 +233,8 @@ Second \"item\" text" הסתר לחצן להצטרפות - כפתור \'הצטרף\' מוסתר - כפתור הצטרפות מוצג + לחצן הצטרפות מוסתר + לחצן הצטרפות מוצג הסתר לוחות רפואיים לוחות רפואיים מוסתרים לוחות רפואיים מוצגים @@ -251,8 +251,8 @@ Second \"item\" text" תגובות באמוג\'י מתוזמנות מוסתרות תגובות באמוג\'י מתוזמנות מוצגות הסתר את \'סיכום הווידאו שנוצר על ידי בינה מלאכותית\' - קטע סיכום וידאו שנוצר על ידי בינה מלאכותית מוסתר - קטע סיכום וידאו שנוצר על ידי AI מוצג + קטע סיכום סרטון הנוצר על ידי AI מוסתר + קטע סיכום סרטון הנוצר על ידי AI מוצג הסתר Ask מדור Ask מוסתר מדור Ask מוצג @@ -280,7 +280,7 @@ Second \"item\" text" תיאור סרטון הסתר או הצג רכיבי תיאור סרטון סרגל סינון - הסתר או הצג את סרגל הסינון בפידים, סרטונים קשורים, תוצאות חיפוש והיסטוריית צפייה + הסתר או הצג את סרגל הסינון בפידים, סרטונים קשורים, תוצאות חיפוש, והיסטוריית צפייה הסתר בפידים מוסתר בפידים מוצג בפידים @@ -297,8 +297,8 @@ Second \"item\" text" הסתר או הצג רכיבי דף ערוץ הסתר מדף \'בשבילך\' - מדף \"בשבילך\" מוסתר - מדף \"בשבילך\" מוצג + המדף \'בשבילך\' מוסתר + המדף \'בשבילך\' מוצג הסתר תצוגה מקדימה של קישורים תצוגה מקדימה של קישורים מוסתרת תצוגה מקדימה של קישורים מוצגת @@ -306,21 +306,21 @@ Second \"item\" text" מדף חברים מוסתר מדף חברים מוצג - הסתר את הלחצן \"בקר בקהילה\" - לחצן \"בקר בקהילה\" מוסתר - כפתור \"בקר בקהילה\" מוצג + הסתר את הלחצן \'מעבר לקהילה\' + הלחצן \'מעבר לקהילה\' מוסתר + הלחצן \'מעבר לקהילה\' מוצג הסתר לחצן \'בקר בחנות\' - כפתור \"בקר בחנות\" מוסתר - כפתור \"בקר בחנות\" מוצג + הלחצן \'בקר בחנות\' מוסתר + הלחצן \'בקר בחנות\' מוצג תגובות הסתר או הצג רכיבי מדור תגובות - הסתר סיכום צ\'אט בינה מלאכותית - סיכום צ\'אט בינה מלאכותית מוסתר - סיכום צ\'אט בינה מלאכותית מוצג + הסתר סיכום AI של צ\'אט + סיכום AI של צ\'אט מוסתר + סיכום AI של צ\'אט מוצג הסתר סיכום תגובות AI - סיכום תגובות בינה מלאכותית מוסתר - סיכום תגובות בינה מלאכותית מוצג + סיכום AI של תגובות מוסתר + סיכום AI של תגובות מוצג הסתר הנחיות ערוץ הנחיות הערוץ מוסתרות הנחיות הערוץ מוצגות @@ -392,10 +392,10 @@ Second \"item\" text" הסתר מדף חנות היוצר - מדף חנות היוצר מתחת לנגן הווידאו מוסתר - מדף חנות היוצר מתחת לנגן הווידאו מוצג + מדף חנות היוצר מתחת לנגן הוידאו מוסתר + מדף חנות היוצר מתחת לנגן הוידאו מוצג הסתר כרזת חנות של מסך סיום - באנר חנות מסך סיום מוסתר + באנר החנות של מסך סיום מוסתר באנר החנות של מסך הסיום מוצג הסתר מודעות מסך מלא "מודעות במסך מלא מוסתרות @@ -419,8 +419,8 @@ Second \"item\" text" הסתר קישורי קניות קישורי קניות בתיאור הסרטון מוסתרים קישורי קניות בתיאור הסרטון מוצגים - הסתר באנר \'צפה במוצרים\' - באנר הצגת המוצרים בשכבת-על של הווידאו מוסתר + הסתר באנר צפייה במוצרים + באנר צפייה במוצרים בשכבת-על של וידאו מוסתר באנר צפייה במוצרים בשכבת-על של וידאו מוצג הסתר תוצאות חיפוש באינטרנט תוצאות חיפוש באינטרנט מוסתרות @@ -453,14 +453,14 @@ Second \"item\" text" זה לא עוקף את מגבלת הגיל. זה רק מסכים לזה באופן אוטומטי. - השבתת חלון קופץ של כניסה לטלוויזיה + השבת חלון קופץ של כניסה לטלוויזיה חלון קופץ של כניסה לטלוויזיה מושבת חלון קופץ של כניסה לטלוויזיה מופעל - ביטול דילוג פרקים בלחיצה כפולה - לחיצה כפולה לעולם לא תפעיל דילוג לפרק הבא/הקודם - לחיצה כפולה יכולה להפעיל מדי פעם דילוג לפרק הבא/הקודם + השבת דילוג פרקים בהקשה כפולה + הקשה כפולה לעולם לא יכולה לגרום דילוג לפרק הבא/הקודם + הקשה כפולה יכולה לגרום מדי פעם דילוג לפרק הבא/הקודם הורדות חיצוניות @@ -473,14 +473,14 @@ Second \"item\" text" לחצן ההורדה פותח את המוריד החיצוני שלך לחצן ההורדה פותח את המוריד המקומי בתוך היישום שם חבילת מוריד - שם חבילה של אפליקציית ההורדה החיצונית המותקנת שלך + שם החבילה של יישום ההורדות החיצוני המותקן שלך הזן את שם החבילה אחר - האפליקציה לא מותקנת + היישום לא מותקן %s אינו מותקן. נא להתקין אותו. - "לא ניתן למצוא אפליקציה מותקנת עם שם החבילה: %s + "לא ניתן למצוא יישום מותקן עם שם חבילה: %s -ודא/י ששם החבילה נכון ושהאפליקציה מותקנת" +יש לוודא ששם החבילה נכון ושהיישום מותקן" שם החבילה אינו יכול להיות ריק @@ -564,9 +564,9 @@ Second \"item\" text" לחצן שיתוף מוסתר לחצן שיתוף מוצג - הסתר עצור מודעות - כפתור עצירת הפרסומות מוסתר - כפתור עצירת הפרסומות מוצג + הסתר עצירת מודעות + לחצן עצירת מודעות מוסתר + לחצן עצירת מודעות מוצג הסתר דיווח @@ -582,13 +582,13 @@ Second \"item\" text" לחצן הורדה מוצג - הסתר הייפ - כפתור הייפ מוסתר - כפתור ההייפ מוצג + הסתר באז + לחצן באז מוסתר + לחצן באז מוצג הסתר קידום - כפתור קידום מוסתר - כפתור קידום מוצג + הלחצן \'קידום\' מוסתר + הלחצן \'קידום\' מוצג הסתר תודה לחצן תודה מוסתר @@ -603,9 +603,9 @@ Second \"item\" text" לחצן קליפ מוסתר לחצן קליפ מוצג - הסתר שמירה - כפתור השמירה מוסתר - כפתור השמירה מוצג + הסתר \'שמירה\' + הלחצן \'שמירה\' מוסתר + הלחצן שמירה\' מוצג לחצני ניווט @@ -707,9 +707,9 @@ Second \"item\" text" הסתר \'צפה ב-VR\' תפריט \'צפה ב-VR\' מוסתר תפריט \'צפה ב-VR\' מוצג - הסתר תפריט איכות וידאו - תפריט איכות הסרטון מוסתר - תפריט איכות הסרטון מוצג + הסתר תפריט איכות סרטון + תפריט איכות סרטון מוסתר + תפריט איכות סרטון מוצג הסתר כותרת תחתונה של תפריט איכות סרטון כותרת תחתונה של תפריט איכות סרטון מוסתרת כותרת תחתונה של תפריט איכות סרטון מוצגת @@ -725,7 +725,7 @@ Second \"item\" text" הסתר לחצן העברה לחצן העברה מוסתר לחצן העברה מוצג - הסתר רקע פקדי נגן + הסתר רקע פקדי הנגן רקע פקדי הנגן מוסתר רקע פקדי הנגן מוצג הסתר לחצני הקודם & הבא @@ -753,20 +753,20 @@ Second \"item\" text" מספרים מתגלגלים מונפשים - הסתר סרגל חיפוש נגן וידאו + הסתר סרגל דילוג של נגן וידאו סרגל דילוג של נגן וידאו מוסתר סרגל דילוג של נגן וידאו מוצג - הסתר סרגל חיפוש תמונות ממוזערות של וידאו - סרגל חיפוש תמונות ממוזערות של וידאו מוסתר - סרגל חיפוש תמונות ממוזערות של וידאו מוצג + הסתר סרגל דילוג עם תמונות ממוזערות של סרטון + סרגל דילוג עם תמונות ממוזערות של סרטון מוסתר + סרגל דילוג עם תמונות ממוזערות של סרטון מוצג נגן Shorts הסתר או הצג רכיבי נגן Shorts להסתיר Shorts בפיד הבית - מוסתר בפיד הבית וסרטונים קשורים + מוסתר בפיד הבית ובסרטונים קשורים מוצג בפיד הבית ובסרטונים קשורים הסתר Shorts בתוצאות חיפוש מוסתר בתוצאות חיפוש @@ -774,16 +774,16 @@ Second \"item\" text" להסתיר Shorts בפיד המינויים מוסתר בפיד המנויים - מוצג בפיד מינויים + מוצג בפיד המינויים הסתר Shorts בהיסטוריית הצפייה מוסתר בהיסטוריית הצפייה מוצג בהיסטוריית הצפייה הסתר לחצן קנה סופר תודה - כפתור \'קנה תודה רבה\' מוסתר - כפתור קניית Super Thanks מוצג - הסתר כפתור אפקט - כפתור האפקט מוסתר - כפתור האפקט מוצג + הלחצן \'קנה סופר תודה\' מוסתר + הלחצן \'קנה סופר תודה\' מוצג + הסתר לחצן \'אפקט\' + הלחצן \'אפקט\' מוסתר + הלחצן \'אפקט\' מוצג הסתר לחצן מסך ירוק לחצן מסך ירוק מוסתר לחצן מסך ירוק מוצג @@ -827,12 +827,12 @@ Second \"item\" text" הסתר לחצן \'בקרוב\' לחצן \'בקרוב\' מוסתר לחצן \'בקרוב\' מוצג - הסתר את כפתור \"השתמש בצליל זה\" - כפתור \"השתמש בצליל זה\" מוסתר - כפתור \"השתמש בצליל זה\" מוצג - הסתר כפתור השתמש בתבנית זו - כפתור \"השתמש בתבנית זו\" מוסתר - כפתור השתמש בתבנית זו מוצג + הסתר לחצן \'השתמש בצליל זה\' + הלחצן \'השתמש בצליל זה\' מוסתר + הלחצן \'השתמש בצליל זה\' מוצג + הסתר לחצן השתמש בתבנית זו + הלחצן \'השתמש בתבנית זו\' מוסתר + הלחצן \'השתמש בתבנית זו\' מוצג הסתר הנפשת מזרקה של לחצן אהבתי הנפשת מזרקה של לחצן אהבתי מוסתרת הנפשת מזרקה של לחצן אהבתי מוצגת @@ -866,8 +866,8 @@ Second \"item\" text" כותרת הסרטון מוסתרת כותרת הסרטון מוצגת הסתר תווית מטא-נתונים של סאונד - תווית מטא-נתונים של צליל מוסתרת - תווית מטא-נתונים של צליל מוצגת + תווית מטא-נתונים של שמע מוסתרת + תווית מטא-נתונים של שמע מוצגת הסתר תווית קישור לסרטון תווית קישור סרטון מוסתרת תווית קישור סרטון מוצגת @@ -887,7 +887,7 @@ Second \"item\" text" הסתר שכבת-על של סרטונים קשורים שכבת-על של סרטונים קשורים במסך מלא מוסתרת - שכבת סרטונים קשורים במסך מלא מוצגת + שכבת-על של סרטונים קשורים במסך מלא מוצגת הסתר חותמת זמן של סרטון @@ -1003,14 +1003,14 @@ Second \"item\" text" לחצן דילוג נעלם לאחר כמה שניות לחצן דילוג מוצג עבור כל המקטע משך לחצן הדילוג - כמה זמן להציג את כפתורי הדילוג ודילוג לסימון לפני הסתרה אוטומטית + למשך כמה זמן להציג את לחצני הדילוג והדילוג לגולת הכותרת לפני הסתרה אוטומטית הצג הודעה קופצת לביטול דילוג הודעה קופצת מוצגת כאשר קטע מדולג אוטומטית. הקש על ההודעה הקופצת כדי לבטל את הדילוג - הטוסט לא מוצג - משך טוסט הדילוג - כמה זמן להציג את הודעת \"טוסט\" ביטול הדילוג + ההודעה הקופצת אינה מוצגת + משך הודעת דילוג קופצת + למשך כמה זמן להציג את ההודעה הקופצת לביטול הדילוג שנייה אחת - שתי שניות + 2 שניות 3 שניות 4 שניות 5 שניות @@ -1020,7 +1020,7 @@ Second \"item\" text" 9 שניות 10 שניות הצג אורך סרטון ללא מקטעים - אורך הסרטון פחות כל המקטעים מוצג על פס הניווט + אורך הסרטון פחות כל המקטעים מוצג על סרגל הדילוג אורך סרטון מלא מוצג יוצר מקטעים חדשים הצג לחצן יצירת מקטע חדש @@ -1353,10 +1353,10 @@ Second \"item\" text" כרטיסיית דף הבית - מינויים + כרטיסיית מינויים כרטיסיית הדף שלי - פלייליסטים והמלצות של נגן + פלייליסטים & המלצות של נגן תוצאות חיפוש תמונות ממוזערות מקוריות תמונות ממוזערות מקוריות & DeArrow @@ -1464,9 +1464,9 @@ Second \"item\" text" זכור שינויי איכות סרטון שינויי איכות חלים על כל הסרטונים שינויי איכות חלים רק על הסרטון הנוכחי - הצג הודעה קופצת בעת שינויים באיכות הווידאו - מוצגת הודעה קופצת כאשר איכות הווידאו המוגדרת כברירת מחדל משתנה - הודעה קופצת אינה מוצגת כאשר איכות הווידאו המוגדרת כברירת מחדל משתנה + הצג הודעה קופצת בעת שינויים באיכות הסרטון + מוצגת הודעה קופצת כאשר איכות הסרטון ברירת המחדל משתנה + לא מוצגת הודעה קופצת כאשר איכות הסרטון ברירת המחדל משתנה איכות סרטון ברירת מחדל ברשת אלחוטית איכות סרטון ברירת מחדל ברשת סלולרית זכור שינויי איכות Shorts @@ -1485,8 +1485,8 @@ Second \"item\" text" הלחצן אינו מוצג - הצג כפתור איכות וידאו - הלחצן מוצג. גע והחזק כדי לאפס את האיכות לברירת מחדל + הצג לחצן איכות סרטון + הלחצן מוצג. הקש והחזק כדי לאפס את האיכות לברירת מחדל הלחצן אינו מוצג @@ -1509,8 +1509,8 @@ Second \"item\" text" שינויי מהירות הפעלה חלים על כל הסרטונים שינויי מהירות הפעלה חלים רק על הסרטון הנוכחי הצג הודעה קופצת בעת שינויים במהירות ההפעלה - מוצגת הודעה קופצת כאשר מהירות ההפעלה המוגדרת כברירת מחדל משתנה - הודעה קופצת אינה מוצגת כאשר מהירות ההפעלה המוגדרת כברירת מחדל משתנה + מוצגת הודעה קופצת כאשר מהירות ההפעלה ברירת המחדל משתנה + לא מוצגת הודעה קוצפת כאשר מהירות ההפעלה ברירת המחדל משתנה מהירות הפעלה ברירת מחדל מהירות ברירת המחדל שונתה ל: %s @@ -1581,7 +1581,7 @@ Second \"item\" text" מודעות סרטון אינן חסומות - הודעה נמחקה + ההודעה נמחקה הצג הודעות שנמחקו אל תציג הודעות שנמחקו הסתר מודעות שנמחקו מאחורי ספויילר @@ -1602,7 +1602,7 @@ Second \"item\" text" הגדרות ReVanced אודות אודות ReVanced - חסימת פרסומות + חסימת מודעות הגדרות חסימת מודעות צ\'אט הגדרות צ\'אט diff --git a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml index 22964966c..eac3ba6f9 100644 --- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml +++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml @@ -195,9 +195,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 「通知を受け取る」ボタンを非表示 「通知を受け取る」ボタンは表示されません 「通知を受け取る」ボタンは表示されます - ゲームを非表示 - ゲームは表示されません - ゲームは表示されます + ゲームルームを非表示 + ゲームルームは表示されません + ゲームルームは表示されます 「もっと見る」ボタンを非表示 @@ -486,47 +486,47 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に パッケージ名は空欄にはできません - 精密シークモードを無効にする - シークバーを上へスワイプしても、精密シークモードになりません - シークバーを上へスワイプすると、精密シークモードになります + 精密シーク ジェスチャーを無効化 + 精密シーク ジェスチャーは無効です。シークバーを上へスワイプしても、「再生位置の細かい調整」モードにはなりません + 精密シーク ジェスチャーは有効です。シークバーを上へスワイプすると、「再生位置の細かい調整」モードになります - タップによるシークを有効にする - シークバーをタップすると、タップした位置にシークします - シークバーをタップしても、タップした位置にシークしません + タップによるシークを有効化 + タップによるシークは有効です。シークバーをタップすると、タップした位置に移動します + タップによるシークは無効です。シークバーをタップしても、タップした位置に移動しません - 明るさジェスチャーを有効にする + 明るさジェスチャーを有効化 "全画面表示中の明るさジェスチャーは有効です 画面左側を縦にスワイプして明るさを調節します" 全画面表示中の明るさジェスチャーは無効です - 音量ジェスチャーを有効にする + 音量ジェスチャーを有効化 "全画面表示中の音量ジェスチャーは有効です 画面右側を縦にスワイプして音量を調節します" 全画面表示中の音量ジェスチャーは無効です - 長押しスワイプを有効にする - 全画面表示中、画面を長押ししてから縦にスワイプして明るさや音量を調節します - 全画面表示中、画面を縦にスワイプして明るさや音量を調節します - 触覚フィードバックを有効にする + 長押しスワイプ ジェスチャーを有効化 + 長押しスワイプは有効です\n\n画面を長押ししてから縦にスワイプすると、明るさ / 音量ジェスチャーとして認識されます + 長押しスワイプは無効です\n\n画面を縦にスワイプすると、明るさ / 音量ジェスチャーとして認識されます + 触覚フィードバックを有効化 触覚フィードバックは有効です 触覚フィードバックは無効です - 明るさを保存する - 全画面表示を開始 / 解除するとき、明るさを復元 / 保存します - 全画面表示を開始 / 解除するとき、明るさを復元 / 保存しません - 明るさジェスチャーの自動調節を有効にする - ジェスチャーで明るさを最小値まで下げると、明るさが自動調節されます - ジェスチャーで明るさを最小値まで下げても、明るさは自動調節されません + 明るさを保存&復元 + 全画面表示を終了 / 開始するときに明るさを保存 / 復元します + 全画面表示を終了 / 開始するときに明るさを保存 / 復元しません + 明るさジェスチャーの自動調節を有効化 + ジェスチャーで明るさを最小値まで下げると、明るさが自動で調節されます + ジェスチャーで明るさを最小値まで下げても、明るさは自動で調節されません 自動 オーバーレイのタイムアウト スワイプ オーバーレイが表示される時間 (ミリ秒) オーバーレイの背景の透明度 透明度の範囲は 0-100 で、0 が透明です スワイプ: 透明度の範囲は 0-100 です - 明るさグラフの色 + オーバーレイの明るさグラフの色 スワイプ中の明るさの現在値を視覚的に表示するグラフの色 - 音量グラフの色 + オーバーレイの音量グラフの色 スワイプ中の音量の現在値を視覚的に表示するグラフの色 オーバーレイのテキストサイズ スワイプ オーバーレイのテキストサイズ (1-30) @@ -536,16 +536,16 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 音量ジェスチャーのスワイプ感度 スワイプによる音量の変化量 オーバーレイのスタイル - 横長 - 横長 (最小限 - 画面上部) - 横長 (最小限 - 画面中央) + 横型 + 横型 (最小限 - 画面上部) + 横型 (最小限 - 画面中央) 円形 円形 (最小限) - 縦長 - 縦長 (最小限) - スワイプして動画を切り替える - 全画面表示でスワイプすると、次 / 前の動画に切り替わります - 全画面表示でスワイプしても、次 / 前の動画に切り替わりません + 縦型 + 縦型 (最小限) + スワイプによる動画の切り替えを有効化 + 全画面表示中に左 / 右にスワイプすると、前 / 次の動画に切り替わります + 全画面表示中に左 / 右にスワイプしても、前 / 次の動画に切り替わりません 自動字幕表示を無効化 @@ -588,18 +588,18 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に ハイプボタンは表示されません ハイプボタンは表示されます - プロモート ボタンを非表示 - プロモート ボタンは表示されません - プロモート ボタンは表示されます + プロモーション ボタンを非表示 + プロモーション ボタンは表示されません + プロモーション ボタンは表示されます Thanks ボタンを非表示 Thanks ボタンは表示されません Thanks ボタンは表示されます - 質問ボタンを非表示 - 質問ボタンは表示されません - 質問ボタンは表示されます + 「質問する」ボタンを非表示 + 「質問する」ボタンは表示されません + 「質問する」ボタンは表示されます クリップボタンを非表示 クリップボタンは表示されません @@ -755,13 +755,13 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 数字の回転アニメーションは有効です - 動画プレーヤーのシークバーを非表示 + プレーヤーのシークバーを非表示 動画プレーヤーのシークバーは表示されません 動画プレーヤーのシークバーは表示されます - 動画のサムネイルのシークバーを非表示 - フィードや再生履歴などの動画のサムネイルのシークバーは表示されません - フィードや再生履歴などの動画のサムネイルのシークバーは表示されます + サムネイルのシークバーを非表示 + フィードや再生履歴などに表示される動画のサムネイルのシークバーは表示されません + フィードや再生履歴などに表示される動画のサムネイルのシークバーは表示されます ショート プレーヤー @@ -891,9 +891,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 全画面表示の関連動画オーバーレイは表示されます - タイムスタンプを非表示 - タイムスタンプは表示されません - タイムスタンプは表示されます + 動画のタイムスタンプを非表示 + 動画の現在位置を示すタイムスタンプは表示されません + 動画の現在位置を示すタイムスタンプは表示されます プレーヤー ポップアップ パネルを非表示 @@ -919,51 +919,51 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に - 低評価表示は一時的に利用できません (API タイムアウト) - 低評価表示は利用できません (ステータス %d) - 低評価表示は利用できません (クライアント API のレート制限) - 低評価表示は利用できません (%s) + 低評価数表示は一時的に利用できません (API タイムアウト) + 低評価数表示は利用できません (status %d) + 低評価数表示は利用できません (API のレート制限) + 低評価数表示は利用できません (%s) - Return YouTube Dislike を有効にして投票するには、動画をリロードしてください + Return YouTube Dislike: 投票するには、再読み込みが必要です - 所有者によって非表示 - 低評価は表示されます - 低評価は表示されません - ショート動画の低評価を表示する - "ショート動画の低評価は表示されます + 非公開 + 低評価数は表示されます + 低評価数は表示されません + ショート動画の低評価数を表示 + "ショート動画の低評価数は表示されます -制限事項: シークレット モードでは低評価が表示されない場合があります" - ショート動画の低評価は表示されません - 低評価をパーセントで表示する - 低評価はパーセンテージで表示されます +制限事項: シークレット モードでは低評価数が表示されない場合があります" + ショート動画の低評価数は表示されません + 低評価をパーセントで表示 + 低評価はパーセントで表示されます 低評価は投票数で表示されます コンパクトな高評価ボタン - コンパクトな高評価ボタンが表示されます + コンパクトな横幅の高評価ボタンが表示されます 通常の高評価ボタンが表示されます - 高評価の推定値を表示する - 高評価が非公開の動画には、推定値が表示されます + 高評価の推定値を表示 + 高評価数が非公開の動画には推定値が表示されます 高評価の推定値は表示されません API 利用不可時にトーストを表示 - Return YouTube Dislike が利用できない場合、トーストが表示されます - Return YouTube Dislike が利用できない場合でも、トーストは表示されません + Return YouTube Dislike が利用できない場合にトースト通知が表示されます + Return YouTube Dislike が利用できない場合にトースト通知は表示されません データは Return YouTube Dislike API によって提供されています。詳細は、ここをタップしてください - このデバイスの Return YouTube Dislike API 統計情報 - API 応答時間 (平均) - API 応答時間 (最小) - API 応答時間 (最大) - API 応答時間 (直近) - 低評価表示は一時的に利用できません - クライアント API のレート制限が原因です - API 投票取得 (呼び出し回数) - ネットワーク通信は行われていません - %d 回のネットワーク通信が行われました - API 投票取得 (タイムアウト回数) - ネットワーク通信はタイムアウトしていません - %d 回のネットワーク通信がタイムアウトしました + このデバイスの ReturnYouTubeDislike API 統計情報 + API の応答時間 (平均) + API の応答時間 (最小) + API の応答時間 (最大) + API の応答時間 (直近) + 低評価数表示は一時的に利用できません。クライアント API のレート制限が原因です + API の投票数取得 (呼び出し回数) + ネットワーク呼び出しは実行されていません + %d 回のネットワーク呼び出しが実行されました + API の投票数取得 (タイムアウト回数) + ネットワーク呼び出しはタイムアウトしていません + %d 回のネットワーク呼び出しがタイムアウトしました API クライアントのレート制限 - クライアント レート制限は発生していません - %d 回のクライアント レート制限が発生しました + クライアントのレート制限には遭遇していません + クライアントのレート制限に %d 回遭遇しました %d ミリ秒 @@ -972,17 +972,17 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に ワイド検索バーは無効です - 高画質サムネイルを有効にする - シークバーのサムネイルは高画質です - シークバーのサムネイルは中画質です + 高画質サムネイルを有効化 + シークバー サムネイルは高画質です + シークバー サムネイルは中画質です プレーヤー画面全体表示のサムネイルは高画質です プレーヤー画面全体表示のサムネイルは中画質です "この機能を有効にすると、シークバー サムネイルを保持していないライブ配信でもシークバー サムネイルが表示されるようになります。 -シークバー サムネイルは、動画の再生中の画質と同じ画質になります。 +シークバー サムネイルは、再生中の動画と同じ画質になります。 この機能は、非常に高速なインターネット接続を使用して 720P 以下の画質で動画を視聴する場合に最適です。" - 古いシークバー サムネイルを復元 + 古いスタイルのシークバー サムネイルを復元 シーク中のサムネイルはシークバーの上に表示されます シーク中のサムネイルはプレーヤー画面全体に表示されます @@ -997,7 +997,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に ボタンとコントロールの角は直角です ボタンとコントロールの角は丸角です - コンパクトなスキップボタンを使用する + コンパクトなスキップボタンを使用 コンパクトなスキップボタンが表示されます 通常のスキップボタンが表示されます スキップボタンを自動的に非表示 @@ -1120,7 +1120,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 無効 セグメントの送信に失敗しました: %s SponsorBlock は一時的にダウンしています - セグメントの送信に失敗しました (ステータス: %1$d %2$s) + セグメントの送信に失敗しました (status: %1$d %2$s) セグメントの送信に失敗しました (レート制限: 同じユーザー / IP からの通信が多すぎます) セグメントを送信できません: %s "セグメントを送信できません。 @@ -1128,10 +1128,10 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に セグメントの送信に成功しました SponsorBlock は一時的に利用できません (API タイムアウト) - SponsorBlock は一時的に利用できません (ステータス %d) + SponsorBlock は一時的に利用できません (status %d) SponsorBlock は一時的に利用できません セグメントへの投票に失敗しました (API タイムアウト) - セグメントへの投票に失敗しました (ステータス: %1$d %2$s) + セグメントへの投票に失敗しました (status: %1$d %2$s) セグメントへの投票に失敗しました: %s 高評価 低評価 @@ -1171,7 +1171,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に SponsorBlock は無効です ユーザー名: <b>%s</b> ユーザー名を変更するには、ここをタップしてください - ユーザー名の変更に失敗しました (ステータス: %1$d %2$s) + ユーザー名の変更に失敗しました (status: %1$d %2$s) ユーザー名の変更に成功しました あなたの評価は <b>%.2f</b> です 合計で <b>%s</b> 個のセグメントを作成しました @@ -1324,13 +1324,13 @@ Automotive レイアウト スプラッシュ画面のスタイル カラー 白黒 - 編集したシークバーの色を使用する - 編集したシークバーの色が表示されます - デフォルトのシークバーの色が表示されます + 編集したシークバーの色を有効化 + シークバーは編集した色で表示されます + シークバーはデフォルトの色で表示されます シークバーの色 - シークバーの色の値を編集します + シークバーの色を編集します シークバーのアクセント カラー - シークバーのアクセントカラーの値を編集します + シークバーのアクセントカラーを編集します シークバーの色の値が無効です @@ -1379,7 +1379,7 @@ Automotive レイアウト 動画の中盤 動画の終盤 - DeArrow は一時的に利用できません (ステータス コード: %s) + DeArrow は一時的に利用できません (status code: %s) DeArrow は一時的に利用できません @@ -1421,9 +1421,9 @@ Automotive レイアウト チャプターの触覚フィードバックを無効にする チャプターの触覚フィードバックは無効です チャプターの触覚フィードバックは有効です - 精密シークモードの触覚フィードバックを無効にする - 精密シークモードの触覚フィードバックは無効です - 精密シークモードの触覚フィードバックは有効です + 精密シークの触覚フィードバックを無効化 + 精密シークの触覚フィードバックは無効です + 精密シークの触覚フィードバックは有効です シーク取り消しの触覚フィードバックを無効にする シーク取り消しの触覚フィードバックは無効です シーク取り消しの触覚フィードバックは有効です @@ -1523,9 +1523,9 @@ Automotive レイアウト 通常の画質メニューが表示されます - スライドしてシークする機能を有効にする - スライドしてシークする機能が有効になっています - スライドしてシークする機能は無効になっています + スライドによるシークを有効化 + スライドによるシークは有効です。プレーヤー画面を左右にスライドすると、前後にシークします + スライドによるシークは無効です。プレーヤー画面を左右にスライドしても、前後にシークしません 動画ストリームを偽装 diff --git a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml index bf43182c4..c2a9d56af 100644 --- a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml +++ b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml @@ -158,9 +158,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 소형 배너 숨기기 소형 배너가 숨겨집니다 소형 배너가 표시됩니다 - 크라우드 펀딩 박스 숨기기 - 플레이어 하단에서 크라우드 펀딩 박스가 숨겨집니다 - 플레이어 하단에서 크라우드 펀딩 박스가 표시됩니다 + 모금 행사 패널 숨기기 + 모금 행사 패널이 숨겨집니다 + 모금 행사 패널이 표시됩니다 펼쳐볼 수 있는 정보 숨기기 썸네일 하단에서 다음 정보들이 숨겨집니다:\n동영상 설명, 챕터, 주요 순간, 스크립트,\n재생목록의 동영상, 이 동영상에 나온 제품, etc. 썸네일 하단에서 다음 정보들이 표시됩니다:\n동영상 설명, 챕터, 주요 순간, 스크립트,\n재생목록의 동영상, 이 동영상에 나온 제품, etc. @@ -196,9 +196,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 \'알림 받기\' 버튼 숨기기 에정 동영상 하단에서 \'알림 받기\' 버튼이 숨겨집니다 예전 동영상 하단에서 \'알림 받기\' 버튼이 표시됩니다 - Playables(게임 룸) 선반 숨기기 - 게임 룸 선반이 숨겨집니다 - 게임 룸 선반이 표시됩니다 + 게임 룸 숨기기 + 게임 룸이 숨겨집니다 + 게임 룸이 표시됩니다 \'자세히 보기\' 버튼 숨기기 @@ -701,7 +701,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 "오디오 트랙 메뉴가 숨겨집니다 -오디오 트랙 메뉴를 표시하려면 '스트리밍 데이터 변경하기'에서 기본 클라이언트를 iOS TV로 변경하세요" +오디오 트랙 메뉴를 표시하려면, '동영상 스트림 변경하기'에서 기본 클라이언트를 iOS TV로 변경하세요" VR로 보기 메뉴 숨기기 VR로 보기 메뉴가 숨겨집니다 @@ -1461,7 +1461,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 탭하세요" 원본 오디오 스트림 언어를 사용 중입니다 기본 오디오 스트림 언어를 사용 중입니다 - 이 설정을 사용하려면, \'스트리밍 데이터 변경하기\' 설정에서 기본 클라이언트를 iOS TV로 변경하세요 + 이 설정을 사용하려면, \'동영상 스트림 변경하기\'에서 기본 클라이언트를 iOS TV로 변경하세요 @@ -1535,11 +1535,11 @@ DeArrow에 대해 자세히 알아보려면 여기를 탭하세요" 슬라이드하여 탐색을 비활성화합니다 - 스트리밍 데이터 변경하기 - 스트리밍 데이터를 변경하여 재생 문제를 방지할 수 있습니다 - 스트리밍 데이터 변경하기 - 스트리밍 데이터를 변경합니다 - "스트리밍 데이터를 변경하지 않습니다 + 동영상 스트림 변경하기 + 클라이언트 동영상 스트림을 변경하여 재생 문제를 방지할 수 있습니다 + 동영상 스트림 변경하기 + 동영상 스트림을 변경합니다 + "동영상 스트림을 변경하지 않습니다 동영상 재생 문제가 발생할 수 있습니다" 이 설정을 비활성화하면 동영상 재생 문제가 발생할 수 있습니다. 기본 클라이언트 @@ -1560,8 +1560,8 @@ AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동 • AV1 코덱이 지원되지 않습니다 • Kids 동영상은 로그인을 하지 않았거나 시크릿 모드에서는 재생되지 않을 수 있습니다 전문 통계에서 표시하기 - 스트리밍 데이터를 가져오는 데 사용되는 클라이언트가 전문 통계에서 표시됩니다 - 스트리밍 데이터를 가져오는 데 사용되는 클라이언트가 전문 통계에서 표시되지 않습니다 + 동영상 스트림을 가져오는 데 사용되는 클라이언트가 전문 통계에서 표시됩니다 + 동영상 스트림을 가져오는 데 사용되는 클라이언트가 전문 통계에서 표시되지 않습니다 VR 기본 오디오 스트림 언어 diff --git a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml index e98108462..62b0bb3ff 100644 --- a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml +++ b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml @@ -582,11 +582,11 @@ Ekranın sağ tarafında dikey olarak kaydırarak sesi ayarlayın" İndir düğmesi görünür - Abartıyı Gizle - Coşku düğmesi gizli + Hype\'ı gizle + Hype düğmesi gizli Hype düğmesi görünür - Tanıt\'ı Gizle + Tanıt\'ı gizle Tanıt düğmesi gizli Tanıt düğmesi görünür From 7973c75552c118dea0efc1cbc01e86eb05984301 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 3 Sep 2025 17:43:47 +0000 Subject: [PATCH 16/27] chore: Release v5.35.0-dev.1 [skip ci] # [5.35.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.34.1-dev.3...v5.35.0-dev.1) (2025-09-03) ### Features * **Instagram:** Add `Hide navigation buttons` patch ([#5678](https://github.com/ReVanced/revanced-patches/issues/5678)) ([1dbc2d4](https://github.com/ReVanced/revanced-patches/commit/1dbc2d40578c7bf730d7503b241c437769532245)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 859676005..7c4723e2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.35.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.34.1-dev.3...v5.35.0-dev.1) (2025-09-03) + + +### Features + +* **Instagram:** Add `Hide navigation buttons` patch ([#5678](https://github.com/ReVanced/revanced-patches/issues/5678)) ([415cf0f](https://github.com/ReVanced/revanced-patches/commit/415cf0fb5b9b3dcaf4592943a69eea1c10447b07)) + ## [5.34.1-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.34.1-dev.2...v5.34.1-dev.3) (2025-08-24) diff --git a/gradle.properties b/gradle.properties index 750b16aaa..951928cc1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M org.gradle.parallel = true android.useAndroidX = true kotlin.code.style = official -version = 5.34.1-dev.3 +version = 5.35.0-dev.1 From 9256aa45487e9648368ae5c79d397f40ae1f0f3c Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Thu, 4 Sep 2025 12:22:53 +0200 Subject: [PATCH 17/27] fix: Revert dependency updates to fix Manager pre-release patching --- .github/workflows/build_pull_request.yml | 4 ++-- .github/workflows/open_pull_request.yml | 2 +- .github/workflows/pull_strings.yml | 2 +- .github/workflows/push_strings.yml | 2 +- .github/workflows/release.yml | 8 ++++---- .github/workflows/update-gradle-wrapper.yml | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml index 3e2f365f7..c7ffa59f1 100644 --- a/.github/workflows/build_pull_request.yml +++ b/.github/workflows/build_pull_request.yml @@ -12,10 +12,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v5 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/open_pull_request.yml b/.github/workflows/open_pull_request.yml index 6e3eddd18..33c8a7211 100644 --- a/.github/workflows/open_pull_request.yml +++ b/.github/workflows/open_pull_request.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v4 - name: Open pull request uses: repo-sync/pull-request@v2 diff --git a/.github/workflows/pull_strings.yml b/.github/workflows/pull_strings.yml index be27b0687..6f0f6f6cd 100644 --- a/.github/workflows/pull_strings.yml +++ b/.github/workflows/pull_strings.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v4 with: ref: dev clean: true diff --git a/.github/workflows/push_strings.yml b/.github/workflows/push_strings.yml index c51254f75..1be23c2a5 100644 --- a/.github/workflows/push_strings.yml +++ b/.github/workflows/push_strings.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v4 - name: Preprocess strings env: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 607ff8293..0e2278b3a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,10 +18,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v5 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' @@ -51,14 +51,14 @@ jobs: fingerprint: ${{ vars.GPG_FINGERPRINT }} - name: Release - uses: cycjimmy/semantic-release-action@v5 + uses: cycjimmy/semantic-release-action@v4 id: release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Attest if: steps.release.outputs.new_release_published == 'true' - uses: actions/attest-build-provenance@v3 + uses: actions/attest-build-provenance@v2 with: subject-name: 'ReVanced Patches ${{ steps.release.outputs.new_release_git_tag }}' subject-path: patches/build/libs/patches-*.rvp diff --git a/.github/workflows/update-gradle-wrapper.yml b/.github/workflows/update-gradle-wrapper.yml index 765927aaf..8136ad5f3 100644 --- a/.github/workflows/update-gradle-wrapper.yml +++ b/.github/workflows/update-gradle-wrapper.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v4 - name: Update Gradle Wrapper uses: gradle-update/update-gradle-wrapper-action@v1 From 39f90e4b115e69078718b21b740258304c0ec9c5 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 4 Sep 2025 10:27:39 +0000 Subject: [PATCH 18/27] chore: Release v5.35.0-dev.2 [skip ci] # [5.35.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.1...v5.35.0-dev.2) (2025-09-04) ### Bug Fixes * Revert dependency updates to fix Manager pre-release patching ([9256aa4](https://github.com/ReVanced/revanced-patches/commit/9256aa45487e9648368ae5c79d397f40ae1f0f3c)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c4723e2c..c9c5cdeab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.35.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.1...v5.35.0-dev.2) (2025-09-04) + + +### Bug Fixes + +* Revert dependency updates to fix Manager pre-release patching ([4c7a1a8](https://github.com/ReVanced/revanced-patches/commit/4c7a1a8554c67797bf663e5230f566c5a9b229af)) + # [5.35.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.34.1-dev.3...v5.35.0-dev.1) (2025-09-03) diff --git a/gradle.properties b/gradle.properties index 951928cc1..8937873c6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M org.gradle.parallel = true android.useAndroidX = true kotlin.code.style = official -version = 5.35.0-dev.1 +version = 5.35.0-dev.2 From 0a8cd7a7dbcfbb5d8b71d96a17f0944514b96246 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Thu, 4 Sep 2025 16:01:50 +0200 Subject: [PATCH 19/27] fix(Instagram - Hide navigation buttons): Fix Manager patching error --- .../instagram/hide/navigation/HideNavigationButtons.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt index f63d55b62..b0f751d20 100644 --- a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt @@ -20,13 +20,15 @@ val hideNavigationButtonsPatch = bytecodePatch( val hideReels by booleanOption( key = "hideReels", default = true, - title = "Hide Reels" + title = "Hide Reels", + description = "Permanently hides the Reels button." ) val hideCreate by booleanOption( key = "hideCreate", default = true, - title = "Hide Create" + title = "Hide Create", + description = "Permanently hides the Create button." ) execute { From b340769cf30f6e0402482f97070a9a9c3b6fd690 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 4 Sep 2025 14:06:03 +0000 Subject: [PATCH 20/27] chore: Release v5.35.0-dev.3 [skip ci] # [5.35.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.2...v5.35.0-dev.3) (2025-09-04) ### Bug Fixes * **Instagram - Hide navigation buttons:** Fix Manager patching error ([0a8cd7a](https://github.com/ReVanced/revanced-patches/commit/0a8cd7a7dbcfbb5d8b71d96a17f0944514b96246)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9c5cdeab..fd7115414 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.35.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.2...v5.35.0-dev.3) (2025-09-04) + + +### Bug Fixes + +* **Instagram - Hide navigation buttons:** Fix Manager patching error ([0d10e94](https://github.com/ReVanced/revanced-patches/commit/0d10e94663283fac09f3efc57c9b9805c38c4e13)) + # [5.35.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.1...v5.35.0-dev.2) (2025-09-04) diff --git a/gradle.properties b/gradle.properties index 8937873c6..2a92decad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M org.gradle.parallel = true android.useAndroidX = true kotlin.code.style = official -version = 5.35.0-dev.2 +version = 5.35.0-dev.3 From c66c42e946cbe7f02e5f27cfb8661ac442835b1e Mon Sep 17 00:00:00 2001 From: Eric Ahn Date: Thu, 4 Sep 2025 14:29:58 -0700 Subject: [PATCH 21/27] feat(Boost/Sync for Reddit): Add `Fix Redgifs` patch (#5725) --- extensions/boostforreddit/build.gradle.kts | 2 + .../boostforreddit/FixRedgifsApiPatch.java | 22 +++++ extensions/shared/build.gradle.kts | 1 + extensions/shared/library/build.gradle.kts | 1 + .../fixes/redgifs/BaseFixRedgifsApiPatch.java | 71 ++++++++++++++ .../fixes/redgifs/RedgifsTokenManager.java | 94 +++++++++++++++++++ extensions/syncforreddit/build.gradle.kts | 1 + .../syncforreddit/FixRedgifsApiPatch.java | 22 +++++ patches/api/patches.api | 15 +++ .../customclients/FixRedgifsApiPatch.kt | 17 ++++ .../fix/redgifs/Fingerprints.kt | 20 ++++ .../fix/redgifs/FixRedgifsApiPatch.kt | 38 ++++++++ .../syncforreddit/fix/redgifs/Fingerprints.kt | 39 ++++++++ .../fix/redgifs/FixRedgifsApiPatch.kt | 56 +++++++++++ .../kotlin/app/revanced/util/BytecodeUtils.kt | 1 + 15 files changed, 400 insertions(+) create mode 100644 extensions/boostforreddit/src/main/java/app/revanced/extension/boostforreddit/FixRedgifsApiPatch.java create mode 100644 extensions/shared/library/src/main/java/app/revanced/extension/shared/fixes/redgifs/BaseFixRedgifsApiPatch.java create mode 100644 extensions/shared/library/src/main/java/app/revanced/extension/shared/fixes/redgifs/RedgifsTokenManager.java create mode 100644 extensions/syncforreddit/src/main/java/app/revanced/extension/syncforreddit/FixRedgifsApiPatch.java create mode 100644 patches/src/main/kotlin/app/revanced/patches/reddit/customclients/FixRedgifsApiPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/fix/redgifs/Fingerprints.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/fix/redgifs/FixRedgifsApiPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/redgifs/Fingerprints.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/redgifs/FixRedgifsApiPatch.kt diff --git a/extensions/boostforreddit/build.gradle.kts b/extensions/boostforreddit/build.gradle.kts index 54c06871b..4f79f5a79 100644 --- a/extensions/boostforreddit/build.gradle.kts +++ b/extensions/boostforreddit/build.gradle.kts @@ -1,4 +1,6 @@ dependencies { compileOnly(project(":extensions:shared:library")) compileOnly(project(":extensions:boostforreddit:stub")) + compileOnly(libs.annotation) + compileOnly(libs.okhttp) } diff --git a/extensions/boostforreddit/src/main/java/app/revanced/extension/boostforreddit/FixRedgifsApiPatch.java b/extensions/boostforreddit/src/main/java/app/revanced/extension/boostforreddit/FixRedgifsApiPatch.java new file mode 100644 index 000000000..92757dabf --- /dev/null +++ b/extensions/boostforreddit/src/main/java/app/revanced/extension/boostforreddit/FixRedgifsApiPatch.java @@ -0,0 +1,22 @@ +package app.revanced.extension.boostforreddit; + +import app.revanced.extension.shared.fixes.redgifs.BaseFixRedgifsApiPatch; +import okhttp3.OkHttpClient; + +/** + * @noinspection unused + */ +public class FixRedgifsApiPatch extends BaseFixRedgifsApiPatch { + static { + INSTANCE = new FixRedgifsApiPatch(); + } + + public String getDefaultUserAgent() { + // Boost uses a static user agent for Redgifs API calls + return "Boost"; + } + + public static OkHttpClient createClient() { + return new OkHttpClient.Builder().addInterceptor(INSTANCE).build(); + } +} diff --git a/extensions/shared/build.gradle.kts b/extensions/shared/build.gradle.kts index 2da2e1e89..8f037894c 100644 --- a/extensions/shared/build.gradle.kts +++ b/extensions/shared/build.gradle.kts @@ -1,3 +1,4 @@ dependencies { implementation(project(":extensions:shared:library")) + compileOnly(libs.okhttp) } diff --git a/extensions/shared/library/build.gradle.kts b/extensions/shared/library/build.gradle.kts index 95969234f..100de7ae1 100644 --- a/extensions/shared/library/build.gradle.kts +++ b/extensions/shared/library/build.gradle.kts @@ -18,4 +18,5 @@ android { dependencies { compileOnly(libs.annotation) + compileOnly(libs.okhttp) } diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/fixes/redgifs/BaseFixRedgifsApiPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/fixes/redgifs/BaseFixRedgifsApiPatch.java new file mode 100644 index 000000000..b6fa2caa0 --- /dev/null +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/fixes/redgifs/BaseFixRedgifsApiPatch.java @@ -0,0 +1,71 @@ +package app.revanced.extension.shared.fixes.redgifs; + +import androidx.annotation.NonNull; + +import org.json.JSONException; + +import java.io.IOException; +import java.net.HttpURLConnection; + +import app.revanced.extension.shared.Logger; +import okhttp3.Interceptor; +import okhttp3.MediaType; +import okhttp3.Protocol; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + + +public abstract class BaseFixRedgifsApiPatch implements Interceptor { + protected static BaseFixRedgifsApiPatch INSTANCE; + public abstract String getDefaultUserAgent(); + + @NonNull + @Override + public Response intercept(@NonNull Chain chain) throws IOException { + Request request = chain.request(); + if (!request.url().host().equals("api.redgifs.com")) { + return chain.proceed(request); + } + + String userAgent = getDefaultUserAgent(); + + if (request.header("Authorization") != null) { + Response response = chain.proceed(request.newBuilder().header("User-Agent", userAgent).build()); + if (response.isSuccessful()) { + return response; + } + // It's possible that the user agent is being overwritten later down in the interceptor + // chain, so make sure we grab the new user agent from the request headers. + userAgent = response.request().header("User-Agent"); + response.close(); + } + + try { + RedgifsTokenManager.RedgifsToken token = RedgifsTokenManager.refreshToken(userAgent); + + // Emulate response for old OAuth endpoint + if (request.url().encodedPath().equals("/v2/oauth/client")) { + String responseBody = RedgifsTokenManager.getEmulatedOAuthResponseBody(token); + return new Response.Builder() + .message("OK") + .code(HttpURLConnection.HTTP_OK) + .protocol(Protocol.HTTP_1_1) + .request(request) + .header("Content-Type", "application/json") + .body(ResponseBody.create( + responseBody, MediaType.get("application/json"))) + .build(); + } + + Request modifiedRequest = request.newBuilder() + .header("Authorization", "Bearer " + token.getAccessToken()) + .header("User-Agent", userAgent) + .build(); + return chain.proceed(modifiedRequest); + } catch (JSONException ex) { + Logger.printException(() -> "Could not parse Redgifs response", ex); + throw new IOException(ex); + } + } +} diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/fixes/redgifs/RedgifsTokenManager.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/fixes/redgifs/RedgifsTokenManager.java new file mode 100644 index 000000000..792465a89 --- /dev/null +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/fixes/redgifs/RedgifsTokenManager.java @@ -0,0 +1,94 @@ +package app.revanced.extension.shared.fixes.redgifs; + +import static app.revanced.extension.shared.requests.Route.Method.GET; + +import androidx.annotation.GuardedBy; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import app.revanced.extension.shared.requests.Requester; + + +/** + * Manages Redgifs token lifecycle. + */ +public class RedgifsTokenManager { + public static class RedgifsToken { + // Expire after 23 hours to provide some breathing room + private static final long EXPIRY_SECONDS = 23 * 60 * 60; + + private final String accessToken; + private final long refreshTimeInSeconds; + + public RedgifsToken(String accessToken, long refreshTime) { + this.accessToken = accessToken; + this.refreshTimeInSeconds = refreshTime; + } + + public String getAccessToken() { + return accessToken; + } + + public long getExpiryTimeInSeconds() { + return refreshTimeInSeconds + EXPIRY_SECONDS; + } + + public boolean isValid() { + if (accessToken == null) return false; + return getExpiryTimeInSeconds() >= System.currentTimeMillis() / 1000; + } + } + public static final String REDGIFS_API_HOST = "https://api.redgifs.com"; + private static final String GET_TEMPORARY_TOKEN = REDGIFS_API_HOST + "/v2/auth/temporary"; + @GuardedBy("itself") + private static final Map tokenMap = new HashMap<>(); + + private static String getToken(String userAgent) throws IOException, JSONException { + HttpURLConnection connection = (HttpURLConnection) new URL(GET_TEMPORARY_TOKEN).openConnection(); + connection.setFixedLengthStreamingMode(0); + connection.setRequestMethod(GET.name()); + connection.setRequestProperty("User-Agent", userAgent); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Accept", "application/json"); + connection.setUseCaches(false); + + JSONObject responseObject = Requester.parseJSONObject(connection); + return responseObject.getString("token"); + } + + public static RedgifsToken refreshToken(String userAgent) throws IOException, JSONException { + synchronized(tokenMap) { + // Reference: https://github.com/JeffreyCA/Apollo-ImprovedCustomApi/pull/67 + RedgifsToken token = tokenMap.get(userAgent); + if (token != null && token.isValid()) { + return token; + } + + // Copy user agent from original request if present because Redgifs verifies + // that the user agent in subsequent requests matches the one in the OAuth token. + String accessToken = getToken(userAgent); + long refreshTime = System.currentTimeMillis() / 1000; + token = new RedgifsToken(accessToken, refreshTime); + tokenMap.put(userAgent, token); + return token; + } + } + + public static String getEmulatedOAuthResponseBody(RedgifsToken token) throws JSONException { + // Reference: https://github.com/JeffreyCA/Apollo-ImprovedCustomApi/pull/67 + JSONObject responseObject = new JSONObject(); + responseObject.put("access_token", token.accessToken); + responseObject.put("expiry_time", token.getExpiryTimeInSeconds() - (System.currentTimeMillis() / 1000)); + responseObject.put("scope", "read"); + responseObject.put("token_type", "Bearer"); + return responseObject.toString(); + } +} diff --git a/extensions/syncforreddit/build.gradle.kts b/extensions/syncforreddit/build.gradle.kts index a2b2899db..ae95bb48f 100644 --- a/extensions/syncforreddit/build.gradle.kts +++ b/extensions/syncforreddit/build.gradle.kts @@ -2,4 +2,5 @@ dependencies { compileOnly(project(":extensions:shared:library")) compileOnly(project(":extensions:syncforreddit:stub")) compileOnly(libs.annotation) + compileOnly(libs.okhttp) } diff --git a/extensions/syncforreddit/src/main/java/app/revanced/extension/syncforreddit/FixRedgifsApiPatch.java b/extensions/syncforreddit/src/main/java/app/revanced/extension/syncforreddit/FixRedgifsApiPatch.java new file mode 100644 index 000000000..78c910ecf --- /dev/null +++ b/extensions/syncforreddit/src/main/java/app/revanced/extension/syncforreddit/FixRedgifsApiPatch.java @@ -0,0 +1,22 @@ +package app.revanced.extension.syncforreddit; + +import app.revanced.extension.shared.fixes.redgifs.BaseFixRedgifsApiPatch; +import okhttp3.OkHttpClient; + +/** + * @noinspection unused + */ +public class FixRedgifsApiPatch extends BaseFixRedgifsApiPatch { + static { + INSTANCE = new FixRedgifsApiPatch(); + } + + public String getDefaultUserAgent() { + // To be filled in by patch + return ""; + } + + public static OkHttpClient install(OkHttpClient.Builder builder) { + return builder.addInterceptor(INSTANCE).build(); + } +} diff --git a/patches/api/patches.api b/patches/api/patches.api index fd788e221..8b275fc72 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -512,6 +512,13 @@ public final class app/revanced/patches/reddit/ad/general/HideAdsPatchKt { public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/reddit/customclients/FixRedgifsApiPatchKt { + public static final field CREATE_NEW_CLIENT_METHOD Ljava/lang/String; + public static final field INSTALL_NEW_CLIENT_METHOD Ljava/lang/String; + public static final fun fixRedgifsApiPatch (Lapp/revanced/patcher/patch/Patch;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/BytecodePatch; + public static synthetic fun fixRedgifsApiPatch$default (Lapp/revanced/patcher/patch/Patch;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/reddit/customclients/FixSLinksPatchKt { public static final field RESOLVE_S_LINK_METHOD Ljava/lang/String; public static final field SET_ACCESS_TOKEN_METHOD Ljava/lang/String; @@ -540,6 +547,10 @@ public final class app/revanced/patches/reddit/customclients/boostforreddit/fix/ public static final fun getFixAudioMissingInDownloadsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/reddit/customclients/boostforreddit/fix/redgifs/FixRedgifsApiPatchKt { + public static final fun getFixRedgifsApi ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/reddit/customclients/boostforreddit/fix/slink/FixSLinksPatchKt { public static final field EXTENSION_CLASS_DESCRIPTOR Ljava/lang/String; public static final fun getFixSlinksPatch ()Lapp/revanced/patcher/patch/BytecodePatch; @@ -610,6 +621,10 @@ public final class app/revanced/patches/reddit/customclients/sync/syncforreddit/ public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/redgifs/FixRedgifsApiPatchKt { + public static final fun getFixRedgifsApi ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/slink/FixSLinksPatchKt { public static final field EXTENSION_CLASS_DESCRIPTOR Ljava/lang/String; public static final fun getFixSLinksPatch ()Lapp/revanced/patcher/patch/BytecodePatch; diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/FixRedgifsApiPatch.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/FixRedgifsApiPatch.kt new file mode 100644 index 000000000..92ff76f9e --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/FixRedgifsApiPatch.kt @@ -0,0 +1,17 @@ +package app.revanced.patches.reddit.customclients + +import app.revanced.patcher.patch.BytecodePatchBuilder +import app.revanced.patcher.patch.Patch +import app.revanced.patcher.patch.bytecodePatch + +const val INSTALL_NEW_CLIENT_METHOD = "install(Lokhttp3/OkHttpClient${'$'}Builder;)Lokhttp3/OkHttpClient;" +const val CREATE_NEW_CLIENT_METHOD = "createClient()Lokhttp3/OkHttpClient;" + +fun fixRedgifsApiPatch( + extensionPatch: Patch<*>, + block: BytecodePatchBuilder.() -> Unit = {}, +) = bytecodePatch(name = "Fix Redgifs API") { + dependsOn(extensionPatch) + + block() +} diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/fix/redgifs/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/fix/redgifs/Fingerprints.kt new file mode 100644 index 000000000..1f3560d73 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/fix/redgifs/Fingerprints.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.reddit.customclients.boostforreddit.fix.redgifs + +import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +internal val createOkHttpClientFingerprint = fingerprint { + accessFlags(AccessFlags.PRIVATE) + opcodes( + Opcode.NEW_INSTANCE, + Opcode.INVOKE_DIRECT, + Opcode.NEW_INSTANCE, + Opcode.INVOKE_DIRECT, + Opcode.NEW_INSTANCE, + Opcode.INVOKE_DIRECT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT + ) + custom { _, classDef -> classDef.sourceFile == "RedGifsAPIv2.java" } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/fix/redgifs/FixRedgifsApiPatch.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/fix/redgifs/FixRedgifsApiPatch.kt new file mode 100644 index 000000000..f19a5964d --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/fix/redgifs/FixRedgifsApiPatch.kt @@ -0,0 +1,38 @@ +package app.revanced.patches.reddit.customclients.boostforreddit.fix.redgifs + +import app.revanced.patcher.extensions.InstructionExtensions.instructions +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patches.reddit.customclients.CREATE_NEW_CLIENT_METHOD +import app.revanced.patches.reddit.customclients.boostforreddit.misc.extension.sharedExtensionPatch +import app.revanced.patches.reddit.customclients.fixRedgifsApiPatch +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/boostforreddit/FixRedgifsApiPatch;" + +@Suppress("unused") +val fixRedgifsApi = fixRedgifsApiPatch( + extensionPatch = sharedExtensionPatch +) { + compatibleWith("com.rubenmayayo.reddit") + + execute { + // region Patch Redgifs OkHttp3 client. + + createOkHttpClientFingerprint.method.apply { + val index = indexOfFirstInstructionOrThrow { + val reference = getReference() + reference?.name == "build" && reference.definingClass == "Lokhttp3/OkHttpClient\$Builder;" + } + replaceInstruction( + index, + """ + invoke-static { }, ${EXTENSION_CLASS_DESCRIPTOR}->$CREATE_NEW_CLIENT_METHOD + """ + ) + } + + // endregion + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/redgifs/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/redgifs/Fingerprints.kt new file mode 100644 index 000000000..16dfa4620 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/redgifs/Fingerprints.kt @@ -0,0 +1,39 @@ +package app.revanced.patches.reddit.customclients.sync.syncforreddit.fix.redgifs + +import app.revanced.patcher.extensions.InstructionExtensions.instructions +import app.revanced.patcher.fingerprint +import app.revanced.util.indexOfFirstInstruction +import app.revanced.util.writeRegister +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction11n + + +internal val createOkHttpClientFingerprint = fingerprint { + accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC) + returns("V") + parameters() + custom { method, classDef -> + // There are four functions (each creating a client) defined in this file with very similar fingerprints. + // We're looking for the one that only creates one object (the builder) and sets client options true + // (thus never reloading the register with a 0). + classDef.sourceFile == "OkHttpHelper.java" && + method.instructions.count { it.opcode == Opcode.NEW_INSTANCE } == 1 && + method.indexOfFirstInstruction { + opcode == Opcode.CONST_4 && writeRegister == 1 && (this as Instruction11n).narrowLiteral == 0 + } == -1 + } +} + +internal val getDefaultUserAgentFingerprint = fingerprint { + custom { method, classDef -> + method.name == "getDefaultUserAgent" && classDef.type == EXTENSION_CLASS_DESCRIPTOR + } +} + +internal val getOriginalUserAgentFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC) + returns("Ljava/lang/String;") + parameters() + custom { _, classDef -> classDef.sourceFile == "AccountSingleton.java" } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/redgifs/FixRedgifsApiPatch.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/redgifs/FixRedgifsApiPatch.kt new file mode 100644 index 000000000..a4f3842f9 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/redgifs/FixRedgifsApiPatch.kt @@ -0,0 +1,56 @@ +package app.revanced.patches.reddit.customclients.sync.syncforreddit.fix.redgifs + +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patches.reddit.customclients.INSTALL_NEW_CLIENT_METHOD +import app.revanced.patches.reddit.customclients.fixRedgifsApiPatch +import app.revanced.patches.reddit.customclients.sync.syncforreddit.extension.sharedExtensionPatch +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/syncforreddit/FixRedgifsApiPatch;" + +@Suppress("unused") +val fixRedgifsApi = fixRedgifsApiPatch( + extensionPatch = sharedExtensionPatch +) { + compatibleWith( + "com.laurencedawson.reddit_sync", + "com.laurencedawson.reddit_sync.pro", + "com.laurencedawson.reddit_sync.dev", + ) + + execute { + // region Patch Redgifs OkHttp3 client. + + createOkHttpClientFingerprint.method.apply { + val index = indexOfFirstInstructionOrThrow { + val reference = getReference() + reference?.name == "build" && reference.definingClass == "Lokhttp3/OkHttpClient\$Builder;" + } + val register = getInstruction(index).registerC + replaceInstruction( + index, + """ + invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->$INSTALL_NEW_CLIENT_METHOD + """ + ) + } + + getDefaultUserAgentFingerprint.method.apply { + addInstructions( + 0, + """ + invoke-static { }, ${getOriginalUserAgentFingerprint.method} + move-result-object v0 + return-object v0 + """ + ) + } + + // endregion + } +} diff --git a/patches/src/main/kotlin/app/revanced/util/BytecodeUtils.kt b/patches/src/main/kotlin/app/revanced/util/BytecodeUtils.kt index 6883776e6..993fa820b 100644 --- a/patches/src/main/kotlin/app/revanced/util/BytecodeUtils.kt +++ b/patches/src/main/kotlin/app/revanced/util/BytecodeUtils.kt @@ -132,6 +132,7 @@ internal val Instruction.registersUsed: List get() = when (this) { is FiveRegisterInstruction -> { when (registerCount) { + 0 -> listOf() 1 -> listOf(registerC) 2 -> listOf(registerC, registerD) 3 -> listOf(registerC, registerD, registerE) From 7a8b618c4e0423f040da752195e8988fc1dc1f80 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 4 Sep 2025 21:33:33 +0000 Subject: [PATCH 22/27] chore: Release v5.35.0-dev.4 [skip ci] # [5.35.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.3...v5.35.0-dev.4) (2025-09-04) ### Features * **Boost/Sync for Reddit:** Add `Fix Redgifs` patch ([#5725](https://github.com/ReVanced/revanced-patches/issues/5725)) ([c66c42e](https://github.com/ReVanced/revanced-patches/commit/c66c42e946cbe7f02e5f27cfb8661ac442835b1e)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd7115414..ec5c64951 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.35.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.3...v5.35.0-dev.4) (2025-09-04) + + +### Features + +* **Boost/Sync for Reddit:** Add `Fix Redgifs` patch ([#5725](https://github.com/ReVanced/revanced-patches/issues/5725)) ([c5e8079](https://github.com/ReVanced/revanced-patches/commit/c5e8079eab08075a72078cd0fa79f3beb1f75d98)) + # [5.35.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.2...v5.35.0-dev.3) (2025-09-04) diff --git a/gradle.properties b/gradle.properties index 2a92decad..ecdc7ff7e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M org.gradle.parallel = true android.useAndroidX = true kotlin.code.style = official -version = 5.35.0-dev.3 +version = 5.35.0-dev.4 From 3951527f510b8b2a4f85206acdaf8fbb31fc29a8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 6 Sep 2025 12:52:48 +0200 Subject: [PATCH 23/27] chore: Sync translations (#5768) --- .../addresources/values-ja-rJP/strings.xml | 78 ++++++++++--------- .../addresources/values-ko-rKR/strings.xml | 30 +++---- .../addresources/values-sv-rSE/strings.xml | 4 +- 3 files changed, 57 insertions(+), 55 deletions(-) diff --git a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml index eac3ba6f9..60ef441c4 100644 --- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml +++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml @@ -987,13 +987,13 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に シーク中のサムネイルはプレーヤー画面全体に表示されます - SponsorBlock を有効にする - SponsorBlock は、ユーザーからの情報提供により YouTube 動画のわずらわしい部分を定義してスキップする機能です + SponsorBlock を有効化 + SponsorBlock は、ユーザーからの情報提供により YouTube 動画のわずらわしい部分をスキップする機能です 外観 - 投票ボタンを表示する - セグメントへの投票ボタンは、プレーヤー オーバーレイに表示されます - セグメントへの投票ボタンは、プレーヤー オーバーレイに表示されません - 四角ボタンを使用する + 投票ボタンを表示 + セグメントへの投票ボタンがプレーヤー オーバーレイに表示されます + セグメントへの投票ボタンはプレーヤー オーバーレイに表示されません + 四角ボタンを使用 ボタンとコントロールの角は直角です ボタンとコントロールの角は丸角です @@ -1005,11 +1005,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に スキップボタンは、セグメントの開始から終了まで表示されます スキップボタンの表示時間 自動非表示設定のスキップボタンと「ハイライトまでスキップ」ボタンが表示される時間の長さ - スキップ取り消しトーストを表示 - セグメントが自動的にスキップされたとき、トーストが表示されます。このトースト通知をタップすると、スキップが取り消されます - セグメントが自動的にスキップされたとき、トーストは表示されません + スキップ トーストを表示 + セグメントが自動的にスキップされたときにトースト通知が表示されます。このトースト通知をタップすると、スキップを取り消すことができます + セグメントが自動的にスキップされたときにトースト通知は表示されません。このトースト通知をタップすると、スキップを取り消すことができます スキップ トーストの表示時間 - スキップ取り消しトーストが表示される時間の長さ + 自動スキップのトースト通知が表示される時間の長さ 1 秒 2 秒 3 秒 @@ -1023,29 +1023,29 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に セグメントを除いた再生時間を表示 すべてのセグメントを除いた再生時間がシークバーに表示されます 動画全体の再生時間のみがシークバーに表示されます - セグメントの作成 + 新しいセグメントの作成 セグメント作成ボタンを表示 - セグメント作成ボタンはプレーヤー オーバーレイに表示されます + セグメント作成ボタンがプレーヤー オーバーレイに表示されます セグメント作成ボタンはプレーヤー オーバーレイに表示されません - セグメントの時間調整幅 + セグメントの位置調整幅 セグメント作成メニュー内の早送り / 巻き戻しボタンで移動する時間 (ミリ秒) 値は正の整数でなければなりません - ガイドラインを見る + ガイドラインを表示 ガイドラインには、新しいセグメントを作成するためのルールやヒントが記載されています ガイドラインに従ってください 新しいセグメントを作成する前に SponsorBlock のガイドラインを確認してください 既読 表示する その他 - API 利用不可時にトーストを表示する - SponsorBlock が利用できない場合は、トーストが表示されます - SponsorBlock が利用できない場合でも、トーストは表示されません - スキップデータを送信する + API 利用不可時にトーストを表示 + SponsorBlock が利用できない場合にトースト通知が表示されます + SponsorBlock が利用できない場合にトースト通知は表示されません + スキップデータの収集を有効化 SponsorBlock リーダーボード にスキップによって節約した時間を送信します。セグメントをスキップする度にデータが送信されます - スキップデータは送信されません + スキップデータの収集は無効です セグメントの長さのしきい値 この値 (秒) よりも短い時間のセグメントは、スキップもプレーヤーに表示もされません - 時間の値が無効です + 時間 (長さ) の値が無効です 非公開ユーザー ID この ID は公開すべきではありません。パスワードのようなものであり、誰とも共有すべきではありません。もし誰かがこの ID を手に入れた場合、あなたになりすますことができます 非公開ユーザー ID は 30 文字以上必要です @@ -1061,9 +1061,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 設定のインポートに成功しました インポートに失敗しました: %s エクスポートに失敗しました: %s - "設定には、SponsorBlock の非公開ユーザー ID が含まれています。この ID はパスワードのようなものであり、決して共有すべきではありません。" + "設定には、SponsorBlock の非公開ユーザー ID が含まれています。 + +このユーザー ID は、パスワードのようなものであり、決して共有すべきではありません。" 今後表示しない - セグメントの挙動を変更 + セグメントに対する動作を変更 スポンサー 有料の宣伝 、有料の紹介、直接的な広告。自己宣伝や好意をもって行う、慈善活動、クリエーター、ウェブサイト、製品などの無償の紹介は含まれません 無報酬の宣伝 / 自己宣伝 @@ -1073,7 +1075,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に ハイライト 動画の中で最も重要な場面 幕間 / オープニング - 実際のコンテンツを含まない区間。このカテゴリーは、一時停止、静止画、繰り返しアニメーションなどを含みます。情報を含むトランジッション (場面転換) は含まれません + 実際のコンテンツを含まない区間。一時停止、静止画、繰り返しアニメーションなど。情報を含むトランジッション (場面転換) は、このカテゴリーではありません 終了画面 / クレジット クレジット、または YouTube の終了画面が表示される場面。情報を含む結論、まとめ部分は、このカテゴリーには含まれません 予告編 / 総集編 / フック @@ -1081,7 +1083,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 尺稼ぎの余談 / 冗談 動画の本筋を理解するために必要のない、尺稼ぎやユーモアのみを目的として追加された脱線的な場面。コンテキストや背景情報を提供する場面は、このカテゴリーに含まれません 音楽: 楽曲以外の区間 - ミュージック ビデオ専用。ミュージック ビデオの中で楽曲が流れていない区間。このカテゴリーのセグメントは、他のカテゴリーのセグメントと重なる場合があります + ミュージック ビデオ専用。ミュージック ビデオの中で楽曲が流れていない区間であり、他の音源に存在しない区間 スキップ ハイライト スポンサーをスキップ @@ -1136,19 +1138,19 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 高評価 低評価 カテゴリーの変更 - 投票できるセグメントがありません + 投票先のセグメントが指定されていません %1$s ~ %2$s セグメントのカテゴリーを選択してください - カテゴリーが設定で無効になっています。送信するには、カテゴリーを有効にしてください。 - セグメント作成 - %s を新しいセグメントの開始時間 / 終了時間に設定しますか? - 開始 - 終了 - 現在 - セグメントの開始時間 - セグメントの終了時間 - 時間は正確ですか? + カテゴリーが設定で無効になっています。送信するには、このカテゴリーを有効にしてください。 + 新しいセグメント + %s を新しいセグメント (SponsorBlock) の開始位置 / 終了位置に設定しますか? + 開始位置 + 終了位置 + 現在の再生位置 + セグメントの開始位置 + セグメントの終了位置 + 範囲は正確ですか? "セグメントの範囲: %1$s @@ -1158,12 +1160,12 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に (%3$s) 送信しますか?" - 開始時間は終了時間より前でなければなりません - 開始時間と終了時間を設定してください + 開始位置を終了位置よりも前にしてください + 先に開始位置と終了位置を設定してください セグメントをプレビューして、スムーズにスキップすることを確認してください セグメントの範囲を手動で編集 - セグメントの開始時間または終了時間を編集しますか? - 時間の値が無効です + セグメントの開始位置または終了位置を編集しますか? + 時間 (位置) の値が無効です 統計 統計情報は一時的に利用できません (API がダウンしています) diff --git a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml index c2a9d56af..9eba09648 100644 --- a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml +++ b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml @@ -402,7 +402,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 전체 화면 광고 숨기기 "전체 화면 광고가 숨겨집니다 -이 설정은 구형 기기에서만 사용할 수 있습니다" +이 기능은 구형 기기에서만 사용할 수 있습니다" 전체 화면 광고가 표시됩니다 \'전체 화면 광고 숨기기\'는 구형 기기에서만 사용할 수 있습니다 @@ -823,15 +823,15 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 태그된 제품 숨기기 태그된 제품이 숨겨집니다 태그된 제품이 표시됩니다 - 예정 버튼 숨기기 - 예정 버튼이 숨겨집니다 - 예정 버튼이 표시됩니다 - \'이 사운드 사용\' 버튼 숨기기 - \'이 사운드 사용\' 버튼이 숨겨집니다 - \'이 사운드 사용\' 버튼이 표시됩니다 - \'이 템플릿 사용\' 버튼 숨기기 - \'이 템플릿 사용\' 버튼이 숨겨집니다 - \'이 템플릿 사용\' 버튼이 표시됩니다 + 예정된 라이브 버튼 숨기기 + 예정된 라이브 버튼이 숨겨집니다 + 예정된 라이브 버튼이 표시됩니다 + 이 사운드 사용 버튼 숨기기 + 이 사운드 사용 버튼이 숨겨집니다 + 이 사운드 사용 버튼이 표시됩니다 + 템플릿 사용 버튼 숨기기 + 템플릿 사용 버튼이 숨겨집니다 + 템플릿 사용 버튼이 표시됩니다 좋아요 버튼 애니메이션을 비활성화하기 좋아요 버튼 상단에 표시되는 애니메이션을 비활성화합니다 좋아요 버튼 상단에 표시되는 애니메이션을 활성화합니다 @@ -975,11 +975,11 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 일반 화질 재생바 썸네일을 활성화합니다 전체 화면 고화질 재생바 썸네일을 활성화합니다 전체 화면 일반 화질 재생바 썸네일을 활성화합니다 - "이 설정을 활성화하면 재생바 썸네일이 없는 실시간 스트림의 썸네일도 복원됩니다. + "이 기능을 활성화하면 재생바 썸네일이 없는 실시간 스트림의 썸네일도 복원됩니다. 재생바 썸네일에는 현재 동영상과 동일한 화질 값이 사용됩니다. -이 설정은 동영상 화질 값이 720p 이하이고 인터넷 연결 상태가 매우 빠를 때 가장 잘 작동합니다." +이 기능은 동영상 화질 값이 720p 이하이고 인터넷 연결 상태가 매우 빠를 때 가장 잘 작동합니다." 이전 재생바 썸네일 복원하기 재생바 상단에서 최소화된 썸네일을 표시합니다 플레이어에서 전체 화면으로 된 썸네일을 표시합니다 @@ -1214,7 +1214,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 이 경우 앱 레이아웃과 기능이 변경되지만 알려지지 않은 부작용이 발생할 수 있습니다. -나중에 이 설정을 비활성화하면 앱 레이아웃 버그를 방지하기 위해 앱 데이터를 지우는 것이 좋습니다." +나중에 이 기능을 비활성화하면 앱 레이아웃 버그를 방지하기 위해 앱 데이터를 지우는 것이 좋습니다." 변경할 앱 버전 19.35.36 - 이전 Shorts 플레이어 아이콘을 복원합니다 19.01.34 - 이전 하단바 아이콘을 복원합니다 @@ -1352,7 +1352,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 이미지 호스트로 yt4.ggpht.com를 사용합니다 "기본 이미지 호스트를 사용합니다 -이 설정을 활성화하면 일부 국가에서 차단된 이미지를 수신할 수 있습니다" +이 기능을 활성화하면 일부 국가에서 차단된 이미지를 수신할 수 있습니다" @@ -1461,7 +1461,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 탭하세요" 원본 오디오 스트림 언어를 사용 중입니다 기본 오디오 스트림 언어를 사용 중입니다 - 이 설정을 사용하려면, \'동영상 스트림 변경하기\'에서 기본 클라이언트를 iOS TV로 변경하세요 + 이 기능을 사용하려면, \'동영상 스트림 변경하기\'에서 기본 클라이언트를 iOS TV로 변경하세요 diff --git a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml index 87ec54748..5186d5796 100644 --- a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml +++ b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml @@ -917,7 +917,7 @@ Inställningar → Uppspelning → Spela upp nästa video automatiskt" - Ogilla-mark. är ej tillg. just nu (API-tidsgräns nådd) + Ogilla-markeringar är för tillfället inte tillgängliga (API-tidsgräns nådd) Ogilla-markeringar är inte tillgängliga (status %d) Ogilla-markeringar är inte tillgängliga (API-gräns för klienten) Ogilla-markeringar är inte tillgängliga (%s) @@ -1125,7 +1125,7 @@ Ditt användar-id är som ett lösenord och det bör aldrig delas." Finns redan" Segmentet har skickats - SponsorBlock ej tillgängligt just nu (API-tidsgräns nådd) + SponsorBlock är för tillfället inte tillgängligt (API-tidsgräns nådd) SponsorBlock är för tillfället inte tillgängligt (status %d) SponsorBlock är för tillfället inte tillgängligt Det gick inte att rösta på segment (API-tidsgräns nådd) From b8629aacb63a3e7ec710a441281c00245c9770d7 Mon Sep 17 00:00:00 2001 From: PainfulPaladins <122171814+PainfulPaladins@users.noreply.github.com> Date: Sat, 6 Sep 2025 13:53:08 +0300 Subject: [PATCH 24/27] feat(Instagram): Add `Hide Stories from Home` patch (#5756) --- .../instagram/hide/stories/Fingerprints.kt | 17 ++++++++++++++++ .../instagram/hide/stories/HideStories.kt | 20 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 patches/src/main/kotlin/app/revanced/patches/instagram/hide/stories/Fingerprints.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/instagram/hide/stories/HideStories.kt diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/stories/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/stories/Fingerprints.kt new file mode 100644 index 000000000..3b58aa8c2 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/stories/Fingerprints.kt @@ -0,0 +1,17 @@ +package app.revanced.patches.instagram.hide.stories +import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.Opcode + + +internal val getOrCreateAvatarViewFingerprint = fingerprint { + parameters() + returns("L") + custom { method, classDef -> + classDef.type == "Lcom/instagram/reels/ui/views/reelavatar/RecyclerReelAvatarView;" + } + opcodes( + Opcode.INVOKE_VIRTUAL, + Opcode.IPUT_OBJECT, + Opcode.INVOKE_VIRTUAL // Add View (Story) + ) + } diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/stories/HideStories.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/stories/HideStories.kt new file mode 100644 index 000000000..65c51cf36 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/stories/HideStories.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.instagram.hide.stories +import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction +import app.revanced.patcher.patch.bytecodePatch + +@Suppress("unused") +val hideStoriesPatch = bytecodePatch( + name = "Hide Stories from Home", + description = "Hides Stories from the main page, by removing the buttons.", + use = false +) { + compatibleWith("com.instagram.android") + + execute { + val addStoryMethod = getOrCreateAvatarViewFingerprint.method // Creates Story + val addStoryEndIndex = getOrCreateAvatarViewFingerprint.patternMatch!!.endIndex + + // Remove addView of Story. + addStoryMethod.removeInstruction(addStoryEndIndex) + } +} \ No newline at end of file From 144af2f07ed4295b6f4d1fa49aa635e1fbcdecb2 Mon Sep 17 00:00:00 2001 From: Eric Ahn Date: Sat, 6 Sep 2025 03:53:26 -0700 Subject: [PATCH 25/27] feat(BaconReader): Add `Fix Redgifs API` patch (#5761) --- extensions/baconreader/build.gradle.kts | 5 ++ .../baconreader/src/main/AndroidManifest.xml | 1 + .../baconreader/FixRedgifsApiPatch.java | 22 ++++++++ patches/api/patches.api | 8 +++ .../baconreader/fix/redgifs/Fingerprints.kt | 13 +++++ .../fix/redgifs/FixRedgifsApiPatch.kt | 53 +++++++++++++++++++ .../misc/extension/SharedExtensionPatch.kt | 6 +++ .../misc/extension/hooks/InitHook.kt | 9 ++++ 8 files changed, 117 insertions(+) create mode 100644 extensions/baconreader/build.gradle.kts create mode 100644 extensions/baconreader/src/main/AndroidManifest.xml create mode 100644 extensions/baconreader/src/main/java/app/revanced/extension/baconreader/FixRedgifsApiPatch.java create mode 100644 patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/fix/redgifs/Fingerprints.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/fix/redgifs/FixRedgifsApiPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/SharedExtensionPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/hooks/InitHook.kt diff --git a/extensions/baconreader/build.gradle.kts b/extensions/baconreader/build.gradle.kts new file mode 100644 index 000000000..804e90884 --- /dev/null +++ b/extensions/baconreader/build.gradle.kts @@ -0,0 +1,5 @@ +dependencies { + compileOnly(project(":extensions:shared:library")) + compileOnly(libs.annotation) + compileOnly(libs.okhttp) +} diff --git a/extensions/baconreader/src/main/AndroidManifest.xml b/extensions/baconreader/src/main/AndroidManifest.xml new file mode 100644 index 000000000..9b65eb06c --- /dev/null +++ b/extensions/baconreader/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/extensions/baconreader/src/main/java/app/revanced/extension/baconreader/FixRedgifsApiPatch.java b/extensions/baconreader/src/main/java/app/revanced/extension/baconreader/FixRedgifsApiPatch.java new file mode 100644 index 000000000..943da63fa --- /dev/null +++ b/extensions/baconreader/src/main/java/app/revanced/extension/baconreader/FixRedgifsApiPatch.java @@ -0,0 +1,22 @@ +package app.revanced.extension.baconreader; + +import app.revanced.extension.shared.fixes.redgifs.BaseFixRedgifsApiPatch; +import okhttp3.OkHttpClient; + +/** + * @noinspection unused + */ +public class FixRedgifsApiPatch extends BaseFixRedgifsApiPatch { + static { + INSTANCE = new FixRedgifsApiPatch(); + } + + public String getDefaultUserAgent() { + // BaconReader uses a static user agent for Redgifs API calls + return "BaconReader"; + } + + public static OkHttpClient install(OkHttpClient.Builder builder) { + return builder.addInterceptor(INSTANCE).build(); + } +} diff --git a/patches/api/patches.api b/patches/api/patches.api index 8b275fc72..d57f9cd93 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -535,6 +535,14 @@ public final class app/revanced/patches/reddit/customclients/baconreader/api/Spo public static final fun getSpoofClientPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/reddit/customclients/baconreader/fix/redgifs/FixRedgifsApiPatchKt { + public static final fun getFixRedgifsApi ()Lapp/revanced/patcher/patch/BytecodePatch; +} + +public final class app/revanced/patches/reddit/customclients/baconreader/misc/extension/SharedExtensionPatchKt { + public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/reddit/customclients/boostforreddit/ads/DisableAdsPatchKt { public static final fun getDisableAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/fix/redgifs/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/fix/redgifs/Fingerprints.kt new file mode 100644 index 000000000..524beeea0 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/fix/redgifs/Fingerprints.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.reddit.customclients.baconreader.fix.redgifs + +import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.AccessFlags + + +internal val getOkHttpClientFingerprint = fingerprint { + returns("Lokhttp3/OkHttpClient;") + parameters() + custom { method, classDef -> + classDef.type == "Lcom/onelouder/baconreader/media/gfycat/RedGifsManager;" && method.name == "getOkhttpClient" + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/fix/redgifs/FixRedgifsApiPatch.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/fix/redgifs/FixRedgifsApiPatch.kt new file mode 100644 index 000000000..4cd9db006 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/fix/redgifs/FixRedgifsApiPatch.kt @@ -0,0 +1,53 @@ +package app.revanced.patches.reddit.customclients.baconreader.fix.redgifs + +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction +import app.revanced.patcher.extensions.InstructionExtensions.removeInstructions +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patches.reddit.customclients.INSTALL_NEW_CLIENT_METHOD +import app.revanced.patches.reddit.customclients.baconreader.misc.extension.sharedExtensionPatch +import app.revanced.patches.reddit.customclients.fixRedgifsApiPatch +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.iface.reference.TypeReference + +internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/baconreader/FixRedgifsApiPatch;" + +@Suppress("unused") +val fixRedgifsApi = fixRedgifsApiPatch( + extensionPatch = sharedExtensionPatch +) { + compatibleWith( + "com.onelouder.baconreader", + "com.onelouder.baconreader.premium", + ) + + execute { + // region Patch Redgifs OkHttp3 client. + + getOkHttpClientFingerprint.method.apply { + // Remove conflicting OkHttp interceptors. + val originalInterceptorInstallIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.NEW_INSTANCE && getReference()?.type == "Lcom/onelouder/baconreader/media/gfycat/RedGifsManager\$HeaderInterceptor;" + } + removeInstructions(originalInterceptorInstallIndex, 5) + + val index = indexOfFirstInstructionOrThrow { + val reference = getReference() + reference?.name == "build" && reference.definingClass == "Lokhttp3/OkHttpClient\$Builder;" + } + val register = getInstruction(index).registerC + replaceInstruction( + index, + """ + invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->$INSTALL_NEW_CLIENT_METHOD + """ + ) + } + + // endregion + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/SharedExtensionPatch.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/SharedExtensionPatch.kt new file mode 100644 index 000000000..64291f761 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/SharedExtensionPatch.kt @@ -0,0 +1,6 @@ +package app.revanced.patches.reddit.customclients.baconreader.misc.extension + +import app.revanced.patches.reddit.customclients.baconreader.misc.extension.hooks.initHook +import app.revanced.patches.shared.misc.extension.sharedExtensionPatch + +val sharedExtensionPatch = sharedExtensionPatch("baconreader", initHook) diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/hooks/InitHook.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/hooks/InitHook.kt new file mode 100644 index 000000000..fe644145b --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/hooks/InitHook.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.reddit.customclients.baconreader.misc.extension.hooks + +import app.revanced.patches.shared.misc.extension.extensionHook + +internal val initHook = extensionHook { + custom { method, _ -> + method.definingClass == "Lcom/onelouder/baconreader/BaconReader;" && method.name == "onCreate" + } +} From 603e2d018c9fc433ab11b7e3f837bfbdffe5ffb4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 6 Sep 2025 10:56:54 +0000 Subject: [PATCH 26/27] chore: Release v5.35.0-dev.5 [skip ci] # [5.35.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.4...v5.35.0-dev.5) (2025-09-06) ### Features * **BaconReader:** Add `Fix Redgifs API` patch ([#5761](https://github.com/ReVanced/revanced-patches/issues/5761)) ([144af2f](https://github.com/ReVanced/revanced-patches/commit/144af2f07ed4295b6f4d1fa49aa635e1fbcdecb2)) * **Instagram:** Add `Hide Stories from Home` patch ([#5756](https://github.com/ReVanced/revanced-patches/issues/5756)) ([b8629aa](https://github.com/ReVanced/revanced-patches/commit/b8629aacb63a3e7ec710a441281c00245c9770d7)) --- CHANGELOG.md | 8 ++++++++ gradle.properties | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec5c64951..92d156f85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# [5.35.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.4...v5.35.0-dev.5) (2025-09-06) + + +### Features + +* **BaconReader:** Add `Fix Redgifs API` patch ([#5761](https://github.com/ReVanced/revanced-patches/issues/5761)) ([08868c0](https://github.com/ReVanced/revanced-patches/commit/08868c00d3c4f1f37f4a77f333a03ca5a3259b59)) +* **Instagram:** Add `Hide Stories from Home` patch ([#5756](https://github.com/ReVanced/revanced-patches/issues/5756)) ([3ae3251](https://github.com/ReVanced/revanced-patches/commit/3ae3251dc0317b6ced136fe9aa14be369642f203)) + # [5.35.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.35.0-dev.3...v5.35.0-dev.4) (2025-09-04) diff --git a/gradle.properties b/gradle.properties index ecdc7ff7e..3f4f9aab6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M org.gradle.parallel = true android.useAndroidX = true kotlin.code.style = official -version = 5.35.0-dev.4 +version = 5.35.0-dev.5 From 97645aa9f4ce15623ecbbf392a8741df2bd28d91 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 21:32:56 +0200 Subject: [PATCH 27/27] chore: Sync translations (#5777) --- .../main/resources/addresources/values-ja-rJP/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml index 60ef441c4..eb37b8a57 100644 --- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml +++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml @@ -1005,11 +1005,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に スキップボタンは、セグメントの開始から終了まで表示されます スキップボタンの表示時間 自動非表示設定のスキップボタンと「ハイライトまでスキップ」ボタンが表示される時間の長さ - スキップ トーストを表示 + 自動スキップ時にトーストを表示 セグメントが自動的にスキップされたときにトースト通知が表示されます。このトースト通知をタップすると、スキップを取り消すことができます セグメントが自動的にスキップされたときにトースト通知は表示されません。このトースト通知をタップすると、スキップを取り消すことができます スキップ トーストの表示時間 - 自動スキップのトースト通知が表示される時間の長さ + 自動スキップ時にトースト通知が表示される時間の長さ 1 秒 2 秒 3 秒 @@ -1030,7 +1030,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に セグメントの位置調整幅 セグメント作成メニュー内の早送り / 巻き戻しボタンで移動する時間 (ミリ秒) 値は正の整数でなければなりません - ガイドラインを表示 + ガイドラインを見る ガイドラインには、新しいセグメントを作成するためのルールやヒントが記載されています ガイドラインに従ってください 新しいセグメントを作成する前に SponsorBlock のガイドラインを確認してください @@ -1083,7 +1083,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 尺稼ぎの余談 / 冗談 動画の本筋を理解するために必要のない、尺稼ぎやユーモアのみを目的として追加された脱線的な場面。コンテキストや背景情報を提供する場面は、このカテゴリーに含まれません 音楽: 楽曲以外の区間 - ミュージック ビデオ専用。ミュージック ビデオの中で楽曲が流れていない区間であり、他の音源に存在しない区間 + ミュージック ビデオ専用。ミュージック ビデオの中で楽曲が流れていない区間であり、公式や他のメディアの音源に存在しない区間 スキップ ハイライト スポンサーをスキップ