mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-08 18:33:57 +01:00
Compare commits
11 Commits
v4.7.0-dev
...
v4.7.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04a72d52de | ||
|
|
be76e49a8b | ||
|
|
fa1c616014 | ||
|
|
e97aaf4aae | ||
|
|
92c90ec208 | ||
|
|
b4e8beb8ec | ||
|
|
f2fe0d5c6f | ||
|
|
3d3197701c | ||
|
|
1ac612798b | ||
|
|
e1ed1aee69 | ||
|
|
795ccac990 |
29
CHANGELOG.md
29
CHANGELOG.md
@@ -1,3 +1,32 @@
|
|||||||
|
# [4.7.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v4.7.0-dev.5...v4.7.0-dev.6) (2024-04-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube - Hide Shorts components:** Hide `Shop`, `Location` and `Save sound to playlist` buttons ([#3018](https://github.com/ReVanced/revanced-patches/issues/3018)) ([5210ac4](https://github.com/ReVanced/revanced-patches/commit/5210ac431c191987264865bf8e789ea9f3fdd360))
|
||||||
|
|
||||||
|
# [4.7.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v4.7.0-dev.4...v4.7.0-dev.5) (2024-04-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Hide Shorts components:** Correctly hide Shorts if navigation tab is changed using device back button ([#3007](https://github.com/ReVanced/revanced-patches/issues/3007)) ([e5848e9](https://github.com/ReVanced/revanced-patches/commit/e5848e99c4cc838595164ef673a77fe60d28086b))
|
||||||
|
|
||||||
|
# [4.7.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v4.7.0-dev.3...v4.7.0-dev.4) (2024-04-09)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Amazon:** Add `Always allow deep-linking` patch ([#3000](https://github.com/ReVanced/revanced-patches/issues/3000)) ([a92b7fb](https://github.com/ReVanced/revanced-patches/commit/a92b7fb43c8b1b45577360cdc6d883fe2815c2f2))
|
||||||
|
* **Twitter:** Add `Sanitize sharing links` patch ([#3003](https://github.com/ReVanced/revanced-patches/issues/3003)) ([186b887](https://github.com/ReVanced/revanced-patches/commit/186b8874157eef1b882b05d491ba1d4ca2809535))
|
||||||
|
|
||||||
|
# [4.7.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v4.7.0-dev.2...v4.7.0-dev.3) (2024-04-09)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Tumblr - Fix old versions:** Improve reliability by removing remnances of Tumblr Live ([#2988](https://github.com/ReVanced/revanced-patches/issues/2988)) ([897b4db](https://github.com/ReVanced/revanced-patches/commit/897b4dbce984270ae1fd7de5bd30bd05153e45f2))
|
||||||
|
|
||||||
# [4.7.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.7.0-dev.1...v4.7.0-dev.2) (2024-04-06)
|
# [4.7.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.7.0-dev.1...v4.7.0-dev.2) (2024-04-06)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -152,6 +152,12 @@ public final class app/revanced/patches/all/telephony/sim/spoof/SpoofSimCountryP
|
|||||||
public fun transform (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Lkotlin/Pair;)V
|
public fun transform (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Lkotlin/Pair;)V
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/amazon/deeplinking/DeepLinkingPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||||
|
public static final field INSTANCE Lapp/revanced/patches/amazon/deeplinking/DeepLinkingPatch;
|
||||||
|
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/backdrops/misc/pro/ProUnlockPatch : app/revanced/patcher/patch/BytecodePatch {
|
public final class app/revanced/patches/backdrops/misc/pro/ProUnlockPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||||
public static final field INSTANCE Lapp/revanced/patches/backdrops/misc/pro/ProUnlockPatch;
|
public static final field INSTANCE Lapp/revanced/patches/backdrops/misc/pro/ProUnlockPatch;
|
||||||
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||||
@@ -1062,10 +1068,6 @@ public final class app/revanced/patches/tumblr/fixes/FixOldVersionsPatch : app/r
|
|||||||
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/tumblr/fixes/fingerprints/HttpPathParserFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint {
|
|
||||||
public static final field INSTANCE Lapp/revanced/patches/tumblr/fixes/fingerprints/HttpPathParserFingerprint;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final class app/revanced/patches/tumblr/live/DisableTumblrLivePatch : app/revanced/patcher/patch/BytecodePatch {
|
public final class app/revanced/patches/tumblr/live/DisableTumblrLivePatch : app/revanced/patcher/patch/BytecodePatch {
|
||||||
public static final field INSTANCE Lapp/revanced/patches/tumblr/live/DisableTumblrLivePatch;
|
public static final field INSTANCE Lapp/revanced/patches/tumblr/live/DisableTumblrLivePatch;
|
||||||
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||||
@@ -1200,6 +1202,12 @@ public final class app/revanced/patches/twitter/misc/links/OpenLinksWithAppChoos
|
|||||||
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/twitter/misc/links/SanitizeSharingLinksPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||||
|
public static final field INSTANCE Lapp/revanced/patches/twitter/misc/links/SanitizeSharingLinksPatch;
|
||||||
|
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/vsco/misc/pro/UnlockProPatch : app/revanced/patcher/patch/BytecodePatch {
|
public final class app/revanced/patches/vsco/misc/pro/UnlockProPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||||
public static final field INSTANCE Lapp/revanced/patches/vsco/misc/pro/UnlockProPatch;
|
public static final field INSTANCE Lapp/revanced/patches/vsco/misc/pro/UnlockProPatch;
|
||||||
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ repositories {
|
|||||||
mavenLocal()
|
mavenLocal()
|
||||||
google()
|
google()
|
||||||
maven {
|
maven {
|
||||||
// A repository must be speficied for some reason. "registry" is a dummy.
|
// A repository must be specified for some reason. "registry" is a dummy.
|
||||||
url = uri("https://maven.pkg.github.com/revanced/registry")
|
url = uri("https://maven.pkg.github.com/revanced/registry")
|
||||||
credentials {
|
credentials {
|
||||||
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
|
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
|
||||||
|
|||||||
@@ -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.7.0-dev.2
|
version = 4.7.0-dev.6
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package app.revanced.patches.amazon.deeplinking
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
|
internal object DeepLinkingFingerprint : MethodFingerprint(
|
||||||
|
"Z",
|
||||||
|
parameters = listOf("L"),
|
||||||
|
accessFlags = AccessFlags.PRIVATE.value,
|
||||||
|
strings = listOf("https://www.", "android.intent.action.VIEW")
|
||||||
|
)
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package app.revanced.patches.amazon.deeplinking
|
||||||
|
|
||||||
|
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.util.exception
|
||||||
|
|
||||||
|
@Patch(
|
||||||
|
name = "Always allow deep-linking",
|
||||||
|
description = "Open Amazon links, even if the app is not set to handle Amazon links.",
|
||||||
|
compatiblePackages = [CompatiblePackage("com.amazon.mShop.android.shopping")]
|
||||||
|
)
|
||||||
|
@Suppress("unused")
|
||||||
|
object DeepLinkingPatch : BytecodePatch(
|
||||||
|
setOf(DeepLinkingFingerprint)
|
||||||
|
) {
|
||||||
|
override fun execute(context: BytecodeContext) {
|
||||||
|
DeepLinkingFingerprint.result?.mutableMethod?.addInstructions(
|
||||||
|
0,
|
||||||
|
"""
|
||||||
|
const/4 v0, 0x1
|
||||||
|
return v0
|
||||||
|
"""
|
||||||
|
) ?: throw DeepLinkingFingerprint.exception
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
|||||||
import app.revanced.patcher.patch.BytecodePatch
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||||
import app.revanced.patcher.patch.annotation.Patch
|
import app.revanced.patcher.patch.annotation.Patch
|
||||||
|
import app.revanced.patches.tumblr.fixes.fingerprints.AddQueryParamFingerprint
|
||||||
import app.revanced.patches.tumblr.fixes.fingerprints.HttpPathParserFingerprint
|
import app.revanced.patches.tumblr.fixes.fingerprints.HttpPathParserFingerprint
|
||||||
import app.revanced.util.exception
|
import app.revanced.util.exception
|
||||||
|
|
||||||
@@ -17,22 +18,50 @@ import app.revanced.util.exception
|
|||||||
)
|
)
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
object FixOldVersionsPatch : BytecodePatch(
|
object FixOldVersionsPatch : BytecodePatch(
|
||||||
setOf(HttpPathParserFingerprint),
|
setOf(HttpPathParserFingerprint, AddQueryParamFingerprint),
|
||||||
) {
|
) {
|
||||||
override fun execute(context: BytecodeContext) =
|
override fun execute(context: BytecodeContext) {
|
||||||
|
val liveQueryParameters = listOf(
|
||||||
|
",?live_now",
|
||||||
|
",?live_streaming_user_id",
|
||||||
|
)
|
||||||
|
|
||||||
HttpPathParserFingerprint.result?.let {
|
HttpPathParserFingerprint.result?.let {
|
||||||
val endIndex = it.scanResult.patternScanResult!!.endIndex
|
val endIndex = it.scanResult.patternScanResult!!.endIndex
|
||||||
|
// Remove the live query parameters from the path when it's specified via a @METHOD annotation.
|
||||||
|
for (liveQueryParameter in liveQueryParameters) {
|
||||||
it.mutableMethod.addInstructions(
|
it.mutableMethod.addInstructions(
|
||||||
endIndex + 1,
|
endIndex + 1,
|
||||||
"""
|
"""
|
||||||
# Remove "?live_now" from the request path p2.
|
# urlPath = urlPath.replace(liveQueryParameter, "")
|
||||||
# p2 = p2.replace(p1, p3)
|
const-string p1, "$liveQueryParameter"
|
||||||
const-string p1, ",?live_now"
|
|
||||||
const-string p3, ""
|
const-string p3, ""
|
||||||
invoke-virtual {p2, p1, p3}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
|
invoke-virtual {p2, p1, p3}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
|
||||||
move-result-object p2
|
move-result-object p2
|
||||||
""",
|
""",
|
||||||
)
|
)
|
||||||
} ?: throw HttpPathParserFingerprint.exception
|
}
|
||||||
|
} ?: throw HttpPathParserFingerprint.exception
|
||||||
|
|
||||||
|
AddQueryParamFingerprint.result?.let {
|
||||||
|
// Remove the live query parameters when passed via a parameter which has the @Query annotation.
|
||||||
|
// e.g. an API call could be defined like this:
|
||||||
|
// @GET("api/me/info")
|
||||||
|
// ApiResponse getCurrentUserInfo(@Query("fields[blog]") String value)
|
||||||
|
// which would result in the path "api/me/inf0?fields[blog]=${value}"
|
||||||
|
// Here we make sure that this value doesn't contain the broken query parameters.
|
||||||
|
for (liveQueryParameter in liveQueryParameters) {
|
||||||
|
it.mutableMethod.addInstructions(
|
||||||
|
0,
|
||||||
|
"""
|
||||||
|
# queryParameterValue = queryParameterValue.replace(liveQueryParameter, "")
|
||||||
|
const-string v0, "$liveQueryParameter"
|
||||||
|
const-string v1, ""
|
||||||
|
invoke-virtual {p2, v0, v1}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
|
||||||
|
move-result-object p2
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} ?: throw AddQueryParamFingerprint.exception
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package app.revanced.patches.tumblr.fixes.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
|
||||||
|
// Fingerprint for the addQueryParam method from retrofit2
|
||||||
|
// https://github.com/square/retrofit/blob/trunk/retrofit/src/main/java/retrofit2/RequestBuilder.java#L186
|
||||||
|
// Injecting here allows modifying dynamically set query parameters
|
||||||
|
internal object AddQueryParamFingerprint : MethodFingerprint(
|
||||||
|
strings = listOf("Malformed URL. Base: ", ", Relative: "),
|
||||||
|
parameters = listOf("Ljava/lang/String;", "Ljava/lang/String;", "Z"),
|
||||||
|
)
|
||||||
@@ -3,13 +3,13 @@ package app.revanced.patches.tumblr.fixes.fingerprints
|
|||||||
import app.revanced.patcher.fingerprint.MethodFingerprint
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
// Fingerprint for the parseHttpMethodAndPath from retrofit2
|
// Fingerprint for the parseHttpMethodAndPath method from retrofit2
|
||||||
// https://github.com/square/retrofit/blob/ebf87b10997e2136af4d335276fa950221852c64/retrofit/src/main/java/retrofit2/RequestFactory.java#L270-L302
|
// https://github.com/square/retrofit/blob/ebf87b10997e2136af4d335276fa950221852c64/retrofit/src/main/java/retrofit2/RequestFactory.java#L270-L302
|
||||||
// Injecting here allows modifying the path/query params of API endpoints defined via annotations
|
// Injecting here allows modifying the path/query params of API endpoints defined via annotations
|
||||||
object HttpPathParserFingerprint : MethodFingerprint(
|
internal object HttpPathParserFingerprint : MethodFingerprint(
|
||||||
strings = listOf("Only one HTTP method is allowed. Found: %s and %s."),
|
strings = listOf("Only one HTTP method is allowed. Found: %s and %s."),
|
||||||
opcodes = listOf(
|
opcodes = listOf(
|
||||||
Opcode.IPUT_OBJECT,
|
Opcode.IPUT_OBJECT,
|
||||||
Opcode.IPUT_BOOLEAN
|
Opcode.IPUT_BOOLEAN,
|
||||||
)
|
),
|
||||||
)
|
)
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package app.revanced.patches.twitter.misc.links
|
||||||
|
|
||||||
|
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.twitter.misc.links.fingerprints.SanitizeSharingLinksFingerprint
|
||||||
|
import app.revanced.util.exception
|
||||||
|
|
||||||
|
@Patch(
|
||||||
|
name = "Sanitize sharing links",
|
||||||
|
description = "Removes the tracking query parameters from links before they are shared.",
|
||||||
|
compatiblePackages = [CompatiblePackage("com.twitter.android")],
|
||||||
|
)
|
||||||
|
object SanitizeSharingLinksPatch : BytecodePatch(
|
||||||
|
setOf(SanitizeSharingLinksFingerprint),
|
||||||
|
) {
|
||||||
|
override fun execute(context: BytecodeContext) {
|
||||||
|
SanitizeSharingLinksFingerprint.result?.mutableMethod?.addInstructions(
|
||||||
|
0,
|
||||||
|
"""
|
||||||
|
# Method takes in a link (string, param 0) and then appends the tracking query params,
|
||||||
|
# so all we need to do is return back the passed-in string
|
||||||
|
return-object p0
|
||||||
|
""",
|
||||||
|
) ?: throw SanitizeSharingLinksFingerprint.exception
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package app.revanced.patches.twitter.misc.links.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
|
||||||
|
internal object SanitizeSharingLinksFingerprint : MethodFingerprint(
|
||||||
|
strings = listOf("<this>", "shareParam", "sessionToken"),
|
||||||
|
returnType = "Ljava/lang/String;",
|
||||||
|
)
|
||||||
@@ -35,6 +35,9 @@ object HideShortsComponentsResourcePatch : ResourcePatch() {
|
|||||||
|
|
||||||
// Everything else.
|
// Everything else.
|
||||||
SwitchPreference("revanced_hide_shorts_thanks_button"),
|
SwitchPreference("revanced_hide_shorts_thanks_button"),
|
||||||
|
SwitchPreference("revanced_hide_shorts_shop_button"),
|
||||||
|
SwitchPreference("revanced_hide_shorts_location_button"),
|
||||||
|
SwitchPreference("revanced_hide_shorts_save_sound_button"),
|
||||||
SwitchPreference("revanced_hide_shorts_join_button"),
|
SwitchPreference("revanced_hide_shorts_join_button"),
|
||||||
SwitchPreference("revanced_hide_shorts_subscribe_button"),
|
SwitchPreference("revanced_hide_shorts_subscribe_button"),
|
||||||
SwitchPreference("revanced_hide_shorts_subscribe_button_paused"),
|
SwitchPreference("revanced_hide_shorts_subscribe_button_paused"),
|
||||||
|
|||||||
@@ -36,7 +36,9 @@ object NavigationBarHookPatch : BytecodePatch(
|
|||||||
NavigationEnumFingerprint,
|
NavigationEnumFingerprint,
|
||||||
PivotBarButtonsCreateDrawableViewFingerprint,
|
PivotBarButtonsCreateDrawableViewFingerprint,
|
||||||
PivotBarButtonsCreateResourceViewFingerprint,
|
PivotBarButtonsCreateResourceViewFingerprint,
|
||||||
|
PivotBarButtonsViewSetSelectedFingerprint,
|
||||||
NavigationBarHookCallbackFingerprint,
|
NavigationBarHookCallbackFingerprint,
|
||||||
|
MainActivityOnBackPressedFingerprint,
|
||||||
ActionBarSearchResultsFingerprint,
|
ActionBarSearchResultsFingerprint,
|
||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
@@ -90,6 +92,29 @@ object NavigationBarHookPatch : BytecodePatch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PivotBarButtonsViewSetSelectedFingerprint.resultOrThrow().mutableMethod.apply {
|
||||||
|
val index = PivotBarButtonsViewSetSelectedFingerprint.indexOfSetViewSelectedInstruction(this)
|
||||||
|
val instruction = getInstruction<FiveRegisterInstruction>(index)
|
||||||
|
val viewRegister = instruction.registerC
|
||||||
|
val isSelectedRegister = instruction.registerD
|
||||||
|
|
||||||
|
addInstruction(
|
||||||
|
index + 1,
|
||||||
|
"invoke-static { v$viewRegister, v$isSelectedRegister }, " +
|
||||||
|
"$INTEGRATIONS_CLASS_DESCRIPTOR->navigationTabSelected(Landroid/view/View;Z)V",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hook onto back button pressed. Needed to fix race problem with
|
||||||
|
// litho filtering based on navigation tab before the tab is updated.
|
||||||
|
MainActivityOnBackPressedFingerprint.resultOrThrow().mutableMethod.apply {
|
||||||
|
addInstruction(
|
||||||
|
0,
|
||||||
|
"invoke-static { p0 }, " +
|
||||||
|
"$INTEGRATIONS_CLASS_DESCRIPTOR->onBackPressed(Landroid/app/Activity;)V",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// Hook the search bar.
|
// Hook the search bar.
|
||||||
|
|
||||||
// Two different layouts are used at the hooked code.
|
// Two different layouts are used at the hooked code.
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package app.revanced.patches.youtube.misc.navigation.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.or
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
|
internal object MainActivityOnBackPressedFingerprint : MethodFingerprint(
|
||||||
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||||
|
returnType = "V",
|
||||||
|
parameters = listOf(),
|
||||||
|
customFingerprint = { methodDef, _ ->
|
||||||
|
(methodDef.definingClass.endsWith("MainActivity;") ||
|
||||||
|
// Old versions of YouTube called this class "WatchWhileActivity" instead.
|
||||||
|
methodDef.definingClass.endsWith("WatchWhileActivity;"))
|
||||||
|
&& methodDef.name == "onBackPressed"
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package app.revanced.patches.youtube.misc.navigation.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.or
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
import app.revanced.patches.youtube.misc.navigation.fingerprints.PivotBarButtonsViewSetSelectedFingerprint.indexOfSetViewSelectedInstruction
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import app.revanced.util.indexOfFirstInstruction
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
import com.android.tools.smali.dexlib2.iface.Method
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
|
|
||||||
|
internal object PivotBarButtonsViewSetSelectedFingerprint : MethodFingerprint(
|
||||||
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||||
|
parameters = listOf("I", "Z"),
|
||||||
|
returnType = "V",
|
||||||
|
customFingerprint = { methodDef, classDef ->
|
||||||
|
classDef.type == "Lcom/google/android/libraries/youtube/rendering/ui/pivotbar/PivotBar;" &&
|
||||||
|
indexOfSetViewSelectedInstruction(methodDef) >= 0
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
fun indexOfSetViewSelectedInstruction(methodDef: Method) =
|
||||||
|
methodDef.indexOfFirstInstruction {
|
||||||
|
opcode == Opcode.INVOKE_VIRTUAL && getReference<MethodReference>()?.name == "setSelected"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||||
|
|
||||||
Correct:
|
Correct:
|
||||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will as expected in the app</string>
|
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||||
Not correct:
|
Not correct:
|
||||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||||
-->
|
-->
|
||||||
@@ -213,6 +213,7 @@
|
|||||||
<string name="revanced_custom_filter_summary_on">Custom filter is enabled</string>
|
<string name="revanced_custom_filter_summary_on">Custom filter is enabled</string>
|
||||||
<string name="revanced_custom_filter_summary_off">Custom filter is disabled</string>
|
<string name="revanced_custom_filter_summary_off">Custom filter is disabled</string>
|
||||||
<string name="revanced_custom_filter_strings_title">Custom filter</string>
|
<string name="revanced_custom_filter_strings_title">Custom filter</string>
|
||||||
|
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||||
<string name="revanced_custom_filter_strings_summary">List of component path builder strings to filter separated by new line</string>
|
<string name="revanced_custom_filter_strings_summary">List of component path builder strings to filter separated by new line</string>
|
||||||
<string name="revanced_custom_filter_toast_invalid_syntax">Invalid custom filter: %s</string>
|
<string name="revanced_custom_filter_toast_invalid_syntax">Invalid custom filter: %s</string>
|
||||||
<string name="revanced_hide_keyword_content_screen_title">Hide keyword content</string>
|
<string name="revanced_hide_keyword_content_screen_title">Hide keyword content</string>
|
||||||
@@ -548,6 +549,7 @@
|
|||||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">Thumbnail seekbar is shown</string>
|
<string name="revanced_hide_seekbar_thumbnail_summary_off">Thumbnail seekbar is shown</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.shorts.HideShortsComponentsResourcePatch">
|
<patch id="layout.hide.shorts.HideShortsComponentsResourcePatch">
|
||||||
|
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||||
<string name="revanced_hide_shorts_home_title">Hide Shorts in home feed</string>
|
<string name="revanced_hide_shorts_home_title">Hide Shorts in home feed</string>
|
||||||
<string name="revanced_hide_shorts_home_summary_on">Shorts in home feed are hidden</string>
|
<string name="revanced_hide_shorts_home_summary_on">Shorts in home feed are hidden</string>
|
||||||
<string name="revanced_hide_shorts_home_summary_off">Shorts in home feed are shown</string>
|
<string name="revanced_hide_shorts_home_summary_off">Shorts in home feed are shown</string>
|
||||||
@@ -575,6 +577,15 @@
|
|||||||
<string name="revanced_hide_shorts_thanks_button_title">Hide thanks button</string>
|
<string name="revanced_hide_shorts_thanks_button_title">Hide thanks button</string>
|
||||||
<string name="revanced_hide_shorts_thanks_button_summary_on">Thanks button is hidden</string>
|
<string name="revanced_hide_shorts_thanks_button_summary_on">Thanks button is hidden</string>
|
||||||
<string name="revanced_hide_shorts_thanks_button_summary_off">Thanks button is shown</string>
|
<string name="revanced_hide_shorts_thanks_button_summary_off">Thanks button is shown</string>
|
||||||
|
<string name="revanced_hide_shorts_shop_button_title">Hide shop button</string>
|
||||||
|
<string name="revanced_hide_shorts_shop_button_summary_on">Shop button is hidden</string>
|
||||||
|
<string name="revanced_hide_shorts_shop_button_summary_off">Shop button is shown</string>
|
||||||
|
<string name="revanced_hide_shorts_location_button_title">Hide location button</string>
|
||||||
|
<string name="revanced_hide_shorts_location_button_summary_on">Location button is hidden</string>
|
||||||
|
<string name="revanced_hide_shorts_location_button_summary_off">Location button is shown</string>
|
||||||
|
<string name="revanced_hide_shorts_save_sound_button_title">Hide save sound to playlist button</string>
|
||||||
|
<string name="revanced_hide_shorts_save_sound_button_summary_on">Save sound to playlist is hidden</string>
|
||||||
|
<string name="revanced_hide_shorts_save_sound_button_summary_off">save sound to playlist is shown</string>
|
||||||
<string name="revanced_hide_shorts_like_button_title">Hide like button</string>
|
<string name="revanced_hide_shorts_like_button_title">Hide like button</string>
|
||||||
<string name="revanced_hide_shorts_like_button_summary_on">Like button is hidden</string>
|
<string name="revanced_hide_shorts_like_button_summary_on">Like button is hidden</string>
|
||||||
<string name="revanced_hide_shorts_like_button_summary_off">Like button is shown</string>
|
<string name="revanced_hide_shorts_like_button_summary_off">Like button is shown</string>
|
||||||
@@ -647,11 +658,9 @@
|
|||||||
<string name="revanced_ryd_enable_summary_on">Dislikes are shown</string>
|
<string name="revanced_ryd_enable_summary_on">Dislikes are shown</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Dislikes are not shown</string>
|
<string name="revanced_ryd_enable_summary_off">Dislikes are not shown</string>
|
||||||
<string name="revanced_ryd_shorts_title">Show dislikes on Shorts</string>
|
<string name="revanced_ryd_shorts_title">Show dislikes on Shorts</string>
|
||||||
<!-- %s is either an empty blank string, or it is 'revanced_ryd_shorts_summary_disclaimer'. This text should read normally in both situations. -->
|
<string name="revanced_ryd_shorts_summary_on">Dislikes shown on Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on">Dislikes shown on Shorts %s</string>
|
<string name="revanced_ryd_shorts_summary_on_disclaimer">Dislikes shown on Shorts\n\nLimitation: Dislikes may not appear in incognito mode</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Dislikes hidden on Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">Dislikes hidden on Shorts</string>
|
||||||
<!-- Shown only when used with 'revanced_ryd_shorts_summary_on' and it is never displayed alone. -->
|
|
||||||
<string name="revanced_ryd_shorts_summary_disclaimer">Limitation: Dislikes may not appear in incognito mode</string>
|
|
||||||
<string name="revanced_ryd_dislike_percentage_title">Dislikes as percentage</string>
|
<string name="revanced_ryd_dislike_percentage_title">Dislikes as percentage</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikes shown as percentage</string>
|
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikes shown as percentage</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_summary_off">Dislikes shown as number</string>
|
<string name="revanced_ryd_dislike_percentage_summary_off">Dislikes shown as number</string>
|
||||||
@@ -740,16 +749,14 @@
|
|||||||
<string name="revanced_sb_general_uuid_sum">This should be kept private. This is like a password and should not be shared with anyone. If someone has this, they can impersonate you</string>
|
<string name="revanced_sb_general_uuid_sum">This should be kept private. This is like a password and should not be shared with anyone. If someone has this, they can impersonate you</string>
|
||||||
<string name="revanced_sb_general_uuid_invalid">Private user id must be at least 30 characters long</string>
|
<string name="revanced_sb_general_uuid_invalid">Private user id must be at least 30 characters long</string>
|
||||||
<string name="revanced_sb_general_api_url">Change API URL</string>
|
<string name="revanced_sb_general_api_url">Change API URL</string>
|
||||||
<string name="revanced_sb_general_api_url_sum">The address SponsorBlock uses to make calls to the server. Do not change this unless you know what you\'re doing</string>
|
<string name="revanced_sb_general_api_url_sum">The address SponsorBlock uses to make calls to the server</string>
|
||||||
<string name="revanced_sb_api_url_reset">API URL reset</string>
|
<string name="revanced_sb_api_url_reset">API URL reset</string>
|
||||||
<string name="revanced_sb_api_url_invalid">API URL is invalid</string>
|
<string name="revanced_sb_api_url_invalid">API URL is invalid</string>
|
||||||
<string name="revanced_sb_api_url_changed">API URL changed</string>
|
<string name="revanced_sb_api_url_changed">API URL changed</string>
|
||||||
<string name="revanced_sb_settings_ie">Import/Export settings</string>
|
<string name="revanced_sb_settings_ie">Import/Export settings</string>
|
||||||
<string name="revanced_sb_settings_copy">Copy</string>
|
<string name="revanced_sb_settings_copy">Copy</string>
|
||||||
<!-- %s is either an empty blank string, or it is 'revanced_sb_settings_ie_sum_warning'. This text should read normally in both situations. -->
|
<string name="revanced_sb_settings_ie_sum">Your SponsorBlock JSON configuration that can be imported/exported to ReVanced and other SponsorBlock platforms</string>
|
||||||
<string name="revanced_sb_settings_ie_sum">Your SponsorBlock JSON configuration that can be imported/exported to ReVanced and other SponsorBlock platforms %s</string>
|
<string name="revanced_sb_settings_ie_sum_warning">Your SponsorBlock JSON configuration that can be imported/exported to ReVanced and other SponsorBlock platforms. This includes your private user id. Be sure to share this wisely</string>
|
||||||
<!-- Shown only when used with 'revanced_sb_settings_ie_sum' and it is never displayed alone. -->
|
|
||||||
<string name="revanced_sb_settings_ie_sum_warning">This includes your private user id. Be sure to share this wisely</string>
|
|
||||||
<string name="revanced_sb_settings_import_successful">Settings imported successfully</string>
|
<string name="revanced_sb_settings_import_successful">Settings imported successfully</string>
|
||||||
<string name="revanced_sb_settings_import_failed">Failed to import: %s</string>
|
<string name="revanced_sb_settings_import_failed">Failed to import: %s</string>
|
||||||
<string name="revanced_sb_settings_export_failed">Failed to export: %s</string>
|
<string name="revanced_sb_settings_export_failed">Failed to export: %s</string>
|
||||||
@@ -1042,7 +1049,7 @@
|
|||||||
<patch id="video.speed.custom.CustomPlaybackSpeedPatch">
|
<patch id="video.speed.custom.CustomPlaybackSpeedPatch">
|
||||||
<string name="revanced_custom_playback_speeds_title">Custom playback speeds</string>
|
<string name="revanced_custom_playback_speeds_title">Custom playback speeds</string>
|
||||||
<string name="revanced_custom_playback_speeds_summary">Add or change the available playback speeds</string>
|
<string name="revanced_custom_playback_speeds_summary">Add or change the available playback speeds</string>
|
||||||
<string name="revanced_custom_playback_speeds_invalid">Custom speeds must be less than %s Using default values.</string>
|
<string name="revanced_custom_playback_speeds_invalid">Custom speeds must be less than %s. Using default values.</string>
|
||||||
<string name="revanced_custom_playback_speeds_parse_exception">Invalid custom playback speeds. Using default values.</string>
|
<string name="revanced_custom_playback_speeds_parse_exception">Invalid custom playback speeds. Using default values.</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="video.speed.remember.RememberPlaybackSpeedPatch">
|
<patch id="video.speed.remember.RememberPlaybackSpeedPatch">
|
||||||
|
|||||||
Reference in New Issue
Block a user