package Ġcom . cap stone . attendance . ui . attendance Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Address Ċ import Ġandroid . location . Geo coder Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . Window Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . cap stone . attendance . R Ċ import Ġcom . cap stone . attendance . data . remote . User Ċ import Ġcom . cap stone . attendance . databinding . Fragment Attendance Binding Ċ import Ġcom . cap stone . attendance . utils .* Ċ import Ġcom . google . android . gms . location .* Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . database . Firebase Database Ċ import Ġwww . san ju . motion toast . Motion Toast Ċ import Ġwww . san ju . motion toast . Motion Toast Style Ċ import Ġjava . lang . Math . to Radians Ċ import Ġjava . util .* Ċ import Ġkotlin . math .* Ċ Ċ class ĠAtt endance Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Attendance Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocation Request : ĠLocation Request ĊĠĠĠ Ġprivate Ġvar Ġf used Location Provider Client : ĠF used Location Provider Client ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Attendance Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠ Ġinit Location () ĊĠĠĠĠĠĠĠ Ġcheck Permission Locations () ĊĠĠĠĠĠĠĠ ĠonClick () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permission (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . ACCESS _ CO AR SE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĠActivity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permission Locations () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Location Enabled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Library . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO AST _ WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ GPS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast Style . WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . GR AV ITY _ BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . LONG _ DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . getFont ( context Ġas ĠActivity , ĠR . font . hel vet ic ab old ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( Settings . ACTION _ LOCATION _ SOURCE _ SETTINGS )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Permission () Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context () Ġas ĠActivity , ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . ACCESS _ CO AR SE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . INTER NET ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOC ATION _ PERMISSION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonClick () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . fab Check In . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Scan Location () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetLast Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠDEL AY _ LOCATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetLast Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Function Library . check Connection ( require Context ())) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġon ĠTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Function Library . getTime Now () !! Ġ> Ġ" 0 7 : 0 0 " Ġ&& ĠFunction Library . getTime Now () !! Ġ< Ġ" 0 9 : 0 0 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Location Enabled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation CallBack Ġ= Ġobject Ġ: ĠLocation Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Location Result ( location Result : ĠLocation Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Location Result ( location Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġlocation Result . last Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Lat Ġ= Ġlocation . latitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Long Ġ= Ġlocation . longitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination Lat Ġ= Ġget Address ()[ 0 ]. latitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination Long Ġ= Ġget Address ()[ 0 ]. longitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġcalculate Distance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Lat , Ġcurrent Long , Ġdestination Lat , Ġdestination Long ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ"$ TAG _ RESULT Ġ- Ġ$ distance ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( distance Ġ< ĠME AS UR ING _ DISTANCE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog Form () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Library . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO AST _ SUCCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOC ATION _ FOUND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast Style . SUCCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . GR AV ITY _ BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . LONG _ DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . getFont ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . font . hel vet ic ab old ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Library . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO AST _ WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOUT _ OF _ RANGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast Style . WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . GR AV ITY _ BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . LONG _ DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . getFont ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . font . hel vet ic ab old ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Check In . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf used Location Provider Client ?. remove Location Updates ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Scan Location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf used Location Provider Client ?. request Location Updates ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation CallBack , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . get Main Looper () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Library . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO AST _ WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ GPS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast Style . WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . GR AV ITY _ BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . LONG _ DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . getFont ( context Ġas ĠActivity , ĠR . font . hel vet ic ab old ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Scan Location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Scan Location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Library . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO AST _ INFO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠATT END ANCE _ TIME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast Style . INFO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . GR AV ITY _ BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . LONG _ DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . getFont ( context Ġas ĠActivity , ĠR . font . hel vet ic ab old ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Library . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO AST _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ INTER NET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast Style . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . GR AV ITY _ BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . LONG _ DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . getFont ( context Ġas ĠActivity , ĠR . font . hel vet ic ab old ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Scan Location () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Dialog Form () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠDialog ( require Context ()) ĊĠĠĠĠĠĠĠ Ġdialog . request Window Feature ( Window . FEATURE _ NO _ TITLE ) ĊĠĠĠĠĠĠĠ Ġdialog . set Cancel able ( false ) ĊĠĠĠĠĠĠĠ Ġdialog . set ContentView ( R . layout . layout _ dialog _ form ) ĊĠĠĠĠĠĠĠ Ġval Ġbtn Yes Ġ= Ġdialog . findViewById < Button >( R . id . btn _ save ) ĊĠĠĠĠĠĠĠ Ġbtn Yes . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġdialog . findViewById < EditText >( R . id . et _ name _ attendance ). text . toString (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput To Firebase ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Library . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO AST _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINPUT _ YOUR _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast Style . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . GR AV ITY _ BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . LONG _ DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . getFont ( context Ġas ĠActivity , ĠR . font . hel vet ic ab old ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbtn Cancel Ġ= Ġdialog . findViewById < Button >( R . id . btn _ cancel ) ĊĠĠĠĠĠĠĠ Ġbtn Cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinput To Firebase ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠFirebase Database . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġatt endance Ref Ġ= Ġdatabase . getReference ( REAL TIME _ DB ) ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġatt endance Ref . push (). key ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser ( userId , Ġname , ĠFunction Library . getCurrent Time ()) ĊĠĠĠĠĠĠĠ Ġatt endance Ref . child ( name ). setValue ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Library . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO AST _ SUCCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠATT END ANCE _ SUCCESS FUL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast Style . SUCCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . GR AV ITY _ BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . LONG _ DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . getFont ( context Ġas ĠActivity , ĠR . font . hel vet ic ab old ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Library . toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO AST _ WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . message }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast Style . SUCCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . GR AV ITY _ BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Toast . LONG _ DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . getFont ( context Ġas ĠActivity , ĠR . font . hel vet ic ab old ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Address (): ĠList < Address > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdestination Place Ġ= ĠADDRESS _ GEO CODER ĊĠĠĠĠĠĠĠ Ġval Ġgeo code Ġ= ĠGeo coder ( context , ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġgeo code . get From Location Name ( destination Place , ĠMAX _ RESULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Scan Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ripple Background . start R ipple Animation () ĊĠĠĠĠĠĠĠ Ġbinding . tv Sc anning . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . tv Check In . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . tv Check In Success . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . fab Check In . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . gps Animation . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Scan Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ripple Background . stop R ipple Animation () ĊĠĠĠĠĠĠĠ Ġbinding . tv Sc anning . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . tv Check In . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . gps Animation . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . fab Check In . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Location Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Manager : ĠLocation Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. getSystem Service ( Context . LOCATION _ SERVICE ) Ġas ĠLocation Manager ĊĠĠĠĠĠĠĠ Ġif Ġ( location Manager . is Provider Enabled ( Location Manager . GPS _ PROVIDER ) Ġ|| Ġlocation Manager . is Provider Enabled ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Manager . NETWORK _ PROVIDER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġf used Location Provider Client Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Services . getF used Location Provider Client ( require Context ()) ĊĠĠĠĠĠĠĠ Ġlocation Request Ġ= ĠLocation Request . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Ġ= Ġ 1 0 0 0 Ġ* Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= ĠLocation Request . PRIORITY _ HIGH _ AC CUR ACY ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Distance ( lat 1 : ĠDouble , Ġlon 1 : ĠDouble , Ġlat 2 : ĠDouble , Ġlong 2 : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ 6 3 7 2 . 8 ĊĠĠĠĠĠĠĠ Ġval Ġrad ian Lat 1 Ġ= Ġto Radians ( lat 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġrad ian Lat 2 Ġ= Ġto Radians ( lat 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġd Lat Ġ= Ġto Radians ( lat 2 Ġ- Ġlat 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġd Lon Ġ= Ġto Radians ( long 2 Ġ- Ġlon 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ 2 Ġ* Ġr Ġ* Ġas in ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsqrt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsin ( d Lat Ġ/ Ġ 2 ). pow ( 2 . 0 ) Ġ+ Ġsin ( d Lon Ġ/ Ġ 2 ). pow ( 2 . 0 ) Ġ* Ġcos ( rad ian Lat 1 ) Ġ* Ġcos ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrad ian Lat 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }