package Ġcom . github . ll max im ll . todo app . presentation . explore . view Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroidx . appcompat . widget . List Popup Window Ċ import Ġandroidx . core . view . do On Pre Draw Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . Fragment Navigator Extras Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . github . ll max im ll . todo app . R Ċ import Ġcom . github . ll max im ll . todo app . databinding . Fragment Explore Binding Ċ import Ġcom . github . ll max im ll . todo app . presentation . explore . view model . Explore ViewModel Ċ import Ġcom . github . ll max im ll . todo app . presentation . explore . view model . Filter Tasks Ċ import Ġcom . github . ll max im ll . todo app . presentation . explore . view model . Tasks Result Ċ import Ġcom . github . ll max im ll . todo app . utils . safe Navigate Ċ import Ġcom . github . ll max im ll . todo app . utils . toList All Ċ import Ġcom . github . ll max im ll . todo app . utils . toList Over due Ċ import Ġcom . google . android . material . transition . Material Elevation Scale Ċ import Ġcom . google . android . material . transition . Material Shared Axis Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass Ġas Ġthe Ġdefault Ġdestination Ġin Ġthe Ġnavigation . Ċ Ġ*/ Ċ @ Android EntryPoint Ċ class ĠExplo re Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Explore Binding ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠExplo re ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġtasks Adapter Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTasks Adapter ( require Context (), Ġ:: on Task Clicked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Explore Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġpost p one Enter Transition () ĊĠĠĠĠĠĠĠ Ġview . do On Pre Draw Ġ{ Ġstart Post p oned Enter Transition () Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup Listeners () ĊĠĠĠĠĠĠĠ Ġsetup Lists () ĊĠĠĠĠĠĠĠ ĠviewModel . tasks Result . observe ( view Lifecycle Owner , Ġ:: handle Tasks ) ĊĠĠĠĠĠĠĠ ĠviewModel . filter State . observe ( view Lifecycle Owner , Ġ:: handle Filter Tasks ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĊĠĠĠĠĠĠĠ ĠviewModel . fetch Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tool Bar . setOn MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . search _ fragment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Z , Ġtrue ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre enter Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Z , Ġfalse ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirections Ġ= ĠExplo re Fragment Directions . action Explore Fragment To Search Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). safe Navigate ( directions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . fab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ Explore Fragment _ to _ Add Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Transition Ġ= ĠMaterial Elevation Scale ( false ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre enter Transition Ġ= ĠMaterial Elevation Scale ( true ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . tasks Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Tasks Menu ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Lists () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . today RecyclerView . layout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠ Ġbinding . today RecyclerView . adapter Ġ= Ġtasks Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Tasks ( state : ĠTasks Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTasks Result . Success Result Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . current List Ġ= Ġstate . result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( binding . tasks Button . text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( Filter Tasks . ALL . value ) Ġ-> Ġtasks Adapter . submit List ( viewModel . current List . toList All ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( Filter Tasks . OVER D UE . value ) Ġ-> Ġtasks Adapter . submit List ( viewModel . current List . toList Over due ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtasks Adapter . submit List ( viewModel . current List . toList All ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTasks Result . Error Result Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTasks Result . Empty Result Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTasks Result . Loading Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Filter Tasks ( state : ĠFilter Tasks ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Tasks . ALL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tasks Button . text Ġ= ĠgetString ( Filter Tasks . ALL . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Adapter . submit List ( viewModel . current List . toList All ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Tasks . OVER D UE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tasks Button . text Ġ= ĠgetString ( Filter Tasks . OVER D UE . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Adapter . submit List ( viewModel . current List . toList Over due ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading Categories () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading Categories () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Task Clicked ( id : ĠLong , Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexit Transition Ġ= ĠMaterial Elevation Scale ( false ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre enter Transition Ġ= ĠMaterial Elevation Scale ( true ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠTim ber . i (" id =$ id ") ĊĠĠĠĠĠĠĠ Ġval Ġextras Ġ= ĠFragment Navigator Extras ( view Ġto Ġview . transition Name ) ĊĠĠĠĠĠĠĠ Ġval Ġdirections Ġ= ĠExplo re Fragment Directions . action Explore Fragment To Details Fragment ( id ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). safe Navigate ( directions , Ġextras ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġshow Tasks Menu ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Popup Window Ġ= ĠList Popup Window ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcom . google . android . material . R . attr . list Popup Window Style ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlist Popup Window . anchor View Ġ= Ġv ĊĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( Filter Tasks . ALL . value ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( Filter Tasks . OVER D UE . value ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠArray Adapter ( require Context (), ĠR . layout . list _ popup _ window _ item , Ġitems ) ĊĠĠĠĠĠĠĠ Ġlist Popup Window . setAdapter ( adapter ) ĊĊĠĠĠĠĠĠĠ Ġlist Popup Window . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠviewModel . toggle Filter State ( Filter Tasks . ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠviewModel . toggle Filter State ( Filter Tasks . OVER D UE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Popup Window . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist Popup Window . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }