package Ġcom . mand iri . movie . ui . discover Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . view . View Ċ import Ġandroidx . lifecycle .* Ċ import Ġandroidx . navigation . Navigation Ċ import Ġcom . mand iri . movie . model . data . Category Ċ import Ġcom . mand iri . movie . model . data . Sub category Ċ import Ġcom . mand iri . movie . model . remote . repositories . Category Repository Ċ import Ġcom . mand iri . movie . util .* Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠDis cover ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ categories Ġ= ĊĠĠĠĠĠĠĠ ĠCategory Repository ( application ). getC ategories (). as LiveData ( viewModel Scope . coroutine Context ) ĊĊĠĠĠ Ġval Ġcategories ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ categories ĊĊĠĠĠ Ġprivate Ġvar Ġlanguage Sub category : ĠSub category ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġgenre Sub category : ĠSub category ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Network Available ( getApplication ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Unavailable Notification ( getApplication ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Sub category Selected ( checked : ĠBoolean , Ġcategory : ĠCategory , Ġitem Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( category . items [ item Index ] Ġas ĠSub category ). name . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( category . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLANGUAGE _ CATEGORY Ġ-> Ġlanguage Sub category Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGEN RE _ CATEGORY Ġ-> Ġgenre Sub category Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( category . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLANGUAGE _ CATEGORY Ġ-> Ġlanguage Sub category Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . items [ item Index ] Ġas ĠSub category ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGEN RE _ CATEGORY Ġ-> Ġgenre Sub category Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . items [ item Index ] Ġas ĠSub category ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( category . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLANGUAGE _ CATEGORY Ġ-> Ġlanguage Sub category Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGEN RE _ CATEGORY Ġ-> Ġgenre Sub category Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Confirm Selection Clicked ( view : ĠView , Ġstart Year : ĠString , Ġend Year : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠDis cover Fragment Directions . action Remote Movie Grid Fragment () ĊĠĠĠĠĠĠĠ Ġaction . movie Grid Type Ġ= ĠDIS COVER _ MOV IE _ LIST ĊĠĠĠĠĠĠĠ Ġaction . start Year Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Year Ġ== Ġ" âĪ ŀ ") Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġstart Year ĊĠĠĠĠĠĠĠ Ġaction . end Year Ġ= Ġend Year ĊĠĠĠĠĠĠĠ Ġval Ġdiscovery ArrayList Ġ= Ġarray ListOf ("$ start Year Ġ- Ġ$ end Year ") ĊĠĠĠĠĠĠĠ Ġgenre Sub category ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . genre Id Ġ= ĠInteger . parseInt ( it . code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiscovery ArrayList . add ( it . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlanguage Sub category ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . language Key Ġ= Ġit . code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiscovery ArrayList . add ( it . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( discovery ArrayList . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . discover Name Array Ġ= Ġdiscovery ArrayList . to Typed Array () ĊĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( view ). navigate ( action ) ĊĠĠĠ Ġ} Ċ }