Compare commits

...

19 Commits

Author SHA1 Message Date
semantic-release-bot
1db7eebeaa chore(release): 2.149.1-dev.2 [skip ci]
## [2.149.1-dev.2](https://github.com/revanced/revanced-patches/compare/v2.149.1-dev.1...v2.149.1-dev.2) (2022-12-31)

### Bug Fixes

* **youtube/general-ads:** resolve fingerprint to correct method ([#1404](https://github.com/revanced/revanced-patches/issues/1404)) ([50e210d](50e210d94f))
2022-12-31 02:50:40 +00:00
0xrxL
50e210d94f fix(youtube/general-ads): resolve fingerprint to correct method (#1404) 2022-12-31 03:48:57 +01:00
semantic-release-bot
ad6fab930d chore(release): 2.149.1-dev.1 [skip ci]
## [2.149.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.149.0...v2.149.1-dev.1) (2022-12-30)

### Bug Fixes

* **youtube/bottom-controls-resource-patch:** use correct length for `nameSpaceLength` ([#1401](https://github.com/revanced/revanced-patches/issues/1401)) ([7966be8](7966be827f))
2022-12-30 21:11:17 +00:00
aliernfrog
7966be827f fix(youtube/bottom-controls-resource-patch): use correct length for nameSpaceLength (#1401) 2022-12-30 22:09:29 +01:00
semantic-release-bot
6a6f05e2cb chore(release): 2.149.0 [skip ci]
# [2.149.0](https://github.com/revanced/revanced-patches/compare/v2.148.0...v2.149.0) (2022-12-30)

### Bug Fixes

* **tasker/unlock-license:** resolve fingerprint correctly ([9158fd5](9158fd5054))

### Features

* **youtube/general-ads-patch:** hide channel member shelf ([#1380](https://github.com/revanced/revanced-patches/issues/1380)) ([6441b03](6441b031e3))
2022-12-30 04:22:43 +00:00
oSumAtrIX
752b12b66d chore: merge branch dev to main (#1391) 2022-12-30 05:20:53 +01:00
semantic-release-bot
623a9bce98 chore(release): 2.149.0-dev.1 [skip ci]
# [2.149.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.148.0...v2.149.0-dev.1) (2022-12-30)

### Bug Fixes

* **tasker/unlock-license:** resolve fingerprint correctly ([9158fd5](9158fd5054))

### Features

* **youtube/general-ads-patch:** hide channel member shelf ([#1380](https://github.com/revanced/revanced-patches/issues/1380)) ([6441b03](6441b031e3))
2022-12-30 04:18:42 +00:00
0xrxL
6441b031e3 feat(youtube/general-ads-patch): hide channel member shelf (#1380)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-12-30 05:16:28 +01:00
oSumAtrIX
4227ffa40f refactor(tasker/unlock-trial): rename patch to unlock-trial 2022-12-30 05:14:30 +01:00
oSumAtrIX
9158fd5054 fix(tasker/unlock-license): resolve fingerprint correctly 2022-12-30 05:13:28 +01:00
oSumAtrIX
7f529d1038 ci: do not escape in environment variable MESSAGE 2022-12-29 19:07:32 +01:00
semantic-release-bot
bb38c02b51 chore(release): 2.148.0 [skip ci]
# [2.148.0](https://github.com/revanced/revanced-patches/compare/v2.147.0...v2.148.0) (2022-12-29)

### Bug Fixes

* **youtube/general-ads:** don't early return when not necessary ([#1353](https://github.com/revanced/revanced-patches/issues/1353)) ([3227d66](3227d66dc2))

### Features

* **tasker:** `unlock-license` patch ([#1339](https://github.com/revanced/revanced-patches/issues/1339)) ([e60173a](e60173addf))
* **twitter:** `hide-views-stats` patch ([#1371](https://github.com/revanced/revanced-patches/issues/1371)) ([63f5af5](63f5af5c3b))
* **youtube/general-ads-patch:** hide guidelines for subscriber ([#1352](https://github.com/revanced/revanced-patches/issues/1352)) ([adc2f73](adc2f738c0))
* **youtube/theme:** add option to color the seekbar ([2374af6](2374af6f82))
* **youtube/theme:** include the patch by default ([4da3e4f](4da3e4f369))
* **youtube:** `hide-breaking-news-shelf` patch ([#1381](https://github.com/revanced/revanced-patches/issues/1381)) ([7e3184b](7e3184b5f7))
2022-12-29 18:01:13 +00:00
oSumAtrIX
b927e8b93f chore: merge branch dev to main (#1389) 2022-12-29 18:59:20 +01:00
semantic-release-bot
ba4676d500 chore(release): 2.148.0-dev.6 [skip ci]
# [2.148.0-dev.6](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.5...v2.148.0-dev.6) (2022-12-29)

### Features

* **youtube/theme:** add option to color the seekbar ([2374af6](2374af6f82))
* **youtube/theme:** include the patch by default ([4da3e4f](4da3e4f369))
2022-12-29 17:42:40 +00:00
oSumAtrIX
1af1bf8342 refactor(youtube/theme): apply default formatting 2022-12-29 18:40:28 +01:00
oSumAtrIX
2374af6f82 feat(youtube/theme): add option to color the seekbar 2022-12-29 18:39:54 +01:00
oSumAtrIX
4da3e4f369 feat(youtube/theme): include the patch by default 2022-12-29 18:22:25 +01:00
semantic-release-bot
f89027609f chore(release): 2.148.0-dev.5 [skip ci]
# [2.148.0-dev.5](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.4...v2.148.0-dev.5) (2022-12-29)

### Features

* **youtube:** `hide-breaking-news-shelf` patch ([#1381](https://github.com/revanced/revanced-patches/issues/1381)) ([7e3184b](7e3184b5f7))
2022-12-29 16:44:25 +00:00
0xrxL
7e3184b5f7 feat(youtube): hide-breaking-news-shelf patch (#1381)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-12-29 17:42:33 +01:00
18 changed files with 271 additions and 80 deletions

View File

@@ -7,7 +7,7 @@ on:
workflow_dispatch:
env:
MESSAGE: merge branch \`${{ github.head_ref || github.ref_name }}\` to \`main\`
MESSAGE: merge branch `${{ github.head_ref || github.ref_name }}` to `main`
jobs:
pull-request:

View File

@@ -1,3 +1,73 @@
## [2.149.1-dev.2](https://github.com/revanced/revanced-patches/compare/v2.149.1-dev.1...v2.149.1-dev.2) (2022-12-31)
### Bug Fixes
* **youtube/general-ads:** resolve fingerprint to correct method ([#1404](https://github.com/revanced/revanced-patches/issues/1404)) ([e135485](https://github.com/revanced/revanced-patches/commit/e1354852501cb582549cbf0634b1a15e1d0012d9))
## [2.149.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.149.0...v2.149.1-dev.1) (2022-12-30)
### Bug Fixes
* **youtube/bottom-controls-resource-patch:** use correct length for `nameSpaceLength` ([#1401](https://github.com/revanced/revanced-patches/issues/1401)) ([7190066](https://github.com/revanced/revanced-patches/commit/7190066a8ded8b59970483a81d7902526d552093))
# [2.149.0](https://github.com/revanced/revanced-patches/compare/v2.148.0...v2.149.0) (2022-12-30)
### Bug Fixes
* **tasker/unlock-license:** resolve fingerprint correctly ([92d7857](https://github.com/revanced/revanced-patches/commit/92d78576f033dd7155c80cb08d5911048b06c36c))
### Features
* **youtube/general-ads-patch:** hide channel member shelf ([#1380](https://github.com/revanced/revanced-patches/issues/1380)) ([ce2b104](https://github.com/revanced/revanced-patches/commit/ce2b104f508f1581ec531446d60bd3d41dafbd2c))
# [2.149.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.148.0...v2.149.0-dev.1) (2022-12-30)
### Bug Fixes
* **tasker/unlock-license:** resolve fingerprint correctly ([92d7857](https://github.com/revanced/revanced-patches/commit/92d78576f033dd7155c80cb08d5911048b06c36c))
### Features
* **youtube/general-ads-patch:** hide channel member shelf ([#1380](https://github.com/revanced/revanced-patches/issues/1380)) ([ce2b104](https://github.com/revanced/revanced-patches/commit/ce2b104f508f1581ec531446d60bd3d41dafbd2c))
# [2.148.0](https://github.com/revanced/revanced-patches/compare/v2.147.0...v2.148.0) (2022-12-29)
### Bug Fixes
* **youtube/general-ads:** don't early return when not necessary ([#1353](https://github.com/revanced/revanced-patches/issues/1353)) ([003a400](https://github.com/revanced/revanced-patches/commit/003a400ce41ff543fb5484c576f5ec2df0a87273))
### Features
* **tasker:** `unlock-license` patch ([#1339](https://github.com/revanced/revanced-patches/issues/1339)) ([78a43b8](https://github.com/revanced/revanced-patches/commit/78a43b8abd972172eab99519dfa636ce77d9e64f))
* **twitter:** `hide-views-stats` patch ([#1371](https://github.com/revanced/revanced-patches/issues/1371)) ([2f04a06](https://github.com/revanced/revanced-patches/commit/2f04a06e3b782931870d973fd0937f8731062f12))
* **youtube/general-ads-patch:** hide guidelines for subscriber ([#1352](https://github.com/revanced/revanced-patches/issues/1352)) ([2d10932](https://github.com/revanced/revanced-patches/commit/2d1093251d5d50b476ca44f76acb9a8597b37aea))
* **youtube/theme:** add option to color the seekbar ([53b91fe](https://github.com/revanced/revanced-patches/commit/53b91fe2b5a41f1a63deec8d919f2a1bc1cae12a))
* **youtube/theme:** include the patch by default ([c363997](https://github.com/revanced/revanced-patches/commit/c3639975683fb0ca0e271e8fc3ef7fbf79f33414))
* **youtube:** `hide-breaking-news-shelf` patch ([#1381](https://github.com/revanced/revanced-patches/issues/1381)) ([38a9877](https://github.com/revanced/revanced-patches/commit/38a987744fbb49c2b7d5d0e69297e95f5ee405c4))
# [2.148.0-dev.6](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.5...v2.148.0-dev.6) (2022-12-29)
### Features
* **youtube/theme:** add option to color the seekbar ([53b91fe](https://github.com/revanced/revanced-patches/commit/53b91fe2b5a41f1a63deec8d919f2a1bc1cae12a))
* **youtube/theme:** include the patch by default ([c363997](https://github.com/revanced/revanced-patches/commit/c3639975683fb0ca0e271e8fc3ef7fbf79f33414))
# [2.148.0-dev.5](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.4...v2.148.0-dev.5) (2022-12-29)
### Features
* **youtube:** `hide-breaking-news-shelf` patch ([#1381](https://github.com/revanced/revanced-patches/issues/1381)) ([38a9877](https://github.com/revanced/revanced-patches/commit/38a987744fbb49c2b7d5d0e69297e95f5ee405c4))
# [2.148.0-dev.4](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.3...v2.148.0-dev.4) (2022-12-29)

View File

@@ -28,6 +28,7 @@ The official Patch bundle provided by ReVanced and the community.
| `hide-album-cards` | Hides the album cards below the artist description. | 17.49.37 |
| `hide-artist-card` | Hides the artist card below the searchbar. | 17.49.37 |
| `hide-autoplay-button` | Hides the autoplay button in the video player. | 17.49.37 |
| `hide-breaking-news-shelf` | Hides the breaking news shelf on the homepage tab. | 17.49.37 |
| `hide-captions-button` | Hides the captions button on video player. | 17.49.37 |
| `hide-cast-button` | Hides the cast button in the video player. | all |
| `hide-create-button` | Hides the create button in the navigation bar. | 17.49.37 |
@@ -198,14 +199,6 @@ The official Patch bundle provided by ReVanced and the community.
| `promo-code-unlock` | Disables the validation of promo code. Any code will work to unlock all features. | all |
</details>
### [📦 `net.dinglisch.android.taskerm`](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm)
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `unlock-license` | Unlocks the trial version. | all |
</details>
### [📦 `co.windyapp.android`](https://play.google.com/store/apps/details?id=co.windyapp.android)
<details>
@@ -254,6 +247,14 @@ The official Patch bundle provided by ReVanced and the community.
| `unlock-themes` | Unlocks all themes. | all |
</details>
### [📦 `net.dinglisch.android.taskerm`](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm)
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `unlock-trial` | Unlocks the trial version. | all |
</details>
## 📝 JSON Format

View File

@@ -1,2 +1,2 @@
kotlin.code.style = official
version = 2.148.0-dev.4
version = 2.149.1-dev.2

File diff suppressed because one or more lines are too long

View File

@@ -1,14 +0,0 @@
package app.revanced.patches.tasker.license.unlock.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode
object CheckLicenseFingerprint : MethodFingerprint(
strings = listOf("just(IsLicensedResult(true))"),
opcodes = listOf(
Opcode.GOTO,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL
)
)

View File

@@ -1,46 +0,0 @@
package app.revanced.patches.tasker.license.unlock.patch
import app.revanced.extensions.toErrorResult
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.instruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.tasker.license.unlock.annotations.UnlockLicenseCompatibility
import app.revanced.patches.tasker.license.unlock.fingerprints.CheckLicenseFingerprint
import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
import org.jf.dexlib2.iface.reference.MethodReference
import org.jf.dexlib2.immutable.instruction.ImmutableInstruction35c
@Patch
@Name("unlock-license")
@Description("Unlocks the trial version.")
@UnlockLicenseCompatibility
@Version("0.0.1")
class UnlockLicensePatch : BytecodePatch(
listOf(
CheckLicenseFingerprint
)
) {
override fun execute(context: BytecodeContext) = CheckLicenseFingerprint.result?.let { result ->
val patchIndex = result.scanResult.patternScanResult!!.endIndex
with(result.mutableMethod.instruction(patchIndex) as FiveRegisterInstruction) {
ImmutableInstruction35c(
opcode,
registerCount,
registerC,
0, // registerE is 1, registerD is now 0 instead of 1 bypassing the license verification
registerE,
registerF,
registerG,
(this as ReferenceInstruction).reference as MethodReference
)
}
PatchResultSuccess()
} ?: CheckLicenseFingerprint.toErrorResult()
}

View File

@@ -1,4 +1,4 @@
package app.revanced.patches.tasker.license.unlock.annotations
package app.revanced.patches.tasker.trial.unlock.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@@ -6,4 +6,4 @@ import app.revanced.patcher.annotation.Package
@Compatibility([Package("net.dinglisch.android.taskerm")])
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class UnlockLicenseCompatibility
internal annotation class UnlockTrialCompatibility

View File

@@ -0,0 +1,7 @@
package app.revanced.patches.tasker.trial.unlock.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object CheckLicenseFingerprint : MethodFingerprint(
strings = listOf("Can't check license")
)

View File

@@ -0,0 +1,32 @@
package app.revanced.patches.tasker.trial.unlock.patch
import app.revanced.extensions.toErrorResult
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.tasker.trial.unlock.annotations.UnlockTrialCompatibility
import app.revanced.patches.tasker.trial.unlock.fingerprints.CheckLicenseFingerprint
@Patch
@Name("unlock-trial")
@Description("Unlocks the trial version.")
@UnlockTrialCompatibility
@Version("0.0.1")
class UnlockLicensePatch : BytecodePatch(
listOf(
CheckLicenseFingerprint
)
) {
override fun execute(context: BytecodeContext) = CheckLicenseFingerprint
.result
?.mutableMethod
// Return the method early, which prompts the user with a non dismissible dialog, when the trial period is over.
?.addInstruction(0, "return-void")
?.let { PatchResultSuccess() }
?: CheckLicenseFingerprint.toErrorResult()
}

View File

@@ -109,6 +109,13 @@ class GeneralAdsResourcePatch : ResourcePatch {
StringResource("revanced_adremover_subscribers_community_guidelines_enabled_summary_on", "Subscribers community guidelines are hidden"),
StringResource("revanced_adremover_subscribers_community_guidelines_enabled_summary_off", "Subscribers community guidelines are shown")
),
SwitchPreference(
"revanced_adremover_channel_member_shelf_removal",
StringResource("revanced_adremover_channel_member_shelf_enabled_title", "Hide channel member shelf"),
true,
StringResource("revanced_adremover_channel_member_shelf_enabled_summary_on", "Channel member shelf is hidden"),
StringResource("revanced_adremover_channel_member_shelf_enabled_summary_off", "Channel member shelf is shown")
),
SwitchPreference(
"revanced_adremover_emergency_box_removal",
StringResource("revanced_adremover_emergency_box_enabled_title", "Hide emergency boxes"),

View File

@@ -0,0 +1,13 @@
package app.revanced.patches.youtube.layout.homepage.breakingnews.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.youtube", arrayOf("17.49.37")
)]
)
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class BreakingNewsCompatibility

View File

@@ -0,0 +1,23 @@
package app.revanced.patches.youtube.layout.homepage.breakingnews.bytecode.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patches.youtube.layout.homepage.breakingnews.resource.patch.BreakingNewsResourcePatch
import org.jf.dexlib2.Opcode
import org.jf.dexlib2.iface.instruction.WideLiteralInstruction
object BreakingNewsFingerprint : MethodFingerprint(
opcodes = listOf(
Opcode.CONST,
Opcode.CONST_4,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.CHECK_CAST,
Opcode.IPUT_OBJECT,
),
customFingerprint = { methodDef ->
methodDef.implementation?.instructions?.any { instruction ->
instruction.opcode.ordinal == Opcode.CONST.ordinal &&
(instruction as? WideLiteralInstruction)?.wideLiteral == BreakingNewsResourcePatch.horizontalCardListId
} == true
}
)

View File

@@ -0,0 +1,46 @@
package app.revanced.patches.youtube.layout.homepage.breakingnews.bytecode.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstruction
import app.revanced.patcher.extensions.instruction
import app.revanced.patcher.patch.BytecodePatch
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.patches.youtube.layout.homepage.breakingnews.annotations.BreakingNewsCompatibility
import app.revanced.patches.youtube.layout.homepage.breakingnews.bytecode.fingerprints.BreakingNewsFingerprint
import app.revanced.patches.youtube.layout.homepage.breakingnews.resource.patch.BreakingNewsResourcePatch
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
@Patch
@DependsOn([IntegrationsPatch::class, BreakingNewsResourcePatch::class])
@Name("hide-breaking-news-shelf")
@Description("Hides the breaking news shelf on the homepage tab.")
@BreakingNewsCompatibility
@Version("0.0.1")
class BreakingNewsPatch : BytecodePatch(
listOf(
BreakingNewsFingerprint,
)
) {
override fun execute(context: BytecodeContext): PatchResult {
val breakingNewsResult = BreakingNewsFingerprint.result!!
val breakingNewsMethod = breakingNewsResult.mutableMethod
val moveResultObjectIndex =
breakingNewsResult.scanResult.patternScanResult!!.endIndex - 2
breakingNewsMethod.addInstruction(
moveResultObjectIndex + 1, """
invoke-static {v${(breakingNewsMethod.instruction(moveResultObjectIndex) as OneRegisterInstruction).registerA}}, Lapp/revanced/integrations/patches/HideBreakingNewsPatch;->hideBreakingNews(Landroid/view/View;)V
"""
)
return PatchResultSuccess()
}
}

View File

@@ -0,0 +1,40 @@
package app.revanced.patches.youtube.layout.homepage.breakingnews.resource.patch
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.ResourceContext
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.ResourcePatch
import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
import app.revanced.patches.shared.settings.preference.impl.StringResource
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
@Name("breaking-news-shelf-resource-patch")
@DependsOn([SettingsPatch::class, ResourceMappingPatch::class])
@Version("0.0.1")
class BreakingNewsResourcePatch : ResourcePatch {
companion object {
internal var horizontalCardListId: Long = -1
}
override fun execute(context: ResourceContext): PatchResult {
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
SwitchPreference(
"revanced_hide_breaking_news",
StringResource("revanced_hide_breaking_news_title", "Hide breaking news"),
true,
StringResource("revanced_hide_breaking_news_summary_on", "Breaking news are hidden"),
StringResource("revanced_hide_breaking_news_summary_off", "Breaking news are shown")
)
)
horizontalCardListId = ResourceMappingPatch.resourceMappings.single {
it.type == "layout" && it.name == "horizontal_card_list"
}.id
return PatchResultSuccess()
}
}

View File

@@ -13,7 +13,7 @@ import app.revanced.util.resources.ResourceUtils
import app.revanced.util.resources.ResourceUtils.copyResources
import org.w3c.dom.Element
@Patch(include = false)
@Patch
@DependsOn([LithoThemePatch::class, FixLocaleConfigErrorPatch::class])
@Name("theme")
@Description("Applies a custom theme.")
@@ -23,6 +23,7 @@ class ThemePatch : ResourcePatch {
override fun execute(context: ResourceContext): PatchResult {
val darkThemeBackgroundColor = darkThemeBackgroundColor!!
val lightThemeBackgroundColor = lightThemeBackgroundColor!!
val darkThemeSeekbarColor = darkThemeSeekbarColor!!
context.xmlEditor["res/values/colors.xml"].use { editor ->
val resourcesNode = editor.file.getElementsByTagName("resources").item(0) as Element
@@ -31,20 +32,20 @@ class ThemePatch : ResourcePatch {
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
node.textContent = when (node.getAttribute("name")) {
"yt_black0", "yt_black1", "yt_black1_opacity95", "yt_black1_opacity98", "yt_black2", "yt_black3",
"yt_black4", "yt_status_bar_background_dark", "material_grey_850" -> darkThemeBackgroundColor
"yt_black0", "yt_black1", "yt_black1_opacity95", "yt_black1_opacity98", "yt_black2", "yt_black3", "yt_black4", "yt_status_bar_background_dark", "material_grey_850" -> darkThemeBackgroundColor
"yt_white1", "yt_white1_opacity95", "yt_white1_opacity98", "yt_white2", "yt_white3", "yt_white4",
-> lightThemeBackgroundColor
-> lightThemeBackgroundColor
"inline_time_bar_colorized_bar_played_color_dark" -> darkThemeSeekbarColor
else -> continue
}
}
}
// copies the resource file to change the splash screen color
context.copyResources("theme",
ResourceUtils.ResourceGroup("values-night-v31", "styles.xml")
context.copyResources(
"theme", ResourceUtils.ResourceGroup("values-night-v31", "styles.xml")
)
return PatchResultSuccess()
@@ -68,5 +69,14 @@ class ThemePatch : ResourcePatch {
description = "The background color of the light theme. Can be a hex color or a resource reference.",
)
)
var darkThemeSeekbarColor: String? by option(
PatchOption.StringOption(
key = "darkThemeSeekbarColor",
default = "#ffff0000",
title = "Dark theme seekbar color",
description = "The background color of the seekbar of the dark theme. Leave empty for default color.",
)
)
}
}

View File

@@ -8,6 +8,8 @@ object CanScrollVerticallyFingerprint : MethodFingerprint(
"Z",
parameters = emptyList(),
opcodes = listOf(
Opcode.MOVE_RESULT,
Opcode.RETURN,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
),

View File

@@ -68,7 +68,7 @@ class BottomControlsResourcePatch : ResourcePatch {
"$namespace/$lastLeftOf"
// set lastLeftOf attribute to the the current element
val nameSpaceLength = 4
val nameSpaceLength = 5
lastLeftOf = element.attributes.getNamedItem("android:id").nodeValue.substring(nameSpaceLength)
// copy the element