package Ġar . uba . fi . re my . ui . ex plor ar Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġar . uba . fi . re my . Category Dis hes Ċ import Ġar . uba . fi . re my . R Ċ import Ġar . uba . fi . re my . model . Category Ċ import Ġar . uba . fi . re my . model . Category Item Adapter Ċ import Ġar . uba . fi . re my . ui . loading Indicator . Loading Indicator Fragment Ċ import Ġcom . android . vol ley . Request Ċ import Ġcom . android . vol ley . Response Ċ import Ġcom . android . vol ley . toolbox . JsonObject Request Ċ import Ġcom . android . vol ley . toolbox . Vol ley Ċ import Ġkotlinx . android . synt hetic . main . fragment _ ex plor ar . view .* Ċ Ċ class ĠEx plor ar Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġtoken : ĠString ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġinflater . inflate ( R . layout . fragment _ ex plor ar , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// Ob t ener Ġtoken ĊĠĠĠĠĠĠĠ Ġval Ġshared Pref Ġ= Ġactivity ?. get SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . preference _ file ), ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġtoken Ġ= Ġshared Pref ?. getString (" TOKEN ", Ġ"") !! ĊĊĠĠĠĠĠĠĠ Ġroot . ex plor ar _ search . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . widget . Search View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" API ", Ġ" Bus c ando Ġ" Ġ+ Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠCategory Dis hes :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" query ", Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Ob t eng o Ġlas Ġcategor ias Ġde Ġla ĠAPI ĊĠĠĠĠĠĠĠ Ġc argar Categor ias ( root ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġc argar Categor ias ( root : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView : ĠRecyclerView Ġ= Ġroot . findViewById ( R . id . rv _ categor ias ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠGrid LayoutManager ( activity , Ġ 4 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= ĠVol ley . new Request Queue ( activity ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" https :// tp p - re my . herokuapp . com / api / v 1 / dish labels /" ĊĊĠĠĠĠĠĠĠ ĠLoading Indicator Fragment . show ( require Context ()) ĊĠĠĠĠĠĠĠ Ġval ĠjsonObject Request Ġ= Ġobject : ĠJsonObject Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Method . GET , Ġurl , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategor ias Array Ġ= Ġresponse . get JSONArray (" results ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" API ", Ġcategor ias Array . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcategor ias : ĠArray < Category > Ġ= Ġempty Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcategor ias Array . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnombre Ġ= Ġcategor ias Array . getJSONObject ( i ). getString (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcategor ias Array . getJSONObject ( i ). getString (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfoto Ġ= Ġcategor ias Array . getJSONObject ( i ). getString (" image ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategor ia N ue va Ġ= ĠCategory ( nombre , Ġid . toInt (), Ġfoto ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategor ias Ġ= Ġappend ( categor ias , Ġcategor ia N ue va ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠCategory Item Adapter ( categor ias ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Indicator Fragment . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" API ", Ġ" Error Ġen ĠGET ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" API ", Ġ" Response : Ġ% s ". format ( error . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Indicator Fragment . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Headers (): ĠMutable Map < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders [" Authorization "] Ġ= Ġ" Token Ġ" Ġ+ Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġheaders ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġqueue . add ( jsonObject Request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend ( arr : ĠArray < Category >, Ġelement : ĠCategory ): ĠArray < Category > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < Category > Ġ= Ġarr . to Mutable List () ĊĠĠĠĠĠĠĠ Ġlist . add ( element ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlist . to Typed Array () ĊĠĠĠ Ġ} Ċ }