package Ġcom . d roid con . schedule . ui . schedule list . view model Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . d roid con . commons . conference . domain . Update Session Star red Value Ċ import Ġcom . d roid con . commons . tracking . Schedule Analytics Tracker Ċ import Ġcom . d roid con . schedule . domain . Search Sessions Ċ import Ġcom . d roid con . schedule . domain . Session Ċ import Ġcom . d roid con . schedule . ui . schedule list . model . Session Row Ċ import Ġcom . d roid con . schedule . ui . schedule list . model . Sessions Search Effect Ċ import Ġcom . d roid con . schedule . ui . schedule list . model . Sessions Search State Ċ import Ġcom . d roid con . schedule . ui . schedule list . model . to Sessions Search State Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠSearch Sessions ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġsearch Sessions : ĠSearch Sessions , ĊĠĠĠ Ġprivate Ġval Ġupdate Session Star red Value : ĠUpdate Session Star red Value , ĊĠĠĠ Ġprivate Ġval Ġschedule Analytics Tracker : ĠSchedule Analytics Tracker Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmutable Sessions Search State Ġ= ĠMutable LiveData < Sessions Search State >() ĊĠĠĠ Ġval Ġsessions Search State : ĠLive Data < Sessions Search State > Ġ= Ġmutable Sessions Search State ĊĊĠĠĠ Ġprivate Ġval Ġmutable Sessions Search Effect Ġ= ĠMutable LiveData < Sessions Search Effect >() ĊĠĠĠ Ġval Ġsessions Search Effect : ĠLive Data < Sessions Search Effect > Ġ= Ġmutable Sessions Search Effect ĊĊĠĠĠ Ġfun Ġon Search Query Changed ( query Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( query Text . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Sessions Search State . value Ġ= ĠS essions Search State . Empty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Result Ġ= Ġsearch Sessions ( query Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Result . fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Left Ġ= Ġ{ Ġon Search Error () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Right Ġ= Ġ:: on Search Success ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Search Success ( sessions : ĠList < Session >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable Sessions Search State . value Ġ= Ġsessions . to Sessions Search State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ites Enabled Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Star Clicked Ġ= Ġ:: on Session Star red , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Session Clicked Ġ= Ġ:: on Session Clicked ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Search Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable Sessions Search State . value Ġ= ĠS essions Search State . Error ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Session Star red ( session : ĠSession Row . Session , Ġis Star red : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Is Star red Value Ġ= Ġ! is Star red ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Session Star red State ( session , Ġnew Is Star red Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Session Updated Ġ= Ġupdate Session Star red Value ( session . id , Ġnew Is Star red Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Session Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Session Star red State ( session , Ġis Star red ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Analytics Tracker . track Session Star red From Search ( session . title , Ġnew Is Star red Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Session Star red State ( session : ĠSession Row . Session , Ġis Star red : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsessions Search State Ġ= Ġmutable Sessions Search State . value Ġas ? ĠS essions Search State . Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġupdated Sessions Ġ= Ġsessions Search State . search Results ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠSession Row . Session Ġ&& Ġresult . id Ġ== Ġsession . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . copy ( star red Ġ= Ġis Star red ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmutable Sessions Search State . value Ġ= ĠS essions Search State . Content ( updated Sessions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Session Clicked ( session : ĠSession Row . Session ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable Sessions Search Effect . value Ġ= ĠS essions Search Effect . Navigate To Session Detail ( session . id ) ĊĠĠĠĠĠĠĠ Ġschedule Analytics Tracker . track Session Opened From Search ( session . title ) ĊĠĠĠ Ġ} Ċ }