package Ġcom . ye ah ush . quick quest . ui . home . question Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . InputType Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . observe Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ import Ġcom . ye ah ush . quick quest . R Ċ import Ġcom . ye ah ush . quick quest . databinding . Dialog Question List Binding Ċ import Ġcom . ye ah ush . quick quest . ui . base . Base Dialog Ċ import Ġcom . ye ah ush . quick quest . utilities .* Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . android . synt hetic . main . dialog _ question _ list .* Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠQuestion List Dialog Ġ: ĠBase Dialog (), ĠView . OnClickListener , ĠScore Dialog . On After Score Listener , ĊĠĠĠ ĠMark Dialog . On Question Selected Listener Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠQuestion List ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Factory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcat Id Ġ= Ġarguments ?. take If Ġ{ Ġit . containsKey ( CATEGORY _ KEY ) Ġ} ?. getString ( CATEGORY _ KEY ) !! ĊĠĠĠĠĠĠĠ ĠviewModel . set Cat Id ( cat Id ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠDialog Question List Binding . inflate ( in flater , Ġcontainer , Ġfalse ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener Ġ= Ġthis @ Question List Dialog ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġthis @ Question List Dialog . viewModel ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsubscribe Ui () ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ Ġdismiss () Ġ} ĊĠĠĠĠĠĠĠ Ġtoolbar . inflate Menu ( R . menu . menu _ offline ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= Ġtoolbar . menu . find Item ( R . id . jump _ action ). action View Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġsearch View . input Type Ġ= ĠInput Type . TYPE _ CLASS _ NUMBER ĊĠĠĠĠĠĠĠ Ġval Ġsearch Hint : ĠSearch View . Search Auto Complete Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . findViewById ( android x . appcompat . R . id . search _ src _ text ) ĊĠĠĠĠĠĠĠ Ġsearch Hint . hint Ġ= Ġresources . getString ( R . string . jump _ to ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch Icon : ĠImageView Ġ= Ġsearch View . findViewById ( android x . appcompat . R . id . search _ button ) ĊĠĠĠĠĠĠĠ Ġsearch Icon . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . get Drawable ( resources , Ġandroid . R . drawable . ic _ menu _ compass , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsearch View . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . on Action View Collapsed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Ġ= Ġquery . toInt () Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Ġin Ġ 0 .. 4 9 ) Ġpager . currentItem Ġ= Ġnum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshow Toast ( context , Ġresources . getString ( R . string . out _ of _ bounds )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( context , Ġresources . getString ( R . string . input _ number )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Mode Review () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . mode Review Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠviewModel . score Dialog Visible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Retry () Ġ{ ĊĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Question Selected ( number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpager . currentItem Ġ= Ġnumber ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is Sound Enable ()) Ġplay Resource Sound ( context , ĠR . raw . click ) ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is V ibrate Enable ()) Ġvi br ate ( context ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v ?. id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . marked _ questions _ button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . marks . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġactivity ?. support FragmentManager Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMark Dialog . newInstance ( viewModel . marks ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Question Selected Listener ( this @ Question List Dialog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( fragment Manager , ĠMARK _ DIALOG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġcontext ?. let Ġ{ Ġshow Toast ( it , Ġ" Mark Ġlist 's Ġempty .") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . finish _ button Ġ-> ĠonClick Finish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġwarning Dialog : ĠAlertDialog ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun ĠonClick Finish () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( warning Dialog Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarning Dialog Ġ= Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( it ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle (" Warning ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Message (" Are Ġyou Ġsure Ġwant Ġto Ġfinish Ġthe Ġgame ?") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( R . string . ok _ button ) Ġ{ Ġ_, Ġ_ Ġ-> ĠviewModel . on Game Finish () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( R . string . cancel _ button ) Ġ{ Ġ_, Ġ_ Ġ-> Ġwarning Dialog ?. dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwarning Dialog ?. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Ui () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . category And Questions . observe ( view Lifecycle Owner ) Ġ{ Ġquest s Of Cat Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= Ġquest s Of Cat . category . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpager . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠQuestion List State Adapter ( this @ Question List Dialog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġmargin Ġbetween Ġpages Ġin Ġthe ĠView Pager 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Margin Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . margin _ normal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Page Transformer Ġ{ Ġpage , Ġposition Ġ-> Ġpage . translation X Ġ= Ġposition Ġ* Ġpage Margin Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTab Layout Mediator ( tabs , Ġpager ) Ġ{ Ġtab , Ġpos Ġ-> Ġtab . text Ġ= Ġ"${ ( pos Ġ+ Ġ 1 )}" Ġ}. attach () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . answer List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Answers ( quest s Of Cat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . event Game Finish . observe ( view Lifecycle Owner , ĠObserver < Boolean > Ġ{ Ġhas Finished Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Finished ) Ġgame Finished () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgame Finished () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . on Game Finish Complete () ĊĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġactivity ?. support FragmentManager Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . score Dialog Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġmanager . find Fragment By Tag ( SCORE _ DIALOG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġ!= Ġnull ) Ġ( fragment Ġas ĠScore Dialog ). setOn Mode Review Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . mode Review ) Ġshow Score Dialog ( viewModel . calculate Score ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmark Dialog Ġ= Ġmanager . find Fragment By Tag ( MARK _ DIALOG ) ĊĠĠĠĠĠĠĠ Ġif Ġ( mark Dialog Ġ!= Ġnull ) Ġ( mark Dialog Ġas ĠMark Dialog ). dismiss () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( warning Dialog Ġ!= Ġnull Ġ&& Ġwarning Dialog !!. is Showing ) Ġwarning Dialog ?. dismiss () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult List Ġ= ĠviewModel . result List ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġresult List . size ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Id Ġ= Ġif Ġ( result List [ i ]) ĠR . drawable . ic _ correct Ġelse ĠR . drawable . ic _ incorrect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtabs . get Tab At ( i )?. setIcon ( res Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Score Dialog ( score : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġactivity ?. support FragmentManager Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠScore Dialog (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Mode Review Listener ( this @ Question List Dialog ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ Ġput String ( SCORE , Ġscore ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( fragment Manager , ĠS CORE _ DIALOG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . score Dialog Visible Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ Ċ } Ċ