/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 , Ġ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 . architecture . blueprint s . todo app . tasks Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Floating ActionButton Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 4 . widget . Swipe Refresh Layout Ċ import Ġandroid . support . v 7 . widget . PopupMenu Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Base Adapter Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . ListView Ċ import Ġandroid . widget . TextView Ċ import Ġcom . example . android . architecture . blueprint s . todo app . R Ċ import Ġcom . example . android . architecture . blueprint s . todo app . added it task . Add Edit Task Activity Ċ import Ġcom . example . android . architecture . blueprint s . todo app . data . Task Ċ import Ġcom . example . android . architecture . blueprint s . todo app . task detail . Task Detail Activity Ċ import Ġcom . example . android . architecture . blueprint s . todo app . util . show Sn ackBar Ċ import Ġjava . util . ArrayList Ċ Ċ /** Ċ Ġ* ĠDisplay Ġa Ġgrid Ġof Ġ[ Task ] s . ĠUser Ġcan Ġchoose Ġto Ġview Ġall , Ġactive Ġor Ġcompleted Ġtasks . Ċ Ġ*/ Ċ class ĠTasks Fragment Ġ: ĠFragment (), ĠTasks Contract . View Ġ{ ĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġpresenter : ĠTasks Contract . Presenter ĊĊĠĠĠ Ġoverride Ġvar ĠisActive : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġis Added ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġno Tasks View : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġno Task Icon : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġno Task Main View : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġno Task Add View : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtasks View : ĠLinearLayout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfiltering Label View : ĠTextView ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġfor Ġclicks Ġon Ġtasks Ġin Ġthe ĠListView . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġvar Ġitem Listener : ĠTask Item Listener Ġ= Ġobject Ġ: ĠTask Item Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Task Click ( clicked Task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . open Task Details ( clicked Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete Task Click ( completed Task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . complete Task ( completed Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activate Task Click ( activated Task : ĠTask ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . activate Task ( activated Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlist Adapter Ġ= ĠTasks Adapter ( ArrayList ( 0 ), Ġitem Listener ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġpresenter . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . result ( request Code , ĠresultCode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġinflater . inflate ( R . layout . tasks _ frag , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġtasks Ġview ĊĠĠĠĠĠĠĠ Ġwith ( root ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlistView Ġ= ĠfindViewById < ListView >( R . id . tasks _ list ). apply Ġ{ Ġadapter Ġ= Ġlist Adapter Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġprogress Ġindicator ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < Scroll Child Swipe Refresh Layout >( R . id . refresh _ layout ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Color Scheme Colors ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( require Context (), ĠR . color . color Primary ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( require Context (), ĠR . color . color Accent ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( require Context (), ĠR . color . color Primary Dark ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġscrolling Ġview Ġin Ġthe Ġcustom ĠSw ipe Refresh Layout . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Up Child Ġ= ĠlistView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Refresh Listener Ġ{ Ġpresenter . load Tasks ( false ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiltering Label View Ġ= ĠfindViewById ( R . id . filtering Label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks View Ġ= ĠfindViewById ( R . id . tasks LL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġ Ġno Ġtasks Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Tasks View Ġ= ĠfindViewById ( R . id . no Tasks ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Task Icon Ġ= ĠfindViewById ( R . id . no Tasks Icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Task Main View Ġ= ĠfindViewById ( R . id . no Tasks Main ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Task Add View Ġ= Ġ( findViewById < TextView >( R . id . no Tasks Add )). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOnClickListener Ġ{ Ġshow Add Task () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġfloating Ġaction Ġbutton ĊĠĠĠĠĠĠĠ Ġrequire Activity (). findViewById < Floating ActionButton >( R . id . fab _ add _ task ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Resource ( R . drawable . ic _ add ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ Ġpresenter . add New Task () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ clear Ġ-> Ġpresenter . clear Completed Tasks () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ filter Ġ-> Ġshow Filtering Pop Up Menu () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ refresh Ġ-> Ġpresenter . load Tasks ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?, Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . tasks _ fragment _ menu , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Filtering Pop Up Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠPopup Menu ( context , Ġactivity . findViewById ( R . id . menu _ filter )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . filter _ tasks , Ġmenu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . active Ġ-> Ġpresenter . current Filtering Ġ= ĠTasks Filter Type . ACTIVE _ TASK S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . completed Ġ-> Ġpresenter . current Filtering Ġ= ĠTasks Filter Type . COMPLETED _ TASK S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpresenter . current Filtering Ġ= ĠTasks Filter Type . ALL _ TASK S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . load Tasks ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Loading Indicator ( active : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġview Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġwith ( root . findViewById < Swipe Refresh Layout >( R . id . refresh _ layout )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġset Refresh ing () Ġis Ġcalled Ġafter Ġthe Ġlayout Ġis Ġdone Ġwith Ġeverything Ġelse . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ Ġis Refresh ing Ġ= Ġactive Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Tasks ( tasks : ĠList < Task >) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Adapter . tasks Ġ= Ġtasks ĊĠĠĠĠĠĠĠ Ġtasks View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġno Tasks View . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow No Active Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow No Tasks Views ( resources . getString ( R . string . no _ tasks _ active ), ĠR . drawable . ic _ check _ circle _ 2 4 dp , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow No Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow No Tasks Views ( resources . getString ( R . string . no _ tasks _ all ), ĠR . drawable . ic _ assignment _ turn ed _ in _ 2 4 dp , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow No Completed Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow No Tasks Views ( resources . getString ( R . string . no _ tasks _ completed ), ĠR . drawable . ic _ verified _ user _ 2 4 dp , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Successfully Saved Message () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . successfully _ saved _ task _ message )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow No Tasks Views ( main Text : ĠString , Ġicon Res : ĠInt , Ġshow Add View : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġno Tasks View . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġno Task Main View . text Ġ= Ġmain Text ĊĠĠĠĠĠĠĠ Ġno Task Icon . setImage Resource ( icon Res ) ĊĠĠĠĠĠĠĠ Ġno Task Add View . visibility Ġ= Ġif Ġ( show Add View ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Active Filter Label () Ġ{ ĊĠĠĠĠĠĠĠ Ġfiltering Label View . text Ġ= Ġresources . getString ( R . string . label _ active ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Completed Filter Label () Ġ{ ĊĠĠĠĠĠĠĠ Ġfiltering Label View . text Ġ= Ġresources . getString ( R . string . label _ completed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow All Filter Label () Ġ{ ĊĠĠĠĠĠĠĠ Ġfiltering Label View . text Ġ= Ġresources . getString ( R . string . label _ all ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Add Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠAdd Edit Task Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠAdd Edit Task Activity . REQUEST _ ADD _ TASK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Task Details Ui ( taskId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġin Ġit 's Ġown ĠActivity , Ġsince Ġit Ġmakes Ġmore Ġsense Ġthat Ġway Ġand Ġit Ġgives Ġus Ġthe Ġflexibility ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġshow Ġsome ĠIntent Ġstub bing . ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠTask Detail Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Task Detail Activity . EXTRA _ TASK _ ID , ĠtaskId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Task Marked Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . task _ marked _ complete )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Task Marked Active () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . task _ marked _ active )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Completed Tasks Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . completed _ tasks _ cleared )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Loading Tasks Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . loading _ tasks _ error )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Message ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. show Sn ackBar ( message , ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTasks Adapter ( tasks : ĠList < Task >, Ġprivate Ġval Ġitem Listener : ĠTask Item Listener ) ĊĠĠĠĠĠĠĠ Ġ: ĠBase Adapter () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġtasks : ĠList < Task > Ġ= Ġtasks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( tasks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġtasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count () Ġ= Ġtasks . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ( i : ĠInt ) Ġ= Ġtasks [ i ] ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Id ( i : ĠInt ) Ġ= Ġi . to Long () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View ( i : ĠInt , Ġview : ĠView ?, Ġview Group : ĠViewGroup ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠgetItem ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow View Ġ= Ġview Ġ?: ĠLayoutInflater . from ( view Group . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . task _ item , Ġview Group , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( row View . findViewById < TextView >( R . id . title )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtask . title For List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( row View . findViewById < CheckBox >( R . id . complete )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠActive / completed Ġtask ĠUI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġtask . is Completed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow View Background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Completed ) ĠR . drawable . list _ completed _ touch _ feedback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠR . drawable . touch _ feedback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow View . setBackground Resource ( row View Background ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! task . is Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Listener . onComplete Task Click ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Listener . on Activate Task Click ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow View . setOnClickListener Ġ{ Ġitem Listener . on Task Click ( task ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrow View ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠTask Item Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Task Click ( clicked Task : ĠTask ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠonComplete Task Click ( completed Task : ĠTask ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Activate Task Click ( activated Task : ĠTask ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠTasks Fragment () ĊĠĠĠ Ġ} Ċ Ċ } Ċ