package Ġcom . lambda _ labs . community _ calendar . view Ċ Ċ import ĠEvents Query Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Spinner Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . Search View . Search Auto Complete Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . forEach Ċ import Ġandroidx . core . view . get Ċ import Ġandroidx . core . view . size Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . Navigation Ċ import Ġcom . google . android . material . chip . Chip Ċ import Ġcom . google . android . material . text view . Material TextView Ċ import Ġcom . lambda _ labs . community _ calendar . R Ċ import Ġcom . lambda _ labs . community _ calendar . model . Filter Ċ import Ġcom . lambda _ labs . community _ calendar . model . Search Ċ import Ġcom . lambda _ labs . community _ calendar . util .* Ċ import Ġcom . lambda _ labs . community _ calendar . view model . Filter ViewModel Ċ import Ġcom . lambda _ labs . community _ calendar . view model . Shared Filter ViewModel Ċ import Ġkotlinx . android . synt hetic . main . fragment _ filter .* Ċ import Ġorg . k oin . android . ext . android . get Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġjava . util .* ĊĊ Ċ class ĠFilter Fragment Ġ: ĠFragment (), ĠAdapter View . On ItemSelected Listener Ġ{ ĊĊĠĠĠ Ġ// ĠReser ve Ġa Ġvariable Ġfor Ġthe Ġcontext ĊĠĠĠ Ġlateinit Ġvar Ġfrag Context : ĠContext ĊĊĠĠĠ Ġ// ĠStore Ġthe Ġcontext Ġvariable Ġas Ġan Ġactivity Ġtoo ĊĠĠĠ Ġlateinit Ġvar Ġfrag Activity : ĠMainActivity ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ filter , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġthe Ġcontext Ġis Ġnot Ġnull Ġbefore Ġassigning Ġit ĊĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrag Context Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrag Activity Ġ= Ġit Ġas ĠMainActivity ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( Filter Fragment :: class . java . simple Name , Ġ" Failed Ġto Ġassign Ġcontext !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠInstantiate Ġthis Ġfragment 's ĠViewModel Ġto Ġgain Ġaccess Ġto Ġthe Ġdata Ġfrom Ġthe Ġrepository ĊĠĠĠĠĠĠĠ Ġval Ġfilter ViewModel : ĠFilter ViewModel Ġby ĠviewModel () ĊĊĠĠĠĠĠĠĠ Ġ// ĠInstantiate Ġthe Ġshared ĠViewModel Ġto Ġallow Ġuser Ġselections Ġto Ġpersist Ġafter Ġfragment Ġde struction ĊĠĠĠĠĠĠĠ Ġval Ġshared Filter ViewModel : ĠShared Filter ViewModel Ġ= Ġget () ĊĊĠĠĠĠĠĠĠ Ġ// ĠPopulate Ġthe Ġinitial Ġchip Ġtags Ġto Ġbe Ġadded Ġto Ġthe Ġincluded Ġgroup ĊĠĠĠĠĠĠĠ Ġshared Filter ViewModel . get Shared Data (). value ?. tags ?. forEach Indexed Ġ{ Ġindex , Ġtag Text Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Chip ( frag Context , Ġtag Text , Ġindex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġstored Ġdata Ġin Ġthe Ġshared ĠViewModel Ġand Ġshow Ġthe Ġselections Ġin Ġthe Ġviews ĊĠĠĠĠĠĠĠ Ġshared Filter ViewModel . get Shared Data (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĠObserver < Filter > Ġ{ Ġfilter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Selections ( filter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe ĠSet Ġcollections Ġto Ġstore Ġall Ġof Ġthe Ġunique Ġtags Ġand Ġlocations ĊĠĠĠĠĠĠĠ Ġval Ġall Tags : ĠMutable Set < String > Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠ Ġval Ġall Locations : ĠMutable Set < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Set Of < String >( getString ( R . string . filter _ location _ hint )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġtouch Ġevent Ġon Ġthis Ġfragment Ġin Ġorder Ġto Ġprevent Ġviews Ġbene ath Ġfrom Ġrespon ding ĊĠĠĠĠĠĠĠ Ġview . setOn Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Touch Listener Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠReference Ġattribute Ġin ĠManifest Ġto Ġhave Ġproper Ġbehavior Ġof Ġthis Ġlayout Ġwhen Ġkeyboard Ġshows ĊĠĠĠĠĠĠĠ Ġfrag Activity . window . set Soft Input Mode ( WindowManager . LayoutParams . SOFT _ INPUT _ ADJ UST _ PAN ); ĊĊĠĠĠĠĠĠĠ Ġ// ĠActivate Ġthe Ġimage Ġof Ġthe ĠX Ġin Ġthe Ġupper Ġleft , Ġin Ġeffect Ġto Ġcancel , Ġdiscard ing Ġchanges ĊĠĠĠĠĠĠĠ Ġimage _ view _ fragment _ filter _ cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDis miss Ġthis Ġfragment , Ġignoring Ġany Ġuser Ġselections ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( it ). pop Back Stack () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDis miss Ġthe Ġsoft Ġkeyboard Ġif Ġit Ġis Ġshowing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard ( frag Activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠActivate Ġthe ĠApply Ġbutton , Ġin Ġeffect Ġto Ġretain , Ġsaving Ġselections ĊĠĠĠĠĠĠĠ Ġbutton _ fragment _ filter _ apply . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġcurrent Ġselections Ġin Ġthe ĠViewModel Ġto Ġbe Ġretrieved Ġlater Ġif Ġnecessary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter : ĠFilter Ġ= ĠFilter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Ġ= ĠSearch ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . location Ġ= Ġif Ġ( spinner _ fragment _ filter _ location . selected ItemId Ġ== Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspinner _ fragment _ filter _ location . selected Item . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . zip Ġ= Ġedit _ text _ fragment _ filter _ zip _ code . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . date Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text _ view _ fragment _ filter _ date _ shown . text . toString () Ġ== ĠgetString ( R . string . filter _ date _ hint )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ view _ fragment _ filter _ date _ shown . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . tags Ġ= Ġget Selected Tags () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Filter ViewModel . set Shared Data ( filter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDis miss Ġthe Ġsoft Ġkeyboard Ġif Ġit Ġis Ġshowing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard ( frag Activity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDis miss Ġthis Ġfragment , Ġafter Ġhaving Ġsaved Ġany Ġuser Ġselections ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( it ). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠShow Ġthe ĠDate ĠP icker Ġwhen Ġthe Ġdate Ġcontrol Ġis Ġeng aged ĊĠĠĠĠĠĠĠ Ġimage _ view _ fragment _ filter _ date . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGrab Ġthe Ġdisplayed Ġdate Ġfrom Ġthe ĠTextView , Ġif Ġit Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġselected Date : ĠString Ġ= Ġtext _ view _ fragment _ filter _ date _ shown . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġthe Ġdate Ġstring Ġhas Ġa Ġvalid Ġvalue Ġbefore Ġpassing Ġit Ġto Ġthe ĠDate Picker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Date Ġ== ĠgetString ( R . string . filter _ date _ hint )) Ġselected Date Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Search Date ( get Today ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConvert Ġthe Ġstring Ġvalue Ġinto Ġan Ġactual ĠDate Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate : ĠDate Ġ= Ġsearch StringTo Date ( selected Date ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInstantiate Ġthe ĠDate Picker ĠDialog Fragment , Ġpassing Ġin Ġthe Ġdate Ġand Ġa Ġunique Ġtag Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Picker Ġ= ĠDate Picker Fragment ( frag Context , Ġto Calendar ( date )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker . show ( child FragmentManager , Ġ" date Picker ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe ĠArray Adapter Ġand Ġassign Ġit Ġto Ġthe ĠSp inner Ġwhich Ġholds Ġthe Ġlocations ĊĠĠĠĠĠĠĠ Ġval Ġarray Adapter Location Spinner : ĠArray Adapter < String > Ġ= ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrag Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* android . R . layout . simple _ spinner _ item */ R . layout . spinner _ locations , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Locations . to Mutable List () ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Notify OnChange ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner _ fragment _ filter _ location . adapter Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner _ fragment _ filter _ location . on ItemSelected Listener Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPopulate Ġthe ĠSearch View Ġsuggestions Ġwith Ġa Ġlist Ġof Ġtags Ġand Ġwhen Ġselected Ġadded Ġas Ġa ĠCh ip ĊĠĠĠĠĠĠĠ Ġval Ġsearch Auto Complete Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ bar _ fragment _ filter . findViewById < View >( android x . appcompat . R . id . search _ src _ text ) Ġas ĠSearch Auto Complete ĊĠĠĠĠĠĠĠ Ġsearch Auto Complete . dropDown Anchor Ġ= ĠR . id . search _ bar _ fragment _ filter ĊĠĠĠĠĠĠĠ Ġsearch Auto Complete . threshold Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġsearch Auto Complete . setOn ItemClickListener Ġ{ Ġparent , Ġview 1 , Ġposition , Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected : ĠString Ġ= Ġ( view 1 Ġas ĠMaterial TextView ). text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ bar _ fragment _ filter . set Query ("", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ bar _ fragment _ filter . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Chip ( frag Context , Ġselected , Ġchip _ group _ fragment _ filter _ added . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard ( frag Activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe ĠArray Adapter Ġand Ġassign Ġit Ġto Ġthe ĠSearch View Ġwhich Ġholds Ġtags ĊĠĠĠĠĠĠĠ Ġval Ġarray Adapter Tag Search View : ĠArray Adapter < String > Ġ= ĠArray Adapter < String >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrag Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . layout . simple _ dropdown _ item _ 1 line , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Tags . to Mutable List () ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Notify OnChange ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Auto Complete . setAdapter ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAccess ĠLive Data Ġvia Ġthe ĠViewModel Ġto Ġget Ġthe ĠEvents Ġdata Ġstored Ġin Ġthe Ġrepository ĊĠĠĠĠĠĠĠ Ġfilter ViewModel . getAll Events (). observe ( this , ĠObserver < List < Events Query . Event >> Ġ{ Ġevents Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . forEach Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPopulate Ġthe Ġlist Ġof Ġtags Ġfrom Ġeach ĠEvent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . tags ()?. forEach Ġ{ Ġtag Ġ-> Ġall Tags . add ( tag . title ()) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPopulate Ġthe Ġlist Ġof Ġlocations Ġfrom Ġeach ĠEvent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . locations ()?. forEach Ġ{ Ġlocation Ġ-> Ġall Locations . add ( location . name ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠE limin ate Ġthis Ġblock Ġonce ĠViewModel 's Ġevent Ġlist Ġis Ġworking ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* all Tags . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Tech ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Enter tain ment ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G ard ening ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sew ing ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" S ports ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Out do ors ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Music ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Family ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fun ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" E ating ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cook ing " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) */ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠE limin ate Ġthis Ġblock Ġonce ĠViewModel 's Ġevent Ġlist Ġis Ġworking ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* all Locations . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" West ĠSide ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" East ĠSide ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" S out hw est ĠDet ro it ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pal mer ĠPark ĠArea ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" North ĠEnd ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" New ĠCenter ĠArea ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" E astern ĠMarket ĠArea ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mid town ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" J eff erson ĠCor rid or ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" D ow nt own ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C ork town Ġ- ĠW ood bridge " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) */ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRefresh Ġthe Ġarray Ġadapters / ch ips Ġwith Ġdata Ġretrieved Ġfrom Ġthe Ġrepository ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray Adapter Tag Search View . addAll ( all Tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray Adapter Location Spinner . addAll ( all Locations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray Adapter Location Spinner . remove ( getString ( R . string . filter _ location _ hint )) Ġ// ĠDuplicate ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRandom ize Ġ( shuffle ) Ġa Ġmaximum Ġof Ġ 1 0 Ġtags Ġto Ġbe Ġdisplayed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Suggest ed Chips ( all Tags , Ġfrag Context ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġfrag Activity . window . set Soft Input Mode ( WindowManager . LayoutParams . SOFT _ INPUT _ ADJ UST _ NOTH ING ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCreate ĠCh ips Ġwith Ġrandom Ġtag Ġnames Ġand Ġthen Ġput Ġthem Ġinto Ġthe Ġ' suggest ed ' ĠCh ip Group ĊĠĠĠ Ġprivate Ġfun Ġadd Suggest ed Chips ( all Tags : ĠMutable Set < String >, Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsh uffled Tags Ġ= Ġall Tags . to Mutable List () ĊĠĠĠĠĠĠĠ Ġsh uffled Tags . shuffle () ĊĠĠĠĠĠĠĠ Ġvar Ġrandom Tag Count Ġ= Ġsh uffled Tags . size ĊĠĠĠĠĠĠĠ Ġif Ġ( sh uffled Tags . size Ġ> Ġ 1 0 ) Ġrandom Tag Count Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġrandom Tag Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip : ĠCh ip Ġ= ĠView Util . generate Chip ( context , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip . text Ġ= Ġsh uffled Tags [ x ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip . id Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip . setOn Close Icon ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip _ group _ fragment _ filter _ suggest ed . remove View ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip Change : ĠCh ip Ġ= ĠView Util . generate Chip ( context , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip Change . text Ġ= Ġ( it Ġas ĠCh ip ). text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip Change . id Ġ= Ġchip _ group _ fragment _ filter _ added . child Count Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip Change . setOn Close Icon ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip _ group _ fragment _ filter _ added . remove View ( chip Change ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip _ group _ fragment _ filter _ added . addView ( chip Change ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip _ group _ fragment _ filter _ suggest ed . addView ( chip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCreate Ġa ĠCh ip Ġand Ġput Ġit Ġinto Ġthe Ġ' added ' ĠCh ip Group ĊĠĠĠ Ġprivate Ġfun Ġadd Chip ( context : ĠContext , Ġtag Text : ĠString , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchip : ĠCh ip Ġ= ĠView Util . generate Chip ( context , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġchip . text Ġ= Ġtag Text ĊĠĠĠĠĠĠĠ Ġchip . id Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġchip . setOn Close Icon ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip _ group _ fragment _ filter _ added . remove View ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchip _ group _ fragment _ filter _ added . addView ( chip ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠBuild Ġup Ġa Ġlist Ġof Ġstrings Ġrepresenting Ġeach ĠCh ip Ġtag ĊĠĠĠ Ġprivate Ġfun Ġget Selected Tags (): ĠArrayList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtags : ĠArrayList < String > Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġchip _ group _ fragment _ filter _ added . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtags . add (( it Ġas ĠCh ip ). text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtags ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠChange Ġwhat Ġis Ġdisplayed Ġin Ġeach Ġview Ġto Ġmatch Ġthe Ġvalues Ġin Ġthe Ġpassed Ġobject ĊĠĠĠ Ġprivate Ġfun ĠsetUp Selections ( filter : ĠFilter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( filter . location . isBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner _ fragment _ filter _ location . setSelection ( 0 ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner _ fragment _ filter _ location . setSelection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Spinner Item Position ( spinner _ fragment _ filter _ location , Ġfilter . location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( filter . zip . isBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit _ text _ fragment _ filter _ zip _ code . setText ("") ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit _ text _ fragment _ filter _ zip _ code . setText ( filter . zip ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( filter . date . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ view _ fragment _ filter _ date _ shown . text Ġ= ĠgetString ( R . string . filter _ date _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ view _ fragment _ filter _ date _ shown . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrag Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . color . color Hint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ view _ fragment _ filter _ date _ shown . text Ġ= Ġfilter . date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ view _ fragment _ filter _ date _ shown . setTextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFind Ġthe Ġindex Ġof Ġthe ĠSp inner Ġitem Ġwhich Ġmatches Ġthe Ġpassed Ġin Ġtext ĊĠĠĠ Ġprivate Ġfun Ġget Spinner Item Position ( spinner : ĠSp inner , Ġitem Text : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġspinner . count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( spinner . getItem At Position ( i ). toString (). equals ( item Text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent ?. get ( 0 ) Ġas ĠTextView ). setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( frag Context , ĠR . color . color Hint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent ?. get ( 0 ) Ġas ĠTextView ). setTextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ