package Ġcom . ben ny . open launcher . util Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . ACTIVITY _ SERVICE Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . os . Stat Fs Ċ import Ġandroid . provider . Contacts Contract Ċ import Ġandroid . support . annotation . Color Int Ċ import Ġandroid . support . annotation . Drawable Res Ċ import Ġandroid . text . format . Formatter Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . ben ny . open launcher . Build Config Ċ import Ġcom . ben ny . open launcher . R Ċ import Ġcom . ben ny . open launcher . core . activity . Core Home Ċ import Ġcom . ben ny . open launcher . core . util . Tool Ċ import Ġjava . io .* Ċ import Ġjava . util .* Ċ Ċ fun ĠTool . split ( string : ĠString , Ġdelim : ĠString ): ĠArray < String > Ġ{ ĊĠĠĠ Ġval Ġlist Ġ= ĠArrayList < String >() ĊĠĠĠ Ġval Ġchar Arr Ġ= Ġstring . toCharArray () ĊĠĠĠ Ġval Ġdelim Arr Ġ= Ġdelim . toCharArray () ĊĠĠĠ Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠ Ġwhile Ġ( i Ġ< Ġchar Arr . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġk Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġdelim Arr . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Arr [ i Ġ+ Ġj ] Ġ== Ġdelim Arr [ j ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( k Ġ== Ġdelim Arr . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( counter Ġ< Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Ġ+= Ġchar Arr [ counter ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġi Ġ+ Ġk ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġs Ġ= Ġ"" ĊĠĠĠ Ġif Ġ( counter Ġ< Ġchar Arr . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( counter Ġ< Ġchar Arr . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ġ+= Ġchar Arr [ counter ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlist . add ( s ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġlist . to Typed Array () Ċ } Ċ Ċ fun ĠTool . get Contact ID From Number ( context : ĠContext , Ġcontact Number : ĠString ): ĠLong Ġ{ ĊĠĠĠ Ġval ĠUri Contact Number Ġ= ĠUri . encode ( contact Number ) ĊĠĠĠ Ġvar Ġphone Contact ID Ġ= ĠRandom (). nextInt (). to Long () ĊĠĠĠ Ġval Ġcontact Lookup Cursor Ġ= Ġcontext . content Resolver . query ( Uri . with App ended Path ( Contacts Contract . Phone Lookup . CONTENT _ FILTER _ URI , ĠUri Contact Number ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Contacts Contract . Phone Lookup . DISPLAY _ NAME , ĠContact s Contract . Phone Lookup ._ ID ), Ġnull , Ġnull , Ġnull ) ĊĠĠĠ Ġwhile Ġ( contact Lookup Cursor !!. moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġphone Contact ID Ġ= Ġcontact Lookup Cursor . getLong ( contact Lookup Cursor . getColumnIndex OrThrow ( Contacts Contract . Phone Lookup ._ ID )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcontact Lookup Cursor . close () ĊĠĠĠ Ġreturn Ġphone Contact ID Ċ } Ċ Ċ fun ĠTool . factor Color Brightness ( color : ĠInt , Ġbrightness Factor Percent : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġcolor Ġ= Ġcolor ĊĠĠĠ Ġval Ġh sv Ġ= ĠFloat Array ( 3 ) ĊĠĠĠ ĠColor . color To H SV ( color , Ġh sv ) ĊĠĠĠ Ġh sv [ 2 ] Ġ*= Ġ( brightness Factor Percent Ġ/ Ġ 1 0 0 . 0 ). toFloat () ĊĠĠĠ Ġh sv [ 2 ] Ġ= Ġif Ġ( h sv [ 2 ] Ġ> Ġ 2 5 5 ) Ġ 2 5 5 f Ġelse Ġh sv [ 2 ] ĊĠĠĠ Ġcolor Ġ= ĠColor . H SV To Color ( h sv ) ĊĠĠĠ Ġreturn Ġcolor Ċ } Ċ Ċ fun ĠTool . fetch Thumbnail Id ( context : ĠContext , ĠphoneNumber : ĠString ): ĠInt ? Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= ĠUri . with App ended Path ( Contacts Contract . Common Data Kinds . Phone . CONTENT _ FILTER _ URI , ĠUri . encode ( phoneNumber )) ĊĠĠĠ Ġval Ġcursor Ġ= Ġcontext . content Resolver . query ( uri , ĠarrayOf ( Contacts Contract . Contacts . PH OTO _ ID ), Ġnull , Ġnull , ĠContact s Contract . Contacts . DISPLAY _ NAME Ġ+ Ġ" ĠASC ") ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġthumbnail Id : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor !!. moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail Id Ġ= Ġcursor . getInt ( cursor . getColumnIndex ( Contacts Contract . Contacts . PH OTO _ ID )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthumbnail Id ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġcursor !!. close () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠTool . fetch Thumbnail ( context : ĠContext , ĠphoneNumber : ĠString ): ĠBitmap ? Ġ{ ĊĠĠĠ Ġprint ( phoneNumber ) ĊĠĠĠ Ġval Ġthumbnail Id Ġ= Ġfetch Thumbnail Id ( context , ĠphoneNumber ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġuri Ġ= ĠContent U ris . with App ended Id ( Contacts Contract . Data . CONTENT _ URI , Ġthumbnail Id . to Long ()) ĊĠĠĠ Ġval Ġcursor Ġ= Ġcontext . content Resolver . query ( uri , ĠarrayOf ( Contacts Contract . Common Data Kinds . Photo . PH OTO ), Ġnull , Ġnull , Ġnull ) ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġthumbnail : ĠBitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor !!. moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthumbnail Bytes Ġ= Ġcursor . get Blob ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( thumbnail Bytes Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail Ġ= ĠBitmap Factory . decode ByteArray ( thumbnail Bytes , Ġ 0 , Ġthumbnail Bytes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthumbnail ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġcursor !!. close () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠTool . open Photo ( context : ĠContext , Ġnumber : ĠString ): ĠBitmap ? Ġ{ ĊĠĠĠ Ġprint ( number ) ĊĠĠĠ Ġval Ġcontact Id Ġ= ĠTool . get Contact ID From Number ( context , Ġnumber ) ĊĠĠĠ Ġval Ġcontact Uri Ġ= ĠContent U ris . with App ended Id ( Contacts Contract . Contacts . CONTENT _ URI , Ġcontact Id ) ĊĠĠĠ Ġval Ġphoto Uri Ġ= ĠUri . with App ended Path ( contact Uri , ĠContact s Contract . Contacts . Photo . CONTENT _ DIRECTORY ) ĊĊĠĠĠ Ġval Ġcursor Ġ= Ġcontext . content Resolver . query ( photo Uri , ĠarrayOf ( Contacts Contract . Contacts . Photo . PH OTO ), Ġnull , Ġnull , Ġnull ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġcursor . get Blob ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode Stream ( ByteArray InputStream ( data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ fun ĠTool . is Package Installed ( packageName : ĠString , Ġpackage Manager : ĠPackage Manager ): ĠBoolean Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġpackage Manager . get Package Info ( packageName , ĠPackage Manager . GET _ ACTIV ITIES ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun ĠTool . start App ( context : ĠContext , Ġapp : ĠApp Manager . App ) Ġ{ ĊĠĠĠ Ġif Ġ( app . packageName Ġ== Ġ" com . ben ny . open launcher ") Ġ{ ĊĠĠĠĠĠĠĠ ĠLaunch er Action . Run Action ( Launcher Action . Action . Launcher Settings , Ġcontext ) ĊĠĠĠĠĠĠĠ ĠCore Home . consume Next Resume Ġ= Ġtrue ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ MAIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . set ClassName ( app . packageName , Ġapp . className ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Home . consume Next Resume Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( context , ĠR . string . toast _ app _ un installed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠTool . start App ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠ Ġif Ġ( intent . component !!. packageName Ġ== Ġ" com . ben ny . open launcher ") Ġ{ ĊĠĠĠĠĠĠĠ ĠLaunch er Action . Run Action ( Launcher Action . Action . Launcher Settings , Ġcontext ) ĊĠĠĠĠĠĠĠ ĠCore Home . consume Next Resume Ġ= Ġtrue ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Home . consume Next Resume Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( context , ĠR . string . toast _ app _ un installed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠTool . getStart App Intent ( app : ĠApp Manager . App ): ĠIntent Ġ{ ĊĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ MAIN ) ĊĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠ Ġintent . set ClassName ( app . packageName , Ġapp . className ) ĊĠĠĠ Ġreturn Ġintent Ċ } Ċ Ċ val ĠTool . btn Color Mask Controller : ĠView . On Touch Listener ĊĠĠĠ Ġget () Ġ= ĠView . On Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . animate (). scale Y ( 1 . 1 f ). scale X ( 1 . 1 f ). duration Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( v Ġas ĠTextView ). setTextColor ( Color . rgb ( 2 0 0 , Ġ 2 0 0 , Ġ 2 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Touch Listener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . animate (). scale Y ( 1 f ). scale X ( 1 f ). duration Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( v Ġas ĠTextView ). setTextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Touch Listener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} Ċ Ċ fun ĠTool . write ToFile ( name : ĠString , Ġdata : ĠString , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Writer Ġ= ĠOutputStream Writer ( context . open File Output ( name , ĠContext . MODE _ PRIVATE )) ĊĠĠĠĠĠĠĠ ĠoutputStream Writer . write ( data ) ĊĠĠĠĠĠĠĠ ĠoutputStream Writer . close () ĊĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Throws ( Exception :: class ) Ċ private Ġfun ĠTool . convert Stream ToString (` is `: ĠInputStream ): ĠString Ġ{ ĊĠĠĠ Ġval Ġreader Ġ= ĠBufferedReader ( InputStream Reader (` is ` )) ĊĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠ Ġvar Ġline : ĠString ? Ġ= Ġreader . readLine () ĊĠĠĠ Ġwhile Ġ( line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsb . append ( line ). append ("\ n ") ĊĠĠĠĠĠĠĠ Ġline Ġ= Ġreader . readLine () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreader . close () ĊĠĠĠ Ġreturn Ġsb . toString () Ċ } Ċ Ċ fun ĠTool . getString FromFile ( name : ĠString , Ġcontext : ĠContext ): ĠString ? Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfin Ġ= Ġcontext . open File Input ( name ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġconvert Stream ToString ( fin ) ĊĠĠĠĠĠĠĠ Ġfin . close () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠTool . wrap Color Tag ( str : ĠString , Ġ@ Color Int Ġcolor : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġ"< font Ġcolor ='" Ġ+ ĠString . format ("# % 0 6 X ", Ġ 0 x FFFFFF Ġand Ġcolor ) Ġ+ Ġ" '>" Ġ+ Ġstr Ġ+ Ġ"</ font >" Ċ } Ċ Ċ @ Suppress Lint (" Default Locale ") Ċ fun ĠTool . get RAM _ Info ( context : ĠContext ): ĠString Ġ{ ĊĠĠĠ Ġval Ġact Manager Ġ= Ġcontext . getSystem Service ( ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĠĠĠ Ġval Ġmem Info Ġ= ĠActivity Manager . Memory Info () ĊĠĠĠ Ġact Manager . get Memory Info ( mem Info ) ĊĊĠĠĠ Ġreturn ĠString . format ("< big >< big >< b >% s </ b ></ big ></ big >< br \\ >% s Ġ/ Ġ% s ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . memory ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFormatter . format FileSize ( context , Ġmem Info . avail Mem ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFormatter . format FileSize ( context , Ġmem Info . total Mem ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Suppress Lint (" Default Locale ") Ċ fun ĠTool . get Storage _ Info ( context : ĠContext ): ĠString Ġ{ ĊĠĠĠ Ġval Ġexternal Files Dir Ġ= ĠEnvironment . get External Storage Directory () Ġ?: Ġreturn Ġ" ?" ĊĠĠĠ Ġval Ġstat Ġ= ĠStat Fs ( external Files Dir . path ) ĊĠĠĠ Ġval ĠblockSize Ġ= Ġstat . block Size . to Long () ĊĠĠĠ Ġreturn ĠString . format ("< big >< big >< b >% s </ b ></ big ></ big >< br \\ >% s Ġ/ Ġ% s ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . storage ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFormatter . format FileSize ( context , ĠblockSize Ġ* Ġstat . available Blocks ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFormatter . format FileSize ( context , ĠblockSize Ġ* Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 2 ) Ġstat . block Count Long Ġelse Ġstat . block Count . to Long ()) ĊĠĠĠ Ġ) Ċ } Ċ Ċ val ĠTool . o L _ Launcher Icon : ĠInt ĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġget () Ġ= Ġif Ġ( Build Config . IS _ TEST _ BUILD ) ĠR . drawable . ic _ launcher _ nightly Ġelse ĠR . drawable . ic _ launcher Ċ Ċ fun ĠTool . copy ( context : ĠContext , Ġstring In : ĠString , Ġstring Out : ĠString ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdesktop Data Ġ= ĠFile ( string Out ) ĊĠĠĠĠĠĠĠ Ġdesktop Data . delete () ĊĠĠĠĠĠĠĠ Ġval Ġdock Data Ġ= ĠFile ( string Out ) ĊĠĠĠĠĠĠĠ Ġdock Data . delete () ĊĠĠĠĠĠĠĠ Ġval Ġgeneral Settings Ġ= ĠFile ( string Out ) ĊĠĠĠĠĠĠĠ Ġgeneral Settings . delete () ĊĠĠĠĠĠĠĠ Ġprint (" deleted ") ĊĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= ĠFileInputStream ( string In ) ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFileOutputStream ( string Out ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġvar Ġread : ĠInt Ġ= ĠinputStream . read ( buffer ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( read Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( buffer , Ġ 0 , Ġread ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Ġ= ĠinputStream . read ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠinputStream . close () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwrite Ġthe Ġoutput Ġfile ĊĠĠĠĠĠĠĠ Ġout . flush () ĊĠĠĠĠĠĠĠ Ġout . close () ĊĠĠĠĠĠĠĠ Ġprint (" copied ") ĊĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠR . string . dialog __ backup _ app _ settings __ error , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTool Extension Ġ{} ĊĊĊ