package Ġcom . st ol z . places search . search Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . st ol z . places search . database . Place Dao Ċ import Ġcom . st ol z . places search . model . Place Ċ import Ġcom . st ol z . places search . util . FO UR S QUARE _ MIN _ QUERY _ LENGTH Ċ import Ġkotlinx . coroutines .* Ċ import Ġjavax . inject . Inject Ċ Ċ private Ġval ĠTAG Ġ= ĠSearch ViewModel :: class . java . simple Name Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġstores Ġthe Ġrelevant Ġdata Ġfor Ġthe ĠSearch Fragment Ġas ĠLive Data Ġand Ġhandles Ġthe Ġretrieval Ċ Ġ* Ġof Ġtype ahead Ġsuggestions Ġand Ġthe Ġplaces Ġmatching Ġthe Ġquery Ġby Ġlever aging Ġthe ĠSearch Repository . Ċ Ġ* ĠIt Ġalso Ġhas Ġlogic Ġfor Ġupdating Ġthe Ġis Favorite Ġstatus Ġfor Ġa Ġplace Ġin Ġthe Ġresults Ġlist . Ċ Ġ*/ Ċ class ĠSearch ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġfavor ites Database : ĠPlace Dao , ĊĠĠĠ Ġprivate Ġval Ġsearch Repository : ĠSearch Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠSearch Status Ġ{ ĠLO ADING , ĠERROR , ĠDONE , ĠEMPTY Ġ} ĊĊĠĠĠ Ġ// ĠThe Ġlist Ġof Ġplaces Ġreturned Ġfrom Ġthe Ġquery ĊĠĠĠ Ġprivate Ġval Ġ_ type ahead Results Ġ= ĠMutable LiveData < Set < String >>() ĊĠĠĠ Ġval Ġtype ahead Results : ĠLive Data < Set < String >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ type ahead Results ĊĊĠĠĠ Ġ// ĠThe Ġstatus Ġof Ġloading Ġplaces ĊĠĠĠ Ġprivate Ġval Ġ_ status Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Search Status >() ĊĠĠĠ Ġval Ġstatus : ĠLive Data < Search Status > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ status ĊĊĠĠĠ Ġ// ĠThe Ġlist Ġof Ġplaces Ġreturned Ġfrom Ġthe Ġquery ĊĠĠĠ Ġprivate Ġval Ġ_ places Ġ= ĠMutable LiveData < Set < Place >>() ĊĠĠĠ Ġval Ġplaces : ĠLive Data < Set < Place >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ places ĊĊĠĠĠ Ġvar Ġlast Query : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġvar Ġsearch Job Ġ= ĠJob () ĊĠĠĠ Ġprivate Ġval Ġsearch Scope Ġ= ĠCor outine Scope ( search Job Ġ+ ĠDispatch ers . Main ) ĊĊĠĠĠ Ġfun ĠgetType ahead Results ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Getting Ġtype ahead Ġresults Ġfor Ġquery : Ġ\" ${ query }\" ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( query Ġ== Ġlast Query ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġquery Ġmatches Ġthe Ġlast Ġquery Ġone Ġof Ġthe Ġtype ahead Ġresults Ġwas Ġpicked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ type ahead Results . value Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlast Query Ġ= Ġquery ĊĊĠĠĠĠĠĠĠ Ġif Ġ( query . length Ġ< ĠFO UR S QUARE _ MIN _ QUERY _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Query Ġis Ġnot Ġlong Ġenough Ġto Ġget Ġtype Ġahead Ġsuggestions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ type ahead Results . value Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsearch Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ type ahead Results . value Ġ= Ġsearch Repository . fetch Type ahead Results ( query ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Places ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ type ahead Results . value Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Getting Ġplaces Ġfor Ġquery : Ġ\" ${ query }\" ") ĊĠĠĠĠĠĠĠ Ġsearch Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠSearch Status . LOADING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġsearch Repository . fetch Places ( query ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠSearch Status . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ places . value Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ places . value Ġ= Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= Ġif Ġ( results . isEmpty ()) ĠSearch Status . EMPTY Ġelse ĠSearch Status . DONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Favorite For Place ( place : ĠPlace ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Entity Ġ= ĠPlace . to Place Entity ( place ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace In Db Ġ= Ġfavor ites Database . get Place ( place . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( place In Db Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavor ites Database . insert ( place Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavor ites Database . update Place ( place Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġsearch Job . cancel () ĊĠĠĠ Ġ} Ċ }