package Ġcom . sh ogo 8 2 1 4 8 . ribbon izer . plugin Ċ Ċ import Ġcom . android . build . gradle . App Extension Ċ import Ġcom . android . build . gradle . api . Application Variant Ċ import Ġcom . sh ogo 8 2 1 4 8 . ribbon izer . Filter Builder Ċ import Ġcom . sh ogo 8 2 1 4 8 . ribbon izer . resource . Adaptive Icon Ċ import Ġcom . sh ogo 8 2 1 4 8 . ribbon izer . resource . Image Icon Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . tasks . Internal Ċ import Ġorg . gradle . api . tasks . Task Action Ċ import Ġjava . io . File Ċ import Ġjava . util . stream . Stream Ċ Ċ open Ġclass ĠR ibbon izer Task Ġ: ĠDefault Task () Ġ{ ĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( filter Builders . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġt 0 Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġnames Ġ= ĠHashSet ( icon Names ) ĊĠĠĠĠĠĠĠ Ġnames . addAll ( launcher Icon Names ) ĊĠĠĠĠĠĠĠ Ġinfo ( names . toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġri bb on izer Ġ= ĠR ibbon izer ( name , Ġproject , Ġvariant , Ġoutput Dir , Ġfilter Builders ) ĊĠĠĠĠĠĠĠ Ġnames . forEach Ġ{ Ġname : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġri bb on izer . find Resource Files ( name ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . extension ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" xml " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= ĠAdapt ive Icon ( ribbon izer , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġri bb on izer . process ( icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" png " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= ĠImage Icon ( ribbon izer , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġri bb on izer . process ( icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinfo (" task Ġfinished Ġin Ġ" Ġ+ Ġ( System . currentTimeMillis () Ġ- Ġt 0 ) Ġ+ Ġ" ms ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinfo ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . logger . info (" [$ name ] Ġ$ message ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlauncher Icon Names : ĠSet < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnames Ġ= ĠHashSet < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Manifest Files . forEach Ġ{ Ġmanifest File : ĠFile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo (" manifest File : Ġ" Ġ+ Ġmanifest File . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames . addAll ( Resources . launcher Icons ( manifest File )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo (" Exception : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnames ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġandroid Manifest Files : ĠStream < File > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Ġ= Ġproject . extensions . findBy Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Extension :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf < String >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" main ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . build Type . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . flavor Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). stream (). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. distinct (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Set Ġ= Ġandroid ?. source Sets ?. find ByName ( it ) Ġ?: Ġreturn @ map Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . file ( file Set . manifest . src File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. exists () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit !! Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġlateinit Ġvar Ġvariant : ĠApplication Variant ĊĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġlateinit Ġvar Ġoutput Dir : ĠFile ĊĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġlateinit Ġvar Ġicon Names : ĠSet < String > ĊĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġlateinit Ġvar Ġfilter Builders : ĠList < Filter Builder > ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNAME Ġ= Ġ" ribbon ize " ĊĠĠĠ Ġ} Ċ }