package Ġru . bre ffi . story id sample . ui . passport Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . InputType Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġkotlinx . android . synt hetic . main . fragment _ it n . button Save Ċ import Ġkotlinx . android . synt hetic . main . fragment _ passport .* Ċ import Ġkotlinx . android . synt hetic . main . static _ hint _ edit text . view .* Ċ import Ġru . bre ffi . story id . profile . model .* Ċ import Ġru . bre ffi . story id sample . R Ċ import Ġru . bre ffi . story id sample . ui . common . model . Change Monitor Ċ import Ġru . bre ffi . story id sample . ui . common . Image Fragment Ċ import Ġru . bre ffi . story id sample . ui . passport . adapter . Page Adapter Ċ import Ġru . bre ffi . story id sample . ui . passport . mapper . Passport Mapper Ċ import Ġru . bre ffi . story id sample . ui . passport . model . Passport Page Ui Model Ċ import Ġru . bre ffi . story id sample . utils . apply Mask Ċ import Ġru . bre ffi . story id sample . utils . or Null Ċ import Ġru . bre ffi . story id sample . utils . set Button Enabled Ċ import Ġjava . io . File Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠPass port Fragment Ġ: ĠImage Fragment (), ĠPage Adapter . Listener Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠPass port ViewModel Ġby Ġview Models Ġ{ ĠviewModel Factory Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġprofile : ĠProfile Model ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġchange Monitor Ġ= ĠChange Monitor () ĊĊĠĠĠ Ġprivate Ġval Ġpage Adapter Ġ= ĠPage Adapter ( this ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpassport Mapper : ĠPass port Mapper ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠIMAGE _ CHANGE _ TAG Ġ= Ġ" image " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠPass port Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPass port Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonSelect Image ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchange Monitor . item Changed ( IMAGE _ CHANGE _ TAG , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġpage Adapter . setData ( passport Mapper . map With Page Added ( file )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonDelete Image ( fileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchange Monitor . item Changed ( IMAGE _ CHANGE _ TAG , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġpage Adapter . setData ( passport Mapper . map With Page Deleted ( fileName )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Title ( context : ĠContext , Ġtoolbar Free Width : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetString ( R . string . title _ passport ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Res Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . fragment _ passport ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġtv Passport . text . apply Mask (" ____ Ġ__ ____ ") ĊĠĠĠĠĠĠĠ Ġtv Passport . text . input Type Ġ= ĠInput Type . TYPE _ CLASS _ PHONE ĊĊĠĠĠĠĠĠĠ Ġchange Monitor . set ChangeListener Ġ{ Ġbutton Save . set Button Enabled ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Save . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Ġ= Ġprofile ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassport DataModel Ġ= Ġit . passport . passport Data . copy ( sn Ġ= Ġtv Passport . getText (). or Null ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( passport Ġ= Ġit . passport . copy ( passport Data Ġ= Ġpassport DataModel , Ġpages Ġ= Ġpassport Mapper . get Updated Pages ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Profile ( profile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Monitor . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Save . set Button Enabled ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. set Result ( Activity . RESULT _ OK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Save . set Button Enabled ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . profile . observe First NonNull ( view Lifecycle Owner ) Ġ{ Ġprofile Model Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Ġ= Ġprofile Model ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Profile Passport ( profile Model . passport ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Profile Passport ( passport : ĠPass port Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpassport Data Ġ= Ġpassport . passport Data ĊĠĠĠĠĠĠĠ Ġval Ġpassport Number Ġ= Ġ"${ passport Data . sn Ġ?: Ġ"" } Ġ${ passport Data . code Ġ?: Ġ"" }". trim () ĊĠĠĠĠĠĠĠ Ġtv Passport . setText ( passport Number ) ĊĊĠĠĠĠĠĠĠ Ġpassport Mapper Ġ= ĠPass port Mapper ( passport . pages ) ĊĠĠĠĠĠĠĠ Ġpage Adapter . setData ( passport Mapper . map Pages ()) ĊĠĠĠĠĠĠĠ Ġpages _ recycler _ view . adapter Ġ= Ġpage Adapter ĊĠĠĠĠĠĠĠ Ġpages _ recycler _ view . layout Manager Ġ= ĠGrid LayoutManager ( context , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġtv Passport . text . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Monitor . item Changed (" number ", Ġit . toString () Ġ!= Ġpassport Data . sn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Image Click ( page Ui Model : ĠPass port Page Ui Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( page Ui Model . image File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Image ( page Ui Model . image File ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Image ("${ page Ui Model . page }. jpg ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ