Skip to content

Commit

Permalink
feat(YouTube): add Hide shortcuts patch
Browse files Browse the repository at this point in the history
  • Loading branch information
inotia00 committed Sep 28, 2024
1 parent 5a77518 commit 63d7b6c
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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)
}
}
27 changes: 27 additions & 0 deletions src/main/kotlin/app/revanced/util/ResourceUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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")
}
1 change: 1 addition & 0 deletions src/main/resources/youtube/settings/xml/revanced_prefs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -825,6 +825,7 @@
<Preference android:title="Custom Shorts action buttons" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
<Preference android:title="GmsCore support" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
<Preference android:title="Hide Shorts dimming" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
<Preference android:title="Hide shortcuts" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
<Preference android:title="Icon" android:summary="@string/revanced_icon_default" android:selectable="false"/>
<Preference android:title="Label" android:summary="@string/revanced_label_default" android:selectable="false"/>
<Preference android:title="Return YouTube Dislike" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
Expand Down

0 comments on commit 63d7b6c

Please sign in to comment.