mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-06-12 05:07:41 +02:00
feat(YouTube): add Hide shortcuts
patch
This commit is contained in:
@ -0,0 +1,69 @@
|
||||
package app.revanced.patches.youtube.layout.shortcut
|
||||
|
||||
import app.revanced.patcher.data.ResourceContext
|
||||
import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.booleanPatchOption
|
||||
import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE
|
||||
import app.revanced.patches.youtube.utils.settings.SettingsPatch
|
||||
import app.revanced.util.findElementByAttributeValueOrThrow
|
||||
import app.revanced.util.patch.BaseResourcePatch
|
||||
import org.w3c.dom.Element
|
||||
|
||||
@Suppress("DEPRECATION", "unused")
|
||||
object ShortcutPatch : BaseResourcePatch(
|
||||
name = "Hide shortcuts",
|
||||
description = "Remove, at compile time, the app shortcuts that appears when app icon is long pressed.",
|
||||
dependencies = setOf(SettingsPatch::class),
|
||||
compatiblePackages = COMPATIBLE_PACKAGE,
|
||||
use = false
|
||||
) {
|
||||
private val Explore by booleanPatchOption(
|
||||
key = "Explore",
|
||||
default = false,
|
||||
title = "Hide Explore",
|
||||
description = "Hide Explore from shortcuts.",
|
||||
required = true
|
||||
)
|
||||
|
||||
private val Subscriptions by booleanPatchOption(
|
||||
key = "Subscriptions",
|
||||
default = false,
|
||||
title = "Hide Subscriptions",
|
||||
description = "Hide Subscriptions from shortcuts.",
|
||||
required = true
|
||||
)
|
||||
|
||||
private val Search by booleanPatchOption(
|
||||
key = "Search",
|
||||
default = false,
|
||||
title = "Hide Search",
|
||||
description = "Hide Search from shortcuts.",
|
||||
required = true
|
||||
)
|
||||
|
||||
private val Shorts by booleanPatchOption(
|
||||
key = "Shorts",
|
||||
default = true,
|
||||
title = "Hide Shorts",
|
||||
description = "Hide Shorts from shortcuts.",
|
||||
required = true
|
||||
)
|
||||
|
||||
override fun execute(context: ResourceContext) {
|
||||
|
||||
this.options.values.forEach { options ->
|
||||
if (options.value == true) {
|
||||
context.xmlEditor["res/xml/main_shortcuts.xml"].use { editor ->
|
||||
val shortcuts = editor.file.getElementsByTagName("shortcuts").item(0) as Element
|
||||
val shortsItem = shortcuts.getElementsByTagName("shortcut")
|
||||
.findElementByAttributeValueOrThrow(
|
||||
"android:shortcutId",
|
||||
"${options.key.lowercase()}-shortcut"
|
||||
)
|
||||
shortsItem.parentNode.removeChild(shortsItem)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SettingsPatch.updatePatchStatus(this)
|
||||
}
|
||||
}
|
@ -8,6 +8,7 @@ import app.revanced.patcher.patch.options.PatchOption
|
||||
import app.revanced.patcher.util.DomFileEditor
|
||||
import org.w3c.dom.Element
|
||||
import org.w3c.dom.Node
|
||||
import org.w3c.dom.NodeList
|
||||
import java.io.File
|
||||
import java.io.InputStream
|
||||
import java.nio.file.Files
|
||||
@ -195,4 +196,30 @@ fun String.copyXmlNode(source: DomFileEditor, target: DomFileEditor): AutoClosea
|
||||
source.close()
|
||||
target.close()
|
||||
}
|
||||
}
|
||||
|
||||
internal fun NodeList.findElementByAttributeValue(attributeName: String, value: String): Element? {
|
||||
for (i in 0 until length) {
|
||||
val node = item(i)
|
||||
if (node.nodeType == Node.ELEMENT_NODE) {
|
||||
val element = node as Element
|
||||
|
||||
if (element.getAttribute(attributeName) == value) {
|
||||
return element
|
||||
}
|
||||
|
||||
// Recursively search.
|
||||
val found = element.childNodes.findElementByAttributeValue(attributeName, value)
|
||||
if (found != null) {
|
||||
return found
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
internal fun NodeList.findElementByAttributeValueOrThrow(attributeName: String, value: String): Element {
|
||||
return findElementByAttributeValue(attributeName, value)
|
||||
?: throw PatchException("Could not find: $attributeName $value")
|
||||
}
|
Reference in New Issue
Block a user