package Ġcom . av ito . android . k rop . demo Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . annotation . Color Int Ċ import Ġcom . google . android . material . bottomnavigation . Bottom Navigation View Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . graphics . drawable . Drawable Compat Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroid . widget .* Ċ import Ġcom . av ito . android . k rop . K rop View Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġme . pri y esh . chrom a . Chrom a Dialog Ċ import Ġme . pri y esh . chrom a . Color Mode Ċ import Ġme . pri y esh . chrom a . Color Select Listener Ċ import Ġjava . io . InputStream ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnavigation : ĠBottom Navigation View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Flip per : ĠView Flip per ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcrop Container : ĠView Flip per ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġk rop View : ĠK rop View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġresult Image : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinput Offset : ĠSeek Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinput Aspect X : ĠSeek Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinput Aspect Y : ĠSeek Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpick Color Button : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinput Overlay Color : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġoverlay Shape : ĠRadio Group ĊĊĠĠĠ Ġprivate Ġvar Ġuri : ĠUri Ġ= ĠUri . EMPTY ĊĊĠĠĠ Ġprivate Ġvar Ġtarget : ĠK rop Target ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġt int StatusBar Icons ( this , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtoolbar : ĠToolbar Ġ= ĠfindViewById ( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġnavigation Ġ= ĠfindViewById ( R . id . navigation ) ĊĠĠĠĠĠĠĠ Ġview Flip per Ġ= ĠfindViewById ( R . id . view _ flip per ) ĊĠĠĠĠĠĠĠ Ġcrop Container Ġ= ĠfindViewById ( R . id . crop _ container ) ĊĠĠĠĠĠĠĠ Ġresult Image Ġ= ĠfindViewById ( R . id . result _ image ) ĊĊĠĠĠĠĠĠĠ Ġinput Offset Ġ= ĠfindViewById ( R . id . input _ offset ) ĊĠĠĠĠĠĠĠ Ġinput Aspect X Ġ= ĠfindViewById ( R . id . input _ aspect _ x ) ĊĠĠĠĠĠĠĠ Ġinput Aspect Y Ġ= ĠfindViewById ( R . id . input _ aspect _ y ) ĊĠĠĠĠĠĠĠ Ġpick Color Button Ġ= ĠfindViewById ( R . id . pick _ color _ button ) ĊĠĠĠĠĠĠĠ Ġinput Overlay Color Ġ= ĠfindViewById ( R . id . input _ overlay _ color ) ĊĠĠĠĠĠĠĠ Ġoverlay Shape Ġ= ĠfindViewById ( R . id . overlay _ shape ) ĊĊĠĠĠĠĠĠĠ Ġk rop View Ġ= ĠfindViewById ( R . id . k rop _ view ) ĊĊĠĠĠĠĠĠĠ Ġpick Color Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCh rom a Dialog . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initial Color ( Color . parse Color ( input Overlay Color . text . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Mode ( Color Mode . ARGB ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Color Selected ( listener Ġ= Ġobject Ġ: ĠColor Select Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Color Selected ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Input Overlay Color ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠgetString ( R . string . select _ color )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnavigation . setOn Navigation ItemSelected Listener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ crop Ġ-> Ġshow Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ settings Ġ-> Ġshow Settings () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ result Ġ-> Ġshow Preview () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġuri Ġ= ĠsavedInstanceState ?. get Parcelable ( KEY _ URI ) Ġ?: ĠUri . EMPTY ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Aspect X . progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Aspect Y . progress Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Input Overlay Color ( resources . getColor ( R . color . default _ overlay _ color )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġk rop View . view Tree Observer . add On Global Layout Listener ( object Ġ: ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Offset . progress Ġ= Ġ(( k rop View . width Ġ/ Ġ 2 ) Ġ/ Ġconvert Pixels To Dp ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpx Ġ= Ġresources . get Dimension ( R . dim en . default _ offset ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġk rop View . context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk rop View . view Tree Observer . remove On Global Layout Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( navigation . selected ItemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ crop Ġ-> Ġshow Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ settings Ġ-> Ġshow Settings () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ result Ġ-> Ġshow Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ== ĠUri . EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= ĠK rop Target ( crop Container , Ġk rop View , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load (" file :/// android _ asset / default _ image . jpg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Inside () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resize ( 1 0 2 4 , Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. config ( Bitmap . Config . RGB _ 5 6 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( target ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Uri ( reset Zoom Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Bitmap From Asset ( context : ĠContext , ĠfilePath : ĠString ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġasset Manager Ġ= Ġcontext . assets ĊĠĠĠĠĠĠĠ Ġvar Ġinput : ĠInputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġbitmap : ĠBitmap ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ= Ġasset Manager . open ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap Factory . decode Stream ( input ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State ?. put Parcelable ( KEY _ URI , Ġuri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Input Overlay Color ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhex Color Ġ= Ġcolor To Hex ( color ) ĊĠĠĠĠĠĠĠ Ġinput Overlay Color . setText ( hex Color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġmenu Inflater ĊĠĠĠĠĠĠĠ Ġval Ġmenu Res Ġ= Ġwhen Ġ( navigation . selected ItemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ crop Ġ-> ĠR . menu . main _ crop ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ settings Ġ-> ĠR . menu . menu _ settings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . menu . main ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( menu Res , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ 0 Ġuntil Ġmenu . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġmenu . getItem ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdrawable Ġ= Ġitem . icon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Ġ= ĠDrawable Compat . wrap ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDrawable Compat . set Tint ( drawable , ĠContext Compat . getColor ( this , ĠR . color . color _ accent )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . icon Ġ= Ġdrawable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ select Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Picture () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ apply Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Settings () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation . selected ItemId Ġ= ĠR . id . action _ crop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Picture () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ P ICK , Ġandroid . provider . Media Store . Images . Media . EXTERNAL _ CONTENT _ URI ) ĊĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( Intent . create Chooser ( intent , ĠgetString ( R . string . select _ picture )), ĠREQUEST _ P ICK _ IMAGE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ P ICK _ IMAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġdata ?. data Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Uri ( reset Zoom Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Uri ( reset Zoom : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget Ġ= ĠK rop Target ( crop Container , Ġk rop View , Ġreset Zoom ) ĊĠĠĠĠĠĠĠ ĠPic asso ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Inside () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resize ( 1 0 2 4 , Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. config ( Bitmap . Config . RGB _ 5 6 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. no Fade () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( target ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ( input Offset . progress Ġ* Ġ( k rop View . width Ġ/ Ġ 2 )) Ġ/ Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaspect X Ġ= Ġinput Aspect X . progress Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaspect Y Ġ= Ġinput Aspect Y . progress Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoverlay Color Ġ= ĠColor . parse Color ( input Overlay Color . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Ġ= Ġwhen ( overlay Shape . checked RadioButton Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . shape _ oval Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk rop View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply AspectRatio ( aspect X , Ġaspect Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Offset ( offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Overlay Color ( overlay Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Overlay Shape ( shape ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( k rop View , ĠR . string . unable _ to _ apply _ settings , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Crop () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Flip per . display ed Child Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Flip per . display ed Child Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Preview () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġk rop View . getC ropped Bitmap () ĊĠĠĠĠĠĠĠ Ġresult Image . setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠ Ġview Flip per . display ed Child Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcolor To Hex (@ Color Int Ġcolor Int : ĠInt ) Ġ= Ġ"#" Ġ+ ĠInteger . to HexString ( color Int ) Ċ Ċ } Ċ Ċ private Ġconst Ġval ĠREQUEST _ P ICK _ IMAGE : ĠInt Ġ= Ġ 4 2 Ċ private Ġconst Ġval ĠKEY _ URI Ġ= Ġ" key _ uri "