package Ġcom . ch ak ra . shopping list . fragments Ċ Ċ import Ġandroid . Manifest . permission Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroidx . lifecycle . observe Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . ch ak ra . shopping list . R Ċ import Ġcom . ch ak ra . shopping list . base . Base Fragment Ċ import Ġcom . ch ak ra . shopping list . base . Shopping Planner Activity Ċ import Ġcom . ch ak ra . shopping list . model . Category Ċ import Ġcom . ch ak ra . shopping list . model . Product Ċ import Ġcom . ch ak ra . shopping list . utils . Resource Utils . file From Uri Ċ import Ġcom . ch ak ra . shopping list . utils . Resource Utils . uri Ċ import Ġcom . ch ak ra . shopping list . utils . take Picture Intent Ċ import Ġcom . ch ak ra . shopping list . view model . Common ViewModel Ċ import Ġcom . ch ak ra . shopping list . view model . Create Product ViewModel Ċ import Ġcom . ch ak ra . shopping list . views . Dialog s Ċ import Ġkotlinx . android . synt hetic . main . screen _ create _ product .* Ċ import Ġorg . k oin . android x . view model . ext . android . shared ViewModel Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġjava . util .* Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ class ĠCreate Product Fragment Ġ: ĠBase Fragment () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPARAM _ PRODUCT Ġ= Ġ" product " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPARAM _ CATEGORY Ġ= Ġ" category " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ IMAGE Ġ= Ġ" https :// i . imgur . com / zt A 4 1 1 S . png " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCAM ERA _ PERMISSION Ġ= Ġ 1 0 0 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREAD _ DISK _ PERMISSION Ġ= Ġ 1 0 0 2 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCAM ERA _ IMAGE _ REQUEST _ CODE Ġ= Ġ 2 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠG ALL ERY _ IMAGE _ REQUEST _ CODE Ġ= Ġ 2 0 0 1 ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetData Bundle ( product : ĠProduct ?) Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable ( PARAM _ PRODUCT , Ġproduct ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetData Bundle ( category : ĠCategory ?) Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable ( PARAM _ CATEGORY , Ġcategory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠCreate Product ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġprivate Ġval Ġcommon ViewModel : ĠCommon ViewModel Ġby Ġshared ViewModel () ĊĠĠĠ Ġprivate Ġvar Ġis Create New Ġby ĠDeleg ates . notNull < Boolean >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġselected Image : ĠString ĊĠĠĠ Ġprivate Ġvar Ġcamera Uri : ĠUri ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġresource Layout Id : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠR . layout . screen _ create _ product ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġis Create New Ġ= Ġarguments ?. get Serializable ( PARAM _ PRODUCT ) Ġas ĠProduct ? Ġ== Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Base ViewModel () Ġ= ĠviewModel ĊĊĠĠĠ Ġoverride Ġfun Ġget Title (): ĠString Ġ= Ġif Ġ( is Create New ) Ġ{ ĊĠĠĠĠĠĠĠ ĠgetString ( R . string . toolbar _ title _ create _ product ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠgetString ( R . string . toolbar _ title _ edit _ product ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcategory Id (): ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelement : ĠCategory ? Ġ= ĠviewModel . category List . value ?. get ( category List . selected Item Position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġelement ?. id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġname (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname . text . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Create New ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Action . setText ( R . string . button _ create ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Image ( DEFAULT _ IMAGE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct AddTo Card . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct AddTo Card . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Action . setText ( R . string . button _ update ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Action . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Id ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Action ( it , Ġname (), Ġselected Image , Ġproduct AddTo Card . isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcommon ViewModel . color . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Action . set BackgroundColor ( Color . parse Color ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct AddTo Card . button Tint List Ġ= ĠColor State List . valueOf ( Color . parse Color ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproduct Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonChange Image () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproduct Image Change . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonChange Image () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcategory Manage . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Manage Categories () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . category List . observe ( view Lifecycle Owner ) Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcategory : ĠCategory ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġproduct : ĠProduct ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ Ġbundle Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Ġ= Ġbundle . get Serializable ( PARAM _ CATEGORY ) Ġas ĠCategory ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Ġ= Ġbundle . get Serializable ( PARAM _ PRODUCT ) Ġas ĠProduct ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Category List ( it , Ġcategory , Ġproduct ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . update Result . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( require Activity () Ġas ĠShop ping Planner Activity ). common ViewModel . search Image Selected . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Search Image ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠviewModel . reload Categories () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Category List ( categories : ĠList < Category ? >, Ġcategory : ĠCategory ?, Ġproduct : ĠProduct ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter : ĠArray Adapter < Category ?> Ġ= ĠArray Adapter ( require Context (), Ġandroid . R . layout . simple _ spinner _ item , Ġcategories ) ĊĠĠĠĠĠĠĠ Ġadapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĠĠĠĠĠĠĠ Ġcategory List . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġif Ġ( product Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory List . setSelection ( categories . indexOf ( category )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . setText ( product . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Image ( product . image ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( category Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory List . setSelection ( categories . indexOf ( category )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory List . setSelection ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Image ( imageUrl : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠimageUrl ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Image Ġ= ĠimageUrl ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( imageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( product Image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonChange Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠArrays . asList ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . label _ source _ camera ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . label _ source _ gallery ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . label _ source _ search ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdialog s Ġ= ĠDialog s ( require Context ()) ĊĠĠĠĠĠĠĠ Ġdialog s . options ( getString ( R . string . label _ source _ select ), Ġoptions ) Ġ{ Ġoption : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( option ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġimage From Camera () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġimage From Gallery () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġimage From Search () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġimage From Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M Ġ|| Ġrequire Activity (). check Self Permission ( permission . CAMERA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( permission . CAMERA ), ĠCAM ERA _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġimage From Gallery () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M Ġ|| Ġrequire Activity (). check Self Permission ( permission . READ _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( permission . READ _ EXTERNAL _ STORAGE ), ĠREAD _ DISK _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String ? >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCAM ERA _ PERMISSION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Permissions Camera Granted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠREAD _ DISK _ PERMISSION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Permissions Read Storage Granted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Permissions Camera Granted () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Uri Ġ= Ġuri ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Uri ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( take Picture Intent ( require Context (), Ġit ), ĠCAM ERA _ IMAGE _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( getString ( R . string . error _ opening Camera )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Permissions Read Storage Granted () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ GET _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠG ALL ERY _ IMAGE _ REQUEST _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġimage From Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ create Product Screen _ to _ search Image Screen , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Image Fragment . getData Bundle ( name ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Manage Categories () Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ create Product Screen _ to _ manage Categories Screen ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Action ( categoryId : ĠLong , Ġname : ĠString , Ġimage : ĠString , Ġin Cart : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Error () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Name () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Product : ĠProduct ? Ġ= Ġarguments ?. get Serializable ( PARAM _ PRODUCT ) Ġas ĠProduct ? ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Product Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Product . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . image Ġ= Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Product ( old Product ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Product Ġ= ĠProduct ( name , Ġimage , Ġfalse , Ġcategory Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . create Product ( new Product ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġname Header . error Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmissing Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġname Header . error Ġ= Ġrequire Context (). getString ( R . string . error _ invalid _ name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Uri Image ( uri : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile From Uri ( require Context (), Ġuri !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Image ( file . absolute Path ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( getString ( R . string . error _ loading Image )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Search Image ( imageUrl : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Image ( imageUrl ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠCAM ERA _ IMAGE _ REQUEST _ CODE Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Uri Image ( camera Uri ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠG ALL ERY _ IMAGE _ REQUEST _ CODE Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Uri Image ( data ?. data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ