package Ġcom . chalk box . property finder . property . create Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Toast Ċ import Ġcom . chalk box . property finder . R Ċ import Ġcom . chalk box . property finder . api . firebase . database . Property Api Ċ import Ġcom . chalk box . property finder . api . firebase . database . User Api Ċ import Ġcom . chalk box . property finder . api . firebase . storage . Storage Api Ċ import Ġcom . chalk box . property finder . application . component factory . App Component Factory Ċ import Ġcom . chalk box . property finder . dto . po jos . User Ċ import Ġcom . chalk box . property finder . property . create . details . User Create Presenter Ċ import Ġcom . chalk box . property finder . property . create . image Picker . Image Holder Ċ import Ġcom . chalk box . property finder . property . create . image Picker . Image Picker Ċ import Ġcom . chalk box . property finder . property . create . image Picker . Image Picker Presenter Ċ import Ġcom . google . firebase . firestore . Document Reference Ċ import Ġkotlinx . android . synt hetic . main . activity _ create .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠProperty User Create Activity Ġ: ĊĠĠĠ ĠProperty Create Activity (), ĊĠĠĠ ĠImage Picker . Listener , ĊĠĠĠ ĠImage Picker Presenter . Listener < Bitmap > Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġstorage Api : ĠStorage Api ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġapi : ĠProperty Api ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġuser Api : ĠUser Api ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġimage Holder : ĠImage Holder ĊĊĠĠĠ Ġprivate Ġval Ġaccount Image Holder : ĠImage Holder Ġ= ĠImage Holder () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġimage Picker : ĠImage Picker ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġimage Picker Presenter : ĠImage Picker Presenter < Bitmap > ĊĠĠĠ Ġprivate Ġvar Ġuser : ĠUser Ġ= ĠUser () ĊĊĠĠĠ Ġoverride Ġval Ġproperty Api : ĠProperty Api ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġapi ĊĊĠĠĠ Ġoverride Ġval Ġnext Activity : ĠClass < *> ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Present ers () Ġ{ ĊĠĠĠĠĠĠĠ ĠApp Component Factory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. new Create Property Component ( application ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( this ) ĊĊĠĠĠĠĠĠĠ Ġimage Picker Ġ= ĠImage Picker ( this , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġimage Picker Presenter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Picker Presenter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġthis . resources . getString ( R . string . account _ details _ header ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Order Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Holder Ġ= Ġaccount Image Holder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Details Ġ= ĠUser Create Presenter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Order Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpresent ers . addAll ( listOf ( image Picker Presenter , Ġuser Details )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Picker Presenter . update Info () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠImage ĠPick ers ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Image d Pick ed ( bitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Picker Presenter . add Bitmap ( bitmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Picker . show Image Picker () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠBelow Ġoverrides Ġare Ġrequired Ġby ĠImage ĠP icker ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġimage Picker . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġimage Picker . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġimage Picker . on Restore InstanceState ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate User ( property Content : ĠMap < String , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Api . create ( user ) Ġ{ ĠuserId , Ġproperty Ref Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Map Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAC COUNT _ ID _ KEY Ġto ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAC COUNT _ DO CU _ REF _ KEY Ġto Ġproperty Ref ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġproperty Content . iterator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Map [ key ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost User Create ( mutable Map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost User Create ( content : ĠMap < String , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġcontent [ ACCOUNT _ ID _ KEY ] ĊĠĠĠĠĠĠĠ Ġval Ġuser Ref Ġ= Ġcontent [ ACCOUNT _ DO CU _ REF _ KEY ] Ġas ĠDocument Reference ĊĊĠĠĠĠĠĠĠ Ġval Ġproperty Id Ġ= Ġcontent [ PROPERTY _ ID _ KEY ] ĊĠĠĠĠĠĠĠ Ġval Ġproperty Ref Ġ= Ġcontent [ PROPERTY _ DO CU _ REF _ KEY ] Ġas ĠDocument Reference ĊĊĠĠĠĠĠĠĠ Ġ( userId Ġas ? ĠString )?. let Ġ{ ĠuserId Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset InProgress Status ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Api . upload Images ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilename Prefix Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap List Ġ= Ġaccount Image Holder . list , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Progress Listener Ġ= Ġ{ Ġprogress Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġint Progress Ġ= Ġprogress . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġint Progress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Listener Ġ= Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġerror , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset InProgress Status ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Listener Ġ= Ġ{ Ġfile Paths Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . images . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . images . addAll ( file Paths ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ref . set ( user ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . user Ġ= Ġuser Ref ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Ref . set ( property ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset InProgress Status ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Affinity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Create ( content : ĠMap < String , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcontent [ PROPERTY _ ID _ KEY ] ĊĠĠĠĠĠĠĠ Ġval Ġref Ġ= Ġcontent [ PROPERTY _ DO CU _ REF _ KEY ] Ġas ĠDocument Reference ĊĊĠĠĠĠĠĠĠ Ġ( id Ġas ? ĠString )?. let Ġ{ Ġproperty Id Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset InProgress Status ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Api . upload Images ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilename Prefix Ġ= Ġproperty Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap List Ġ= Ġimage Holder . list , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Progress Listener Ġ= Ġ{ Ġprogress Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġint Progress Ġ= Ġprogress . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġint Progress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Listener Ġ= Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġerror , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset InProgress Status ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Listener Ġ= Ġ{ Ġfile Paths Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . images . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . images . addAll ( file Paths ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref . set ( property ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate User ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġimage Picker . on Request Permissions Result ( request Code ) ĊĠĠĠ Ġ} Ċ } Ċ