/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 , Ġ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 . Observer Ċ 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 Ċ Ċ /** Ċ Ġ* Ġ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 () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe ĠFragment Ġis Ġready Ġto Ġdisplay Ġcontent Ġto Ġthe Ġscreen . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġuses ĠData Binding Util Ġto Ġinf late ĠR . layout . fragment _ sleep _ quality . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠFragment Sleep Tracker Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġa Ġreference Ġto Ġthe Ġapplication Ġcontext , Ġto Ġpass Ġto Ġthe Ġview - model Ġfactory Ġprovider ĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġrequire NotNull ( activity ). application ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġa Ġreference Ġto Ġthe Ġdata Ġsource Ġvia Ġa Ġreference Ġto Ġthe ĠDAO ĊĠĠĠĠĠĠĠ Ġval ĠdataSource Ġ= ĠSleep Database . getInstance ( application ). sleep Database Dao ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġan Ġinstance Ġof Ġthe ĠviewModel Factory ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Factory Ġ= ĠSleep Tracker ViewModel Factory ( dataSource , Ġapplication ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġa Ġreference Ġto Ġthe ĠSleep Tracker ViewModel ĊĠĠĠĠĠĠĠ Ġval Ġsleep Tracker ViewModel Ġ= ĠViewModel Provider ( this , ĠviewModel Factory ). get ( Sleep Tracker ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġbinding . start Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . onStart Tracking () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . stop Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . on Stop Tracking () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . clear Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . on Clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġobserve Ġchanges Ġto Ġnight String Ġand Ġupdate Ġthe ĠTextView Ġaccordingly ĊĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . n ights String . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text view . text Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ Ġobserve Ġnavigate To Sleep Quality : Ġwhen Ġa Ġnew Ġvalue Ġis Ġset , Ġnavigate Ġto ĠSleep Quality Fragment ĊĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . navigate To Sleep Quality . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnavigate Ġand Ġpass Ġalong Ġthe ĠID Ġof Ġthe Ġcurrent Ġnight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirections Ġ= ĠSleep Tracker Fragment Directions . action Sleep Tracker Fragment To Sleep Quality Fragment ( it . night Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( directions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . done Navig ating () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . start Button Visible . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . start Button . isEnabled Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . stop Button Visible . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . stop Button . isEnabled Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . clear Button Visible . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . clear Button . isEnabled Ġ= Ġit !! ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . show Sn ackBar Event . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdisplay Ġthe Ġsn ackbar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġrequire Activity (). findViewById < View >( android . R . id . content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( activity , ĠgetString ( R . string . cleared _ message ), ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġimmediately Ġreset Ġthe Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep Tracker ViewModel . done Showing Snackbar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} Ċ } Ċ