mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-06-12 21:27:43 +02:00
add custom-branding-icon-manual
patch
This commit is contained in:
@ -0,0 +1,61 @@
|
||||
package app.revanced.patches.youtube.layout.etc.branding.icon.patch
|
||||
|
||||
import app.revanced.patcher.annotation.Description
|
||||
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.PatchResultError
|
||||
import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.ResourcePatch
|
||||
import app.revanced.patcher.patch.annotations.DependsOn
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.shared.annotation.YouTubeCompatibility
|
||||
import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsPatch
|
||||
import app.revanced.util.resources.IconHelper.YOUTUBE_LAUNCHER_ICON_ARRAY
|
||||
import app.revanced.util.resources.IconHelper.copyFiles
|
||||
import app.revanced.util.resources.IconHelper.makeDirectoryAndCopyFiles
|
||||
import app.revanced.util.resources.ResourceHelper.updatePatchStatusIcon
|
||||
import app.revanced.util.resources.ResourceUtils
|
||||
|
||||
|
||||
@Patch(false)
|
||||
@Name("custom-branding-icon-manual")
|
||||
@Description("Changes the YouTube Music launcher icon specified in the 'branding' directory.")
|
||||
@DependsOn([SettingsPatch::class])
|
||||
@YouTubeCompatibility
|
||||
@Version("0.0.1")
|
||||
class CustomBrandingIconManualPatch : ResourcePatch {
|
||||
override fun execute(context: ResourceContext): PatchResult {
|
||||
|
||||
fun copyResources(resourceGroups: List<ResourceUtils.ResourceGroup>) {
|
||||
val iconPath = "branding"
|
||||
|
||||
try {
|
||||
context.copyFiles(resourceGroups, iconPath)
|
||||
} catch (_: Exception) {
|
||||
context.makeDirectoryAndCopyFiles(resourceGroups, iconPath)
|
||||
throw PatchResultError("icon not found!")
|
||||
}
|
||||
}
|
||||
|
||||
val iconResourceFileNames =
|
||||
YOUTUBE_LAUNCHER_ICON_ARRAY
|
||||
.map { "$it.png" }
|
||||
.toTypedArray()
|
||||
|
||||
fun createGroup(directory: String) = ResourceUtils.ResourceGroup(
|
||||
directory, *iconResourceFileNames
|
||||
)
|
||||
|
||||
// change the app icon
|
||||
arrayOf("xxxhdpi", "xxhdpi", "xhdpi", "hdpi", "mdpi")
|
||||
.map { "mipmap-$it" }
|
||||
.map(::createGroup)
|
||||
.let(::copyResources)
|
||||
|
||||
context.updatePatchStatusIcon("custom")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
@ -1,19 +1,74 @@
|
||||
package app.revanced.util.resources
|
||||
|
||||
import app.revanced.patcher.data.ResourceContext
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Paths
|
||||
import java.nio.file.StandardCopyOption
|
||||
|
||||
internal object IconHelper {
|
||||
|
||||
internal fun ResourceContext.customIcon(iconName: String) {
|
||||
val launchIcon = arrayOf(
|
||||
internal var YOUTUBE_LAUNCHER_ICON_ARRAY =
|
||||
arrayOf(
|
||||
"adaptiveproduct_youtube_background_color_108",
|
||||
"adaptiveproduct_youtube_foreground_color_108",
|
||||
"ic_launcher",
|
||||
"ic_launcher_round"
|
||||
)
|
||||
|
||||
internal var YOUTUBE_MUSIC_LAUNCHER_ICON_ARRAY =
|
||||
arrayOf(
|
||||
"adaptiveproduct_youtube_music_background_color_108",
|
||||
"adaptiveproduct_youtube_music_foreground_color_108",
|
||||
"ic_launcher_release"
|
||||
)
|
||||
|
||||
internal fun ResourceContext.copyFiles(
|
||||
resourceGroups: List<ResourceUtils.ResourceGroup>,
|
||||
path: String
|
||||
) {
|
||||
val iconPath = File(Paths.get("").toAbsolutePath().toString()).resolve(path)
|
||||
val resourceDirectory = this["res"]
|
||||
|
||||
resourceGroups.forEach { group ->
|
||||
val fromDirectory = iconPath.resolve(group.resourceDirectoryName)
|
||||
val toDirectory = resourceDirectory.resolve(group.resourceDirectoryName)
|
||||
|
||||
group.resources.forEach { iconFileName ->
|
||||
Files.write(
|
||||
toDirectory.resolve(iconFileName).toPath(),
|
||||
fromDirectory.resolve(iconFileName).readBytes()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResourceContext.makeDirectoryAndCopyFiles(
|
||||
resourceGroups: List<ResourceUtils.ResourceGroup>,
|
||||
path: String
|
||||
) {
|
||||
val newDirectory = Paths.get("").toAbsolutePath().toString() + "/$path"
|
||||
this[newDirectory].mkdir()
|
||||
|
||||
val iconPath = File(Paths.get("").toAbsolutePath().toString()).resolve(path)
|
||||
val resourceDirectory = this["res"]
|
||||
|
||||
resourceGroups.forEach { group ->
|
||||
this[newDirectory + "/${group.resourceDirectoryName}"].mkdir()
|
||||
val fromDirectory = iconPath.resolve(group.resourceDirectoryName)
|
||||
val toDirectory = resourceDirectory.resolve(group.resourceDirectoryName)
|
||||
|
||||
group.resources.forEach { iconFileName ->
|
||||
Files.write(
|
||||
fromDirectory.resolve(iconFileName).toPath(),
|
||||
toDirectory.resolve(iconFileName).readBytes()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResourceContext.customIcon(iconName: String) {
|
||||
val launchIcon = YOUTUBE_LAUNCHER_ICON_ARRAY
|
||||
|
||||
val splashIcon = arrayOf(
|
||||
"product_logo_youtube_color_24",
|
||||
"product_logo_youtube_color_36",
|
||||
@ -49,11 +104,7 @@ internal object IconHelper {
|
||||
}
|
||||
|
||||
internal fun ResourceContext.customIconMusic(iconName: String) {
|
||||
val launchIcon = arrayOf(
|
||||
"adaptiveproduct_youtube_music_background_color_108",
|
||||
"adaptiveproduct_youtube_music_foreground_color_108",
|
||||
"ic_launcher_release"
|
||||
)
|
||||
val launchIcon = YOUTUBE_MUSIC_LAUNCHER_ICON_ARRAY
|
||||
|
||||
copyResources(
|
||||
"music",
|
||||
|
Reference in New Issue
Block a user