chore: Merge branch dev to main (#3123)

This commit is contained in:
oSumAtrIX 2023-10-12 23:24:21 +02:00 committed by GitHub
commit 447c8dea75
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 126 additions and 102 deletions

View file

@ -1,3 +1,39 @@
# [2.194.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v2.194.0-dev.2...v2.194.0-dev.3) (2023-10-12)
### Bug Fixes
* Fix builds ([d7b8149](https://github.com/ReVanced/revanced-patches/commit/d7b8149b0a8dad4e2c201b2f514d298bc6b97f54))
### Features
* **CieID:** Add `bypass root check` patch ([#3011](https://github.com/ReVanced/revanced-patches/issues/3011)) ([20cfa8a](https://github.com/ReVanced/revanced-patches/commit/20cfa8a5cdebc7e81128c820a2aa01415a068320))
# [2.194.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v2.194.0-dev.1...v2.194.0-dev.2) (2023-10-12)
### Bug Fixes
* **YouTube - ReturnYouTubeDislike:** Fix dislikes not showing on Shorts ([#3133](https://github.com/ReVanced/revanced-patches/issues/3133)) ([0e8a286](https://github.com/ReVanced/revanced-patches/commit/0e8a2868e8e4328a6f02fa31537abc5e5ed220eb))
# [2.194.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v2.193.1-dev.2...v2.194.0-dev.1) (2023-10-12)
### Features
* Do not support reading options from a properties file ([3d1c0c1](https://github.com/ReVanced/revanced-patches/commit/3d1c0c1a958271c358755220b97b9dd92eb81d54))
* Improve option descriptions and titles ([9f86daa](https://github.com/ReVanced/revanced-patches/commit/9f86daa82271591bcaa9144d300a4810458fdd28))
## [2.193.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v2.193.1-dev.1...v2.193.1-dev.2) (2023-10-11)
### Bug Fixes
* **YouTube - Spoof app version:** Recommend clearing the app data after turning off spoofing ([#3134](https://github.com/ReVanced/revanced-patches/issues/3134)) ([166bf5b](https://github.com/ReVanced/revanced-patches/commit/166bf5b1aec5f8868b3895f7e24d2abc9037a7de))
## [2.193.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v2.193.0...v2.193.1-dev.1) (2023-10-09)
# [2.193.0](https://github.com/ReVanced/revanced-patches/compare/v2.192.0...v2.193.0) (2023-10-08) # [2.193.0](https://github.com/ReVanced/revanced-patches/compare/v2.192.0...v2.193.0) (2023-10-08)

View file

@ -9,13 +9,7 @@ repositories {
mavenCentral() mavenCentral()
mavenLocal() mavenLocal()
google() google()
maven { maven { url = uri("https://jitpack.io") }
url = uri("https://maven.pkg.github.com/revanced/revanced-patcher")
credentials {
username = project.findProperty("gpr.user") as? String ?: System.getenv("GITHUB_ACTOR")
password = project.findProperty("gpr.key") as? String ?: System.getenv("GITHUB_TOKEN")
}
}
// Required for FlexVer-Java // Required for FlexVer-Java
maven { maven {
url = uri("https://repo.sleeping.town") url = uri("https://repo.sleeping.town")

View file

@ -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 = 2.193.0 version = 2.194.0-dev.3

View file

@ -1,14 +1,14 @@
[versions] [versions]
revanced-patcher = "16.0.1" revanced-patcher = "17.0.0"
revanced-patch-annotation-processor = "16.0.1" revanced-patch-annotation-processor = "17.0.0"
ksp = "1.9.0-1.0.11" ksp = "1.9.0-1.0.11"
smali = "3.0.3" smali = "3.0.3"
guava = "32.1.2-jre" guava = "32.1.2-jre"
gson = "2.10.1" gson = "2.10.1"
[libraries] [libraries]
revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" } revanced-patcher = { module = "app.revanced.revanced-patcher:revanced-patcher", version.ref = "revanced-patcher" }
revanced-patch-annotation-processor = { module = "app.revanced:revanced-patch-annotation-processor", version.ref = "revanced-patch-annotation-processor" } revanced-patch-annotation-processor = { module = "app.revanced.revanced-patcher:revanced-patch-annotation-processor", version.ref = "revanced-patch-annotation-processor" }
smali = { module = "com.android.tools.smali:smali", version.ref = "smali" } smali = { module = "com.android.tools.smali:smali", version.ref = "smali" }
guava = { module = "com.google.guava:guava", version.ref = "guava" } guava = { module = "com.google.guava:guava", version.ref = "guava" }
gson = { module = "com.google.code.gson:gson", version.ref = "gson" } gson = { module = "com.google.code.gson:gson", version.ref = "gson" }

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,24 @@
package app.revanced.patches.cieid.restrictions.root
import app.revanced.extensions.exception
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.cieid.restrictions.root.fingerprints.CheckRootFingerprint
@Patch(
name = "Bypass root checks",
description = "Removes the restriction to use the app with root permissions or on a custom ROM.",
compatiblePackages = [CompatiblePackage("it.ipzs.cieid")]
)
@Suppress("unused")
object BypassRootChecksPatch : BytecodePatch(
setOf(CheckRootFingerprint)
) {
override fun execute(context: BytecodeContext) {
CheckRootFingerprint.result?.mutableMethod?.addInstruction(1, "return-void")
?: throw CheckRootFingerprint.exception
}
}

View file

@ -0,0 +1,9 @@
package app.revanced.patches.cieid.restrictions.root.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object CheckRootFingerprint : MethodFingerprint(
customFingerprint = { methodDef, _ ->
methodDef.definingClass == "Lit/ipzs/cieid/BaseActivity;" && methodDef.name == "onResume"
}
)

View file

@ -1,19 +1,14 @@
package app.revanced.patches.reddit.customclients package app.revanced.patches.reddit.customclients
import android.os.Environment
import app.revanced.extensions.exception import app.revanced.extensions.exception
import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult
import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.options.PatchOptionException
import app.revanced.patcher.patch.options.types.StringPatchOption.Companion.stringPatchOption import app.revanced.patcher.patch.options.types.StringPatchOption.Companion.stringPatchOption
import java.io.File
import java.util.*
abstract class AbstractSpoofClientPatch( abstract class AbstractSpoofClientPatch(
private val redirectUri: String, redirectUri: String,
private val clientIdFingerprints: List<MethodFingerprint>, private val clientIdFingerprints: List<MethodFingerprint>,
private val userAgentFingerprints: List<MethodFingerprint>? = null, private val userAgentFingerprints: List<MethodFingerprint>? = null,
private val miscellaneousFingerprints: List<MethodFingerprint>? = null private val miscellaneousFingerprints: List<MethodFingerprint>? = null
@ -34,59 +29,6 @@ abstract class AbstractSpoofClientPatch(
) )
override fun execute(context: BytecodeContext) { override fun execute(context: BytecodeContext) {
val requiredOptions = options.values.filter { it.required }
val isAndroidButRequiredOptionsUnset = try {
Class.forName("android.os.Environment")
requiredOptions.any { it.value == null }
} catch (_: ClassNotFoundException) {
false
}
if (isAndroidButRequiredOptionsUnset) {
val properties = Properties()
val propertiesFile = File(
Environment.getExternalStorageDirectory(),
"revanced_client_spoof_${redirectUri.hashCode()}.properties"
)
if (propertiesFile.exists()) {
properties.load(propertiesFile.inputStream())
// Set options from properties file.
properties.forEach { (name, value) ->
try {
options[name.toString()] = value.toString().trim()
} catch (_: PatchOptionException.PatchOptionNotFoundException) {
// Ignore unknown options.
}
}
} else {
options.keys.forEach { properties.setProperty(it, "") }
properties.store(
propertiesFile.outputStream(),
"Options for the ReVanced \"Client Spoof\" patch. Required options: " +
requiredOptions.joinToString { it.key }
)
}
requiredOptions.filter { it.value == null }.let { requiredUnsetOptions ->
if (requiredUnsetOptions.isEmpty()) return@let
val error = """
In order to use this patch, you need to provide the following options:
${requiredUnsetOptions.joinToString("\n") { "${it.key}: ${it.description}" }}
A properties file has been created at ${propertiesFile.absolutePath}.
Please fill in the required options before using this patch.
""".trimIndent()
throw PatchException(error)
}
}
fun List<MethodFingerprint>?.executePatch( fun List<MethodFingerprint>?.executePatch(
patch: List<MethodFingerprintResult>.(BytecodeContext) -> Unit patch: List<MethodFingerprintResult>.(BytecodeContext) -> Unit
) = this?.map { it.result ?: throw it.exception }?.patch(context) ) = this?.map { it.result ?: throw it.exception }?.patch(context)

View file

@ -12,7 +12,7 @@ import java.nio.file.Files
@Patch( @Patch(
name = "Custom branding", name = "Custom branding",
description = "Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).", description = "Changes the app icon and name to your choice (defaults to YouTube ReVanced and the ReVanced logo).",
compatiblePackages = [ compatiblePackages = [
CompatiblePackage("com.google.android.youtube") CompatiblePackage("com.google.android.youtube")
], ],
@ -20,19 +20,42 @@ import java.nio.file.Files
) )
@Suppress("unused") @Suppress("unused")
object CustomBrandingPatch : ResourcePatch() { object CustomBrandingPatch : ResourcePatch() {
private val iconResourceFileNames = arrayOf(
"adaptiveproduct_youtube_background_color_108",
"adaptiveproduct_youtube_foreground_color_108",
"ic_launcher",
"ic_launcher_round"
).map { "$it.png" }.toTypedArray()
private val mipmapDirectories = arrayOf(
"xxxhdpi",
"xxhdpi",
"xhdpi",
"hdpi",
"mdpi"
).map { "mipmap-$it" }
private var appName by stringPatchOption( private var appName by stringPatchOption(
key = "appName", key = "appName",
default = "YouTube ReVanced", default = "YouTube ReVanced",
title = "Application Name", title = "App name",
description = "The name of the application it will show on your home screen.", description = "The name of the app.",
required = true required = true
) )
private var iconPath by stringPatchOption( private var iconPath by stringPatchOption(
key = "iconPath", key = "iconPath",
default = null, default = null,
title = "App Icon Path", title = "App icon path",
description = "A path containing mipmap resource folders with icons." description = """
The path to a folder containing the following folders:
${mipmapDirectories.joinToString("\n") { "- $it" }}
Each of these folders has to have the following files:
${iconResourceFileNames.joinToString("\n") { "- $it" }}
""".trimIndent()
) )
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
@ -55,24 +78,14 @@ object CustomBrandingPatch : ResourcePatch() {
} ?: resourceGroups.forEach { context.copyResources("branding", it) } } ?: resourceGroups.forEach { context.copyResources("branding", it) }
} }
val iconResourceFileNames = arrayOf(
"adaptiveproduct_youtube_background_color_108",
"adaptiveproduct_youtube_foreground_color_108",
"ic_launcher",
"ic_launcher_round"
).map { "$it.png" }.toTypedArray()
fun createGroup(directory: String) = ResourceUtils.ResourceGroup( fun createGroup(directory: String) = ResourceUtils.ResourceGroup(
directory, *iconResourceFileNames directory, *iconResourceFileNames
) )
// change the app icon // Change the app icon.
arrayOf("xxxhdpi", "xxhdpi", "xhdpi", "hdpi", "mdpi") mipmapDirectories.map(::createGroup).let(::copyResources)
.map { "mipmap-$it" }
.map(::createGroup)
.let(::copyResources)
// change the name of the app // Change the app name.
val manifest = context["AndroidManifest.xml"] val manifest = context["AndroidManifest.xml"]
manifest.writeText( manifest.writeText(
manifest.readText() manifest.readText()

View file

@ -184,6 +184,9 @@ object ReturnYouTubeDislikePatch : BytecodePatch(
// Filter that parses the video id from the UI // Filter that parses the video id from the UI
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
// Player response video id is needed to search for the video ids in Shorts litho components.
VideoIdPatch.hookPlayerResponseVideoId("$FILTER_CLASS_DESCRIPTOR->newPlayerResponseVideoId(Ljava/lang/String;)V")
// endregion // endregion
// region Hook old UI layout dislikes, for the older app spoofs used with spoof-app-version. // region Hook old UI layout dislikes, for the older app spoofs used with spoof-app-version.

View file

@ -51,7 +51,7 @@ object SpoofAppVersionPatch : BytecodePatch(
StringResource("revanced_spoof_app_version_user_dialog_message", StringResource("revanced_spoof_app_version_user_dialog_message",
"App version will be spoofed to an older version of YouTube." "App version will be spoofed to an older version of YouTube."
+ "\\n\\nThis will change the appearance and features of the app, but unknown side effects may occur." + "\\n\\nThis will change the appearance and features of the app, but unknown side effects may occur."
+ "\\n\\nIf later turned off, the old UI may remain until the app data is cleared.") + "\\n\\nIf later turned off, it is recommended to clear the app data to prevent UI bugs.")
), ),
ListPreference( ListPreference(
"revanced_spoof_app_version_target", "revanced_spoof_app_version_target",
@ -62,19 +62,21 @@ object SpoofAppVersionPatch : BytecodePatch(
ArrayResource( ArrayResource(
"revanced_spoof_app_version_target_entries", "revanced_spoof_app_version_target_entries",
listOf( listOf(
StringResource("revanced_spoof_app_version_target_entry_1", "18.20.39 - Restore wide video speed & quality menu"), StringResource("revanced_spoof_app_version_target_entry_1", "18.33.40 - Restore RYD Shorts incognito mode"),
StringResource("revanced_spoof_app_version_target_entry_2", "17.08.35 - Restore old UI layout"), StringResource("revanced_spoof_app_version_target_entry_2", "18.20.39 - Restore wide video speed & quality menu"),
StringResource("revanced_spoof_app_version_target_entry_3", "16.08.35 - Restore explore tab"), StringResource("revanced_spoof_app_version_target_entry_3", "17.08.35 - Restore old UI layout"),
StringResource("revanced_spoof_app_version_target_entry_4", "16.01.35 - Restore old Shorts player"), StringResource("revanced_spoof_app_version_target_entry_4", "16.08.35 - Restore explore tab"),
StringResource("revanced_spoof_app_version_target_entry_5", "16.01.35 - Restore old Shorts player"),
) )
), ),
ArrayResource( ArrayResource(
"revanced_spoof_app_version_target_entry_values", "revanced_spoof_app_version_target_entry_values",
listOf( listOf(
StringResource("revanced_spoof_app_version_target_entry_value_1", "18.20.39"), StringResource("revanced_spoof_app_version_target_entry_value_1", "18.33.40"),
StringResource("revanced_spoof_app_version_target_entry_value_2", "17.08.35"), StringResource("revanced_spoof_app_version_target_entry_value_2", "18.20.39"),
StringResource("revanced_spoof_app_version_target_entry_value_3", "16.08.35"), StringResource("revanced_spoof_app_version_target_entry_value_3", "17.08.35"),
StringResource("revanced_spoof_app_version_target_entry_value_4", "16.01.35"), StringResource("revanced_spoof_app_version_target_entry_value_4", "16.08.35"),
StringResource("revanced_spoof_app_version_target_entry_value_5", "16.01.35"),
) )
) )
) )

View file

@ -23,14 +23,14 @@ object ThemeBytecodePatch : BytecodePatch() {
internal val darkThemeBackgroundColor by stringPatchOption( internal val darkThemeBackgroundColor by stringPatchOption(
key = "darkThemeBackgroundColor", key = "darkThemeBackgroundColor",
default = "@android:color/black", default = "@android:color/black",
title = "Background color for the dark theme", title = "Dark theme background color",
description = "The background color of the dark theme. Can be a hex color or a resource reference.", description = "The background color of the dark theme. Can be a hex color or a resource reference.",
) )
internal val lightThemeBackgroundColor by stringPatchOption( internal val lightThemeBackgroundColor by stringPatchOption(
key = "lightThemeBackgroundColor", key = "lightThemeBackgroundColor",
default = "@android:color/white", default = "@android:color/white",
title = "Background color for the light theme", title = "Light theme background color",
description = "The background color of the light theme. Can be a hex color or a resource reference.", description = "The background color of the light theme. Can be a hex color or a resource reference.",
) )

View file

@ -14,8 +14,9 @@
<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>
<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_off">Dislikes hidden on Shorts</string> <string name="revanced_ryd_shorts_summary_off">Dislikes hidden on Shorts</string>
<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>