/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . example . android . track mys leep quality . sleep tracker Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . example . android . track mys leep quality . R Ċ import Ġcom . example . android . track mys leep quality . database . Sleep Database Ċ import Ġcom . example . android . track mys leep quality . databinding . Fragment Sleep Tracker Binding Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . android . synt hetic . main . fragment _ sleep _ tracker .* Ċ Ċ /** Ċ Ġ* ĠA Ġfragment Ġwith Ġbuttons Ġto Ġrecord Ġstart Ġand Ġend Ġtimes Ġfor Ġsleep , Ġwhich Ġare Ġsaved Ġin Ċ Ġ* Ġa Ġdatabase . ĠC umulative Ġdata Ġis Ġdisplayed Ġin Ġa Ġsimple Ġscroll able ĠTextView . Ċ Ġ* Ġ( Because Ġwe Ġhave Ġnot Ġlearned Ġabout ĠRecyclerView Ġyet .) Ċ Ġ*/ Ċ class ĠSleep Tracker Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfactory : ĠSleep Tracker ViewModel Factory ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġa Ġreference Ġto Ġthe Ġbinding Ġobject Ġand Ġinf late Ġthe Ġfragment Ġviews . ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠFragment Sleep Tracker Binding . inflate ( in flater ) ĊĊĊĠĠĠĠĠĠĠ Ġ// application ĊĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġrequire NotNull ( activity ). application ĊĊĊĠĠĠĠĠĠĠ Ġ// Dao ĊĊĠĠĠĠĠĠĠ Ġval Ġdao Ġ= ĠSleep Database . getInstance ( application ). sleep Database Dao ĊĊĠĠĠĠĠĠĠ Ġ// initialize ĠViewModel ĠFactory ĊĊĊĠĠĠĠĠĠĠ Ġfactory Ġ= ĠSleep Tracker ViewModel Factory ( dao , Ġapplication ) ĊĊĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĠViewModel Provider ( this , Ġfactory ). get ( Sleep Tracker ViewModel :: class . java ) ĊĊĊĠĠĠĠĠĠĠ Ġ// link Ġbinding Ġwith Ġthe ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĊĊĠĠĠĠĠĠĠ Ġ// make Ġbinding Ġobserve Ġlive Data ĊĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĊĊĠĠĠĠĠĠĠ Ġ// observe ĠNav ĠEvent ĊĠĠĠĠĠĠĠ ĠviewModel . event Navigate To Sleep Detail . observe ( view Lifecycle Owner ) Ġ{ Ġnight Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġnight ?. night Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġid ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSleep Tracker Fragment Directions . action Sleep Tracker Fragment To Sleep Quality Fragment ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . navigation Complete () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// observe ĠSn ackBar Event ĊĊĠĠĠĠĠĠĠ ĠviewModel . show Sn ackBar Event . observe ( view Lifecycle Owner ){ ĊĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar Event Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sn ackBar Event ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , Ġresources . getString ( R . string . cleared _ message ), ĠSn ackbar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Sn ackBar Event Finished () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// instantiate Ġadapter ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠSleep Night Adapter () ĊĊĠĠĠĠĠĠĠ Ġ// set ĠRecyclerView 's ĠAdapter ĊĊĠĠĠĠĠĠĠ Ġ// binding . sleep _ list . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġbinding . sleep List . adapter Ġ= Ġadapter ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġobserve Ġand Ġshow Ġnight Ġwhen Ġit Ġis Ġnot Ġnull ĊĠĠĠĠĠĠĠ ĠviewModel . n ights . observe ( view Lifecycle Owner ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// adapter . data Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} Ċ } Ċ