From d272ff4a8a6c18808d145121e88ff09317b004c3 Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Sat, 4 Oct 2025 14:28:25 +0300 Subject: [PATCH 01/67] feat(Custom branding): Use SVG for adaptive ReVanced icon --- .../layout/branding/CustomBrandingPatch.kt | 4 +++ .../branding/BaseCustomBrandingPatch.kt | 9 ++++++ .../layout/branding/CustomBrandingPatch.kt | 4 +++ ...ube_music_2024_q4_background_color_108.xml | 5 ++++ ...ube_music_2024_q4_foreground_color_108.xml | 30 +++++++++++++++++++ ...veproduct_youtube_background_color_108.xml | 5 ++++ ...veproduct_youtube_foreground_color_108.xml | 30 +++++++++++++++++++ 7 files changed, 87 insertions(+) create mode 100644 patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 530e981303..d987e0a423 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -68,6 +68,10 @@ val customBrandingPatch = baseCustomBrandingPatch( "ic_launcher_release", ), monochromeIconFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), + adaptiveIconFileNames = arrayOf( + "adaptiveproduct_youtube_music_2024_q4_background_color_108.xml", + "adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml", + ), block = { dependsOn(disableSplashAnimationPatch) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index d865b2081c..8c8abf5cd3 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -54,6 +54,7 @@ internal fun baseCustomBrandingPatch( resourceFolder: String, iconResourceFileNames: Array, monochromeIconFileNames: Array, + adaptiveIconFileNames: Array, block: ResourcePatchBuilder.() -> Unit = {}, executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( @@ -117,6 +118,14 @@ internal fun baseCustomBrandingPatch( ResourceGroup("drawable", fileName) ) } + + // Add SVG adaptive icon. + adaptiveIconFileNames.forEach { fileName -> + copyResources( + resourceFolder, + ResourceGroup("mipmap-anydpi", fileName) + ) + } } else { val filePath = File(iconPathTrimmed) val resourceDirectory = get("res") diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index ca028c4388..7ac0e5d034 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -31,6 +31,10 @@ val customBrandingPatch = baseCustomBrandingPatch( "adaptive_monochrome_ic_youtube_launcher.xml", "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" ), + adaptiveIconFileNames = arrayOf( + "adaptiveproduct_youtube_background_color_108.xml", + "adaptiveproduct_youtube_foreground_color_108.xml", + ), block = { compatibleWith( diff --git a/patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml new file mode 100644 index 0000000000..5cd0108ba5 --- /dev/null +++ b/patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml @@ -0,0 +1,5 @@ + + + + diff --git a/patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml new file mode 100644 index 0000000000..d52d856570 --- /dev/null +++ b/patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml new file mode 100644 index 0000000000..5cd0108ba5 --- /dev/null +++ b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml @@ -0,0 +1,5 @@ + + + + diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml new file mode 100644 index 0000000000..d52d856570 --- /dev/null +++ b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + From 8b30f389abd1ff1b264e11d84081a7672cc81ef8 Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Sat, 4 Oct 2025 16:41:00 +0300 Subject: [PATCH 02/67] refactor --- .../layout/branding/CustomBrandingPatch.kt | 3 +- .../branding/BaseCustomBrandingPatch.kt | 49 ++++++++++-------- .../layout/branding/CustomBrandingPatch.kt | 4 ++ ...ube_music_2024_q4_background_color_108.png | Bin 98 -> 0 bytes ...ube_music_2024_q4_foreground_color_108.png | Bin 1447 -> 0 bytes ...ube_music_2024_q4_background_color_108.png | Bin 92 -> 0 bytes ...ube_music_2024_q4_foreground_color_108.png | Bin 943 -> 0 bytes ...ube_music_2024_q4_background_color_108.png | Bin 100 -> 0 bytes ...ube_music_2024_q4_foreground_color_108.png | Bin 2000 -> 0 bytes ...ube_music_2024_q4_background_color_108.png | Bin 108 -> 0 bytes ...ube_music_2024_q4_foreground_color_108.png | Bin 3163 -> 0 bytes ...ube_music_2024_q4_background_color_108.png | Bin 118 -> 0 bytes ...ube_music_2024_q4_foreground_color_108.png | Bin 4429 -> 0 bytes ...veproduct_youtube_background_color_108.png | Bin 98 -> 0 bytes ...veproduct_youtube_foreground_color_108.png | Bin 1447 -> 0 bytes ...veproduct_youtube_background_color_108.png | Bin 92 -> 0 bytes ...veproduct_youtube_foreground_color_108.png | Bin 943 -> 0 bytes ...veproduct_youtube_background_color_108.png | Bin 100 -> 0 bytes ...veproduct_youtube_foreground_color_108.png | Bin 2000 -> 0 bytes ...veproduct_youtube_background_color_108.png | Bin 108 -> 0 bytes ...veproduct_youtube_foreground_color_108.png | Bin 3163 -> 0 bytes ...veproduct_youtube_background_color_108.png | Bin 118 -> 0 bytes ...veproduct_youtube_foreground_color_108.png | Bin 4429 -> 0 bytes 23 files changed, 33 insertions(+), 23 deletions(-) delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-hdpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-hdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-mdpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-mdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-xhdpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-xhdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-xxhdpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-xxhdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-xxxhdpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/music/mipmap-xxxhdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-hdpi/adaptiveproduct_youtube_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-hdpi/adaptiveproduct_youtube_foreground_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-mdpi/adaptiveproduct_youtube_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-mdpi/adaptiveproduct_youtube_foreground_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-xhdpi/adaptiveproduct_youtube_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-xhdpi/adaptiveproduct_youtube_foreground_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-xxxhdpi/adaptiveproduct_youtube_background_color_108.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-xxxhdpi/adaptiveproduct_youtube_foreground_color_108.png diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index d987e0a423..2ddb8c796f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -71,7 +71,8 @@ val customBrandingPatch = baseCustomBrandingPatch( adaptiveIconFileNames = arrayOf( "adaptiveproduct_youtube_music_2024_q4_background_color_108.xml", "adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml", - ), + ), + legacyIconResourceFileNames = arrayOf("ic_launcher_release"), block = { dependsOn(disableSplashAnimationPatch) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 8c8abf5cd3..ae9e585bec 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -55,6 +55,7 @@ internal fun baseCustomBrandingPatch( iconResourceFileNames: Array, monochromeIconFileNames: Array, adaptiveIconFileNames: Array, + legacyIconResourceFileNames: Array, block: ResourcePatchBuilder.() -> Unit = {}, executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( @@ -63,6 +64,7 @@ internal fun baseCustomBrandingPatch( use = false, ) { val iconResourceFileNamesPng = iconResourceFileNames.map { "$it.png" }.toTypedArray() + val legacyIconResourceFileNamesPng = legacyIconResourceFileNames.map { "$it.png" }.toTypedArray() val appName by stringOption( key = "appName", @@ -97,40 +99,43 @@ internal fun baseCustomBrandingPatch( block() execute { - val mipmapIconResourceGroups = mipmapDirectories.map { directory -> - ResourceGroup( - directory, - *iconResourceFileNamesPng, - ) - } - val iconPathTrimmed = iconPath!!.trim() if (iconPathTrimmed == REVANCED_ICON) { - // Replace mipmap icons with preset patch icons. + val mipmapIconResourceGroups = mipmapDirectories.map { directory -> + ResourceGroup( + directory, + *legacyIconResourceFileNamesPng, + ) + } + + // Copy monochrome icons. + copyResources( + resourceFolder, + ResourceGroup("drawable", *monochromeIconFileNames) + ) + + // Copy legacy icons. mipmapIconResourceGroups.forEach { groupResources -> copyResources(resourceFolder, groupResources) } - // Replace monochrome icons. - monochromeIconFileNames.forEach { fileName -> - copyResources( - resourceFolder, - ResourceGroup("drawable", fileName) + // Copy adaptive icons. + copyResources( + resourceFolder, + ResourceGroup("mipmap-anydpi", *adaptiveIconFileNames) + ) + } else { + val mipmapIconResourceGroups = mipmapDirectories.map { directory -> + ResourceGroup( + directory, + *iconResourceFileNamesPng, ) } - // Add SVG adaptive icon. - adaptiveIconFileNames.forEach { fileName -> - copyResources( - resourceFolder, - ResourceGroup("mipmap-anydpi", fileName) - ) - } - } else { val filePath = File(iconPathTrimmed) val resourceDirectory = get("res") - // Replace + // Replace mipmap icons. mipmapIconResourceGroups.forEach { groupResources -> val groupResourceDirectoryName = groupResources.resourceDirectoryName val fromDirectory = filePath.resolve(groupResourceDirectoryName) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 7ac0e5d034..261509e1d3 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -35,6 +35,10 @@ val customBrandingPatch = baseCustomBrandingPatch( "adaptiveproduct_youtube_background_color_108.xml", "adaptiveproduct_youtube_foreground_color_108.xml", ), + legacyIconResourceFileNames = arrayOf( + "ic_launcher", + "ic_launcher_round", + ), block = { compatibleWith( diff --git a/patches/src/main/resources/custom-branding/music/mipmap-hdpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.png b/patches/src/main/resources/custom-branding/music/mipmap-hdpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.png deleted file mode 100644 index 80c1e2c2bd57fd855597dde7559ec40e0e317b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iu>8A$%HX^8+*%mF?juF}%dQ=*D(fm|t17srqa s#C-z|b&@l{?S2%9V7dxM4z3 zDYEwPh~dg@*jn8@qA0Iro6@qp@BDxNxaZt+zTfZXe7~P_KA-P7-*di~e2GW&b2?qZ97_N^Po$_x#cDbrYmjE+{ORR<_-y9>p}pK#6FLNe zK+x%QYXl;j{-2u8D=<$0(1gKY000=m{=LaPX^mJl{oIgf;80XUGS1xB#EyBxj$y?p zN6b~Y8D}@rO&O~^-lL^Zo4RD;0!lbJ<}*-xPh8iqT|EfQ87gbDa!MyFZTbgg>s;RF zp%H31Qr-d%z+1OiGw@r`5fh+ZM^1W(N6g9eIh%T)x^LVhR6=-Sp$jMi+dcl+oDA(U z$r@<>apY?RmjcDQiSjbY;${AaaU*cL>@0%8@x?|e2 zimhC_#}myg)Jyu~DNN3%Ca4m%-ugku!P14NxK1<(N-hI$FZ-1}ZJ6V4B-$FGoX!}o z;g8xkZ?o@Pxt*Ai;O`h2)#tHa`%%k;V{hN%bfcZFr=8XWv95e>v{E5l?yZ=*ljCDK zDu8Qo_{=GAi?cf`@O5rsdCzg9c4^6;*i;y6%lkPxe?CSeekuP7ktFogibD0g@)n)s zvrQ?|`{6=kjzS$3mq1^4up$%rGD@6xcjh21_v=3S>2?-dS!QH*bu+8aE}f}B2cY?qu(lu}7=YGENG zz;6zRS@r&}3a>DfZGl;RI^1h`#a$wEDttJ`)a^iJkYcyL@$qo4XSTvsP1gCzXC13^ zIwFi0MZmBPWPA2;CHg=2ly;gquT;cU9Za-~OfAJLI0WVtX}I3ZRn7};{P3m27*y71 zzgL(BS-_n|cx)5EFJ>0AgWHdeRujW?MSo2M$#8-j76@93)&sSY@c4RZ;N`M&c;2@< zS_c;Eho*@8pC>-NSY_P=9ngfn5E(FQZoS?>o*AiV-{s?cuiK1@Jy>-xatSS(FqHUV zAsE;3pN2Pfk)Nl&LkWN2p%996KwS}MX$|NJb|{V1#8u2j2lXh-+htd7JCU_y+mx!Pg@eSb;JEIkx}FCtunWM zb*FiQ+h3i7pp_qyaDAG$2~MCyw|a+$%51SfGqm8l4H@~+^&9=$VY=!kV) z*?s!Bk7j{D;?5Y&{Jp~hQKk`6$&6MmZw?tb*$X!YljG^tREgo*F@_;+wvICXJG&-H zo96AzwbP0l+XkKT8kAC diff --git a/patches/src/main/resources/custom-branding/music/mipmap-mdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png b/patches/src/main/resources/custom-branding/music/mipmap-mdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png deleted file mode 100644 index e9eac76185ef3370d0faac6afbbdcae7c6a7b99a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p|}=Fqe6{IEGX(zPZTA$-uzFvhb^Z z?dgvS2~6vy4ux_!OB`xZ&#k?iKh1#UvcTc?=a-&e<*;j*<{mItdRooi#D;_{{RD z=x~slR7RU4Uv79=;)P4W3PCSqZp!kp&(g4KTN>l}gULvLVMCa;Sw-dU$70(58$H%7 zo~CX6^7489^N!E7r#x$uH0I5ilbSpK>MhaVI@i0N+{oTpW;t^k_XVG)n_V8iIv77; zCy(XUTV}hrhHi_>{llcxxi5F?U9a;D`VD97Gfwb&%ieBSwtCIlZFg;Ide4eY6uFgt z(quQ|*|2?l#_vVy7q3~nDI&CB6Azy|lrn3!kHysIZGzLM+zqddoSnG; zdfKwTauX*+@>Q=nx#g9{?whM8OqQOuYfnSkq%{w50iFsT)!;u@WPI@dfrNn*At}QHJ;I5 zafsLWde8z%pV$BLo+~?MFvXmAzaSOCa8{^pPtv|;4#h3kn3?jPmly9Z@mc)WFS|e_ zBdYN58S(#Z<`**ZX6)1n-jE&5Wg>RRV6vn|WykZBR_STelp4}{f|eg+^0nB1dEz&( z1J6}r7{r^*PZ_Tdy0hVnA#27S58qF0vrhiG7V>N5>N`jFGFp1ts>cN9Ntr)rTe@D? z;qvS&zZlM@)#)4l{mL-w?UHTG8M}%PUyAqJvF6RUSq{NJmhX!?z=`eSP{`v(9<~qretRGWV_}flYXdUto_{^Lag~;qo)T4T3*^dpx;TbZ sFupx#$Oz;eQuw`m+fluQCqOm>!vpaJ42;&BJ?cRmPgg&ebxsLQ0H&xK4gdfE diff --git a/patches/src/main/resources/custom-branding/music/mipmap-xhdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png b/patches/src/main/resources/custom-branding/music/mipmap-xhdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png deleted file mode 100644 index 30bd1e6d9e6eb9656ee0f1028b5ae59dbf7f03ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2000 zcmah~X*iqd8V-`!m$61m#7uP>qD}2;kTe?1Wh<$r1}P<-x$I)i>DY=fs7xosGLuoX zO=(km1XWB+g`jj0TdLL;Rcq~YzMP)(Z(Qfc_kQ>HUeA4h&-1+Zdp(&hPPVdAC!|0i zkgUC(jVtgT6+RMBV9iA6uYf?}bbA{tAx>m@NLvI1k^$dc_1nw$m&1bH*TC)~Daphn zA_67>m4F@tg&_!-FeK$4;jzTe%EuG`Blo|bcTHJ>y6dAagIJ>`iQkMjJnr5cO=!>@ zZwRqaf8G!h(EDLyc!Mxv*-SZY$*Zqut%}{^Sk%9zbm64%bJx)26^Q}q%FGa>s9j$B zUAjPntVqlHz42hUM1dFmSGqE~GBHX8ii;<$&>>~37<%jQ6YFd5ecw%Z<7zOR%w<9U z^>Ck?So(0^*g0u@Erw2JdhKk{ebv1WUyuK}j^$(?NQcQ)21Pp>Yip7V7atwg5I2qO zcDV`jixyvXrbH?Q$g(6!svBvw+dV0l^s1RnVXr~@##O_PHIC$ajOm5+D(P`H6X1ak{KbX2+su$av^2%gDN2|!I|B-=X z>q#k$d1idt_v<&Iq%hI=k{+isb6h}$26DXsk;OJ5?y0!wpp0J`aqhNr^!~gwFsDd}$I(@sc#JP#}&BnG6K#HBSF-AW)0ez&J@mGbfhccu`2=JXf9BwgZoO542era#Xfy z7V8!}22?$R;p*X|hEnERO)PKR)|GU_&9_vTFI6G}A2kclc^||5a&mc=8o%*1q~A@h z!P9KXpSoUR@u2`xmWP;gD&wrRXNAJmY7p|Y)Y)8l-?-xWY<4n)>^05W4{U!4c7-kl z*`}X;FT&OCP>ojWGXt0JG%x+=h1M0zz|u9CVMZ2T>Q>JWROu{aq@TS!vN-56)G=1H z@mCsZVD1cUYxJ;|*hYEr<7=LrjNkTDQdQvlG1N^DvvKEbK^GoXK&go)eMC-f=$|e= zO@F7vXjCDbUkTnNmwxali3}G7JTk_p3Q*17OQE4BgGYXP-qmb-${V9{C71d9L7HJ& zD$R;f0!2x$TGU@>Od=l;JI!Kl$zr|;k>);Z@ z4OLJ+bogt(XYU==vlJ*rrfM!LaR{0<_thbiyRuIRAJ zo-}bSN*)YXAa|$Xr-VJjr_$KvyN!*SvTtYD4?4R-JQD45Gx-yqMagU|_e>ZcuxSq>4}LB2ej{DzVvid>Bw z|Lg$_{kt2BCC>=mP@mfv^)TUe_A{G)!t+k0^*@aU+(D=aJgwHJbPj#@<( zoa2i&dAUzLJYm!8z$J3|-^KOUqhfYcSYOQXxnT%MJfPhipX0CIQ~p z>19EYv3f6nt4fn_g&P!bw8~KnzFz2>)$OA-sG-s_MMk8WczsF4cz58@z)~@WaVS5i zt(t8GK?X=Yjd6Gdhu8w8XAr273K$1n!h)3-`VKtG=YTu|2auHuF5;_1jHG|N#C=?Z zVb1=q)x=F@WmD(KL==qQ0KfH8E8iWDf?dK~R_c4o&w!Mzho4yHnKRp-@^c|&er;0+ zy*I0g1fwm)$zUDv6XAX+n93xgDlfUCCCL+AAvvUNyP-E?WF@uF-hSr^%s~*5`fLjo z6Mc*N-$C~OM^=nzI|hwGE69Mwz+%Th5U{TxBMfQ(M|dppv$BLT^5M84^*m0Pq5UN% K8`ec)%D(|Qp?I4B diff --git a/patches/src/main/resources/custom-branding/music/mipmap-xxhdpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.png b/patches/src/main/resources/custom-branding/music/mipmap-xxhdpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.png deleted file mode 100644 index 200224bed5fcff82941aff3e04cf96b900ee942f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmeAS@N?(olHy`uVBq!ia0y~yU~~atMrNQ$s>;zopr06w1-`~Uy| diff --git a/patches/src/main/resources/custom-branding/music/mipmap-xxhdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png b/patches/src/main/resources/custom-branding/music/mipmap-xxhdpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png deleted file mode 100644 index 9f75c02d024f9a852a1728b0cc4e6a9cfadec31f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3163 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 s#C-z|b&@l{?S2%9V7dxM4z3 zDYEwPh~dg@*jn8@qA0Iro6@qp@BDxNxaZt+zTfZXe7~P_KA-P7-*di~e2GW&b2?qZ97_N^Po$_x#cDbrYmjE+{ORR<_-y9>p}pK#6FLNe zK+x%QYXl;j{-2u8D=<$0(1gKY000=m{=LaPX^mJl{oIgf;80XUGS1xB#EyBxj$y?p zN6b~Y8D}@rO&O~^-lL^Zo4RD;0!lbJ<}*-xPh8iqT|EfQ87gbDa!MyFZTbgg>s;RF zp%H31Qr-d%z+1OiGw@r`5fh+ZM^1W(N6g9eIh%T)x^LVhR6=-Sp$jMi+dcl+oDA(U z$r@<>apY?RmjcDQiSjbY;${AaaU*cL>@0%8@x?|e2 zimhC_#}myg)Jyu~DNN3%Ca4m%-ugku!P14NxK1<(N-hI$FZ-1}ZJ6V4B-$FGoX!}o z;g8xkZ?o@Pxt*Ai;O`h2)#tHa`%%k;V{hN%bfcZFr=8XWv95e>v{E5l?yZ=*ljCDK zDu8Qo_{=GAi?cf`@O5rsdCzg9c4^6;*i;y6%lkPxe?CSeekuP7ktFogibD0g@)n)s zvrQ?|`{6=kjzS$3mq1^4up$%rGD@6xcjh21_v=3S>2?-dS!QH*bu+8aE}f}B2cY?qu(lu}7=YGENG zz;6zRS@r&}3a>DfZGl;RI^1h`#a$wEDttJ`)a^iJkYcyL@$qo4XSTvsP1gCzXC13^ zIwFi0MZmBPWPA2;CHg=2ly;gquT;cU9Za-~OfAJLI0WVtX}I3ZRn7};{P3m27*y71 zzgL(BS-_n|cx)5EFJ>0AgWHdeRujW?MSo2M$#8-j76@93)&sSY@c4RZ;N`M&c;2@< zS_c;Eho*@8pC>-NSY_P=9ngfn5E(FQZoS?>o*AiV-{s?cuiK1@Jy>-xatSS(FqHUV zAsE;3pN2Pfk)Nl&LkWN2p%996KwS}MX$|NJb|{V1#8u2j2lXh-+htd7JCU_y+mx!Pg@eSb;JEIkx}FCtunWM zb*FiQ+h3i7pp_qyaDAG$2~MCyw|a+$%51SfGqm8l4H@~+^&9=$VY=!kV) z*?s!Bk7j{D;?5Y&{Jp~hQKk`6$&6MmZw?tb*$X!YljG^tREgo*F@_;+wvICXJG&-H zo96AzwbP0l+XkKT8kAC diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-mdpi/adaptiveproduct_youtube_foreground_color_108.png b/patches/src/main/resources/custom-branding/youtube/mipmap-mdpi/adaptiveproduct_youtube_foreground_color_108.png deleted file mode 100644 index e9eac76185ef3370d0faac6afbbdcae7c6a7b99a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p|}=Fqe6{IEGX(zPZTA$-uzFvhb^Z z?dgvS2~6vy4ux_!OB`xZ&#k?iKh1#UvcTc?=a-&e<*;j*<{mItdRooi#D;_{{RD z=x~slR7RU4Uv79=;)P4W3PCSqZp!kp&(g4KTN>l}gULvLVMCa;Sw-dU$70(58$H%7 zo~CX6^7489^N!E7r#x$uH0I5ilbSpK>MhaVI@i0N+{oTpW;t^k_XVG)n_V8iIv77; zCy(XUTV}hrhHi_>{llcxxi5F?U9a;D`VD97Gfwb&%ieBSwtCIlZFg;Ide4eY6uFgt z(quQ|*|2?l#_vVy7q3~nDI&CB6Azy|lrn3!kHysIZGzLM+zqddoSnG; zdfKwTauX*+@>Q=nx#g9{?whM8OqQOuYfnSkq%{w50iFsT)!;u@WPI@dfrNn*At}QHJ;I5 zafsLWde8z%pV$BLo+~?MFvXmAzaSOCa8{^pPtv|;4#h3kn3?jPmly9Z@mc)WFS|e_ zBdYN58S(#Z<`**ZX6)1n-jE&5Wg>RRV6vn|WykZBR_STelp4}{f|eg+^0nB1dEz&( z1J6}r7{r^*PZ_Tdy0hVnA#27S58qF0vrhiG7V>N5>N`jFGFp1ts>cN9Ntr)rTe@D? z;qvS&zZlM@)#)4l{mL-w?UHTG8M}%PUyAqJvF6RUSq{NJmhX!?z=`eSP{`v(9<~qretRGWV_}flYXdUto_{^Lag~;qo)T4T3*^dpx;TbZ sFupx#$Oz;eQuw`m+fluQCqOm>!vpaJ42;&BJ?cRmPgg&ebxsLQ0H&xK4gdfE diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-xhdpi/adaptiveproduct_youtube_foreground_color_108.png b/patches/src/main/resources/custom-branding/youtube/mipmap-xhdpi/adaptiveproduct_youtube_foreground_color_108.png deleted file mode 100644 index 30bd1e6d9e6eb9656ee0f1028b5ae59dbf7f03ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2000 zcmah~X*iqd8V-`!m$61m#7uP>qD}2;kTe?1Wh<$r1}P<-x$I)i>DY=fs7xosGLuoX zO=(km1XWB+g`jj0TdLL;Rcq~YzMP)(Z(Qfc_kQ>HUeA4h&-1+Zdp(&hPPVdAC!|0i zkgUC(jVtgT6+RMBV9iA6uYf?}bbA{tAx>m@NLvI1k^$dc_1nw$m&1bH*TC)~Daphn zA_67>m4F@tg&_!-FeK$4;jzTe%EuG`Blo|bcTHJ>y6dAagIJ>`iQkMjJnr5cO=!>@ zZwRqaf8G!h(EDLyc!Mxv*-SZY$*Zqut%}{^Sk%9zbm64%bJx)26^Q}q%FGa>s9j$B zUAjPntVqlHz42hUM1dFmSGqE~GBHX8ii;<$&>>~37<%jQ6YFd5ecw%Z<7zOR%w<9U z^>Ck?So(0^*g0u@Erw2JdhKk{ebv1WUyuK}j^$(?NQcQ)21Pp>Yip7V7atwg5I2qO zcDV`jixyvXrbH?Q$g(6!svBvw+dV0l^s1RnVXr~@##O_PHIC$ajOm5+D(P`H6X1ak{KbX2+su$av^2%gDN2|!I|B-=X z>q#k$d1idt_v<&Iq%hI=k{+isb6h}$26DXsk;OJ5?y0!wpp0J`aqhNr^!~gwFsDd}$I(@sc#JP#}&BnG6K#HBSF-AW)0ez&J@mGbfhccu`2=JXf9BwgZoO542era#Xfy z7V8!}22?$R;p*X|hEnERO)PKR)|GU_&9_vTFI6G}A2kclc^||5a&mc=8o%*1q~A@h z!P9KXpSoUR@u2`xmWP;gD&wrRXNAJmY7p|Y)Y)8l-?-xWY<4n)>^05W4{U!4c7-kl z*`}X;FT&OCP>ojWGXt0JG%x+=h1M0zz|u9CVMZ2T>Q>JWROu{aq@TS!vN-56)G=1H z@mCsZVD1cUYxJ;|*hYEr<7=LrjNkTDQdQvlG1N^DvvKEbK^GoXK&go)eMC-f=$|e= zO@F7vXjCDbUkTnNmwxali3}G7JTk_p3Q*17OQE4BgGYXP-qmb-${V9{C71d9L7HJ& zD$R;f0!2x$TGU@>Od=l;JI!Kl$zr|;k>);Z@ z4OLJ+bogt(XYU==vlJ*rrfM!LaR{0<_thbiyRuIRAJ zo-}bSN*)YXAa|$Xr-VJjr_$KvyN!*SvTtYD4?4R-JQD45Gx-yqMagU|_e>ZcuxSq>4}LB2ej{DzVvid>Bw z|Lg$_{kt2BCC>=mP@mfv^)TUe_A{G)!t+k0^*@aU+(D=aJgwHJbPj#@<( zoa2i&dAUzLJYm!8z$J3|-^KOUqhfYcSYOQXxnT%MJfPhipX0CIQ~p z>19EYv3f6nt4fn_g&P!bw8~KnzFz2>)$OA-sG-s_MMk8WczsF4cz58@z)~@WaVS5i zt(t8GK?X=Yjd6Gdhu8w8XAr273K$1n!h)3-`VKtG=YTu|2auHuF5;_1jHG|N#C=?Z zVb1=q)x=F@WmD(KL==qQ0KfH8E8iWDf?dK~R_c4o&w!Mzho4yHnKRp-@^c|&er;0+ zy*I0g1fwm)$zUDv6XAX+n93xgDlfUCCCL+AAvvUNyP-E?WF@uF-hSr^%s~*5`fLjo z6Mc*N-$C~OM^=nzI|hwGE69Mwz+%Th5U{TxBMfQ(M|dppv$BLT^5M84^*m0Pq5UN% K8`ec)%D(|Qp?I4B diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png b/patches/src/main/resources/custom-branding/youtube/mipmap-xxhdpi/adaptiveproduct_youtube_background_color_108.png deleted file mode 100644 index 200224bed5fcff82941aff3e04cf96b900ee942f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmeAS@N?(olHy`uVBq!ia0y~yU~~atMrNQ$s>;zopr06w1-`~Uy| diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png b/patches/src/main/resources/custom-branding/youtube/mipmap-xxhdpi/adaptiveproduct_youtube_foreground_color_108.png deleted file mode 100644 index 9f75c02d024f9a852a1728b0cc4e6a9cfadec31f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3163 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 Date: Sat, 4 Oct 2025 17:09:28 +0300 Subject: [PATCH 03/67] fix resourses for new targets --- .../layout/branding/CustomBrandingPatch.kt | 2 ++ ...t_youtube_2024_q4_background_color_108.xml | 5 ++++ ...t_youtube_2024_q4_foreground_color_108.xml | 30 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_background_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_foreground_color_108.xml diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 261509e1d3..79dcd575ea 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -32,6 +32,8 @@ val customBrandingPatch = baseCustomBrandingPatch( "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" ), adaptiveIconFileNames = arrayOf( + "adaptiveproduct_youtube_2024_q4_background_color_108.xml", + "adaptiveproduct_youtube_2024_q4_foreground_color_108.xml", "adaptiveproduct_youtube_background_color_108.xml", "adaptiveproduct_youtube_foreground_color_108.xml", ), diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_background_color_108.xml new file mode 100644 index 0000000000..5cd0108ba5 --- /dev/null +++ b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_background_color_108.xml @@ -0,0 +1,5 @@ + + + + diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_foreground_color_108.xml new file mode 100644 index 0000000000..d52d856570 --- /dev/null +++ b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_foreground_color_108.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + From 78d0be4092cccfa985e7108d91bc0912c3657cc1 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 18:17:12 +0400 Subject: [PATCH 04/67] List legacy icons in description --- .../shared/layout/branding/BaseCustomBrandingPatch.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index ae9e585bec..62bb9bdaec 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -63,8 +63,9 @@ internal fun baseCustomBrandingPatch( description = "Applies a custom app name and icon. Defaults to \"$defaultAppName\" and the ReVanced logo.", use = false, ) { - val iconResourceFileNamesPng = iconResourceFileNames.map { "$it.png" }.toTypedArray() - val legacyIconResourceFileNamesPng = legacyIconResourceFileNames.map { "$it.png" }.toTypedArray() + fun Array.addPngExtension() = this.map { "$it.png" }.toTypedArray() + val iconResourceFileNamesPng = iconResourceFileNames.addPngExtension() + val legacyIconResourceFileNamesPng = legacyIconResourceFileNames.addPngExtension() val appName by stringOption( key = "appName", @@ -88,7 +89,7 @@ internal fun baseCustomBrandingPatch( Each of these folders must contain the following files: - ${formatResourceFileList(iconResourceFileNamesPng)} + ${formatResourceFileList((iconResourceFileNamesPng + legacyIconResourceFileNamesPng))} Optionally, a 'drawable' folder with the monochrome icon files: From 6f0a111bb3d4f423fec448b88f2eac02733416e2 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 18:26:36 +0400 Subject: [PATCH 05/67] Copy xml during patching --- .../branding/BaseCustomBrandingPatch.kt | 5 +-- .../layout/branding/CustomBrandingPatch.kt | 31 ++++++++----------- ...t_youtube_2024_q4_background_color_108.xml | 5 --- ...t_youtube_2024_q4_foreground_color_108.xml | 30 ------------------ 4 files changed, 16 insertions(+), 55 deletions(-) delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_background_color_108.xml delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_foreground_color_108.xml diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 62bb9bdaec..f29070bae8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -14,7 +14,7 @@ import java.util.logging.Logger private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path. -internal val mipmapDirectories = arrayOf( +private val mipmapDirectories = arrayOf( // Target app does not have ldpi icons. "mdpi", "hdpi", @@ -101,6 +101,7 @@ internal fun baseCustomBrandingPatch( execute { val iconPathTrimmed = iconPath!!.trim() + if (iconPathTrimmed == REVANCED_ICON) { val mipmapIconResourceGroups = mipmapDirectories.map { directory -> ResourceGroup( @@ -150,7 +151,7 @@ internal fun baseCustomBrandingPatch( } } - // Copy all monochrome icons if provided. + // Replace monochrome icons if provided. monochromeIconFileNames.forEach { fileName -> val replacementMonochrome = filePath.resolve("drawable").resolve(fileName) if (replacementMonochrome.exists()) { diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 79dcd575ea..3a4655df5c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -1,15 +1,12 @@ package app.revanced.patches.youtube.layout.branding import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch -import app.revanced.patches.shared.layout.branding.mipmapDirectories import java.nio.file.Files private const val APP_NAME = "YouTube ReVanced" -private val youtubeIconResourceFileNames_19_34 = mapOf( - "adaptiveproduct_youtube_foreground_color_108" to "adaptiveproduct_youtube_2024_q4_foreground_color_108", - "adaptiveproduct_youtube_background_color_108" to "adaptiveproduct_youtube_2024_q4_background_color_108", -) +private const val ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME = "adaptiveproduct_youtube_background_color_108.xml" +private const val ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME = "adaptiveproduct_youtube_foreground_color_108.xml" @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( @@ -32,10 +29,8 @@ val customBrandingPatch = baseCustomBrandingPatch( "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" ), adaptiveIconFileNames = arrayOf( - "adaptiveproduct_youtube_2024_q4_background_color_108.xml", - "adaptiveproduct_youtube_2024_q4_foreground_color_108.xml", - "adaptiveproduct_youtube_background_color_108.xml", - "adaptiveproduct_youtube_foreground_color_108.xml", + ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME, + ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME, ), legacyIconResourceFileNames = arrayOf( "ic_launcher", @@ -54,17 +49,17 @@ val customBrandingPatch = baseCustomBrandingPatch( }, executeBlock = { - val resourceDirectory = get("res") - - mipmapDirectories.forEach { directory -> - val targetDirectory = resourceDirectory.resolve(directory) + val resourceDirectory = get("res/mipmap-anydpi") - youtubeIconResourceFileNames_19_34.forEach { (old, new) -> - val oldFile = targetDirectory.resolve("$old.png") - val newFile = targetDirectory.resolve("$new.png") + // Copy adaptive icon to secondary adaptive file. + arrayOf( + ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108.xml", + ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108.xml", + ).forEach { (old, new) -> + val oldFile = resourceDirectory.resolve(old) + val newFile = resourceDirectory.resolve(new) - Files.write(newFile.toPath(), oldFile.readBytes()) - } + Files.write(newFile.toPath(), oldFile.readBytes()) } } ) diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_background_color_108.xml deleted file mode 100644 index 5cd0108ba5..0000000000 --- a/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_background_color_108.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_foreground_color_108.xml deleted file mode 100644 index d52d856570..0000000000 --- a/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_2024_q4_foreground_color_108.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - From 123d15295fa490a58ddff2d9605a4eaae4b56d75 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 18:41:29 +0400 Subject: [PATCH 06/67] remove launcher_round.png that is missing in recent YT targets --- .../layout/branding/CustomBrandingPatch.kt | 2 +- .../youtube/mipmap-hdpi/ic_launcher_round.png | Bin 2876 -> 0 bytes .../youtube/mipmap-mdpi/ic_launcher_round.png | Bin 1802 -> 0 bytes .../youtube/mipmap-xhdpi/ic_launcher_round.png | Bin 4077 -> 0 bytes .../youtube/mipmap-xxhdpi/ic_launcher_round.png | Bin 6256 -> 0 bytes .../youtube/mipmap-xxxhdpi/ic_launcher_round.png | Bin 8744 -> 0 bytes 6 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-hdpi/ic_launcher_round.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-mdpi/ic_launcher_round.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 patches/src/main/resources/custom-branding/youtube/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 3a4655df5c..f0d4f06152 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -34,7 +34,7 @@ val customBrandingPatch = baseCustomBrandingPatch( ), legacyIconResourceFileNames = arrayOf( "ic_launcher", - "ic_launcher_round", + // "ic_launcher_round" also exists in 19.34, but was removed in later targets. ), block = { diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-hdpi/ic_launcher_round.png b/patches/src/main/resources/custom-branding/youtube/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index c922a45568fb2c03b137fe2cfb01c43c5d408416..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2876 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 diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-xhdpi/ic_launcher_round.png b/patches/src/main/resources/custom-branding/youtube/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 8fb88d36762582d219d994be40074203324784d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4077 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 S`%7B@0000 Date: Sat, 4 Oct 2025 18:56:05 +0400 Subject: [PATCH 07/67] Allow custom icon to be only for specific resolutions (same behavior as change header patch) --- .../branding/BaseCustomBrandingPatch.kt | 50 +++++++++++-------- .../layout/branding/CustomBrandingPatch.kt | 38 ++++++++++---- 2 files changed, 56 insertions(+), 32 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index f29070bae8..767e6d0962 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -1,5 +1,6 @@ package app.revanced.patches.shared.layout.branding +import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.ResourcePatchBuilder import app.revanced.patcher.patch.ResourcePatchContext @@ -14,7 +15,7 @@ import java.util.logging.Logger private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path. -private val mipmapDirectories = arrayOf( +internal val mipmapDirectories = arrayOf( // Target app does not have ldpi icons. "mdpi", "hdpi", @@ -83,16 +84,13 @@ internal fun baseCustomBrandingPatch( description = """ The icon to apply to the app. - If a path to a folder is provided, the folder must contain the following folders: - + If a path to a folder is provided, the folder must contain one or more of the following folders: ${formatResourceFileList(mipmapDirectories)} Each of these folders must contain the following files: - ${formatResourceFileList((iconResourceFileNamesPng + legacyIconResourceFileNamesPng))} Optionally, a 'drawable' folder with the monochrome icon files: - ${formatResourceFileList(monochromeIconFileNames)} """.trimIndentMultiline(), ) @@ -127,40 +125,48 @@ internal fun baseCustomBrandingPatch( ResourceGroup("mipmap-anydpi", *adaptiveIconFileNames) ) } else { - val mipmapIconResourceGroups = mipmapDirectories.map { directory -> - ResourceGroup( - directory, - *iconResourceFileNamesPng, - ) - } - val filePath = File(iconPathTrimmed) val resourceDirectory = get("res") + var replacedResources = false // Replace mipmap icons. - mipmapIconResourceGroups.forEach { groupResources -> + mipmapDirectories.map { directory -> + ResourceGroup( + directory, + *iconResourceFileNamesPng, + ) + }.forEach { groupResources -> val groupResourceDirectoryName = groupResources.resourceDirectoryName val fromDirectory = filePath.resolve(groupResourceDirectoryName) val toDirectory = resourceDirectory.resolve(groupResourceDirectoryName) groupResources.resources.forEach { iconFileName -> - Files.write( - toDirectory.resolve(iconFileName).toPath(), - fromDirectory.resolve(iconFileName).readBytes(), - ) + val replacement = fromDirectory.resolve(iconFileName) + if (replacement.exists()) { + Files.write( + toDirectory.resolve(iconFileName).toPath(), + replacement.readBytes(), + ) + replacedResources = true + } } } // Replace monochrome icons if provided. - monochromeIconFileNames.forEach { fileName -> - val replacementMonochrome = filePath.resolve("drawable").resolve(fileName) - if (replacementMonochrome.exists()) { + monochromeIconFileNames.forEach { iconFileName -> + val replacement = filePath.resolve("drawable").resolve(iconFileName) + if (replacement.exists()) { Files.write( - resourceDirectory.resolve("drawable").resolve(fileName).toPath(), - replacementMonochrome.readBytes(), + resourceDirectory.resolve("drawable").resolve(iconFileName).toPath(), + replacement.readBytes(), ) + replacedResources = true } } + + if (!replacedResources) { + throw PatchException("Could not find any replacement images in patch option path: $iconPathTrimmed") + } } // Change the app name. diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index f0d4f06152..f0f5ed2023 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -1,12 +1,13 @@ package app.revanced.patches.youtube.layout.branding import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch +import app.revanced.patches.shared.layout.branding.mipmapDirectories import java.nio.file.Files private const val APP_NAME = "YouTube ReVanced" -private const val ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME = "adaptiveproduct_youtube_background_color_108.xml" -private const val ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME = "adaptiveproduct_youtube_foreground_color_108.xml" +private const val ADAPTIVE_BACKGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_background_color_108" +private const val ADAPTIVE_FOREGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_foreground_color_108" @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( @@ -29,8 +30,8 @@ val customBrandingPatch = baseCustomBrandingPatch( "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" ), adaptiveIconFileNames = arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME, - ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME, + ADAPTIVE_BACKGROUND_RESOURCE_NAME, + ADAPTIVE_FOREGROUND_RESOURCE_NAME, ), legacyIconResourceFileNames = arrayOf( "ic_launcher", @@ -49,17 +50,34 @@ val customBrandingPatch = baseCustomBrandingPatch( }, executeBlock = { - val resourceDirectory = get("res/mipmap-anydpi") + val resourceDirectory = get("res") // Copy adaptive icon to secondary adaptive file. arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108.xml", - ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108.xml", + ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", + ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", ).forEach { (old, new) -> - val oldFile = resourceDirectory.resolve(old) - val newFile = resourceDirectory.resolve(new) + val newFile = resourceDirectory.resolve("/mipmap-anydpi/$new.xml") + if (newFile.exists()) { + val oldFile = resourceDirectory.resolve("$old.xml") + Files.write(oldFile.toPath(), newFile.readBytes()) + } + } + + // Copy mipmaps to secondary files. + mipmapDirectories.forEach { directory -> + val targetDirectory = resourceDirectory.resolve(directory) - Files.write(newFile.toPath(), oldFile.readBytes()) + arrayOf( + ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", + ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", + ).forEach { (old, new) -> + val newFile = targetDirectory.resolve("$new.png") + if (newFile.exists()) { + val oldFile = targetDirectory.resolve("$old.png") + Files.write(newFile.toPath(), oldFile.readBytes()) + } + } } } ) From b34a1ab70f76585c7066786d67f85b5c6ef71a90 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 19:06:25 +0400 Subject: [PATCH 08/67] Revert commit until it's fixed This reverts commit 5f2f61a1b814ca6c29b2953d91b2e339aad411b0. --- .../branding/BaseCustomBrandingPatch.kt | 50 ++++++++----------- .../layout/branding/CustomBrandingPatch.kt | 38 ++++---------- 2 files changed, 32 insertions(+), 56 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 767e6d0962..f29070bae8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -1,6 +1,5 @@ package app.revanced.patches.shared.layout.branding -import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.ResourcePatchBuilder import app.revanced.patcher.patch.ResourcePatchContext @@ -15,7 +14,7 @@ import java.util.logging.Logger private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path. -internal val mipmapDirectories = arrayOf( +private val mipmapDirectories = arrayOf( // Target app does not have ldpi icons. "mdpi", "hdpi", @@ -84,13 +83,16 @@ internal fun baseCustomBrandingPatch( description = """ The icon to apply to the app. - If a path to a folder is provided, the folder must contain one or more of the following folders: + If a path to a folder is provided, the folder must contain the following folders: + ${formatResourceFileList(mipmapDirectories)} Each of these folders must contain the following files: + ${formatResourceFileList((iconResourceFileNamesPng + legacyIconResourceFileNamesPng))} Optionally, a 'drawable' folder with the monochrome icon files: + ${formatResourceFileList(monochromeIconFileNames)} """.trimIndentMultiline(), ) @@ -125,48 +127,40 @@ internal fun baseCustomBrandingPatch( ResourceGroup("mipmap-anydpi", *adaptiveIconFileNames) ) } else { - val filePath = File(iconPathTrimmed) - val resourceDirectory = get("res") - var replacedResources = false - - // Replace mipmap icons. - mipmapDirectories.map { directory -> + val mipmapIconResourceGroups = mipmapDirectories.map { directory -> ResourceGroup( directory, *iconResourceFileNamesPng, ) - }.forEach { groupResources -> + } + + val filePath = File(iconPathTrimmed) + val resourceDirectory = get("res") + + // Replace mipmap icons. + mipmapIconResourceGroups.forEach { groupResources -> val groupResourceDirectoryName = groupResources.resourceDirectoryName val fromDirectory = filePath.resolve(groupResourceDirectoryName) val toDirectory = resourceDirectory.resolve(groupResourceDirectoryName) groupResources.resources.forEach { iconFileName -> - val replacement = fromDirectory.resolve(iconFileName) - if (replacement.exists()) { - Files.write( - toDirectory.resolve(iconFileName).toPath(), - replacement.readBytes(), - ) - replacedResources = true - } + Files.write( + toDirectory.resolve(iconFileName).toPath(), + fromDirectory.resolve(iconFileName).readBytes(), + ) } } // Replace monochrome icons if provided. - monochromeIconFileNames.forEach { iconFileName -> - val replacement = filePath.resolve("drawable").resolve(iconFileName) - if (replacement.exists()) { + monochromeIconFileNames.forEach { fileName -> + val replacementMonochrome = filePath.resolve("drawable").resolve(fileName) + if (replacementMonochrome.exists()) { Files.write( - resourceDirectory.resolve("drawable").resolve(iconFileName).toPath(), - replacement.readBytes(), + resourceDirectory.resolve("drawable").resolve(fileName).toPath(), + replacementMonochrome.readBytes(), ) - replacedResources = true } } - - if (!replacedResources) { - throw PatchException("Could not find any replacement images in patch option path: $iconPathTrimmed") - } } // Change the app name. diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index f0f5ed2023..f0d4f06152 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -1,13 +1,12 @@ package app.revanced.patches.youtube.layout.branding import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch -import app.revanced.patches.shared.layout.branding.mipmapDirectories import java.nio.file.Files private const val APP_NAME = "YouTube ReVanced" -private const val ADAPTIVE_BACKGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_background_color_108" -private const val ADAPTIVE_FOREGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_foreground_color_108" +private const val ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME = "adaptiveproduct_youtube_background_color_108.xml" +private const val ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME = "adaptiveproduct_youtube_foreground_color_108.xml" @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( @@ -30,8 +29,8 @@ val customBrandingPatch = baseCustomBrandingPatch( "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" ), adaptiveIconFileNames = arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_NAME, - ADAPTIVE_FOREGROUND_RESOURCE_NAME, + ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME, + ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME, ), legacyIconResourceFileNames = arrayOf( "ic_launcher", @@ -50,34 +49,17 @@ val customBrandingPatch = baseCustomBrandingPatch( }, executeBlock = { - val resourceDirectory = get("res") + val resourceDirectory = get("res/mipmap-anydpi") // Copy adaptive icon to secondary adaptive file. arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", - ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", + ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108.xml", + ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108.xml", ).forEach { (old, new) -> - val newFile = resourceDirectory.resolve("/mipmap-anydpi/$new.xml") - if (newFile.exists()) { - val oldFile = resourceDirectory.resolve("$old.xml") - Files.write(oldFile.toPath(), newFile.readBytes()) - } - } - - // Copy mipmaps to secondary files. - mipmapDirectories.forEach { directory -> - val targetDirectory = resourceDirectory.resolve(directory) + val oldFile = resourceDirectory.resolve(old) + val newFile = resourceDirectory.resolve(new) - arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", - ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", - ).forEach { (old, new) -> - val newFile = targetDirectory.resolve("$new.png") - if (newFile.exists()) { - val oldFile = targetDirectory.resolve("$old.png") - Files.write(newFile.toPath(), oldFile.readBytes()) - } - } + Files.write(newFile.toPath(), oldFile.readBytes()) } } ) From ac905284c45a0b6c2eed4fed5e9181238592dde6 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 19:23:20 +0400 Subject: [PATCH 09/67] allow only specific resolutions for custom icons --- .../layout/branding/CustomBrandingPatch.kt | 9 +- .../branding/BaseCustomBrandingPatch.kt | 83 ++++++++++--------- .../layout/branding/CustomBrandingPatch.kt | 49 +++++++---- 3 files changed, 79 insertions(+), 62 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 2ddb8c796f..81f10d55f5 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -63,16 +63,15 @@ val customBrandingPatch = baseCustomBrandingPatch( ), resourceFolder = "custom-branding/music", iconResourceFileNames = arrayOf( - "adaptiveproduct_youtube_music_2024_q4_background_color_108", - "adaptiveproduct_youtube_music_2024_q4_foreground_color_108", - "ic_launcher_release", + "adaptiveproduct_youtube_music_2024_q4_background_color_108.png", + "adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png" ), monochromeIconFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), adaptiveIconFileNames = arrayOf( "adaptiveproduct_youtube_music_2024_q4_background_color_108.xml", - "adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml", + "adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml" ), - legacyIconResourceFileNames = arrayOf("ic_launcher_release"), + legacyIconResourceFileNames = arrayOf("ic_launcher_release.png"), block = { dependsOn(disableSplashAnimationPatch) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index f29070bae8..6aa935bda8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -1,5 +1,6 @@ package app.revanced.patches.shared.layout.branding +import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.ResourcePatchBuilder import app.revanced.patcher.patch.ResourcePatchContext @@ -14,7 +15,7 @@ import java.util.logging.Logger private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path. -private val mipmapDirectories = arrayOf( +internal val mipmapDirectories = arrayOf( // Target app does not have ldpi icons. "mdpi", "hdpi", @@ -63,10 +64,6 @@ internal fun baseCustomBrandingPatch( description = "Applies a custom app name and icon. Defaults to \"$defaultAppName\" and the ReVanced logo.", use = false, ) { - fun Array.addPngExtension() = this.map { "$it.png" }.toTypedArray() - val iconResourceFileNamesPng = iconResourceFileNames.addPngExtension() - val legacyIconResourceFileNamesPng = legacyIconResourceFileNames.addPngExtension() - val appName by stringOption( key = "appName", default = defaultAppName, @@ -83,16 +80,13 @@ internal fun baseCustomBrandingPatch( description = """ The icon to apply to the app. - If a path to a folder is provided, the folder must contain the following folders: - + If a path to a folder is provided, the folder must contain one or more of the following folders: ${formatResourceFileList(mipmapDirectories)} Each of these folders must contain the following files: - - ${formatResourceFileList((iconResourceFileNamesPng + legacyIconResourceFileNamesPng))} + ${formatResourceFileList((iconResourceFileNames + legacyIconResourceFileNames))} Optionally, a 'drawable' folder with the monochrome icon files: - ${formatResourceFileList(monochromeIconFileNames)} """.trimIndentMultiline(), ) @@ -103,64 +97,71 @@ internal fun baseCustomBrandingPatch( val iconPathTrimmed = iconPath!!.trim() if (iconPathTrimmed == REVANCED_ICON) { - val mipmapIconResourceGroups = mipmapDirectories.map { directory -> - ResourceGroup( - directory, - *legacyIconResourceFileNamesPng, - ) - } - - // Copy monochrome icons. + // Copy adaptive icons. copyResources( resourceFolder, - ResourceGroup("drawable", *monochromeIconFileNames) + ResourceGroup("mipmap-anydpi", *adaptiveIconFileNames) ) // Copy legacy icons. - mipmapIconResourceGroups.forEach { groupResources -> + mipmapDirectories.map { directory -> + ResourceGroup( + directory, + *legacyIconResourceFileNames, + ) + }.forEach { groupResources -> copyResources(resourceFolder, groupResources) } - // Copy adaptive icons. + // Copy monochrome icons. copyResources( resourceFolder, - ResourceGroup("mipmap-anydpi", *adaptiveIconFileNames) + ResourceGroup("drawable", *monochromeIconFileNames) ) } else { - val mipmapIconResourceGroups = mipmapDirectories.map { directory -> - ResourceGroup( - directory, - *iconResourceFileNamesPng, - ) - } - - val filePath = File(iconPathTrimmed) + val iconPathFile = File(iconPathTrimmed) val resourceDirectory = get("res") + var replacedResources = false // Replace mipmap icons. - mipmapIconResourceGroups.forEach { groupResources -> + mipmapDirectories.map { directory -> + ResourceGroup( + directory, + *iconResourceFileNames, + ) + }.forEach { groupResources -> val groupResourceDirectoryName = groupResources.resourceDirectoryName - val fromDirectory = filePath.resolve(groupResourceDirectoryName) + val fromDirectory = iconPathFile.resolve(groupResourceDirectoryName) val toDirectory = resourceDirectory.resolve(groupResourceDirectoryName) groupResources.resources.forEach { iconFileName -> - Files.write( - toDirectory.resolve(iconFileName).toPath(), - fromDirectory.resolve(iconFileName).readBytes(), - ) + val replacement = fromDirectory.resolve(iconFileName) + if (replacement.exists()) { + Files.write( + toDirectory.resolve(iconFileName).toPath(), + replacement.readBytes(), + ) + replacedResources = true + } } } // Replace monochrome icons if provided. - monochromeIconFileNames.forEach { fileName -> - val replacementMonochrome = filePath.resolve("drawable").resolve(fileName) - if (replacementMonochrome.exists()) { + monochromeIconFileNames.forEach { iconFileName -> + val resourceType = "drawable" + val replacement = iconPathFile.resolve(resourceType).resolve(iconFileName) + if (replacement.exists()) { Files.write( - resourceDirectory.resolve("drawable").resolve(fileName).toPath(), - replacementMonochrome.readBytes(), + resourceDirectory.resolve(resourceType).resolve(iconFileName).toPath(), + replacement.readBytes(), ) + replacedResources = true } } + + if (!replacedResources) { + throw PatchException("Could not find any replacement images in patch option path: $iconPathTrimmed") + } } // Change the app name. diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index f0d4f06152..41c9110db1 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -1,12 +1,13 @@ package app.revanced.patches.youtube.layout.branding import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch +import app.revanced.patches.shared.layout.branding.mipmapDirectories import java.nio.file.Files private const val APP_NAME = "YouTube ReVanced" -private const val ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME = "adaptiveproduct_youtube_background_color_108.xml" -private const val ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME = "adaptiveproduct_youtube_foreground_color_108.xml" +private const val ADAPTIVE_BACKGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_background_color_108" +private const val ADAPTIVE_FOREGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_foreground_color_108" @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( @@ -19,22 +20,20 @@ val customBrandingPatch = baseCustomBrandingPatch( ), resourceFolder = "custom-branding/youtube", iconResourceFileNames = arrayOf( - "adaptiveproduct_youtube_background_color_108", - "adaptiveproduct_youtube_foreground_color_108", - "ic_launcher", - "ic_launcher_round", + "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.png", + "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png", ), monochromeIconFileNames = arrayOf( "adaptive_monochrome_ic_youtube_launcher.xml", "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" ), adaptiveIconFileNames = arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME, - ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME, + "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", + "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml", ), legacyIconResourceFileNames = arrayOf( - "ic_launcher", - // "ic_launcher_round" also exists in 19.34, but was removed in later targets. + "ic_launcher.png", + // "ic_launcher_round" exists in 19.34, but was removed in later targets. ), block = { @@ -49,17 +48,35 @@ val customBrandingPatch = baseCustomBrandingPatch( }, executeBlock = { - val resourceDirectory = get("res/mipmap-anydpi") + val resourceDirectory = get("res") // Copy adaptive icon to secondary adaptive file. arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_FILE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108.xml", - ADAPTIVE_FOREGROUND_RESOURCE_FILE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108.xml", + ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", + ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", ).forEach { (old, new) -> - val oldFile = resourceDirectory.resolve(old) - val newFile = resourceDirectory.resolve(new) + var resourceType = "mipmap-anydpi" + val oldFile = resourceDirectory.resolve("$resourceType/$old.xml") + if (oldFile.exists()) { + val newFile = resourceDirectory.resolve("$resourceType/$new.xml") + Files.write(newFile.toPath(), oldFile.readBytes()) + } + } + + // Copy mipmaps to secondary files. + mipmapDirectories.forEach { directory -> + val targetDirectory = resourceDirectory.resolve(directory) - Files.write(newFile.toPath(), oldFile.readBytes()) + arrayOf( + ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", + ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", + ).forEach { (old, new) -> + val oldFile = targetDirectory.resolve("$old.png") + if (oldFile.exists()) { + val newFile = targetDirectory.resolve("$new.png") + Files.write(newFile.toPath(), oldFile.readBytes()) + } + } } } ) From 4c91f57fda57a425aee7f980e41a38961d176824 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 19:27:34 +0400 Subject: [PATCH 10/67] refactor --- .../layout/branding/CustomBrandingPatch.kt | 19 +++--- .../branding/BaseCustomBrandingPatch.kt | 14 ++-- .../layout/branding/CustomBrandingPatch.kt | 65 +++++++++---------- 3 files changed, 50 insertions(+), 48 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 81f10d55f5..97570cb2ec 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -52,6 +52,9 @@ private val disableSplashAnimationPatch = bytecodePatch { private const val APP_NAME = "YT Music ReVanced" +private const val ADAPTIVE_BACKGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_music_2024_q4_background_color_108" +private const val ADAPTIVE_FOREGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_music_2024_q4_foreground_color_108" + @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( defaultAppName = APP_NAME, @@ -62,16 +65,16 @@ val customBrandingPatch = baseCustomBrandingPatch( "YT Music" to "YT Music", ), resourceFolder = "custom-branding/music", - iconResourceFileNames = arrayOf( - "adaptiveproduct_youtube_music_2024_q4_background_color_108.png", - "adaptiveproduct_youtube_music_2024_q4_foreground_color_108.png" + adaptiveAnydpiFileNames = arrayOf( + "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", + "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml" ), - monochromeIconFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), - adaptiveIconFileNames = arrayOf( - "adaptiveproduct_youtube_music_2024_q4_background_color_108.xml", - "adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml" + mipmapIconFileNames = arrayOf( + "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.png", + "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png" ), - legacyIconResourceFileNames = arrayOf("ic_launcher_release.png"), + legacyMipmapIconFileNames = arrayOf("ic_launcher_release.png"), + monochromeIconFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), block = { dependsOn(disableSplashAnimationPatch) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 6aa935bda8..7c6d154a15 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -53,10 +53,10 @@ internal fun baseCustomBrandingPatch( defaultAppName: String, appNameValues: Map, resourceFolder: String, - iconResourceFileNames: Array, + adaptiveAnydpiFileNames: Array, + mipmapIconFileNames: Array, + legacyMipmapIconFileNames: Array, monochromeIconFileNames: Array, - adaptiveIconFileNames: Array, - legacyIconResourceFileNames: Array, block: ResourcePatchBuilder.() -> Unit = {}, executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( @@ -84,7 +84,7 @@ internal fun baseCustomBrandingPatch( ${formatResourceFileList(mipmapDirectories)} Each of these folders must contain the following files: - ${formatResourceFileList((iconResourceFileNames + legacyIconResourceFileNames))} + ${formatResourceFileList((mipmapIconFileNames + legacyMipmapIconFileNames))} Optionally, a 'drawable' folder with the monochrome icon files: ${formatResourceFileList(monochromeIconFileNames)} @@ -100,14 +100,14 @@ internal fun baseCustomBrandingPatch( // Copy adaptive icons. copyResources( resourceFolder, - ResourceGroup("mipmap-anydpi", *adaptiveIconFileNames) + ResourceGroup("mipmap-anydpi", *adaptiveAnydpiFileNames) ) // Copy legacy icons. mipmapDirectories.map { directory -> ResourceGroup( directory, - *legacyIconResourceFileNames, + *legacyMipmapIconFileNames, ) }.forEach { groupResources -> copyResources(resourceFolder, groupResources) @@ -127,7 +127,7 @@ internal fun baseCustomBrandingPatch( mipmapDirectories.map { directory -> ResourceGroup( directory, - *iconResourceFileNames, + *mipmapIconFileNames, ) }.forEach { groupResources -> val groupResourceDirectoryName = groupResources.resourceDirectoryName diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 41c9110db1..9fc5e08d1e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -19,22 +19,22 @@ val customBrandingPatch = baseCustomBrandingPatch( "YouTube" to "YouTube", ), resourceFolder = "custom-branding/youtube", - iconResourceFileNames = arrayOf( + adaptiveAnydpiFileNames = arrayOf( + "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", + "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml", + ), + mipmapIconFileNames = arrayOf( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.png", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png", ), + legacyMipmapIconFileNames = arrayOf( + "ic_launcher.png", + // "ic_launcher_round" exists in 19.34, but was removed in later targets. + ), monochromeIconFileNames = arrayOf( "adaptive_monochrome_ic_youtube_launcher.xml", "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" ), - adaptiveIconFileNames = arrayOf( - "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", - "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml", - ), - legacyIconResourceFileNames = arrayOf( - "ic_launcher.png", - // "ic_launcher_round" exists in 19.34, but was removed in later targets. - ), block = { compatibleWith( @@ -45,38 +45,37 @@ val customBrandingPatch = baseCustomBrandingPatch( "20.14.43", ) ) - }, + } + +) { + val resourceDirectory = get("res") + + // Copy adaptive icon to secondary adaptive file. + arrayOf( + ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", + ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", + ).forEach { (old, new) -> + var resourceType = "mipmap-anydpi" + val oldFile = resourceDirectory.resolve("$resourceType/$old.xml") + if (oldFile.exists()) { + val newFile = resourceDirectory.resolve("$resourceType/$new.xml") + Files.write(newFile.toPath(), oldFile.readBytes()) + } + } - executeBlock = { - val resourceDirectory = get("res") + // Copy mipmaps to secondary files. + mipmapDirectories.forEach { directory -> + val targetDirectory = resourceDirectory.resolve(directory) - // Copy adaptive icon to secondary adaptive file. arrayOf( ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", ).forEach { (old, new) -> - var resourceType = "mipmap-anydpi" - val oldFile = resourceDirectory.resolve("$resourceType/$old.xml") + val oldFile = targetDirectory.resolve("$old.png") if (oldFile.exists()) { - val newFile = resourceDirectory.resolve("$resourceType/$new.xml") + val newFile = targetDirectory.resolve("$new.png") Files.write(newFile.toPath(), oldFile.readBytes()) } } - - // Copy mipmaps to secondary files. - mipmapDirectories.forEach { directory -> - val targetDirectory = resourceDirectory.resolve(directory) - - arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", - ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", - ).forEach { (old, new) -> - val oldFile = targetDirectory.resolve("$old.png") - if (oldFile.exists()) { - val newFile = targetDirectory.resolve("$new.png") - Files.write(newFile.toPath(), oldFile.readBytes()) - } - } - } } -) +} From 19c7dc8e44d7dd058d8db103f0415631212d39b3 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 19:43:01 +0400 Subject: [PATCH 11/67] refactor --- .../layout/branding/CustomBrandingPatch.kt | 10 +++---- .../branding/BaseCustomBrandingPatch.kt | 30 +++++++++---------- .../layout/branding/CustomBrandingPatch.kt | 10 +++---- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 97570cb2ec..9cc9961ae9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -64,17 +64,17 @@ val customBrandingPatch = baseCustomBrandingPatch( "Music" to "Music", "YT Music" to "YT Music", ), - resourceFolder = "custom-branding/music", - adaptiveAnydpiFileNames = arrayOf( + patchResourceFolder = "custom-branding/music", + adaptiveAnyDpiFileNames = arrayOf( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml" ), - mipmapIconFileNames = arrayOf( + adaptiveMipmapFileNames = arrayOf( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.png", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png" ), - legacyMipmapIconFileNames = arrayOf("ic_launcher_release.png"), - monochromeIconFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), + legacyMipmapFileNames = arrayOf("ic_launcher_release.png"), + monochromeFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), block = { dependsOn(disableSplashAnimationPatch) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 7c6d154a15..bb05f5c268 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -52,11 +52,11 @@ private fun escapeAppName(name: String): String? { internal fun baseCustomBrandingPatch( defaultAppName: String, appNameValues: Map, - resourceFolder: String, - adaptiveAnydpiFileNames: Array, - mipmapIconFileNames: Array, - legacyMipmapIconFileNames: Array, - monochromeIconFileNames: Array, + patchResourceFolder: String, + adaptiveAnyDpiFileNames: Array, + adaptiveMipmapFileNames: Array, + legacyMipmapFileNames: Array, + monochromeFileNames: Array, block: ResourcePatchBuilder.() -> Unit = {}, executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( @@ -84,10 +84,10 @@ internal fun baseCustomBrandingPatch( ${formatResourceFileList(mipmapDirectories)} Each of these folders must contain the following files: - ${formatResourceFileList((mipmapIconFileNames + legacyMipmapIconFileNames))} + ${formatResourceFileList((adaptiveMipmapFileNames + legacyMipmapFileNames))} Optionally, a 'drawable' folder with the monochrome icon files: - ${formatResourceFileList(monochromeIconFileNames)} + ${formatResourceFileList(monochromeFileNames)} """.trimIndentMultiline(), ) @@ -99,24 +99,24 @@ internal fun baseCustomBrandingPatch( if (iconPathTrimmed == REVANCED_ICON) { // Copy adaptive icons. copyResources( - resourceFolder, - ResourceGroup("mipmap-anydpi", *adaptiveAnydpiFileNames) + patchResourceFolder, + ResourceGroup("mipmap-anydpi", *adaptiveAnyDpiFileNames) ) // Copy legacy icons. mipmapDirectories.map { directory -> ResourceGroup( directory, - *legacyMipmapIconFileNames, + *legacyMipmapFileNames, ) }.forEach { groupResources -> - copyResources(resourceFolder, groupResources) + copyResources(patchResourceFolder, groupResources) } // Copy monochrome icons. copyResources( - resourceFolder, - ResourceGroup("drawable", *monochromeIconFileNames) + patchResourceFolder, + ResourceGroup("drawable", *monochromeFileNames) ) } else { val iconPathFile = File(iconPathTrimmed) @@ -127,7 +127,7 @@ internal fun baseCustomBrandingPatch( mipmapDirectories.map { directory -> ResourceGroup( directory, - *mipmapIconFileNames, + *adaptiveMipmapFileNames, ) }.forEach { groupResources -> val groupResourceDirectoryName = groupResources.resourceDirectoryName @@ -147,7 +147,7 @@ internal fun baseCustomBrandingPatch( } // Replace monochrome icons if provided. - monochromeIconFileNames.forEach { iconFileName -> + monochromeFileNames.forEach { iconFileName -> val resourceType = "drawable" val replacement = iconPathFile.resolve(resourceType).resolve(iconFileName) if (replacement.exists()) { diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 9fc5e08d1e..44506d78be 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -18,20 +18,20 @@ val customBrandingPatch = baseCustomBrandingPatch( "YT" to "YT", "YouTube" to "YouTube", ), - resourceFolder = "custom-branding/youtube", - adaptiveAnydpiFileNames = arrayOf( + patchResourceFolder = "custom-branding/youtube", + adaptiveAnyDpiFileNames = arrayOf( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml", ), - mipmapIconFileNames = arrayOf( + adaptiveMipmapFileNames = arrayOf( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.png", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png", ), - legacyMipmapIconFileNames = arrayOf( + legacyMipmapFileNames = arrayOf( "ic_launcher.png", // "ic_launcher_round" exists in 19.34, but was removed in later targets. ), - monochromeIconFileNames = arrayOf( + monochromeFileNames = arrayOf( "adaptive_monochrome_ic_youtube_launcher.xml", "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" ), From 7a32683ae263a8d0a67efb5ea251b32da4353e55 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 19:51:15 +0400 Subject: [PATCH 12/67] Use a resource patch to change the manifest instead of modifying xml as a text string --- .../layout/branding/CustomBrandingPatch.kt | 1 + .../branding/BaseCustomBrandingPatch.kt | 58 +++++-------------- .../layout/branding/CustomBrandingPatch.kt | 1 + 3 files changed, 18 insertions(+), 42 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 9cc9961ae9..01d652f1ba 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -75,6 +75,7 @@ val customBrandingPatch = baseCustomBrandingPatch( ), legacyMipmapFileNames = arrayOf("ic_launcher_release.png"), monochromeFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), + manifestAppLauncherValue = "@string/app_launcher_name", block = { dependsOn(disableSplashAnimationPatch) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index bb05f5c268..d3fe3fb897 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -9,9 +9,9 @@ import app.revanced.patcher.patch.stringOption import app.revanced.util.ResourceGroup import app.revanced.util.Utils.trimIndentMultiline import app.revanced.util.copyResources +import app.revanced.util.findElementByAttributeValueOrThrow import java.io.File import java.nio.file.Files -import java.util.logging.Logger private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path. @@ -26,26 +26,6 @@ internal val mipmapDirectories = arrayOf( private fun formatResourceFileList(resourceNames: Array) = resourceNames.joinToString("\n") { "- $it" } -/** - * Attempts to fix unescaped and invalid characters not allowed for an Android app name. - */ -private fun escapeAppName(name: String): String? { - // Remove ASCII control characters. - val cleanedName = name.filter { it.code >= 32 } - - // Replace invalid XML characters with escaped equivalents. - val escapedName = cleanedName - .replace("&", "&") // Must be first to avoid double-escaping. - .replace("<", "<") - .replace(">", ">") - .replace(Regex("(?, legacyMipmapFileNames: Array, monochromeFileNames: Array, + manifestAppLauncherValue: String, block: ResourcePatchBuilder.() -> Unit = {}, executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( @@ -93,6 +74,20 @@ internal fun baseCustomBrandingPatch( block() + dependsOn( + // Change the app name. + resourcePatch { + execute { + document("AndroidManifest.xml").use { document -> + document.childNodes.findElementByAttributeValueOrThrow( + "android:label", + manifestAppLauncherValue + ).nodeValue = appName!! + } + } + } + ) + execute { val iconPathTrimmed = iconPath!!.trim() @@ -164,27 +159,6 @@ internal fun baseCustomBrandingPatch( } } - // Change the app name. - escapeAppName(appName!!)?.let { escapedAppName -> - val newValue = "android:label=\"$escapedAppName\"" - - val manifest = get("AndroidManifest.xml") - val original = manifest.readText() - val replacement = original - // YouTube - .replace("android:label=\"@string/application_name\"", newValue) - // YT Music - .replace("android:label=\"@string/app_launcher_name\"", newValue) - - if (original == replacement) { - Logger.getLogger(this::class.java.name).warning( - "Could not replace manifest app name" - ) - } - - manifest.writeText(replacement) - } - executeBlock() // Must be after the main code to rename the new icons for YouTube 19.34+. } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 44506d78be..c9c0d17254 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -35,6 +35,7 @@ val customBrandingPatch = baseCustomBrandingPatch( "adaptive_monochrome_ic_youtube_launcher.xml", "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" ), + manifestAppLauncherValue = "@string/application_name", block = { compatibleWith( From 4937dffd6c285d1ba6b48c29e09b5bb3502d434a Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 20:00:19 +0400 Subject: [PATCH 13/67] improve error message --- .../branding/BaseCustomBrandingPatch.kt | 14 ++++++++++++- .../branding/header/ChangeHeaderPatch.kt | 20 ++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index d3fe3fb897..3ffd1be654 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -115,6 +115,17 @@ internal fun baseCustomBrandingPatch( ) } else { val iconPathFile = File(iconPathTrimmed) + if (!iconPathFile.exists()) { + throw PatchException("The custom icon path cannot be found: " + + iconPathFile.absolutePath + ) + } + + if (!iconPathFile.isDirectory) { + throw PatchException("The custom icon path must be a directory: " + + iconPathFile.absolutePath) + } + val resourceDirectory = get("res") var replacedResources = false @@ -155,7 +166,8 @@ internal fun baseCustomBrandingPatch( } if (!replacedResources) { - throw PatchException("Could not find any replacement images in patch option path: $iconPathTrimmed") + throw PatchException("Could not find any replacement images in " + + "patch option path: " + iconPathFile.absolutePath) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt index fa02fcc296..1d0e36f197 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt @@ -136,8 +136,21 @@ val changeHeaderPatch = resourcePatch( ) if (custom != null) { - val sourceFolders = File(custom!!).listFiles { file -> file.isDirectory } - ?: throw PatchException("The provided path is not a directory: $custom") + val customFile = File(custom!!) + if (!customFile.exists()) { + throw PatchException("The custom icon path cannot be found: " + + customFile.absolutePath + ) + } + + if (!customFile.isDirectory) { + throw PatchException("The custom icon path must be a directory: " + + customFile.absolutePath) + } + + val sourceFolders = customFile.listFiles { file -> file.isDirectory } + ?: throw PatchException("The custom icon path contains no subdirectories: " + + customFile.absolutePath) val customResourceFileNames = getLightDarkFileNames(CUSTOM_HEADER_RESOURCE_NAME) @@ -166,7 +179,8 @@ val changeHeaderPatch = resourcePatch( } if (!copiedFiles) { - throw PatchException("No custom header images found in the provided path: $custom") + throw PatchException("No custom header images found in " + + "the provided path: ${customFile.absolutePath}") } } From 6f2e9f4bb6c30eb383462933f692392604200bf2 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 20:11:08 +0400 Subject: [PATCH 14/67] improve error message --- .../patches/youtube/layout/branding/header/ChangeHeaderPatch.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt index 1d0e36f197..b575a6336b 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt @@ -180,7 +180,7 @@ val changeHeaderPatch = resourcePatch( if (!copiedFiles) { throw PatchException("No custom header images found in " + - "the provided path: ${customFile.absolutePath}") + "the provided path: " + customFile.absolutePath) } } From d1d2b8c1fe134087867ac88afa9e54c3e26ddd97 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 4 Oct 2025 20:14:54 +0400 Subject: [PATCH 15/67] use consistent naming of "folder" over "directory" --- .../patches/shared/layout/branding/BaseCustomBrandingPatch.kt | 4 ++-- .../youtube/layout/branding/header/ChangeHeaderPatch.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 3ffd1be654..bdec0ed7be 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -67,7 +67,7 @@ internal fun baseCustomBrandingPatch( Each of these folders must contain the following files: ${formatResourceFileList((adaptiveMipmapFileNames + legacyMipmapFileNames))} - Optionally, a 'drawable' folder with the monochrome icon files: + Optionally, the path can contain a 'drawable' folder with the monochrome icon files: ${formatResourceFileList(monochromeFileNames)} """.trimIndentMultiline(), ) @@ -122,7 +122,7 @@ internal fun baseCustomBrandingPatch( } if (!iconPathFile.isDirectory) { - throw PatchException("The custom icon path must be a directory: " + throw PatchException("The custom icon path must be a folder: " + iconPathFile.absolutePath) } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt index b575a6336b..9d42c5e79e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt @@ -144,12 +144,12 @@ val changeHeaderPatch = resourcePatch( } if (!customFile.isDirectory) { - throw PatchException("The custom icon path must be a directory: " + throw PatchException("The custom icon path must be a folder: " + customFile.absolutePath) } val sourceFolders = customFile.listFiles { file -> file.isDirectory } - ?: throw PatchException("The custom icon path contains no subdirectories: " + + ?: throw PatchException("The custom icon path contains no folders: " + customFile.absolutePath) val customResourceFileNames = getLightDarkFileNames(CUSTOM_HEADER_RESOURCE_NAME) From 5b348269f138b64009922bab8ebc03f4318bc603 Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Sun, 5 Oct 2025 01:48:29 +0300 Subject: [PATCH 16/67] use "correct" scaling, add other resources --- .../layout/branding/CustomBrandingPatch.kt | 2 +- .../layout/branding/CustomBrandingPatch.kt | 2 +- .../ic_app_icons_themed_youtube_music.xml | 0 ...ube_music_2024_q4_background_color_108.xml | 0 ...ube_music_2024_q4_foreground_color_108.xml | 30 +++++++++++ .../music/mipmap-hdpi/ic_launcher_release.png | Bin 0 -> 3021 bytes .../music/mipmap-mdpi/ic_launcher_release.png | Bin 0 -> 1846 bytes .../mipmap-xhdpi/ic_launcher_release.png | Bin 0 -> 4300 bytes .../mipmap-xxhdpi/ic_launcher_release.png | Bin 0 -> 6821 bytes .../mipmap-xxxhdpi/ic_launcher_release.png | Bin 0 -> 9754 bytes ...daptive_monochrome_ic_youtube_launcher.xml | 0 ...daptive_monochrome_ic_youtube_launcher.xml | 0 ...veproduct_youtube_background_color_108.xml | 0 ...veproduct_youtube_foreground_color_108.xml | 30 +++++++++++ .../youtube/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3021 bytes .../youtube/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1846 bytes .../youtube/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4300 bytes .../youtube/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6821 bytes .../youtube/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9754 bytes .../ic_app_icons_themed_youtube_music.xml | 22 ++++++++ ...ube_music_2024_q4_background_color_108.xml | 2 + ...ube_music_2024_q4_foreground_color_108.xml | 50 ++++++++++++++++++ .../music/mipmap-hdpi/ic_launcher_release.png | Bin 0 -> 4857 bytes .../music/mipmap-mdpi/ic_launcher_release.png | Bin 0 -> 2694 bytes .../mipmap-xhdpi/ic_launcher_release.png | Bin 0 -> 7087 bytes .../mipmap-xxhdpi/ic_launcher_release.png | Bin 0 -> 11349 bytes .../mipmap-xxxhdpi/ic_launcher_release.png | Bin 0 -> 15984 bytes ...daptive_monochrome_ic_youtube_launcher.xml | 22 ++++++++ ...daptive_monochrome_ic_youtube_launcher.xml | 22 ++++++++ ...veproduct_youtube_background_color_108.xml | 2 + ...veproduct_youtube_foreground_color_108.xml | 50 ++++++++++++++++++ .../youtube/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4857 bytes .../youtube/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2694 bytes .../youtube/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7087 bytes .../youtube/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11349 bytes .../youtube/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15984 bytes .../ic_app_icons_themed_youtube_music.xml | 17 ++++++ ...ube_music_2024_q4_background_color_108.xml | 5 ++ ...ube_music_2024_q4_foreground_color_108.xml | 0 .../music/mipmap-hdpi/ic_launcher_release.png | Bin .../music/mipmap-mdpi/ic_launcher_release.png | Bin .../mipmap-xhdpi/ic_launcher_release.png | Bin .../mipmap-xxhdpi/ic_launcher_release.png | Bin .../mipmap-xxxhdpi/ic_launcher_release.png | Bin ...daptive_monochrome_ic_youtube_launcher.xml | 17 ++++++ ...daptive_monochrome_ic_youtube_launcher.xml | 17 ++++++ ...veproduct_youtube_background_color_108.xml | 2 + ...veproduct_youtube_foreground_color_108.xml | 0 .../youtube/mipmap-hdpi/ic_launcher.png | Bin .../youtube/mipmap-mdpi/ic_launcher.png | Bin .../youtube/mipmap-xhdpi/ic_launcher.png | Bin .../youtube/mipmap-xxhdpi/ic_launcher.png | Bin .../youtube/mipmap-xxxhdpi/ic_launcher.png | Bin 53 files changed, 290 insertions(+), 2 deletions(-) rename patches/src/main/resources/custom-branding/{ => minimal}/music/drawable/ic_app_icons_themed_youtube_music.xml (100%) rename patches/src/main/resources/custom-branding/{ => minimal}/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml (100%) create mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-hdpi/ic_launcher_release.png create mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-mdpi/ic_launcher_release.png create mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-xhdpi/ic_launcher_release.png create mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-xxhdpi/ic_launcher_release.png create mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-xxxhdpi/ic_launcher_release.png rename patches/src/main/resources/custom-branding/{ => minimal}/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml (100%) rename patches/src/main/resources/custom-branding/{ => minimal}/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml (100%) rename patches/src/main/resources/custom-branding/{ => minimal}/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml (100%) create mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-hdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-mdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xhdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xxhdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xxxhdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/rounded/music/drawable/ic_app_icons_themed_youtube_music.xml create mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-hdpi/ic_launcher_release.png create mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-mdpi/ic_launcher_release.png create mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-xhdpi/ic_launcher_release.png create mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-xxhdpi/ic_launcher_release.png create mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-xxxhdpi/ic_launcher_release.png create mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml create mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml create mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml create mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-hdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-mdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xhdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxhdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxxhdpi/ic_launcher.png create mode 100644 patches/src/main/resources/custom-branding/scaled/music/drawable/ic_app_icons_themed_youtube_music.xml create mode 100644 patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml rename patches/src/main/resources/custom-branding/{ => scaled}/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/music/mipmap-hdpi/ic_launcher_release.png (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/music/mipmap-mdpi/ic_launcher_release.png (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/music/mipmap-xhdpi/ic_launcher_release.png (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/music/mipmap-xxhdpi/ic_launcher_release.png (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/music/mipmap-xxxhdpi/ic_launcher_release.png (100%) create mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml create mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml create mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml rename patches/src/main/resources/custom-branding/{ => scaled}/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/youtube/mipmap-hdpi/ic_launcher.png (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/youtube/mipmap-mdpi/ic_launcher.png (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/youtube/mipmap-xhdpi/ic_launcher.png (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/youtube/mipmap-xxhdpi/ic_launcher.png (100%) rename patches/src/main/resources/custom-branding/{ => scaled}/youtube/mipmap-xxxhdpi/ic_launcher.png (100%) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 01d652f1ba..34b19a2420 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -64,7 +64,7 @@ val customBrandingPatch = baseCustomBrandingPatch( "Music" to "Music", "YT Music" to "YT Music", ), - patchResourceFolder = "custom-branding/music", + patchResourceFolder = "custom-branding/minimal/music", adaptiveAnyDpiFileNames = arrayOf( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml" diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index c9c0d17254..ff3107cf62 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -18,7 +18,7 @@ val customBrandingPatch = baseCustomBrandingPatch( "YT" to "YT", "YouTube" to "YouTube", ), - patchResourceFolder = "custom-branding/youtube", + patchResourceFolder = "custom-branding/minimal/youtube", adaptiveAnyDpiFileNames = arrayOf( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml", diff --git a/patches/src/main/resources/custom-branding/music/drawable/ic_app_icons_themed_youtube_music.xml b/patches/src/main/resources/custom-branding/minimal/music/drawable/ic_app_icons_themed_youtube_music.xml similarity index 100% rename from patches/src/main/resources/custom-branding/music/drawable/ic_app_icons_themed_youtube_music.xml rename to patches/src/main/resources/custom-branding/minimal/music/drawable/ic_app_icons_themed_youtube_music.xml diff --git a/patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml similarity index 100% rename from patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml rename to patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml new file mode 100644 index 0000000000..b5cd426b08 --- /dev/null +++ b/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-hdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/minimal/music/mipmap-hdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..e5be9783a531f4317fa482c13f8944ef4a2cf139 GIT binary patch literal 3021 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 literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-mdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/minimal/music/mipmap-mdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..8e4949a1f55865c4052110272c2c2c4210587887 GIT binary patch literal 1846 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 TSwF6300000NkvXXu0mjf6XpC% literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-xxxhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/minimal/music/mipmap-xxxhdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..92dd23b5845fe5f357acdaa7b25e9d4d5901562a GIT binary patch literal 9754 zcmY*9H>mx9y?hte$|$mm9- zd+*-&uix+ae4gj|=bZaK_qpS`P9(sfdejtb6aWB#+CX319RElE?@LC4|C%p&lL7#O z%LdvSmSGP2PslSZzc+V^4Gy6n3{jj=Q7QA~Bq1M&@c`vvA>G85s1+`zhy%3suLu@1NiPrxwo3n1-%=a4V3roO5PG+x1fG8MHT;|V%P$8(oqus8Zod1t zPfDAXi{J8v`TqaMTyHM1PT83@@g6yHl9zT(kZ)qGPvFJdH*el#TrFKZY0yb88FV71 zTL*bc*1Mmu8PGI@>`Z-nBEl#pxDDOXW3jZd3gNl+{V$G&69c%AkBsZucK^mtJ>k{! zOCY2}TU7f!-=oI1Thfg8@88R5Pt|ZLhj5sb<{3aFgb9|ka1NR_24OjMDTlJo%Fd+D z%*zlWM?xIt@1eX(w0jDPXG%Z)T0**rW6kBci%Ni|bePZ*Ic%P6t81D}IS)FxJ)GW4vh!MLL@Uqiyio2%w-1wnmUCOH zVZ4lOjPv|LSkj>mU>pEyq=#rt_n~w~{)-xP*7-ygyXyoYEj$=4dic%6*6ncz;_Pi{ zCt4#$5wmYN z=r52!wF&aPD#nFI04rj8X+38pM z-}30#7t^Ah${4!%Nt&a3gQJdFMFpfx7XnKM z4g{3Dz|`no41&n#g6uu*ANy4t1XWMQ#-FnGhIJB>trVFmMV1aE6s*v*sq7X)8I0K^ zOg;I`M-y*k;lAYjT!lnqC=V0ub8pdek25nxF~!bsI*^Tm+bVo<%e!%vIFZbVye>gb z#)C?SKJ~L}Q&ZE)hpGCdT^e2Y!K$SbbpQQBKh(6S##2%H0{^&uDCdjR@t+IbNFj=6 zvMqC!4nS@46~<{ZncYnWE_tO%wOT%p;<3%Q7fYrfis5>u1aafYg+jC*t3dmlit}ru zUn%q_()~69=AY%hDm~wVX{_O3q4uu&d$$`@YSFQ9KaZu(TOQRv4W4fLk1|u0ww-!5 zzxDd-#4i>hH^^l(nkZgD85V3*59ozXdpHY6GA%Yy<~p?PN74K_22+b93_sh(b|o z%7i)7W;q64sI0~D=OmUb+#E@({JJ)vYDHh{4Mp(EfS=dieK%6F3AQ(cYmBwRj9K;u zg3G%yPUkpV`F80-Fwu5`VK!qCk!jfUnrYU38->1R_AIro8ETAN>)s&+3zh(y+Qaef z`x@$Qt|~U~4+Dy1aE>dA`a8LZMnJ$nPb_K!+IUYV(r*5&1QSuhE>^BYJYLwMQHlPl zqodQ?%{g4;COVKYY0XeGNnJ(d(WDL|j?rs|9KM7?p`FZDNViSKk_n2UozSrR`xpu$ z4aqdDL#h!S)w6+ONGIUPRF+LBq>INvq$XLENHCLF{QG6|kPz>VKZ9&x+F`vf%vGJA z7+E1{6=iB=)Wke(+rr-7UNb$?TE0-a(2PK1LDIO0_UQO{5G_@kAO>Uv{K{OYx-aoB zQlp`cp%QRO5Q==7{mjG=-_g!aNx|~gu0%V6=qGZ8zM236(nUUt5n^CkVR`6=6Mi0h zpOB3gG{xpkF)ns!ZED)WmMA`O(!J}W8~gnqlK}f0izb2#{7iwn6^A=?nNF=BS!!99 zt?A#2(}C&CWII&7ybh0TY%-}2JZa>z(KK2^IPH>R>1)az%16#-cElqj=Va9npmLcN za|L1(8Dh;2)-XN@@(Kgpr)hjfLs z#O|9%B$ie@6|^Fbg)J>%ssYInQ6x`@L9gHccvn~tYo=giWE>)3mKA2#R=Ar-iq+d# zS4bDWC(wvMo)hOE_aym8?^D+8LmpV(I(yBXGRep=Zt4R=l0{>Fud_YiBYOOd)*SIW zSV!Q9-{V0ASQBsQIauOhjnI>{ebY6Gk{-y4A(5pqj|Z8*{>fxdPftF!%zBiLR|L&f z8hqi!Z_Ou|yVOeyS%7a9#ofq0o3UKZ4?p-vO3k*WLb>%C;~i~2Or!Oh>fcx2 z#ht(N&4b+~@6>iw9Pf#p;=-_scN_n@p3&QcVdp+WLsYrL_oT{I0rPL zpKI4|sdJH+;_09E7j&Z^CcMK3>nv`m_5Mr>Aifns-8lcYA4AJIshWZ@C{`#$=IP$V z$YC(HV#CWk_5)Mym3G8+Ip zB}7D6h-+RN$VDgHQrfwVOcVE9Lld@WpKgs6-9d1drg4&}4~~&@+>%b}+S&Pe-!6@4 zT7SYLRtOW3-{Wp{FZtc_&gR^?;rsK=&|6l&uGhDqId!*Lj08Cv z3T!D;9?8;he`V{6tFo_YmI&wG*OyChT!$7L#z>-L?L&IHPU$ujd|1sdab|6D^)z}V zgO2%A!|=D~2McqK&0gsieweRIk(E|TZHuA=e;9vH;o&|KTlJyzk$M)SsohwP!btSG z0JurVt|J$~5?^4Nt1xaLUwkf!`}mVqp2Z>eBpD8q_=U=n^U20dTRSSAx;?OOfi;gq zKk#95_;2vf99~>ZqsA+8x}k#IVWc^eMLF~l_@fCI21!ggW&Es6^!~$R39iVpu2)9| zY(&g7kSFP$Gr-`NYbkoUSJIuA8|?6jQUhqX1(g_wVI-OpTeabv2aP`hmQa}^+=F>V zJ?|uyf_K)su68PEqF5wT&i;h^2`~OxB)OpMU)+|+X{d0hcUs`QL)YBq9-aU8gW&qP z;m>yl!`9QSIgTF^7Y!8_7Z<1Z&3(yk3sz!_>U$`n^=d}u<360Bydd&hSI{OjP8*fu z*EwfEI5hv41-?C{x69Q3m$^NPcyp#kn9xV@bjl)6MwINkNnnip`uaNc*iCgRH=^&M zr!6b{XSoP-u^U#Rp|W}_;Em5x#Ch<#g^S8g{ST2!;KielgJPoS;QLo_0oIG*XmB8-TKF&)|2;P}< zFW4^y>K@1rILhpk<3=a*jm7Sz5OBUP-cGVG%~6xi zjbIVW0L|jgw}veK+&DX7P|e_*`De9?o-EckD|Wc$5@um0X6~CMs3I!#&x`&~+=TrK zS7-aXr3TK2M$#8$>aREatIr5+fDHyfhqWO>3S$E_Yv*oFTk%Mh|7%l)Wg=lt$y~P` zWg*oqiOfy`(M{Usp8+w*2&!6-OmZ)Wa;m@;w*HvM0@`RZ+NZ}O6EtL*~Zxj z>7rPcOMz#5^P^pnJ%o3Q;5$2E`|v4lky@;LC%#6lPWAU$n5wRq8W0{{1AqUZQ)A?q z(bo?t$)Y~9cs3wX4GE12C3eAs>{7(nR1%Sg4^M>;;Kh)4`YO0g*XAA-J0ONuX+&{% z^b&G`jfO_BD9|M4IV(S5Qx9NFk`zUYVkO1>NXq#|xgOg9rGFG%q-O{J0^yE7hk!q?W_H_&CW^Qb1UFw-okO$OL)N&?T4D*6uX3m zQj1ud%>kOvG=)UbCQ6e{U^q)y#F!8ZVUm!;r>05C*Jtdjj^QU3cP9Pfrewc3I%b!; z{&qtnQS81g-JjkjcsS3?0J#$`R28aPbL$Auq#jyar_p#pfe4e6y*cp4Wg)HF17{kD3HD9v?h;stlX3v{{0OT^b++BayQGZ z`m!lie7KMi&n+&fSN!WY0yT?ZBI>(URSyQrSAXYvs%v=03KzVZ;N>8!L>I+z?UXv7 zY&Cp<&rJ2-8oAY=62L+dM{ODBffL{|<1Bix*y&*}t+M9?sGZ=|*tg)_18l~>9TxdB)qsM_sxDeArt$>fcr-LaMIw z#Y-rM_rRE?ecVpWbW~=@#eU?A%>$?s3FF~giBA6kSCzYq)d7t!lOK6)fM49)-D!az zWLK;JOau=fJg6!}b;^NFLhWB}e>C$;>D}?aT>qf#X-u`JjDbY|h}=kc#_x}*nvTS& z@#k%tU{#6Qj7f4=z@sXY2B~G(MXcZP(UC4<(7}hXu&_|Q^TrqGM#f>1gFqD;H5sR+ zhn)3u1~$TX5_b9gwPP$1rZaK6yP$6)9@32$2zH~x2=1DEHD(_ z(piI449wmKzg{w3>*pd64|f)fHwB)|1l)TuP72di9x^88g|Gccxr^hD+ybT4zq$-$ zs%e_cVvz|egWS$CQAGbx{DSi>E*q@zFS4d^3^ivzq<|Sj?k!`bFB@RU7DlH~Bj6fX zA86C!U!?}7irl03-M-(P&pXjeZ<;T@Ao{+y*{@6pmd>k=%l%EIec z2wvU*B;k089xZOWydZ?^CwlSbXZ%m@pdqOp?{|3+!cbuFKHCeeT%I0sE<(Jy5FROF zkp~YJK1g2;3|YbwC!xv@H+JJCO?Db6@MOTYBiLMq#rtn zOn5#5!ph$>Iz{81MNbBq?~@6beq^oaxuR3WP@$e(aQTk-`!pVO6K!p6nf_0Y6MvP7 zuCA`TIpQnc87VAkufm2N0X~=$Kly0GK%;;~WI9&ce)Y|BG&5T+We_=ZZaIJ4?A0vX zvKK3S+QOvXL8T?KGgj2=H6l}3*hE^x(fYUZngb~f5>>*7c;0ha;4d(qK_%=$`)(2_ zJ_3k|iE%tMaWWqQIv?^9BPL-Y5`9xt?eZME#ObHIzl61|V$|>ji9whfgD>snG#hi< zM2{pL<3%UzNy=Bv0eczC5rBo7$NKltns}8w8X|jCtKmIzW~?pQ90d=XCv^xrwWBXO z^JrJ^uK(6rJQt-#|0Ti^bIjN$U4MRVh49wYxIWv5_hykW3XG{M(1ROItVlX%lj_Ry zMo5yt61EL}2BT;_C3>?mnOJiKo=HIvz1f50qG+x(mcQm3%*@Qk-&;IiJTz=aBs9J} z^@^*bT3F;B?cc8JVjP?|;RoHo7X|G@bc^wWVSZDjbhk@h~v>2@ebm90A0298x6X!60aa zU$Nrpn@DzrITn?$I^4`-KgB-R_J0_5ub@F_KYEXQx1qAow3&kAP-r%EZf;Hw+3Rrn z%LQLl)M!#F<$Kj+z|2I1Zm=rKN~if;Jh8x6qX~?ihBzL+gcH#~J%rrOd6e_rp;UYe zBcLb8`H=8O!B!nXmIcN$T+yn17SCi{A}c8?)nP=Wr1NUmd*IC%Bs6{BSG6g7KDaP3 zGPY|j?3XHXoC~o~a#@`d&>89jBS*7H8Aa+4k{?Z+NJh?xd{BAe2dz@)^u8UZR>Fxq zpdCWiQovjEli}qS`EHvqFjd0OT(SI0a9lKRl0P+iQI*VkUck+16y4qdti<3e%9ct$ zTKPu{)h}^9tolC-Jwy#@sBGNoAEKvH=L8f6n7Fm!x)z|tI-ZP##t)&T+)~F{37I6dH?&=DYWE(Og!GA#iG#H?y{Mc&>#s{v$EZYkoKpeuE4!gcil_#E0WxJz!8OvM!nrPUW+68ihk8rU@y0Ms{pxo; z?ufK8(FqyS-#F!m_Z|v6A$1iySI9!qs*;g>3?xtxwp6X5Br(< z?8)3+Z90MaEG;?`AoDplBg-9D5u>$A>KmfFuq50zY0UZzH=&(U-yQB)(O-Z#w+Tjs8Kngvq0I(D_PnxVs1Foz)iuX$M= zH^N_phB??14`!+MVd}9&W(Zo}ex-j2U3u`kOQ@2DvHyvCEVCT^0$^Xgiu;ne4D%L$ zE+!(Pz+l(UL{^c;1F#|X&tXr}ud;0vBDmlTiCAZMB-aR_-7tkhM_jRGcwM`UcTL}^ z;>5reu7erjsWTlA>>hX$4W1RyvT0k!*)rAu}PhVC|haA$~und$?2w?ky$%9qW;{xxUV+x3)~CeH~T zJUTe2oNoneRn~_&!UEvg9`KRjVO6Hwu>Kf0Hxy?IvW8f^SoOP71&wP_&j99BqntJkohgk*HSy@>O-LevaXSJc5zwUtr zK6eUk#P*tX=xf0#B~%3@hREI%elJ;BacMt9UPr!s;Y^J6gHMNVfwMC^0qy>Kl!Y#Y z6%D)V@i9EC=oHe9?bCY!l-wO8{Z0XhAZp+1oSsU6UQ8WBxfL)l-aSRMNz0g5gR`6T zPe_x`?|UDfIG>UBqh-NIlOhy=`g3A`T{5!X!4=>MQdp10=XgK5ndI&D zFM)Q7Lss5)34qCdUS1xxg-2VaCX%STY}6FbFoMv6c*kPz6zku@Mm`S0on-WtNSqVv{%M6^MPOcN0eE4U@G{>l93XO$`qTZlaO`voZ?Z z4g*Lzg1HJ6Eo&5~1vr*GT$K7+G>L1=MJ+`5`Jc*op7h(yXp<93q2=2n=JAxj7tJ}$ z>rbBRC7t9a6Xlj&26C{_+WJiUhn+|8!t4g9!C1H0mG`Ru7|lA&89AL|QXsT^p_|HM zL6&oGY^}4YYO(MZIE_U>L8Zc(H<1nwf2y%>HmJI`r%O$^9~)c5muRj#v}oMwli%|a zOfI1(DBSTi4SdN>tS4jr&Eo)}W%B2wKDI>jl`%mMbKQDfmJ}iltC&DVu9-qt@FAX^ zP*!hi?l&&pcLgxA{+TXQA`=K+I*aQN-bU_0_YQK;h{(WR&6t7ru&j)gG}pf#E` zsJGHq6cCe+FhynGp&jty#+vvqJPo|17?{Wir~p9oQc+yS$F z;4ZFke}Fx9xW;YwWJW+Eg_pyBr`SE}ZeBRdRI^kx_A^X)_y#v22ZysA-?4-bN4atT zORz?!0eEX`zG+?UZjC8D&;0Wsm2-82QZ`{*0k_*C1AMyB;A+GXxcj+3|L4*kzuG^F z`#?6-L*LVBR*3~(FTo!}LmZk$>w(ooTl)Vfv$;cD_GB&{OQkqp*H1egJ>Bb$YT|`Z zvJFU#XBxuR8L){BA^Y>Ubeme*?kf@xlzxaQET%o{1jCp^jN0xR2n~d62 z)u<3{_3Zt|h6b9+Bys%7k)vb=$IhC^JAAjt~a3%+U+ zzauZi{%LX*33URla8z-?0tPz_2?;s-$-<6G;ku7vg|{O^!(wk_$?gLSID3jj7J#4B z`qyGjsd@z1;@ez2Fs%h?SiKj6RT@QCEDN-cT$pj z5uM#p{HiR`nlFFqG5OAF3Cflm&EoW6cCDMGzC$7Q<%r5G2EVWKD6R%nYD>rVYZ%HF{VCl!tTfr-<(JTLu@y)Gp6c9u36j@If-o@1? zm!M$jRYOt-p^HM$i|C-;s1!Xb_35UJSc=J{%v^UoNWZ?n@|C5-*+*Xh@YCrta>cR2 zm|C76%LE*(Y-OwS8ylXKH}w!ie}(~d3T^j@wI5P(M}?+M+OoFXl06e+=Z=W!eU^Q} zl+ha9sl(k^?Kg5ozv9h9Zb$7Dx}xKy&0V(}|B?0gUl_qUx5uQ1++4lsL_=qKiEc(g zGEF!+-5Wpc;Lg&{%eP6JPciN*y$c$S#irx=m2sl<_4^pCj(#H!Er*!y#F@Zb3S|s4Rv$d zAbNWt89ElarF9~B#TYS2$EDmZy5>hDWli||K@a839(NsI9e#2=#*4p8n!l#>`04m2 z^t}{=-2fWw8e~Bhlwl3-aQ0ddUeVke22VOOjq=g0Oo&UKGwFhi?uMCNG;3 z=ffWMd?(qKnq0l1`F)|XS~8k>v1N23dS%6@Vq)pt_`{0Gfo@h${f3Q>nx;TZXKX++ ze+YTsGs9l9??nOGi57YXkXiaHKD{S@j*z@IZ;l%l+7vY($ke?3Bg46TMnJ7#QNyt= z(Qo8pJYHhWug5%<51katA9oRKZ3_R1p&UgdN&olXe<*YYBxNfkTcco_;vc8mBT%9> znUR!tu@E8Mo7f|m+~{Ei1O7IJOL>N5+>YA&-_9xd!yHYV5r|IpfJ34FijJgZ{yR?DKGFBG8} z+Eh>--C+}XdOzj%Nm`;(p}1u^15Ez&YNychKL($1A7t^d_dB_g{Vl>1;wz#E{ytNw zdZws6SDJ$CN`jT&>kiG*XdyT7&lA?qR%D>0_)x%*(5u0WA7Qe?oyQ5eZzb7N1FOmk z{C3h;`L9}2B3Fhcn0XqkIBvol@7VLZjqhGV+fYX@iC*;RX|PJVR}2wSH&`pye@o&~ z$&vSnHh9@Ip1ZG@`*Wlk1kw3!Nu(`_v?9)Rin*mk9u6Q9xfNcAHIm15PWd)6TT!qZ z>ymi;CO?P0z4wsDWAWRm4d36Ep`jrI?KRODPd1A~K{s zd3GuQ`bOF$0k*u}f(DFYw0WDI_DSLluE$h<^jyI@d1j$a-9oDKUL$Ap(*_pgc1*^u z=-0HyMBaC3s9P+$nM+a-B)h#5n?TAy2o?Mh&&tvlGn~lE`d=)yFVfxj^=)XU0q_Nn z1pelZ8OeZVmI!;W`V*M2kjl;*rIG`WXp@&&`#Ky6WmJ-Mv+ho@SSA9}ZYL{5n52~C zE)ta)r7;vJVQj8#XJf#US#OdF?`_nNZd!Lx_>4)aAxK42MxIoHRTqVJm+oGPX(pMjHmUIq$ + + + + + + + + + + + + + diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-hdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e5be9783a531f4317fa482c13f8944ef4a2cf139 GIT binary patch literal 3021 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 literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-mdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8e4949a1f55865c4052110272c2c2c4210587887 GIT binary patch literal 1846 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 TSwF6300000NkvXXu0mjf6XpC% literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xxxhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..92dd23b5845fe5f357acdaa7b25e9d4d5901562a GIT binary patch literal 9754 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 + + + + + + diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml new file mode 100644 index 0000000000..5fafed5d1f --- /dev/null +++ b/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml @@ -0,0 +1,2 @@ + diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml new file mode 100644 index 0000000000..db0a0321a9 --- /dev/null +++ b/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-hdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/rounded/music/mipmap-hdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..48c17fd646da122679fa7fb2c49548aea0c98078 GIT binary patch literal 4857 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 ASpWb4 literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-xhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/rounded/music/mipmap-xhdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..5036b8cb98d6d2689087612e89b011f4a2f741e0 GIT binary patch literal 7087 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 Z{vX~ZXMqYD*u?+<002ovPDHLkV1kt%u=@Z2 literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-xxhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/rounded/music/mipmap-xxhdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..a99c02a1f50dcbea0afcd42a64902f11fd06beae GIT binary patch literal 11349 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 Xs>`$D!`iBL00000NkvXXu0mjfRWw0E literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-xxxhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/rounded/music/mipmap-xxxhdpi/ic_launcher_release.png new file mode 100644 index 0000000000000000000000000000000000000000..65ace4b1592dbc857fb6d603c692ed01f463e747 GIT binary patch literal 15984 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 + + + + + + diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml b/patches/src/main/resources/custom-branding/rounded/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml new file mode 100644 index 0000000000..fd103564bc --- /dev/null +++ b/patches/src/main/resources/custom-branding/rounded/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml new file mode 100644 index 0000000000..5fafed5d1f --- /dev/null +++ b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml @@ -0,0 +1,2 @@ + diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml new file mode 100644 index 0000000000..db0a0321a9 --- /dev/null +++ b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-hdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..48c17fd646da122679fa7fb2c49548aea0c98078 GIT binary patch literal 4857 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 ASpWb4 literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5036b8cb98d6d2689087612e89b011f4a2f741e0 GIT binary patch literal 7087 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 Z{vX~ZXMqYD*u?+<002ovPDHLkV1kt%u=@Z2 literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a99c02a1f50dcbea0afcd42a64902f11fd06beae GIT binary patch literal 11349 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 Xs>`$D!`iBL00000NkvXXu0mjfRWw0E literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxxhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..65ace4b1592dbc857fb6d603c692ed01f463e747 GIT binary patch literal 15984 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 + + + + + diff --git a/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml new file mode 100644 index 0000000000..5cd0108ba5 --- /dev/null +++ b/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml @@ -0,0 +1,5 @@ + + + + diff --git a/patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml similarity index 100% rename from patches/src/main/resources/custom-branding/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml rename to patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml diff --git a/patches/src/main/resources/custom-branding/music/mipmap-hdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/scaled/music/mipmap-hdpi/ic_launcher_release.png similarity index 100% rename from patches/src/main/resources/custom-branding/music/mipmap-hdpi/ic_launcher_release.png rename to patches/src/main/resources/custom-branding/scaled/music/mipmap-hdpi/ic_launcher_release.png diff --git a/patches/src/main/resources/custom-branding/music/mipmap-mdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/scaled/music/mipmap-mdpi/ic_launcher_release.png similarity index 100% rename from patches/src/main/resources/custom-branding/music/mipmap-mdpi/ic_launcher_release.png rename to patches/src/main/resources/custom-branding/scaled/music/mipmap-mdpi/ic_launcher_release.png diff --git a/patches/src/main/resources/custom-branding/music/mipmap-xhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/scaled/music/mipmap-xhdpi/ic_launcher_release.png similarity index 100% rename from patches/src/main/resources/custom-branding/music/mipmap-xhdpi/ic_launcher_release.png rename to patches/src/main/resources/custom-branding/scaled/music/mipmap-xhdpi/ic_launcher_release.png diff --git a/patches/src/main/resources/custom-branding/music/mipmap-xxhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/scaled/music/mipmap-xxhdpi/ic_launcher_release.png similarity index 100% rename from patches/src/main/resources/custom-branding/music/mipmap-xxhdpi/ic_launcher_release.png rename to patches/src/main/resources/custom-branding/scaled/music/mipmap-xxhdpi/ic_launcher_release.png diff --git a/patches/src/main/resources/custom-branding/music/mipmap-xxxhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/scaled/music/mipmap-xxxhdpi/ic_launcher_release.png similarity index 100% rename from patches/src/main/resources/custom-branding/music/mipmap-xxxhdpi/ic_launcher_release.png rename to patches/src/main/resources/custom-branding/scaled/music/mipmap-xxxhdpi/ic_launcher_release.png diff --git a/patches/src/main/resources/custom-branding/scaled/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml b/patches/src/main/resources/custom-branding/scaled/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml new file mode 100644 index 0000000000..72cd56f5a7 --- /dev/null +++ b/patches/src/main/resources/custom-branding/scaled/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/patches/src/main/resources/custom-branding/scaled/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml b/patches/src/main/resources/custom-branding/scaled/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml new file mode 100644 index 0000000000..72cd56f5a7 --- /dev/null +++ b/patches/src/main/resources/custom-branding/scaled/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml new file mode 100644 index 0000000000..5fafed5d1f --- /dev/null +++ b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml @@ -0,0 +1,2 @@ + diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml similarity index 100% rename from patches/src/main/resources/custom-branding/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml rename to patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-hdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-hdpi/ic_launcher.png similarity index 100% rename from patches/src/main/resources/custom-branding/youtube/mipmap-hdpi/ic_launcher.png rename to patches/src/main/resources/custom-branding/scaled/youtube/mipmap-hdpi/ic_launcher.png diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-mdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-mdpi/ic_launcher.png similarity index 100% rename from patches/src/main/resources/custom-branding/youtube/mipmap-mdpi/ic_launcher.png rename to patches/src/main/resources/custom-branding/scaled/youtube/mipmap-mdpi/ic_launcher.png diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-xhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from patches/src/main/resources/custom-branding/youtube/mipmap-xhdpi/ic_launcher.png rename to patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xhdpi/ic_launcher.png diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-xxhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from patches/src/main/resources/custom-branding/youtube/mipmap-xxhdpi/ic_launcher.png rename to patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xxhdpi/ic_launcher.png diff --git a/patches/src/main/resources/custom-branding/youtube/mipmap-xxxhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from patches/src/main/resources/custom-branding/youtube/mipmap-xxxhdpi/ic_launcher.png rename to patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xxxhdpi/ic_launcher.png From e14fe5b24155e193d47b4d3a6b7d872c0cdc4824 Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Sun, 5 Oct 2025 02:26:56 +0300 Subject: [PATCH 17/67] use black/transparent background for scale --- ...eproduct_youtube_music_2024_q4_background_color_108.xml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml index 5cd0108ba5..5fafed5d1f 100644 --- a/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml +++ b/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml @@ -1,5 +1,2 @@ - - - - + From 13beee614ae633342c2629f53df3b7396205d76d Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 03:39:30 +0400 Subject: [PATCH 18/67] fix: Remove legacy Android 7.0 icons to make patch options simpler. It's not known if any launchers could potentially still use these icons but it seems like they wont. If it does become an issue the images can be restored. --- .../layout/branding/CustomBrandingPatch.kt | 1 - .../layout/branding/BaseCustomBrandingPatch.kt | 13 +------------ .../layout/branding/CustomBrandingPatch.kt | 6 +----- .../music/mipmap-hdpi/ic_launcher_release.png | Bin 3021 -> 0 bytes .../music/mipmap-mdpi/ic_launcher_release.png | Bin 1846 -> 0 bytes .../music/mipmap-xhdpi/ic_launcher_release.png | Bin 4300 -> 0 bytes .../music/mipmap-xxhdpi/ic_launcher_release.png | Bin 6821 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_release.png | Bin 9754 -> 0 bytes .../minimal/youtube/mipmap-hdpi/ic_launcher.png | Bin 3021 -> 0 bytes .../minimal/youtube/mipmap-mdpi/ic_launcher.png | Bin 1846 -> 0 bytes .../youtube/mipmap-xhdpi/ic_launcher.png | Bin 4300 -> 0 bytes .../youtube/mipmap-xxhdpi/ic_launcher.png | Bin 6821 -> 0 bytes .../youtube/mipmap-xxxhdpi/ic_launcher.png | Bin 9754 -> 0 bytes .../music/mipmap-hdpi/ic_launcher_release.png | Bin 4857 -> 0 bytes .../music/mipmap-mdpi/ic_launcher_release.png | Bin 2694 -> 0 bytes .../music/mipmap-xhdpi/ic_launcher_release.png | Bin 7087 -> 0 bytes .../music/mipmap-xxhdpi/ic_launcher_release.png | Bin 11349 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_release.png | Bin 15984 -> 0 bytes .../rounded/youtube/mipmap-hdpi/ic_launcher.png | Bin 4857 -> 0 bytes .../rounded/youtube/mipmap-mdpi/ic_launcher.png | Bin 2694 -> 0 bytes .../youtube/mipmap-xhdpi/ic_launcher.png | Bin 7087 -> 0 bytes .../youtube/mipmap-xxhdpi/ic_launcher.png | Bin 11349 -> 0 bytes .../youtube/mipmap-xxxhdpi/ic_launcher.png | Bin 15984 -> 0 bytes .../music/mipmap-hdpi/ic_launcher_release.png | Bin 2876 -> 0 bytes .../music/mipmap-mdpi/ic_launcher_release.png | Bin 1802 -> 0 bytes .../music/mipmap-xhdpi/ic_launcher_release.png | Bin 4077 -> 0 bytes .../music/mipmap-xxhdpi/ic_launcher_release.png | Bin 6256 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_release.png | Bin 8744 -> 0 bytes .../scaled/youtube/mipmap-hdpi/ic_launcher.png | Bin 2876 -> 0 bytes .../scaled/youtube/mipmap-mdpi/ic_launcher.png | Bin 1802 -> 0 bytes .../scaled/youtube/mipmap-xhdpi/ic_launcher.png | Bin 4077 -> 0 bytes .../youtube/mipmap-xxhdpi/ic_launcher.png | Bin 6256 -> 0 bytes .../youtube/mipmap-xxxhdpi/ic_launcher.png | Bin 8744 -> 0 bytes 33 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-hdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-mdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-xhdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-xxhdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/minimal/music/mipmap-xxxhdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-hdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-mdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xhdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xxhdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-hdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-mdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-xhdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-xxhdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-xxxhdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-hdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-mdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xhdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxhdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/music/mipmap-hdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/music/mipmap-mdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/music/mipmap-xhdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/music/mipmap-xxhdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/music/mipmap-xxxhdpi/ic_launcher_release.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/mipmap-hdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/mipmap-mdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xhdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xxhdpi/ic_launcher.png delete mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xxxhdpi/ic_launcher.png diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 34b19a2420..04299c6a78 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -73,7 +73,6 @@ val customBrandingPatch = baseCustomBrandingPatch( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.png", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png" ), - legacyMipmapFileNames = arrayOf("ic_launcher_release.png"), monochromeFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), manifestAppLauncherValue = "@string/app_launcher_name", diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index bdec0ed7be..5fefead739 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -35,7 +35,6 @@ internal fun baseCustomBrandingPatch( patchResourceFolder: String, adaptiveAnyDpiFileNames: Array, adaptiveMipmapFileNames: Array, - legacyMipmapFileNames: Array, monochromeFileNames: Array, manifestAppLauncherValue: String, block: ResourcePatchBuilder.() -> Unit = {}, @@ -65,7 +64,7 @@ internal fun baseCustomBrandingPatch( ${formatResourceFileList(mipmapDirectories)} Each of these folders must contain the following files: - ${formatResourceFileList((adaptiveMipmapFileNames + legacyMipmapFileNames))} + ${formatResourceFileList((adaptiveMipmapFileNames))} Optionally, the path can contain a 'drawable' folder with the monochrome icon files: ${formatResourceFileList(monochromeFileNames)} @@ -98,16 +97,6 @@ internal fun baseCustomBrandingPatch( ResourceGroup("mipmap-anydpi", *adaptiveAnyDpiFileNames) ) - // Copy legacy icons. - mipmapDirectories.map { directory -> - ResourceGroup( - directory, - *legacyMipmapFileNames, - ) - }.forEach { groupResources -> - copyResources(patchResourceFolder, groupResources) - } - // Copy monochrome icons. copyResources( patchResourceFolder, diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index ff3107cf62..b1b4b2b02e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -18,7 +18,7 @@ val customBrandingPatch = baseCustomBrandingPatch( "YT" to "YT", "YouTube" to "YouTube", ), - patchResourceFolder = "custom-branding/minimal/youtube", + patchResourceFolder = "custom-branding/minimal/youtube", // TODO: Change the icon style to a patch option or an in app setting. adaptiveAnyDpiFileNames = arrayOf( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml", @@ -27,10 +27,6 @@ val customBrandingPatch = baseCustomBrandingPatch( "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.png", "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png", ), - legacyMipmapFileNames = arrayOf( - "ic_launcher.png", - // "ic_launcher_round" exists in 19.34, but was removed in later targets. - ), monochromeFileNames = arrayOf( "adaptive_monochrome_ic_youtube_launcher.xml", "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-hdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/minimal/music/mipmap-hdpi/ic_launcher_release.png deleted file mode 100644 index e5be9783a531f4317fa482c13f8944ef4a2cf139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3021 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 diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-mdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/minimal/music/mipmap-mdpi/ic_launcher_release.png deleted file mode 100644 index 8e4949a1f55865c4052110272c2c2c4210587887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1846 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 TSwF6300000NkvXXu0mjf6XpC% diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-xxxhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/minimal/music/mipmap-xxxhdpi/ic_launcher_release.png deleted file mode 100644 index 92dd23b5845fe5f357acdaa7b25e9d4d5901562a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9754 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 diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-mdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 8e4949a1f55865c4052110272c2c2c4210587887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1846 zcmV-62g&$}P)YK9N{DGmA4!8q z8r!1P6yuLpn^+PH)iw@Bu#B0DhPObzU#f?Wp-9)cGty|eA)5Nx#xW6 z-gC~}8F9ISmpP2NUavP2zvi13qU&PrtjQ~k2=gFh(V|6h+1c4?DJdyA0Io4+){_Do zuoX7(A?|j&^V8GQ-{s%Kj9(aojJu3`61c_~?j4r8`MM2PI0BJdF9a*fBx;yUH~)?? z$RWn$+#24cSFL=6QbeAsYj(PuaoI%ZF=N^$psUY?t=-ZO1iKNk`Y;MJBO_xaJL=OM zPp74&O-fSc6@DJ9=JvsdmG3~sFu=z5GNzPs-hOo*G^8yR2(I^9ad0X+`9sQ?Ts3nF zgaVJHZT0WNR$T0g(G7TYj!T0of6b0V4Z{!nKH+*=3$}wWiieG~n~jDEy1x#MldZxQ zJ)VoH-ojWoq5Eynx%m~ztK{ zh*%iyU(jVgz&+?x zS67QU2M!$YvF8tp6Q|KR*VEM(+{FWeJ5Qeb>8aB84%F7x()jo|b#`{r+QOCebH!)$ zXH};qdMZArbww-b=+UDzF)=}Pb#*@Wo&nX7#yENghlE%A+=QqfW278Vv#UtgaH zV)g3Pw98vf=Qnj(VyAZtm6Vjwg9i_&zrUY~ii&*fJqM3vG1r2#;x2Z8Z+t10Y_GmT zQ&SU7Pft@vM+fC*<OoLDQakFpp1-6s^ffbt?3o0E&o)EH8wU1owl|%%FN94v10>* z8yEDIgoK17BY*`97Pxr_hIJ*UShHpgjf{-Y)vH&@}L;%;jcI^^{ z-re2pGtU83C%VUrUSI^kDTEdpbO2RVRWvp>MrY2Pp}f32V>~}UpU$2=OQWNsR9RW+ zGtU8x0QiZlTB*yGl$4akgZT7eC#muEfQ~B^v>-L~#JW z=}LhD>2mAVExK{z29=hU()#u5>Gtj0qPX?63J@xQKIR;&$fKV|@Zi_FQlLP4Y;A27 zM}_9*W@>3^p+}D%(ZPcUxs_)4=sSeq#!cs2=8UIsgnAs$;X>Xcm2i}Bbeu3_)v8r= z^X5&_^Cu@K>H78Sv|_~yA3cWV;CTF1tWQHyH;D^=6@F{%=2hkWz#PQkiBKz15U(%=JwDBh>9vH-zfI{Bh582s(7Knla1~JI^HkwFt&9po=+}3mdQ{ZQAPd!3tIe zPGT4-j5lIqV>fW#HlgM5YWCsG!s#)@_*-HKW4H$$=wc4f#g_%xfGybcIp4fUQGYW5 z$M|LsA|6IzWMrh54_#}cqN2(GTw@IPqz-g3=gC`Dn2DPOI}%Y`T#UR0)b8N#A6}Ed kwOZwQ@=XfFgU<8+0S{EpMX@&e=l}o!07*qoM6N<$f@=A}79NBEIY~keV3II7AV5e6giGZpYTX1Z(GYbJ@G8)1iE1cI-^w=VxVQ6#)1ipWzwGSnFw`w-H$(u9_KYBBP+7pfwTNJtHHd z!tHiHPI!f|neZRNA;L+*S;9F5e2>q*R%K8YbsmQf=z>nY4VSmgD_vn>E4G1WW@ggl z?KGN5TTIwPI71MP1nAmLSd2E%mfp6jW+F6s;Xo-RB_$=EX6Vg?*NL2Od=Mvyu#1EX z8u0T)dUi<%e{L;n)u-?c+C%T2Ng_9V> z)9gy30X{`I#RFz{VId*d_{E2-LLZ+(pM8xb9HfOx^`y|?ZleKx&I9x@U`Ifk5d7Ka z^z#@VhZ>XPR|D@ET!H*`kOB42vF+ncY; zL0D#1SisWfuQ4WHV|9ucK9V{+Q|q`j(1jZ~L6AR_QJ!$sxFN^H1@1^o>g00nEbTro z_!v-F!ZMauwK0d*2pnv&nW5RSNp+AnN49~4IgD}9SSyo~lG^DUghHhCJswXYb?PJ4 zu?z0-b~&{{rmgDxk0~xB>s$m=WP_Ob)R7(NP*ZX_wLu%}M~NglC&3WT09w*)*l6ic zvjLBpzE%aI~kuGhFLHQ_Obi3(kyy8+EQ4Q)GZq#|yZ1YLD~eSeUgsCaOv&fS%W z3@F(3k@Eej0mmIBI|a-Qt%lFzMD^M`; zkh0@SX=L`-9g-_@-6v=jbW@zxYi}TZzq{sgB|?7vA$Q2M3Z4d+iqkrYJj+N;O^qW3 z`=Bi1e(DeAjJ!xyLP7!`Ti5BFNcw(KP_8KqSl(Y$R3tWT+$atoJ}ma_+b7D)%jM^J znb~6THTQ|V!=Jq(Ku2DtN9wGos1Tog@`-F~!-fr_u&~h9pGJhSFQ8R07Mv<>FDtxz zyNW8VfPz5pdO`T<)2GFyOP3^8uU;)bFV5~Rww69EzPjnpSA-8pN3o}y)VX%;TBDus zzyIDacAx<6R7$$mrQEuLUt#ytffO88iUR8Y3knLv_U+pZVlH01D0=qnDWBb2e52TR z)61f&d})KQul!}H1G;+m?k#n5J7^PaTl>?Pxc~n9ZT$!U3^zpC z&|Tox$7}K?fpy@17AXY*o&5~V#2ij?ht5;h$XDhr)nh=FFMm z!i5V4NmHjzHJ&{_c&gZZ%i4Nj#^48y`j0;PsG%2a%$PC5)_wpXIV1z@A#VA%cYGQ_ zWnqA`CLBl_HGlpi{Ds41?z`|i7VKY{_R_QVp7>$;mOL8Ws%0NS+mBZ zi(Og>Ah{$1eBi1H#HM2jzQe@%&%aPOR0i;PJo2c3Njq@hfSk$vyrjoa@rT>r7f;`@ z)r8-V+ah}9Ut^R*P)ESk^Z7&#LF3AA@C5~|}WILRb+vM2T*mNpI;YnJgWGb2lkEqzAJylZ<6?%XCu|LS-08JC+kZ=O*fZV0KUwVhyrxugy5SJBbY zS$++WmX?-Fh56S-gPH;97&2stIC$`&Y4*aU@biNFfnpNHf@ybuBr)-}cSOEQJAwTC zd~xK+5u-jfVFLyXu(cCJ@R7uKNl8gP{TbjYT%ox`um|vk<;#~F1pfHrk7C-iX{P7H z20tJsjo&FI6NXZX%AX@%Jo)64;^&`#HtH{2xX`9Q$T0Q-?b@~L1Fn4tX@$;OVo?=wR>k{~$KkweXyV$vNr%?}vxbC{^Z2E%?UIAwk5)uaZ zGeAq)sr7P-0g%J5Ter?25*Rshq^+D4R)&Gw zG%g3dtFEp# z&Hm!zVq3WoLEngVP+XfALBoOiMp|Dd704!Ou#31(k`Saqj#~w31N9s9${(RHs zZSLH;Ha#JPeiVV7Fi&`s0k9sYEX}({Q)Vd{ze0E>#a4Xo>Qhw zF+F?frI$qK&Yf*~LIlYp3_w{XUf9K9oX-mxeAqT6C1s3O*%6r#Fm~)%)9WjEuLqwa z$KSDIhw=HzlPAUS;lpk9LkP)X$BrEZrJ(nMV}j3%c`S?8RH%e1oX{&f0hrNy_Uti; zM!?0rF%H>u!))HX**Ly-2-pDCl;#fx$1XoBfbS|(sc_IQS_M{Y*|H^6H(r;6ypC+&zCCWk z@K?CNv2V%C%frJsyhNlaa6}+xAicB_&v@jKM{MOo49Ok*e^OG?6maYDcn|~p3N{DP zadB}y$ZGP}QQZz(1%3MTG3EP=6DLl{djM#`7#z}KY5ZDz@_4}&H^`-5FH)epOiT2ejrT1!S}niZQBk3m##Xx z9~SwJ5TO$V5d1ZBLumwcg3SFX^;`xH6_>Wdx7tK*%4ii_L#yChR_vp(2+ZKw|38}j z!@!}-d;U{zfyHoinnBy>d9WxekKnRk-~S@GQykWN_Ol=sB)4wex+f{ELIY0Q7dQ+u z^Pvg5KPoB;8!ueG)XVoEtoo6K<;%MfS5yP$f+pyfty;CZ z8eF*=nEChk-c3f34Z0()2;lSn3vqFA_kknDmFcaA#t>X2U`Lln%WN(p zz21T52=@Cb>v|Q6U7bOb)&f+tH^hU zT;2#@NJgmCf^u^*0>&zXE|I^5xF}MbfE&Npjg2MnZ89DZiplqV*vyPzkWa4oW8$Dh zaS;%|?@Rb4u2h1DP(nu7p}C_b8xxezm*+f0{y%8!{S^n`!sp9Yff6*tK{=byn>zGf z6A#RKz=hkvYvvd`2i>5N&w>VVRDr9u973<;Al;IUwrOJhX9#h)C&m@#&6 z5Onfc*a%pHm<@&0!ROM`)6Z*hA#7KJayk5B?Rgp-Qq4j&R*X5M6lYVY!Pte{=H zcK1+RIH-&emaBpLj4{wyzEGR20yRdAH6(7wpRf_|k8M1J?$OcFgUDCDg=NbDx>Fe3 zEvr5n2WvEjx7Do{?sYLXT&_Ecd=_*FX;>^FlhB1wl$eq zWjd|o=@^3=3&w=8VT_I=Ul(jda07$@g;T*EQBhF?X(s)V{OC8DAvm87S&YzpyqpZ^ z8~TXL6!aN=S7X3fFs6WSvKmX+CE+dsn-t8T!r0i@G8)`cS`o)IL+}es!P>~-U47F( z?nGbEC+gcPF)=YC&{x%G^c`bxq|2#I*d<}+aF&!$C?Z3YQbw_W2E9*<5e#+(jp3?v z*J8LB0Bxde^dTuJ=>_W3aP&>}k+U51-SIA`HbLjHON9SSr+|k18G|gOW!^s_A>l!q zd2iCv|H_9k80;$e-;=CX`}&9yXMEJpbI(`>G*3UXbWwkZS;YEZ>vcYZxxOa z@^=zkUZ0DghpYn^8#rGFSw%!#F`)$R0y%k`Hf??lQfW5d1mJsoM$ZPLj4F%c0{C?3 zfG+5SZnS~6&?edrdmn$Lg27|v!RLYyxB(pP;&KDIx5wq3tsoEX0<#x{0@xfe@H3vF z49cPo>Ou!}K__&h4YY+en>F$NL^lY|T5t;o;;_rcn+EvjIPljXRR=!9Gn7GD)InY7 uh!B1S0@Bzh09*zDQg!g>T#oBGTK*4@ZUW!xJE-0O0000fuUOkT5#yrRvb`N1V4U3Mo~h%|LptjdAaXaC3y*XNmZrJT6+=RyLE?i zcAazXQ1vV;kU#zC#(5#WlEgG3ruv_Cp(H zyGpoU0hwGTm67IjRx<`cFO_GzSu7tqEQ!sCP~=mYv<^erHh3xvZ{L=al?^72NI z;T|S$@OCKdF-!vkIJB*b4s;>Ad!h|QFc_#hySLw6!E7L7l$8)>5FIRn+22`jNIj5;0H+42QzFpEIXO8UblrPdm^{TaxV`#71H=Wa+r31h?z#;; zC+tFrJY8u(|7Q#^K>Wa-=zAhj58W1C63KdXW@nE+umJS}scX_dJdx+ZnVd%E=jW$W z()^)5paAs>_C!0hgZ{3c;>(3BOw~gbv#o$U4F~o_+vsLa)NSNO;f1WzsM9O-0R(7J zNE?tBT5VO3$CcY2azBPTJ4!A8nf?h(%N$yJWgIvy+%x(Cu0 zAW^GUttRR=bAw1WtA)b-s>6-$0GQjMwmtCgfvl{oPP*+HQX+Xz8+9Zj*cf#$IFykW z+G16Zr$O@}d9;!`b)V{Fnc3+8u7e~|PEO8T*iPB7K}06aG(9{^>s*lcxF5WGkED7C zY-lwAiP-I(PM!HXIuwL1??9WCy+bzSWV&8MnG9Xjncu2Tm6@Fk;CgUAGy}F&Hmw(t zFHEAw^F!fx<)Aacp)l`3+KfWk582t-9br>t+qesIAG~|#DRdwRUET$UGD@hI!KTW# zaTS?3Q|#;)s_;5N;_O{;LS3Gfl{Eymwc;Ggz*2ah7tnCveY_9N3$3$MbTMpRXTsiR zsA@d$JpREinAVdQx)3(D;^c*-_o2qts78bB3jYAFnZbOs@N6W@b_w!Mcx+A#F-t=wMn}S`ln+)e(u{ z%8>iqt{MuwkAHCz$uxPPdtq~{Vw>9l=uGleZzPP;Gut>W@hYl6rfB(I$f9SId2?TI5{RC{UI8ZB* z?u(e1LKX7!U9L=?ufP6!n}N#8%ETj&JR%f5nB0oRhHV!vItqENO4p_AeW4H*v zL-7Yysq4a*j=S%^+wo4ntZQHg@bnV(TQmzZlkT#B9 zB({!yu1sg?t9^&5mm(RYj)M_ z%L&VuFSi-&#~*(bS6y{gRJkd=$BB(&pA~-_x4cfUkqC5U?@OcFxaOK`#7{r{Wb4nf z&pvDGw+kU{O$0j9vSrIs#fKU#D$3axRWLzS=*r~T#IRw*#L=TiZAN?Rt+(*9?nt?! z{0?H?@Ht}rr7P+Lj}HHX=#bw&Qa{>q@;>O>`RAW+>$gi$j_G_xM#gpE0->qFktzi- zFM%p}7?rs_d@(w9>?qfNOv4>HazvbS&N)$K|E*+%STpWVV(n!sPYI}FWVhi_byr5@ z)vH&_KAQb@DP$O!h0aisDcfs%qs)}uD$kJ$I!8K=~B_IUAsuR!n{H; zeaLk2!uZuf zD5g{*GXF_UP0gZ8zE+iaB7^}T$tRzDVlyD7)8_U;ua3RM)8n2O%O|X<75<0vpVFe9 zQFX%8IV~yd*s&vuz#f3KIi)ds6B85LGA|6SI0{_V8RWX~bJzTO7S|`xI%dq6Ax@q= zX*1%iS+i_qum9C=#nK5ciKP?Q)(A`JnrqLw#a7>g4?bvX7k$x}6FdSwBUDC-^k8tp zig8t1#yh%joL-TaaMoF8i4Q;g&}K+{*1dc8sInzRrD6_E!53csa*Z&1^g>b6p){(l zK7IO#k3as{*6s%%d?5Pv?Q83&2Oy8SQX>5uaKef)kp_XV{&SbA#53WGfmzVPg$r$l zL>_Y6ZMWIVkEAL1{7J9X2qSupwbgUyop*|#fBxCl?qiQVW-IFv$eCDncJ^#=LZMng zAtca`p%O18&^r3}?=OxWJ7zQH+i$;ZE8D(Zk+|c6N5y|#u^}ehPGt+}8nd2{KKjVk z9{OPBULFF^#GU~s6gR3BxT-|Da5XCNDuJ-m{oHfU*$j$&WaP+^w(SBXjI-D_*7Lx&D>jmK=~(4j+O{P^*<@*V=u#Qs5? zNLAdZaw^X|uW7_Q{#gRg5(v2v5?Ir)-+lL8)L9`$N#_CL_RCg@d#>E6k`m*RIN#Ja&j(RxLdEptGN2=s~r>D zC!c)MRu+UCIp}6_*Hv2`F>K&<(o>n&IfY6rW_oPl&N2JXA>K3jPYf)^8yl2hqz#Y&*`^z;(C z@VH)ymjO?J4OP>~@4x@POn}Yu`T6a|C8HOK>wfdD#F&eo5_#&Fst#<7e(}W@wt8{m zu%x8KR^EeP0{xVlnmPd7u&N;t7}gADK8EXm1}03HU@H$47oRI8 zPTC+QUa>*`ZGI16(Xr z;^|qK4umVGgZImpEwh!a4zIlOime_j7mOQcPqw`Z;s8(MkEErg^#wPqSO`RgJBBKL zWzaVS!cP2_En94c-?wj{+&eSNR|bSAr!zlzWckc9&$N~IFnAijKRG!WzkXOPf#gZV z#KgorVxQ*@lf{C&?z+oncz7k8bjfVx1D4W+~-;1Au^%3-~jMj=9RX&}8eGa^p zA%h6Szc}bC0s#*^@PH$UZoc_uTUirWd^E3v2fO!P`zEUozyx~F3h#x18&&RwVW$;^ z(p$G~y$Tn5^*BdW7&U5?qZiq@abuNJ`c9oXiOrig+phD-!-BN|p9jKm4m>9x6M=B< zqa`IykE0Sl5(sd5qX!OuO_?&qR+e$=t+zUQt|d#B*vk3@l0cc6najWl#f>VDbKpxn z!qEc1p`a@9T?hllj2Rm_#il8)qp^0PHd52l(nf$2R>f=YDiwT* zd46*9=FQtt{M)4}^JN$-Dk_ri5HgAJ_19lVEiB^AA5II0I0poBnf3Yv(&pLO+25!& zpkyn&h*%|oAeiT)a4RCvYpBGpi8SCeEeG&$BA3Bi#?0?M`mkV4!0!mcqs>?YLinn3 z4TuHPv=l-XCDMtsWnNSD+74E_@ESV8xI?v!D=? zB~05wd41d?g2|CmH^0&<^4ixzqLVZm5Xu2!J&io1Npg_sg(79>lUw&hYD zG>0p7XvjCfJ{T4SO~RPKgNiszW?t_z$OXjo^z;S9fmT+SKrtoIEQocOiDgkGqe2yL zX!UI_gku_?efF7+FebKc-DdHBgT4WN6y@{J zKerKwv3>h?(X(gt8_9eK-v3$%+gsroShdf@I|=7OIpoTI9rD>z8kJ%0+_^U5FlNr2 zX)EtDaQHfrl9DnWwzq1L|F9tD$6EcHY?u z9KP^2jt*uY&-Ho3sqyj-5YDf;JvTqu(cH? zP_4rk3(v-oNVTD4dL((FMv+W6GDusJ_d)V}32beJw=Zfn`!WSC45t*aBH5lYbouVY zP~e691nGS;Gc$2`zP++Fzn%V+MNg*NrlzJ|jJGwYh669;eMlQpdU7&3ITDjW0Ru{t3T1c?-0>j5v6pOlpJYijhE z>OkOyybI2KeoRbE91Gi8VebQ5pHlK{3VR`Juws3nh+N*HzzcaE()*;Rr(@;??}P9K z8`nwlY>K`zou819(3cYGJ*p$Yx{&w4>puV6q)8LJJPO_iJMX7Fb+1f#N)LvDsU3*9 zGr(Z(OaM=zoE!k2`I-e=Dx1d5`>=2>gf0F&LKg~UuOpNZk;)u88Nh`gdzGna`!=%S znaY;1X`Sajrsy-WTta(Fs4t|>@aymbPvm|`8?PVlJ5~B6cV~-Wo4}oW@WC2oOO|{-hj=N?fA7V z_2PY4^n@DjuLEWB11O{aCLob(!B3j*C0qRpHnYNeUU5&HD-%wrvFTPo=uB>LYHn^W zhp`}>xd)v0l&7Sm+z4A)VebRm#XWJZOgNNb(+z7wScvM1cgf&TQYgI28LUz_Jfs~| z-t#DIq-+J7)#&HE;~{z|!}$?(tQ*DH=T%Z2gtCUmN!-vh(fJE(qih6QHCX5}g+m!m zuOX)5QIHZM(WZbz4Gu{jvc;QZ6TIgcw!u~uY}H_)%M>t}w>hvFh0|<^v89x-y#o?q z;mTof0pbX4vG9Ge1%9dtHi2#UIWO3(!MzWQo)2MKh{dTciHV5=h(wTPT~rHVvNlR3@AcVMP<0a)`BOHgDd1C{6Fb2uM^v(8%)@>3$e&V1+{$Yy#W3 zBJZh8&@rrNB0KmUGG%n;Tacf5%VkR8d`X(Lp}~!jm8(6!PzbPpRad0g*(Sa@c}(|hdPV?bT;fFcd_PgvMe z3J5}4?ICpsU8bj}zd*X}2^}k4L+AQ*-81B2F-e5GK_=ET&>lph|G<*~!QNS|!FyXL zTefWZ-_R*^t8~ns$Ft;N(Mg0jjAX9R3cJ|usi~>gP|W^XI|>qnwCW-Cq>|-tQc_ZG zP~?G5F;$0-p=;MH6xM}sP9)!YW`)n+V!$O>r=YxO1Kcp~s9>sJIaoK)72SA$rDS<9 zbl9|MQ*2T2nP#4CdD`=s!k!2N!&(G3@^Fk2@wyxGB8uU2b8>QyDsL1d*wK)Qvhq4d zDP%niok4e2_(p^-p;PGAcjVE97aOq}inpI(?+giF3EVJ+w9%9sy~*Av6wZwrGm$WM znd?9&x4NN|f%PL+BDZg>HQlwki{lh)*=)C?yiU0xNtsfk-{+4!ei$wB2gD z4>Y!QBe|}Fzo7%t#U9eh{c4s4;y_o>8NWfb-cJ-Zv@nS{xrY12VwG6xVQ+*Z23Whm zOagZp;(K=hN=!>jyPWREwRBe=gGW+161#dYhBxlJyb&-ajE#u1j>dY0B90ut(gkz^ z-9SgsRipGem5J$%a8?)b9aB@dY`E_pP%4s0BGMA9foRD#!0SkECKJytC27!imE(Lv zV_HgM8>@&T$E(JUGd$1*bP{--YDCYCu%3b01za|ih*eg&a_N!qJa>y0EoS2BN-}`% zl>iP24NWK}OvKY@q&bGZC&MvND!exWwG{-_*{NrR_B(MR-^`g}S1 zjxq3f)Yvdaj1^SJHkR}NFWp2Hr8iG!(mK%6=d zok&nBlnb|xb1q0MvHyb=ZQU!uK)sqZYc?D|n1)}SAwq4!K`SEFAtseNCFw-2YQfi` z4&_~t1Ro-@>_l5=liI$O`Y=Ly8uUr`Hs~|@jxk^?7*pVJ;wU75>X?H%Q8%8@Rc%SaXr6{igFd3K=rj6`(nBr;q;7^QFlKErp4ApHn^wCi=UMA}kq z^HZSclTI2AQy2rr5)h}J1GDuYMa2-4X5?2@- zxd=iFj1P|iA^-?E0RJD~p$y968eEGyP#5Y%-Dm@Cp-r@nJ_MxkkmzJWXn@fWCXk$B zAr5OQ@C3-8m{{--2rV!^5?Xi-kUP8!A3vHrpJv;@Z@u290 z(n-a{f@gri;U!>v0A9lh{5{Iz8eGdn(a91J#^=JuHOZv|WYA%Lual(FlI8yabW@lV TSwF6300000NkvXXu0mjf6XpC% diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xxxhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 92dd23b5845fe5f357acdaa7b25e9d4d5901562a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9754 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 ASpWb4 diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-xhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/rounded/music/mipmap-xhdpi/ic_launcher_release.png deleted file mode 100644 index 5036b8cb98d6d2689087612e89b011f4a2f741e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7087 zcmV;g8&KqlP)T-E#|?z>iXWx zGh{6x>`1`0P6zy^^r#4!IrVx-{{EZn1!Wfl=ia;(RPgv0cA@-ENFk7GolriL-ymr( z1kbyHd9Q}#?LSF${m*~8(_W$*%TO=(otGkq!5uCH<&CZk%3V_#ocrr-&O*4wRzY@~ zT~y5g|E9rNNY#S!ejRC5x+;V79-IxxU414fH!0USuD!Y)@09F`%4m5uB%gDcUAXf) zXVF6fs*1e`uCo`(5LJr5<#?~2kfSb@Uc868Ntu_}3wE3hn$Ok-cdD70wd*70zP$74G841Qh+5vltjul8|yNXdaXW%z=G=Sy0?70meIpL#!9m*!^H#EpRQi;_@+i7Y^7%4nk^Fo};l5J8tR%Ee-QKrG zNSJ9|!6_P9$z6Qm5^pJ7;x3gDRA1ySl@mZsEb~l)bVBApn;>v7w1O^Oy1X=W2po;9 zAjT$`=#s*6&(XEYP(qG2pe+|UOW+)5QRNBtf)R6E5?iU;|HcaG-pvmL<@r^x7hgTk zT~>XLIDDR4EIY?71_p65^o)Yt z!Sey_MbNerACB@%9&Qbsm!IJ^ye+FKSHu#xtakf2i}(I4D51)DE33=-D}lkHJ`xk7Q@Nh-S$=t~*DMD~5~f;}_HnuXOAD`CCQOp}BBRp)*ZuA~r$1gikC zm9(hP?tvPPHg!nJw03*Q0@?=zHG}C?jmFEr!{#$)e z@LxH(!vBcT3%xVJ)67M~xi8>O`sB*75mOI z-y>LgrBtw{darN|D6kqPkp+>NzKMooZyKx&EMO{GL!eKLf9UHj{;CT}E+fnd2aPvX zT^&?lu}iR~a<^b@^={!>K>R>jN`gxa80hG0IP<2$kj&ObyAFk2q!JiE(dX|4tInpm zj_k&2jGmAikkNjpaBbx-(fVovIRWfI@?8gmf$rNwJ_7?%3CZrUu#@xv^i|>WhU%?k z+>;oxKWAxkV4mTf(qWTe)uA2Y_0)Hv8{`DAl^7OB$X7S~ZGui09Y}H?0oz6E0DY!? z7jK|eu@~-hHFoW+&QpVkh$Z@PHFrhvR#GrxTj)mEN-&Is9sRek<*NgGLcH5>K)-3< z2?tw3H^}Ds&R$ID!F57|O0%!H%LLzsee>t$&~K{06@LSpLcfL-&t%Yli(>xsfMY_M zS1N2KzSA6tzm|O?-uQ63&lCya=wo%#UY9gWanI0O7rOEHuR}Lge=Xhwh%CQs=&IjU z!^pQCmWGxvFDQ@Z0P#)e=IRyvl6!83Zf2~87?h*DqFSyHt^Invcry^l@w$k+9Nf&^ zHH>>#;A!azOL-;82hGWbux}whc;Wgk?YeYS=dZrfET6NGw<>JY)ARl}fn z6`27!G$%A9TV)HlC09Fk?AQglQz!FPZuA`f= z4P=u689Ac4BAgBJOq<4fvNm|>if9((KJ1e`$+jbf5j&|u>Gv?7DChL(r&0KOkO5go z2P9;Hwjg{bAXh~ZKTuix)nx`>7#JXz>g2wNd^m}>Qkoy}0~AQVmla5N!A#Lc(0d0~ zyRQlp19O-|W<$soa+VkVy*%1|Tr}bGrQfo^8v8gqY}?^^5xapvJ~v_)aC#2VD73z? zwzh`t+qc8@>(}A*>C?dD@#yHw+GUB%XSkkJ1IGRVflb-JJcYj->yfqrMs)=5QURT>vyp5&?vCJ;BvX} z#~*(HMNu@?tXV_fw>7kYQr~HCm9wZ`_|bPN*pilsI@hjUt19RB-+!meR=20VaJBY@ z>0~;JoFR8vk{y3`Z1*Le8@$vzsm(J)n%IW@;4nI$&jG1^f5! zR}mwV$y6wp~5rddNe?I8y>VhE| zZ#Md6(Qj0|3O4x7pmpf!=|N#(VXZRa;^H*ycwGqWIS>@wmC9%I-v^286)$59u=1?RZ_VG;si$H-gN_{ZyLx+h5J~ z+#Qfxb+YS{=28CnffsD!VI9t4J(&$XwHM%n7760bMdKs? z2je3TP~%BO1iCj|cV*z?;{&&D-BJ;ChsDlvNXId`d_EROt&#ZtpWBTnWPm4ML zX;B9$@)=z1_;nQW`mtfd1{F~_Ga4{JG3~`gP7Ik&t`%>Bbzz&I2}~315JUXB zkCSYtyOeqX4FL{^1AqPXmx`<%J9emgfw5j!n8jHF%ZWYDLKb@=80aeU7#SHsX=$lS zA67(gaIi+X4S{avZjd1T0g%I#=%1)K$&QnR->%59I_Wi~d9deXm&C~Ze~gMcBuk3^ z35Jn5t-A7tf|;2aeD~dVD#HHx=O5_NqlfBwh@%AN6OxOhJL^P&WE%w7i&W`*_3Bk? zT-myHE0~yQr!nd3=)rJeD{`0=eONX;eB13VUs&}f9Dk%vdQJIQ8eAew98gZhM;(?W zM3;e-vrI#ILjtFV3}J|pk`g)u;WH!B6GsNlg&eZTsSCr&TE#%mh)#>s*qRG31QXJ< zg~4Il06C10Dw7TGUn+C89~8xUvPG>S7@Jy(Ijf@M2K+1^5nU#W8&D2DUa1<28xs2Z z`t()-L)wK47r@igQ}x`z(i5hVacLTv8rQ@W>29zwb5*7D_4S1tH*VC@gX;nH@){DN zkcEI8B9|kg%jLeFnQ??;{BmHO12NucEf%beA3oq`7#3YF!>fDG7!Ab@jY*Rx)mpV? zWMrtGVb>1#oenrVQ-MtL#C<2x&zN+xXU|sU$1s$ds@;Z!@a;VgR9p@`0=}NplUYw@ zLK=cM+lmAmrw=BH2M;_-;nj)6U3J9`4G#|wxOC}Kt=5Yng?Vme)>9E*qYlv+7PbY< zl+#Xxsi|qLUWAJI6Aiz2sX|eIPe$@9C)0< ztG&HYL$NlneED(}fq(z~H;f)Vy4LgF9wSNXDyPwlOi`KpI9^PgI1&E+_g_{1{QP_k z{n~)Db2Knq#>AW;Yn?gs2*>yuW1TZ0yxD;(+)xl1a~vXLPEdHYb7-6j@b~wxHG{z^ zY0Vjokx@6`@mCS7q(3wFEi5dctgK9x4=cjk+gn4wHsIhS0fx({K_|gGpkN{4`2Un# zYY1+a{)a7CpWmO<^8+;P_4?aoZ)!s>}p;%kMX(O%$7&5U! zYK{f!z(pJO6ec|`>cry4X+Q{v9udHB*?&j{^a;qF&w5@31n^c(={MvQ^dEAH!mE>u zcIVFOs5ux{RaJqXpPxn=26*Ci@7_IC`lCmWYNXL7oLmM1!)5=Wr@_l-&McN91Utra-aL&o4Dd9KN%#2iV;C`Fghm=|!qqbo zkVBfwVW+{}YdXFw^o5dZjhPTV2=@(HIwWG)DS5=u)3S(Rq}v3}(on2TxVpO1=K~C} zxVSPlHr7bjty?$v_19lj>2NpI&dyFFoi@=oC6L1}X=flW#ofXjD zE4V-!5qpY?7)~<9o(68jHVwtvM$OYKY}x7Q>9wBY)H5e1r`F*#y(ScDi7B5~*?>zaTL6D9(Baaw) zPR<`tditY}KI(xSE4kJXdNYndM>P1SqtcOQAY$ZMN)mel>|G-@3eYwr5=pJsSMa?a zypMDI0|ySM?mu|&fL_F@=hrqI-3EeW#0i?ii1>5Bj@)saaBHpPxXvDcg738dUr@y6 zqVV{$AdNpug~y)(S8wfaWT^vNG)^lSqH(|-HEI-n-dnR`cJ11w+P-c~xcQ_3!=W_c zJb1C^FC*OIm%EYUI(q;L9u{rD@JQv<>x8^V@H~(O~|@ zL3rT6fg1U=4L$v?;3r-IH90i34I9i-97!U_Pptr)pMGLs66hQjU-6eTkz`Ih2MA-6 zC%cV}1xH86TD?FWyLa!VPu0}(X&c6-4m4*7>8SIRDE9E5pM7o8%Pq*%fpi{fM3MMJs*A4 z3I||(RsES2fL#OMUD5TEuFH}n5e1_wDaq(c@D0=M(d5&Bi>sRReFixAHig!Y@Rh6p zUD<6rI&sT>fSArm}3@mJ)z7L}< zFs~WbtOWdwJ)~4;y=#3Ld)WWQ#T(e345fr!OqnRq*u*)83Nhxnb#-AuNqlLfRz=8NM5gOdEHX zu_?mH)E?NerGOkES7GT_z{x+Oh;Z0l$>mG^uoJT_@nyTtW^VlCiW}neOH?RPj_4UM zR>OdI9j-wWX>LN(E`m7yGQ}SGQ&sCvy5QU&Pr#7Nr!KypCRk&*a4_#9T``L&m5IlZ zN*H$;I0*;AwEL5nrQUUz+xh@^R2d*Q$dP#5Wm%7)srWXut&+nRn*FE?GZ^c%`$W&3 zn|%CE=!7ejX#5orjlT@uQL8izc~{{Zvk@3xLML3Mg5wU{YSFqqPCa#$9KLkxX9Rlz z9w3<8`=uuc$6x$cIN@rwXaXsWz_wSEhB5CH$hyP6_Yj&3MCkY{GC|t;e@vYusVv3L zCvx{nt)CHQW!wdq(tg9g{~>fz6@+G7r9>H5fit=c%;SdO%F+T%xA)0uV zLTk;xymd&Oaknka77hLB{oJ zMI~H?UXpy!(QDZ6kToUf>KlQlbOG%ccKz>^$fw4KOGc)SAmiP%2l#pE8)jW!4b{X z3vD~RjNo8`gG$#9oppWv;!7)pQ*VNB%5_RGuT?Q9kriQ_97096LD#`}_WYX%1 z&jLa`a?oeUwxkci#IGRLd*FSVFpD$X)iZDZiB3S!*ke_~X*Vgs)GE1P>UH2v zz637(sdOvRF#Zh(?t!_667n;z0Q!nPqwoHs4_#~3wiEtD8U7pra`Re4kGjwYHY~*m zZ{5YhuYYj*@oRz^H)Z_k*X8`_H-I8x|;SsUmt(YAdnA$+E$i+(H zYmlFItm;!8+d+f_dnFgh$!m}MbqRJaW}Cu*!0t;+?*V}mj#mk0-lhauHz|JBP2kPA z0exe?0W*6a4X54==zzIX0Qe^Eq&My;%DDMV<{e1!pvI`IQ|G&dp3>p>&B*J2U8NjeJJ1K-}ZTA1O5=uxa<7FFD?$cAw%r8%alWbYGB9@vgud}xRCc2e=nFsl7UebK+oNqebP}@^n{4Pa`u@!Kd>UGqN?>|| zb-PbK4|b1PwS${=?JwT!J2Dox>VJPuC031Dd6_^-Ish7K57ID)fiDg;fg zplzjXCZwYeoUH4QockAUY1OJDzT1g=JWR`PRPq^N!V$(neFCfIEn9k7_>G<%lzHY6 zFXt|BX5Xpi&L&RHxkJM*?Eu&XCNznelAfU{IB>>-|G2{{`_NXj8Ep@kc=8W3uh`7y z&0Bh-Z%QATE#^iipAn`Ka3+9Tuon0t>L)rj5xo+(@8xD+|Cg8Z3&qX3E#uB16_Im? zICv9+rk(-&kYq4*)c%H^xpOc$a?>DqdL?k?+@ft#*mhfnwz9LU{&A1}dQbb#UHcJV zdZJHC-|)XEH7W8LL4$A_)`q3{8V(*rcW=?AgO9Q2;PHMFkKW0iw>n|4%W z&?dBvlk-cpZ~Ebz`aQzaTC{27k3J}UL7&jKI=|i0lmr(dxMIeC0cb#AiM;`r>NcUX z7WijYkczkm+}!(eZth(fA%LPun0Hr&Uc**`lW-ELkiqpBFLVguJ;2647Mw(r!E@xs zT4gARC%ux`ps?jW_)V_3VI!QH|8c8!Jmst8mP#McmuJ4!+|+~#Nw_J6XQJ4GteZD) z?%Jw@j=)ixzruS$`B~09((Uu^11I-hH7EBM8G)QLj}Vi47uWdJ25T z9{`ugJh11afK9*%x^lYpiH2@{qv_8!fpK8ZO$FBhh2T5!Cpu5yjPpdtOc%qiA5cNFuRih`v%AdHHz9-cPOg%83^!;a+KM)#?M*)9JWtSgTqR=s#4o7f zvK^hY#%@j=_i6LFfy6!{ugG)E_xl2}FFj)Ck(OHU;0f{xaRv8foPv8YcK%%zIC)q} zcd1(UNE$jVo#%-TQW+31^WvYqM(-@O4bPe1w!;^pST?c28EsM8gtnoLXscFNw%QPk zpV*brIgF_|qrh%%MM$v0@YJGBd%yO&RuVmDVS-c4(v@E6`%idJId(1}`@(M_xp%0L z`S;}P`Gm{`zt#=%ETrI`JS6uvy-1$IMX2%HE>9@s)#v~C^rxrNt2GoRQL zbI#ZaR-sceyG!QGb%-oj;22f31YsAMx4rOu@g*uhL7oF;u_teMTP9^F1kJqp)EECH{8_<@wo_KX(#t1y_#BE%Rxj5+ILI)2vaDN@i>Q0EWC2+uS zLCAE$F+^EGHQ|Qybxfm7i`xYl(@_WNLY=4^%fPa*Of372kMZ>tbRJtC##|%>!vG#= zV=TrNis8Y4r8wxuaDlBC2}R)IhynhM&oB+9#XOi7b)YWPiMp{2EDOtgr-^@>)T|KP zYrzvHBo0^ENFwgRV7x|BYXa}#GfabNF%RZN9q$RRhahQ8r64e5Adu9WVD2;Nn0!rI Z{vX~ZXMqYD*u?+<002ovPDHLkV1kt%u=@Z2 diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-xxhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/rounded/music/mipmap-xxhdpi/ic_launcher_release.png deleted file mode 100644 index a99c02a1f50dcbea0afcd42a64902f11fd06beae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11349 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 Xs>`$D!`iBL00000NkvXXu0mjfRWw0E diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-xxxhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/rounded/music/mipmap-xxxhdpi/ic_launcher_release.png deleted file mode 100644 index 65ace4b1592dbc857fb6d603c692ed01f463e747..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15984 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 ASpWb4 diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 5036b8cb98d6d2689087612e89b011f4a2f741e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7087 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 Z{vX~ZXMqYD*u?+<002ovPDHLkV1kt%u=@Z2 diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index a99c02a1f50dcbea0afcd42a64902f11fd06beae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11349 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 Xs>`$D!`iBL00000NkvXXu0mjfRWw0E diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxxhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 65ace4b1592dbc857fb6d603c692ed01f463e747..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15984 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 diff --git a/patches/src/main/resources/custom-branding/scaled/music/mipmap-xhdpi/ic_launcher_release.png b/patches/src/main/resources/custom-branding/scaled/music/mipmap-xhdpi/ic_launcher_release.png deleted file mode 100644 index 8fb88d36762582d219d994be40074203324784d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4077 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 S`%7B@0000( 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 diff --git a/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xhdpi/ic_launcher.png b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 8fb88d36762582d219d994be40074203324784d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4077 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 S`%7B@0000 Date: Sun, 5 Oct 2025 04:13:39 +0400 Subject: [PATCH 19/67] remove duplicate monochrome resource --- .../layout/branding/CustomBrandingPatch.kt | 71 ++++++++++++------- ...daptive_monochrome_ic_youtube_launcher.xml | 17 ----- ...daptive_monochrome_ic_youtube_launcher.xml | 22 ------ ...daptive_monochrome_ic_youtube_launcher.xml | 17 ----- 4 files changed, 44 insertions(+), 83 deletions(-) delete mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml delete mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml delete mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index b1b4b2b02e..fc02902c6f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -8,6 +8,7 @@ private const val APP_NAME = "YouTube ReVanced" private const val ADAPTIVE_BACKGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_background_color_108" private const val ADAPTIVE_FOREGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_foreground_color_108" +private const val ADAPTIVE_MONOCHROME_RESOURCE_NAME = "adaptive_monochrome_ic_youtube_launcher" @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( @@ -28,8 +29,7 @@ val customBrandingPatch = baseCustomBrandingPatch( "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png", ), monochromeFileNames = arrayOf( - "adaptive_monochrome_ic_youtube_launcher.xml", - "ringo2_adaptive_monochrome_ic_youtube_launcher.xml" + "$ADAPTIVE_MONOCHROME_RESOURCE_NAME.xml" ), manifestAppLauncherValue = "@string/application_name", @@ -42,37 +42,54 @@ val customBrandingPatch = baseCustomBrandingPatch( "20.14.43", ) ) - } + }, -) { - val resourceDirectory = get("res") + executeBlock = { + val resourceDirectory = get("res") - // Copy adaptive icon to secondary adaptive file. - arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", - ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", - ).forEach { (old, new) -> - var resourceType = "mipmap-anydpi" - val oldFile = resourceDirectory.resolve("$resourceType/$old.xml") - if (oldFile.exists()) { - val newFile = resourceDirectory.resolve("$resourceType/$new.xml") - Files.write(newFile.toPath(), oldFile.readBytes()) - } - } - - // Copy mipmaps to secondary files. - mipmapDirectories.forEach { directory -> - val targetDirectory = resourceDirectory.resolve(directory) + val newAdaptiveBackgroundResourceName = "adaptiveproduct_youtube_2024_q4_background_color_108" + val newAdaptiveForegroundResourceName = "adaptiveproduct_youtube_2024_q4_foreground_color_108" + val newAdaptiveMonochromeResourceName = "ringo2_adaptive_monochrome_ic_youtube_launcher" + // Copy adaptive icon to secondary adaptive file. arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_background_color_108", - ADAPTIVE_FOREGROUND_RESOURCE_NAME to "adaptiveproduct_youtube_2024_q4_foreground_color_108", - ).forEach { (old, new) -> - val oldFile = targetDirectory.resolve("$old.png") + Triple( + "mipmap-anydpi", + ADAPTIVE_BACKGROUND_RESOURCE_NAME, + newAdaptiveBackgroundResourceName + ), + Triple( + "mipmap-anydpi", + ADAPTIVE_FOREGROUND_RESOURCE_NAME, + newAdaptiveForegroundResourceName + ), + Triple( + "drawable", + ADAPTIVE_MONOCHROME_RESOURCE_NAME, + newAdaptiveMonochromeResourceName + ) + ).forEach { (resourceType, old, new) -> + val oldFile = resourceDirectory.resolve("$resourceType/$old.xml") if (oldFile.exists()) { - val newFile = targetDirectory.resolve("$new.png") + val newFile = resourceDirectory.resolve("$resourceType/$new.xml") Files.write(newFile.toPath(), oldFile.readBytes()) } } + + // Copy mipmaps to secondary files. + mipmapDirectories.forEach { directory -> + val targetDirectory = resourceDirectory.resolve(directory) + + arrayOf( + ADAPTIVE_BACKGROUND_RESOURCE_NAME to newAdaptiveBackgroundResourceName, + ADAPTIVE_FOREGROUND_RESOURCE_NAME to newAdaptiveForegroundResourceName, + ).forEach { (old, new) -> + val oldFile = targetDirectory.resolve("$old.png") + if (oldFile.exists()) { + val newFile = targetDirectory.resolve("$new.png") + Files.write(newFile.toPath(), oldFile.readBytes()) + } + } + } } -} +) diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml b/patches/src/main/resources/custom-branding/minimal/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml deleted file mode 100644 index 72cd56f5a7..0000000000 --- a/patches/src/main/resources/custom-branding/minimal/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml b/patches/src/main/resources/custom-branding/rounded/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml deleted file mode 100644 index fd103564bc..0000000000 --- a/patches/src/main/resources/custom-branding/rounded/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - diff --git a/patches/src/main/resources/custom-branding/scaled/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml b/patches/src/main/resources/custom-branding/scaled/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml deleted file mode 100644 index 72cd56f5a7..0000000000 --- a/patches/src/main/resources/custom-branding/scaled/youtube/drawable/ringo2_adaptive_monochrome_ic_youtube_launcher.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - From 97d2e29837a862e2828d002d419d9b2f1544bbb0 Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:13:29 +0300 Subject: [PATCH 20/67] use pure black background for scale --- ...aptiveproduct_youtube_music_2024_q4_background_color_108.xml | 2 +- .../adaptiveproduct_youtube_background_color_108.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml index 5fafed5d1f..6098eed222 100644 --- a/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml +++ b/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml @@ -1,2 +1,2 @@ + android:color="#000000" /> \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml index 5fafed5d1f..6098eed222 100644 --- a/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml +++ b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml @@ -1,2 +1,2 @@ + android:color="#000000" /> \ No newline at end of file From 58bda686e2137cd584264fbd96e7f72106929d4b Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:14:40 +0300 Subject: [PATCH 21/67] use branding color background for minimal & rounded --- ...eproduct_youtube_music_2024_q4_background_color_108.xml | 7 ++----- .../adaptiveproduct_youtube_background_color_108.xml | 7 ++----- ...eproduct_youtube_music_2024_q4_background_color_108.xml | 2 +- .../adaptiveproduct_youtube_background_color_108.xml | 2 +- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml index 5cd0108ba5..082937a484 100644 --- a/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml +++ b/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml @@ -1,5 +1,2 @@ - - - - + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml b/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml index 5cd0108ba5..082937a484 100644 --- a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml +++ b/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml @@ -1,5 +1,2 @@ - - - - + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml index 5fafed5d1f..082937a484 100644 --- a/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml +++ b/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml @@ -1,2 +1,2 @@ + android:color="#1b1b1b" /> \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml index 5fafed5d1f..082937a484 100644 --- a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml +++ b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml @@ -1,2 +1,2 @@ + android:color="#1b1b1b" /> \ No newline at end of file From 3444922a79f8cffb95619ce532e8400285dac7d9 Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Sun, 5 Oct 2025 12:53:27 +0300 Subject: [PATCH 22/67] fix scaling for rounded icon to prevent ~1px padding to launcher mask --- ...product_youtube_music_2024_q4_foreground_color_108.xml | 8 ++++---- .../adaptiveproduct_youtube_foreground_color_108.xml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml index db0a0321a9..066471a04a 100644 --- a/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml +++ b/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml @@ -4,10 +4,10 @@ android:height="108dp" android:viewportWidth="800" android:viewportHeight="800"> - + diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml index db0a0321a9..066471a04a 100644 --- a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml +++ b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml @@ -4,10 +4,10 @@ android:height="108dp" android:viewportWidth="800" android:viewportHeight="800"> - + From bbe129ed34e76947d35d650b5b0de7f8eed723ab Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 16:20:13 +0400 Subject: [PATCH 23/67] work in progress: In app setting to change branding --- .../shared/patches/CustomBrandingPatch.java | 84 ++++++ .../shared/settings/BaseSettings.java | 5 + .../layout/branding/CustomBrandingPatch.kt | 14 +- .../patches/music/misc/gms/Constants.kt | 2 + .../branding/BaseCustomBrandingPatch.kt | 243 +++++++++++++----- .../layout/branding/CustomBrandingPatch.kt | 93 ++++--- .../patches/youtube/misc/gms/Constants.kt | 2 + .../resources/addresources/values/arrays.xml | 14 + .../resources/addresources/values/strings.xml | 7 + .../revanced_adaptive_monochrome_minimal.xml} | 0 .../revanced_adaptive_monochrome_rounded.xml} | 0 .../revanced_adaptive_monochrome_scaled.xml} | 0 ...veproduct_youtube_foreground_color_108.xml | 30 --- ...ced_adaptive_background_color_minimal.xml} | 0 ...ced_adaptive_background_color_rounded.xml} | 0 ...nced_adaptive_background_color_scaled.xml} | 0 ...ced_adaptive_foreground_color_minimal.xml} | 0 ...ced_adaptive_foreground_color_rounded.xml} | 0 ...nced_adaptive_foreground_color_scaled.xml} | 0 .../revanced_launcher_minimal.xml | 7 + .../revanced_launcher_rounded.xml | 7 + .../revanced_launcher_scaled.xml | 7 + ...ube_music_2024_q4_background_color_108.xml | 2 - ...daptive_monochrome_ic_youtube_launcher.xml | 22 -- ...veproduct_youtube_background_color_108.xml | 2 - ...veproduct_youtube_foreground_color_108.xml | 50 ---- .../ic_app_icons_themed_youtube_music.xml | 17 -- ...daptive_monochrome_ic_youtube_launcher.xml | 17 -- ...veproduct_youtube_background_color_108.xml | 2 - ...veproduct_youtube_foreground_color_108.xml | 30 --- 30 files changed, 373 insertions(+), 284 deletions(-) create mode 100644 extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java rename patches/src/main/resources/custom-branding/{minimal/music/drawable/ic_app_icons_themed_youtube_music.xml => drawable/revanced_adaptive_monochrome_minimal.xml} (100%) rename patches/src/main/resources/custom-branding/{rounded/music/drawable/ic_app_icons_themed_youtube_music.xml => drawable/revanced_adaptive_monochrome_rounded.xml} (100%) rename patches/src/main/resources/custom-branding/{minimal/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml => drawable/revanced_adaptive_monochrome_scaled.xml} (100%) delete mode 100644 patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml rename patches/src/main/resources/custom-branding/{minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml => mipmap-anydpi/revanced_adaptive_background_color_minimal.xml} (100%) rename patches/src/main/resources/custom-branding/{minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml => mipmap-anydpi/revanced_adaptive_background_color_rounded.xml} (100%) rename patches/src/main/resources/custom-branding/{scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml => mipmap-anydpi/revanced_adaptive_background_color_scaled.xml} (100%) rename patches/src/main/resources/custom-branding/{minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml => mipmap-anydpi/revanced_adaptive_foreground_color_minimal.xml} (100%) rename patches/src/main/resources/custom-branding/{rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml => mipmap-anydpi/revanced_adaptive_foreground_color_rounded.xml} (100%) rename patches/src/main/resources/custom-branding/{scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml => mipmap-anydpi/revanced_adaptive_foreground_color_scaled.xml} (100%) create mode 100644 patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml create mode 100644 patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml create mode 100644 patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml delete mode 100644 patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml delete mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml delete mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml delete mode 100644 patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml delete mode 100644 patches/src/main/resources/custom-branding/scaled/music/drawable/ic_app_icons_themed_youtube_music.xml delete mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml delete mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml delete mode 100644 patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java new file mode 100644 index 0000000000..8fdf36c975 --- /dev/null +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -0,0 +1,84 @@ +package app.revanced.extension.shared.patches; + +import android.content.ComponentName; +import android.content.Context; +import android.content.pm.PackageManager; + +import app.revanced.extension.shared.Logger; +import app.revanced.extension.shared.Utils; +import app.revanced.extension.shared.settings.BaseSettings; + +/** + * Patch shared by YouTube and YT Music. + */ +@SuppressWarnings("unused") +public class CustomBrandingPatch { + + public enum CustomBrandingTheme { + ORIGINAL("revanced_original"), + ROUNDED("revanced_rounded"), + MINIMAL("revanced_minimal"), + SCALED("revanced_scaled"); + + public final String themeAlias; + + CustomBrandingTheme(String themeAlias) { + this.themeAlias = themeAlias; + } + } + +// private static final String[] BRANDING_ALIAS_NAMES = new String[] { +// ".revanced_default", +// ".revanced_rounded", +// ".revanced_minimal", +// ".revanced_scaled" +// }; +// +// public static void setAppIcon(Context context, String aliasName) { +// PackageManager pm = context.getPackageManager(); +// String packageName = context.getPackageName(); +// +// // Disable all aliases first +// for (String alias : BRANDING_ALIAS_NAMES) { +// pm.setComponentEnabledSetting( +// new ComponentName(packageName, packageName + alias), +// PackageManager.COMPONENT_ENABLED_STATE_DISABLED, +// PackageManager.DONT_KILL_APP +// ); +// } +// +// // Enable the one you want +// pm.setComponentEnabledSetting( +// new ComponentName(packageName, packageName + "." + aliasName), +// PackageManager.COMPONENT_ENABLED_STATE_ENABLED, +// PackageManager.DONT_KILL_APP +// ); +// } + + /** + * Injection point. + */ + public static void setBrandingIcon() { + try { + Context context = Utils.getContext(); + CustomBrandingTheme selectedTheme = BaseSettings.CUSTOM_BRANDING_THEME.get(); + + PackageManager pm = context.getPackageManager(); + String packageName = context.getPackageName(); + + for (CustomBrandingTheme theme : CustomBrandingTheme.values()) { + final int enabledDisabledState = theme == selectedTheme + ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED + : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + + pm.setComponentEnabledSetting( + new ComponentName(packageName, packageName + '.' + theme.themeAlias), + enabledDisabledState, //PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP + ); + } + } catch (Exception ex) { + Logger.printException(() -> "setBrandingIcon failure", ex); + } + } +} diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java index 1eff30361d..11d5a6fc7e 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java @@ -2,9 +2,12 @@ import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; +import static app.revanced.extension.shared.patches.CustomBrandingPatch.CustomBrandingTheme; import static app.revanced.extension.shared.settings.Setting.parent; import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.AudioStreamLanguageOverrideAvailability; +import app.revanced.extension.shared.patches.CustomBrandingPatch; + /** * Settings shared across multiple apps. *

@@ -40,4 +43,6 @@ public class BaseSettings { public static final BooleanSetting REPLACE_MUSIC_LINKS_WITH_YOUTUBE = new BooleanSetting("revanced_replace_music_with_youtube", FALSE); public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false); + + public static final EnumSetting CUSTOM_BRANDING_THEME = new EnumSetting<>("revanced_custom_branding_theme", CustomBrandingTheme.MINIMAL, true); } diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 04299c6a78..90dda8d698 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -4,6 +4,10 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWith import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.music.misc.extension.sharedExtensionPatch +import app.revanced.patches.music.misc.gms.Constants.MUSIC_MAIN_ACTIVITY_NAME +import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint +import app.revanced.patches.music.misc.settings.PreferenceScreen import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch import app.revanced.patches.shared.misc.mapping.get import app.revanced.patches.shared.misc.mapping.resourceMappingPatch @@ -74,10 +78,18 @@ val customBrandingPatch = baseCustomBrandingPatch( "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png" ), monochromeFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), + originalLauncherIconName = "ic_launcher_release", manifestAppLauncherValue = "@string/app_launcher_name", + mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint, + mainActivityName = MUSIC_MAIN_ACTIVITY_NAME, + activityAliasNameWithIntentToRemove = MUSIC_MAIN_ACTIVITY_NAME, + preferenceScreen = PreferenceScreen.GENERAL, block = { - dependsOn(disableSplashAnimationPatch) + dependsOn( + sharedExtensionPatch, + disableSplashAnimationPatch + ) compatibleWith( "com.google.android.apps.youtube.music"( diff --git a/patches/src/main/kotlin/app/revanced/patches/music/misc/gms/Constants.kt b/patches/src/main/kotlin/app/revanced/patches/music/misc/gms/Constants.kt index f4114a00b2..39dda22aa2 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/misc/gms/Constants.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/misc/gms/Constants.kt @@ -1,6 +1,8 @@ package app.revanced.patches.music.misc.gms object Constants { + internal const val MUSIC_MAIN_ACTIVITY_NAME = "com.google.android.apps.youtube.music.activities.MusicActivity" + internal const val REVANCED_MUSIC_PACKAGE_NAME = "app.revanced.android.apps.youtube.music" internal const val MUSIC_PACKAGE_NAME = "com.google.android.apps.youtube.music" } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 5fefead739..23e9c094fc 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -1,17 +1,22 @@ package app.revanced.patches.shared.layout.branding -import app.revanced.patcher.patch.PatchException +import app.revanced.patcher.Fingerprint +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.ResourcePatchBuilder import app.revanced.patcher.patch.ResourcePatchContext +import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.resourcePatch import app.revanced.patcher.patch.stringOption +import app.revanced.patches.all.misc.resources.addResources +import app.revanced.patches.all.misc.resources.addResourcesPatch +import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen +import app.revanced.patches.shared.misc.settings.preference.ListPreference import app.revanced.util.ResourceGroup import app.revanced.util.Utils.trimIndentMultiline import app.revanced.util.copyResources import app.revanced.util.findElementByAttributeValueOrThrow -import java.io.File -import java.nio.file.Files +import org.w3c.dom.Element private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path. @@ -24,8 +29,16 @@ internal val mipmapDirectories = arrayOf( "xxxhdpi", ).map { "mipmap-$it" }.toTypedArray() +private val brandingStyles = arrayOf( + "minimal", // First declared is the default. + "rounded", + "scaled" +) + private fun formatResourceFileList(resourceNames: Array) = resourceNames.joinToString("\n") { "- $it" } +private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/patches/CustomBrandingPatch;" + /** * Shared custom branding patch for YouTube and YT Music. */ @@ -36,7 +49,12 @@ internal fun baseCustomBrandingPatch( adaptiveAnyDpiFileNames: Array, adaptiveMipmapFileNames: Array, monochromeFileNames: Array, + originalLauncherIconName: String, manifestAppLauncherValue: String, + mainActivityOnCreateFingerprint: Fingerprint, + mainActivityName: String, + activityAliasNameWithIntentToRemove: String, + preferenceScreen: BasePreferenceScreen.Screen, block: ResourcePatchBuilder.() -> Unit = {}, executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( @@ -74,92 +92,179 @@ internal fun baseCustomBrandingPatch( block() dependsOn( - // Change the app name. - resourcePatch { + addResourcesPatch, + bytecodePatch { execute { - document("AndroidManifest.xml").use { document -> - document.childNodes.findElementByAttributeValueOrThrow( - "android:label", - manifestAppLauncherValue - ).nodeValue = appName!! - } + mainActivityOnCreateFingerprint.method.addInstruction( + 0, + "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->setBrandingIcon()V", + ) } } ) execute { - val iconPathTrimmed = iconPath!!.trim() + addResources("shared", "layout.branding.baseCustomBrandingPatch") - if (iconPathTrimmed == REVANCED_ICON) { - // Copy adaptive icons. - copyResources( - patchResourceFolder, - ResourceGroup("mipmap-anydpi", *adaptiveAnyDpiFileNames) - ) + preferenceScreen.addPreferences( + ListPreference("revanced_custom_branding_theme") + ) - // Copy monochrome icons. + brandingStyles.forEach { style -> copyResources( - patchResourceFolder, - ResourceGroup("drawable", *monochromeFileNames) - ) - } else { - val iconPathFile = File(iconPathTrimmed) - if (!iconPathFile.exists()) { - throw PatchException("The custom icon path cannot be found: " + - iconPathFile.absolutePath + "custom-branding", + ResourceGroup( + "mipmap-anydpi", + "revanced_launcher_$style.xml", + "revanced_adaptive_background_color_$style.xml", + "revanced_adaptive_foreground_color_$style.xml", + ), + ResourceGroup( + "drawable", + "revanced_adaptive_monochrome_$style.xml" ) - } + ) + } + + document("AndroidManifest.xml").use { document -> + // Change the app name. + document.childNodes.findElementByAttributeValueOrThrow( + "android:label", + manifestAppLauncherValue + ).nodeValue = appName!! - if (!iconPathFile.isDirectory) { - throw PatchException("The custom icon path must be a folder: " - + iconPathFile.absolutePath) + // Remove the intent from the main activity since an alias will be used instead. + document.childNodes.findElementByAttributeValueOrThrow( + "android:name", + activityAliasNameWithIntentToRemove + ).childNodes.findElementByAttributeValueOrThrow( + "android:name", + "android.intent.action.MAIN" + ).let { intent -> + intent.parentNode.removeChild(intent) } - val resourceDirectory = get("res") - var replacedResources = false + // Create launch aliases that can be programmatically selected in app. + val application = document.getElementsByTagName("application") + .item(0) as Element - // Replace mipmap icons. - mipmapDirectories.map { directory -> - ResourceGroup( - directory, - *adaptiveMipmapFileNames, - ) - }.forEach { groupResources -> - val groupResourceDirectoryName = groupResources.resourceDirectoryName - val fromDirectory = iconPathFile.resolve(groupResourceDirectoryName) - val toDirectory = resourceDirectory.resolve(groupResourceDirectoryName) - - groupResources.resources.forEach { iconFileName -> - val replacement = fromDirectory.resolve(iconFileName) - if (replacement.exists()) { - Files.write( - toDirectory.resolve(iconFileName).toPath(), - replacement.readBytes(), - ) - replacedResources = true - } - } - } + fun createAlias( + name: String, + icon: String, + enabled: Boolean + ): Element { + val alias = document.createElement("activity-alias") + alias.setAttribute("android:name", name) + alias.setAttribute("android:enabled", enabled.toString()) + alias.setAttribute("android:exported", "true") + alias.setAttribute("android:icon", icon) + alias.setAttribute("android:label", appName!!) + alias.setAttribute("android:targetActivity", mainActivityName) - // Replace monochrome icons if provided. - monochromeFileNames.forEach { iconFileName -> - val resourceType = "drawable" - val replacement = iconPathFile.resolve(resourceType).resolve(iconFileName) - if (replacement.exists()) { - Files.write( - resourceDirectory.resolve(resourceType).resolve(iconFileName).toPath(), - replacement.readBytes(), - ) - replacedResources = true - } + val intentFilter = document.createElement("intent-filter") + val action = document.createElement("action") + action.setAttribute("android:name", "android.intent.action.MAIN") + val category = document.createElement("category") + category.setAttribute("android:name", "android.intent.category.LAUNCHER") + + intentFilter.appendChild(action) + intentFilter.appendChild(category) + alias.appendChild(intentFilter) + + return alias } - if (!replacedResources) { - throw PatchException("Could not find any replacement images in " + - "patch option path: " + iconPathFile.absolutePath) + application.appendChild( + createAlias( + ".revanced_original", + "@mipmap/$originalLauncherIconName", + false + ) + ) + + brandingStyles.forEachIndexed { index, style -> + application.appendChild( + createAlias( + ".revanced_$style", + "@mipmap/revanced_launcher_$style", + if (index == 0) { + true + } else { + false + } + ) + ) } } + val iconPathTrimmed = iconPath!!.trim() + +// if (iconPathTrimmed == REVANCED_ICON) { + // Copy adaptive icons. +// // Copy monochrome icons. +// copyResources( +// patchResourceFolder, +// ResourceGroup("drawable", *monochromeFileNames) +// ) +// +// } else { +// val iconPathFile = File(iconPathTrimmed) +// if (!iconPathFile.exists()) { +// throw PatchException("The custom icon path cannot be found: " + +// iconPathFile.absolutePath +// ) +// } +// +// if (!iconPathFile.isDirectory) { +// throw PatchException("The custom icon path must be a folder: " +// + iconPathFile.absolutePath) +// } +// +// val resourceDirectory = get("res") +// var replacedResources = false +// +// // Replace mipmap icons. +// mipmapDirectories.map { directory -> +// ResourceGroup( +// directory, +// *adaptiveMipmapFileNames, +// ) +// }.forEach { groupResources -> +// val groupResourceDirectoryName = groupResources.resourceDirectoryName +// val fromDirectory = iconPathFile.resolve(groupResourceDirectoryName) +// val toDirectory = resourceDirectory.resolve(groupResourceDirectoryName) +// +// groupResources.resources.forEach { iconFileName -> +// val replacement = fromDirectory.resolve(iconFileName) +// if (replacement.exists()) { +// Files.write( +// toDirectory.resolve(iconFileName).toPath(), +// replacement.readBytes(), +// ) +// replacedResources = true +// } +// } +// } +// +// // Replace monochrome icons if provided. +// monochromeFileNames.forEach { iconFileName -> +// val resourceType = "drawable" +// val replacement = iconPathFile.resolve(resourceType).resolve(iconFileName) +// if (replacement.exists()) { +// Files.write( +// resourceDirectory.resolve(resourceType).resolve(iconFileName).toPath(), +// replacement.readBytes(), +// ) +// replacedResources = true +// } +// } +// +// if (!replacedResources) { +// throw PatchException("Could not find any replacement images in " + +// "patch option path: " + iconPathFile.absolutePath) +// } +// } + executeBlock() // Must be after the main code to rename the new icons for YouTube 19.34+. } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index fc02902c6f..209288b3c0 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -2,6 +2,10 @@ package app.revanced.patches.youtube.layout.branding import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch import app.revanced.patches.shared.layout.branding.mipmapDirectories +import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch +import app.revanced.patches.youtube.misc.gms.Constants.YOUTUBE_MAIN_ACTIVITY_NAME +import app.revanced.patches.youtube.misc.settings.PreferenceScreen +import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint import java.nio.file.Files private const val APP_NAME = "YouTube ReVanced" @@ -31,9 +35,16 @@ val customBrandingPatch = baseCustomBrandingPatch( monochromeFileNames = arrayOf( "$ADAPTIVE_MONOCHROME_RESOURCE_NAME.xml" ), + originalLauncherIconName = "ic_launcher", manifestAppLauncherValue = "@string/application_name", + mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint, + mainActivityName = YOUTUBE_MAIN_ACTIVITY_NAME, + activityAliasNameWithIntentToRemove = "com.google.android.youtube.app.honeycomb.Shell\$HomeActivity", + preferenceScreen = PreferenceScreen.GENERAL_LAYOUT, block = { + dependsOn(sharedExtensionPatch) + compatibleWith( "com.google.android.youtube"( "19.34.42", @@ -42,54 +53,52 @@ val customBrandingPatch = baseCustomBrandingPatch( "20.14.43", ) ) - }, + } +) { + val resourceDirectory = get("res") + + val newAdaptiveBackgroundResourceName = "adaptiveproduct_youtube_2024_q4_background_color_108" + val newAdaptiveForegroundResourceName = "adaptiveproduct_youtube_2024_q4_foreground_color_108" + val newAdaptiveMonochromeResourceName = "ringo2_adaptive_monochrome_ic_youtube_launcher" - executeBlock = { - val resourceDirectory = get("res") + // Copy adaptive icon to secondary adaptive file. + arrayOf( + Triple( + "mipmap-anydpi", + ADAPTIVE_BACKGROUND_RESOURCE_NAME, + newAdaptiveBackgroundResourceName + ), + Triple( + "mipmap-anydpi", + ADAPTIVE_FOREGROUND_RESOURCE_NAME, + newAdaptiveForegroundResourceName + ), + Triple( + "drawable", + ADAPTIVE_MONOCHROME_RESOURCE_NAME, + newAdaptiveMonochromeResourceName + ) + ).forEach { (resourceType, old, new) -> + val oldFile = resourceDirectory.resolve("$resourceType/$old.xml") + if (oldFile.exists()) { + val newFile = resourceDirectory.resolve("$resourceType/$new.xml") + Files.write(newFile.toPath(), oldFile.readBytes()) + } + } - val newAdaptiveBackgroundResourceName = "adaptiveproduct_youtube_2024_q4_background_color_108" - val newAdaptiveForegroundResourceName = "adaptiveproduct_youtube_2024_q4_foreground_color_108" - val newAdaptiveMonochromeResourceName = "ringo2_adaptive_monochrome_ic_youtube_launcher" + // Copy mipmaps to secondary files. + mipmapDirectories.forEach { directory -> + val targetDirectory = resourceDirectory.resolve(directory) - // Copy adaptive icon to secondary adaptive file. arrayOf( - Triple( - "mipmap-anydpi", - ADAPTIVE_BACKGROUND_RESOURCE_NAME, - newAdaptiveBackgroundResourceName - ), - Triple( - "mipmap-anydpi", - ADAPTIVE_FOREGROUND_RESOURCE_NAME, - newAdaptiveForegroundResourceName - ), - Triple( - "drawable", - ADAPTIVE_MONOCHROME_RESOURCE_NAME, - newAdaptiveMonochromeResourceName - ) - ).forEach { (resourceType, old, new) -> - val oldFile = resourceDirectory.resolve("$resourceType/$old.xml") + ADAPTIVE_BACKGROUND_RESOURCE_NAME to newAdaptiveBackgroundResourceName, + ADAPTIVE_FOREGROUND_RESOURCE_NAME to newAdaptiveForegroundResourceName, + ).forEach { (old, new) -> + val oldFile = targetDirectory.resolve("$old.png") if (oldFile.exists()) { - val newFile = resourceDirectory.resolve("$resourceType/$new.xml") + val newFile = targetDirectory.resolve("$new.png") Files.write(newFile.toPath(), oldFile.readBytes()) } } - - // Copy mipmaps to secondary files. - mipmapDirectories.forEach { directory -> - val targetDirectory = resourceDirectory.resolve(directory) - - arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_NAME to newAdaptiveBackgroundResourceName, - ADAPTIVE_FOREGROUND_RESOURCE_NAME to newAdaptiveForegroundResourceName, - ).forEach { (old, new) -> - val oldFile = targetDirectory.resolve("$old.png") - if (oldFile.exists()) { - val newFile = targetDirectory.resolve("$new.png") - Files.write(newFile.toPath(), oldFile.readBytes()) - } - } - } } -) +} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/Constants.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/Constants.kt index c532c57d4a..19f0454bad 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/Constants.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/Constants.kt @@ -1,6 +1,8 @@ package app.revanced.patches.youtube.misc.gms internal object Constants { + internal const val YOUTUBE_MAIN_ACTIVITY_NAME = "com.google.android.apps.youtube.app.watchwhile.MainActivity" + const val YOUTUBE_PACKAGE_NAME = "com.google.android.youtube" const val REVANCED_YOUTUBE_PACKAGE_NAME = "app.revanced.android.youtube" } \ No newline at end of file diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index b2fa4a885b..757a0fef80 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -1,5 +1,19 @@ + + + @string/revanced_custom_branding_theme_entry_1 + @string/revanced_custom_branding_theme_entry_2 + @string/revanced_custom_branding_theme_entry_3 + @string/revanced_custom_branding_theme_entry_4 + + + ORIGINAL + ROUNDED + MINIMAL + SCALED + + @string/revanced_language_DEFAULT diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 0bdd13f864..c3c0c2b2f8 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -19,6 +19,13 @@ Second \"item\" text" --> + + App branding + Original + Rounded + Minimal + Scaled + Checks failed Open official website diff --git a/patches/src/main/resources/custom-branding/minimal/music/drawable/ic_app_icons_themed_youtube_music.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_minimal.xml similarity index 100% rename from patches/src/main/resources/custom-branding/minimal/music/drawable/ic_app_icons_themed_youtube_music.xml rename to patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_minimal.xml diff --git a/patches/src/main/resources/custom-branding/rounded/music/drawable/ic_app_icons_themed_youtube_music.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_rounded.xml similarity index 100% rename from patches/src/main/resources/custom-branding/rounded/music/drawable/ic_app_icons_themed_youtube_music.xml rename to patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_rounded.xml diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_scaled.xml similarity index 100% rename from patches/src/main/resources/custom-branding/minimal/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml rename to patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_scaled.xml diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml b/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml deleted file mode 100644 index b5cd426b08..0000000000 --- a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_minimal.xml similarity index 100% rename from patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_minimal.xml diff --git a/patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_rounded.xml similarity index 100% rename from patches/src/main/resources/custom-branding/minimal/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_rounded.xml diff --git a/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_scaled.xml similarity index 100% rename from patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_scaled.xml diff --git a/patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_minimal.xml similarity index 100% rename from patches/src/main/resources/custom-branding/minimal/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_minimal.xml diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_rounded.xml similarity index 100% rename from patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_rounded.xml diff --git a/patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_scaled.xml similarity index 100% rename from patches/src/main/resources/custom-branding/scaled/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_foreground_color_108.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_scaled.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml new file mode 100644 index 0000000000..c0f6a6081f --- /dev/null +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml new file mode 100644 index 0000000000..29cbe71fe4 --- /dev/null +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml new file mode 100644 index 0000000000..5caccaa5d0 --- /dev/null +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml b/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml deleted file mode 100644 index 082937a484..0000000000 --- a/patches/src/main/resources/custom-branding/rounded/music/mipmap-anydpi/adaptiveproduct_youtube_music_2024_q4_background_color_108.xml +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml b/patches/src/main/resources/custom-branding/rounded/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml deleted file mode 100644 index fd103564bc..0000000000 --- a/patches/src/main/resources/custom-branding/rounded/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml deleted file mode 100644 index 082937a484..0000000000 --- a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml b/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml deleted file mode 100644 index 066471a04a..0000000000 --- a/patches/src/main/resources/custom-branding/rounded/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/patches/src/main/resources/custom-branding/scaled/music/drawable/ic_app_icons_themed_youtube_music.xml b/patches/src/main/resources/custom-branding/scaled/music/drawable/ic_app_icons_themed_youtube_music.xml deleted file mode 100644 index 72cd56f5a7..0000000000 --- a/patches/src/main/resources/custom-branding/scaled/music/drawable/ic_app_icons_themed_youtube_music.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/patches/src/main/resources/custom-branding/scaled/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml b/patches/src/main/resources/custom-branding/scaled/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml deleted file mode 100644 index 72cd56f5a7..0000000000 --- a/patches/src/main/resources/custom-branding/scaled/youtube/drawable/adaptive_monochrome_ic_youtube_launcher.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml deleted file mode 100644 index 6098eed222..0000000000 --- a/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_background_color_108.xml +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml b/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml deleted file mode 100644 index d52d856570..0000000000 --- a/patches/src/main/resources/custom-branding/scaled/youtube/mipmap-anydpi/adaptiveproduct_youtube_foreground_color_108.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - From 8bc82eee2a923beb91f4edc2a5012123f9af707e Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 16:36:55 +0400 Subject: [PATCH 24/67] cleanup --- .../layout/branding/CustomBrandingPatch.kt | 13 ---- .../branding/BaseCustomBrandingPatch.kt | 10 +-- .../layout/branding/CustomBrandingPatch.kt | 67 +------------------ 3 files changed, 4 insertions(+), 86 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 90dda8d698..fb211257f9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -56,9 +56,6 @@ private val disableSplashAnimationPatch = bytecodePatch { private const val APP_NAME = "YT Music ReVanced" -private const val ADAPTIVE_BACKGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_music_2024_q4_background_color_108" -private const val ADAPTIVE_FOREGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_music_2024_q4_foreground_color_108" - @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( defaultAppName = APP_NAME, @@ -68,16 +65,6 @@ val customBrandingPatch = baseCustomBrandingPatch( "Music" to "Music", "YT Music" to "YT Music", ), - patchResourceFolder = "custom-branding/minimal/music", - adaptiveAnyDpiFileNames = arrayOf( - "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", - "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml" - ), - adaptiveMipmapFileNames = arrayOf( - "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.png", - "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png" - ), - monochromeFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"), originalLauncherIconName = "ic_launcher_release", manifestAppLauncherValue = "@string/app_launcher_name", mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint, diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 23e9c094fc..59f35406f8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -45,10 +45,6 @@ private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/p internal fun baseCustomBrandingPatch( defaultAppName: String, appNameValues: Map, - patchResourceFolder: String, - adaptiveAnyDpiFileNames: Array, - adaptiveMipmapFileNames: Array, - monochromeFileNames: Array, originalLauncherIconName: String, manifestAppLauncherValue: String, mainActivityOnCreateFingerprint: Fingerprint, @@ -82,11 +78,11 @@ internal fun baseCustomBrandingPatch( ${formatResourceFileList(mipmapDirectories)} Each of these folders must contain the following files: - ${formatResourceFileList((adaptiveMipmapFileNames))} + TODO: {formatResourceFileList((adaptiveMipmapFileNames))} Optionally, the path can contain a 'drawable' folder with the monochrome icon files: - ${formatResourceFileList(monochromeFileNames)} - """.trimIndentMultiline(), + TODO: {formatResourceFileList(monochromeFileNames)} + """.trimIndentMultiline(), // TODO ) block() diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 209288b3c0..05ed7e5e1c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -1,19 +1,13 @@ package app.revanced.patches.youtube.layout.branding import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch -import app.revanced.patches.shared.layout.branding.mipmapDirectories import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.gms.Constants.YOUTUBE_MAIN_ACTIVITY_NAME import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint -import java.nio.file.Files private const val APP_NAME = "YouTube ReVanced" -private const val ADAPTIVE_BACKGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_background_color_108" -private const val ADAPTIVE_FOREGROUND_RESOURCE_NAME = "adaptiveproduct_youtube_foreground_color_108" -private const val ADAPTIVE_MONOCHROME_RESOURCE_NAME = "adaptive_monochrome_ic_youtube_launcher" - @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( defaultAppName = APP_NAME, @@ -23,18 +17,6 @@ val customBrandingPatch = baseCustomBrandingPatch( "YT" to "YT", "YouTube" to "YouTube", ), - patchResourceFolder = "custom-branding/minimal/youtube", // TODO: Change the icon style to a patch option or an in app setting. - adaptiveAnyDpiFileNames = arrayOf( - "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.xml", - "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.xml", - ), - adaptiveMipmapFileNames = arrayOf( - "$ADAPTIVE_BACKGROUND_RESOURCE_NAME.png", - "$ADAPTIVE_FOREGROUND_RESOURCE_NAME.png", - ), - monochromeFileNames = arrayOf( - "$ADAPTIVE_MONOCHROME_RESOURCE_NAME.xml" - ), originalLauncherIconName = "ic_launcher", manifestAppLauncherValue = "@string/application_name", mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint, @@ -54,51 +36,4 @@ val customBrandingPatch = baseCustomBrandingPatch( ) ) } -) { - val resourceDirectory = get("res") - - val newAdaptiveBackgroundResourceName = "adaptiveproduct_youtube_2024_q4_background_color_108" - val newAdaptiveForegroundResourceName = "adaptiveproduct_youtube_2024_q4_foreground_color_108" - val newAdaptiveMonochromeResourceName = "ringo2_adaptive_monochrome_ic_youtube_launcher" - - // Copy adaptive icon to secondary adaptive file. - arrayOf( - Triple( - "mipmap-anydpi", - ADAPTIVE_BACKGROUND_RESOURCE_NAME, - newAdaptiveBackgroundResourceName - ), - Triple( - "mipmap-anydpi", - ADAPTIVE_FOREGROUND_RESOURCE_NAME, - newAdaptiveForegroundResourceName - ), - Triple( - "drawable", - ADAPTIVE_MONOCHROME_RESOURCE_NAME, - newAdaptiveMonochromeResourceName - ) - ).forEach { (resourceType, old, new) -> - val oldFile = resourceDirectory.resolve("$resourceType/$old.xml") - if (oldFile.exists()) { - val newFile = resourceDirectory.resolve("$resourceType/$new.xml") - Files.write(newFile.toPath(), oldFile.readBytes()) - } - } - - // Copy mipmaps to secondary files. - mipmapDirectories.forEach { directory -> - val targetDirectory = resourceDirectory.resolve(directory) - - arrayOf( - ADAPTIVE_BACKGROUND_RESOURCE_NAME to newAdaptiveBackgroundResourceName, - ADAPTIVE_FOREGROUND_RESOURCE_NAME to newAdaptiveForegroundResourceName, - ).forEach { (old, new) -> - val oldFile = targetDirectory.resolve("$old.png") - if (oldFile.exists()) { - val newFile = targetDirectory.resolve("$new.png") - Files.write(newFile.toPath(), oldFile.readBytes()) - } - } - } -} +) From 91cc333aa6d56f6fef26dbd653cd1b5e7feecc16 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 18:46:00 +0400 Subject: [PATCH 25/67] add custom icon option --- .../shared/patches/CustomBrandingPatch.java | 39 +-- .../shared/settings/BaseSettings.java | 6 +- .../layout/branding/CustomBrandingPatch.kt | 2 +- .../branding/BaseCustomBrandingPatch.kt | 265 +++++++++++------- .../layout/branding/CustomBrandingPatch.kt | 2 +- .../branding/header/ChangeHeaderPatch.kt | 2 +- .../resources/addresources/values/arrays.xml | 26 +- .../resources/addresources/values/strings.xml | 11 +- ... revanced_adaptive_background_minimal.xml} | 0 ... revanced_adaptive_background_rounded.xml} | 0 ...> revanced_adaptive_background_scaled.xml} | 0 ... revanced_adaptive_foreground_minimal.xml} | 0 ... revanced_adaptive_foreground_rounded.xml} | 0 ...> revanced_adaptive_foreground_scaled.xml} | 0 .../revanced_launcher_custom.xml | 7 + .../revanced_launcher_minimal.xml | 4 +- .../revanced_launcher_rounded.xml | 4 +- .../revanced_launcher_scaled.xml | 4 +- 18 files changed, 207 insertions(+), 165 deletions(-) rename patches/src/main/resources/custom-branding/mipmap-anydpi/{revanced_adaptive_background_color_minimal.xml => revanced_adaptive_background_minimal.xml} (100%) rename patches/src/main/resources/custom-branding/mipmap-anydpi/{revanced_adaptive_background_color_rounded.xml => revanced_adaptive_background_rounded.xml} (100%) rename patches/src/main/resources/custom-branding/mipmap-anydpi/{revanced_adaptive_background_color_scaled.xml => revanced_adaptive_background_scaled.xml} (100%) rename patches/src/main/resources/custom-branding/mipmap-anydpi/{revanced_adaptive_foreground_color_minimal.xml => revanced_adaptive_foreground_minimal.xml} (100%) rename patches/src/main/resources/custom-branding/mipmap-anydpi/{revanced_adaptive_foreground_color_rounded.xml => revanced_adaptive_foreground_rounded.xml} (100%) rename patches/src/main/resources/custom-branding/mipmap-anydpi/{revanced_adaptive_foreground_color_scaled.xml => revanced_adaptive_foreground_scaled.xml} (100%) create mode 100644 patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_custom.xml diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index 8fdf36c975..37dfc6eb64 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -14,59 +14,32 @@ @SuppressWarnings("unused") public class CustomBrandingPatch { - public enum CustomBrandingTheme { + public enum BrandingTheme { ORIGINAL("revanced_original"), ROUNDED("revanced_rounded"), MINIMAL("revanced_minimal"), - SCALED("revanced_scaled"); + SCALED("revanced_scaled"), + CUSTOM("revanced_custom"); public final String themeAlias; - CustomBrandingTheme(String themeAlias) { + BrandingTheme(String themeAlias) { this.themeAlias = themeAlias; } } -// private static final String[] BRANDING_ALIAS_NAMES = new String[] { -// ".revanced_default", -// ".revanced_rounded", -// ".revanced_minimal", -// ".revanced_scaled" -// }; -// -// public static void setAppIcon(Context context, String aliasName) { -// PackageManager pm = context.getPackageManager(); -// String packageName = context.getPackageName(); -// -// // Disable all aliases first -// for (String alias : BRANDING_ALIAS_NAMES) { -// pm.setComponentEnabledSetting( -// new ComponentName(packageName, packageName + alias), -// PackageManager.COMPONENT_ENABLED_STATE_DISABLED, -// PackageManager.DONT_KILL_APP -// ); -// } -// -// // Enable the one you want -// pm.setComponentEnabledSetting( -// new ComponentName(packageName, packageName + "." + aliasName), -// PackageManager.COMPONENT_ENABLED_STATE_ENABLED, -// PackageManager.DONT_KILL_APP -// ); -// } - /** * Injection point. */ public static void setBrandingIcon() { try { Context context = Utils.getContext(); - CustomBrandingTheme selectedTheme = BaseSettings.CUSTOM_BRANDING_THEME.get(); + BrandingTheme selectedTheme = BaseSettings.CUSTOM_BRANDING_ICON.get(); PackageManager pm = context.getPackageManager(); String packageName = context.getPackageName(); - for (CustomBrandingTheme theme : CustomBrandingTheme.values()) { + for (BrandingTheme theme : BrandingTheme.values()) { final int enabledDisabledState = theme == selectedTheme ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java index 11d5a6fc7e..d48c328b4c 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java @@ -2,12 +2,10 @@ import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; -import static app.revanced.extension.shared.patches.CustomBrandingPatch.CustomBrandingTheme; +import static app.revanced.extension.shared.patches.CustomBrandingPatch.BrandingTheme; import static app.revanced.extension.shared.settings.Setting.parent; import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.AudioStreamLanguageOverrideAvailability; -import app.revanced.extension.shared.patches.CustomBrandingPatch; - /** * Settings shared across multiple apps. *

@@ -44,5 +42,5 @@ public class BaseSettings { public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false); - public static final EnumSetting CUSTOM_BRANDING_THEME = new EnumSetting<>("revanced_custom_branding_theme", CustomBrandingTheme.MINIMAL, true); + public static final EnumSetting CUSTOM_BRANDING_ICON = new EnumSetting<>("revanced_custom_branding_icon", BrandingTheme.MINIMAL, true); } diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index fb211257f9..3e2816cea1 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -65,8 +65,8 @@ val customBrandingPatch = baseCustomBrandingPatch( "Music" to "Music", "YT Music" to "YT Music", ), + originalAppName = "@string/app_launcher_name", originalLauncherIconName = "ic_launcher_release", - manifestAppLauncherValue = "@string/app_launcher_name", mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint, mainActivityName = MUSIC_MAIN_ACTIVITY_NAME, activityAliasNameWithIntentToRemove = MUSIC_MAIN_ACTIVITY_NAME, diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 59f35406f8..8248fb456c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -2,6 +2,7 @@ package app.revanced.patches.shared.layout.branding import app.revanced.patcher.Fingerprint import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.ResourcePatchBuilder import app.revanced.patcher.patch.ResourcePatchContext @@ -17,24 +18,41 @@ import app.revanced.util.Utils.trimIndentMultiline import app.revanced.util.copyResources import app.revanced.util.findElementByAttributeValueOrThrow import org.w3c.dom.Element - -private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path. +import java.io.File internal val mipmapDirectories = arrayOf( // Target app does not have ldpi icons. - "mdpi", - "hdpi", - "xhdpi", - "xxhdpi", - "xxxhdpi", -).map { "mipmap-$it" }.toTypedArray() - -private val brandingStyles = arrayOf( + "mipmap-mdpi", + "mipmap-hdpi", + "mipmap-xhdpi", + "mipmap-xxhdpi", + "mipmap-xxxhdpi" +) + +private val iconStyleNames = arrayOf( "minimal", // First declared is the default. "rounded", "scaled" ) +/** + * Custom icon resource/file name. + */ +private const val CUSTOM_USER_ICON_STYLE_NAME = "custom" + +private const val LAUNCHER_RESOURCE_NAME_PREFIX = "revanced_launcher_" +private const val LAUNCHER_ADAPTIVE_BACKGROUND_PREFIX = "revanced_adaptive_background_" +private const val LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX = "revanced_adaptive_foreground_" +private const val LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX = "revanced_adaptive_monochrome_" + +private val USER_CUSTOM_ADAPTIVE_FILE_NAMES = arrayOf( + "$LAUNCHER_ADAPTIVE_BACKGROUND_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.png", + "$LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.png" +) + +private const val USER_CUSTOM_MONOCHROME_NAME = + "$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml" + private fun formatResourceFileList(resourceNames: Array) = resourceNames.joinToString("\n") { "- $it" } private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/patches/CustomBrandingPatch;" @@ -45,8 +63,8 @@ private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/p internal fun baseCustomBrandingPatch( defaultAppName: String, appNameValues: Map, + originalAppName: String, originalLauncherIconName: String, - manifestAppLauncherValue: String, mainActivityOnCreateFingerprint: Fingerprint, mainActivityName: String, activityAliasNameWithIntentToRemove: String, @@ -63,26 +81,24 @@ internal fun baseCustomBrandingPatch( default = defaultAppName, values = appNameValues, title = "App name", - description = "The name of the app.", + description = "The name of the app." ) - val iconPath by stringOption( - key = "iconPath", - default = REVANCED_ICON, - values = mapOf("ReVanced Logo" to REVANCED_ICON), - title = "App icon", + val customIcon by stringOption( + key = "customIcon", + title = "Custom icon", description = """ - The icon to apply to the app. + Folder with images to use as a custom icon. - If a path to a folder is provided, the folder must contain one or more of the following folders: + The folder must contain one or more of the following folders, depending on the DPI of the device: ${formatResourceFileList(mipmapDirectories)} - - Each of these folders must contain the following files: - TODO: {formatResourceFileList((adaptiveMipmapFileNames))} - Optionally, the path can contain a 'drawable' folder with the monochrome icon files: - TODO: {formatResourceFileList(monochromeFileNames)} - """.trimIndentMultiline(), // TODO + Each of the folders must contain all of the following files: + ${USER_CUSTOM_ADAPTIVE_FILE_NAMES.joinToString("\n")} + + Optionally, the path can contain a 'drawable' folder with the monochrome icon file: + $USER_CUSTOM_MONOCHROME_NAME + """.trimIndentMultiline() ) block() @@ -93,7 +109,7 @@ internal fun baseCustomBrandingPatch( execute { mainActivityOnCreateFingerprint.method.addInstruction( 0, - "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->setBrandingIcon()V", + "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->setBrandingIcon()V" ) } } @@ -103,30 +119,118 @@ internal fun baseCustomBrandingPatch( addResources("shared", "layout.branding.baseCustomBrandingPatch") preferenceScreen.addPreferences( - ListPreference("revanced_custom_branding_theme") + if (customIcon == null) { + ListPreference("revanced_custom_branding_icon") + } else { + ListPreference( + key = "revanced_custom_branding_icon", + entriesKey = "revanced_custom_branding_icon_custom_entries", + entryValuesKey = "revanced_custom_branding_icon_custom_entry_values" + ) + } ) - brandingStyles.forEach { style -> + iconStyleNames.forEach { style -> copyResources( "custom-branding", ResourceGroup( "mipmap-anydpi", - "revanced_launcher_$style.xml", - "revanced_adaptive_background_color_$style.xml", - "revanced_adaptive_foreground_color_$style.xml", + "$LAUNCHER_RESOURCE_NAME_PREFIX$style.xml", + "$LAUNCHER_ADAPTIVE_BACKGROUND_PREFIX$style.xml", + "$LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX$style.xml", ), ResourceGroup( "drawable", - "revanced_adaptive_monochrome_$style.xml" + "$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$style.xml" ) ) } + if (customIcon != null) { + copyResources( + "custom-branding", + ResourceGroup( + "mipmap-anydpi", + "$LAUNCHER_RESOURCE_NAME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml", + ) + ) + + // Copy user provided files + val iconPathFile = File(customIcon!!.trim()) + + if (!iconPathFile.exists()) { + throw PatchException( + "The custom icon path cannot be found: " + iconPathFile.absolutePath + ) + } + + if (!iconPathFile.isDirectory) { + throw PatchException( + "The custom icon path must be a folder: " + iconPathFile.absolutePath + ) + } + + val sourceFolders = iconPathFile.listFiles { file -> file.isDirectory } + ?: throw PatchException("The custom icon path contains no subfolders: " + + iconPathFile.absolutePath) + + val resourceDirectory = get("res") + var copiedFiles = false + + // For each source folder, copy the files to the target resource directories. + sourceFolders.forEach { dpiSourceFolder -> + val targetDpiFolder = resourceDirectory.resolve(dpiSourceFolder.name) + if (!targetDpiFolder.exists()) return@forEach + + val customFiles = dpiSourceFolder.listFiles { file -> + file.isFile && file.name in USER_CUSTOM_ADAPTIVE_FILE_NAMES + }!! + + if (customFiles.size > 0 && customFiles.size != USER_CUSTOM_ADAPTIVE_FILE_NAMES.size) { + throw PatchException("Must include all required icon files " + + "but only found " + customFiles.map { it.name }) + } + + customFiles.forEach { imgSourceFile -> + val imgTargetFile = targetDpiFolder.resolve(imgSourceFile.name) + imgSourceFile.copyTo(imgTargetFile) + + copiedFiles = true + } + } + + // Copy monochrome if it provided. + val monochromeRelativePath = "drawable/$USER_CUSTOM_MONOCHROME_NAME" + val monochromeFile = iconPathFile.resolve(monochromeRelativePath) + if (monochromeFile.exists()) { + monochromeFile.copyTo(resourceDirectory.resolve(monochromeRelativePath)) + copiedFiles = true + + // Modify custom launcher.xml file to use custom monochrome image. + val customLauncherXmlFileName = LAUNCHER_RESOURCE_NAME_PREFIX + CUSTOM_USER_ICON_STYLE_NAME + document( + resourceDirectory.resolve( + "mipmap-anydpi/$customLauncherXmlFileName.xml" + ).absolutePath + ).use { document -> + (document.getElementsByTagName("monochrome").item(0) as Element).setAttribute( + "android:drawable", + "@drawable/$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME" + ) + } + } + + if (!copiedFiles) { + throw PatchException("Could not find any replacement images in " + + "patch option path: " + iconPathFile.absolutePath) + } + } + document("AndroidManifest.xml").use { document -> // Change the app name. document.childNodes.findElementByAttributeValueOrThrow( "android:label", - manifestAppLauncherValue + originalAppName ).nodeValue = appName!! // Remove the intent from the main activity since an alias will be used instead. @@ -146,14 +250,14 @@ internal fun baseCustomBrandingPatch( fun createAlias( name: String, - icon: String, + iconMipmapName: String, enabled: Boolean ): Element { val alias = document.createElement("activity-alias") alias.setAttribute("android:name", name) alias.setAttribute("android:enabled", enabled.toString()) alias.setAttribute("android:exported", "true") - alias.setAttribute("android:icon", icon) + alias.setAttribute("android:icon", "@mipmap/$iconMipmapName") alias.setAttribute("android:label", appName!!) alias.setAttribute("android:targetActivity", mainActivityName) @@ -170,19 +274,32 @@ internal fun baseCustomBrandingPatch( return alias } + val namePrefix = ".revanced_" + val iconResourcePrefix = "revanced_launcher_" + application.appendChild( createAlias( - ".revanced_original", - "@mipmap/$originalLauncherIconName", + namePrefix + "original", + originalLauncherIconName, false ) ) - brandingStyles.forEachIndexed { index, style -> + if (customIcon != null) { + application.appendChild( + createAlias( + namePrefix + CUSTOM_USER_ICON_STYLE_NAME, + iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, + false + ) + ) + } + + iconStyleNames.forEachIndexed { index, style -> application.appendChild( createAlias( - ".revanced_$style", - "@mipmap/revanced_launcher_$style", + namePrefix + style, + iconResourcePrefix + style, if (index == 0) { true } else { @@ -193,74 +310,6 @@ internal fun baseCustomBrandingPatch( } } - val iconPathTrimmed = iconPath!!.trim() - -// if (iconPathTrimmed == REVANCED_ICON) { - // Copy adaptive icons. -// // Copy monochrome icons. -// copyResources( -// patchResourceFolder, -// ResourceGroup("drawable", *monochromeFileNames) -// ) -// -// } else { -// val iconPathFile = File(iconPathTrimmed) -// if (!iconPathFile.exists()) { -// throw PatchException("The custom icon path cannot be found: " + -// iconPathFile.absolutePath -// ) -// } -// -// if (!iconPathFile.isDirectory) { -// throw PatchException("The custom icon path must be a folder: " -// + iconPathFile.absolutePath) -// } -// -// val resourceDirectory = get("res") -// var replacedResources = false -// -// // Replace mipmap icons. -// mipmapDirectories.map { directory -> -// ResourceGroup( -// directory, -// *adaptiveMipmapFileNames, -// ) -// }.forEach { groupResources -> -// val groupResourceDirectoryName = groupResources.resourceDirectoryName -// val fromDirectory = iconPathFile.resolve(groupResourceDirectoryName) -// val toDirectory = resourceDirectory.resolve(groupResourceDirectoryName) -// -// groupResources.resources.forEach { iconFileName -> -// val replacement = fromDirectory.resolve(iconFileName) -// if (replacement.exists()) { -// Files.write( -// toDirectory.resolve(iconFileName).toPath(), -// replacement.readBytes(), -// ) -// replacedResources = true -// } -// } -// } -// -// // Replace monochrome icons if provided. -// monochromeFileNames.forEach { iconFileName -> -// val resourceType = "drawable" -// val replacement = iconPathFile.resolve(resourceType).resolve(iconFileName) -// if (replacement.exists()) { -// Files.write( -// resourceDirectory.resolve(resourceType).resolve(iconFileName).toPath(), -// replacement.readBytes(), -// ) -// replacedResources = true -// } -// } -// -// if (!replacedResources) { -// throw PatchException("Could not find any replacement images in " + -// "patch option path: " + iconPathFile.absolutePath) -// } -// } - executeBlock() // Must be after the main code to rename the new icons for YouTube 19.34+. } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 05ed7e5e1c..4fa575fffa 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -17,8 +17,8 @@ val customBrandingPatch = baseCustomBrandingPatch( "YT" to "YT", "YouTube" to "YouTube", ), + originalAppName = "@string/application_name", originalLauncherIconName = "ic_launcher", - manifestAppLauncherValue = "@string/application_name", mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint, mainActivityName = YOUTUBE_MAIN_ACTIVITY_NAME, activityAliasNameWithIntentToRemove = "com.google.android.youtube.app.honeycomb.Shell\$HomeActivity", diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt index 9d42c5e79e..26a10aacf2 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt @@ -149,7 +149,7 @@ val changeHeaderPatch = resourcePatch( } val sourceFolders = customFile.listFiles { file -> file.isDirectory } - ?: throw PatchException("The custom icon path contains no folders: " + + ?: throw PatchException("The custom icon path contains no subfolders: " + customFile.absolutePath) val customResourceFileNames = getLightDarkFileNames(CUSTOM_HEADER_RESOURCE_NAME) diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index 757a0fef80..d6979f55ea 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -1,18 +1,32 @@ - - @string/revanced_custom_branding_theme_entry_1 - @string/revanced_custom_branding_theme_entry_2 - @string/revanced_custom_branding_theme_entry_3 - @string/revanced_custom_branding_theme_entry_4 + + @string/revanced_custom_branding_icon_entry_1 + @string/revanced_custom_branding_icon_entry_2 + @string/revanced_custom_branding_icon_entry_3 + @string/revanced_custom_branding_icon_entry_4 - + ORIGINAL ROUNDED MINIMAL SCALED + + @string/revanced_custom_branding_icon_entry_1 + @string/revanced_custom_branding_icon_entry_2 + @string/revanced_custom_branding_icon_entry_3 + @string/revanced_custom_branding_icon_entry_4 + @string/revanced_custom_branding_icon_entry_5 + + + ORIGINAL + ROUNDED + MINIMAL + SCALED + CUSTOM + diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index c3c0c2b2f8..5157f8ec3b 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -20,11 +20,12 @@ Second \"item\" text" - App branding - Original - Rounded - Minimal - Scaled + App icon + Original + Rounded + Minimal + Scaled + Custom Checks failed diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_minimal.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_minimal.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_minimal.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_minimal.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_rounded.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_rounded.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_rounded.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_rounded.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_scaled.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_scaled.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_color_scaled.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_scaled.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_minimal.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_minimal.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_rounded.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_rounded.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_scaled.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_color_scaled.xml rename to patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_custom.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_custom.xml new file mode 100644 index 0000000000..510b9704c2 --- /dev/null +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_custom.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml index c0f6a6081f..8e971a8aff 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml index 29cbe71fe4..f9a07b8a6f 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml index 5caccaa5d0..30ee9fbd42 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file From dd1dd91f8e468ccd837832bf619d68b49671850c Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Sun, 5 Oct 2025 18:36:43 +0300 Subject: [PATCH 26/67] use 50% scaling for rounded icon --- .../revanced_adaptive_foreground_rounded.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml index 066471a04a..0c64dc5d8b 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml @@ -4,10 +4,10 @@ android:height="108dp" android:viewportWidth="800" android:viewportHeight="800"> - + From b3963fe6e9d033e1da24e478a04cf4bcaf27f418 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 20:09:41 +0400 Subject: [PATCH 27/67] Add in app setting to change name. Change patch to default included. --- .../shared/patches/CustomBrandingPatch.java | 56 ++++++++--- .../shared/settings/BaseSettings.java | 1 + .../layout/branding/CustomBrandingPatch.kt | 17 ++-- .../branding/BaseCustomBrandingPatch.kt | 94 ++++++++++--------- .../shared/layout/branding/Fingerprints.kt | 11 +++ .../layout/branding/CustomBrandingPatch.kt | 17 ++-- .../resources/addresources/values/arrays.xml | 28 ++++++ .../resources/addresources/values/strings.xml | 2 + 8 files changed, 152 insertions(+), 74 deletions(-) create mode 100644 patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index 37dfc6eb64..d2758d6f9f 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -1,5 +1,8 @@ package app.revanced.extension.shared.patches; +import static app.revanced.extension.shared.StringRef.str; +import static app.revanced.extension.shared.Utils.getResourceStringArray; + import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; @@ -19,6 +22,7 @@ public enum BrandingTheme { ROUNDED("revanced_rounded"), MINIMAL("revanced_minimal"), SCALED("revanced_scaled"), + /** User provided custom icon */ CUSTOM("revanced_custom"); public final String themeAlias; @@ -28,27 +32,57 @@ public enum BrandingTheme { } } + /** + * Injection point. + */ + private static boolean customIconIncluded() { + // Modified during patching. + throw new IllegalStateException(); + } + /** * Injection point. */ public static void setBrandingIcon() { try { Context context = Utils.getContext(); - BrandingTheme selectedTheme = BaseSettings.CUSTOM_BRANDING_ICON.get(); - PackageManager pm = context.getPackageManager(); String packageName = context.getPackageName(); - for (BrandingTheme theme : BrandingTheme.values()) { - final int enabledDisabledState = theme == selectedTheme - ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED - : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + BrandingTheme selectedTheme = BaseSettings.CUSTOM_BRANDING_ICON.get(); + String nameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get().toString(); + String[] nameIndexValues = getResourceStringArray( + "revanced_custom_branding_name_entry_values"); + + final boolean customIconIncluded = customIconIncluded(); + boolean toastShown = false; + + for (String nameValue : nameIndexValues) { + for (BrandingTheme theme : BrandingTheme.values()) { + if (!customIconIncluded && theme == BrandingTheme.CUSTOM) { + continue; + } + + ComponentName component = new ComponentName(packageName, + packageName + '.' + theme.themeAlias + '_' + nameValue); + + // Check if the state is different, and show a toast if so. + // Changing the active alias causes the app to restart, + // which can be mistaken for a crash so show a toast to be clear. + final int currentState = pm.getComponentEnabledSetting(component); + final int desiredState = (theme == selectedTheme && nameValue.equals(nameIndex)) + ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED + : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + + if (currentState != desiredState) { + if (!toastShown) { + toastShown = true; + Utils.showToastShort(str("revanced_custom_branding_name_toast")); + } - pm.setComponentEnabledSetting( - new ComponentName(packageName, packageName + '.' + theme.themeAlias), - enabledDisabledState, //PackageManager.COMPONENT_ENABLED_STATE_DISABLED, - PackageManager.DONT_KILL_APP - ); + pm.setComponentEnabledSetting(component, desiredState, 0); + } + } } } catch (Exception ex) { Logger.printException(() -> "setBrandingIcon failure", ex); diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java index d48c328b4c..89c23c5b7c 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java @@ -43,4 +43,5 @@ public class BaseSettings { public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false); public static final EnumSetting CUSTOM_BRANDING_ICON = new EnumSetting<>("revanced_custom_branding_icon", BrandingTheme.MINIMAL, true); + public static final IntegerSetting CUSTOM_BRANDING_NAME = new IntegerSetting("revanced_custom_branding_name", 0, true); } diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 3e2816cea1..227ba8795a 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -54,18 +54,17 @@ private val disableSplashAnimationPatch = bytecodePatch { } } -private const val APP_NAME = "YT Music ReVanced" - @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( - defaultAppName = APP_NAME, - appNameValues = mapOf( - "YT Music ReVanced" to APP_NAME, - "Music ReVanced" to "Music ReVanced", - "Music" to "Music", - "YT Music" to "YT Music", + // App names are duplicated in arrays.xml + // Could refactor this so base custom patches adds the array data. + appNames = arrayOf( + "@string/app_launcher_name", + "YT Music ReVanced", + "Music ReVanced", + "Music", ), - originalAppName = "@string/app_launcher_name", + addResourcePatchName = "music", originalLauncherIconName = "ic_launcher_release", mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint, mainActivityName = MUSIC_MAIN_ACTIVITY_NAME, diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 8248fb456c..093831337c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -17,6 +17,7 @@ import app.revanced.util.ResourceGroup import app.revanced.util.Utils.trimIndentMultiline import app.revanced.util.copyResources import app.revanced.util.findElementByAttributeValueOrThrow +import app.revanced.util.returnEarly import org.w3c.dom.Element import java.io.File @@ -30,14 +31,12 @@ internal val mipmapDirectories = arrayOf( ) private val iconStyleNames = arrayOf( - "minimal", // First declared is the default. "rounded", + "minimal", "scaled" ) -/** - * Custom icon resource/file name. - */ +private const val ORIGINAL_USER_ICON_STYLE_NAME = "original" private const val CUSTOM_USER_ICON_STYLE_NAME = "custom" private const val LAUNCHER_RESOURCE_NAME_PREFIX = "revanced_launcher_" @@ -55,15 +54,14 @@ private const val USER_CUSTOM_MONOCHROME_NAME = private fun formatResourceFileList(resourceNames: Array) = resourceNames.joinToString("\n") { "- $it" } -private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/patches/CustomBrandingPatch;" +internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/patches/CustomBrandingPatch;" /** * Shared custom branding patch for YouTube and YT Music. */ internal fun baseCustomBrandingPatch( - defaultAppName: String, - appNameValues: Map, - originalAppName: String, + appNames: Array, + addResourcePatchName: String, originalLauncherIconName: String, mainActivityOnCreateFingerprint: Fingerprint, mainActivityName: String, @@ -73,15 +71,13 @@ internal fun baseCustomBrandingPatch( executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( name = "Custom branding", - description = "Applies a custom app name and icon. Defaults to \"$defaultAppName\" and the ReVanced logo.", - use = false, + description = "Adds options to change the app icon and app name." ) { - val appName by stringOption( - key = "appName", - default = defaultAppName, - values = appNameValues, + // TODO: make this work + val customName by stringOption( + key = "customName", title = "App name", - description = "The name of the app." + description = "Custom app name." ) val customIcon by stringOption( @@ -111,14 +107,18 @@ internal fun baseCustomBrandingPatch( 0, "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->setBrandingIcon()V" ) + + customIconIncludedFingerprint.method.returnEarly(customIcon != null) } } ) execute { addResources("shared", "layout.branding.baseCustomBrandingPatch") + addResources(addResourcePatchName, "layout.branding.baseCustomBrandingPatch") preferenceScreen.addPreferences( + ListPreference("revanced_custom_branding_name"), if (customIcon == null) { ListPreference("revanced_custom_branding_icon") } else { @@ -228,10 +228,10 @@ internal fun baseCustomBrandingPatch( document("AndroidManifest.xml").use { document -> // Change the app name. - document.childNodes.findElementByAttributeValueOrThrow( - "android:label", - originalAppName - ).nodeValue = appName!! +// val originalAppName = document.childNodes.findElementByAttributeValueOrThrow( +// "android:label", +// originalAppName +// ).nodeValue // Remove the intent from the main activity since an alias will be used instead. document.childNodes.findElementByAttributeValueOrThrow( @@ -244,21 +244,22 @@ internal fun baseCustomBrandingPatch( intent.parentNode.removeChild(intent) } - // Create launch aliases that can be programmatically selected in app. val application = document.getElementsByTagName("application") .item(0) as Element + // Create launch aliases that can be programmatically selected in app. fun createAlias( - name: String, + aliasName: String, iconMipmapName: String, + appName: String, enabled: Boolean ): Element { val alias = document.createElement("activity-alias") - alias.setAttribute("android:name", name) + alias.setAttribute("android:name", aliasName) alias.setAttribute("android:enabled", enabled.toString()) alias.setAttribute("android:exported", "true") alias.setAttribute("android:icon", "@mipmap/$iconMipmapName") - alias.setAttribute("android:label", appName!!) + alias.setAttribute("android:label", appName) alias.setAttribute("android:targetActivity", mainActivityName) val intentFilter = document.createElement("intent-filter") @@ -277,36 +278,39 @@ internal fun baseCustomBrandingPatch( val namePrefix = ".revanced_" val iconResourcePrefix = "revanced_launcher_" - application.appendChild( - createAlias( - namePrefix + "original", - originalLauncherIconName, - false - ) - ) + appNames.forEachIndexed { appNameIndex, appName -> + fun aliasName(name: String): String = namePrefix + name + '_' + appNameIndex - if (customIcon != null) { application.appendChild( createAlias( - namePrefix + CUSTOM_USER_ICON_STYLE_NAME, - iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, - false + aliasName(ORIGINAL_USER_ICON_STYLE_NAME), + originalLauncherIconName, + appName, + true ) ) - } - iconStyleNames.forEachIndexed { index, style -> - application.appendChild( - createAlias( - namePrefix + style, - iconResourcePrefix + style, - if (index == 0) { - true - } else { + if (customIcon != null) { + application.appendChild( + createAlias( + aliasName(CUSTOM_USER_ICON_STYLE_NAME), + iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, + appName, false - } + ) ) - ) + } + + iconStyleNames.forEachIndexed { index, style -> + application.appendChild( + createAlias( + aliasName(style), + iconResourcePrefix + style, + appName, + false, + ) + ) + } } } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt new file mode 100644 index 0000000000..e1b688c7db --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.shared.layout.branding + +import app.revanced.patcher.fingerprint + +internal val customIconIncludedFingerprint = fingerprint { + returns("Z") + parameters() + custom { method, classDef -> + method.name == "customIconIncluded" && classDef.type == EXTENSION_CLASS_DESCRIPTOR + } +} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 4fa575fffa..b9f023e082 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -6,18 +6,17 @@ import app.revanced.patches.youtube.misc.gms.Constants.YOUTUBE_MAIN_ACTIVITY_NAM import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint -private const val APP_NAME = "YouTube ReVanced" - @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( - defaultAppName = APP_NAME, - appNameValues = mapOf( - "YouTube ReVanced" to APP_NAME, - "YT ReVanced" to "YT ReVanced", - "YT" to "YT", - "YouTube" to "YouTube", + // App names are duplicated in arrays.xml + // Could refactor this so base custom patches adds the array data. + appNames = arrayOf( + "@string/application_name", + "YouTube ReVanced", + "YT ReVanced", + "YT" ), - originalAppName = "@string/application_name", + addResourcePatchName = "youtube", originalLauncherIconName = "ic_launcher", mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint, mainActivityName = YOUTUBE_MAIN_ACTIVITY_NAME, diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index d6979f55ea..be3256d6e9 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -151,6 +151,20 @@ + + + @string/app_launcher_name + YT Music ReVanced + Music ReVanced + Music + + + 0 + 1 + 2 + 3 + + Android VR @@ -163,6 +177,20 @@ + + + @string/application_name + YouTube ReVanced + YT ReVanced + YT + + + 0 + 1 + 2 + 3 + + Android VR 1.43 diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 5157f8ec3b..c362e13554 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -20,12 +20,14 @@ Second \"item\" text" + App name App icon Original Rounded Minimal Scaled Custom + Branding change successful Checks failed From d2823a2dfba4cf7b718f30731ec191b75ac9861e Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 20:14:30 +0400 Subject: [PATCH 28/67] Update default setting value --- .../extension/shared/settings/BaseSettings.java | 2 +- .../layout/branding/BaseCustomBrandingPatch.kt | 13 +++---------- .../main/resources/addresources/values/arrays.xml | 2 ++ 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java index 89c23c5b7c..84560e8a5d 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java @@ -42,6 +42,6 @@ public class BaseSettings { public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false); - public static final EnumSetting CUSTOM_BRANDING_ICON = new EnumSetting<>("revanced_custom_branding_icon", BrandingTheme.MINIMAL, true); + public static final EnumSetting CUSTOM_BRANDING_ICON = new EnumSetting<>("revanced_custom_branding_icon", BrandingTheme.ORIGINAL, true); public static final IntegerSetting CUSTOM_BRANDING_NAME = new IntegerSetting("revanced_custom_branding_name", 0, true); } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 093831337c..14886ed42c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -227,12 +227,6 @@ internal fun baseCustomBrandingPatch( } document("AndroidManifest.xml").use { document -> - // Change the app name. -// val originalAppName = document.childNodes.findElementByAttributeValueOrThrow( -// "android:label", -// originalAppName -// ).nodeValue - // Remove the intent from the main activity since an alias will be used instead. document.childNodes.findElementByAttributeValueOrThrow( "android:name", @@ -244,9 +238,6 @@ internal fun baseCustomBrandingPatch( intent.parentNode.removeChild(intent) } - val application = document.getElementsByTagName("application") - .item(0) as Element - // Create launch aliases that can be programmatically selected in app. fun createAlias( aliasName: String, @@ -277,6 +268,8 @@ internal fun baseCustomBrandingPatch( val namePrefix = ".revanced_" val iconResourcePrefix = "revanced_launcher_" + val application = document.getElementsByTagName("application") + .item(0) as Element appNames.forEachIndexed { appNameIndex, appName -> fun aliasName(name: String): String = namePrefix + name + '_' + appNameIndex @@ -314,6 +307,6 @@ internal fun baseCustomBrandingPatch( } } - executeBlock() // Must be after the main code to rename the new icons for YouTube 19.34+. + executeBlock() } } diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index be3256d6e9..ee5661b61e 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -153,6 +153,7 @@ + @string/app_launcher_name YT Music ReVanced Music ReVanced @@ -179,6 +180,7 @@ + @string/application_name YouTube ReVanced YT ReVanced From 1369220f4e84907265e6727d591f6aeb0649edad Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 21:03:57 +0400 Subject: [PATCH 29/67] string refactor --- .../shared/patches/CustomBrandingPatch.java | 2 +- .../shared/settings/BaseSettings.java | 2 +- .../layout/branding/CustomBrandingPatch.kt | 10 ++-------- .../branding/BaseCustomBrandingPatch.kt | 20 ++++++++++++------- .../layout/branding/CustomBrandingPatch.kt | 10 ++-------- .../resources/addresources/values/arrays.xml | 6 +++--- .../resources/addresources/values/strings.xml | 12 ++++++++++- 7 files changed, 33 insertions(+), 29 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index d2758d6f9f..d7d490fd81 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -80,7 +80,7 @@ public static void setBrandingIcon() { Utils.showToastShort(str("revanced_custom_branding_name_toast")); } - pm.setComponentEnabledSetting(component, desiredState, 0); + pm.setComponentEnabledSetting(component, desiredState, PackageManager.DONT_KILL_APP); } } } diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java index 84560e8a5d..3bc16e313c 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java @@ -43,5 +43,5 @@ public class BaseSettings { public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false); public static final EnumSetting CUSTOM_BRANDING_ICON = new EnumSetting<>("revanced_custom_branding_icon", BrandingTheme.ORIGINAL, true); - public static final IntegerSetting CUSTOM_BRANDING_NAME = new IntegerSetting("revanced_custom_branding_name", 0, true); + public static final IntegerSetting CUSTOM_BRANDING_NAME = new IntegerSetting("revanced_custom_branding_name", 1, true); } diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 227ba8795a..c938eea1a9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -56,16 +56,10 @@ private val disableSplashAnimationPatch = bytecodePatch { @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( - // App names are duplicated in arrays.xml - // Could refactor this so base custom patches adds the array data. - appNames = arrayOf( - "@string/app_launcher_name", - "YT Music ReVanced", - "Music ReVanced", - "Music", - ), addResourcePatchName = "music", originalLauncherIconName = "ic_launcher_release", + originalAppName = "@string/app_launcher_name", + numberOfPresetAppNames = 4, mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint, mainActivityName = MUSIC_MAIN_ACTIVITY_NAME, activityAliasNameWithIntentToRemove = MUSIC_MAIN_ACTIVITY_NAME, diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 14886ed42c..9cb7b322bf 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -60,9 +60,10 @@ internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/ * Shared custom branding patch for YouTube and YT Music. */ internal fun baseCustomBrandingPatch( - appNames: Array, addResourcePatchName: String, originalLauncherIconName: String, + originalAppName: String, + numberOfPresetAppNames: Int, mainActivityOnCreateFingerprint: Fingerprint, mainActivityName: String, activityAliasNameWithIntentToRemove: String, @@ -242,15 +243,20 @@ internal fun baseCustomBrandingPatch( fun createAlias( aliasName: String, iconMipmapName: String, - appName: String, + appNameIndex: Int, enabled: Boolean ): Element { + val label = if (appNameIndex == 1) { + originalAppName + } else { + "@string/revanced_custom_branding_name_entry_$appNameIndex" + } val alias = document.createElement("activity-alias") alias.setAttribute("android:name", aliasName) alias.setAttribute("android:enabled", enabled.toString()) alias.setAttribute("android:exported", "true") alias.setAttribute("android:icon", "@mipmap/$iconMipmapName") - alias.setAttribute("android:label", appName) + alias.setAttribute("android:label",label) alias.setAttribute("android:targetActivity", mainActivityName) val intentFilter = document.createElement("intent-filter") @@ -271,14 +277,14 @@ internal fun baseCustomBrandingPatch( val application = document.getElementsByTagName("application") .item(0) as Element - appNames.forEachIndexed { appNameIndex, appName -> + for (appNameIndex in 1 .. numberOfPresetAppNames) { fun aliasName(name: String): String = namePrefix + name + '_' + appNameIndex application.appendChild( createAlias( aliasName(ORIGINAL_USER_ICON_STYLE_NAME), originalLauncherIconName, - appName, + appNameIndex, true ) ) @@ -288,7 +294,7 @@ internal fun baseCustomBrandingPatch( createAlias( aliasName(CUSTOM_USER_ICON_STYLE_NAME), iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, - appName, + appNameIndex, false ) ) @@ -299,7 +305,7 @@ internal fun baseCustomBrandingPatch( createAlias( aliasName(style), iconResourcePrefix + style, - appName, + appNameIndex, false, ) ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index b9f023e082..1c6d032bbc 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -8,16 +8,10 @@ import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint @Suppress("unused") val customBrandingPatch = baseCustomBrandingPatch( - // App names are duplicated in arrays.xml - // Could refactor this so base custom patches adds the array data. - appNames = arrayOf( - "@string/application_name", - "YouTube ReVanced", - "YT ReVanced", - "YT" - ), addResourcePatchName = "youtube", originalLauncherIconName = "ic_launcher", + originalAppName = "@string/application_name", + numberOfPresetAppNames = 4, mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint, mainActivityName = YOUTUBE_MAIN_ACTIVITY_NAME, activityAliasNameWithIntentToRemove = "com.google.android.youtube.app.honeycomb.Shell\$HomeActivity", diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index ee5661b61e..0f1e97e329 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -18,7 +18,7 @@ @string/revanced_custom_branding_icon_entry_2 @string/revanced_custom_branding_icon_entry_3 @string/revanced_custom_branding_icon_entry_4 - @string/revanced_custom_branding_icon_entry_5 + @string/revanced_custom_branding_entry_custom ORIGINAL @@ -160,10 +160,10 @@ Music - 0 1 2 3 + 4 @@ -187,10 +187,10 @@ YT - 0 1 2 3 + 4 diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index c362e13554..534e326bc9 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -26,7 +26,7 @@ Second \"item\" text" Rounded Minimal Scaled - Custom + Custom Branding change successful @@ -1494,6 +1494,11 @@ Swipe to expand or close" The accent color of the seekbar Invalid seekbar color value + + YouTube ReVanced + YT ReVanced + YT + Header logo Default @@ -1711,6 +1716,11 @@ Limitations: + + YT Music ReVanced + Music ReVanced + Music + About Ads From be5eb6ba9f598a2272bc6824bc0294c607883b25 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 21:31:11 +0400 Subject: [PATCH 30/67] add app name option --- .../shared/patches/CustomBrandingPatch.java | 21 +++++++-- .../branding/BaseCustomBrandingPatch.kt | 32 ++++++++++---- .../resources/addresources/values/arrays.xml | 44 ++++++++++++++++--- .../resources/addresources/values/strings.xml | 3 +- 4 files changed, 81 insertions(+), 19 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index d7d490fd81..33c208ca80 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -56,6 +56,7 @@ public static void setBrandingIcon() { final boolean customIconIncluded = customIconIncluded(); boolean toastShown = false; + boolean foundSettingAlias = false; for (String nameValue : nameIndexValues) { for (BrandingTheme theme : BrandingTheme.values()) { @@ -63,16 +64,22 @@ public static void setBrandingIcon() { continue; } - ComponentName component = new ComponentName(packageName, - packageName + '.' + theme.themeAlias + '_' + nameValue); + String aliasClass = packageName + '.' + theme.themeAlias + '_' + nameValue; + ComponentName component = new ComponentName(packageName, aliasClass); // Check if the state is different, and show a toast if so. // Changing the active alias causes the app to restart, // which can be mistaken for a crash so show a toast to be clear. final int currentState = pm.getComponentEnabledSetting(component); - final int desiredState = (theme == selectedTheme && nameValue.equals(nameIndex)) + final boolean matchesSettingsAlias = theme == selectedTheme && nameValue.equals(nameIndex); + final int desiredState = matchesSettingsAlias ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + if (matchesSettingsAlias) { + foundSettingAlias = true; + } + + Logger.printDebug(() -> "aliasClass: " + aliasClass + " currentState: " + currentState + " desiredState: " + desiredState); if (currentState != desiredState) { if (!toastShown) { @@ -84,6 +91,14 @@ public static void setBrandingIcon() { } } } + + if (!foundSettingAlias) { + // Settings are for custom user icons but no user icons are present. + Utils.showToastLong("Resetting to default branding"); + BaseSettings.CUSTOM_BRANDING_ICON.resetToDefault(); + BaseSettings.CUSTOM_BRANDING_NAME.resetToDefault(); + setBrandingIcon(); + } } catch (Exception ex) { Logger.printException(() -> "setBrandingIcon failure", ex); } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 9cb7b322bf..ccbc099f08 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -74,7 +74,6 @@ internal fun baseCustomBrandingPatch( name = "Custom branding", description = "Adds options to change the app icon and app name." ) { - // TODO: make this work val customName by stringOption( key = "customName", title = "App name", @@ -118,16 +117,27 @@ internal fun baseCustomBrandingPatch( addResources("shared", "layout.branding.baseCustomBrandingPatch") addResources(addResourcePatchName, "layout.branding.baseCustomBrandingPatch") + val useCustomName = customName != null + val useCustomIcon = customIcon != null + preferenceScreen.addPreferences( - ListPreference("revanced_custom_branding_name"), - if (customIcon == null) { - ListPreference("revanced_custom_branding_icon") + if (useCustomName) { + ListPreference( + key = "revanced_custom_branding_name", + entriesKey = "revanced_custom_branding_name_custom_entries", + entryValuesKey = "revanced_custom_branding_name_custom_entry_values" + ) } else { + ListPreference("revanced_custom_branding_name") + }, + if (useCustomIcon) { ListPreference( key = "revanced_custom_branding_icon", entriesKey = "revanced_custom_branding_icon_custom_entries", entryValuesKey = "revanced_custom_branding_icon_custom_entry_values" ) + } else { + ListPreference("revanced_custom_branding_icon") } ) @@ -147,7 +157,7 @@ internal fun baseCustomBrandingPatch( ) } - if (customIcon != null) { + if (useCustomIcon) { copyResources( "custom-branding", ResourceGroup( @@ -246,6 +256,7 @@ internal fun baseCustomBrandingPatch( appNameIndex: Int, enabled: Boolean ): Element { + // Indexing starts at 1. val label = if (appNameIndex == 1) { originalAppName } else { @@ -277,7 +288,12 @@ internal fun baseCustomBrandingPatch( val application = document.getElementsByTagName("application") .item(0) as Element - for (appNameIndex in 1 .. numberOfPresetAppNames) { + var numberOfPresetAppNamesPlusCustom = numberOfPresetAppNames + if (useCustomName) { + numberOfPresetAppNamesPlusCustom++ + } + + for (appNameIndex in 1 .. numberOfPresetAppNamesPlusCustom) { fun aliasName(name: String): String = namePrefix + name + '_' + appNameIndex application.appendChild( @@ -285,11 +301,11 @@ internal fun baseCustomBrandingPatch( aliasName(ORIGINAL_USER_ICON_STYLE_NAME), originalLauncherIconName, appNameIndex, - true + appNameIndex == 1 ) ) - if (customIcon != null) { + if (useCustomIcon) { application.appendChild( createAlias( aliasName(CUSTOM_USER_ICON_STYLE_NAME), diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index 0f1e97e329..5e55b1abe5 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -18,7 +18,7 @@ @string/revanced_custom_branding_icon_entry_2 @string/revanced_custom_branding_icon_entry_3 @string/revanced_custom_branding_icon_entry_4 - @string/revanced_custom_branding_entry_custom + @string/revanced_custom_branding_icon_entry_5 ORIGINAL @@ -155,9 +155,9 @@ @string/app_launcher_name - YT Music ReVanced - Music ReVanced - Music + @string/revanced_custom_branding_name_entry_2 + @string/revanced_custom_branding_name_entry_3 + @string/revanced_custom_branding_name_entry_4 1 @@ -165,6 +165,21 @@ 3 4 + + + @string/app_launcher_name + @string/revanced_custom_branding_name_entry_2 + @string/revanced_custom_branding_name_entry_3 + @string/revanced_custom_branding_name_entry_4 + @string/revanced_custom_branding_name_entry_5 + + + 1 + 2 + 3 + 4 + 5 + @@ -182,9 +197,9 @@ @string/application_name - YouTube ReVanced - YT ReVanced - YT + @string/revanced_custom_branding_name_entry_2 + @string/revanced_custom_branding_name_entry_3 + @string/revanced_custom_branding_name_entry_4 1 @@ -192,6 +207,21 @@ 3 4 + + + @string/application_name + @string/revanced_custom_branding_name_entry_2 + @string/revanced_custom_branding_name_entry_3 + @string/revanced_custom_branding_name_entry_4 + @string/revanced_custom_branding_name_entry_5 + + + 1 + 2 + 3 + 4 + 5 + diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 534e326bc9..e44b7d586a 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -26,7 +26,8 @@ Second \"item\" text" Rounded Minimal Scaled - Custom + Custom + Custom Branding change successful From 13948b213f0c358a2d5f96aed36569f707f9c527 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 21:41:22 +0400 Subject: [PATCH 31/67] Fix app name option not selectable --- .../shared/patches/CustomBrandingPatch.java | 27 ++++++++++--------- .../branding/BaseCustomBrandingPatch.kt | 5 ++++ .../shared/layout/branding/Fingerprints.kt | 8 ++++++ 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index 33c208ca80..e59dcc5f28 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -1,7 +1,6 @@ package app.revanced.extension.shared.patches; import static app.revanced.extension.shared.StringRef.str; -import static app.revanced.extension.shared.Utils.getResourceStringArray; import android.content.ComponentName; import android.content.Context; @@ -22,7 +21,7 @@ public enum BrandingTheme { ROUNDED("revanced_rounded"), MINIMAL("revanced_minimal"), SCALED("revanced_scaled"), - /** User provided custom icon */ + /** User provided custom icon. */ CUSTOM("revanced_custom"); public final String themeAlias; @@ -40,6 +39,14 @@ private static boolean customIconIncluded() { throw new IllegalStateException(); } + /** + * Injection point. + */ + private static int numberOfCustomNames() { + // Modified during patching. + throw new IllegalStateException(); + } + /** * Injection point. */ @@ -49,29 +56,27 @@ public static void setBrandingIcon() { PackageManager pm = context.getPackageManager(); String packageName = context.getPackageName(); - BrandingTheme selectedTheme = BaseSettings.CUSTOM_BRANDING_ICON.get(); - String nameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get().toString(); - String[] nameIndexValues = getResourceStringArray( - "revanced_custom_branding_name_entry_values"); - + BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get(); + final int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); final boolean customIconIncluded = customIconIncluded(); boolean toastShown = false; boolean foundSettingAlias = false; - for (String nameValue : nameIndexValues) { + + for (int index = 1, maxIndex = numberOfCustomNames(); index <= maxIndex; index++) { for (BrandingTheme theme : BrandingTheme.values()) { if (!customIconIncluded && theme == BrandingTheme.CUSTOM) { continue; } - String aliasClass = packageName + '.' + theme.themeAlias + '_' + nameValue; + String aliasClass = packageName + '.' + theme.themeAlias + '_' + index; ComponentName component = new ComponentName(packageName, aliasClass); // Check if the state is different, and show a toast if so. // Changing the active alias causes the app to restart, // which can be mistaken for a crash so show a toast to be clear. final int currentState = pm.getComponentEnabledSetting(component); - final boolean matchesSettingsAlias = theme == selectedTheme && nameValue.equals(nameIndex); + final boolean matchesSettingsAlias = theme == selectedBranding && index == selectedNameIndex; final int desiredState = matchesSettingsAlias ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; @@ -79,8 +84,6 @@ public static void setBrandingIcon() { foundSettingAlias = true; } - Logger.printDebug(() -> "aliasClass: " + aliasClass + " currentState: " + currentState + " desiredState: " + desiredState); - if (currentState != desiredState) { if (!toastShown) { toastShown = true; diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index ccbc099f08..45ec615796 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -108,6 +108,11 @@ internal fun baseCustomBrandingPatch( "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->setBrandingIcon()V" ) + var totalNamePresets = numberOfPresetAppNames + if (customName != null) { + totalNamePresets++ + } + customNameIncludedFingerprint.method.returnEarly(totalNamePresets) customIconIncludedFingerprint.method.returnEarly(customIcon != null) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt index e1b688c7db..c58994859e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt @@ -8,4 +8,12 @@ internal val customIconIncludedFingerprint = fingerprint { custom { method, classDef -> method.name == "customIconIncluded" && classDef.type == EXTENSION_CLASS_DESCRIPTOR } +} + +internal val customNameIncludedFingerprint = fingerprint { + returns("I") + parameters() + custom { method, classDef -> + method.name == "numberOfCustomNames" && classDef.type == EXTENSION_CLASS_DESCRIPTOR + } } \ No newline at end of file From 745f187502c0cb2b12718c72ac7bf80c66779056 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 22:03:37 +0400 Subject: [PATCH 32/67] fix custom app name not showing in launcher --- .../branding/BaseCustomBrandingPatch.kt | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 45ec615796..bc82700e74 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -242,6 +242,7 @@ internal fun baseCustomBrandingPatch( } } + // Create launch aliases that can be programmatically selected in app. document("AndroidManifest.xml").use { document -> // Remove the intent from the main activity since an alias will be used instead. document.childNodes.findElementByAttributeValueOrThrow( @@ -254,15 +255,17 @@ internal fun baseCustomBrandingPatch( intent.parentNode.removeChild(intent) } - // Create launch aliases that can be programmatically selected in app. fun createAlias( aliasName: String, iconMipmapName: String, appNameIndex: Int, + useCustomName: Boolean, enabled: Boolean ): Element { - // Indexing starts at 1. - val label = if (appNameIndex == 1) { + val label = if (useCustomName) { + customName!! + } else if (appNameIndex == 1) { + // Indexing starts at 1. originalAppName } else { "@string/revanced_custom_branding_name_entry_$appNameIndex" @@ -299,35 +302,40 @@ internal fun baseCustomBrandingPatch( } for (appNameIndex in 1 .. numberOfPresetAppNamesPlusCustom) { + val useCustomNameLabel = (useCustomName && appNameIndex == numberOfPresetAppNamesPlusCustom) + fun aliasName(name: String): String = namePrefix + name + '_' + appNameIndex application.appendChild( createAlias( - aliasName(ORIGINAL_USER_ICON_STYLE_NAME), - originalLauncherIconName, - appNameIndex, - appNameIndex == 1 + aliasName = aliasName(ORIGINAL_USER_ICON_STYLE_NAME), + iconMipmapName = originalLauncherIconName, + appNameIndex = appNameIndex, + useCustomName = useCustomNameLabel, + enabled = appNameIndex == 1 ) ) - if (useCustomIcon) { + iconStyleNames.forEachIndexed { index, style -> application.appendChild( createAlias( - aliasName(CUSTOM_USER_ICON_STYLE_NAME), - iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, - appNameIndex, - false + aliasName = aliasName(style), + iconMipmapName = iconResourcePrefix + style, + appNameIndex = appNameIndex, + useCustomName = useCustomNameLabel, + enabled = false ) ) } - iconStyleNames.forEachIndexed { index, style -> + if (useCustomIcon) { application.appendChild( createAlias( - aliasName(style), - iconResourcePrefix + style, - appNameIndex, - false, + aliasName = aliasName(CUSTOM_USER_ICON_STYLE_NAME), + iconMipmapName = iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, + appNameIndex = appNameIndex, + useCustomName = useCustomNameLabel, + enabled = false ) ) } From 05b9bd3a75a8a740a08bec4ba4380b4341b49736 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 22:08:54 +0400 Subject: [PATCH 33/67] apply changes faster --- .../extension/shared/patches/CustomBrandingPatch.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index e59dcc5f28..7d4535358e 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -60,8 +60,7 @@ public static void setBrandingIcon() { final int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); final boolean customIconIncluded = customIconIncluded(); boolean toastShown = false; - boolean foundSettingAlias = false; - + boolean foundMatchingSettingAlias = false; for (int index = 1, maxIndex = numberOfCustomNames(); index <= maxIndex; index++) { for (BrandingTheme theme : BrandingTheme.values()) { @@ -81,7 +80,7 @@ public static void setBrandingIcon() { ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; if (matchesSettingsAlias) { - foundSettingAlias = true; + foundMatchingSettingAlias = true; } if (currentState != desiredState) { @@ -90,12 +89,12 @@ public static void setBrandingIcon() { Utils.showToastShort(str("revanced_custom_branding_name_toast")); } - pm.setComponentEnabledSetting(component, desiredState, PackageManager.DONT_KILL_APP); + pm.setComponentEnabledSetting(component, desiredState, 0); } } } - if (!foundSettingAlias) { + if (!foundMatchingSettingAlias) { // Settings are for custom user icons but no user icons are present. Utils.showToastLong("Resetting to default branding"); BaseSettings.CUSTOM_BRANDING_ICON.resetToDefault(); From a6f4d2730e1d3dd0dd059e27f2b639f8714ec1b4 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 22:21:53 +0400 Subject: [PATCH 34/67] fix app shutting down and not restarting --- .../shared/patches/CustomBrandingPatch.java | 40 +++++++++---------- .../resources/addresources/values/strings.xml | 3 +- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index 7d4535358e..ce8779d91e 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -1,7 +1,5 @@ package app.revanced.extension.shared.patches; -import static app.revanced.extension.shared.StringRef.str; - import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; @@ -59,8 +57,7 @@ public static void setBrandingIcon() { BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get(); final int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); final boolean customIconIncluded = customIconIncluded(); - boolean toastShown = false; - boolean foundMatchingSettingAlias = false; + ComponentName componentToEnable = null; for (int index = 1, maxIndex = numberOfCustomNames(); index <= maxIndex; index++) { for (BrandingTheme theme : BrandingTheme.values()) { @@ -71,32 +68,33 @@ public static void setBrandingIcon() { String aliasClass = packageName + '.' + theme.themeAlias + '_' + index; ComponentName component = new ComponentName(packageName, aliasClass); - // Check if the state is different, and show a toast if so. - // Changing the active alias causes the app to restart, - // which can be mistaken for a crash so show a toast to be clear. - final int currentState = pm.getComponentEnabledSetting(component); - final boolean matchesSettingsAlias = theme == selectedBranding && index == selectedNameIndex; - final int desiredState = matchesSettingsAlias - ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED - : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; - if (matchesSettingsAlias) { - foundMatchingSettingAlias = true; + final boolean aliasMatchesSettings = theme == selectedBranding && index == selectedNameIndex; + if (aliasMatchesSettings) { + componentToEnable = component; } + final int desiredState = aliasMatchesSettings + ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED + : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + final int currentState = pm.getComponentEnabledSetting(component); if (currentState != desiredState) { - if (!toastShown) { - toastShown = true; - Utils.showToastShort(str("revanced_custom_branding_name_toast")); + // First turn off all aliases, then turn on what is needed. + // This is required otherwise the app can shutdown instead of restarting + // leaving the aliases in a corrupted and conflicting state. + if (desiredState == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { + // Don't allow the app to be killed. + pm.setComponentEnabledSetting(component, desiredState, PackageManager.DONT_KILL_APP); } - - pm.setComponentEnabledSetting(component, desiredState, 0); } } } - if (!foundMatchingSettingAlias) { + if (componentToEnable != null) { + pm.setComponentEnabledSetting(componentToEnable, + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0); + } else { // Settings are for custom user icons but no user icons are present. - Utils.showToastLong("Resetting to default branding"); + Utils.showToastLong("Resetting to default custom branding"); BaseSettings.CUSTOM_BRANDING_ICON.resetToDefault(); BaseSettings.CUSTOM_BRANDING_NAME.resetToDefault(); setBrandingIcon(); diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index e44b7d586a..bdfec632ed 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -21,14 +21,13 @@ Second \"item\" text" App name + Custom App icon Original Rounded Minimal Scaled Custom - Custom - Branding change successful Checks failed From 9405f3d6c4ce97c146ea5fe1d66cb28c21be0cd9 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 5 Oct 2025 22:27:44 +0400 Subject: [PATCH 35/67] refactor --- .../patches/shared/layout/branding/BaseCustomBrandingPatch.kt | 2 +- patches/src/main/resources/addresources/values/arrays.xml | 4 ++-- patches/src/main/resources/addresources/values/strings.xml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index bc82700e74..37ed39c2b3 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -120,7 +120,7 @@ internal fun baseCustomBrandingPatch( execute { addResources("shared", "layout.branding.baseCustomBrandingPatch") - addResources(addResourcePatchName, "layout.branding.baseCustomBrandingPatch") + addResources(addResourcePatchName, "layout.branding.customBrandingPatch") val useCustomName = customName != null val useCustomIcon = customIcon != null diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index 5e55b1abe5..f532b8dd22 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -151,7 +151,7 @@ - + @string/app_launcher_name @@ -193,7 +193,7 @@ - + @string/application_name diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index bdfec632ed..552e46e757 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -1494,7 +1494,7 @@ Swipe to expand or close" The accent color of the seekbar Invalid seekbar color value - + YouTube ReVanced YT ReVanced YT @@ -1716,7 +1716,7 @@ Limitations: - + YT Music ReVanced Music ReVanced Music From ab163584fcb3012c23e6da102baf612c2a9ce4d8 Mon Sep 17 00:00:00 2001 From: MarcaD <152095496+MarcaDian@users.noreply.github.com> Date: Sun, 5 Oct 2025 21:48:53 +0300 Subject: [PATCH 36/67] Update revanced_adaptive_monochrome_rounded.xml --- .../drawable/revanced_adaptive_monochrome_rounded.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_rounded.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_rounded.xml index fd103564bc..bcb70d260c 100644 --- a/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_rounded.xml +++ b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_rounded.xml @@ -3,10 +3,10 @@ android:height="108dp" android:viewportWidth="800" android:viewportHeight="800"> - + Date: Mon, 6 Oct 2025 00:50:55 +0400 Subject: [PATCH 37/67] fix app won't startup if bad settings name index is imported --- .../shared/patches/CustomBrandingPatch.java | 82 +++++++++++++------ 1 file changed, 57 insertions(+), 25 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index ce8779d91e..23d781f1fd 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -4,6 +4,9 @@ import android.content.Context; import android.content.pm.PackageManager; +import java.util.ArrayList; +import java.util.List; + import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; import app.revanced.extension.shared.settings.BaseSettings; @@ -15,6 +18,7 @@ public class CustomBrandingPatch { public enum BrandingTheme { + // Original must be first. ORIGINAL("revanced_original"), ROUNDED("revanced_rounded"), MINIMAL("revanced_minimal"), @@ -45,6 +49,11 @@ private static int numberOfCustomNames() { throw new IllegalStateException(); } + private static ComponentName createComponentName(BrandingTheme theme, String packageName, int index) { + return new ComponentName(packageName, + packageName + '.' + theme.themeAlias + '_' + index); + } + /** * Injection point. */ @@ -54,51 +63,74 @@ public static void setBrandingIcon() { PackageManager pm = context.getPackageManager(); String packageName = context.getPackageName(); + final int numberOfCustomNames = numberOfCustomNames(); BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get(); - final int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); + int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); + if (selectedNameIndex <= 0 || selectedNameIndex > numberOfCustomNames) { + // User imported a bad app name index value. Either the imported data + // was corrupted, or they previously had custom name enabled and the app + // no longer has a custom name specified. + Utils.showToastLong("Custom branding reset"); + selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.resetToDefault(); + } + final boolean customIconIncluded = customIconIncluded(); ComponentName componentToEnable = null; + ComponentName defaultComponent = null; + List componentsToDisable = new ArrayList<>(); - for (int index = 1, maxIndex = numberOfCustomNames(); index <= maxIndex; index++) { - for (BrandingTheme theme : BrandingTheme.values()) { + for (BrandingTheme theme : BrandingTheme.values()) { + // App name indices starts at 1. + for (int index = 1; index <= numberOfCustomNames; index++) { if (!customIconIncluded && theme == BrandingTheme.CUSTOM) { continue; } String aliasClass = packageName + '.' + theme.themeAlias + '_' + index; ComponentName component = new ComponentName(packageName, aliasClass); - - final boolean aliasMatchesSettings = theme == selectedBranding && index == selectedNameIndex; - if (aliasMatchesSettings) { - componentToEnable = component; + if (defaultComponent == null) { + // Default is always the first alias. + defaultComponent = component; } - final int desiredState = aliasMatchesSettings - ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED - : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; - final int currentState = pm.getComponentEnabledSetting(component); - if (currentState != desiredState) { - // First turn off all aliases, then turn on what is needed. - // This is required otherwise the app can shutdown instead of restarting - // leaving the aliases in a corrupted and conflicting state. - if (desiredState == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { - // Don't allow the app to be killed. - pm.setComponentEnabledSetting(component, desiredState, PackageManager.DONT_KILL_APP); + if (index == selectedNameIndex && theme == selectedBranding) { + if (componentToEnable != null) { + // Should never happen. + ComponentName componentToEnableFinal = componentToEnable; + Logger.printException(() -> "Found duplicate alias: " + + componentToEnableFinal.getClassName()); + componentsToDisable.add(componentToEnable); } + componentToEnable = component; + } else { + componentsToDisable.add(component); } } } - if (componentToEnable != null) { - pm.setComponentEnabledSetting(componentToEnable, - PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0); - } else { - // Settings are for custom user icons but no user icons are present. - Utils.showToastLong("Resetting to default custom branding"); + if (componentToEnable == null) { + // Should never be reached, because the branding icon enum + // resets itself the saved enum type is invalid or no longer exists, + // and a bad name index is already handled above. + Logger.printException(() -> "Could not find alias to enable"); BaseSettings.CUSTOM_BRANDING_ICON.resetToDefault(); BaseSettings.CUSTOM_BRANDING_NAME.resetToDefault(); - setBrandingIcon(); + + componentToEnable = defaultComponent; + componentsToDisable.remove(defaultComponent); } + + for (ComponentName disable : componentsToDisable) { + // Use info logging because if the aliases state become corrupt the app cannot launch. + Logger.printInfo(() -> "Disabling: " + disable.getClassName()); + pm.setComponentEnabledSetting(disable, + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); + } + + ComponentName componentToEnableFinal = componentToEnable; + Logger.printInfo(() -> "Enabling: " + componentToEnableFinal.getClassName()); + pm.setComponentEnabledSetting(componentToEnable, + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0); } catch (Exception ex) { Logger.printException(() -> "setBrandingIcon failure", ex); } From 04cd4b3741f1a98de424a26e17b072bfa7e8982e Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 02:40:27 +0400 Subject: [PATCH 38/67] fix broken app if custom icon/name is in use and the app is repatched without a custom icon/name. Also provides a template to modify icons. --- .../shared/patches/CustomBrandingPatch.java | 45 +++++++-- .../branding/BaseCustomBrandingPatch.kt | 87 ++++++++++-------- .../shared/layout/branding/Fingerprints.kt | 18 +++- .../revanced_adaptive_monochrome_custom.xml | 17 ++++ .../revanced_launcher_custom.xml | 2 +- .../revanced_adaptive_background_custom.png | Bin 0 -> 98 bytes .../revanced_adaptive_foreground_custom.png | Bin 0 -> 1279 bytes .../revanced_adaptive_background_custom.png | Bin 0 -> 92 bytes .../revanced_adaptive_foreground_custom.png | Bin 0 -> 857 bytes .../revanced_adaptive_background_custom.png | Bin 0 -> 100 bytes .../revanced_adaptive_foreground_custom.png | Bin 0 -> 1747 bytes .../revanced_adaptive_background_custom.png | Bin 0 -> 108 bytes .../revanced_adaptive_foreground_custom.png | Bin 0 -> 2735 bytes .../revanced_adaptive_background_custom.png | Bin 0 -> 117 bytes .../revanced_adaptive_foreground_custom.png | Bin 0 -> 3859 bytes 15 files changed, 116 insertions(+), 53 deletions(-) create mode 100644 patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_custom.xml create mode 100644 patches/src/main/resources/custom-branding/mipmap-hdpi/revanced_adaptive_background_custom.png create mode 100644 patches/src/main/resources/custom-branding/mipmap-hdpi/revanced_adaptive_foreground_custom.png create mode 100644 patches/src/main/resources/custom-branding/mipmap-mdpi/revanced_adaptive_background_custom.png create mode 100644 patches/src/main/resources/custom-branding/mipmap-mdpi/revanced_adaptive_foreground_custom.png create mode 100644 patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_background_custom.png create mode 100644 patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_foreground_custom.png create mode 100644 patches/src/main/resources/custom-branding/mipmap-xxhdpi/revanced_adaptive_background_custom.png create mode 100644 patches/src/main/resources/custom-branding/mipmap-xxhdpi/revanced_adaptive_foreground_custom.png create mode 100644 patches/src/main/resources/custom-branding/mipmap-xxxhdpi/revanced_adaptive_background_custom.png create mode 100644 patches/src/main/resources/custom-branding/mipmap-xxxhdpi/revanced_adaptive_foreground_custom.png diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index 23d781f1fd..69ede09d4f 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -17,6 +17,15 @@ @SuppressWarnings("unused") public class CustomBrandingPatch { + // Important: In the future, additional branding themes can be added but all existing and prior + // themes cannot be removed or renamed. + // + // This is because if a user has a branding theme selected, then only that launch alias is enabled. + // If a future update removes or renames that alias, then after updating the app is effectively + // broken and it cannot be opened and not even clearing the app data will fix it. + // In that situation the only fix is to completely uninstall and reinstall again. + // + // The most that can be done is to hide a theme from the UI and keep the alias with dummy data. public enum BrandingTheme { // Original must be first. ORIGINAL("revanced_original"), @@ -43,12 +52,24 @@ private static boolean customIconIncluded() { /** * Injection point. + * + * The number of app names availabel in the settings UI. */ private static int numberOfCustomNames() { // Modified during patching. throw new IllegalStateException(); } + /** + * Injection point. + * + * The total number of app name aliases, including dummy aliases. + */ + private static int numberOfCustomNamesIncludingDummyAliases() { + // Modified during patching. + throw new IllegalStateException(); + } + private static ComponentName createComponentName(BrandingTheme theme, String packageName, int index) { return new ComponentName(packageName, packageName + '.' + theme.themeAlias + '_' + index); @@ -63,29 +84,35 @@ public static void setBrandingIcon() { PackageManager pm = context.getPackageManager(); String packageName = context.getPackageName(); - final int numberOfCustomNames = numberOfCustomNames(); + String resetToastMessage = "Custom branding reset"; + BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get(); + //noinspection ConstantConditions + if (selectedBranding == BrandingTheme.CUSTOM && !customIconIncluded()) { + Utils.showToastLong(resetToastMessage); + selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.resetToDefault(); + } + + final int numberOfCustomNames = numberOfCustomNames(); int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); if (selectedNameIndex <= 0 || selectedNameIndex > numberOfCustomNames) { // User imported a bad app name index value. Either the imported data // was corrupted, or they previously had custom name enabled and the app // no longer has a custom name specified. - Utils.showToastLong("Custom branding reset"); + Utils.showToastLong(resetToastMessage); selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.resetToDefault(); } - final boolean customIconIncluded = customIconIncluded(); ComponentName componentToEnable = null; ComponentName defaultComponent = null; List componentsToDisable = new ArrayList<>(); for (BrandingTheme theme : BrandingTheme.values()) { - // App name indices starts at 1. - for (int index = 1; index <= numberOfCustomNames; index++) { - if (!customIconIncluded && theme == BrandingTheme.CUSTOM) { - continue; - } + // Must always update all aliases including custom alias (last index). + final int numberOfNamesIncludingDummies = numberOfCustomNamesIncludingDummyAliases(); + // App name indices starts at 1. + for (int index = 1; index <= numberOfNamesIncludingDummies; index++) { String aliasClass = packageName + '.' + theme.themeAlias + '_' + index; ComponentName component = new ComponentName(packageName, aliasClass); if (defaultComponent == null) { @@ -110,7 +137,7 @@ public static void setBrandingIcon() { if (componentToEnable == null) { // Should never be reached, because the branding icon enum - // resets itself the saved enum type is invalid or no longer exists, + // resets itself if the saved enum type is invalid or no longer exists, // and a bad name index is already handled above. Logger.printException(() -> "Could not find alias to enable"); BaseSettings.CUSTOM_BRANDING_ICON.resetToDefault(); diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 37ed39c2b3..36de535857 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -112,7 +112,9 @@ internal fun baseCustomBrandingPatch( if (customName != null) { totalNamePresets++ } - customNameIncludedFingerprint.method.returnEarly(totalNamePresets) + + customNumberOfNamesIncludingDummyAliasesFingerprint.method.returnEarly(numberOfPresetAppNames + 1) + customNumberOfNamesFingerprint.method.returnEarly(totalNamePresets) customIconIncludedFingerprint.method.returnEarly(customIcon != null) } } @@ -162,15 +164,30 @@ internal fun baseCustomBrandingPatch( ) } - if (useCustomIcon) { + // Copy template user icon, because the aliases must be added even if no user icon is provided. + copyResources( + "custom-branding", + ResourceGroup( + "mipmap-anydpi", + "$LAUNCHER_RESOURCE_NAME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml", + ), + ResourceGroup( + "drawable", + "$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml", + ) + ) + mipmapDirectories.forEach { dpi -> copyResources( "custom-branding", ResourceGroup( - "mipmap-anydpi", - "$LAUNCHER_RESOURCE_NAME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml", + dpi, + "$LAUNCHER_ADAPTIVE_BACKGROUND_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.png", + "$LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.png", ) ) + } + if (useCustomIcon) { // Copy user provided files val iconPathFile = File(customIcon!!.trim()) @@ -209,7 +226,7 @@ internal fun baseCustomBrandingPatch( customFiles.forEach { imgSourceFile -> val imgTargetFile = targetDpiFolder.resolve(imgSourceFile.name) - imgSourceFile.copyTo(imgTargetFile) + imgSourceFile.copyTo(target = imgTargetFile, overwrite = true) copiedFiles = true } @@ -219,21 +236,11 @@ internal fun baseCustomBrandingPatch( val monochromeRelativePath = "drawable/$USER_CUSTOM_MONOCHROME_NAME" val monochromeFile = iconPathFile.resolve(monochromeRelativePath) if (monochromeFile.exists()) { - monochromeFile.copyTo(resourceDirectory.resolve(monochromeRelativePath)) + monochromeFile.copyTo( + target = resourceDirectory.resolve(monochromeRelativePath), + overwrite = true + ) copiedFiles = true - - // Modify custom launcher.xml file to use custom monochrome image. - val customLauncherXmlFileName = LAUNCHER_RESOURCE_NAME_PREFIX + CUSTOM_USER_ICON_STYLE_NAME - document( - resourceDirectory.resolve( - "mipmap-anydpi/$customLauncherXmlFileName.xml" - ).absolutePath - ).use { document -> - (document.getElementsByTagName("monochrome").item(0) as Element).setAttribute( - "android:drawable", - "@drawable/$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME" - ) - } } if (!copiedFiles) { @@ -263,7 +270,11 @@ internal fun baseCustomBrandingPatch( enabled: Boolean ): Element { val label = if (useCustomName) { - customName!! + if (customName == null) { + "Custom" // Dummy text, and normally cannot be seen. + } else { + customName!! + } } else if (appNameIndex == 1) { // Indexing starts at 1. originalAppName @@ -296,23 +307,19 @@ internal fun baseCustomBrandingPatch( val application = document.getElementsByTagName("application") .item(0) as Element - var numberOfPresetAppNamesPlusCustom = numberOfPresetAppNames - if (useCustomName) { - numberOfPresetAppNamesPlusCustom++ - } - + val numberOfPresetAppNamesPlusCustom = numberOfPresetAppNames + 1 for (appNameIndex in 1 .. numberOfPresetAppNamesPlusCustom) { - val useCustomNameLabel = (useCustomName && appNameIndex == numberOfPresetAppNamesPlusCustom) - fun aliasName(name: String): String = namePrefix + name + '_' + appNameIndex + val useCustomNameLabel = (useCustomName && appNameIndex == numberOfPresetAppNamesPlusCustom) + application.appendChild( createAlias( aliasName = aliasName(ORIGINAL_USER_ICON_STYLE_NAME), iconMipmapName = originalLauncherIconName, appNameIndex = appNameIndex, useCustomName = useCustomNameLabel, - enabled = appNameIndex == 1 + enabled = (appNameIndex == 1) ) ) @@ -328,17 +335,21 @@ internal fun baseCustomBrandingPatch( ) } - if (useCustomIcon) { - application.appendChild( - createAlias( - aliasName = aliasName(CUSTOM_USER_ICON_STYLE_NAME), - iconMipmapName = iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, - appNameIndex = appNameIndex, - useCustomName = useCustomNameLabel, - enabled = false - ) + // Must add all aliases even if the user did not provide option values. + // This is because if the user installs with an option, then repatches without the option, + // the alias must still exist because if it was previously enabled and then it's removed, + // the app will become broken and cannot launch. Even if the app data is cleared, + // it still cannot be launched. The only fix is to uninstall the app. + // To prevent this, always include all prior aliases and use dummy data if needed. + application.appendChild( + createAlias( + aliasName = aliasName(CUSTOM_USER_ICON_STYLE_NAME), + iconMipmapName = iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, + appNameIndex = appNameIndex, + useCustomName = useCustomNameLabel, + enabled = false ) - } + ) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt index c58994859e..a0ac13a9d9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt @@ -2,18 +2,26 @@ package app.revanced.patches.shared.layout.branding import app.revanced.patcher.fingerprint -internal val customIconIncludedFingerprint = fingerprint { - returns("Z") +internal val customNumberOfNamesIncludingDummyAliasesFingerprint = fingerprint { + returns("I") parameters() custom { method, classDef -> - method.name == "customIconIncluded" && classDef.type == EXTENSION_CLASS_DESCRIPTOR + method.name == "numberOfCustomNamesIncludingDummyAliases" && classDef.type == EXTENSION_CLASS_DESCRIPTOR } } -internal val customNameIncludedFingerprint = fingerprint { +internal val customNumberOfNamesFingerprint = fingerprint { returns("I") parameters() custom { method, classDef -> method.name == "numberOfCustomNames" && classDef.type == EXTENSION_CLASS_DESCRIPTOR } -} \ No newline at end of file +} + +internal val customIconIncludedFingerprint = fingerprint { + returns("Z") + parameters() + custom { method, classDef -> + method.name == "customIconIncluded" && classDef.type == EXTENSION_CLASS_DESCRIPTOR + } +} diff --git a/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_custom.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_custom.xml new file mode 100644 index 0000000000..72cd56f5a7 --- /dev/null +++ b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_custom.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_custom.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_custom.xml index 510b9704c2..3746c061df 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_custom.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_custom.xml @@ -3,5 +3,5 @@ xmlns:android="http://schemas.android.com/apk/res/android"> - + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-hdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-hdpi/revanced_adaptive_background_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..80c1e2c2bd57fd855597dde7559ec40e0e317b7d GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iu>8A$%HX^8+*%mF?juF}%dQ=*D(fm|t17srqa s#C-z|b&5I$w&YnJGQWT|-XEgRPFgpx5K^e!ZUW_xtx3e^(666lsqH0Khbw zPGPQO-Rc-2R=n#!i~|6yQAJZCzRd-7ou^iA03uV4Y3db}rhN(NVrZTo9=_xr|CaIjjkxkXPXs2N(y*J5vYq6G6Jxq2O>ar@3LEeCwz05h@nI6(l6{tf)6KmP8z#V^PBV>t@ z7ePdQel%HSGxKqn7a3}tY=v6TGs)1!LDTbu3T9Vq;b7q=teW&xM=7;N#a^R(b$Sh- zkNe|j+dyNS{LIyUV4hn8o3TE-z8i6mbd4TX6sJ8_wQkgt>w~PwE=H7WV=-VK@cyDB z59;9b1j8~N5Cti0jm;4~fKJ)!+~bYCUuLdorZsia`l;xU@!N|X`AT>XO!u(Wp$GT! zAy73~=mrL3ocD<1=B~OoprdYkj~ILu+tCRo8EzSlBla#;xh=oyYJX4TTkd;NX&d3H ze%7EA+S(QaL=sT?NG7@jTV3>l`4l?hNkX5%6=0uvb(DSyb?*I!Yc7B z--AChC$AH6ffsmz=?n5++z1JyX-2o35R5gGXi@S%+)YE?p`RZ=FS*goQMKP;kGOT% zv8}p!M3IF;T6dF~%)HTT8CydETcTLIcI3jDU}}aFTyhbp+8!%!U_Wmt?xQ+7d9jW^ z5kLCKMmcu3n$dk!zylH9voy^0x?%Z{GHb~7klqa`A}eZ@!c0il5y1|DKAH%-j zGRX-4S8ti0F*pV|#_He5a)}PuZ_+I|Xyg;$$3fqo~sSOM=7w7UXV&ya~BxQWDsqxj1Y)@!kPsZ0{!(v+ zvr_mPxC<+*Sjur`VV8KEWRwv&_XrTh5WoWxJ000fSv z|7;azS6>@UA;t5x<=_j;Hfhr1VPFjQxHC}Qx3qLJKV#!+`w)7x$L&LI`Fy2`R^Kl8 WgsXm2N6mv)m*{OV6iMX%qW=Ny;~}#E literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/mipmap-mdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-mdpi/revanced_adaptive_background_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..f7c252a26fc0c01301161f02e7e222b5b35386a5 GIT binary patch literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^IUvl)3?#R%INArKm;-!5T&1O@r$iOo0=XidE{-7; njL8dxBv=bP0l+XkKT8kAC literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/mipmap-mdpi/revanced_adaptive_foreground_custom.png b/patches/src/main/resources/custom-branding/mipmap-mdpi/revanced_adaptive_foreground_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf3658c99100d806c7b1566a98061f1d7e129a4 GIT binary patch literal 857 zcmV-f1E&0mP)2LlMAKy0N9z12*!75cKi>cRFFrotd@ZVY4aI9k0q0BY9a+<0UVN50y_bUt~>(=~9PBK`|+N@!-pzF4D}NuO^3%keU|FlVK_R zs`3>UjKbrGT(SKVU9PGt($pU7dezQRzykO}s8WZGB5OI^F11^f zuIYKp5!d#(Rb!g**eGFlsoNrJvqk)yqI7kas~5VY=baxGX`oLo?sL~7QNqn_xG10D zWtBQ?5T!GF-`C@;-uJ4nv-{lJJxW*?|Eau&xuW%C7$$Xcl!UoX>hs{kC-!;J9C}<- ze+W*I8XB!D!$SB*}QwBcsW0A6-#}9pWr6^$@ysz>% zR*klk;WDX1qQ>Y!FH9{`WX!-9rbG>Nk-9Y6R)#I49*r7f#=Nt@pusOcKBF0zqXr(6 z+B(`wR{sy*>_58gW#}q(X)`9JU7~Ge%~*J-e_^HlWSAm#Y|H_UlbRguE5nlbrJ)sI zER1hee#6qy{xX~@H7sU=;ZmnW)-kXi{!@9AWSik!cwMCq8%EY~aI4flQNq4bw?x*l zu&2}=QNo>4dqmc;Fc)4?sl%q&th}5aT99=-43_$xqSWB%95O6`FU{H4SSUJ=3`d)@ zqoQ-kuoC{l%>KqI(fMS!1T(uhI;RX9;8T@Pu|fW2I-mdBg98Bo0000W|JO!PRaI40 jRaI40RaI40RaI31%(=F%-dnXL00000NkvXXu0mjf)K8q` literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_background_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e6e1294b311fe7296b4600c5c0c6edc1c32f0e GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$?8Axt^w|^awVh->Lag~;qo)T4T3*^dpx;TbZ sFupx#$Oz;eQuw`m+fluQCqOm>!vpaJ42;&BJ?cRmPgg&ebxsLQ0H&xK4gdfE literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_foreground_custom.png b/patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_foreground_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..2119d70cf3923efec77d0e8071cfaf99c9c83f2c GIT binary patch literal 1747 zcmbuA|3A}<9>@0$!{(SRxyoc%iJiWPkZ|%DDG8-vrI9b^vT5fKJK5}`bbUD;yQ|Z} zqa5X&F2y$Awo|)i2*-Ts)Gfx!c65}Z7}7Qgm%rh>9*_6?`F_8Dc>VJJ;Z+hD5sJ33 zw}3z(=&-{;^g2}=g*097CEG|d5Qu4I81U6e7W92b!TJpXRZ_3*#usS`m8nlb%zScT%cH~j>CR2=-)S2I0Jlg1(LuDPGyfD9m z*s!)7ZVUY!qS{W3wgUx)4W|0mwZ=t>U*3~8>GT^G?z;CbxokRtpE0&M_E;<&>xNRi zGbS__|HBX?!t#=$9lnPobQwz5&1r!&bYgSC?f2a9t1tYMrdPa%!yk%F$uGz18skGl zg=wKQVq!)Cyk1-k;cCB+d;IHihCFa}H6E9OofUnoB17Vg`O;1o*ew*@wO&LH=hl7_ z*5GSB58}zs>z#6AUcMrL`GpL4L~|z**3y+*LPl|_6NbfR(@{7ySDZOO04?WRTkmdz zy}Trv zmL4!4m(c?*4U$J3vac=beF$gAec)lKCq?ra`4$_APPx5Y|OsxHD< zx4px2*9W5uEF9Ba)@$#Oj#11iY&r!n88r$E4d^xem{Jpb>H|f6^XsoVh8J!q29Cd8 z9w>!lv`m_FBDP?Lbaw)~DK|al{$$}PS88<7vCLem?2HFYWn~wtB5Du2e+ht(jG4{! zeWcMhWvQ;z6V_gCuRiG&_0rc5&UKd{nNWF|?eDeO>KydZR@a~2{W&mZuIVO5zl3n+ zZZk$}DfeI3T{tS$;CSrxthQ)}A>;tdRQ!W@oEW_ox`%zkqdKIbEU?G<>`wK(Sz3?M zh~LMbK&qhSAu3ZXtv}>r(IXx87y4Urj53?ZBQ@B(6LV>Dc)^9jK}b#uj_BvE7n*#I z5xzUY70etNpI-RcQ=Ml_@Z=}CEnV-(3SK7JciYd*Wjvg9p5XWQu(KHk2YA*DVt_~| ziQ7wXxr*~fWxOJHQg(JJc&SP~!T(=AyLP#CD135mCA}^P;bX2kqKeF7#|SCcMg0as zk(amG?qV@R;U?G#fWt;%6DU#|d_R4#;0*UT_YHI7g>SzZ@}RuVNT~x5zhcf}v)GGF z&69wOwT@vich>&%22wd8>v(o`s$ONQWmy`hN}OcvhRC%F-NAhzVsL4yVm8mubE_rY ziQY2A{>24~?=rOcj!*JI(fkmG(+2!v?&+sQO^5*|=x>*iqnQM9lN&viE zfG#`+&)MDU$wP~l25Ov*nkr6qGCB*QhMz#Hky}&iA`rD#boeZPy=p2L&t*SX_Bw9q zZjWF2&AH2JzZr9vyi#BVfFI^BND=sp-@b47;$Xl6EahP~yLQ|OvKj5otciw$nj8@zsUaJGAjZL=|GMgfIu4C=Cyk32s@)+;9ma LM*zY@v`ha7$$0}2 literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/mipmap-xxhdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-xxhdpi/revanced_adaptive_background_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..200224bed5fcff82941aff3e04cf96b900ee942f GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0y~yU~~atMrNQ$s>;zopr06w1-`~Uy| literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/mipmap-xxhdpi/revanced_adaptive_foreground_custom.png b/patches/src/main/resources/custom-branding/mipmap-xxhdpi/revanced_adaptive_foreground_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac3f8a0a89ef88673e87ffce5f860a92997dc2d GIT binary patch literal 2735 zcmd5;i96KW8~@H2+gPW>wUpa8CNkVMBurCxrpTJ)Cd$-Jl*Tr)FXJZ782d6vmWvv) zQ!ZI%ED^=H_BD!-jJ07(!|&_&SKRYF=XuWiInQ~|d*0=9UYfP#1u3Kw5&!@xQxm)m z0Ko9OQ%nRxoE9#$0RYn16o1y%AGX*O4q*T#M^LCx2;W`)cLrsoPITpMWr@tRR!IeE ztXkWLNs1%sx8IW-ttO2rjh%D2_@NB@`C zL36U%6lZMAO0XWgaohefe6ZZ$=Dn*vG_e)qn|AQJtFUd%lLymFoAf4hE%cI_#94iOTo1_ zzhB1Bcl)@!{a|YAQVE5pB^+#7lY-Nvqfsy{drn@9?dRv)C8!Qos4QIW^edEg;kq}? z3DI>>uvpPGG5w}b{L0{=Ri~8Yi;R;7O`{fSj#$q`LIxGcTQz7wt~k37UB;I6kQ^|_ z>$%yVeGQGfpJXCu_PQq%vZ;XnRNud!_-g;miDui*pN-rM{Y&?21c!$P(_vRFYr5Dl zJ4&1uZ!(DB&SBk3_`Bq1{k7$g>EeMTVzTn_{Pgq4BPqdE4|}4Zr^(6 z9b}wLEV1EVwee+ktQ|%34@=Fe0-NQ1^dlSSyiTs5qq&XS*=Eo5W|u{5 zDG$HFt5pHotA!*l%v-J>_h(c{N5K(Zt~ z!Wobl!;p2?@+_d4+<^yvBols4%5JF|R@v-yRZ#sMZe_+3Nu{k!CUhL$-Q+@5KU%Uz z(Pv&!!sQp8nu?*kQjFq!hn_2yMyN5G`i1`IEVsos!!e+ztb*#wvMT5gi$l11%avz( zp3q*WiCK$h`)P-Zr-C1SIF30Zf9bBzvyXouir?h% zjoiURV~TP3gNQ9@4U)KI+39*G3}`dSW@(36)JU;EpurJgSGtw38PRp%@5fSwr*Hj^ z=^bx7c;&H*V!22y|K%}M2bS%HJMi(j10{Umyj~39w6b*wK8dZHcD5#X3cojD5fR-w zXJnQW_H5gbSA_ks6*_P}>3QhF4YzR}2H>fOJ!ForRPfZs8e?!}3wdteO0khX{mi!E z1$khe#?ggLkh;oPobx;89cZg;*l>YYA?IRT6qgy3ko4Ew>pzky>5oD9$yR2q@Vp~= zapbyN^gBA?SjtezkKuJ~pa-5U0;!N0hVi=$ggjj&dJ2C;bnkaF&q-TI&K-#l0}Rut z$&xs7u#!DRdH{W(r*yVex5C8BZEQd#C|(#)n(lj#&z}LLy|=SRFW_Q@`8jR*%*iqX zn%t%>a)|gFuCI~l%?0<<FsG|aBRf%ujnTjN*!V?c? zPBz3$H*UZO>zG@~_d&Q(B&Sb)K4sy=#=T1}gH9D1x3n^BGb+obv$C4zF6~9ZeElrr zx5YKw!k-LguH*V%S7~1CTIgz=^g82AQAO$=bi^ZEA6Z?Iu+`M--Ffqx%xKSz4;imn zZLW+BDvadRp+TF7%k%PSE$h75>jKAyTDj*gU%Tp>R4BEC)6Uj-#4nK?!t9Dq!}pe3 zAKgA!lL4K!xv+q%#5F;CRM33gsUI8DFz)E_ek2wBH$^{BF3au zoTcORu6`TM<0LK10Y$;<7x=W=Fo)9IvOnEd5q!(R5a22pvspY6VIr(?L zF)y{7#cZ-cx~{Uql*zzSJCmjkg78I|`{1|&PLo_yw7o`G(syL2(!(@ZH(Q)j(}m)N zg3m(~7LEq@z~`elCA0lGO=~(*N;-2p`?ijg;qEQ%Jf&QcKIl>VPu;1Ki4Z}@gp?IZsFIvzCrklXFo13$Kxpzlz}gkD~pr3 zQm94}eb|Ql{t7vvg-`3%`%zk{^EZd^)?scns z6f}HHYc*6NRpD!h*~eeUpeVn;yg(KO>x7@#<1SRrVbyfsU5T=hx1s($qrdcHRM+OZ-L)EOD-q}Kj-l%a1j1CB?m79RS^8rEJgQ(Ic&f>e8 zRW<6fDU}Q;(2!A-M9it2x97C}R=gQqTToLbCnH+s6 tv;@n?Pgg&ebxsLQ0G-MhC;$Ke literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/custom-branding/mipmap-xxxhdpi/revanced_adaptive_foreground_custom.png b/patches/src/main/resources/custom-branding/mipmap-xxxhdpi/revanced_adaptive_foreground_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..b3674d18828b7cf7cf2fc837c8f226203c7a933e GIT binary patch literal 3859 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 a*SQ}UU!49A)a}UGU6p`0$1yIr-~TUt&sK5( literal 0 HcmV?d00001 From ce8958f73f4a379c28751de40539c38ad62db798 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 04:52:24 +0400 Subject: [PATCH 39/67] cleanup --- .../shared/patches/CustomBrandingPatch.java | 37 +++---------------- .../branding/BaseCustomBrandingPatch.kt | 3 +- .../shared/layout/branding/Fingerprints.kt | 8 ---- 3 files changed, 6 insertions(+), 42 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index 69ede09d4f..8966ad2dbc 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -42,18 +42,10 @@ public enum BrandingTheme { } } - /** - * Injection point. - */ - private static boolean customIconIncluded() { - // Modified during patching. - throw new IllegalStateException(); - } - /** * Injection point. * - * The number of app names availabel in the settings UI. + * The number of app names available in the settings UI. */ private static int numberOfCustomNames() { // Modified during patching. @@ -70,28 +62,16 @@ private static int numberOfCustomNamesIncludingDummyAliases() { throw new IllegalStateException(); } - private static ComponentName createComponentName(BrandingTheme theme, String packageName, int index) { - return new ComponentName(packageName, - packageName + '.' + theme.themeAlias + '_' + index); - } - /** * Injection point. */ - public static void setBrandingIcon() { + public static void setBranding() { try { Context context = Utils.getContext(); PackageManager pm = context.getPackageManager(); String packageName = context.getPackageName(); - String resetToastMessage = "Custom branding reset"; - BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get(); - //noinspection ConstantConditions - if (selectedBranding == BrandingTheme.CUSTOM && !customIconIncluded()) { - Utils.showToastLong(resetToastMessage); - selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.resetToDefault(); - } final int numberOfCustomNames = numberOfCustomNames(); int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); @@ -99,7 +79,7 @@ public static void setBrandingIcon() { // User imported a bad app name index value. Either the imported data // was corrupted, or they previously had custom name enabled and the app // no longer has a custom name specified. - Utils.showToastLong(resetToastMessage); + Utils.showToastLong("Custom branding reset"); selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.resetToDefault(); } @@ -121,13 +101,6 @@ public static void setBrandingIcon() { } if (index == selectedNameIndex && theme == selectedBranding) { - if (componentToEnable != null) { - // Should never happen. - ComponentName componentToEnableFinal = componentToEnable; - Logger.printException(() -> "Found duplicate alias: " - + componentToEnableFinal.getClassName()); - componentsToDisable.add(componentToEnable); - } componentToEnable = component; } else { componentsToDisable.add(component); @@ -148,7 +121,7 @@ public static void setBrandingIcon() { } for (ComponentName disable : componentsToDisable) { - // Use info logging because if the aliases state become corrupt the app cannot launch. + // Use info logging because if the alias state become corrupt the app cannot launch. Logger.printInfo(() -> "Disabling: " + disable.getClassName()); pm.setComponentEnabledSetting(disable, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); @@ -159,7 +132,7 @@ public static void setBrandingIcon() { pm.setComponentEnabledSetting(componentToEnable, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0); } catch (Exception ex) { - Logger.printException(() -> "setBrandingIcon failure", ex); + Logger.printException(() -> "setBranding failure", ex); } } } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 36de535857..38d227f7c3 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -105,7 +105,7 @@ internal fun baseCustomBrandingPatch( execute { mainActivityOnCreateFingerprint.method.addInstruction( 0, - "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->setBrandingIcon()V" + "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->setBranding()V" ) var totalNamePresets = numberOfPresetAppNames @@ -115,7 +115,6 @@ internal fun baseCustomBrandingPatch( customNumberOfNamesIncludingDummyAliasesFingerprint.method.returnEarly(numberOfPresetAppNames + 1) customNumberOfNamesFingerprint.method.returnEarly(totalNamePresets) - customIconIncludedFingerprint.method.returnEarly(customIcon != null) } } ) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt index a0ac13a9d9..ef7b76ce35 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt @@ -17,11 +17,3 @@ internal val customNumberOfNamesFingerprint = fingerprint { method.name == "numberOfCustomNames" && classDef.type == EXTENSION_CLASS_DESCRIPTOR } } - -internal val customIconIncludedFingerprint = fingerprint { - returns("Z") - parameters() - custom { method, classDef -> - method.name == "customIconIncluded" && classDef.type == EXTENSION_CLASS_DESCRIPTOR - } -} From d5790ee8f31287ad5c096cbb1f33f861cb997b71 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 05:04:00 +0400 Subject: [PATCH 40/67] comments --- patches/src/main/resources/addresources/values/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 552e46e757..308dc463ce 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -21,12 +21,14 @@ Second \"item\" text" App name + Custom App icon Original Rounded Minimal Scaled + Custom @@ -1505,7 +1507,6 @@ Swipe to expand or close" Regular Premium ReVanced - ReVanced minimal Custom From e0965d26521e1a2f188d0741889a9dddbf0d7aea Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 11:36:38 +0400 Subject: [PATCH 41/67] Consolidate error handling paths --- .../shared/patches/CustomBrandingPatch.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index 8966ad2dbc..b7f490a1ba 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -27,12 +27,16 @@ public class CustomBrandingPatch { // // The most that can be done is to hide a theme from the UI and keep the alias with dummy data. public enum BrandingTheme { - // Original must be first. + /** + * Original unpatched icon. Must be first enum. + */ ORIGINAL("revanced_original"), ROUNDED("revanced_rounded"), MINIMAL("revanced_minimal"), SCALED("revanced_scaled"), - /** User provided custom icon. */ + /** + * User provided custom icon. Must be the last enum. + */ CUSTOM("revanced_custom"); public final String themeAlias; @@ -40,6 +44,13 @@ public enum BrandingTheme { BrandingTheme(String themeAlias) { this.themeAlias = themeAlias; } + + private String packageAndNameIndexToClassAlias(String packageName, int appIndex) { + if (appIndex <= 0) { + throw new IllegalArgumentException("App index starts at index 1"); + } + return packageName + '.' + themeAlias + '_' + appIndex; + } } /** @@ -72,17 +83,8 @@ public static void setBranding() { String packageName = context.getPackageName(); BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get(); - final int numberOfCustomNames = numberOfCustomNames(); - int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); - if (selectedNameIndex <= 0 || selectedNameIndex > numberOfCustomNames) { - // User imported a bad app name index value. Either the imported data - // was corrupted, or they previously had custom name enabled and the app - // no longer has a custom name specified. - Utils.showToastLong("Custom branding reset"); - selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.resetToDefault(); - } - + final int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); ComponentName componentToEnable = null; ComponentName defaultComponent = null; List componentsToDisable = new ArrayList<>(); @@ -93,7 +95,7 @@ public static void setBranding() { // App name indices starts at 1. for (int index = 1; index <= numberOfNamesIncludingDummies; index++) { - String aliasClass = packageName + '.' + theme.themeAlias + '_' + index; + String aliasClass = theme.packageAndNameIndexToClassAlias(packageName, index); ComponentName component = new ComponentName(packageName, aliasClass); if (defaultComponent == null) { // Default is always the first alias. @@ -109,10 +111,10 @@ public static void setBranding() { } if (componentToEnable == null) { - // Should never be reached, because the branding icon enum - // resets itself if the saved enum type is invalid or no longer exists, - // and a bad name index is already handled above. - Logger.printException(() -> "Could not find alias to enable"); + // User imported a bad app name index value. Either the imported data + // was corrupted, or they previously had custom name enabled and the app + // no longer has a custom name specified. + Utils.showToastLong("Custom branding reset"); BaseSettings.CUSTOM_BRANDING_ICON.resetToDefault(); BaseSettings.CUSTOM_BRANDING_NAME.resetToDefault(); @@ -121,7 +123,7 @@ public static void setBranding() { } for (ComponentName disable : componentsToDisable) { - // Use info logging because if the alias state become corrupt the app cannot launch. + // Use info logging because if the alias status become corrupt the app cannot launch. Logger.printInfo(() -> "Disabling: " + disable.getClassName()); pm.setComponentEnabledSetting(disable, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); From 89f3ea2e96cc7df75486690438eeab70a999bcc1 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 11:42:23 +0400 Subject: [PATCH 42/67] Update patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../patches/shared/layout/branding/BaseCustomBrandingPatch.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 38d227f7c3..ada0783b00 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -285,7 +285,7 @@ internal fun baseCustomBrandingPatch( alias.setAttribute("android:enabled", enabled.toString()) alias.setAttribute("android:exported", "true") alias.setAttribute("android:icon", "@mipmap/$iconMipmapName") - alias.setAttribute("android:label",label) + alias.setAttribute("android:label", label) alias.setAttribute("android:targetActivity", mainActivityName) val intentFilter = document.createElement("intent-filter") From 73c1fa9a89f136638a2090058a5b9b70b8d98e9b Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 11:42:34 +0400 Subject: [PATCH 43/67] Update patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../mipmap-anydpi/revanced_adaptive_foreground_scaled.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml index d52d856570..f218769a26 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml @@ -16,7 +16,7 @@ From 6be654844c48b94cb48c0f70c4411cc74c92be3b Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 16:13:54 +0400 Subject: [PATCH 44/67] fix startup error toast if custom branding patch is included with root install --- .../app/revanced/extension/shared/GmsCoreSupport.java | 4 ++-- .../extension/shared/patches/CustomBrandingPatch.java | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java index 978ee7131a..e37e79e539 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java @@ -31,8 +31,8 @@ @SuppressWarnings("unused") public class GmsCoreSupport { - private static final String PACKAGE_NAME_YOUTUBE = "com.google.android.youtube"; - private static final String PACKAGE_NAME_YOUTUBE_MUSIC = "com.google.android.apps.youtube.music"; + public static final String PACKAGE_NAME_YOUTUBE = "com.google.android.youtube"; + public static final String PACKAGE_NAME_YOUTUBE_MUSIC = "com.google.android.apps.youtube.music"; private static final String GMS_CORE_PACKAGE_NAME = getGmsCoreVendorGroupId() + ".android.gms"; diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index b7f490a1ba..8952334419 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -1,5 +1,8 @@ package app.revanced.extension.shared.patches; +import static app.revanced.extension.shared.GmsCoreSupport.PACKAGE_NAME_YOUTUBE; +import static app.revanced.extension.shared.GmsCoreSupport.PACKAGE_NAME_YOUTUBE_MUSIC; + import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; @@ -82,6 +85,11 @@ public static void setBranding() { PackageManager pm = context.getPackageManager(); String packageName = context.getPackageName(); + if (packageName.equals(PACKAGE_NAME_YOUTUBE) || packageName.equals(PACKAGE_NAME_YOUTUBE_MUSIC)) { + Logger.printInfo(() -> "App is root mounted. Cannot change dynamically change app icon"); + return; + } + BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get(); final int numberOfCustomNames = numberOfCustomNames(); final int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); From 30ffeb7b6fee37b00f2e4e098b17c4b9e5c7892f Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Mon, 6 Oct 2025 16:39:44 +0300 Subject: [PATCH 45/67] fix scaling for monochrome icons --- .../drawable/revanced_adaptive_monochrome_custom.xml | 8 ++++---- .../drawable/revanced_adaptive_monochrome_minimal.xml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_custom.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_custom.xml index 72cd56f5a7..7a65401447 100644 --- a/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_custom.xml +++ b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_custom.xml @@ -3,10 +3,10 @@ android:height="108dp" android:viewportWidth="256" android:viewportHeight="256"> - + diff --git a/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_minimal.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_minimal.xml index 72cd56f5a7..7a65401447 100644 --- a/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_minimal.xml +++ b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_monochrome_minimal.xml @@ -3,10 +3,10 @@ android:height="108dp" android:viewportWidth="256" android:viewportHeight="256"> - + From fe898c706b7cfd7cfe399ae929d2fcc2f2dfd7ac Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 18:05:44 +0400 Subject: [PATCH 46/67] Add a disclaimer --- .../patches/shared/layout/branding/BaseCustomBrandingPatch.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index ada0783b00..317cabadf5 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -72,7 +72,7 @@ internal fun baseCustomBrandingPatch( executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( name = "Custom branding", - description = "Adds options to change the app icon and app name." + description = "Adds options to change the app icon and app name. This patch may not work with mounted (root) installations." ) { val customName by stringOption( key = "customName", From c92383116f4f320fb53b02e5672e2d79c2e8f54c Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 18:36:56 +0400 Subject: [PATCH 47/67] Do not add in app settings for root installation --- .../layout/branding/CustomBrandingPatch.kt | 2 ++ .../branding/BaseCustomBrandingPatch.kt | 28 +++++++++++++++---- .../layout/branding/CustomBrandingPatch.kt | 2 ++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index c938eea1a9..bcc57d8b44 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -6,6 +6,7 @@ import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.misc.extension.sharedExtensionPatch import app.revanced.patches.music.misc.gms.Constants.MUSIC_MAIN_ACTIVITY_NAME +import app.revanced.patches.music.misc.gms.Constants.REVANCED_MUSIC_PACKAGE_NAME import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint import app.revanced.patches.music.misc.settings.PreferenceScreen import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch @@ -59,6 +60,7 @@ val customBrandingPatch = baseCustomBrandingPatch( addResourcePatchName = "music", originalLauncherIconName = "ic_launcher_release", originalAppName = "@string/app_launcher_name", + originalAppPackageName = REVANCED_MUSIC_PACKAGE_NAME, numberOfPresetAppNames = 4, mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint, mainActivityName = MUSIC_MAIN_ACTIVITY_NAME, diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 317cabadf5..f80f43900e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -9,6 +9,7 @@ import app.revanced.patcher.patch.ResourcePatchContext import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.resourcePatch import app.revanced.patcher.patch.stringOption +import app.revanced.patches.all.misc.packagename.setOrGetFallbackPackageName import app.revanced.patches.all.misc.resources.addResources import app.revanced.patches.all.misc.resources.addResourcesPatch import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen @@ -20,6 +21,7 @@ import app.revanced.util.findElementByAttributeValueOrThrow import app.revanced.util.returnEarly import org.w3c.dom.Element import java.io.File +import java.util.logging.Logger internal val mipmapDirectories = arrayOf( // Target app does not have ldpi icons. @@ -63,6 +65,7 @@ internal fun baseCustomBrandingPatch( addResourcePatchName: String, originalLauncherIconName: String, originalAppName: String, + originalAppPackageName: String, numberOfPresetAppNames: Int, mainActivityOnCreateFingerprint: Fingerprint, mainActivityName: String, @@ -72,7 +75,8 @@ internal fun baseCustomBrandingPatch( executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( name = "Custom branding", - description = "Adds options to change the app icon and app name. This patch may not work with mounted (root) installations." + description = "Adds options to change the app icon and app name. " + + "Branding cannot be changed for mounted (root) installations." ) { val customName by stringOption( key = "customName", @@ -119,13 +123,19 @@ internal fun baseCustomBrandingPatch( } ) - execute { - addResources("shared", "layout.branding.baseCustomBrandingPatch") - addResources(addResourcePatchName, "layout.branding.customBrandingPatch") - + finalize { val useCustomName = customName != null val useCustomIcon = customIcon != null + if (setOrGetFallbackPackageName(originalAppPackageName) == originalAppPackageName) { + if (useCustomName || useCustomIcon) { + Logger.getLogger(this::class.java.name).warning( + "Custom branding does not work with root installation. No changes applied." + ) + } + return@finalize + } + preferenceScreen.addPreferences( if (useCustomName) { ListPreference( @@ -146,6 +156,14 @@ internal fun baseCustomBrandingPatch( ListPreference("revanced_custom_branding_icon") } ) + } + + execute { + addResources("shared", "layout.branding.baseCustomBrandingPatch") + addResources(addResourcePatchName, "layout.branding.customBrandingPatch") + + val useCustomName = customName != null + val useCustomIcon = customIcon != null iconStyleNames.forEach { style -> copyResources( diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 1c6d032bbc..c5e786d628 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -3,6 +3,7 @@ package app.revanced.patches.youtube.layout.branding import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.gms.Constants.YOUTUBE_MAIN_ACTIVITY_NAME +import app.revanced.patches.youtube.misc.gms.Constants.YOUTUBE_PACKAGE_NAME import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint @@ -11,6 +12,7 @@ val customBrandingPatch = baseCustomBrandingPatch( addResourcePatchName = "youtube", originalLauncherIconName = "ic_launcher", originalAppName = "@string/application_name", + originalAppPackageName = YOUTUBE_PACKAGE_NAME, numberOfPresetAppNames = 4, mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint, mainActivityName = YOUTUBE_MAIN_ACTIVITY_NAME, From a162e039421fb198f823f42e0ce16d1fc8285ba3 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 18:47:57 +0400 Subject: [PATCH 48/67] Use same names as the same icon styles in change header patch --- patches/src/main/resources/addresources/values/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 308dc463ce..9f324baeb2 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -25,9 +25,9 @@ Second \"item\" text" Custom App icon Original - Rounded - Minimal - Scaled + ReVanced + ReVanced minimal + ReVanced scaled Custom From 6fd59b9cd7405fc01f82599cedea93754c8940dc Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 20:23:34 +0400 Subject: [PATCH 49/67] Fix YT Music missing setting --- .../patches/music/layout/branding/CustomBrandingPatch.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index bcc57d8b44..55582d6de7 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -6,7 +6,7 @@ import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.misc.extension.sharedExtensionPatch import app.revanced.patches.music.misc.gms.Constants.MUSIC_MAIN_ACTIVITY_NAME -import app.revanced.patches.music.misc.gms.Constants.REVANCED_MUSIC_PACKAGE_NAME +import app.revanced.patches.music.misc.gms.Constants.MUSIC_PACKAGE_NAME import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint import app.revanced.patches.music.misc.settings.PreferenceScreen import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch @@ -60,7 +60,7 @@ val customBrandingPatch = baseCustomBrandingPatch( addResourcePatchName = "music", originalLauncherIconName = "ic_launcher_release", originalAppName = "@string/app_launcher_name", - originalAppPackageName = REVANCED_MUSIC_PACKAGE_NAME, + originalAppPackageName = MUSIC_PACKAGE_NAME, numberOfPresetAppNames = 4, mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint, mainActivityName = MUSIC_MAIN_ACTIVITY_NAME, From 8ed3b3b0559235c8e7c5e1e9867fb558b8ce50c8 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 20:27:16 +0400 Subject: [PATCH 50/67] refactor --- .../shared/layout/branding/BaseCustomBrandingPatch.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index f80f43900e..c1c0128de6 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -23,7 +23,7 @@ import org.w3c.dom.Element import java.io.File import java.util.logging.Logger -internal val mipmapDirectories = arrayOf( +private val mipmapDirectories = arrayOf( // Target app does not have ldpi icons. "mipmap-mdpi", "mipmap-hdpi", @@ -51,10 +51,7 @@ private val USER_CUSTOM_ADAPTIVE_FILE_NAMES = arrayOf( "$LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.png" ) -private const val USER_CUSTOM_MONOCHROME_NAME = - "$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml" - -private fun formatResourceFileList(resourceNames: Array) = resourceNames.joinToString("\n") { "- $it" } +private const val USER_CUSTOM_MONOCHROME_NAME = "$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml" internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/patches/CustomBrandingPatch;" @@ -91,7 +88,7 @@ internal fun baseCustomBrandingPatch( Folder with images to use as a custom icon. The folder must contain one or more of the following folders, depending on the DPI of the device: - ${formatResourceFileList(mipmapDirectories)} + ${mipmapDirectories.joinToString("\n") { "- $it" }} Each of the folders must contain all of the following files: ${USER_CUSTOM_ADAPTIVE_FILE_NAMES.joinToString("\n")} @@ -193,6 +190,7 @@ internal fun baseCustomBrandingPatch( "$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml", ) ) + mipmapDirectories.forEach { dpi -> copyResources( "custom-branding", From 206769a0f555ffe24361f317c44a6c764ea6854a Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 20:37:31 +0400 Subject: [PATCH 51/67] refactor --- .../mipmap-anydpi/revanced_adaptive_foreground_minimal.xml | 2 +- .../mipmap-anydpi/revanced_adaptive_foreground_rounded.xml | 2 +- .../mipmap-anydpi/revanced_adaptive_foreground_scaled.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml index b5cd426b08..17715cb101 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml @@ -10,7 +10,7 @@ android:translateY="97.28"> + android:fillColor="#FFFFFF"/> diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml index 0c64dc5d8b..9567394899 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml @@ -30,7 +30,7 @@ + android:fillColor="#FFFFFF"/> diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml index f218769a26..535ad522b5 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml @@ -10,7 +10,7 @@ android:translateY="89.6"> + android:fillColor="#FFFFFF"/> From d238ee7309977e5f2a8d74773444b1e736d8171d Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 22:02:37 +0400 Subject: [PATCH 52/67] Show what went wrong in the exception --- patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt b/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt index 61d7be3502..e9861dad95 100644 --- a/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt +++ b/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt @@ -70,8 +70,13 @@ fun ResourcePatchContext.copyResources( for (resourceGroup in resources) { resourceGroup.resources.forEach { resource -> val resourceFile = "${resourceGroup.resourceDirectoryName}/$resource" + val stream = inputStreamFromBundledResource(sourceResourceDirectory, resourceFile) + if (stream == null) { + throw IllegalArgumentException("Could not find resource: $resourceFile " + + "in directory: $sourceResourceDirectory") + } Files.copy( - inputStreamFromBundledResource(sourceResourceDirectory, resourceFile)!!, + stream, targetResourceDirectory.resolve(resourceFile).toPath(), StandardCopyOption.REPLACE_EXISTING, ) From 954c90de6bd64cbc818eff5c80b4a3b6fa6053b1 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 22:41:35 +0400 Subject: [PATCH 53/67] fix day launcher not showing splash screen background --- .../mipmap-anydpi/revanced_adaptive_background_minimal.xml | 2 +- .../mipmap-anydpi/revanced_adaptive_background_rounded.xml | 2 +- .../mipmap-anydpi/revanced_adaptive_foreground_minimal.xml | 6 ++++++ .../mipmap-anydpi/revanced_adaptive_foreground_rounded.xml | 2 +- .../mipmap-anydpi/revanced_adaptive_foreground_scaled.xml | 6 ++++++ 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_minimal.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_minimal.xml index 082937a484..ab5fb737ef 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_minimal.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_minimal.xml @@ -1,2 +1,2 @@ \ No newline at end of file + android:color="#1B1B1B" /> \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_rounded.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_rounded.xml index 082937a484..ab5fb737ef 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_rounded.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_rounded.xml @@ -1,2 +1,2 @@ \ No newline at end of file + android:color="#1B1B1B" /> \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml index 17715cb101..41345de3a6 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml @@ -4,6 +4,12 @@ android:height="108dp" android:viewportWidth="256" android:viewportHeight="256"> + + + android:fillColor="#1B1B1B"/> + + Date: Mon, 6 Oct 2025 22:47:14 +0400 Subject: [PATCH 54/67] organize files --- .../shared/layout/branding/BaseCustomBrandingPatch.kt | 8 ++++---- .../revanced_adaptive_background_minimal.xml | 0 .../revanced_adaptive_background_rounded.xml | 0 .../revanced_adaptive_background_scaled.xml | 0 .../revanced_adaptive_foreground_minimal.xml | 0 .../revanced_adaptive_foreground_rounded.xml | 0 .../revanced_adaptive_foreground_scaled.xml | 0 .../mipmap-anydpi/revanced_launcher_minimal.xml | 4 ++-- .../mipmap-anydpi/revanced_launcher_rounded.xml | 4 ++-- .../mipmap-anydpi/revanced_launcher_scaled.xml | 4 ++-- 10 files changed, 10 insertions(+), 10 deletions(-) rename patches/src/main/resources/custom-branding/{mipmap-anydpi => drawable}/revanced_adaptive_background_minimal.xml (100%) rename patches/src/main/resources/custom-branding/{mipmap-anydpi => drawable}/revanced_adaptive_background_rounded.xml (100%) rename patches/src/main/resources/custom-branding/{mipmap-anydpi => drawable}/revanced_adaptive_background_scaled.xml (100%) rename patches/src/main/resources/custom-branding/{mipmap-anydpi => drawable}/revanced_adaptive_foreground_minimal.xml (100%) rename patches/src/main/resources/custom-branding/{mipmap-anydpi => drawable}/revanced_adaptive_foreground_rounded.xml (100%) rename patches/src/main/resources/custom-branding/{mipmap-anydpi => drawable}/revanced_adaptive_foreground_scaled.xml (100%) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index c1c0128de6..bbe1416be7 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -166,14 +166,14 @@ internal fun baseCustomBrandingPatch( copyResources( "custom-branding", ResourceGroup( - "mipmap-anydpi", - "$LAUNCHER_RESOURCE_NAME_PREFIX$style.xml", + "drawable", "$LAUNCHER_ADAPTIVE_BACKGROUND_PREFIX$style.xml", "$LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX$style.xml", + "$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$style.xml" ), ResourceGroup( - "drawable", - "$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$style.xml" + "mipmap-anydpi", + "$LAUNCHER_RESOURCE_NAME_PREFIX$style.xml" ) ) } diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_minimal.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_background_minimal.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_minimal.xml rename to patches/src/main/resources/custom-branding/drawable/revanced_adaptive_background_minimal.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_rounded.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_background_rounded.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_rounded.xml rename to patches/src/main/resources/custom-branding/drawable/revanced_adaptive_background_rounded.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_scaled.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_background_scaled.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_background_scaled.xml rename to patches/src/main/resources/custom-branding/drawable/revanced_adaptive_background_scaled.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_foreground_minimal.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_minimal.xml rename to patches/src/main/resources/custom-branding/drawable/revanced_adaptive_foreground_minimal.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_foreground_rounded.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_rounded.xml rename to patches/src/main/resources/custom-branding/drawable/revanced_adaptive_foreground_rounded.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml b/patches/src/main/resources/custom-branding/drawable/revanced_adaptive_foreground_scaled.xml similarity index 100% rename from patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_adaptive_foreground_scaled.xml rename to patches/src/main/resources/custom-branding/drawable/revanced_adaptive_foreground_scaled.xml diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml index 8e971a8aff..f21fbb1f3b 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_minimal.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml index f9a07b8a6f..a5b8aef86b 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_rounded.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file diff --git a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml index 30ee9fbd42..f5126df718 100644 --- a/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml +++ b/patches/src/main/resources/custom-branding/mipmap-anydpi/revanced_launcher_scaled.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file From 533885a7723d277ad81b692a11ffe9d49668918f Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 6 Oct 2025 22:54:49 +0400 Subject: [PATCH 55/67] comments --- patches/src/main/resources/addresources/values/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 9f324baeb2..b97e0b2181 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -26,6 +26,7 @@ Second \"item\" text" App icon Original ReVanced + ReVanced minimal ReVanced scaled @@ -1507,6 +1508,7 @@ Swipe to expand or close" Regular Premium ReVanced + ReVanced minimal Custom From cf5ba27a95f0448c52cf4cb77970e9dbe6b199f1 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:37:49 +0400 Subject: [PATCH 56/67] fix about screen showing an error if backed out before it can show --- .../preference/ReVancedAboutPreference.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/ReVancedAboutPreference.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/ReVancedAboutPreference.java index be14e4a635..4f4d3ef928 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/ReVancedAboutPreference.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/preference/ReVancedAboutPreference.java @@ -5,6 +5,7 @@ import static app.revanced.extension.shared.requests.Route.Method.GET; import android.annotation.SuppressLint; +import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; @@ -125,6 +126,8 @@ private String createDialogHtml(WebLink[] aboutLinks) { { setOnPreferenceClickListener(pref -> { + Context context = pref.getContext(); + // Show a progress spinner if the social links are not fetched yet. if (!AboutLinksRoutes.hasFetchedLinks() && Utils.isNetworkConnected()) { // Show a progress spinner, but only if the api fetch takes more than a half a second. @@ -137,17 +140,18 @@ private String createDialogHtml(WebLink[] aboutLinks) { handler.postDelayed(showDialogRunnable, delayToShowProgressSpinner); Utils.runOnBackgroundThread(() -> - fetchLinksAndShowDialog(handler, showDialogRunnable, progress)); + fetchLinksAndShowDialog(context, handler, showDialogRunnable, progress)); } else { // No network call required and can run now. - fetchLinksAndShowDialog(null, null, null); + fetchLinksAndShowDialog(context, null, null, null); } return false; }); } - private void fetchLinksAndShowDialog(@Nullable Handler handler, + private void fetchLinksAndShowDialog(Context context, + @Nullable Handler handler, Runnable showDialogRunnable, @Nullable ProgressDialog progress) { WebLink[] links = AboutLinksRoutes.fetchAboutLinks(); @@ -164,7 +168,17 @@ private void fetchLinksAndShowDialog(@Nullable Handler handler, if (handler != null) { handler.removeCallbacks(showDialogRunnable); } - if (progress != null) { + + // Don't continue if the activity is done. To test this tap the + // about dialog and immediately press back before the dialog can show. + if (context instanceof Activity activity) { + if (activity.isFinishing() || activity.isDestroyed()) { + Logger.printDebug(() -> "Not showing about dialog, activity is closed"); + return; + } + } + + if (progress != null && progress.isShowing()) { progress.dismiss(); } new WebViewDialog(getContext(), htmlDialog).show(); From 109bab7bdfd79d1f5e6392c55fbc7b2540f086e7 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:37:57 +0400 Subject: [PATCH 57/67] retain long press actions --- .../branding/BaseCustomBrandingPatch.kt | 60 +++++++++++-------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index bbe1416be7..48b740c42f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -17,9 +17,11 @@ import app.revanced.patches.shared.misc.settings.preference.ListPreference import app.revanced.util.ResourceGroup import app.revanced.util.Utils.trimIndentMultiline import app.revanced.util.copyResources +import app.revanced.util.findElementByAttributeValue import app.revanced.util.findElementByAttributeValueOrThrow import app.revanced.util.returnEarly import org.w3c.dom.Element +import org.w3c.dom.NodeList import java.io.File import java.util.logging.Logger @@ -264,25 +266,15 @@ internal fun baseCustomBrandingPatch( } } - // Create launch aliases that can be programmatically selected in app. document("AndroidManifest.xml").use { document -> - // Remove the intent from the main activity since an alias will be used instead. - document.childNodes.findElementByAttributeValueOrThrow( - "android:name", - activityAliasNameWithIntentToRemove - ).childNodes.findElementByAttributeValueOrThrow( - "android:name", - "android.intent.action.MAIN" - ).let { intent -> - intent.parentNode.removeChild(intent) - } - + // Create launch aliases that can be programmatically selected in app. fun createAlias( aliasName: String, iconMipmapName: String, appNameIndex: Int, useCustomName: Boolean, - enabled: Boolean + enabled: Boolean, + intents: NodeList ): Element { val label = if (useCustomName) { if (customName == null) { @@ -304,19 +296,34 @@ internal fun baseCustomBrandingPatch( alias.setAttribute("android:label", label) alias.setAttribute("android:targetActivity", mainActivityName) - val intentFilter = document.createElement("intent-filter") - val action = document.createElement("action") - action.setAttribute("android:name", "android.intent.action.MAIN") - val category = document.createElement("category") - category.setAttribute("android:name", "android.intent.category.LAUNCHER") - - intentFilter.appendChild(action) - intentFilter.appendChild(category) - alias.appendChild(intentFilter) + // Copy all intents from the original alias so long press actions still work. + for (i in 0 until intents.length) { + alias.appendChild( + intents.item(i).cloneNode(true) + ) + } return alias } + // Remove the original main alias. + val originalIntent = document.childNodes.findElementByAttributeValueOrThrow( + "android:name", + activityAliasNameWithIntentToRemove + ) + originalIntent.parentNode.removeChild(originalIntent) + + val intentFilters = originalIntent.childNodes + for (i in 0 until intentFilters.length) { + // Remove the default element from all intents. + intentFilters.item(i).childNodes.findElementByAttributeValue( + "android:name", + "android.intent.category.DEFAULT" + )?.let { intent -> + intent.parentNode.removeChild(intent) + } + } + val namePrefix = ".revanced_" val iconResourcePrefix = "revanced_launcher_" val application = document.getElementsByTagName("application") @@ -334,7 +341,8 @@ internal fun baseCustomBrandingPatch( iconMipmapName = originalLauncherIconName, appNameIndex = appNameIndex, useCustomName = useCustomNameLabel, - enabled = (appNameIndex == 1) + enabled = (appNameIndex == 1), + intentFilters ) ) @@ -345,7 +353,8 @@ internal fun baseCustomBrandingPatch( iconMipmapName = iconResourcePrefix + style, appNameIndex = appNameIndex, useCustomName = useCustomNameLabel, - enabled = false + enabled = false, + intentFilters ) ) } @@ -362,7 +371,8 @@ internal fun baseCustomBrandingPatch( iconMipmapName = iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, appNameIndex = appNameIndex, useCustomName = useCustomNameLabel, - enabled = false + enabled = false, + intentFilters ) ) } From 17dc4a0955ec0b3acd78cdc1cdb133a512e19f71 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:39:21 +0400 Subject: [PATCH 58/67] removing the existing default does not seem to be required --- .../layout/branding/BaseCustomBrandingPatch.kt | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 48b740c42f..9ba3847d01 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -17,7 +17,6 @@ import app.revanced.patches.shared.misc.settings.preference.ListPreference import app.revanced.util.ResourceGroup import app.revanced.util.Utils.trimIndentMultiline import app.revanced.util.copyResources -import app.revanced.util.findElementByAttributeValue import app.revanced.util.findElementByAttributeValueOrThrow import app.revanced.util.returnEarly import org.w3c.dom.Element @@ -313,19 +312,9 @@ internal fun baseCustomBrandingPatch( ) originalIntent.parentNode.removeChild(originalIntent) - val intentFilters = originalIntent.childNodes - for (i in 0 until intentFilters.length) { - // Remove the default element from all intents. - intentFilters.item(i).childNodes.findElementByAttributeValue( - "android:name", - "android.intent.category.DEFAULT" - )?.let { intent -> - intent.parentNode.removeChild(intent) - } - } - val namePrefix = ".revanced_" val iconResourcePrefix = "revanced_launcher_" + val intentFilters = originalIntent.childNodes val application = document.getElementsByTagName("application") .item(0) as Element From 45b373717c9cd0516905ffbadb97fbfc76877592 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:49:06 +0400 Subject: [PATCH 59/67] comments --- .../shared/layout/branding/BaseCustomBrandingPatch.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 9ba3847d01..309b12adba 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -192,6 +192,7 @@ internal fun baseCustomBrandingPatch( ) ) + // Copy template icon png files. mipmapDirectories.forEach { dpi -> copyResources( "custom-branding", @@ -348,12 +349,12 @@ internal fun baseCustomBrandingPatch( ) } - // Must add all aliases even if the user did not provide option values. + // Must add all aliases even if the user did not provide a custom icon of their own. // This is because if the user installs with an option, then repatches without the option, - // the alias must still exist because if it was previously enabled and then it's removed, - // the app will become broken and cannot launch. Even if the app data is cleared, - // it still cannot be launched. The only fix is to uninstall the app. - // To prevent this, always include all prior aliases and use dummy data if needed. + // the alias must still exist because if it was previously enabled and then it's removed + // the app will become broken and cannot launch. Even if the app data is cleared + // it still cannot be launched and the only fix is to uninstall the app. + // To prevent this, always include all aliases and use dummy data if needed. application.appendChild( createAlias( aliasName = aliasName(CUSTOM_USER_ICON_STYLE_NAME), From 91401946be31a4d53cae49eb6f5f89619a1becd7 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 7 Oct 2025 13:33:47 +0400 Subject: [PATCH 60/67] fix YT Music --- .../layout/branding/CustomBrandingPatch.kt | 3 +- .../branding/BaseCustomBrandingPatch.kt | 42 ++++++++++++++----- .../layout/branding/CustomBrandingPatch.kt | 3 +- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 55582d6de7..a0161e1d87 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -61,10 +61,11 @@ val customBrandingPatch = baseCustomBrandingPatch( originalLauncherIconName = "ic_launcher_release", originalAppName = "@string/app_launcher_name", originalAppPackageName = MUSIC_PACKAGE_NAME, + copyExistingIntentsToAliases = false, numberOfPresetAppNames = 4, mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint, mainActivityName = MUSIC_MAIN_ACTIVITY_NAME, - activityAliasNameWithIntentToRemove = MUSIC_MAIN_ACTIVITY_NAME, + activityAliasNameWithIntents = MUSIC_MAIN_ACTIVITY_NAME, preferenceScreen = PreferenceScreen.GENERAL, block = { diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 309b12adba..91bb315a67 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -64,10 +64,11 @@ internal fun baseCustomBrandingPatch( originalLauncherIconName: String, originalAppName: String, originalAppPackageName: String, + copyExistingIntentsToAliases: Boolean, numberOfPresetAppNames: Int, mainActivityOnCreateFingerprint: Fingerprint, mainActivityName: String, - activityAliasNameWithIntentToRemove: String, + activityAliasNameWithIntents: String, preferenceScreen: BasePreferenceScreen.Screen, block: ResourcePatchBuilder.() -> Unit = {}, executeBlock: ResourcePatchContext.() -> Unit = {} @@ -297,25 +298,35 @@ internal fun baseCustomBrandingPatch( alias.setAttribute("android:targetActivity", mainActivityName) // Copy all intents from the original alias so long press actions still work. - for (i in 0 until intents.length) { - alias.appendChild( - intents.item(i).cloneNode(true) - ) + if (copyExistingIntentsToAliases) { + for (i in 0 until intents.length) { + alias.appendChild( + intents.item(i).cloneNode(true) + ) + } + } else { + val intentFilter = document.createElement("intent-filter").apply { + val action = document.createElement("action") + action.setAttribute("android:name", "android.intent.action.MAIN") + appendChild(action) + + val category = document.createElement("category") + category.setAttribute("android:name", "android.intent.category.LAUNCHER") + appendChild(category) + } + alias.appendChild(intentFilter) } return alias } - // Remove the original main alias. - val originalIntent = document.childNodes.findElementByAttributeValueOrThrow( + val intentFilters = document.childNodes.findElementByAttributeValueOrThrow( "android:name", - activityAliasNameWithIntentToRemove - ) - originalIntent.parentNode.removeChild(originalIntent) + activityAliasNameWithIntents + ).childNodes val namePrefix = ".revanced_" val iconResourcePrefix = "revanced_launcher_" - val intentFilters = originalIntent.childNodes val application = document.getElementsByTagName("application") .item(0) as Element @@ -366,6 +377,15 @@ internal fun baseCustomBrandingPatch( ) ) } + + // Remove the main action from the original alias, otherwise two apps icons + // can be shown in the launcher. Must do this after adding new aliases. + intentFilters.findElementByAttributeValueOrThrow( + "android:name", + "android.intent.action.MAIN" + ).let { intent -> + intent.parentNode.removeChild(intent) + } } executeBlock() diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index c5e786d628..90e1890d8f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -13,10 +13,11 @@ val customBrandingPatch = baseCustomBrandingPatch( originalLauncherIconName = "ic_launcher", originalAppName = "@string/application_name", originalAppPackageName = YOUTUBE_PACKAGE_NAME, + copyExistingIntentsToAliases = true, numberOfPresetAppNames = 4, mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint, mainActivityName = YOUTUBE_MAIN_ACTIVITY_NAME, - activityAliasNameWithIntentToRemove = "com.google.android.youtube.app.honeycomb.Shell\$HomeActivity", + activityAliasNameWithIntents = "com.google.android.youtube.app.honeycomb.Shell\$HomeActivity", preferenceScreen = PreferenceScreen.GENERAL_LAYOUT, block = { From ece15d778546abb2f494dd1d93091d0608d7c704 Mon Sep 17 00:00:00 2001 From: MarcaDian <152095496+MarcaDian@users.noreply.github.com> Date: Tue, 7 Oct 2025 16:12:32 +0300 Subject: [PATCH 61/67] update revanced header logo minimal --- .../revanced_header_logo_minimal_dark.png | Bin 3490 -> 3358 bytes .../revanced_header_logo_minimal_light.png | Bin 3101 -> 2989 bytes .../revanced_header_logo_minimal_dark.png | Bin 2240 -> 2131 bytes .../revanced_header_logo_minimal_light.png | Bin 1997 -> 1934 bytes .../revanced_header_logo_minimal_dark.png | Bin 4676 -> 4515 bytes .../revanced_header_logo_minimal_light.png | Bin 4216 -> 4054 bytes .../revanced_header_logo_minimal_dark.png | Bin 7648 -> 7389 bytes .../revanced_header_logo_minimal_light.png | Bin 6882 -> 6540 bytes .../revanced_header_logo_minimal_dark.png | Bin 7966 -> 7467 bytes .../revanced_header_logo_minimal_light.png | Bin 6895 -> 6744 bytes 10 files changed, 0 insertions(+), 0 deletions(-) diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_dark.png index c2995578d9904564df539bb0c396aecc217b3d07..74622c52374117ae009b8d4c97c59996da184b8a 100644 GIT binary patch delta 3326 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 IM6N<$f_vUa_5c6? delta 3459 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 l00000000000000$!~r6NTur_2F~El?4C* diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_light.png index 9bd381fc75fd7e54e72e939c9487bd8b3de5e1fd..436415fe9d46d7a46e44063c4c02ede557094d20 100644 GIT binary patch delta 2952 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 FV1i`!tz-ZI delta 1983 zcmV;w2SE6a56usdB!84iL_t(|0qntn00000fS~=U7pVdO0001h*|iJUHny~l<0^-l zxnG@rx1rrKW8g9~Gc%Q$nOp5;W@ct)<}!0q4nO->bVfQF*-kccB_;Ax{gm;{@r>;E z?eWamMx6#a*A7nJHL>H%vn~+j+c+=Um?kUV1Q0@v#*2C0F77vKxZsmxHrH%l_XV zPZ7U0#cUSy-0xFUQxk&kXv<4Gn&1Pg0h*23MC|KB_SqgSD8X4^BE^$kOx7tWDM@MR z{7p;ohHYjHV}IR^z-%zt&mm)w;1Z9HXij30fN=Oq0+JAdmYQhmbp|fU$;mksuF^gS zps32p$x&|CT%{(bs36;;ysR#^hIMIdV@$(XyAjO3DrtuQ^KsaBP>#LWhy7-G6;>hv z|4SyL0-vHS+&Kp2*p6(p)Vzvv%tYWqvF5u!24Z7lRexGqs_naW>X_jrdS~bqtvdNG z{dVGVp<(∓L9t(2|BRWo2dJIo{3>7Wg>qcaR@nA_Ps%2*@aaJNH2N25rz%^BII? zfxHP6LZQ~VuLM$3Qp60QjT<-Wp(h{Fg`N}j_xW$>+q0e(8kR5eoTLXHe@L4*Zx-Vl z*!wX1Tz}6oycP3H2>(Hm(G$~A58*VplYxH7cNH@P8z9^PJDso&!dTe(e+)o3FEdDc zL|N;zF&KsLm!r@ho#88C=#Jiqhp)6pkr@|-cOWc6U_#+~*@d%(g@x&c8*Y$D;lGMB zr);TSzVLm#r+G&&S3zN+>iKumO*bhtG}Py%BY%4PX@aqE=V!<@<)z?p9EOY^aV(tN z2jK(Q83-BwHtTxh3&`>_PJokBunkXR1!^GUV`RZjF}{L~D!dL4?A(HNkg*Fhy)@y; z_!Tm?VrRgcfY0%ZeO(dIAmZdsyLa!_f~E76o7z(=F8f9+FaK6u(|T#%;@K)MFBkg| zvww!qOGdU|;-?A5!JQu<%rcLotj3Vpz8*p?`j~O2LO6tUIGF|E543>?b&#{_KOiHpO+cYW`@1X*2?^2E zsZ&)|RjKr>B%OZrQk`+ka;0S^>G0u0ntwihx){^geSQHNUVr1fiSe|cz&Uf6XcW`YU+njkSTQ67&+)z#ISFmaqBB7YMV z5tXR%RY4>wm7hv}@NcB_zZuK0Zb}cka|Z_uM14HRTTC&3>Ao z9yPA%`3t1EPwEFl%57E#ZhJrx%h*Ju;qM1Ma`umsuY zg0~@j2Pf_DCxmw}6vyLOvpfL((a|bU6@h85hCh8Y!5+lINj45! z$4G;WGhinaP9{M(WX2tf<1qq*(I1KE>Sup*1KtEQKst?Z*c8q0xxq8fJfqdCS8LU( zReJ8Z=d5!9-^{)ma=0x~%*?;7wpo4&QC;BOxXx zMuP?ol9M4rhKO}$yWjJH_kA4pD+p6y=RF92qJvqNheHr{;YHV_*nd5+GZwP!M-rSo z2H`hcg4<9I86({v2VR<>60$B)uYrtT@FI3VMxGh>3S_)*9#=s)Xnm~RB4|;D2_E!eDepF+2!txJu~3 z`9Td#A)C+aqlTMJT-Ua=1iwzcwCTSn^8X7Xnu-&j7MtL23n^rMbADXnG!XmX21iRz zun|fq<{wR+6&NEk_D^Pjvfw+|O2Vz+2#Puqf0-hC#Wvw@nqdq#l{j$=rqv}cFRvp7 z9>(l2j=zuMZ8+mmia(LRBlvEi(|_Bc0~r7S0DwXM*5~+E2$=!^0001hg#a-^x*x`V Ru}A;_002ovPDHLkV1jv~sX+h$ diff --git a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_dark.png index 8586ec0363f7c8bf509752fd51e9d98aff3e6339..78c9ae091985e9d4081fb2f7d3371fae1abdce84 100644 GIT binary patch delta 4478 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 z@eDraYn;Y;tUf>ff9=7s00000z#xC?LF}yn00000000000000000000000000DvPD XSt+V3sBaoo00000NkvXXu0mjfEiawb diff --git a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_light.png index f9f9db247b2baa1c50048c8c56f9623d5c5a0df5..d26eda3595cb7141fed3a35aab9845487fef0560 100644 GIT binary patch delta 4007 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

O?1|s^rYl5XWwui^34AX`O^GD4mH*H2e&CvJ` zMponiov5h&`mv5z_&b!mrWW_Zr-3gcQ&tRb_a*pAj=d$&O(e&fCPDUr@i#`67hneb zgMnvR^>qxL?5FB--?RF26??je4}US|+wW|9&2;-^dd)?iwECZLbD~%G2j{U-UUQC3 zR&$3Zbi#d|rW6;Eay`HJ&pp~JOmv;KoDKiqmLdQU(s7Ty+$-H;P&iop-_y$SYI0RF Hh_L?vY-;GJ literal 7648 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 JGFh{4{|ARYkOu$& diff --git a/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-xxhdpi/revanced_header_logo_minimal_light.png index f157928cd21ccd17411eb477546b5e8dee5aeb00..725e73c23ebe05ea2afe4f4c024b0475c3f0ee2d 100644 GIT binary patch delta 6472 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 i0UeP+FBt#;0PsKi8#$s{S^rW10000G) delta 6817 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 P00000NkvXXu0mjfewWts diff --git a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_dark.png index 4e65b42c65614abe0b648d43b02281900677c9ea..76820c2804790f094e5838603461b40c9f504f9e 100644 GIT binary patch literal 7467 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 d|Hp-*KiS!1N03;yd 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 diff --git a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_light.png index 566290423ab4c06218fccc12e9913cd89817909b..5645f7ac6305c537c588393be77477029ee8a9fa 100644 GIT binary patch delta 6324 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 delta 6473 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 Date: Tue, 7 Oct 2025 17:23:17 +0400 Subject: [PATCH 62/67] Change template icons to inverted color, to make future diagnosing easier --- .../revanced_adaptive_background_custom.png | Bin 98 -> 97 bytes .../revanced_adaptive_foreground_custom.png | Bin 1279 -> 1276 bytes .../revanced_adaptive_background_custom.png | Bin 92 -> 92 bytes .../revanced_adaptive_foreground_custom.png | Bin 857 -> 858 bytes .../revanced_adaptive_background_custom.png | Bin 100 -> 100 bytes .../revanced_adaptive_background_custom.png | Bin 108 -> 108 bytes .../revanced_adaptive_foreground_custom.png | Bin 2735 -> 2771 bytes .../revanced_adaptive_background_custom.png | Bin 117 -> 118 bytes .../revanced_adaptive_foreground_custom.png | Bin 3859 -> 3930 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/patches/src/main/resources/custom-branding/mipmap-hdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-hdpi/revanced_adaptive_background_custom.png index 80c1e2c2bd57fd855597dde7559ec40e0e317b7d..f0c096300118e52e1e6ed209843eacaac2b6f425 100644 GIT binary patch delta 61 zcmYdFoS7#JiyT^vIy;@%!$c4b+t^pDr16NFXV^U)8vGj*1-bD;# zErEE><1PdmnRn=0BXbXy@EG)-G6DM>#Iqa;5Cd7IAd33VYjA(=p@RnJ87ens$UsM4 z4Iqk=h>@%m*az_(L0SYFkZ<^1ee;eu1qsoa{`rR8>)n4E9ENxfASGfbs|G|-(Rp>t zH@bHBe4`{J`A5}qo{dO^Kplz=Nz*C+*qt5okChrlK7dt;L>#*c};>SoD?i5=QKRCJE0ip~Ai=~aO!zJ_I8E%% zORFkG@l6;el2?Ic#jF40OdPZ0LYZxN2LFd;#k+s55JgVJRW6943oI+Bo`NW5Ag*RY z6wko2f^I5A@jTS%8Hi#sEGwk4LlixrMm-^ltgx(*N`ws%&sp3GzngIu;@N~mu&j{# z3Zke9zgiH*m$0lGDh-Z6JO_~q*Gh@~5YJJhgJs=tO(2RgxK>$+q7lN9W!-}d5YIZK zMjCCbgLp3BZiFq%8Uj)5!+wZjFv6N;y#)!<8wh)rwHOjlOOXI!&$5a_;;Aq!DXakwF`gPzV(ubtqbE;Gi9H00000NkvXXu0mjf>w+Xc delta 1191 zcmV;Y1X%n03I7R@Bmu^eB|3kAkt~Y>Fnq=q*0yci7@N(t?Xhj!wr$(CZT~yMOWo6H z)te+$=S%+Pt(5SDpaEim-CVH>xJ^9ve%$P_-Fcd?+x=;Cd~WTz>k<#(HefYZ>;huN zgbpAjZ~#|x@z|QTRqd^LT5(nSv~?}<0Gi`E0Hl!6VSv@R4g8Iqr?OF3*E00S`3f_ID~66kX9~Q zn6JYFi}QCpaW;JFyZadFLklQ^yU!Pp!0Zhkr2Do2BmjMQ&dr3UT7w+}d zghD+DW)lnc{8BuCm(dN9Fq2ZkPkqsSFCN=D)9gfw6bnzJNGZW7)sj=Ya<|a0Q@M?y z&j9mrodWI@k0Hedyg8&uKY~-=ca;^`CvhzblXZs%h(%XR0`z|?GN5n2q60`?{rgA& zpfH!rip12k)abIxb>>0WQNoh}o2WXADn0(p*@&mJW5&L$T-PJO8C(;^ zgg2lNy0)UIQf5-8vk_07L;90|T-m9I&PE&^DOY;Z zt;+RW3mnC@4oEG=0KcFsCyGBJrv3Y8#B|gmXZ#}ypgg*t#F%q{?7%@>JAm{O;DmZO_jJX78h%Q1D-$u?Z{7uvxynP)tw~#1+NOTRv z%NXDu;52`(g+K~Xd>%c2+-K4Ax!5ETeH<_k*BRhG31kc~5Z#-iC>=BJ-iX+R%OYYH zE}uM5AjE#08*8F-8~fs+L1QPJdPj z8KVFyp!+!pE6K}?F$n?O031*J=D2t_8y*L45MzH53h02Yki-KhjIO;HlNi90=q5`% zfGOyn7Gn|%n1Jp%i39L7x^ZIc0Q(>xjQ_2~?MFLk-uSVv;%ZzcfLoODHvuPbtp!qv zF-Zmdh^~q6(B2Kp)u%k4>kY*002ovPDHLk FV1kYW9IgNW diff --git a/patches/src/main/resources/custom-branding/mipmap-mdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-mdpi/revanced_adaptive_background_custom.png index f7c252a26fc0c01301161f02e7e222b5b35386a5..ff3c7a4c0d262ac644ac0f56bf4656e78798b896 100644 GIT binary patch delta 15 Xcma!vnV`x3k##~hL&4VOUD5l7 zeXs0wquQeJvF6b>P;e6pDi`suGwT<6#tMD zpkO#UxomcP0l6PApLvJ$zi;hB20ZW=6oA_XKD54hG!MRm+*g=EDzdSOJ~`UqbFD zEPx7>od^XZ@b5-K!3n5P*~<6}a<8HWP1WFK$d#}fDp-GZBNXh2rgnmY8&Ki0?V#Wm zG<7Q!Y>Nt))!+rlm9Q4pM(MwY7G%}XP$>A>DHw{ZN}3g)Le2Obvm>jb4uG1mKe8%o zar_2F_#I0ktHLgTBAkz`N?R2lLheJXnm=%4AOHXW0089w+6bzus;a80s;a80 es;a80swxx%a_FLU#2x?u00002LlMAKy0 zN9z12*!75cKi>cRFFrotd@ZVY4aI9k0q0BY9a+<0UVNM?ow4ABQNRNDLghCs6It`&bgBMPy1(0XSKiTQ4BZu+%IBm4cfp0}+LCA_Fohm9g@IovL_Ta>QpdCL*k_PAAJ zn(^2uVRxz9B5Sin{F|b5b(gCbx}@iw9~Nn#PcH6r*CJ8E&26|SpW$VdI&2W7Gkf3H zNk-9Y6R)#I49*r7f#=Nt@pusOcKBF0zqXr(6+B(`wR{sy* z>_58gW#}q(X)`9JU7~Ge%~*J-e_^HlWSAm#Y|H_UlbRguE5nlbrJ)sIER1hee#6qy z{xX~@H7sU=;ZmnW)-kXi{!@9AWSik!cwMCq8%EY~aI1gRK2gHHQny6bv9PDq9Z|xa zQhP+!u`m~2QK`eG*sQ#q9$JufJPelloubs>=o~UEfG^G2*H|bzj|@kfv!kMO$*>as z!p#20D$)65xCAr1I69{c8{kuwPq9J%Wjde#+k*oE00000Aph4!P*qh`RaI40RaI40 dRaI400n8J*wyxe=wIu)m002ovPDHLkV1levlp+8C diff --git a/patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_background_custom.png index f4e6e1294b311fe7296b4600c5c0c6edc1c32f0e..9cceb9e31b7ef30fcf0db6572da5b11d22c3b305 100644 GIT binary patch delta 64 zcmYdEnV@O?7#L(cT^vIy;@%!KWCZdKDg0i(?WkUYC6LX)@IZV41EcVd Q+I|qn)78&qol`;+00CGPzyJUM delta 64 zcmYdEnV@McEiFAIs@Rr+fkDR8#WAFU@$ErFMj-Ey!tdqVj_M^m0kRnw9*8esV6@)s QQ4ivHy85}Sb4q9e0AXkn^8f$< diff --git a/patches/src/main/resources/custom-branding/mipmap-xxhdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-xxhdpi/revanced_adaptive_background_custom.png index 200224bed5fcff82941aff3e04cf96b900ee942f..b704e544605f8fe99b682ee177d7d60198cc73a4 100644 GIT binary patch delta 72 zcmd1FnV{+X7#LJMT^vIy;@%!)#D7F}6T5iEofT`7WwBEY!y`zv&(s)dST$)%D&Ot@p^u=lEb6#Ms~zk-;QsIJQhECb>XFI*FBl5<^$Q=uQEmF?Q-2> ziZb)tK{LBtKK14tg|Y3#QhQHJTR-7u{UE{=&e2qk)Na(eg0M#Fa)$Bd3-t#=Y@*9TSpY3VySLE(1BkZ9D zsoD#j!!YgzU6L9z|%trf-R)kg41pC6fb_M-`>7&Pvd$N+7hh4l zJeQB$pwIa%qQLreI@?ERgpGy9mH2%`*L@oY%u^B$_>dD`2~%0uS>*W~>RHgd00u#QxD2Q>{bAgxaIYW(#HW$pBBjLuJNLR zWHRPGc$G;$VRSkc8ptBUg@df5_q^`wT#KjY=KqWdS+l0?`L)@y{Oa?2L|+y=I1JfM zQ!1e5gM(U9Bb;lA`sEbavSQq>$}8orPKW9a9D|411aN0lhn3|#ckGc9i7#8t`_pK& zW(tac?Lj9s8U~!E7J!4g($`m7E2u3MPGIxrD0aoDvMei=bw@x;6i^GnWSod)s50DC zY*0~{KY#5($iqiwM%nNK7$54H_XsG#%BQHM=<;3ZP0?lj;QhfYg|u0{e|#o8l~p5V zv3)eNL2bOZkd{tB>#09?(UYFfd9?BbL%^QG@!5s|m%}#ss4wkL7AcoAT04q2)t`zZ z70gw-+t!>+T-{+5#nvCj%X#KOcu83CGEpQ}Wl?rMT5jR6k339gKLj?8f78Ce?8}Go zHcDJeNMSfj&j<}7Uw-$n0rb=5)CBTTmNccYl` z%9f$W{=hv;n~a-Re!8sxbM62_DN>D3M|wMiFK(!evRIcMs?hU+M_O`WWngAPI=WQ%b8K0q*NdT8q1 zoJOub#>ymj#Ef*GW(-KNQX@@(`wr&c9CTE=X^Op`)Rt#|UBicGeu%6ACD|L-<RB92aoh8_me zs!e7YRGqC;!n=La=Dj1D~|-N0**nw6!n8(s2* zQzWF3Ff|W+X-iW@e{pXar(fQxP^aqf=pu120;8tDp?u7dQmU{#IL7XqSWbJ=wA;wK z?}g-|(_|JHa3lYas^?Lli2CYZ10VSi|yZC%{g@O)@E9DU2HO=xN#2$PtyG|_qmlj&uaLbdsp4(45* zhM@;nY#R*nwk#7wEE-)>{KG&DSyXAo-bZq~=;Sat-R(qU4~`{LLq(=XFiDMSwW?eQ z_ZwOy-Ww}oDP8~QB^jFzJkT3VY53M;NDZAj#1`Tws9Z>&e3GfZM%vKX$JJf>qwB9< ziYN-3PvPN9M==R!ELzXQg)43K695;wrNl^OLkHt}kCj|yM1MoyQL1NBvT2PQJRvYy zT_pAewb$C-(x$`nAMEIgYBIMv{6^9^>mB{SYOCMWVzakr)An0P0PYb>k=SI9B2wiO zTqwzMk^m>Qr0}gv8SzZA0s2P>3{lTud_^3Z-!I(y^}Q^m7YWCPY8i|C^76A8H?~lA z8kC$vDulc}GxY}ku;bFrMlN&;&A(t_5=|3{Wvu|$dp>BguH#cR-Hub3pwg+^25>ur zj17CO4GFNNvo61ErTuK| zLhA4j(W#vPw|dkT#_#Hg+RGN!oB<_I;E|g+X}_t+eE$D0#cft32ddvHN7P3WY?P(1 zHP@%JT8=0=?kMEYcR`*S2xPnyb+0_49qk7i75g22CpN3jgRQmlvJ9~UAB1AoEG zHyie9F7)Pj!i8}}gp$aZEnMhq+0PbwaUjqz7#EV|Jc9FioasVJ7C1-Xf)O<7gZq%{ z*OhrvU;5f=-7495*8XedO8AFRS!*2Ir{#?=BCQzIkj9uLYGxs&(Q19w814ckf@rNR z0hZF*S^mTH7zli|isBJkkVm0=H8{(VIp?@^0o2ZL!$o+MU!tA^CHywizS!G1zJDGP z6honQ!+B#Y7pm8c*~SB%P-gylNJ^!_omC~Lk0WX5#slvLc(_V{5@LjxEyBMI#`b-8 zPDcW$3Tsu0}=v`|7 delta 2454 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 U+kV{yS^xk507*qoM6N<$f*fnJfdBvi diff --git a/patches/src/main/resources/custom-branding/mipmap-xxxhdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-xxxhdpi/revanced_adaptive_background_custom.png index 06e80b853181de8d1c94006618d69faf9d8f709a..dc4aad427abf7c3862b15ebbc16fcbdc23e2b360 100644 GIT binary patch delta 82 zcmXRdo1p3Y7#Q?CT^vIy;@%!?1acS-FZdliKY{Hk6NrNe4lu@CU|EiFAIs@Rr+fkD^P#WAEJ?(Km_Acx`bg5SaO6WF$b*jPY8%moHU_O0v& OAURK0KbLh*2~7Y!eG(u5 diff --git a/patches/src/main/resources/custom-branding/mipmap-xxxhdpi/revanced_adaptive_foreground_custom.png b/patches/src/main/resources/custom-branding/mipmap-xxxhdpi/revanced_adaptive_foreground_custom.png index b3674d18828b7cf7cf2fc837c8f226203c7a933e..88f8ebc40bb5c344f5e5df39d23d8f168370b0a5 100644 GIT binary patch delta 3411 zcmV-Z4XpB$9@-v|BLWX0u_YA&e>py`w2i~~Q><;$){Z&&6vrTP6OMX#|M5pX(mej?N2bEE z+|<9n7LV=+7Zn|YPcaA9j=A^&4`Ed#GNqK-6r*4f9EZ@2&3Pm}Hs{f~f3W`|bH?UA zmVyh5j)z4s5}P1VDWy~wya$VD1QtPHUmkYfBBPFeY}BZn$4uHa(hB-73>SnJ!3bDH z@1hHoQYta+1&iqz1U4$~(LG1xJZ|$RBXb_x9WDqR1B+=7D5X?lIu#bvdkE~O+$RqB zCHD!NKl%0OC-;L3Lhr$1e>xdTDV3OxfqB@^1@u$ivn%|V^W^j&bDuP6*R=1CcxXAe z1)=?59?GGVQi*9D%!9?0L0~`RK6U^1xlft2=gIrvf=~t)(>$yNrIbokRh~bLo4A0! zKcd%i-{w6%1}6Vy++WvF;TD88#9UZR!=aQ?iR%!Uhx-uNSNTt$fBALZGbaD`P2Mx7 z!v&%HVIB^GQc5MV4`4A(#4`0Ln);a-Hk90X$1CRZr=?)N3x5UTgmy>ER#)yuNc2dSPn!-YXF!(y6+HIWr5rBpANhn*4FXGcG| z)VrzPzreCey7!3J%6cvh7ld|zd3YXKl2S_f|7i9^sNPBSe>v{$bRWwq1$~Zz3xoU@ zCbB4{l={OqTiG?&bbX_s?;CHV`&w2g==-+uoZ*7_ZqCJv$hwqLssQHUMuh71g8sX` zmhL+bmT>c4PxsjiE)2Q}<{^cwODUzi58cKR2-Pd;e!X8Q=x0gxa$&!oaADBm7~_3P zLzbqLQWwJhe~8f?ujLO~^QD6RQ(y@-4Qs=NL8o}1RG!5trPQ*R42$VAbU~^ zh?mS+7lgXeCZ5AZhr$slrIb1l=HU^9uBte*T}{!DIj~M{Ze4L^N4T))QJ9DQ-G8N& zQtEwJOw+IeLRVRod7`T51?$v`Uw8~IELt8@U@?7&F7CflN-1>$%)_M!U2VnSm4_E+ zCcrwSf0E3k%7V&O;liTJU>=Uc|D=>sY7vZp#q={4M(8p{!!FDe54BFIBy&DoShNs+ zgvB%pi$W=-R6AV{^H7S=^)KkZ@Q~tRpTjztFRKo#S_CdEDua2r7D_3l=F@7P7ngkt zks4Ss?5IH{!>v;(9)1K|6!bbQrkPj`N-3olf6#L<4|^a|14=5ZVVyz$lFE9xC}>ZZ zhi9RbQYxVBVIBq`QhketZ`QY@Y8I@6o6Te05-tiF2=lNblu}BCs0|j=9IS^(^(w8t zw|8l^b!a6ucf&tHr4rWPorlnPl2=HZU$e_+Fx>seYe8rDILeYQu#3UE=-oiGo1 ze^5#(6|!#l8Wz(;ER9G#TT*-4v!%7x5j|H{a|&D(v=k=5V)_={pp;T7Lg&FeoQX*F zFX-Rx>GIn5pDwGl4(6k4_HFJC7X_UK^KdSdQc6W^DNKaL^d-6?QcqRX?*C+2opmIS zm)9Ny7X@|2XRw$iVHqf;l#0>4Fb_u~e{zqPHw=Efyxuy3C(7#w!bL?nFc0@YDWz1* z*25fFOihT~L!}MtKT_T>9rh=i@nCuLhHz0)Gc2aL*Z>|WrIgCRJZy`|Jyh0k(?jKr z_GfyyqVWc}sAwzCnO{TTnNmur{b3%SLgXGSXkPMx9!)<#P|;+6k`ecnRV@t{e-%9q z^RO?-H>H$P@4{l5fmIQ?`zo4`xwoR({tWk&H}!yvidM#SSWF+F3&=O6lv2mSJY0jw znX@i;SG2qi`(w4fb?$v;{f2Q#(7f0;-fMM6YvLo^e5AE~hqt+T8yi>7RRSupq;(k}Je zrNNZVkxXqJyq}1O$l*++j$$#oBpA8}X;<2R@Gc~lAVKQr3~4(eBJwWVX;_!-oEwZS zc40954bl$x?YZ&b5=bmTwG+z<{fLO@PNa^u5u*#Dk<-o(N3@e&5RRULf5cMf*VZH= zB9AqYI(kZs&Wxtad~P`UHquUXPB{ARnc3p3NG!qAo!?%Lh=@D}kQ)09tt3WgMPqv- z?MUJ1o=7ag3h39)@3Dl4h&*;f>gZ~5I3pULg0!8T8IMm!VhyfA>S$LXBBG9)7QKPg z*w<)oF*+^Dt#w*7@e9&6fAvf2Jds#}Ih}j$f2(^lzlezFNTiOA5r)N4i_RK>JtB?;djvVVsuhmUf_f{_xXu&PCd2Gqjg?LEWvc>E$7UyIfaOb zy6Os~j`k9V6QbPF$H#efl@yLdVh#32>gX~dBBHKa+Bqw1L>#i&f8q?sCWTj!8hg2Q z9!RXgC{km;pk;-KheTehohsy4o4?NwRB8U*dB>BSP!YA$ApN8dS)x6j_wnu zBa+hdNT;%Ak$8gpkviH!h={1C3P_FpgccWvgHxsD4@;GQMEXDb>4>DZ5)x~$DEbMh zv62uGQO|`)9i1;ue}|?jmmiX<=>ICIUW&vMT!7Tk{z61VJvXCs2G(b2HgPy?--$U7 zOjqAW`X7CGWK@|Oi8YuNed3(?HIwuOA|g5+siOnLDVwSukWJV0-^yg_86=+IK%|aN zlfFSjL<=})g}s8N6^Fg|et0^3z*N)ey8eB&O6xdCtid$seo#%L;lN> z!K3vITJm|~T+f#LJpgEF8zd){ZKL&Umps$@0YJ;^zvQFD!~Ttue@E;1SIKLM^L$j& ze*n-H_D@bM%SP*1E_s&y0)VzLQptCThyMN1I_^o{fB7{^0MJ&>Pfjk=Me|LcJj1z> z06=>_{LfRu0CdsYZ{7yY17P{&1haoM&jHE3FBf?LwCPvSKPee7>Nh~i$N8TE0MO31 zPfju$MEy3*{}>y9b~kv*mx(fXvE(07pTCzppZ_~706M{O$%$scsLw*ly&e+)bd2$m zSCQNpfAzU3Szr?e03GGpWHC$}jWPeiU1*!+1hjedyDgGyZyf-1twBmYPn5{ZCI5`R`$x%( ze~ER!C>bmO=xRqNC!xio@0Liec~k(<^~OqGVRC!)-5tqqK#mgtP+Xmyh^C6(n>@MJ zRnY?g=1!K%8PR)ZCfAxPdH}%RN}f!V%C{xM$6p&Z`9F+L|N4Iz0buRqWVC1ewY`#S ztQEfk0RJy}KYu4z{jU!I`3b2B6CMBze_z38RR8*ezpZ+@k)N>vz*)&j>EM#T{pt%M zha_L~toRE6FjdJ<$vjxHb59=1zh2o>F95)uB|o)D?ucFjfTdcfz?O_&0)T&(yi$Kz zx$`RzfUR1fz_yG80NfRph&#XP2f&d{EU?3)9|6D^B|kKwynZYhI}!lkiY64;f8~(` z0CP5>z~+bw0Kg+Pme=F%{Hh87Yt~p`YeYo=;D06W)lgm^l>9#`1OU6&P++@7#Qd-Efx(10RJd?vBL6t zx#XWw0|3~(!UEeYY61WQl)P3!Bze8o^IEk5fSF1@NtD+oB{N170Kix!r3h6kH`Cu*ZXz9p3nE=^=2w(Drcy`B$;nj<)8qxq4#yr6yJS5 zCb2BYRlyZak(omM7;$KK2%=^(OE9THuDIOY+75JqAG=s>IQY%(l}G9`+t(O8;u2$! z5gGaVuV{#QZlZzpQs@UIHJ(Py)Pn+ceeqNiZyC`fX&_}P9Su3^*HI&2EiitEol7!D z!{WsoEsfd`t$~;rposppVmMNM&LWHcwKOWX4N|3AkWFMcq2X}o9CV(<#uX;vIGxM+ z)W+D0>}=1Q->3(QJdipKZ*hF3#t*9NU(x6$OY9{Q2uhWC_e%dM0Ev)z4Lm zx%=qh_L=A+dy^r_nB5YYcWkBap%Ev&e_LWv_7D>&n&TJ%HySSmvR}HaURW%S&&R+D zWdS)xI_QuEv0ZkA|4<(*I2Ah5Y+a?yDHUIR;jzmx9uiG|<_Q~JHu#3cUfCO>;eEsnEwW`ZFTbbyyb0XAfFG|wO|K9o3VPFYK@de^502cW;}D-4R=(H1wpKE8zj2<~Pt`zr>Fm_NOhB9)APQzV zfUBTX!2nw+aPXc9`>9pdnXR^K_2+qD9$=p@>5Ci^$uJSs9YVTf>OTddBQ`|m?2_PJ zbAS(WHHl<5pZMnJu@X8`C#)@bg*=obt>OsqwH*f&3Gy!PDo7Ygl<*I(%1CDe_%v|A zq0W36{qSY_$q^*%CdxAR1rkmU;14V!5T7Y4Hm%txGxA4FuY%r*_MIO0GGV~tygLdB zb2HCLLwv5#pNg*oj_Pc<%O7KI(hhcvG|PDR8h}IW8R=M++)=*Iol2Q`nO=W8{%?tr zk-PVG9NQZ+;sAd7sx-W$l}Jl4{EBp;D2%_>AS`5F+wX&aTTl@G`}vHHzDb&P{v|B7 zjKQ~`6ifFgmDZ>!&79 zwM;unJd=5*WZjv&l96Kk`a+SiNj1JZh#*EtO(J!sL0N>L_bhaZ|BbchnH|@xebdo_ zzmt?lH9J^{VV)%x8!4$^nInKH()ngvR1b{EDCQeqd)QGV0{6`T<7rSpty>|*|LV*% zE490z;R_BEOx>jKeD)c9o3Q>8^jLz5a~zj89<`m&@M9Xc5{hhIeJY60?s#Yt8q~@% zN-+Z`KG8C!yel^{9hW#`3AEubi`8d^DtWw--;ym=`fzwsg!+QcR?`pWC*W_z2gXxX zXAO0WQ}_1fPjvZo1lLV`V9C&g5&0mzv+x3EO6Nb}4w0axNhF|H%G-#BV5b(}kMIdir1F`;SJ7ueIduJ;~`MM;DRdT&q@Zzfgj z&bw&y>S^nQk|!Pud8Z?^`g(--&1lQO$sr7vt)R%bVWaR~Eel{G)6?uyc+|ugtnW?p z;syjza$5ySYJuVsj_F7#tS)_gTswwa)d%eHVynir=);x+=qwWH=D$rudUkBE^Eg>! zlYKyltL|oJD_1N3;DDWYlr)^Ic)Raur_s1WxfdxV;25w|NK8!@BUC4m%!#GzW4&gq zzC}0B@@WykKwcwu7$?V@SjBMx+49c~r5kQfNF+gsFu0Go;kIF)vkVZLPtos6LY9A2 zZ@tpPVNsKt)N>DVUsA3*56+9rn|yzYZlHxM+o~RL(32YRMSAZ9*k1r2!7cu)knMIO z_e?iRh>fb8rj_`}v?FbiPYtxU0L=~wzivPQnw2JoVDl(T7L%`3hnH`usw!1QB2D9l zpYdZls?%>ZR79_P(kwOAqipb506$82;cfOjX3LmH_56ax3Z6{Vo^>UDN^w|eXuNKi zbtUXpIs>D5sM{G~g~gWs8sKEo?#=ufc&f*0sJp(dlr4)NmwM*lFpqXe$HM0+ie^?1c-^&4cNpZ(tU&%~1*&-`qu z6gjhX8fM^hpB^^c_huuBB&uDYy;}pBRdp-~@mNO3o}x$pSVlnjBHr!JJ^SGB$;&Mg zm8O33Wd(Cc-%QLt?L2J}*B&?kE+N&Onuhr6P^-Xq8`*v}?v-u04>bkujXMTlcyplo zj)QBDG#p--p>5z&sLP}^aaU>rlkAooMlt(BWW0aB@dc~*pX3OCou?rXlig$2Vj==+ zmxScs{dz&51oGZOObNrU?ikQ>oqA-zM$j$cRi+1+wE2-I*NYYi0RBiMMH+0>SZd9RX4xE*tQflj1|P z@pcpWS{A=1rEJBaqV=AM^P$P;mX&HI4$NlKfaVzVv^dAVOQoy-EcbWw-n>-y&V!H| zQPvnA_#KeQvC5%4Epm4k#(iWrlcjOXx7f^@pwa(3)J^7`N#=7Vy?UdXP~@A2601A% zO-|oeoUQNjTWq5=166&*%OgxO`1^R;A-|;zl>O0NmBfx?OSWEX|q(3s51tKy3lvW7AL zqDqV*tx!*!v2je*rvqKRW$<&9p)O`Az!H-zjc%be(qs9YfIsT zHAPV4Qt!m2?q(@N3tR!Jj z48}`Yo<_fI>aATVqj6|r>qiO-dV#DPoa#KQGE4d?K|y)FzAD#Mt>@d6mKXYrU``>b zckQR&yFZ0`e7%g+i^Ribkh67)$Ca&n^FEVNU9|F!qe}!Y&K~aGJ+Z#C!=7M7b?3L{ zmK)$lWEOq|FWnEQaU|QCper6{X%ocZqf73EWk21(Le^mp#fJuyrx%p-FHr;~gktfb zQqWy>!@+G?o}BiL@H2Sn5Me{zhdI}dgjq@9uS7wLP_uWXE8Wa{We?-$lo^Y%JdC!B z*nTr;^OL%FAY|@D)h@&G1PKvxWwbe^p+bEDm%OO}C}``@fk~C*nEgLhQTTC@k-K@R zGL;60{kR#Z2sJOrAM%uc)-%QmhSvcg3xp~cC zx;#zO;2>(*nYzwW-MKk=pZ*g8ua%jEi&EXEvhu$D7lpz{{%d?O)Dw2zK-;f#8VFT5 zxZ4`4po)h%sQC>G`!1OE1}q!=@oLIvPnWK5sp8SQ2d?a8b5MBLJ0e_+_t79o^qV%T*A^gjK6~5Kvr+nJ?PcKQ;7B@eP|nDP&h-ZEuJ`S`q%~mUh+#O ztZa^e!r?nwoh5Xx1qC&EwUlth?kq?zvQ*dK4hL%7eLqIo+TlT!_s81He}qD{N#~DT zqke+jB~a`0vC?J;j3_)fsruUkwvp8EXGD=$)6j#EL9=lX6EguTh{y9#Em()Zv-YUP t_je>95D4QCFdq{uM?SkozAT0agyPCF|Al)VJ`I{6c$^iMcFybW{{VGQS@r+` From 17623b001d985431a2efdf47acb012a6f3a8e9b4 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 7 Oct 2025 20:02:28 +0400 Subject: [PATCH 63/67] refactor --- .../extension/shared/GmsCoreSupport.java | 28 ++++++++++----- .../shared/patches/CustomBrandingPatch.java | 14 ++++---- .../patches/shared/misc/gms/Fingerprints.kt | 25 +++++++++---- .../shared/misc/gms/GmsCoreSupportPatch.kt | 36 ++++++++++++------- 4 files changed, 67 insertions(+), 36 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java index e37e79e539..993634eaba 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java @@ -31,9 +31,6 @@ @SuppressWarnings("unused") public class GmsCoreSupport { - public static final String PACKAGE_NAME_YOUTUBE = "com.google.android.youtube"; - public static final String PACKAGE_NAME_YOUTUBE_MUSIC = "com.google.android.apps.youtube.music"; - private static final String GMS_CORE_PACKAGE_NAME = getGmsCoreVendorGroupId() + ".android.gms"; private static final Uri GMS_CORE_PROVIDER @@ -53,6 +50,20 @@ public class GmsCoreSupport { @Nullable private static volatile Boolean DONT_KILL_MY_APP_MANUFACTURER_SUPPORTED; + private static String getOriginalPackageName() { + return null; // Modified during patching. + } + + /** + * @return If the current package name is the same as the original unpatched app. + * If `GmsCore support` was not included during patching, this returns true; + */ + public static boolean isPackageNameOriginal() { + String originalPackageName = getOriginalPackageName(); + return originalPackageName == null + || originalPackageName.equals(Utils.getContext().getPackageName()); + } + private static void open(String queryOrLink) { Logger.printInfo(() -> "Opening link: " + queryOrLink); @@ -113,11 +124,10 @@ public static void checkGmsCore(Activity context) { // Verify the user has not included GmsCore for a root installation. // GmsCore Support changes the package name, but with a mounted installation // all manifest changes are ignored and the original package name is used. - String packageName = context.getPackageName(); - if (packageName.equals(PACKAGE_NAME_YOUTUBE) || packageName.equals(PACKAGE_NAME_YOUTUBE_MUSIC)) { + if (isPackageNameOriginal()) { Logger.printInfo(() -> "App is mounted with root, but GmsCore patch was included"); - // Cannot use localize text here, since the app will load - // resources from the unpatched app and all patch strings are missing. + // Cannot use localize text here, since the app will load resources + // from the unpatched app and all patch strings are missing. Utils.showToastLong("The 'GmsCore support' patch breaks mount installations"); // Do not exit. If the app exits before launch completes (and without @@ -250,8 +260,8 @@ private static String getGmsCoreDownload() { }; } - // Modified by a patch. Do not touch. private static String getGmsCoreVendorGroupId() { - return "app.revanced"; + // Modified during patching. + throw new IllegalStateException(); } } diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index 8952334419..ed592ba848 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -1,8 +1,5 @@ package app.revanced.extension.shared.patches; -import static app.revanced.extension.shared.GmsCoreSupport.PACKAGE_NAME_YOUTUBE; -import static app.revanced.extension.shared.GmsCoreSupport.PACKAGE_NAME_YOUTUBE_MUSIC; - import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; @@ -10,6 +7,7 @@ import java.util.ArrayList; import java.util.List; +import app.revanced.extension.shared.GmsCoreSupport; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; import app.revanced.extension.shared.settings.BaseSettings; @@ -81,15 +79,15 @@ private static int numberOfCustomNamesIncludingDummyAliases() { */ public static void setBranding() { try { + if (GmsCoreSupport.isPackageNameOriginal()) { + Logger.printInfo(() -> "App is root mounted. Cannot dynamically change app icon"); + return; + } + Context context = Utils.getContext(); PackageManager pm = context.getPackageManager(); String packageName = context.getPackageName(); - if (packageName.equals(PACKAGE_NAME_YOUTUBE) || packageName.equals(PACKAGE_NAME_YOUTUBE_MUSIC)) { - Logger.printInfo(() -> "App is root mounted. Cannot change dynamically change app icon"); - return; - } - BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get(); final int numberOfCustomNames = numberOfCustomNames(); final int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/gms/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/gms/Fingerprints.kt index b5f613d541..27eebb8ab0 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/gms/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/gms/Fingerprints.kt @@ -1,16 +1,11 @@ package app.revanced.patches.shared.misc.gms import app.revanced.patcher.fingerprint +import app.revanced.patches.shared.misc.gms.EXTENSION_CLASS_DESCRIPTOR import com.android.tools.smali.dexlib2.AccessFlags const val GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME = "getGmsCoreVendorGroupId" -internal val gmsCoreSupportFingerprint = fingerprint { - custom { _, classDef -> - classDef.endsWith("GmsCoreSupport;") - } -} - internal val googlePlayUtilityFingerprint = fingerprint { accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC) returns("I") @@ -28,3 +23,21 @@ internal val serviceCheckFingerprint = fingerprint { parameters("L", "I") strings("Google Play Services not available") } + +internal val gmsCoreSupportFingerprint = fingerprint { + accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC) + returns("Ljava/lang/String;") + parameters() + custom { method, classDef -> + method.name == "getGmsCoreVendorGroupId" && classDef.type == EXTENSION_CLASS_DESCRIPTOR + } +} + +internal val originalPackageNameExtensionFingerprint = fingerprint { + accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC) + returns("Ljava/lang/String;") + parameters() + custom { methodDef, classDef -> + methodDef.name == "getOriginalPackageName" && classDef.type == EXTENSION_CLASS_DESCRIPTOR + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/gms/GmsCoreSupportPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/gms/GmsCoreSupportPatch.kt index ef8743fda4..fb773457f8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/gms/GmsCoreSupportPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/gms/GmsCoreSupportPatch.kt @@ -1,10 +1,18 @@ package app.revanced.patches.shared.misc.gms import app.revanced.patcher.Fingerprint -import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.instructions import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction -import app.revanced.patcher.patch.* +import app.revanced.patcher.patch.BytecodePatchBuilder +import app.revanced.patcher.patch.BytecodePatchContext +import app.revanced.patcher.patch.Option +import app.revanced.patcher.patch.Patch +import app.revanced.patcher.patch.ResourcePatchBuilder +import app.revanced.patcher.patch.ResourcePatchContext +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patcher.patch.resourcePatch +import app.revanced.patcher.patch.stringOption import app.revanced.patches.all.misc.packagename.changePackageNamePatch import app.revanced.patches.all.misc.packagename.setOrGetFallbackPackageName import app.revanced.patches.all.misc.resources.addResources @@ -12,7 +20,8 @@ import app.revanced.patches.all.misc.resources.addResourcesPatch import app.revanced.patches.shared.misc.gms.Constants.ACTIONS import app.revanced.patches.shared.misc.gms.Constants.AUTHORITIES import app.revanced.patches.shared.misc.gms.Constants.PERMISSIONS -import app.revanced.util.* +import app.revanced.util.getReference +import app.revanced.util.returnEarly import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @@ -23,6 +32,8 @@ import com.android.tools.smali.dexlib2.util.MethodUtil import org.w3c.dom.Element import org.w3c.dom.Node +internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/GmsCoreSupport;" + private const val PACKAGE_NAME_REGEX_PATTERN = "^[a-z]\\w*(\\.[a-z]\\w*)+\$" /** @@ -201,19 +212,18 @@ fun gmsCoreSupportPatch( googlePlayUtilityFingerprint.method.returnEarly(0) } + // Set original and patched package names for extension to use. + originalPackageNameExtensionFingerprint.method.returnEarly(fromPackageName) + // Verify GmsCore is installed and whitelisted for power optimizations and background usage. - mainActivityOnCreateFingerprint.method.apply { - addInstructions( - 0, - "invoke-static/range { p0 .. p0 }, Lapp/revanced/extension/shared/GmsCoreSupport;->" + - "checkGmsCore(Landroid/app/Activity;)V", - ) - } + mainActivityOnCreateFingerprint.method.addInstruction( + 0, + "invoke-static/range { p0 .. p0 }, $EXTENSION_CLASS_DESCRIPTOR->" + + "checkGmsCore(Landroid/app/Activity;)V" + ) // Change the vendor of GmsCore in the extension. - gmsCoreSupportFingerprint.classDef.methods - .single { it.name == GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME } - .replaceInstruction(0, "const-string v0, \"$gmsCoreVendorGroupId\"") + gmsCoreSupportFingerprint.method.returnEarly(gmsCoreVendorGroupId!!) executeBlock() } From a8b9dc3307df05a8684d3bee2ce9e8dbe0040311 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 7 Oct 2025 20:13:48 +0400 Subject: [PATCH 64/67] cleanup --- .../patches/music/layout/branding/CustomBrandingPatch.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index a0161e1d87..0fc4879d65 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -4,7 +4,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWith import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.util.smali.ExternalLabel -import app.revanced.patches.music.misc.extension.sharedExtensionPatch import app.revanced.patches.music.misc.gms.Constants.MUSIC_MAIN_ACTIVITY_NAME import app.revanced.patches.music.misc.gms.Constants.MUSIC_PACKAGE_NAME import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint @@ -69,10 +68,7 @@ val customBrandingPatch = baseCustomBrandingPatch( preferenceScreen = PreferenceScreen.GENERAL, block = { - dependsOn( - sharedExtensionPatch, - disableSplashAnimationPatch - ) + dependsOn(disableSplashAnimationPatch) compatibleWith( "com.google.android.apps.youtube.music"( From e828cb54415e53097dd49cac273a6d856cbd37c2 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 7 Oct 2025 21:02:11 +0400 Subject: [PATCH 65/67] png lossless recompression --- .../revanced_header_logo_minimal_dark.png | Bin 3358 -> 3354 bytes .../revanced_header_logo_minimal_light.png | Bin 2989 -> 2986 bytes .../revanced_header_logo_minimal_dark.png | Bin 2131 -> 2126 bytes .../revanced_header_logo_minimal_light.png | Bin 1934 -> 1924 bytes .../revanced_header_logo_minimal_dark.png | Bin 4515 -> 4506 bytes .../revanced_header_logo_minimal_light.png | Bin 4054 -> 4048 bytes .../revanced_header_logo_minimal_dark.png | Bin 7389 -> 7384 bytes .../revanced_header_logo_minimal_dark.png | Bin 7467 -> 7457 bytes .../revanced_header_logo_minimal_light.png | Bin 6744 -> 6735 bytes .../revanced_adaptive_background_custom.png | Bin 97 -> 94 bytes .../revanced_adaptive_background_custom.png | Bin 100 -> 98 bytes .../revanced_adaptive_background_custom.png | Bin 108 -> 108 bytes .../revanced_adaptive_background_custom.png | Bin 118 -> 118 bytes 13 files changed, 0 insertions(+), 0 deletions(-) diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_dark.png index 74622c52374117ae009b8d4c97c59996da184b8a..bf0c300aabcf468b11a15ffa63cc768ef2f01e45 100644 GIT binary patch delta 3351 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 diff --git a/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_light.png b/patches/src/main/resources/change-header/drawable-hdpi/revanced_header_logo_minimal_light.png index 436415fe9d46d7a46e44063c4c02ede557094d20..7434d79a54dde9383a4efb3b4dc22dce8e72beff 100644 GIT binary patch delta 2952 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 BcsBq5 diff --git a/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-mdpi/revanced_header_logo_minimal_dark.png index 679e7d4544f50cff243aaac9514f66818808d995..9206e9f3d54150a9c8326dee66257821bd624866 100644 GIT binary patch delta 2113 zcmV-H2)_5z5Y7;gB!3l2L_t(|0qntn00000fS~=U7pVdO0001h*|i2(*?J)Sd~F-g zwr$(CZ7ce1OV74#+qP|K{;!)k$)q`pce6Li-fWXEZKu;Y=XAbex|<3qAt50!Ha0dt zP=S#@K0ZFk?f5jF0s;a8V`5@@z~L*9-vS6_3sf1n1FT}5V1G9O(pZX)j_w8LUXF{4 zBS1Kw!Gti{QNM;hecjGa14%9MaOh&`czck9KzWIKRdDUu9|9-tV`rua-1k6KR8**& z1Fn}cf&?2S0a6OACInlXU^5foPA;?xOn~zYM>>TFSPdqbJ&TAkeE9Go1bL_gWGUK4 zh$ub!hOwQ@R)2Idsdm=O;EF!d#x09ejYmX8B*Jm8^fQ2}hlht#P+$;+MMscdL@@bB zhFE~IMP_LW3nR0>$|lH=tUnJQ5(C@-9s-YnC%{u8dW8H4Fxo*!NfNALdtaI9Kt7q< zw?IFmE0Taoe3`$azEh3ESznrM1Bw8pN|mB&wQ5l5xPQFVHGd6im$$M7C|hJzYa%aQ zTIpIlAADuU#D}?L_|S&{}=on&764&(+Gn?se)@vKifNwt%iRpKZZCl>3xuMwjngqqc3^T6FdPZ1b{uhBhnX zjE_O;fq!xVMrmLHf8<*r&SXaCV7;uGys#ipNv*A*Xe%!U)l;>xy(E)C&jPu>u#;Q$ z2eRqoDRjJus1WiJK)4OPaG=EN*RKny_psskK8aJB86(2>L+pV==LW$8dV(dsdd4K98g@lBt{oiWn2o$$Q0_0`1wpidb zx78BzlE4;iwOD01L@n_spJe%DY4hE?ccTgE{rmS<(B{GRIs)f~t=GVMAiHqDr>Nfs zz5#4|eCSP9B$%#TFdD@g)1 zvoM&?S@smz3q0ofS!981_Zyb&)tEZAa#-WGWXke~6O3 zefzeW*h;dqUZSzGAT?rpje(88RKSa6?Zg1*W7)4lHW*m|^86sf1(qFWy)fVz%YT;f zY8EcOlbR)X>N?gl(OJm|aczN6i{caUFT zIQa#H)6SjS>4zVFP;IPdb0wH)LIPuEzh|etQDrgczp!qU7?AlucP#JyRSswDV)+WO z)ZS!SUzYU%h?n0W?LEo>y@B72)qjF@OG^?UKcV#-ZrC(PWe^v8d_JM)2ebf^c)Oa- zE6NS^{y;z8LcZeuANcUsP>fA}?b*kjP6F)Z1MHC?G&Gb76evJXo;*RcP=ZR7D2DP= zDp;_fYIEcUaiAFqctAeLNWoaPjT1h~#mG*A&Ou>&8q1b*eF@hW3!R*X(|=_$X4#uJ zZ^~#SSf_1S%~}40Bagmp;t>#F<1o0xfp19yx(j=OnvGSdu@cmC}0!XpxdRbd3zux3L|xI$MpGf7-;&97 zk5BWrxoko7jXcM)9meXItf647!cv5J!b|622#a}70F1ID_6G2?Db>YvGxvzEFWX+ zp~!L>VH%uv*4S^Q9ms!#c$AviTIluEnEhff6GX^m?BDf71ksr|>3<}^b953k6D06P zo=r^VPsNJS32hgFHT>LR#tcU}udvq{_?8Kg9(g`N{E3F13Ma+nY2xh5qIJA%+a= z=8T7O49l1BO7uDF>whHpjo)R16%srF!dNy#nAoHabjCKvVPh8F@2`o&;S$*1B%+Uv z$TG0Kd4^n-f!}}!EK3y0mXFUI{#?(&^@3X8Fn;%P`V}>wQ-*?^%5HtLA9^_4tIb>4 zFnNoqCwxa8et*XSKyGXadHLDS|EV5PLJ^z~-pWH_O2IbXs@uqP?&NYmCwI2}k0Qta zVFXfjP3KOo``*6m{Bam00000NkvXXu0mjf5o!Ap delta 2118 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 FV1hxRts4LU diff --git a/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-xhdpi/revanced_header_logo_minimal_dark.png index 78c9ae091985e9d4081fb2f7d3371fae1abdce84..b33a7c41fe14e964da5846dc36c67bc56978ec31 100644 GIT binary patch delta 4471 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 z+Jj>O0001hLH^c**joVr000000000000000000000000007r6nJQ2OF2gU#Z002ov JPDHLkV1oXve$@Z~ delta 4465 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 z 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

O?1|s^rYl5XWwui^34AX`O^GD4mH*H2e&CvJ` zMponiov5h&`mv5z_&b!mrWW_Zr-3gcQ&tRb_a*pAj=d$&O(e&fCPDUr@i#`67hneb zgMnvR^>qxL?5FB--?RF26??je4}US|+wW|9&2;-^dd)?iwECZLbD~%G2j{U-UUQC3 zR&$3Zbi#d|rW6;Eay`HJ&pp~JOmv;KoDKiqmLdQU(s7Ty+$-H;P&iop-_y$SYI0RF Hh_L?vY-;GJ diff --git a/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_dark.png b/patches/src/main/resources/change-header/drawable-xxxhdpi/revanced_header_logo_minimal_dark.png index 76820c2804790f094e5838603461b40c9f504f9e..beecb30b539e572c1dccf09c953c99a63050657f 100644 GIT binary patch literal 7457 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 U?Vk{n&3`_6TE?2i8jkq?0i9iwQUCw| literal 7467 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 d|Hp-*KijgisV|f}#SEW}%4^ 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 literal 6744 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 diff --git a/patches/src/main/resources/custom-branding/mipmap-hdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-hdpi/revanced_adaptive_background_custom.png index f0c096300118e52e1e6ed209843eacaac2b6f425..1bc5dbe712d02c114b792ac94582307628a3cbd6 100644 GIT binary patch delta 74 zcmYd{n;_}R00gf(wYLE&RZkbkkP616AN{N{3|o|sn}Fn+er-2vm!1=my>{!hsO+`2 Y`CLV!bF_M=yMrV>UHx3vIVCg!09(u$5&!@I delta 77 zcmaz`oFM7J%)r3#!=@zyNHGWagt$I=@?^@BP<`I)7%l(+ diff --git a/patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_background_custom.png b/patches/src/main/resources/custom-branding/mipmap-xhdpi/revanced_adaptive_background_custom.png index 9cceb9e31b7ef30fcf0db6572da5b11d22c3b305..82c15e2b9dcb9b229421fd415f70fa49040be5af 100644 GIT binary patch delta 78 zcmYdEnjq=P00ax81ss5srl*TzNCo5DlZuQC3_MI5zU$WtDHP7WTl;)Y@i|L4vGXje X(dA9e^B!`>gEV`(`njxgN@xNA`-&X) delta 80 zcmYdFnIP%S%)r2~`Q83?K#DoQC&cy1lP6Q2gz5viGM+AuAr*0N4;nH8d508!FW+`l eFToPXW?*7#LJMT^vIy;@%!) Date: Tue, 7 Oct 2025 23:16:30 +0400 Subject: [PATCH 66/67] refactor --- .../shared/patches/CustomBrandingPatch.java | 18 ++------- patches/api/patches.api | 1 + .../layout/branding/CustomBrandingPatch.kt | 2 +- .../branding/BaseCustomBrandingPatch.kt | 40 ++++++++----------- .../shared/layout/branding/Fingerprints.kt | 14 ++----- .../layout/branding/CustomBrandingPatch.kt | 2 +- .../hide/shorts/HideShortsComponentsPatch.kt | 5 ++- .../kotlin/app/revanced/util/ResourceUtils.kt | 7 ++++ 8 files changed, 38 insertions(+), 51 deletions(-) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java index ed592ba848..79a4d54849 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java @@ -54,22 +54,12 @@ private String packageAndNameIndexToClassAlias(String packageName, int appIndex) } } - /** - * Injection point. - * - * The number of app names available in the settings UI. - */ - private static int numberOfCustomNames() { - // Modified during patching. - throw new IllegalStateException(); - } - /** * Injection point. * * The total number of app name aliases, including dummy aliases. */ - private static int numberOfCustomNamesIncludingDummyAliases() { + private static int numberOfPresetAppNames() { // Modified during patching. throw new IllegalStateException(); } @@ -77,6 +67,7 @@ private static int numberOfCustomNamesIncludingDummyAliases() { /** * Injection point. */ + @SuppressWarnings("ConstantConditions") public static void setBranding() { try { if (GmsCoreSupport.isPackageNameOriginal()) { @@ -89,7 +80,6 @@ public static void setBranding() { String packageName = context.getPackageName(); BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get(); - final int numberOfCustomNames = numberOfCustomNames(); final int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get(); ComponentName componentToEnable = null; ComponentName defaultComponent = null; @@ -97,10 +87,10 @@ public static void setBranding() { for (BrandingTheme theme : BrandingTheme.values()) { // Must always update all aliases including custom alias (last index). - final int numberOfNamesIncludingDummies = numberOfCustomNamesIncludingDummyAliases(); + final int numberOfPresetAppNames = numberOfPresetAppNames(); // App name indices starts at 1. - for (int index = 1; index <= numberOfNamesIncludingDummies; index++) { + for (int index = 1; index <= numberOfPresetAppNames; index++) { String aliasClass = theme.packageAndNameIndexToClassAlias(packageName, index); ComponentName component = new ComponentName(packageName, aliasClass); if (defaultComponent == null) { diff --git a/patches/api/patches.api b/patches/api/patches.api index 806d7a46e6..ca6b001475 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -1916,6 +1916,7 @@ public final class app/revanced/util/ResourceUtilsKt { public static final fun forEachChildElement (Lorg/w3c/dom/Node;Lkotlin/jvm/functions/Function1;)V public static final fun insertFirst (Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)V public static final fun iterateXmlNodeChildren (Lapp/revanced/patcher/patch/ResourcePatchContext;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V + public static final fun removeFromParent (Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node; } public final class app/revanced/util/resource/ArrayResource : app/revanced/util/resource/BaseResource { diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt index 0fc4879d65..6f0f460263 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/branding/CustomBrandingPatch.kt @@ -61,7 +61,7 @@ val customBrandingPatch = baseCustomBrandingPatch( originalAppName = "@string/app_launcher_name", originalAppPackageName = MUSIC_PACKAGE_NAME, copyExistingIntentsToAliases = false, - numberOfPresetAppNames = 4, + numberOfPresetAppNames = 5, mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint, mainActivityName = MUSIC_MAIN_ACTIVITY_NAME, activityAliasNameWithIntents = MUSIC_MAIN_ACTIVITY_NAME, diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt index 91bb315a67..d8356aee03 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/BaseCustomBrandingPatch.kt @@ -18,8 +18,10 @@ import app.revanced.util.ResourceGroup import app.revanced.util.Utils.trimIndentMultiline import app.revanced.util.copyResources import app.revanced.util.findElementByAttributeValueOrThrow +import app.revanced.util.removeFromParent import app.revanced.util.returnEarly import org.w3c.dom.Element +import org.w3c.dom.Node import org.w3c.dom.NodeList import java.io.File import java.util.logging.Logger @@ -70,7 +72,7 @@ internal fun baseCustomBrandingPatch( mainActivityName: String, activityAliasNameWithIntents: String, preferenceScreen: BasePreferenceScreen.Screen, - block: ResourcePatchBuilder.() -> Unit = {}, + block: ResourcePatchBuilder.() -> Unit, executeBlock: ResourcePatchContext.() -> Unit = {} ): ResourcePatch = resourcePatch( name = "Custom branding", @@ -108,16 +110,10 @@ internal fun baseCustomBrandingPatch( execute { mainActivityOnCreateFingerprint.method.addInstruction( 0, - "invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->setBranding()V" + "invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->setBranding()V" ) - var totalNamePresets = numberOfPresetAppNames - if (customName != null) { - totalNamePresets++ - } - - customNumberOfNamesIncludingDummyAliasesFingerprint.method.returnEarly(numberOfPresetAppNames + 1) - customNumberOfNamesFingerprint.method.returnEarly(totalNamePresets) + numberOfPresetAppNamesExtensionFingerprint.method.returnEarly(numberOfPresetAppNames) } } ) @@ -325,17 +321,14 @@ internal fun baseCustomBrandingPatch( activityAliasNameWithIntents ).childNodes - val namePrefix = ".revanced_" - val iconResourcePrefix = "revanced_launcher_" - val application = document.getElementsByTagName("application") - .item(0) as Element + val application = document.getElementsByTagName("application").item(0) as Element - val numberOfPresetAppNamesPlusCustom = numberOfPresetAppNames + 1 - for (appNameIndex in 1 .. numberOfPresetAppNamesPlusCustom) { - fun aliasName(name: String): String = namePrefix + name + '_' + appNameIndex + for (appNameIndex in 1 .. numberOfPresetAppNames) { + fun aliasName(name: String): String = ".revanced_" + name + '_' + appNameIndex - val useCustomNameLabel = (useCustomName && appNameIndex == numberOfPresetAppNamesPlusCustom) + val useCustomNameLabel = (useCustomName && appNameIndex == numberOfPresetAppNames) + // Original icon. application.appendChild( createAlias( aliasName = aliasName(ORIGINAL_USER_ICON_STYLE_NAME), @@ -347,11 +340,12 @@ internal fun baseCustomBrandingPatch( ) ) + // Bundled icons. iconStyleNames.forEachIndexed { index, style -> application.appendChild( createAlias( aliasName = aliasName(style), - iconMipmapName = iconResourcePrefix + style, + iconMipmapName = LAUNCHER_RESOURCE_NAME_PREFIX + style, appNameIndex = appNameIndex, useCustomName = useCustomNameLabel, enabled = false, @@ -360,6 +354,8 @@ internal fun baseCustomBrandingPatch( ) } + // User provided custom icon. + // // Must add all aliases even if the user did not provide a custom icon of their own. // This is because if the user installs with an option, then repatches without the option, // the alias must still exist because if it was previously enabled and then it's removed @@ -369,7 +365,7 @@ internal fun baseCustomBrandingPatch( application.appendChild( createAlias( aliasName = aliasName(CUSTOM_USER_ICON_STYLE_NAME), - iconMipmapName = iconResourcePrefix + CUSTOM_USER_ICON_STYLE_NAME, + iconMipmapName = LAUNCHER_RESOURCE_NAME_PREFIX + CUSTOM_USER_ICON_STYLE_NAME, appNameIndex = appNameIndex, useCustomName = useCustomNameLabel, enabled = false, @@ -379,13 +375,11 @@ internal fun baseCustomBrandingPatch( } // Remove the main action from the original alias, otherwise two apps icons - // can be shown in the launcher. Must do this after adding new aliases. + // can be shown in the launcher. Can only be done after adding the new aliases. intentFilters.findElementByAttributeValueOrThrow( "android:name", "android.intent.action.MAIN" - ).let { intent -> - intent.parentNode.removeChild(intent) - } + ).removeFromParent() } executeBlock() diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt index ef7b76ce35..c46cb1a883 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/branding/Fingerprints.kt @@ -1,19 +1,13 @@ package app.revanced.patches.shared.layout.branding import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.AccessFlags -internal val customNumberOfNamesIncludingDummyAliasesFingerprint = fingerprint { +internal val numberOfPresetAppNamesExtensionFingerprint = fingerprint { + accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC) returns("I") parameters() custom { method, classDef -> - method.name == "numberOfCustomNamesIncludingDummyAliases" && classDef.type == EXTENSION_CLASS_DESCRIPTOR - } -} - -internal val customNumberOfNamesFingerprint = fingerprint { - returns("I") - parameters() - custom { method, classDef -> - method.name == "numberOfCustomNames" && classDef.type == EXTENSION_CLASS_DESCRIPTOR + method.name == "numberOfPresetAppNames" && classDef.type == EXTENSION_CLASS_DESCRIPTOR } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index 90e1890d8f..2294ef9b20 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -14,7 +14,7 @@ val customBrandingPatch = baseCustomBrandingPatch( originalAppName = "@string/application_name", originalAppPackageName = YOUTUBE_PACKAGE_NAME, copyExistingIntentsToAliases = true, - numberOfPresetAppNames = 4, + numberOfPresetAppNames = 5, mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint, mainActivityName = YOUTUBE_MAIN_ACTIVITY_NAME, activityAliasNameWithIntents = "com.google.android.youtube.app.honeycomb.Shell\$HomeActivity", diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt index f94b27099b..de715d06c2 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt @@ -27,6 +27,7 @@ import app.revanced.util.forEachLiteralValueInstruction import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstLiteralInstruction +import app.revanced.util.removeFromParent import app.revanced.util.returnLate import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.reference.MethodReference @@ -127,7 +128,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch { ) if (hideShortsAppShortcut == true) { - shortsItem.parentNode.removeChild(shortsItem) + shortsItem.removeFromParent() } } @@ -138,7 +139,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch { ) if (hideShortsWidget == true) { - shortsItem.parentNode.removeChild(shortsItem) + shortsItem.removeFromParent() } } diff --git a/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt b/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt index e9861dad95..b2d8ba287f 100644 --- a/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt +++ b/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt @@ -14,6 +14,13 @@ import java.nio.file.StandardCopyOption private val classLoader = object {}.javaClass.classLoader +/** + * Removes a node from its parent. + * + * @return The node that was removed (object this method was called on). + */ +fun Node.removeFromParent() : Node = parentNode.removeChild(this) + /** * Returns a sequence for all child nodes. */ From 1db46e4b16845753fa8207df0a657603a6f34f48 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 7 Oct 2025 23:17:00 +0400 Subject: [PATCH 67/67] refactor --- .../app/revanced/patches/shared/layout/theme/BaseThemePatch.kt | 2 +- .../patches/shared/misc/spoof/SpoofVideoStreamsPatch.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/layout/theme/BaseThemePatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/layout/theme/BaseThemePatch.kt index de070fb89f..40fb779806 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/layout/theme/BaseThemePatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/layout/theme/BaseThemePatch.kt @@ -79,7 +79,7 @@ internal val darkThemeBackgroundColorOption = stringOption( */ internal fun baseThemePatch( extensionClassDescriptor: String, - block: BytecodePatchBuilder.() -> Unit = {}, + block: BytecodePatchBuilder.() -> Unit, executeBlock: BytecodePatchContext.() -> Unit = {} ) = bytecodePatch( name = "Theme", diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/spoof/SpoofVideoStreamsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/spoof/SpoofVideoStreamsPatch.kt index 7c1c58410d..7395c3983d 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/spoof/SpoofVideoStreamsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/spoof/SpoofVideoStreamsPatch.kt @@ -43,7 +43,7 @@ internal fun spoofVideoStreamsPatch( fixMediaFetchHotConfig: BytecodePatchBuilder.() -> Boolean = { false }, fixMediaFetchHotConfigAlternative: BytecodePatchBuilder.() -> Boolean = { false }, fixParsePlaybackResponseFeatureFlag: BytecodePatchBuilder.() -> Boolean = { false }, - block: BytecodePatchBuilder.() -> Unit = {}, + block: BytecodePatchBuilder.() -> Unit, executeBlock: BytecodePatchContext.() -> Unit = {}, ) = bytecodePatch( name = "Spoof video streams",