package Ġcom . ta ilo red apps . gradle . localize Ċ Ċ import Ġcom . ta ilo red apps . gradle . localize . extension .* Ċ import Ġcom . ta ilo red apps . gradle . localize . util . Path ToFile Manager Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ Ċ internal Ġconst Ġval ĠP LU GIN _ CONFIGURATION _ EXTENSION _ NAME Ġ= Ġ" localize Config " Ċ internal Ġconst Ġval ĠDEFAULT _ LOCAL IZATION _ PATH Ġ= Ġ"./ src / main / res " Ċ internal Ġconst Ġval ĠDEFAULT _ BASE _ LANGUAGE Ġ= Ġ" en " Ċ Ċ internal Ġconst Ġval ĠP LU GIN _ TASK _ GROUP _ NAME Ġ= Ġ" localization " Ċ Ċ // created Ġusing Ġthis Ġtutorial : Ġhttps :// d zone . com / articles / the - complete - custom - gradle - plugin - building - t utor ia Ċ class ĠGradle Local ize Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlocal ize : ĠLocal ize Ġby Ġlazy Ġ{ ĠLocal ize () Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġextension Mer ger : ĠExtension Mer ger ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpath ToFile Manager : ĠPath ToFile Manager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconfig Provider : ĠConfig Provider ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconfig Verifier : ĠConfig Verifier ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpath ToFile Manager Ġ= ĠPath ToFile Manager ( project ) ĊĠĠĠĠĠĠĠ Ġextension Mer ger Ġ= ĠExtension Mer ger ( path ToFile Manager Ġ= Ġpath ToFile Manager ) ĊĠĠĠĠĠĠĠ Ġconfig Provider Ġ= ĠConfig Provider ( extension Mer ger Ġ= Ġextension Mer ger ) ĊĠĠĠĠĠĠĠ Ġconfig Verifier Ġ= ĠConfig Verifier () ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġproject . extensions . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP LU GIN _ CONFIGURATION _ EXTENSION _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Local ize Extension :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġextension . product Config Container Ġ= Ġproject . container ( Product Local ize Extension :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġproject . tasks . create (" localize ") Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . do Last Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Task ( project , Ġextension ) Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize . localize ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Imports Ġstrings Ġfrom Ġa Ġlocalization Ġsheet " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= ĠP LU GIN _ TASK _ GROUP _ NAME ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck Localization Ġ= Ġproject . tasks . create (" check Localization ") Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . do Last Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Task ( project , Ġextension ) Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize . check ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Checks Ġwhether Ġthe Ġlocal Ġlocal izations Ġare Ġup - to - date ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= ĠP LU GIN _ TASK _ GROUP _ NAME ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// add Ġthe Ġ[ check Localization ] Ġtask Ġto Ġthe Ġ` check ` Ġtask Ġif Ġnot Ġconfigured Ġotherwise ĊĠĠĠĠĠĠĠ Ġif Ġ( extension . addTo Check Task ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . tasks . get ByName (" check "). depends On ( check Localization ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Task ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġbase Config : ĠBase Local ize Extension , ĊĠĠĠĠĠĠĠ Ġtask To Run : Ġsuspend Ġ( config : ĠLocalization Config ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfigs Ġ= Ġconfig Provider . get Product Aware Configs ( base Config ) ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Verifier . check Configuration ( project . project Dir , Ġconfig ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask To Run . invoke ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġit . await () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ