/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 ĠSer gio ĠBel da Ċ Ġ* Ċ Ġ* Ġ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 Ġdev . ser gio bel da . tod ometer . ui . home Ċ Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . compose . animation . animate Color As State Ċ import Ġandroidx . compose . animation . core . Fast Out Slow In E asing Ċ import Ġandroidx . compose . animation . core . animate Dp As State Ċ import Ġandroidx . compose . animation . core . t ween Ċ import Ġandroidx . compose . animation . graphics . Experimental Animation Graphics Api Ċ import Ġandroidx . compose . animation . graphics . res . animated Vector Resource Ċ import Ġandroidx . compose . animation . graphics . res . remember Animated Vector Painter Ċ import Ġandroidx . compose . animation . graphics . vector . Animated Image Vector Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . size Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . foundation . selection . selectable Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . material . AlertDialog Ċ import Ġandroidx . compose . material . Button Ċ import Ġandroidx . compose . material . Dismiss Direction Ċ import Ġandroidx . compose . material . Dismiss Value Ċ import Ġandroidx . compose . material . Experimental Material Api Ċ import Ġandroidx . compose . material . Fab Position Ċ import Ġandroidx . compose . material . Floating ActionButton Ċ import Ġandroidx . compose . material . Fraction al Threshold Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . Modal Bottom Sheet Layout Ċ import Ġandroidx . compose . material . Modal Bottom Sheet Value Ċ import Ġandroidx . compose . material . RadioButton Ċ import Ġandroidx . compose . material . Sca ffold Ċ import Ġandroidx . compose . material . Swipe To Dismiss Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . Text Button Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . outlined . Delete Ċ import Ġandroidx . compose . material . icons . outlined . Edit Ċ import Ġandroidx . compose . material . icons . rounded . Add Ċ import Ġandroidx . compose . material . icons . rounded . Expand Less Ċ import Ġandroidx . compose . material . icons . rounded . Expand More Ċ import Ġandroidx . compose . material . remember Dismiss State Ċ import Ġandroidx . compose . material . remember Modal Bottom Sheet State Ċ import Ġandroidx . compose . material . remember Sca ffold State Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . remember Coroutine Scope Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . semantics . Role Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġdev . ser gio bel da . tod ometer . R Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . components . Horizontal Divider Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . components . Single Line Item Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . components . Two Line Item Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . task . Task Item Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . task list . Task ListItem Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . theme . Tod ometer Colors Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . theme . Tod ometer Typography Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . theme . drawer Shape Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . theme . on Surface Medium Emp hasis Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . theme . outline Ċ import Ġdev . ser gio bel da . tod ometer . common . compose . ui . theme . sheet Shape Ċ import Ġdev . ser gio bel da . tod ometer . common . domain . model . Task Ċ import Ġdev . ser gio bel da . tod ometer . common . domain . model . TaskList Ċ import Ġdev . ser gio bel da . tod ometer . common . domain . model . Task State Ċ import Ġdev . ser gio bel da . tod ometer . common . domain . preference . App Theme Ċ import Ġdev . ser gio bel da . tod ometer . gl ance . To D ometer Widget Receiver Ċ import Ġdev . ser gio bel da . tod ometer . preferences . app Theme Map Ċ import Ġdev . ser gio bel da . tod ometer . ui . components . To D ometer AlertDialog Ċ import Ġdev . ser gio bel da . tod ometer . ui . components . To D ometer Content Loading Progress Ċ import Ġdev . ser gio bel da . tod ometer . ui . components . To D ometer Title Ċ import Ġdev . ser gio bel da . tod ometer . ui . components . To D ometer Top AppBar Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . k oin . android x . compose . get ViewModel Ċ Ċ @ Opt In ( Experimental Material Api :: class ) Ċ @ Composable Ċ fun ĠHome Screen ( ĊĠĠĠ Ġadd TaskList : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġedit TaskList : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġadd Task : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġopen Task : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġopen Source License s : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġabout : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġhome ViewModel : ĠHome ViewModel Ġ= Ġget ViewModel () Ċ ) Ġ{ ĊĠĠĠ Ġval Ġscope Ġ= Ġremember Coroutine Scope () ĊĠĠĠ Ġ// ĠTODO : ĠUse Ġskip Half Expanded Ġwhen Ġavailable . ĊĠĠĠ Ġval Ġsheet State Ġ= Ġremember Modal Bottom Sheet State ( Modal Bottom Sheet Value . Hidden ) ĊĊĠĠĠ Ġval Ġscaffold State Ġ= Ġremember Sca ffold State () ĊĠĠĠ Ġval Ġclose Drawer : Ġsuspend Ġ() Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġscaffold State . drawer State . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġselected Task Ġby Ġremember Ġ{ Ġmutable State Of ("") Ġ} ĊĠĠĠ Ġvar Ġdelete Task AlertDialog State Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ Ġvar Ġdelete TaskList AlertDialog State Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ Ġvar Ġchoose Theme AlertDialog State Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĊĠĠĠ Ġval Ġhome Ui State Ġ= Ġhome ViewModel . home Ui State ĊĠĠĠ Ġval Ġapp Theme Ġby Ġhome ViewModel . app Theme . collect As State () ĊĊĠĠĠ Ġval Ġdefault TaskList Name Ġ= Ġstring Resource ( R . string . default _ task _ list _ name ) ĊĊĠĠĠ ĠModal Bottom Sheet Layout ( ĊĠĠĠĠĠĠĠ Ġsheet State Ġ= Ġsheet State , ĊĠĠĠĠĠĠĠ Ġsheet Elevation Ġ= Ġ 1 6 . dp , ĊĠĠĠĠĠĠĠ Ġsheet Shape Ġ= Ġsheet Shape , ĊĠĠĠĠĠĠĠ Ġsheet Content Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMore Bottom Sheet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit TaskList Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsheet State . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit TaskList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit TaskList Enabled Ġ= Ġ! home Ui State . is Default TaskList Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete TaskList Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete TaskList AlertDialog State Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete TaskList Enabled Ġ= Ġ! home Ui State . is Default TaskList Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Theme Ġ= Ġapp Theme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoose Theme Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoose Theme AlertDialog State Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Source License s Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsheet State . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Source License s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabout Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsheet State . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Shape Ġ= Ġdrawer Shape , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Gest ures Enabled Ġ= Ġscaffold State . drawer State . isOpen , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Content Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDraw er Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome Ui State . task List Selected ?. id Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault TaskList Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome Ui State . task Lists , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd TaskList Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Drawer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd TaskList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect TaskList Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome ViewModel . set TaskList Selected ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ Ġclose Drawer () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate To D ometer Widget Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscaffold State Ġ= Ġscaffold State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTo D ometer Top AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Menu Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ Ġscaffold State . drawer State . open () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon More Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ Ġsheet State . show () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome Ui State . task List Selected ?. name Ġ?: Ġdefault TaskList Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome Ui State . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delete Task AlertDialog State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDelete Task AlertDialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{ Ġdelete Task AlertDialog State Ġ= Ġfalse Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Task Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome ViewModel . delete Task ( selected Task ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate To D ometer Widget Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delete TaskList AlertDialog State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDelete TaskList AlertDialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{ Ġdelete TaskList AlertDialog State Ġ= Ġfalse Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete TaskList Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome ViewModel . delete TaskList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate To D ometer Widget Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsheet State . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( choose Theme AlertDialog State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChoose Theme AlertDialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Theme Ġ= Ġapp Theme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{ Ġchoose Theme AlertDialog State Ġ= Ġfalse Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoose Theme Ġ= Ġ{ Ġtheme Ġ-> Ġhome ViewModel . set App Theme ( theme ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( home Ui State . isLoading Tasks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTo D ometer Content Loading Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( home Ui State . tasks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask List Ill ustration ( R . drawable . no _ tasks , Ġstring Resource ( R . string . no _ tasks )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTasks ListView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome Ui State . tasks , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Do ing Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome ViewModel . set Task Do ing ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate To D ometer Widget Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Done Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome ViewModel . set Task Done ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate To D ometer Widget Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Task Item Click Ġ= Ġopen Task , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Task Item Long Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Task AlertDialog State Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Task Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Swipe To Dismiss Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Task AlertDialog State Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Task Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloating ActionButton Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFloating ActionButton ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠTod ometer Colors . primary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġadd Task ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Rounded . Add , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( R . string . add _ task ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloating ActionButton Position Ġ= ĠF ab Position . End ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠChoose Theme AlertDialog ( ĊĠĠĠ Ġcurrent Theme : ĠApp Theme , ĊĠĠĠ Ġon Dismiss Request : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġchoose Theme : Ġ( theme : ĠApp Theme ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġtheme Selected Ġby Ġremember Ġ{ Ġmutable State Of ( current Theme ) Ġ} ĊĠĠĠ ĠTo D ometer AlertDialog ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( R . string . choose _ theme ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġon Dismiss Request , ĊĠĠĠĠĠĠĠ Ġbody Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Column Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Theme Map . forEach Ġ{ Ġ( app Theme , Ġapp Theme Option ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 5 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. selectable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġtheme Selected Ġ== Ġapp Theme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġtheme Selected Ġ= Ġapp Theme Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrole Ġ= ĠRole . RadioButton ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġ 1 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRadio Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġtheme Selected Ġ== Ġapp Theme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġtheme Selected Ġ= Ġapp Theme Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( app Theme Option . mode Name Res ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTod ometer Typography . body 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( start Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġconfirm Button Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoose Theme ( theme Selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( android . R . string . ok )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdismiss Button Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( onClick Ġ= Ġon Dismiss Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . cancel )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ fun ĠDelete TaskList AlertDialog ( on Dismiss Request : Ġ() Ġ-> ĠUnit , Ġdelete TaskList : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠAlertDialog ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . delete _ task _ list )) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġon Dismiss Request , ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . delete _ task _ list _ question )) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġconfirm Button Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete TaskList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( android . R . string . ok )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdismiss Button Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( onClick Ġ= Ġon Dismiss Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . cancel )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ fun ĠDelete Task AlertDialog ( on Dismiss Request : Ġ() Ġ-> ĠUnit , Ġdelete Task : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠAlertDialog ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . delete _ task )) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġon Dismiss Request , ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . delete _ task _ question )) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġconfirm Button Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Task () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( android . R . string . ok )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdismiss Button Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( onClick Ġ= Ġon Dismiss Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . cancel )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ fun ĠDraw er Content ( ĊĠĠĠ Ġselected TaskList Id : ĠString , ĊĠĠĠ Ġdefault TaskList Name : ĠString , ĊĠĠĠ Ġtask Lists : ĠList < TaskList >, ĊĠĠĠ Ġadd TaskList : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġselect TaskList : Ġ( String ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . height ( 5 6 . dp ). fill Max Width () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTo D ometer Title ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Center Start ). padding ( start Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠHorizontal Divider () ĊĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 5 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( start Ġ= Ġ 1 6 . dp , Ġend Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( R . string . task _ lists ). uppercase (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTod ometer Typography . over line ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . weight ( 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( onClick Ġ= Ġadd TaskList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . add _ task _ list ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTod ometer Typography . caption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠHorizontal Divider () ĊĠĠĠĠĠĠĠ ĠLazy Column ( modifier Ġ= ĠModifier . padding ( 8 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask ListItem ( default TaskList Name , Ġselected TaskList Id Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect TaskList ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( task Lists ) Ġ{ Ġtask List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask ListItem ( task List . name , Ġtask List . id Ġ== Ġselected TaskList Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect TaskList ( task List . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( ĊĠĠĠ ĠExperimental Foundation Api :: class , ĊĠĠĠ ĠExperimental Material Api :: class , ĊĠĠĠ ĠExperimental Animation Graphics Api :: class Ċ ) Ċ @ Composable Ċ fun ĠTasks ListView ( ĊĠĠĠ Ġtasks : ĠList < Task >, ĊĠĠĠ Ġon Do ing Click : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Done Click : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Task Item Click : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Task Item Long Click : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Swipe To Dismiss : Ġ( String ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġtasks Do ing Ġ= Ġtasks . filter Ġ{ Ġit . state Ġ== ĠTask State . DO ING Ġ} ĊĠĠĠ Ġval Ġtasks Done Ġ= Ġtasks . filter Ġ{ Ġit . state Ġ== ĠTask State . DONE Ġ} ĊĠĠĠ Ġvar Ġare Tasks Done Visible Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ ĠLazy Column Ġ{ ĊĠĠĠĠĠĠĠ Ġitems ( tasks Do ing , Ġkey Ġ= Ġ{ Ġit . id Ġ}) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSw ipe able Task Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Do ing Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Done Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Task Item Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Task Item Long Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . animate Item Placement () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġon Swipe To Dismiss ( task . id ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( tasks Done . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle Line Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . completed _ tasks , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Done . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrailing Icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( are Tasks Done Visible ) ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Rounded . Expand Less , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse ĠIcon ( Icons . Rounded . Expand More , Ġcontent Description Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . animate Item Placement (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġare Tasks Done Visible Ġ= Ġ! are Tasks Done Visible Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( are Tasks Done Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( tasks Done , Ġkey Ġ= Ġ{ Ġit . id Ġ}) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSw ipe able Task Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Do ing Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Done Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Task Item Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Task Item Long Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . animate Item Placement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġon Swipe To Dismiss ( task . id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 8 4 . dp )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( tasks Do ing . isEmpty () Ġ&& Ġ! are Tasks Done Visible ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTask List Ill ustration ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . completed _ tasks , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . you _ have _ completed _ all _ tasks ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . congr at ulations ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( ĊĠĠĠ ĠExperimental Material Api :: class , ĊĠĠĠ ĠExperimental Animation Graphics Api :: class , ĊĠĠĠ ĠExperimental Foundation Api :: class Ċ ) Ċ @ Composable Ċ fun ĠSw ipe able Task Item ( ĊĠĠĠ Ġtask : ĠTask , ĊĠĠĠ Ġon Do ing Click : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Done Click : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Task Item Click : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Task Item Long Click : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġon Swipe To Dismiss : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġdismiss State Ġ= Ġremember Dismiss State ( ĊĠĠĠĠĠĠĠ Ġconfirm StateChange Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠDis miss Value . Dis missed ToEnd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Swipe To Dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ!= ĠDis miss Value . Dis missed ToEnd ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ ĠSw ipe To Dismiss ( ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġdismiss State , ĊĠĠĠĠĠĠĠ Ġdirections Ġ= Ġset Of ( Dismiss Direction . Start ToEnd ), ĊĠĠĠĠĠĠĠ Ġdismiss Threshold s Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFraction al Threshold ( 0 . 1 f ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġbackground Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġby Ġanimate Color As State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dismiss State . target Value Ġ== ĠDis miss Value . Default ) ĠTod ometer Colors . outline Ġelse ĠTod ometer Colors . error , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġt ween ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeasing Ġ= ĠFast Out Slow In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt int Ġby Ġanimate Color As State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dismiss State . target Value Ġ== ĠDis miss Value . Default ) ĠTod ometer Colors . on Surface Medium Emp hasis Ġelse ĠTod ometer Colors . onError , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġt ween ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeasing Ġ= ĠFast Out Slow In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= ĠAnimated Image Vector . animated Vector Resource ( R . drawable . av d _ delete ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . fill MaxSize (). background ( color ). padding ( horizontal Ġ= Ġ 1 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremember Animated Vector Painter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġat End Ġ= Ġdismiss State . target Value Ġ== ĠDis miss Value . Dis missed ToEnd ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( R . string . delete _ task ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= Ġt int ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdismiss Content Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdp Ġby Ġanimate Dp As State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dismiss State . target Value Ġ== ĠDis miss Value . Default ) Ġ 0 . dp Ġelse Ġ 8 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġt ween ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeasing Ġ= ĠFast Out Slow In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTask Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Do ing Click Ġ= Ġon Do ing Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Done Click Ġ= Ġon Done Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġon Task Item Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Long Click Ġ= Ġon Task Item Long Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . clip ( Rounded Corner Shape ( dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ fun ĠTask List Ill ustration ( ĊĠĠĠ Ġ@ Drawable Res Ġdrawable Res : ĠInt , ĊĠĠĠ Ġtext : ĠString , ĊĠĠĠ Ġsecondary Text : ĠString ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Center ). padding ( bottom Ġ= Ġ 7 2 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Resource ( drawable Res ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( 2 2 0 . dp ). padding ( bottom Ġ= Ġ 3 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġtext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecondary Text ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠTod ometer Colors . on Surface Medium Emp hasis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( top Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ @ Deprecated (" To Ġbe Ġremoved ") Ċ fun ĠEmpty Task Lists View ( add TaskList : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Center ). padding ( bottom Ġ= Ġ 7 2 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Resource ( R . drawable . no _ task _ lists ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( 2 4 0 . dp ). padding ( bottom Ġ= Ġ 2 4 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . no _ task _ lists ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( bottom Ġ= Ġ 4 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġadd TaskList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( R . string . add _ task _ list )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠMore Bottom Sheet ( ĊĠĠĠ Ġedit TaskList Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġedit TaskList Enabled : ĠBoolean , ĊĠĠĠ Ġdelete TaskList Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġdelete TaskList Enabled : ĠBoolean , ĊĠĠĠ Ġchoose Theme Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġopen Source License s Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġabout Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġcurrent Theme : ĠApp Theme Ċ ) Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( top Ġ= Ġ 1 6 . dp ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSingle Line Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Outlined . Edit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( R . string . edit _ task _ list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . edit _ task _ list ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTod ometer Typography . caption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġedit TaskList Click , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġedit TaskList Enabled ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSingle Line Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Outlined . Delete , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( R . string . delete _ task _ list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . delete _ task _ list ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTod ometer Typography . caption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġdelete TaskList Click , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġdelete TaskList Enabled ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠHorizontal Divider () ĊĠĠĠĠĠĠĠ ĠTwo Line Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Theme Map [ current Theme ]?. theme Icon Res ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Resource ( it ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( R . string . theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . theme ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTod ometer Typography . caption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Theme Map [ current Theme ]?. mode Name Res ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( it ), Ġstyle Ġ= ĠTod ometer Typography . caption ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġchoose Theme Click ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠHorizontal Divider () ĊĠĠĠĠĠĠĠ ĠRow ( vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ġmodifier Ġ= ĠModifier . padding ( 8 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( onClick Ġ= Ġopen Source License s Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . open _ source _ licenses ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTod ometer Typography . caption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Â· ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Button ( onClick Ġ= Ġabout Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . about ), Ġstyle Ġ= ĠTod ometer Typography . caption ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġupdate To D ometer Widget Data () Ġ{ ĊĠĠĠ ĠTo D ometer Widget Receiver (). update Data () Ċ } Ċ