/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 ĠFull ĠMe ad ĠAl che mist , ĠLLC . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . full me ad al che mist . must watch . ui . log Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 4 . content . Local Broadcast Manager Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġcom . full me ad al che mist . must watch . R Ċ import Ġcom . full me ad al che mist . must watch . core . Format Utils . calendar To Locale Date Ċ import Ġcom . full me ad al che mist . must watch . core . Format Utils . calendar To Locale Time Ċ import Ġcom . full me ad al che mist . must watch . core . Value Parsers . toFloat Ċ import Ġcom . full me ad al che mist . must watch . ui . common . DatePicker Fragment Ċ import Ġcom . full me ad al che mist . must watch . ui . common . DatePicker Fragment .* Ċ import Ġcom . full me ad al che mist . must watch . ui . common . DatePicker Fragment . Companion . DATE _ SET _ EVENT Ċ import Ġcom . full me ad al che mist . must watch . ui . common . DatePicker Fragment . Companion . DAY _ OF _ MONTH Ċ import Ġcom . full me ad al che mist . must watch . ui . common . DatePicker Fragment . Companion . MONTH Ċ import Ġcom . full me ad al che mist . must watch . ui . common . DatePicker Fragment . Companion . YEAR Ċ import Ġcom . full me ad al che mist . must watch . ui . common . Main ViewModel Ċ import Ġcom . full me ad al che mist . must watch . ui . common . Time Picker Fragment Ċ import Ġcom . full me ad al che mist . must watch . ui . common . Time Picker Fragment . Companion . HOUR Ċ import Ġcom . full me ad al che mist . must watch . ui . common . Time Picker Fragment . Companion . MINUTE Ċ import Ġcom . full me ad al che mist . must watch . ui . common . Time Picker Fragment . Companion . TIME _ SET _ EVENT Ċ import Ġcom . full me ad al che mist . must watch . vo . Batch . Companion . BATCH _ ID Ċ import Ġcom . full me ad al che mist . must watch . vo . LogEntry Ċ import Ġorg . jetbrains . ank o . no Button Ċ import Ġorg . jetbrains . ank o . support . v 4 . alert Ċ import Ġorg . jetbrains . ank o . yes Button Ċ import Ġorg . k oin . android . view model . ext . android . shared ViewModel Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* ĊĊ Ċ class ĠLog Form Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġval ĠviewModel : ĠMain ViewModel Ġby Ġshared ViewModel () ĊĊĠĠĠ Ġprivate Ġval Ġtime Picker Message Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Received ĠTIME _ SET _ EVENT ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour OfDay Ġ= Ġintent . getInt Extra ( HOUR , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġintent . getInt Extra ( Time Picker Fragment . MINUTE , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . log Entry Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . log Entry Ġ= ĠLog Entry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update LogEntry Time ( hour OfDay , Ġminute ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Time Ġwas Ġset Ġby Ġuser Ġwith ĠTime Picker Fragment Ġto Ġ% s :% s ", Ġhour OfDay , Ġminute ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui DateTime () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġdate Picker Message Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Received ĠDATE _ SET _ EVENT ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġintent . getInt Extra ( DatePicker Fragment . YEAR , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth Ġ= Ġintent . getInt Extra ( DatePicker Fragment . MONTH , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday OfMonth Ġ= Ġintent . getInt Extra ( DatePicker Fragment . DAY _ OF _ MONTH , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update LogEntry Date ( year , Ġmonth , Ġday OfMonth ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Date Ġwas Ġset Ġby Ġuser Ġwith ĠDate Picker Fragment Ġto Ġ% s /% s /% s ", Ġday OfMonth , Ġmonth , Ġyear ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui DateTime () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġthis . arguments ĊĠĠĠĠĠĠĠ Ġval Ġbatch Id Ġ= Ġbundle !!. getLong ( BATCH _ ID , Ġjava . lang . Long . MIN _ VALUE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( batch Id Ġ!= Ġjava . lang . Long . MIN _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . log Entry Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . log Entry Ġ= ĠLog Entry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . log Entry ?. batch Id Ġ= Ġbatch Id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . selected Batch Id Ġ= Ġbatch Id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Created ĠLog Entry Ġwith ĠBatch ĠID Ġ% d ", Ġbatch Id ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" No ĠBatch ĠID Ġwas Ġreceived . ĠRedirect ing Ġback Ġto ĠBatch Ġlist .") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller . navigate To B atches () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Ui DateTime () ĊĠĠĠĠĠĠĠ Ġinit Click Listeners () ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( activity !! ). register Receiver ( date Picker Message Receiver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Filter ( DATE _ SET _ EVENT )) ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( activity !! ). register Receiver ( time Picker Message Receiver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Filter ( TIME _ SET _ EVENT )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . log _ form _ fragment , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Click Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Field Ġ= Ġactivity !!. findViewById < TextView >( R . id . create Date Date ) ĊĠĠĠĠĠĠĠ Ġdate Field ?. setOnClickListener Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Date Ġwas Ġclicked !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Fragment Ġ= ĠDate Picker Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int ( YEAR , ĠviewModel . log Entry ?. entry Date !!. get ( Calendar . YEAR )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int ( MONTH , ĠviewModel . log Entry ?. entry Date !!. get ( Calendar . MONTH )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int ( DAY _ OF _ MONTH , ĠviewModel . log Entry ?. entry Date !!. get ( Calendar . DAY _ OF _ MONTH )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fragment . setTarget Fragment ( this , ĠDATE _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fragment . show ( activity !!. support FragmentManager , Ġ" date Picker ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtime Field Ġ= Ġactivity !!. findViewById < TextView >( R . id . create DateTime ) ĊĠĠĠĠĠĠĠ Ġtime Field ?. setOnClickListener Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Time Ġwas Ġclicked !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Fragment Ġ= ĠTime Picker Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int ( HOUR , ĠviewModel . log Entry ?. entry Date !!. get ( Calendar . HOUR )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int ( MINUTE , ĠviewModel . log Entry ?. entry Date !!. get ( Calendar . MINUTE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fragment . setTarget Fragment ( this , ĠTIME _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fragment . show ( activity !!. support FragmentManager , Ġ" time Picker ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsubmit Button Ġ= Ġactivity !!. findViewById < Button >( R . id . button _ submit ) ĊĠĠĠĠĠĠĠ Ġsubmit Button ?. setOnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Submit Ġbutton Ġclicked !") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . log Entry ?. let Ġ{ log Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġph Tv Ġ= Ġview . findViewById < TextView >( R . id . ph ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ph Tv Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . ac idity Ġ= Ġto Float ( ph Tv . text . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsg Tv Ġ= Ġview . findViewById < TextView >( R . id . sg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sg Tv Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . sg Ġ= Ġto Float ( sg Tv . text . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Tv Ġ= Ġactivity !!. findViewById < TextView >( R . id . notes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( note Tv Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . note Ġ= Ġnote Tv . text . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add LogEntry ( log ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . selected Batch Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġadd Ġmetric Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġadd Ġoption Ġfor ĠUser Ġto Ġsend Ġerror Ġlogs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" could Ġnot Ġget Ġthe Ġbatch ĠID Ġthat Ġthis Ġlog Ġentry Ġis Ġfor ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert (" Something Ġwent Ġwrong Ġwhen Ġtrying Ġto Ġsave Ġthis Ġlog Ġentry .") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyes Button Ġ{ ĠTim ber . w (" yes Ġbutton Ġclicked ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Button Ġ{ ĠTim ber . w (" no Ġbutton Ġclicked ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Long ( BATCH _ ID , ĠviewModel . selected Batch Id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . find Nav Controller (). navigate ( R . id . batch Detail Fragment , Ġbundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Ui DateTime () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . log Entry ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Field Ġ= Ġactivity !!. findViewById < TextView >( R . id . create DateTime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Field . text Ġ= Ġcalendar To Locale Time ( it . entry Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Could Ġnot Ġfind Ġcreate DateTime Ġin ĠView ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Field Ġ= Ġactivity !!. findViewById < TextView >( R . id . create Date Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( date Field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Field . text Ġ= Ġcalendar To Locale Date ( it . entry Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Could Ġnot Ġfind Ġcreate Date Date Ġin ĠView ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDATE _ REQUEST _ CODE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTIME _ REQUEST _ CODE Ġ= Ġ 2 ĊĠĠĠ Ġ} Ċ } Ċ