package Ġcom s . d yp at il . notice board . ui . activity Ċ Ċ import Ġandroid . app . DatePicker Dialog Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . DatePicker Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom s . d yp at il . notice board . R Ċ import Ġcom s . d yp at il . notice board . App Ċ import Ġcom s . d yp at il . notice board . data . datastore . persistence . entity . Notice Ċ import Ġcom s . d yp at il . notice board . domain . service . FB Config Service Ċ import Ġcom s . d yp at il . notice board . util .* Ċ import Ġcom s . d yp at il . notice board . util . loading tracker . Response Ċ import Ġcom s . d yp at il . notice board . util . loading tracker . Status Ċ import Ġcom s . d yp at il . notice board . view model . Create Notice VM Ċ import Ġcom s . d yp at il . notice board . view model . contracts . Create Notice Contract Ċ import Ġkotlinx . android . synt hetic . main . activity _ create _ notice .* Ċ Ċ class ĠCreate Notice Ġ: ĠAppCompatActivity (), ĠCreate Notice Contract Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠCreate Notice VM ĊĠĠĠ Ġprivate Ġvar Ġnotice : ĠNotice ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnetwork Sn ackBar : ĠSn ackbar ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOTICE Ġ= Ġ" notice _ object " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ create _ notice ) ĊĊĠĠĠĠĠĠĠ ĠsetUp ToolBar () ĊĊĠĠĠĠĠĠĠ Ġnetwork Sn ackBar Ġ= ĠNetwork Util . get Network Sn ackBar ( root _ layout ) ĊĠĠĠĠĠĠĠ ĠApp . is Network Available . observe ( this , ĠNetwork Util . get Network Observer ( this )) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this ). get ( Create Notice VM :: class . java ) ĊĠĠĠĠĠĠĠ ĠviewModel . create Notice Contract Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ ĠviewModel . response . observe ( this , ĠObserver Ġ{ Ġprocess Response ( it !! ) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġintent . extras ?. let Ġ{ Ġbundle Ġ-> Ġset Notice Fields ( bundle ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Notice Fields ( bundle : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bundle . containsKey ( NOTICE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Update Notice Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotice Ġ= Ġbundle . get Parcelable ( NOTICE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġed t _ notice _ title . setText ( notice !!. title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġed t _ notice _ description . setText ( notice !!. description ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate Util . getDate From Millis ( notice !!. last Date !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġed t _ notice _ last _ date . setText ( date ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn _ send _ notice . text Ġ= ĠgetString ( R . string . btn _ update _ notice ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick Button ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ send _ notice Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Network Not Available ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is Update Notice ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fb Notice . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġed t _ notice _ title . getString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġed t _ notice _ description . getString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Date Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ Ġstart Sending Process ( fb Notice ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fb Notice . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġed t _ notice _ title . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġed t _ notice _ description . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Date Ġ= Ġnotice !!. issue Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissuer Id Ġ= Ġnotice !!. issuer Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Date Ġ= Ġnotice !!. last Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ Ġupdate Notice ( fb Notice , Ġnotice !!. fb Notice Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ cal ender Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget DatePicker Dialog (). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Network Not Available (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! App . is Network Available . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" Unable Ġto Ġsend Ġnotice , Please Ġturn Ġon Ġinternet Ġconnection .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĊĊĠĠĠ Ġoverride Ġfun Ġinvalid Credential ( field : ĠString , Ġerror Msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedit Text : ĠEditText ? Ġ= Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" title " Ġ-> Ġed t _ notice _ title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" description " Ġ-> Ġed t _ notice _ description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" last Date " Ġ-> Ġed t _ notice _ last _ date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( edit Text != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . error Ġ= Ġerror Msg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field ! =" last Date ") Ġedit Text . request Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget DatePicker Dialog (): ĠDate Picker Dialog Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Date : ĠMap < String , ĠInt > Ġ= ĠDate Util . getCurrent Date () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDate Picker Dialog ( this , ĠDate Picker Dialog . On Date Set Listener Ġ{ Ġ_: ĠDate Picker , Ġyear , Ġmonth , Ġday OfMonth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Date : ĠLong ? Ġ= ĠDate Util . get Millis ( day OfMonth , Ġmonth , Ġyear ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Date == null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" Please Ġselect Ġthe Ġvalid Ġlast Ġdate Ġfor Ġnotice .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Date Set Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fb Notice . last Date Ġ= Ġlast Date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate Util . format Date ( day OfMonth , Ġmonth , Ġyear Ġ- Ġ 1 9 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġed t _ notice _ last _ date . setText ( date ) ĊĊĠĠĠĠĠĠĠ Ġ}, Ġcurrent Date [ Date Util . YEAR ] !! , Ġcurrent Date [ Date Util . MONTH ] !! , Ġcurrent Date [ Date Util . DAY ] !! ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Response ( response : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( response . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . LOADING Ġ-> Ġrender Loading State () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . SUCCESS Ġ-> Ġrender Data State ( response . data !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . ERROR Ġ-> Ġrender Error State ( response . error !! , Ġresponse . data !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Network StateChange ( is Available : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( is Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Sn ackBar . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( application Context , ĠFB Config Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnetwork Sn ackBar . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp ToolBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= ĠfindViewById < Toolbar >( R . id . app _ bar ) ĊĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= Ġ" Create ĠNotice " ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar !!. set Display Home As Up Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Loading State () Ġ{ ĊĠĠĠĠĠĠĠ Ġdisable Window Touch () ĊĠĠĠĠĠĠĠ Ġloading _ indicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Data State ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġenable Window Touch () ĊĠĠĠĠĠĠĠ Ġloading _ indicator . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġtoast ( msg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Error State ( throwable : ĠThrowable , Ġerror Msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġenable Window Touch () ĊĠĠĠĠĠĠĠ Ġloading _ indicator . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġthrowable . printStackTrace () ĊĠĠĠĠĠĠĠ ĠLog . v ( tag , Ġ" ĠCreate Notice ĠError Ġ" Ġ+ Ġthrowable . toString ()) ĊĠĠĠĠĠĠĠ Ġtoast ( error Msg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Wait Msg () Ġ{ ĊĠĠĠĠĠĠĠ Ġtoast (" Please Ġwait Ġuntil Ġnotice Ġis Ġposted , ĠDo Ġnot Ġpress Ġback Ġbutton ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . response . value ?. status == Status . LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Wait Msg () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdisable Window Touch () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . set Flags ( WindowManager . LayoutParams . FLAG _ NOT _ TO UCH ABLE , ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH ABLE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenable Window Touch () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . clear Flags ( WindowManager . LayoutParams . FLAG _ NOT _ TO UCH ABLE ) ĊĠĠĠ Ġ} Ċ Ċ }