package Ġcom . test . a 1 con sm ost est . view Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . File Provider Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . test . a 1 con sm ost est . Build Config Ċ import Ġcom . test . a 1 con sm ost est . Com man ViewModel Ċ import Ġcom . test . a 1 con sm ost est . R Ċ import Ġcom . test . a 1 con sm ost est . model . Data Ċ import Ġcom . test . a 1 con sm ost est . utility . Util Ċ import Ġkotlinx . android . synt hetic . main . add _ item .* Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠAdd Item : ĠAppCompatActivity () Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval ĠREQUEST _ PERMISSION Ġ= Ġ 1 0 0 ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ IMAGE _ CAPTURE Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ P ICK _ IMAGE Ġ= Ġ 2 ĊĠĠĠ Ġlateinit Ġvar Ġcurrent Photo Path : ĠString ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnote ViewModel : ĠCom man ViewModel ĊĊĊĠĠĠ Ġfun Ġdisplay Toast ( msg : String ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , msg , Toast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . add _ item ) ĊĠĠĠĠĠĠĠ Ġnote ViewModel Ġ= ĠViewModel Provider ( this ). get ( Com man ViewModel ( application ):: class . java ) ĊĊĠĠĠĠĠĠĠ Ġadd ?. setOnClickListener Ġ{ ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! this :: current Photo Path . isInitialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Photo Path ="" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( enter _ first _ name . text . toString (). isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Toast (" Please Ġenter Ġfirst Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( enter _ last _ name . text . toString (). isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Toast (" Please Ġenter Ġlast Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif (! enter _ email _ id . text . toString (). isEmpty () Ġ&& Ġ! Util . isValid Email Id ( enter _ email _ id . text . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Toast (" Please Ġenter Ġvalid Ġemail ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount = note ViewModel . getNum Files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠData ( count + 1 , Ġenter _ email _ id . text . toString (), Ġenter _ first _ name . text . toString (), Ġenter _ last _ name . text . toString (), Ġcurrent Photo Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote ViewModel . insert ( data ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcapture _ photo ?. setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Take Ġa ĠAv ator Ġimage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage (" Take Ġphoto Ġfrom ĠCamera Ġor Ġfetch Ġfrom ĠGallery ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Positive Button (" Camera ") Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Negative Button (" Gallery ") Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Gallery () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Neutral Button (" Cancel ") Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġcheck Camera Permission () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Camera Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , ĠManifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Gallery () Ġ{ ĊĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ GET _ CONTENT ). also Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . resolve Activity ( package Manager )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠREQUEST _ P ICK _ IMAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcreate Capt ured Photo (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp : ĠString Ġ= ĠSimpleDateFormat (" yyyy MM dd - HH mm ss ", ĠLocale . US ). format ( Date ()) ĊĠĠĠĠĠĠĠ Ġval Ġstorage Dir Ġ= Ġget External Files Dir ( Environment . DIRECTORY _ PI CTURE S ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFile . create TempFile (" PH OTO _${ timestamp } "," . jpg ", Ġstorage Dir ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Photo Path Ġ= Ġabsolute Path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Camera () Ġ{ ĊĠĠĠĠĠĠĠ ĠIntent ( Media Store . ACTION _ IMAGE _ CAPTURE ). also Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . resolve Activity ( package Manager )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphoto File : ĠFile ? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Capt ured Photo () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthere Ġis Ġerror Ġwhile Ġcreating Ġthe ĠFile , Ġit Ġwill Ġbe Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto File ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphoto URI Ġ= ĠFile Provider . get Uri For File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Build Config . APPLICATION _ ID }. file provider ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġphoto URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠREQUEST _ IMAGE _ CAPTURE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ IMAGE _ CAPTURE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( current Photo Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay _ photo . setImage URI ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( request Code Ġ== ĠREQUEST _ P ICK _ IMAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata ?. getData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Photo Path = uri ?. path !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay _ photo . setImage URI ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif ( request Code == REQUEST _ PERMISSION Ġ&& Ġgrant Results [ 0 ]== PackageManager . PERMISSION _ GRAN TED ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Camera Permission () ĊĠĠĠ Ġ} ĊĊ Ċ }