package Ġcom . al v ay on ara . me als food . search Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . lifecycle . LiveData Reactive Streams Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Transform ations Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . al v ay on ara . me als food . core . base . Base ViewModel Ċ import Ġcom . al v ay on ara . me als food . core . domain . model . Food Recent Search Ċ import Ġcom . al v ay on ara . me als food . core . domain . use case . Food UseCase Ċ import Ġcom . al v ay on ara . me als food . core . utils . EditText Stream Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ Ċ class ĠSearch Food ViewModel ( private Ġval Ġfood UseCase : ĠFood UseCase ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsearch Ġ= ĠMutable LiveData < String >() ĊĊĠĠĠ Ġprivate Ġval Ġ_ loading Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġloading Ġ= Ġ_ loading ĊĊĠĠĠ Ġprivate Ġval Ġ_ is EditText Empty Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġis EditText Empty Ġ= Ġ_ is EditText Empty ĊĊĠĠĠ Ġfun ĠsetSelected Search ( search : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . search . value Ġ= Ġsearch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsearch Food Ġ= ĠTransform ations . switch Map ( search ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLive Data Reactive Streams . from Publisher ( food UseCase . search Food ( it )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfrom View ( edit Text : ĠEditText ): ĠObservable < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠPublish Subject . create < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Stream Ġ= Ġobject Ġ: ĠEditText Stream () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is EditText Empty . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is EditText Empty . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . onNext ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġedit Text . add TextChanged Listener ( search Stream ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsubject ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġrecent Search Food Ġ= ĠLive Data Reactive Streams . from Publisher ( food UseCase . get Recent Search Food ()) ĊĊĠĠĠ Ġfun Ġinsert Recent Search Food ( search : ĠFood Recent Search ) Ġ= ĊĠĠĠĠĠĠĠ Ġfood UseCase . insert Recent Search Food ( search ) Ċ }