mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-28 13:11:03 +00:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
56768caa4c | ||
|
|
19484ca2bc | ||
|
|
a8a98646e7 | ||
|
|
4927bc7451 | ||
|
|
66a5ca3fa8 | ||
|
|
6c0b9213fe | ||
|
|
70e21500cc | ||
|
|
784e97591a | ||
|
|
26ff3b338e | ||
|
|
28c864ae95 |
35
CHANGELOG.md
35
CHANGELOG.md
@@ -1,3 +1,38 @@
|
|||||||
|
## [2.69.1](https://github.com/revanced/revanced-patches/compare/v2.69.0...v2.69.1) (2022-09-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **sponsorblock:** reflect changes to strings ([#585](https://github.com/revanced/revanced-patches/issues/585)) ([d03568a](https://github.com/revanced/revanced-patches/commit/d03568aa39195a07bec62f43d929923825c67d3f))
|
||||||
|
|
||||||
|
# [2.69.0](https://github.com/revanced/revanced-patches/compare/v2.68.3...v2.69.0) (2022-09-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* `spotify-theme` patch ([#608](https://github.com/revanced/revanced-patches/issues/608)) ([7ee1b78](https://github.com/revanced/revanced-patches/commit/7ee1b78e8048698ef6490445dd012e2d88b4d332))
|
||||||
|
|
||||||
|
## [2.68.3](https://github.com/revanced/revanced-patches/compare/v2.68.2...v2.68.3) (2022-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **seekbar-tapping:** do not disable seekbar when hiding it ([#600](https://github.com/revanced/revanced-patches/issues/600)) ([68a9457](https://github.com/revanced/revanced-patches/commit/68a9457464c786a61b756eb18ca5f1ce05316636))
|
||||||
|
|
||||||
|
## [2.68.2](https://github.com/revanced/revanced-patches/compare/v2.68.1...v2.68.2) (2022-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **hide-time-and-seekbar:** don't draw the seekbar ([#594](https://github.com/revanced/revanced-patches/issues/594)) ([46e0195](https://github.com/revanced/revanced-patches/commit/46e0195f760dc11ec8d2068ffb57997eccab1aff))
|
||||||
|
|
||||||
|
## [2.68.1](https://github.com/revanced/revanced-patches/compare/v2.68.0...v2.68.1) (2022-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **sponsorblock:** resolve unresolved fingerprint ([e7296f3](https://github.com/revanced/revanced-patches/commit/e7296f3424bed78a0149cca9bf6e29243e962150))
|
||||||
|
|
||||||
# [2.68.0](https://github.com/revanced/revanced-patches/compare/v2.67.1...v2.68.0) (2022-09-23)
|
# [2.68.0](https://github.com/revanced/revanced-patches/compare/v2.67.1...v2.68.0) (2022-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `hide-premium-navbar` | Removes the premium tab from the navbar. | all |
|
| `hide-premium-navbar` | Removes the premium tab from the navbar. | all |
|
||||||
|
| `spotify-theme` | Applies a custom theme. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.twitter.android`
|
### 📦 `com.twitter.android`
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 2.68.0
|
version = 2.69.1
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
|||||||
|
package app.revanced.patches.spotify.layout.theme.annotations
|
||||||
|
|
||||||
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
|
import app.revanced.patcher.annotation.Package
|
||||||
|
|
||||||
|
@Compatibility([Package("com.spotify.music")])
|
||||||
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
|
internal annotation class ThemeCompatibility
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package app.revanced.patches.spotify.layout.theme.patch
|
||||||
|
|
||||||
|
import app.revanced.patcher.annotation.Description
|
||||||
|
import app.revanced.patcher.annotation.Name
|
||||||
|
import app.revanced.patcher.annotation.Version
|
||||||
|
import app.revanced.patcher.data.impl.ResourceData
|
||||||
|
import app.revanced.patcher.patch.OptionsContainer
|
||||||
|
import app.revanced.patcher.patch.PatchOption
|
||||||
|
import app.revanced.patcher.patch.PatchResult
|
||||||
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
|
import app.revanced.patcher.patch.annotations.DependsOn
|
||||||
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
|
import app.revanced.patcher.patch.impl.ResourcePatch
|
||||||
|
import app.revanced.patches.spotify.layout.theme.annotations.ThemeCompatibility
|
||||||
|
import app.revanced.patches.youtube.misc.manifest.patch.FixLocaleConfigErrorPatch
|
||||||
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
|
@Patch
|
||||||
|
@DependsOn([FixLocaleConfigErrorPatch::class])
|
||||||
|
@Name("spotify-theme")
|
||||||
|
@Description("Applies a custom theme.")
|
||||||
|
@ThemeCompatibility
|
||||||
|
@Version("0.0.1")
|
||||||
|
class ThemePatch : ResourcePatch() {
|
||||||
|
override fun execute(data: ResourceData): PatchResult {
|
||||||
|
data.xmlEditor["res/values/colors.xml"].use { editor ->
|
||||||
|
val resourcesNode = editor.file.getElementsByTagName("resources").item(0) as Element
|
||||||
|
|
||||||
|
for (i in 0 until resourcesNode.childNodes.length) {
|
||||||
|
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
|
||||||
|
|
||||||
|
node.textContent = when (node.getAttribute("name")) {
|
||||||
|
"gray_7" -> backgroundColor!!
|
||||||
|
"dark_brightaccent_background_base", "dark_base_text_brightaccent", "green_light" -> accentColor!!
|
||||||
|
"dark_brightaccent_background_press" -> accentPressedColor!!
|
||||||
|
else -> continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return PatchResultSuccess()
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object : OptionsContainer() {
|
||||||
|
var backgroundColor: String? by option(
|
||||||
|
PatchOption.StringOption(
|
||||||
|
key = "backgroundColor",
|
||||||
|
default = "@android:color/black",
|
||||||
|
title = "Background color",
|
||||||
|
description = "The background color. Can be a hex color or a resource reference.",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
var accentColor: String? by option(
|
||||||
|
PatchOption.StringOption(
|
||||||
|
key = "accentColor",
|
||||||
|
default = "#ff1ed760",
|
||||||
|
title = "Accent color",
|
||||||
|
description = "The accent color ('spotify green' by default). Can be a hex color or a resource reference.",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
var accentPressedColor: String? by option(
|
||||||
|
PatchOption.StringOption(
|
||||||
|
key = "accentPressedColor",
|
||||||
|
default = "#ff169c46",
|
||||||
|
title = "Pressed accent for the dark theme",
|
||||||
|
description = "The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
package app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
import app.revanced.patcher.extensions.or
|
|
||||||
import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
|
|
||||||
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.annotations.HideTimeAndSeekbarCompatibility
|
|
||||||
import org.jf.dexlib2.AccessFlags
|
|
||||||
import org.jf.dexlib2.Opcode
|
|
||||||
|
|
||||||
@Name("inline-time-bar-wrapper-fingerprint")
|
|
||||||
@MatchingMethod("Lcom/google/android/apps/youtube/app/common/player/overlay/InlineTimeBarWrapper;", "onLayout")
|
|
||||||
@FuzzyPatternScanMethod(3)
|
|
||||||
@HideTimeAndSeekbarCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
object InlineTimeBarWrapperFingerprint : MethodFingerprint(
|
|
||||||
"V", AccessFlags.PROTECTED or AccessFlags.FINAL, listOf("Z", "I", "I", "I", "I"), listOf(
|
|
||||||
Opcode.SUB_INT_2ADDR,
|
|
||||||
Opcode.SUB_INT,
|
|
||||||
Opcode.IF_EQZ,
|
|
||||||
Opcode.IF_NEZ,
|
|
||||||
Opcode.GOTO_16,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.SUB_INT,
|
|
||||||
Opcode.CONST_4,
|
|
||||||
Opcode.INVOKE_STATIC,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.IGET_OBJECT,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
@@ -11,16 +11,22 @@ import org.jf.dexlib2.AccessFlags
|
|||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
|
|
||||||
@Name("time-counter-fingerprint")
|
@Name("time-counter-fingerprint")
|
||||||
@MatchingMethod("Lfez", "a")
|
@MatchingMethod("Lfga", "pk")
|
||||||
@FuzzyPatternScanMethod(3)
|
@FuzzyPatternScanMethod(3)
|
||||||
@HideTimeAndSeekbarCompatibility
|
@HideTimeAndSeekbarCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
object TimeCounterFingerprint : MethodFingerprint(
|
object TimeCounterFingerprint : MethodFingerprint(
|
||||||
"L", AccessFlags.PUBLIC or AccessFlags.STATIC, listOf("J"), listOf(
|
"V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf(
|
||||||
Opcode.SGET_OBJECT,
|
Opcode.IGET_OBJECT,
|
||||||
|
Opcode.IGET_WIDE,
|
||||||
Opcode.CONST_WIDE_16,
|
Opcode.CONST_WIDE_16,
|
||||||
Opcode.ADD_LONG_2ADDR,
|
Opcode.CMP_LONG,
|
||||||
|
Opcode.IF_LEZ,
|
||||||
|
Opcode.IGET_OBJECT,
|
||||||
|
Opcode.IF_EQZ,
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.INVOKE_VIRTUAL,
|
||||||
Opcode.MOVE_RESULT_WIDE,
|
Opcode.MOVE_RESULT,
|
||||||
|
Opcode.IF_EQZ,
|
||||||
|
Opcode.GOTO,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -10,9 +10,9 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
|||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
import app.revanced.patcher.patch.annotations.DependsOn
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.patch.impl.BytecodePatch
|
import app.revanced.patcher.patch.impl.BytecodePatch
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints.InlineTimeBarWrapperFingerprint
|
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints.TimeCounterFingerprint
|
import app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints.TimeCounterFingerprint
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.annotations.HideTimeAndSeekbarCompatibility
|
import app.revanced.patches.youtube.layout.hidetimeandseekbar.annotations.HideTimeAndSeekbarCompatibility
|
||||||
|
import app.revanced.patches.youtube.layout.sponsorblock.bytecode.fingerprints.CreateVideoPlayerSeekbarFingerprint
|
||||||
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.framework.components.impl.StringResource
|
import app.revanced.patches.youtube.misc.settings.framework.components.impl.StringResource
|
||||||
@@ -26,7 +26,7 @@ import app.revanced.patches.youtube.misc.settings.framework.components.impl.Swit
|
|||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class HideTimeAndSeekbarPatch : BytecodePatch(
|
class HideTimeAndSeekbarPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
InlineTimeBarWrapperFingerprint, TimeCounterFingerprint
|
CreateVideoPlayerSeekbarFingerprint, TimeCounterFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
override fun execute(data: BytecodeData): PatchResult {
|
override fun execute(data: BytecodeData): PatchResult {
|
||||||
@@ -40,10 +40,11 @@ class HideTimeAndSeekbarPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
val inlineTimeBarWrapperMethod = InlineTimeBarWrapperFingerprint.result!!.mutableMethod
|
val createVideoPlayerSeekbarMethod = CreateVideoPlayerSeekbarFingerprint.result!!.mutableMethod
|
||||||
|
|
||||||
inlineTimeBarWrapperMethod.addInstructions(
|
createVideoPlayerSeekbarMethod.addInstructions(
|
||||||
0, """
|
0, """
|
||||||
|
const/4 v0, 0x0
|
||||||
invoke-static { }, Lapp/revanced/integrations/patches/HideTimeAndSeekbarPatch;->hideTimeAndSeekbar()Z
|
invoke-static { }, Lapp/revanced/integrations/patches/HideTimeAndSeekbarPatch;->hideTimeAndSeekbar()Z
|
||||||
move-result v0
|
move-result v0
|
||||||
if-eqz v0, :hide_time_and_seekbar
|
if-eqz v0, :hide_time_and_seekbar
|
||||||
@@ -60,8 +61,7 @@ class HideTimeAndSeekbarPatch : BytecodePatch(
|
|||||||
invoke-static { }, Lapp/revanced/integrations/patches/HideTimeAndSeekbarPatch;->hideTimeAndSeekbar()Z
|
invoke-static { }, Lapp/revanced/integrations/patches/HideTimeAndSeekbarPatch;->hideTimeAndSeekbar()Z
|
||||||
move-result v0
|
move-result v0
|
||||||
if-eqz v0, :hide_time_and_seekbar
|
if-eqz v0, :hide_time_and_seekbar
|
||||||
const-string v0, ""
|
return-void
|
||||||
return-object v0
|
|
||||||
:hide_time_and_seekbar
|
:hide_time_and_seekbar
|
||||||
nop
|
nop
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ class SponsorBlockBytecodePatch : BytecodePatch(
|
|||||||
AppendTimeFingerprint,
|
AppendTimeFingerprint,
|
||||||
PlayerInitFingerprint,
|
PlayerInitFingerprint,
|
||||||
PlayerOverlaysLayoutInitFingerprint,
|
PlayerOverlaysLayoutInitFingerprint,
|
||||||
ShortsPlayerConstructorFingerprint
|
ShortsPlayerConstructorFingerprint,
|
||||||
|
StartVideoInformerFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
override fun execute(data: BytecodeData): PatchResult {/*
|
override fun execute(data: BytecodeData): PatchResult {/*
|
||||||
|
|||||||
@@ -14,10 +14,10 @@
|
|||||||
<string name="general_adjusting_sum">This is the number of milliseconds you can move when you use the time adjustment buttons while adding new segment</string>
|
<string name="general_adjusting_sum">This is the number of milliseconds you can move when you use the time adjustment buttons while adding new segment</string>
|
||||||
<string name="general_min_duration">Minimum segment duration</string>
|
<string name="general_min_duration">Minimum segment duration</string>
|
||||||
<string name="general_min_duration_sum">Segments shorter than the set value (in seconds) will not be skipped or shown in the player</string>
|
<string name="general_min_duration_sum">Segments shorter than the set value (in seconds) will not be skipped or shown in the player</string>
|
||||||
<string name="general_uuid">Your unique user id</string>
|
<string name="general_uuid">Your private user id</string>
|
||||||
<string name="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="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="settings_ie">Import/Export settings</string>
|
<string name="settings_ie">Import/Export settings</string>
|
||||||
<string name="settings_ie_sum">This is your entire configuration that is applicable in the desktop extension in JSON. This includes your userID, so be sure to share this wisely.</string>
|
<string name="settings_ie_sum">This is your entire configuration that is applicable in the desktop extension in JSON. This includes your Private userID, so be sure to share this wisely.</string>
|
||||||
<string name="general_api_url">Change API URL</string>
|
<string name="general_api_url">Change API URL</string>
|
||||||
<string name="general_api_url_sum">The address SponsorBlock uses to make calls to the server. <b>Don\'t change this unless you know what you\'re doing.</b></string>
|
<string name="general_api_url_sum">The address SponsorBlock uses to make calls to the server. <b>Don\'t change this unless you know what you\'re doing.</b></string>
|
||||||
<string name="settings_import_successful">Settings were successfully imported</string>
|
<string name="settings_import_successful">Settings were successfully imported</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user