package Ġde . der typ 7 2 1 4 . r board theme manager . helper Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . core . app . Share Compat Ċ import Ġandroidx . core . content . File Provider Ċ import Ġcom . der typ 7 2 1 4 . logs . helpers . Logger Ċ import Ġcom . j ared rum ml er . android . shell . Shell Ċ import Ġcom . top john wu . superuser . io . Su File Ċ import Ġcom . top john wu . superuser . io . Su FileInputStream Ċ import Ġcom . top john wu . superuser . io . Su File OutputStream Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . Application Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . Config Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . Config . G BOARD _ PACKAGE _ NAME Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . Config . MAG IS K _ THEME _ LOC Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . R Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . core . moveTo Cache Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . core . run As Command Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . data . Module Meta Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . data . Theme Data Class Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . utils . FileUtils . get Theme Pack s Path Ċ import Ġde . der typ 7 2 1 4 . r board theme manager . utils . Mag isk Utils Ċ import Ġjava . io . File Ċ import Ġjava . nio . charset . Charset Ċ Ċ enum Ġclass ĠR K BD Flag Type ( val Ġraw Value : ĠString ) Ġ{ ĊĠĠĠ Ġboolean (" boolean "), ĊĠĠĠ Ġlong (" long "), ĊĠĠĠ Ġstring (" string ") Ċ } Ċ Ċ enum Ġclass ĠR K BD Flag ( val Ġraw Value : ĠString ) Ġ{ ĊĠĠĠ ĠEmoji Compat Fix (" emoji _ compat _ app _ whitelist "), ĊĠĠĠ ĠEnable Joystick Delete (" enable _ jo ystick _ delete "), ĊĠĠĠ ĠDeprec ate Search (" de prec ate _ search "), ĊĠĠĠ ĠThe med NavBar Style (" the med _ nav _ bar _ style "), ĊĠĠĠ ĠEnable Sharing (" enable _ sharing "), ĊĠĠĠ ĠEnable Email Provider Completion (" enable _ email _ provider _ completion "), ĊĠĠĠ ĠEmoji Picker V 2 Columns (" emo j ip icker v 2 _ columns "), ĊĠĠĠ ĠEnable Popup View V 2 (" enable _ popup _ view _ v 2 "), ĊĊĠĠĠ Ġ// Log g ging Ġflags ĊĠĠĠ ĠLogging 1 (" log _ all _ st icker _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 2 (" log _ all _ gif _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 3 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 4 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 5 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 6 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 7 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 8 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 9 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 1 0 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 1 1 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 1 2 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĠĠĠ ĠLogging 1 3 (" log _ all _ emoji _ shares _ to _ training _ cache "), ĊĊĠĠĠ Ġ// ĠPreference Ġflags ĊĠĠĠ ĠKeyboard Height Ratio (" keyboard _ height _ ratio "), ĊĠĠĠ ĠEnable Key Border (" enable _ key _ border "), ĊĠĠĠ ĠEnable Secondary Symbols (" enable _ secondary _ symbols "), ĊĠĠĠ ĠShow Suggestions (" show _ suggestions ") Ċ } Ċ Ċ enum Ġclass ĠR K BD File ( val Ġraw Value : ĠString ) Ġ{ ĊĠĠĠ ĠFlags (" flag _ value . xml "), ĊĠĠĠ ĠPreferences (" com . google . android . input method . latin _ preferences . xml ") Ċ } Ċ Ċ enum Ġclass ĠR K BD Prop ( val Ġraw Value : ĠString ) Ġ{ ĊĠĠĠ ĠBottom Padding (" ro . com . google . ime . kb _ pad _ port _ b "), ĊĠĠĠ ĠRight Padding (" ro . com . google . ime . kb _ pad _ port _ r "), ĊĠĠĠ ĠLeft Padding (" ro . com . google . ime . kb _ pad _ port _ l "), ĊĠĠĠ ĠBottom Land Padding (" ro . com . google . ime . kb _ pad _ land _ b "), ĊĠĠĠ ĠRight Land Padding (" ro . com . google . ime . kb _ pad _ land _ r "), ĊĠĠĠ ĠLeft Land Padding (" ro . com . google . ime . kb _ pad _ land _ l "), ĊĠĠĠ ĠBottom C orners (" ro . com . google . ime . corner _ key _ l ") Ċ } Ċ Ċ object ĠTheme Helper Ġ{ ĊĊĠĠĠ Ġfun Ġinstall Theme ( zip : ĠFile , Ġmove : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Shell . SU . available ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( zip . extension Ġ== Ġ" pack ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication . context . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstall Dir Ġ= ĠFile ( it . cacheDir , Ġ" tmp Install ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Zip Ġ= ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Theme Pack s Path ( it ). apply Ġ{ Ġif Ġ(! exists ()) Ġmkdir s () Ġ}, Ġzip . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! move Ġ|| Ġ" cp Ġ${ zip . absolute Path } Ġ${ new Zip . absolute File }". run As Command ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZip Helper (). unpack Zip ( install Dir . absolute Path , Ġnew Zip . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Zip . delete On Exit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( install Dir . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġno Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstall Dir . list Files ()?. forEach Ġ{ Ġtheme Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( install Theme ( theme ) Ġ&& Ġ! no Error ) Ġno Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstall Path Ġ= ĠSu File ( MAG IS K _ THEME _ LOC , Ġzip . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" cp Ġ${ zip . absolute Path } Ġ${ install Path . absolute Path } Ġ&& Ġchmod Ġ 6 4 4 Ġ${ install Path . absolute Path }". run As Command () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Sd Card Path ") ĊĠĠĠ Ġfun Ġapply Theme ( name : ĠString , Ġwith B orders : ĠBoolean Ġ= Ġfalse ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Shell . SU . available ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinput PackageName Ġ= ĠG BOARD _ PACKAGE _ NAME ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ data / data /$ input PackageName / shared _ prefs /${ input PackageName }_ preferences . xml " ĊĠĠĠĠĠĠĠ ĠLogger . log ( Logger . Companion . Type . INFO , Ġ" AP PLY ", Ġ"$ name Ġ$ input PackageName Ġ$ fileName ") ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠSu FileInputStream ( Su File ( fileName )). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . buffered Reader (). read Text () ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġchanged Ġ= Ġit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġif Ġ( changed . contains ("< string Ġname =\" additional _ keyboard _ theme \"> ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< string Ġname =\" additional _ keyboard _ theme \"> .* </ string >". to Regex (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< string Ġname =\" additional _ keyboard _ theme \"> system :$ name </ string >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< map >", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< map >< string Ġname =\" additional _ keyboard _ theme \"> system :$ name </ string >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChange Ġenable _ key _ border Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġif Ġ( changed . contains ("< boolean Ġname =\" enable _ key _ border \"" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< boolean Ġname =\" enable _ key _ border \" Ġvalue =\" .* \" Ġ/> ". to Regex (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< boolean Ġname =\" enable _ key _ border \" Ġvalue =\" $ with B orders \" Ġ/> " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< map >", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< map >< boolean Ġname =\" enable _ key _ border \" Ġvalue =\" $ with B orders \" Ġ/> " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġchanged ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSu File OutputStream ( File ( fileName )). writer ( Charset . default Charset ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ ĠoutputStream Writer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream Writer . write ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" am Ġforce - stop Ġ$ input PackageName ". run As Command () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Sd Card Path ") ĊĠĠĠ Ġfun Ġget Active Theme (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Shell . SU . available ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinput PackageName Ġ= Ġ" com . google . android . input method . latin " ĊĠĠĠĠĠĠĠ Ġval Ġfile L ol Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSu File ("/ data / data /$ input PackageName / shared _ prefs /${ input PackageName }_ preferences . xml ") ĊĠĠĠĠĠĠĠ Ġreturn ĠSu FileInputStream ( file L ol ). use Ġ{ Ġit . buffered Reader (). read Text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ("< string Ġname =\" additional _ keyboard _ theme \"> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( it . size Ġ> Ġ 1 ) Ġit [ 1 ]. split ("</ string > ")[ 0 ] Ġelse Ġ"" Ġ}. replace (" system :", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (". zip ", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshare Themes ( context : ĠActivity , Ġthemes : ĠList < Theme Data Class >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= ĠArrayList < File >() ĊĠĠĠĠĠĠĠ Ġthemes . map Ġ{ Ġit . moveTo Cache ( context ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠFile ( it . path . remove Suffix (". zip ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . add ( File ( it . path )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image . exists ()) Ġfiles . add ( image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġzip Ġ= ĠFile ( context . cacheDir , Ġ" themes . pack ") ĊĠĠĠĠĠĠĠ Ġzip . delete On Exit () ĊĠĠĠĠĠĠĠ ĠZip Helper (). zip ( files . map Ġ{ Ġit . absolute Path Ġ}, Ġzip . absolute Path ) ĊĠĠĠĠĠĠĠ Ġfiles . forEach Ġ{ Ġit . delete On Exit () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠFile Provider . get Uri For File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . packageName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠShare Compat . Intent Builder . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Stream ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType (" application / pack ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. intent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setData And Type ( uri , Ġ" application / pack ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . create Chooser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . share _ themes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply Flag ( flag : ĠR K BD Flag , Ġvalue : ĠAny , Ġflag Type : ĠR K BD Flag Type , Ġfile : ĠR K BD File Ġ= ĠR K BD File . Flags ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Shell . SU . available ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinput PackageName Ġ= ĠG BOARD _ PACKAGE _ NAME ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" data / data /$ input PackageName / shared _ prefs /${ file . raw Value }" ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠSu FileInputStream ( Su File ( fileName )). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . buffered Reader (). read Text () ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfile Text Ġ= Ġit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flag Type Ġ!= ĠR K BD Flag Type . string ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Text . contains ("< ${ flag Type . raw Value } Ġname =\" ${ flag . raw Value }\ "" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" < ${ flag Type . raw Value } Ġname ="${ flag . raw Value }" Ġvalue =" .* " Ġ/> """. to Regex (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" < ${ flag Type . raw Value } Ġname ="${ flag . raw Value }" Ġvalue ="$ value " Ġ/> """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< map >", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" < map >< ${ flag Type . raw Value } Ġname ="${ flag . raw Value }" Ġvalue ="$ value " Ġ/> """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Text . contains ("< ${ flag Type . raw Value } Ġname =\" ${ flag . raw Value }\ "> ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" < ${ flag Type . raw Value } Ġname ="${ flag . raw Value }"> .* </ string > """. to Regex (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" < ${ flag Type . raw Value } Ġname ="${ flag . raw Value } ">$ value </ string > """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< map >", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" < map >< ${ flag Type . raw Value } Ġname ="${ flag . raw Value } ">$ value </ string > """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġfile Text ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠSu File OutputStream ( File ( fileName )). writer ( Charset . default Charset ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ ĠoutputStream Writer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream Writer . write ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" am Ġforce - stop Ġ$ input PackageName ". run As Command () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply Prop ( prop : ĠR K BD Prop , Ġvalue : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= ĠModule Meta ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig . MODULE _ ID Ġ+ Ġ"_ addon ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" R board ĠThe mes ĠAdd on ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" v 2 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" R KB DI Ġ& ĠDer Typ 7 2 1 4 Ġ& ĠN ylon ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Addon Ġfor ĠR board ĠThe mes Ġapp " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" system . prop ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ prop . raw Value } =$ value " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠMag isk Utils . update Module ( meta , Ġfile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġlogging Flags Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 1 , ĠR K BD Flag . Logging 2 , ĠR K BD Flag . Logging 3 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 4 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 5 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 6 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 7 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 8 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 9 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 1 0 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 1 1 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 1 2 , ĊĠĠĠĠĠĠĠ ĠR K BD Flag . Logging 1 3 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġget Sounds Directory (): ĠSu File ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct Media Ġ= ĠSu File ("/ system / product / media / audio / ui / Key press Standard . ogg ") ĊĠĠĠĠĠĠĠ Ġval Ġsystem Media Ġ= ĠSu File ("/ system / media / audio / ui / Key press Standard . ogg ") ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( product Media . exists () Ġ&& Ġproduct Media . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSu File ("/ system / product / media ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( system Media . exists () Ġ&& Ġsystem Media . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSu File ("/ system / media ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ