@@ -9,8 +9,10 @@ import app.revanced.patches.music.utils.settings.ResourceUtils.setIconType
9
9
import app.revanced.util.ResourceGroup
10
10
import app.revanced.util.Utils.trimIndentMultiline
11
11
import app.revanced.util.copyResources
12
+ import app.revanced.util.getResourceGroup
12
13
import app.revanced.util.patch.BaseResourcePatch
13
14
import app.revanced.util.underBarOrThrow
15
+ import org.w3c.dom.Element
14
16
import java.io.File
15
17
import java.nio.file.Files
16
18
@@ -71,17 +73,11 @@ object CustomBrandingIconPatch : BaseResourcePatch(
71
73
" record"
72
74
).map { " $it .png" }.toTypedArray()
73
75
74
- private val launcherIconResourceGroups = mipmapDirectories.map { directory ->
75
- ResourceGroup (
76
- directory, * launcherIconResourceFileNames
77
- )
78
- }
76
+ private val launcherIconResourceGroups =
77
+ mipmapDirectories.getResourceGroup(launcherIconResourceFileNames)
79
78
80
- private val splashIconResourceGroups = largeDrawableDirectories.map { directory ->
81
- ResourceGroup (
82
- directory, * splashIconResourceFileNames
83
- )
84
- }
79
+ private val splashIconResourceGroups =
80
+ largeDrawableDirectories.getResourceGroup(splashIconResourceFileNames)
85
81
86
82
private val AppIcon = stringPatchOption(
87
83
key = " AppIcon" ,
@@ -110,13 +106,28 @@ object CustomBrandingIconPatch : BaseResourcePatch(
110
106
required = true
111
107
)
112
108
109
+ private val RestoreOldSplashIcon by booleanPatchOption(
110
+ key = " RestoreOldSplashIcon" ,
111
+ default = false ,
112
+ title = " Restore old splash icon" ,
113
+ description = """
114
+ Restore the old style splash icon.
115
+
116
+ If you enable both the old style splash icon and the Cairo splash animation,
117
+
118
+ Old style splash icon will appear first and then the Cairo splash animation will start.
119
+ """ .trimIndentMultiline(),
120
+ required = true
121
+ )
122
+
113
123
override fun execute (context : ResourceContext ) {
114
124
115
125
// Check patch options first.
116
126
val appIcon = AppIcon
117
127
.underBarOrThrow()
118
128
119
129
val appIconResourcePath = " music/branding/$appIcon "
130
+ val youtubeMusicIconResourcePath = " music/branding/youtube_music"
120
131
121
132
// Check if a custom path is used in the patch options.
122
133
if (! availableIcon.containsValue(appIcon)) {
@@ -160,6 +171,39 @@ object CustomBrandingIconPatch : BaseResourcePatch(
160
171
context.copyResources(" $appIconResourcePath /monochrome" , resourceGroup)
161
172
}
162
173
174
+ // Change splash icon.
175
+ if (RestoreOldSplashIcon == true ) {
176
+ var oldSplashIconNotExists: Boolean
177
+
178
+ context.xmlEditor[" res/drawable/splash_screen.xml" ].use { editor ->
179
+ editor.file.apply {
180
+ val node = getElementsByTagName(" layer-list" ).item(0 )
181
+ oldSplashIconNotExists = (node as Element )
182
+ .getElementsByTagName(" item" )
183
+ .length == 1
184
+
185
+ if (oldSplashIconNotExists) {
186
+ createElement(" item" ).also { itemNode ->
187
+ itemNode.appendChild(
188
+ createElement(" bitmap" ).also { bitmapNode ->
189
+ bitmapNode.setAttribute(" android:gravity" , " center" )
190
+ bitmapNode.setAttribute(" android:src" , " @drawable/record" )
191
+ }
192
+ )
193
+ node.appendChild(itemNode)
194
+ }
195
+ }
196
+ }
197
+ }
198
+ if (oldSplashIconNotExists) {
199
+ splashIconResourceGroups.let { resourceGroups ->
200
+ resourceGroups.forEach {
201
+ context.copyResources(" $youtubeMusicIconResourcePath /splash" , it, createDirectoryIfNotExist = true )
202
+ }
203
+ }
204
+ }
205
+ }
206
+
163
207
// Change splash icon.
164
208
if (ChangeSplashIcon == true ) {
165
209
// Some resources have been removed in the latest YouTube Music.
0 commit comments