/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠR az ew are ĠLLC Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠNot with standing Ġthe Ġfore going , Ġyou Ġmay Ġnot Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ċ Ġ* Ġdistribute , Ġsublicense , Ġcreate Ġa Ġderivative Ġwork , Ġand / or Ġsell Ġcopies Ġof Ġthe Ċ Ġ* ĠSoftware Ġin Ġany Ġwork Ġthat Ġis Ġdesigned , Ġintended , Ġor Ġmarket ed Ġfor Ġped ag og ical Ġor Ċ Ġ* Ġinstruction al Ġpurposes Ġrelated Ġto Ġprogramming , Ġcoding , Ġapplication Ġdevelopment , Ċ Ġ* Ġor Ġinformation Ġtechnology . Ġ ĠPermission Ġfor Ġsuch Ġuse , Ġcopying , Ġmodification , Ċ Ġ* Ġmer ger , Ġpublication , Ġdistribution , Ġsublic ensing , Ġcreation Ġof Ġderivative Ġworks , Ċ Ġ* Ġor Ġsale Ġis Ġexpress ly Ġwith held . Ċ Ġ* Ċ Ġ* ĠThis Ġproject Ġand Ġsource Ġcode Ġmay Ġuse Ġlibraries Ġor Ġframeworks Ġthat Ġare Ċ Ġ* Ġreleased Ġunder Ġvarious ĠOpen - Source Ġlicenses . ĠUse Ġof Ġthose Ġlibraries Ġand Ċ Ġ* Ġframeworks Ġare Ġgoverned Ġby Ġtheir Ġown Ġindividual Ġlicenses . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . ray w ender lich . android . books he lf . ui . dialogs Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Spinner Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġcom . google . firebase . firestore . Query Ċ import Ġcom . ray w ender lich . android . books he lf . R Ċ import Ġcom . ray w ender lich . android . books he lf . model . Book Ċ import Ġcom . ray w ender lich . android . books he lf . model . Filters Ċ Ċ class ĠFilter Dialog Fragment Ġ: ĠDialog Fragment (), ĠView . OnClickListener Ġ{ ĊĊĠ Ġinterface ĠFilter Listener Ġ{ ĊĠĠĠ Ġfun Ġon Filter ( filters : ĠFilters ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġlateinit Ġvar Ġroot View : ĠView ĊĠ Ġprivate Ġlateinit Ġvar Ġauthor Spinner : ĠSp inner ĊĠ Ġprivate Ġlateinit Ġvar Ġcategory Spinner : ĠSp inner ĊĠ Ġprivate Ġlateinit Ġvar Ġsort Spinner : ĠSp inner ĊĠ Ġprivate Ġlateinit Ġvar Ġfilter Listener : ĠFilter Listener ĊĊĠ Ġprivate Ġval Ġfilters : ĠFilters ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġreturn ĠFilters ( ĊĠĠĠĠĠĠĠ Ġselected Category , ĊĠĠĠĠĠĠĠ Ġselected Author , ĊĠĠĠĠĠĠĠ Ġselected Sort By , ĊĠĠĠĠĠĠĠ Ġsort Direction ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠ Ġ): ĠView Ġ{ ĊĠĠĠ Ġroot View Ġ= Ġinflater . inflate ( R . layout . dialog _ filters , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġcategory Spinner Ġ= Ġroot View . findViewById ( R . id . spinner _ category ) ĊĠĠĠ Ġauthor Spinner Ġ= Ġroot View . findViewById ( R . id . spinner _ author ) ĊĠĠĠ Ġsort Spinner Ġ= Ġroot View . findViewById ( R . id . spinner _ sort ) ĊĠĠĠ Ġroot View . findViewById < View >( R . id . button _ apply ). setOnClickListener ( this ) ĊĠĠĠ Ġroot View . findViewById < View >( R . id . button _ cancel ). setOnClickListener ( this ) ĊĠĠĠ Ġreturn Ġroot View ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠ Ġif Ġ( context Ġis ĠFilter Listener ) Ġ{ ĊĠĠĠĠĠ Ġfilter Listener Ġ= Ġcontext ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠ Ġsuper . on Resume () ĊĠĠĠ Ġdialog !!. window !!. setLayout ( ĊĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠ Ġwhen Ġ( v . id ) Ġ{ ĊĠĠĠĠĠ ĠR . id . button _ apply Ġ-> Ġon Apply Clicked () ĊĠĠĠĠĠ ĠR . id . button _ cancel Ġ-> Ġon Cancel Clicked () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Apply Clicked () Ġ{ ĊĠĠĠ Ġfilter Listener . on Filter ( filters ) ĊĠĠĠ Ġdismiss () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Cancel Clicked () Ġ{ ĊĠĠĠ Ġdismiss () ĊĠ Ġ} ĊĊĠ Ġfun Ġreset Filters () Ġ{ ĊĠĠĠ Ġcategory Spinner . setSelection ( 0 ) ĊĠĠĠ Ġauthor Spinner . setSelection ( 0 ) ĊĠĠĠ Ġsort Spinner . setSelection ( 0 ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġselected Category : ĠString ? ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġval Ġselected Ġ= Ġcategory Spinner . selected Item Ġas ĠString ĊĠĠĠĠĠ Ġreturn Ġif Ġ( getString ( R . string . value _ any _ category ) Ġ== Ġselected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġselected ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġval Ġselected Author : ĠString ? ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġval Ġselected Ġ= Ġauthor Spinner . selected Item Ġas ĠString ĊĠĠĠĠĠ Ġreturn Ġif Ġ( getString ( R . string . value _ any _ author ) Ġ== Ġselected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġselected ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġval Ġselected Sort By : ĠString ? ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġval Ġselected Ġ= Ġsort Spinner . selected Item Ġas ĠString ĊĠĠĠĠĠ Ġif Ġ( getString ( R . string . sort _ by _ rating ) Ġ== Ġselected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBook . FIELD _ RAT ING ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( getString ( R . string . sort _ by _ year ) Ġ== Ġselected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBook . FIELD _ YEAR _ PUBL ISHED ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġif Ġ( getString ( R . string . sort _ alphabet ically ) Ġ== Ġselected ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBook . FIELD _ TITLE ĊĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġval Ġsort Direction : ĠQuery . Direction ? ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ Ġval Ġselected Ġ= Ġsort Spinner . selected Item Ġas ĠString ĊĠĠĠĠĠ Ġif Ġ( getString ( R . string . sort _ by _ rating ) Ġ== Ġselected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠQuery . Direction . DESC ENDING ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( getString ( R . string . sort _ by _ year ) Ġ== Ġselected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠQuery . Direction . DESC ENDING ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġif Ġ( getString ( R . string . sort _ alphabet ically ) Ġ== Ġselected ) Ġ{ ĊĠĠĠĠĠĠĠ ĠQuery . Direction . ASC ENDING ĊĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Filter Dialog " ĊĠ Ġ} Ċ } Ċ