/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 Ġ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 r . ui . detail Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . example . android . track r . R Ċ import Ġcom . example . android . track r . data . Task Detail Ċ import Ġcom . example . android . track r . databinding . Task Detail Fragment Binding Ċ import Ġcom . example . android . track r . ui . Two Pane ViewModel Ċ import Ġcom . example . android . track r . ui . data Bindings Ċ import Ġcom . example . android . track r . ui . utils . repeat With View Lifecycle Ċ import Ġcom . example . android . track r . utils . DateTime Utils Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . time . Clock Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠTask Detail Fragment Ġ: ĠFragment ( R . layout . task _ detail _ fragment ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtask Detail ViewModel : ĠTask Detail ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġtwo Pane ViewModel : ĠTwo Pane ViewModel Ġby Ġactivity ViewModels () ĊĊĠĠĠ Ġprivate Ġval Ġargs : ĠTask Detail Fragment Args Ġby Ġnav Args () ĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġdata Bindings ( Task Detail Fragment Binding :: bind ) ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġclock : ĠClock ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġtask Detail ViewModel . taskId . value Ġ= Ġargs . taskId ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= Ġtask Detail ViewModel ĊĠĠĠĠĠĠĠ Ġbinding . clock Ġ= Ġclock ĊĊĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtwo Pane ViewModel . on Detail Pane Navigate Up () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . menu . find Item ( R . id . action _ edit ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= Ġaction View Ġas ĠMaterial Button ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . text Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . icon Ġ= Ġicon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtwo Pane ViewModel . on Edit Task ( args . taskId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrepeat With View Lifecycle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Detail ViewModel . detail . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Content Descriptions ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtwo Pane ViewModel . is Two Pane . collect Ġ{ Ġis Two Pane Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Two Pane ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . toolbar . navigation Icon Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation Icon ( R . drawable . ic _ chevron _ start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . edit . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtwo Pane ViewModel . on Edit Task ( args . taskId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . star . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Detail ViewModel . toggle Task Star State () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Content Descriptions ( task Detail : ĠTask Detail ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtask Detail ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . due At . content Description Ġ= Ġresources . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . due _ date _ with _ value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Utils . formatted Date ( resources , Ġit . due At , Ġclock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . createdAt . content Description Ġ= Ġresources . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . creation _ date _ with _ value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Utils . formatted Date ( resources , Ġit . createdAt , Ġclock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . owner . content Description Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . owner _ with _ value , Ġit . owner . username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . creator . content Description Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . creator _ with _ value , Ġit . creator . username ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ