mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-09 19:03:55 +01:00
Compare commits
9 Commits
v4.12.1-de
...
v4.13.1-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95f8e9b3a9 | ||
|
|
d7be94a193 | ||
|
|
e4e20bec6c | ||
|
|
b8bd63a34c | ||
|
|
8b602ca6be | ||
|
|
87eb83607c | ||
|
|
567121d641 | ||
|
|
45e4f70137 | ||
|
|
f814d87c17 |
36
CHANGELOG.md
36
CHANGELOG.md
@@ -1,3 +1,39 @@
|
|||||||
|
## [4.13.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.13.0...v4.13.1-dev.1) (2024-08-15)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Check watch history domain name resolution:** Add compatibility field ([6c598f0](https://github.com/ReVanced/revanced-patches/commit/6c598f084ed90ee1318e4c66d8c1751c797b8e3b))
|
||||||
|
|
||||||
|
# [4.13.0](https://github.com/ReVanced/revanced-patches/compare/v4.12.0...v4.13.0) (2024-08-15)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - GmsCore support:** Fix notifications not working by using the correct permissions ([19ddae2](https://github.com/ReVanced/revanced-patches/commit/19ddae2d15e513e18eb1556c468cd94bd197685b))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Google Photos:** Add `Spoof features` patch ([#3459](https://github.com/ReVanced/revanced-patches/issues/3459)) ([7c218cd](https://github.com/ReVanced/revanced-patches/commit/7c218cd168aa72eb99bcb47d12dfa45616e8ad88))
|
||||||
|
* **SCB Easy:** Remove broken `Remove debugging detection` patch ([#3518](https://github.com/ReVanced/revanced-patches/issues/3518)) ([f4e23cb](https://github.com/ReVanced/revanced-patches/commit/f4e23cbb8a24638318d8cee20a1991c51855d9d2))
|
||||||
|
* **YouTube:** Add `Check watch history domain name resolution` patch ([#3537](https://github.com/ReVanced/revanced-patches/issues/3537)) ([2af1425](https://github.com/ReVanced/revanced-patches/commit/2af142525cda07a131335faadd4b3889979fd077))
|
||||||
|
|
||||||
|
# [4.13.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.13.0-dev.1...v4.13.0-dev.2) (2024-08-15)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube:** Add `Check watch history domain name resolution` patch ([#3537](https://github.com/ReVanced/revanced-patches/issues/3537)) ([2af1425](https://github.com/ReVanced/revanced-patches/commit/2af142525cda07a131335faadd4b3889979fd077))
|
||||||
|
|
||||||
|
# [4.13.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.12.1-dev.1...v4.13.0-dev.1) (2024-08-15)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Google Photos:** Add `Spoof features` patch ([#3459](https://github.com/ReVanced/revanced-patches/issues/3459)) ([7c218cd](https://github.com/ReVanced/revanced-patches/commit/7c218cd168aa72eb99bcb47d12dfa45616e8ad88))
|
||||||
|
* **SCB Easy:** Remove broken `Remove debugging detection` patch ([#3518](https://github.com/ReVanced/revanced-patches/issues/3518)) ([f4e23cb](https://github.com/ReVanced/revanced-patches/commit/f4e23cbb8a24638318d8cee20a1991c51855d9d2))
|
||||||
|
|
||||||
## [4.12.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.12.0...v4.12.1-dev.1) (2024-08-15)
|
## [4.12.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.12.0...v4.12.1-dev.1) (2024-08-15)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -279,6 +279,16 @@ public final class app/revanced/patches/googlenews/misc/integrations/Integration
|
|||||||
public static final field INSTANCE Lapp/revanced/patches/googlenews/misc/integrations/IntegrationsPatch;
|
public static final field INSTANCE Lapp/revanced/patches/googlenews/misc/integrations/IntegrationsPatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/googlephotos/features/SpoofFeaturesPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||||
|
public static final field INSTANCE Lapp/revanced/patches/googlephotos/features/SpoofFeaturesPatch;
|
||||||
|
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||||
|
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/googlephotos/features/fingerprints/InitializeFeaturesEnumFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint {
|
||||||
|
public static final field INSTANCE Lapp/revanced/patches/googlephotos/features/fingerprints/InitializeFeaturesEnumFingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/googlephotos/misc/gms/GmsCoreSupportPatch : app/revanced/patches/shared/misc/gms/BaseGmsCoreSupportPatch {
|
public final class app/revanced/patches/googlephotos/misc/gms/GmsCoreSupportPatch : app/revanced/patches/shared/misc/gms/BaseGmsCoreSupportPatch {
|
||||||
public static final field INSTANCE Lapp/revanced/patches/googlephotos/misc/gms/GmsCoreSupportPatch;
|
public static final field INSTANCE Lapp/revanced/patches/googlephotos/misc/gms/GmsCoreSupportPatch;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
org.gradle.parallel = true
|
org.gradle.parallel = true
|
||||||
org.gradle.caching = true
|
org.gradle.caching = true
|
||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 4.12.1-dev.1
|
version = 4.13.1-dev.1
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package app.revanced.patches.googlephotos.features
|
||||||
|
|
||||||
|
import app.revanced.patcher.patch.annotation.Patch
|
||||||
|
import app.revanced.patches.all.misc.build.BaseSpoofBuildInfoPatch
|
||||||
|
|
||||||
|
@Patch(description = "Spoof build info to Google Pixel XL.")
|
||||||
|
internal class SpoofBuildInfoPatch : BaseSpoofBuildInfoPatch() {
|
||||||
|
override val brand = "google"
|
||||||
|
override val manufacturer = "Google"
|
||||||
|
override val device = "marlin"
|
||||||
|
override val product = "marlin"
|
||||||
|
override val model = "Pixel XL"
|
||||||
|
override val fingerprint = "google/marlin/marlin:10/QP1A.191005.007.A3/5972272:user/release-keys"
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
package app.revanced.patches.googlephotos.features
|
||||||
|
|
||||||
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstructions
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||||
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
|
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||||
|
import app.revanced.patcher.patch.annotation.Patch
|
||||||
|
import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringArrayPatchOption
|
||||||
|
import app.revanced.patches.googlephotos.features.fingerprints.InitializeFeaturesEnumFingerprint
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import app.revanced.util.resultOrThrow
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||||
|
|
||||||
|
@Patch(
|
||||||
|
name = "Spoof features",
|
||||||
|
description = "Spoofs the device to enable Google Pixel exclusive features, including unlimited storage.",
|
||||||
|
dependencies = [SpoofBuildInfoPatch::class],
|
||||||
|
compatiblePackages = [CompatiblePackage("com.google.android.apps.photos")],
|
||||||
|
)
|
||||||
|
@Suppress("unused")
|
||||||
|
object SpoofFeaturesPatch : BytecodePatch(setOf(InitializeFeaturesEnumFingerprint)) {
|
||||||
|
private val featuresToEnable by stringArrayPatchOption(
|
||||||
|
"featuresToEnable",
|
||||||
|
arrayOf(
|
||||||
|
"com.google.android.apps.photos.NEXUS_PRELOAD",
|
||||||
|
"com.google.android.apps.photos.nexus_preload",
|
||||||
|
),
|
||||||
|
title = "Features to enable",
|
||||||
|
description = "Google Pixel exclusive features to enable. Features up to Pixel XL enable the unlimited storage feature.",
|
||||||
|
required = true,
|
||||||
|
)
|
||||||
|
|
||||||
|
private val featuresToDisable by stringArrayPatchOption(
|
||||||
|
"featuresToDisable",
|
||||||
|
arrayOf(
|
||||||
|
"com.google.android.apps.photos.PIXEL_2017_PRELOAD",
|
||||||
|
"com.google.android.apps.photos.PIXEL_2018_PRELOAD",
|
||||||
|
"com.google.android.apps.photos.PIXEL_2019_MIDYEAR_PRELOAD",
|
||||||
|
"com.google.android.apps.photos.PIXEL_2019_PRELOAD",
|
||||||
|
"com.google.android.feature.PIXEL_2020_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2020_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2021_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2021_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2022_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2022_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2023_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2023_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2024_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2024_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2025_MIDYEAR_EXPERIENCE",
|
||||||
|
),
|
||||||
|
title = "Features to disable",
|
||||||
|
description = "Google Pixel exclusive features to disable." +
|
||||||
|
"Features after Pixel XL may have to be disabled for unlimited storage depending on the device.",
|
||||||
|
required = true,
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun execute(context: BytecodeContext) {
|
||||||
|
val featuresToEnable = featuresToEnable!!.toSet()
|
||||||
|
val featuresToDisable = featuresToDisable!!.toSet()
|
||||||
|
|
||||||
|
InitializeFeaturesEnumFingerprint.resultOrThrow().let { result ->
|
||||||
|
result.mutableMethod.apply {
|
||||||
|
getInstructions().filter { it.opcode == Opcode.CONST_STRING }.forEach {
|
||||||
|
val feature = it.getReference<StringReference>()!!.string
|
||||||
|
|
||||||
|
val spoofedFeature = when (feature) {
|
||||||
|
in featuresToEnable -> "android.hardware.wifi"
|
||||||
|
in featuresToDisable -> "dummy"
|
||||||
|
else -> return@forEach
|
||||||
|
}
|
||||||
|
|
||||||
|
val constStringIndex = it.location.index
|
||||||
|
val constStringRegister = (it as OneRegisterInstruction).registerA
|
||||||
|
|
||||||
|
replaceInstruction(
|
||||||
|
constStringIndex,
|
||||||
|
"const-string v$constStringRegister, \"$spoofedFeature\"",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package app.revanced.patches.googlephotos.features.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
|
||||||
|
object InitializeFeaturesEnumFingerprint : MethodFingerprint(
|
||||||
|
strings = listOf("com.google.android.apps.photos.NEXUS_PRELOAD"),
|
||||||
|
)
|
||||||
@@ -10,7 +10,7 @@ import app.revanced.util.exception
|
|||||||
|
|
||||||
@Patch(
|
@Patch(
|
||||||
name = "Hide ads",
|
name = "Hide ads",
|
||||||
description = "Hides ads in stories, discover, profile, etc." +
|
description = "Hides ads in stories, discover, profile, etc. " +
|
||||||
"An ad can still appear once when refreshing the home feed.",
|
"An ad can still appear once when refreshing the home feed.",
|
||||||
compatiblePackages = [CompatiblePackage("com.instagram.android")],
|
compatiblePackages = [CompatiblePackage("com.instagram.android")],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import app.revanced.util.exception
|
|||||||
|
|
||||||
@Patch(
|
@Patch(
|
||||||
name = "Spoof Android device ID",
|
name = "Spoof Android device ID",
|
||||||
description = "Spoofs the Android device ID used by the app for account authentication." +
|
description = "Spoofs the Android device ID used by the app for account authentication. " +
|
||||||
"This can be used to copy the account to another device.",
|
"This can be used to copy the account to another device.",
|
||||||
compatiblePackages = [
|
compatiblePackages = [
|
||||||
CompatiblePackage(
|
CompatiblePackage(
|
||||||
|
|||||||
@@ -10,11 +10,13 @@ import app.revanced.patches.scbeasy.detection.debugging.fingerprints.DebuggingDe
|
|||||||
|
|
||||||
@Patch(
|
@Patch(
|
||||||
use = false,
|
use = false,
|
||||||
name = "Remove debugging detection",
|
|
||||||
description = "Removes the USB and wireless debugging checks.",
|
description = "Removes the USB and wireless debugging checks.",
|
||||||
compatiblePackages = [CompatiblePackage("com.scb.phone")]
|
compatiblePackages = [CompatiblePackage("com.scb.phone")]
|
||||||
)
|
)
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
|
@Deprecated("This patch no longer work and will be removed in the future " +
|
||||||
|
"due to the complexity of the application.\n" +
|
||||||
|
"See https://github.com/ReVanced/revanced-patches/issues/3517 for more details.")
|
||||||
object RemoveDebuggingDetectionPatch : BytecodePatch(
|
object RemoveDebuggingDetectionPatch : BytecodePatch(
|
||||||
setOf(DebuggingDetectionFingerprint)
|
setOf(DebuggingDetectionFingerprint)
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -18,11 +18,13 @@ import app.revanced.patches.shared.misc.gms.fingerprints.GooglePlayUtilityFinger
|
|||||||
import app.revanced.patches.shared.misc.gms.fingerprints.ServiceCheckFingerprint
|
import app.revanced.patches.shared.misc.gms.fingerprints.ServiceCheckFingerprint
|
||||||
import app.revanced.util.exception
|
import app.revanced.util.exception
|
||||||
import app.revanced.util.getReference
|
import app.revanced.util.getReference
|
||||||
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
import app.revanced.util.returnEarly
|
import app.revanced.util.returnEarly
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c
|
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c
|
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||||
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableStringReference
|
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableStringReference
|
||||||
import com.android.tools.smali.dexlib2.util.MethodUtil
|
import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||||
@@ -112,11 +114,20 @@ abstract class BaseGmsCoreSupportPatch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Verify GmsCore is installed and whitelisted for power optimizations and background usage.
|
// Verify GmsCore is installed and whitelisted for power optimizations and background usage.
|
||||||
mainActivityOnCreateFingerprint.result?.mutableMethod?.addInstructions(
|
mainActivityOnCreateFingerprint.result?.mutableMethod?.apply {
|
||||||
0,
|
val setContextIndex = indexOfFirstInstructionOrThrow {
|
||||||
"invoke-static/range { p0 .. p0 }, Lapp/revanced/integrations/shared/GmsCoreSupport;->" +
|
val reference = getReference<MethodReference>() ?: return@indexOfFirstInstructionOrThrow false
|
||||||
"checkGmsCore(Landroid/app/Activity;)V",
|
|
||||||
) ?: throw mainActivityOnCreateFingerprint.exception
|
reference.toString() == "Lapp/revanced/integrations/shared/Utils;->setContext(Landroid/content/Context;)V"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add after setContext call, because this patch needs the context.
|
||||||
|
addInstructions(
|
||||||
|
setContextIndex + 1,
|
||||||
|
"invoke-static/range { p0 .. p0 }, Lapp/revanced/integrations/shared/GmsCoreSupport;->" +
|
||||||
|
"checkGmsCore(Landroid/app/Activity;)V",
|
||||||
|
)
|
||||||
|
} ?: throw mainActivityOnCreateFingerprint.exception
|
||||||
|
|
||||||
// Change the vendor of GmsCore in ReVanced Integrations.
|
// Change the vendor of GmsCore in ReVanced Integrations.
|
||||||
GmsCoreSupportFingerprint.result?.mutableClass?.methods
|
GmsCoreSupportFingerprint.result?.mutableClass?.methods
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch
|
|||||||
|
|
||||||
@Patch(
|
@Patch(
|
||||||
name = "Bypass image region restrictions",
|
name = "Bypass image region restrictions",
|
||||||
description = "Adds an option to use a different host for user avatar and channel images," +
|
description = "Adds an option to use a different host for user avatar and channel images " +
|
||||||
"and can fix missing images that are blocked in some countries.",
|
"and can fix missing images that are blocked in some countries.",
|
||||||
dependencies = [
|
dependencies = [
|
||||||
IntegrationsPatch::class,
|
IntegrationsPatch::class,
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
package app.revanced.patches.youtube.misc.dns
|
||||||
|
|
||||||
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
|
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||||
|
import app.revanced.patcher.patch.annotation.Patch
|
||||||
|
import app.revanced.patches.all.misc.resources.AddResourcesPatch
|
||||||
|
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||||
|
import app.revanced.patches.youtube.shared.fingerprints.MainActivityOnCreateFingerprint
|
||||||
|
import app.revanced.util.resultOrThrow
|
||||||
|
|
||||||
|
@Patch(
|
||||||
|
name = "Check watch history domain name resolution",
|
||||||
|
description = "Checks if the device DNS server is preventing user watch history from being saved.",
|
||||||
|
dependencies = [IntegrationsPatch::class],
|
||||||
|
compatiblePackages = [
|
||||||
|
CompatiblePackage(
|
||||||
|
"com.google.android.youtube",
|
||||||
|
[
|
||||||
|
"18.32.39",
|
||||||
|
"18.37.36",
|
||||||
|
"18.38.44",
|
||||||
|
"18.43.45",
|
||||||
|
"18.44.41",
|
||||||
|
"18.45.43",
|
||||||
|
"18.48.39",
|
||||||
|
"18.49.37",
|
||||||
|
"19.01.34",
|
||||||
|
"19.02.39",
|
||||||
|
"19.03.36",
|
||||||
|
"19.04.38",
|
||||||
|
"19.05.36",
|
||||||
|
"19.06.39",
|
||||||
|
"19.07.40",
|
||||||
|
"19.08.36",
|
||||||
|
"19.09.38",
|
||||||
|
"19.10.39",
|
||||||
|
"19.11.43",
|
||||||
|
"19.12.41",
|
||||||
|
"19.13.37",
|
||||||
|
"19.14.43",
|
||||||
|
"19.15.36",
|
||||||
|
"19.16.39",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
@Suppress("unused")
|
||||||
|
internal object CheckWatchHistoryDomainNameResolutionPatch : BytecodePatch(
|
||||||
|
setOf(MainActivityOnCreateFingerprint),
|
||||||
|
) {
|
||||||
|
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
|
||||||
|
"Lapp/revanced/integrations/youtube/patches/CheckWatchHistoryDomainNameResolutionPatch;"
|
||||||
|
|
||||||
|
override fun execute(context: BytecodeContext) {
|
||||||
|
AddResourcesPatch(this::class)
|
||||||
|
|
||||||
|
MainActivityOnCreateFingerprint.resultOrThrow().mutableMethod.addInstructions(
|
||||||
|
// FIXME: Insert index must be greater than the insert index used by GmsCoreSupport,
|
||||||
|
// as both patch the same method and GmsCoreSupport check should be first,
|
||||||
|
// but the patch does not depend on GmsCoreSupport, so it should not be possible to enforce this
|
||||||
|
// unless a third patch is added that this patch and GmsCoreSupport depend on to manage
|
||||||
|
// the order of the patches.
|
||||||
|
1,
|
||||||
|
"invoke-static/range { p0 .. p0 }, $INTEGRATIONS_CLASS_DESCRIPTOR->checkDnsResolver(Landroid/app/Activity;)V",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1045,6 +1045,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
|||||||
<string name="revanced_announcements_connection_failed">Failed connecting to announcements provider</string>
|
<string name="revanced_announcements_connection_failed">Failed connecting to announcements provider</string>
|
||||||
<string name="revanced_announcements_dialog_dismiss">Dismiss</string>
|
<string name="revanced_announcements_dialog_dismiss">Dismiss</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="misc.dns.CheckWatchHistoryDomainNameResolutionPatch">
|
||||||
|
<string name="revanced_check_watch_history_domain_name_dialog_title">Warning</string>
|
||||||
|
<string name="revanced_check_watch_history_domain_name_dialog_message">Your watch history is not being saved.<br><br>This most likely is caused by a DNS ad blocker or network proxy.<br><br>To fix this, whitelist <b>s.youtube.com</b> or turn off all DNS blockers and proxies.</string>
|
||||||
|
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Do not show again</string>
|
||||||
|
</patch>
|
||||||
<patch id="misc.autorepeat.AutoRepeatPatch">
|
<patch id="misc.autorepeat.AutoRepeatPatch">
|
||||||
<string name="revanced_auto_repeat_title">Enable auto-repeat</string>
|
<string name="revanced_auto_repeat_title">Enable auto-repeat</string>
|
||||||
<string name="revanced_auto_repeat_summary_on">Auto-repeat is enabled</string>
|
<string name="revanced_auto_repeat_summary_on">Auto-repeat is enabled</string>
|
||||||
@@ -1135,7 +1140,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
|||||||
<string name="revanced_spoof_client_summary_off">Client is not spoofed\n\nVideo playback may not work</string>
|
<string name="revanced_spoof_client_summary_off">Client is not spoofed\n\nVideo playback may not work</string>
|
||||||
<string name="revanced_spoof_client_user_dialog_message">Turning off this setting may cause video playback issues.</string>
|
<string name="revanced_spoof_client_user_dialog_message">Turning off this setting may cause video playback issues.</string>
|
||||||
<string name="revanced_spoof_client_use_ios_title">Spoof client to iOS</string>
|
<string name="revanced_spoof_client_use_ios_title">Spoof client to iOS</string>
|
||||||
<string name="revanced_spoof_client_use_ios_summary_on">Client is currently spoofed to iOS\n\nSide effects include:\n• HDR video may not be available\n• Watch history may not work</string>
|
<string name="revanced_spoof_client_use_ios_summary_on">Client is currently spoofed to iOS\n\nSide effects include:\n• HDR video may not be available\n• Watch history does not work with a brand account</string>
|
||||||
<string name="revanced_spoof_client_use_ios_summary_off">Client is currently spoofed to Android VR\n\nSide effects include:\n• No HDR video\n• Kids videos do not playback\n• Paused videos can randomly resume\n• Low quality Shorts seekbar thumbnails\n• Download action button is hidden\n• End screen cards are hidden</string>
|
<string name="revanced_spoof_client_use_ios_summary_off">Client is currently spoofed to Android VR\n\nSide effects include:\n• No HDR video\n• Kids videos do not playback\n• Paused videos can randomly resume\n• Low quality Shorts seekbar thumbnails\n• Download action button is hidden\n• End screen cards are hidden</string>
|
||||||
<string name="revanced_spoof_client_storyboard_timeout">Spoof client thumbnails not available (API timed out)</string>
|
<string name="revanced_spoof_client_storyboard_timeout">Spoof client thumbnails not available (API timed out)</string>
|
||||||
<string name="revanced_spoof_client_storyboard_io_exception">Spoof client thumbnails temporarily not available: %s</string>
|
<string name="revanced_spoof_client_storyboard_io_exception">Spoof client thumbnails temporarily not available: %s</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user