package Ġorg . opp ia . android . app . player . ex ploration Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . Transform ations Ċ import Ġorg . opp ia . android . R Ċ import Ġorg . opp ia . android . app . activity . Activity Scope Ċ import Ġorg . opp ia . android . app . help . Help Activity Ċ import Ġorg . opp ia . android . app . model . Checkpoint State Ċ import Ġorg . opp ia . android . app . model . Ex ploration Ċ import Ġorg . opp ia . android . app . model . Profile Id Ċ import Ġorg . opp ia . android . app . model . Reading Text Size Ċ import Ġorg . opp ia . android . app . options . Options Activity Ċ import Ġorg . opp ia . android . app . player . stop playing . Progress Database Full Dialog Fragment Ċ import Ġorg . opp ia . android . app . player . stop playing . Un saved Ex ploration Dialog Fragment Ċ import Ġorg . opp ia . android . app . topic . Topic Activity Ċ import Ġorg . opp ia . android . app . utility . Font Scale Configuration Util Ċ import Ġorg . opp ia . android . app . view model . ViewModel Provider Ċ import Ġorg . opp ia . android . databinding . Ex ploration Activity Binding Ċ import Ġorg . opp ia . android . domain . ex ploration . Ex ploration Data Controller Ċ import Ġorg . opp ia . android . domain . opp ialog ger . Opp ia Logger Ċ import Ġorg . opp ia . android . util . data . AsyncResult Ċ import Ġorg . opp ia . android . util . data . Data Providers . Companion . to LiveData Ċ import Ġjavax . inject . Inject Ċ Ċ private Ġconst Ġval ĠTAG _ UN SA VED _ EX PL OR ATION _ DIALOG Ġ= Ġ" UN SA VED _ EX PL OR ATION _ DIALOG " Ċ private Ġconst Ġval ĠTAG _ STOP _ EX PL OR ATION _ DIALOG Ġ= Ġ" STOP _ EX PL OR ATION _ DIALOG " Ċ private Ġconst Ġval ĠTAG _ PROGRESS _ DATABASE _ FULL _ DIALOG Ġ= Ġ" PROGRESS _ DATABASE _ FULL _ DIALOG " Ċ private Ġconst Ġval ĠTAG _ EX PL OR ATION _ FRAGMENT Ġ= Ġ" TAG _ EX PL OR ATION _ FRAGMENT " Ċ private Ġconst Ġval ĠTAG _ EX PL OR ATION _ MANAGER _ FRAGMENT Ġ= Ġ" TAG _ EX PL OR ATION _ MANAGER _ FRAGMENT " Ċ const Ġval ĠTAG _ HINT S _ AND _ SOL UTION _ EX PL OR ATION _ MANAGER Ġ= Ġ" HINT S _ AND _ SOL UTION _ EX PL OR ATION _ MANAGER " Ċ Ċ /** ĠThe ĠPres enter Ġfor Ġ[ Ex ploration Activity ]. Ġ*/ Ċ @ Activity Scope Ċ class ĠEx ploration Activity Presenter Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġactivity : ĠAppCompatActivity , ĊĠ Ġprivate Ġval Ġexploration Data Controller : ĠEx ploration Data Controller , ĊĠ Ġprivate Ġval ĠviewModel Provider : ĠViewModel Provider < Ex ploration ViewModel >, ĊĠ Ġprivate Ġval Ġfont Scale Configuration Util : ĠFont Scale Configuration Util , ĊĠ Ġprivate Ġval Ġopp ia Logger : ĠO pp ia Logger Ċ ) Ġ{ ĊĠ Ġprivate Ġlateinit Ġvar Ġexploration Toolbar : ĠToolbar ĊĠ Ġprivate Ġlateinit Ġvar Ġexploration Toolbar Title : ĠTextView ĊĠ Ġprivate Ġvar Ġinternal Profile Id : ĠInt Ġ= Ġ- 1 ĊĠ Ġprivate Ġlateinit Ġvar Ġtopic Id : ĠString ĊĠ Ġprivate Ġlateinit Ġvar Ġstory Id : ĠString ĊĠ Ġprivate Ġlateinit Ġvar Ġexploration Id : ĠString ĊĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĠ Ġprivate Ġvar Ġback flow Screen : ĠInt ? Ġ= Ġnull ĊĊĠ Ġprivate Ġvar Ġis Checkpoint ing Enabled : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġprivate Ġlateinit Ġvar Ġoldest Checkpoint Ex ploration Id : ĠString ĊĠ Ġprivate Ġlateinit Ġvar Ġoldest Checkpoint Ex ploration Title : ĠString ĊĊĠ Ġenum Ġclass ĠParent Activity For Ex ploration ( val Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ ĠBACK FLOW _ SCREEN _ LESS ONS ( 0 ), ĊĠĠĠ ĠBACK FLOW _ SCREEN _ ST ORY ( 1 ); ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġexplore ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠ Ġget Ex ploration ViewModel () ĊĠ Ġ} ĊĊĠ Ġfun Ġhandle On Create ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġinternal Profile Id : ĠInt , ĊĠĠĠ Ġtopic Id : ĠString , ĊĠĠĠ Ġstory Id : ĠString , ĊĠĠĠ Ġexploration Id : ĠString , ĊĠĠĠ Ġback flow Screen : ĠInt ?, ĊĠĠĠ Ġis Checkpoint ing Enabled : ĠBoolean ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . set ContentView < Ex ploration Activity Binding >( ĊĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠ ĠR . layout . ex ploration _ activity ĊĠĠĠ Ġ) ĊĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠ ĠviewModel Ġ= Ġexplore ViewModel ĊĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġactivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġexploration Toolbar Ġ= Ġbinding . ex ploration Toolbar ĊĠĠĠ Ġexploration Toolbar Title Ġ= Ġbinding . ex ploration Toolbar Title ĊĠĠĠ Ġactivity . set Support ActionBar ( ex ploration Toolbar ) ĊĊĠĠĠ Ġbinding . ex ploration Toolbar Title . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġbinding . ex ploration Toolbar Title . isSelected Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbinding . ex ploration Toolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠ Ġactivity . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbinding . action Audio Player . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġget Ex ploration Fragment ()?. handle Play Audio () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġupdate Toolbar Title ( ex ploration Id ) ĊĠĠĠ Ġthis . internal Profile Id Ġ= Ġinternal Profile Id ĊĠĠĠ Ġthis . topic Id Ġ= Ġtopic Id ĊĠĠĠ Ġthis . story Id Ġ= Ġstory Id ĊĠĠĠ Ġthis . ex ploration Id Ġ= Ġexploration Id ĊĠĠĠ Ġthis . context Ġ= Ġcontext ĊĠĠĠ Ġthis . back flow Screen Ġ= Ġback flow Screen ĊĠĠĠ Ġthis . is Checkpoint ing Enabled Ġ= Ġis Checkpoint ing Enabled ĊĊĠĠĠ Ġ// ĠRetrieve Ġoldest Ġsaved Ġcheckpoint Ġdetails . ĊĠĠĠ Ġsubscribe To Ol dest Saved Ex ploration Details () ĊĊĠĠĠ Ġif Ġ( get Ex ploration Manager Fragment () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġexploration Manager Fragment Ġ= ĠEx ploration Manager Fragment () ĊĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠ Ġargs . put Int ( ĊĠĠĠĠĠĠĠ ĠEx ploration Activity . EX PL OR ATION _ ACTIVITY _ PROFILE _ ID _ ARGUMENT _ KEY , ĊĠĠĠĠĠĠĠ Ġinternal Profile Id ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġexploration Manager Fragment . arguments Ġ= Ġargs ĊĠĠĠĠĠ Ġactivity . support FragmentManager . beginTransaction (). add ( ĊĠĠĠĠĠĠĠ ĠR . id . ex ploration _ fragment _ placeholder , ĊĠĠĠĠĠĠĠ Ġexploration Manager Fragment , ĊĠĠĠĠĠĠĠ ĠTAG _ EX PL OR ATION _ MANAGER _ FRAGMENT ĊĠĠĠĠĠ Ġ). commit Now () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġload Ex ploration Fragment ( reading Text Size : ĠReading Text Size ) Ġ{ ĊĠĠĠ Ġif Ġ( get Ex ploration Fragment () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġactivity . support FragmentManager . beginTransaction (). add ( ĊĠĠĠĠĠĠĠ ĠR . id . ex ploration _ fragment _ placeholder , ĊĠĠĠĠĠĠĠ ĠEx ploration Fragment . newInstance ( ĊĠĠĠĠĠĠĠĠĠ Ġtopic Id Ġ= Ġtopic Id , ĊĠĠĠĠĠĠĠĠĠ Ġinternal Profile Id Ġ= Ġinternal Profile Id , ĊĠĠĠĠĠĠĠĠĠ Ġstory Id Ġ= Ġstory Id , ĊĠĠĠĠĠĠĠĠĠ Ġreading Text Size Ġ= Ġreading Text Size . name , ĊĠĠĠĠĠĠĠĠĠ Ġexploration Id Ġ= Ġexploration Id ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠTAG _ EX PL OR ATION _ FRAGMENT ĊĠĠĠĠĠ Ġ). commit Now () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( get Hints And Solution Manager Fragment () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġactivity . support FragmentManager . beginTransaction (). add ( ĊĠĠĠĠĠĠĠ ĠR . id . ex ploration _ fragment _ placeholder , ĊĠĠĠĠĠĠĠ ĠH ints And Solution Ex ploration Manager Fragment (), ĊĠĠĠĠĠĠĠ ĠTAG _ HINT S _ AND _ SOL UTION _ EX PL OR ATION _ MANAGER ĊĠĠĠĠĠ Ġ). commit Now () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠAction Ġfor Ġon Options ItemSelected Ġ*/ ĊĠ Ġfun Ġhandle On Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠ ĠR . id . action _ preferences Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠOptions Activity . create Options Activity ( ĊĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠ Ġinternal Profile Id , ĊĠĠĠĠĠĠĠĠĠ Ġ/* Ġis From Navigation Drawer = Ġ*/ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfont Scale Configuration Util . adjust Font Scale ( activity , ĠReading Text Size . MEDIUM _ TEXT _ SIZE . name ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠR . id . action _ help Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠHelp Activity . create Help Activity Intent ( ĊĠĠĠĠĠĠĠĠĠ Ġactivity , Ġinternal Profile Id , ĊĠĠĠĠĠĠĠĠĠ Ġ/* Ġis From Navigation Drawer = Ġ*/ false ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfont Scale Configuration Util . adjust Font Scale ( activity , ĠReading Text Size . MEDIUM _ TEXT _ SIZE . name ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġshow Audio Button () Ġ= Ġexplore ViewModel . show Audio Button . set ( true ) ĊĊĠ Ġfun Ġhide Audio Button () Ġ= Ġexplore ViewModel . show Audio Button . set ( false ) ĊĊĠ Ġfun Ġshow Audio Streaming On () Ġ= Ġexplore ViewModel . is Audio Streaming On . set ( true ) ĊĊĠ Ġfun Ġshow Audio Streaming Off () Ġ= Ġexplore ViewModel . is Audio Streaming On . set ( false ) ĊĊĠ Ġfun Ġset Audio Bar Visibility ( isVisible : ĠBoolean ) Ġ= ĊĠĠĠ Ġget Ex ploration Fragment ()?. set Audio Bar Visibility ( isVisible ) ĊĊĠ Ġfun Ġscroll To Top () Ġ= Ġget Ex ploration Fragment ()?. scrollTo Top () ĊĊĠ Ġprivate Ġfun Ġget Ex ploration Manager Fragment (): ĠEx ploration Manager Fragment ? Ġ{ ĊĠĠĠ Ġreturn Ġactivity . support FragmentManager . find Fragment By Tag ( ĊĠĠĠĠĠ ĠTAG _ EX PL OR ATION _ MANAGER _ FRAGMENT ĊĠĠĠ Ġ) Ġas ? ĠEx ploration Manager Fragment ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Ex ploration Fragment (): ĠEx ploration Fragment ? Ġ{ ĊĠĠĠ Ġreturn Ġactivity . support FragmentManager . find Fragment By Tag ( ĊĠĠĠĠĠ ĠTAG _ EX PL OR ATION _ FRAGMENT ĊĠĠĠ Ġ) Ġas ? ĠEx ploration Fragment ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Hints And Solution Manager Fragment (): ĠH ints And Solution Ex ploration Manager Fragment ? Ġ{ ĊĠĠĠ Ġreturn Ġactivity . support FragmentManager . find Fragment By Tag ( ĊĠĠĠĠĠ ĠTAG _ HINT S _ AND _ SOL UTION _ EX PL OR ATION _ MANAGER ĊĠĠĠ Ġ) Ġas ĠH ints And Solution Ex ploration Manager Fragment ? ĊĠ Ġ} ĊĊĠ Ġ/** ĠDeletes Ġthe Ġsaved Ġprogress Ġfor Ġthe Ġcurrent Ġexploration Ġand Ġthen Ġstops Ġthe Ġexploration . Ġ*/ ĊĠ Ġfun Ġdelete Current Progress And Stop Ex ploration () Ġ{ ĊĠĠĠ Ġexploration Data Controller . delete Ex ploration Progress ById ( ĊĠĠĠĠĠ ĠProfile Id . newBuilder (). set Internal Id ( internal Profile Id ). build (), ĊĠĠĠĠĠ Ġexploration Id ĊĠĠĠ Ġ) ĊĠĠĠ Ġstop Ex ploration () ĊĠ Ġ} ĊĊĠ Ġ/** ĠDeletes Ġthe Ġoldest Ġsaved Ġcheckpoint Ġand Ġthen Ġstops Ġthe Ġexploration . Ġ*/ ĊĠ Ġfun Ġdelete Ol dest Saved Progress And Stop Ex ploration () Ġ{ ĊĠĠĠ Ġ// ĠIf Ġoldest Checkpoint Ex ploration Id Ġis Ġnot Ġinitialized , Ġit Ġmeans Ġthat Ġthere Ġwas Ġan Ġerror Ġwhile ĊĠĠĠ Ġ// Ġretrieving Ġthe Ġoldest Ġsaved Ġcheckpoint Ġdetails . ĠIn Ġthis Ġcase , Ġthe Ġexploration Ġis Ġexited ĊĠĠĠ Ġ// Ġwithout Ġdeleting Ġthe Ġany Ġcheck points . ĊĠĠĠ Ġoldest Checkpoint Ex ploration Id . let Ġ{ ĊĠĠĠĠĠ Ġexploration Data Controller . delete Ex ploration Progress ById ( ĊĠĠĠĠĠĠĠ ĠProfile Id . newBuilder (). set Internal Id ( internal Profile Id ). build (), ĊĠĠĠĠĠĠĠ Ġoldest Checkpoint Ex ploration Id ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġstop Ex ploration () ĊĠ Ġ} ĊĊĠ Ġfun Ġstop Ex ploration () Ġ{ ĊĠĠĠ Ġfont Scale Configuration Util . adjust Font Scale ( activity , ĠReading Text Size . MEDIUM _ TEXT _ SIZE . name ) ĊĠĠĠ Ġexploration Data Controller . stop Playing Ex ploration () ĊĠĠĠĠĠ Ġ. observe ( ĊĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠ ĠObserver < AsyncResult < Any ? >> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Pending () Ġ-> Ġopp ia Logger . d (" Ex ploration Activity ", Ġ" Stopping Ġexploration ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Failure () Ġ-> Ġopp ia Logger . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ex ploration Activity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Failed Ġto Ġstop Ġexploration ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getError OrNull () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopp ia Logger . d (" Ex ploration Activity ", Ġ" Successfully Ġstopped Ġexploration ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Press Activity Selector ( back flow Screen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠEx ploration Activity ). finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġon Keyboard Action ( action Code : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( action Code Ġ== ĠEditor Info . IME _ ACTION _ DONE ) Ġ{ ĊĠĠĠĠĠ Ġval Ġexploration Fragment Ġ= Ġactivity . support FragmentManager . find Fragment By Tag ( ĊĠĠĠĠĠĠĠ ĠTAG _ EX PL OR ATION _ FRAGMENT ĊĠĠĠĠĠ Ġ) Ġas ? ĠEx ploration Fragment ĊĠĠĠĠĠ Ġexploration Fragment ?. on Keyboard Action () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠShows Ġan Ġappropriate Ġdialog Ġbox Ġor Ġexits Ġthe Ġexploration Ġdirectly Ġwithout Ġshowing Ġany Ġdialog ĊĠĠ Ġ* Ġbox Ġwhen Ġback Ġbutton Ġis Ġpressed . ĠThis Ġfunction Ġshows Ġ[ Un saved Ex ploration Dialog Fragment ] Ġif ĊĠĠ Ġ* Ġcheckpoint ing Ġis Ġnot Ġenabled Ġotherwise Ġit Ġeither Ġexits Ġthe Ġexploration Ġor Ġshows ĊĠĠ Ġ* Ġ[ Progress Database Full Dialog Fragment ] Ġdepending Ġupon Ġthe Ġstate Ġof Ġthe Ġsaved Ġcheckpoint Ġfor Ġthe ĊĠĠ Ġ* Ġcurrent Ġexploration . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġback Button Pressed () Ġ{ ĊĠĠĠ Ġ// ĠIf Ġcheckpoint ing Ġis Ġnot Ġenabled , Ġshow ĠStop Ex ploration Dialog Fragment Ġto Ġexit Ġthe Ġexploration , ĊĠĠĠ Ġ// Ġthis Ġis Ġexpected Ġto Ġhappen Ġif Ġthe Ġexploration Ġis Ġmarked Ġas Ġcompleted . ĊĠĠĠ Ġif Ġ(! is Checkpoint ing Enabled ) Ġ{ ĊĠĠĠĠĠ Ġshow Un saved Ex ploration Dialog Fragment () ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠIf Ġcheckpoint ing Ġis Ġenabled , Ġget Ġthe Ġcurrent Ġcheckpoint Ġstate Ġto Ġshow Ġan Ġappropriate Ġdialog ĊĠĠĠ Ġ// Ġfragment . ĊĠĠĠ Ġshow Dialog Fragment Based On Current Checkpoint State () ĊĠ Ġ} ĊĊĠ Ġfun Ġdismiss Concept Card () Ġ{ ĊĠĠĠ Ġget Ex ploration Fragment ()?. dismiss Concept Card () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Toolbar Title ( ex ploration Id : ĠString ) Ġ{ ĊĠĠĠ Ġsubscribe To Ex ploration ( ex ploration Data Controller . get Ex ploration ById ( ex ploration Id ). to LiveData ()) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsubscribe To Ex ploration ( ĊĠĠĠ Ġexploration Result LiveData : ĠLive Data < AsyncResult < Ex ploration >> ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġexploration LiveData Ġ= Ġget Ex ploration ( ex ploration Result LiveData ) ĊĠĠĠ Ġexploration LiveData . observe ( ĊĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠ ĠObserver < Ex ploration > Ġ{ ĊĠĠĠĠĠĠĠ Ġexploration Toolbar Title . text Ġ= Ġit . title ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Ex ploration ViewModel (): ĠEx ploration ViewModel Ġ{ ĊĠĠĠ Ġreturn ĠviewModel Provider . get For Activity ( activity , ĠEx ploration ViewModel :: class . java ) ĊĠ Ġ} ĊĊĠ Ġ/** ĠHelper Ġfor Ġsubscribe To Ex ploration . Ġ*/ ĊĠ Ġprivate Ġfun Ġget Ex ploration ( ĊĠĠĠ Ġexploration : ĠLive Data < AsyncResult < Ex ploration >> ĊĠ Ġ): ĠLive Data < Ex ploration > Ġ{ ĊĠĠĠ Ġreturn ĠTransform ations . map ( ex ploration , Ġ:: process Ex ploration ) ĊĠ Ġ} ĊĊĠ Ġ/** ĠHelper Ġfor Ġsubscribe To Ex ploration . Ġ*/ ĊĠ Ġprivate Ġfun Ġprocess Ex ploration ( ep hemeral State Result : ĠAsync Result < Ex ploration >): ĠEx ploration Ġ{ ĊĠĠĠ Ġif Ġ( ep hemeral State Result . is Failure ()) Ġ{ ĊĠĠĠĠĠ Ġopp ia Logger . e ( ĊĠĠĠĠĠĠĠ Ġ" Ex ploration Activity ", ĊĠĠĠĠĠĠĠ Ġ" Failed Ġto Ġretrieve Ġanswer Ġoutcome ", ĊĠĠĠĠĠĠĠ Ġep hemeral State Result . getError OrNull () !! ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġep hemeral State Result . get OrDefault ( Ex ploration . getDefaultInstance ()) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġback Press Activity Selector ( back flow Screen : ĠInt ?) Ġ{ ĊĠĠĠ Ġwhen Ġ( back flow Screen ) Ġ{ ĊĠĠĠĠĠ ĠParent Activity For Ex ploration . BACK FLOW _ SCREEN _ ST ORY . value Ġ-> Ġactivity . finish () ĊĠĠĠĠĠ ĠParent Activity For Ex ploration . BACK FLOW _ SCREEN _ LESS ONS . value Ġ-> Ġactivity . finish () ĊĠĠĠĠĠ Ġelse Ġ-> Ġactivity . startActivity ( ĊĠĠĠĠĠĠĠ ĠTopic Activity . create Topic Activity Intent ( ĊĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠ Ġinternal Profile Id , ĊĠĠĠĠĠĠĠĠĠ Ġtopic Id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġreveal Hint ( hint Index : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġexploration Fragment Ġ= ĊĠĠĠĠĠ Ġactivity . support FragmentManager . find Fragment By Tag ( ĊĠĠĠĠĠĠĠ ĠTAG _ EX PL OR ATION _ FRAGMENT ĊĠĠĠĠĠ Ġ) Ġas ĠEx ploration Fragment ĊĠĠĠ Ġexploration Fragment . reveal Hint ( hint Index ) ĊĠ Ġ} ĊĊĠ Ġfun Ġreveal Solution () Ġ{ ĊĠĠĠ Ġval Ġexploration Fragment Ġ= ĊĠĠĠĠĠ Ġactivity . support FragmentManager . find Fragment By Tag ( ĊĠĠĠĠĠĠĠ ĠTAG _ EX PL OR ATION _ FRAGMENT ĊĠĠĠĠĠ Ġ) Ġas ĠEx ploration Fragment ĊĠĠĠ Ġexploration Fragment . reveal Solution () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Progress Database Full Dialog Fragment () Ġ{ ĊĠĠĠ Ġval Ġprevious Fragment Ġ= Ġactivity . support FragmentManager . find Fragment By Tag ( ĊĠĠĠĠĠ ĠTAG _ PROGRESS _ DATABASE _ FULL _ DIALOG ĊĠĠĠ Ġ) ĊĠĠĠ Ġif Ġ( previous Fragment Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġactivity . support FragmentManager . beginTransaction (). remove ( previous Fragment ). commit Now () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠIf Ġany Ġone Ġof Ġoldest Checkpoint Ex ploration Id Ġor Ġoldest Checkpoint Ex ploration Title Ġis Ġnot ĊĠĠĠ Ġ// Ġinitialized , Ġit Ġmeans Ġthat Ġthere Ġwas Ġan Ġerror Ġwhile Ġretrieving Ġthe Ġoldest Ġsaved Ġcheckpoint ĊĠĠĠ Ġ// Ġdetails . ĠIn Ġthat Ġcase Ġthe Ġexploration Ġwill Ġbe Ġexited Ġwithout Ġdeleting Ġthe Ġany Ġcheck points . ĊĠĠĠ Ġif Ġ( ĊĠĠĠĠĠ Ġ! :: ol dest Checkpoint Ex ploration Id . isInitialized Ġ|| ĊĠĠĠĠĠ Ġ! :: ol dest Checkpoint Ex ploration Title . isInitialized ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġstop Ex ploration () ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdialog Fragment Ġ= ĊĠĠĠĠĠ ĠProgress Database Full Dialog Fragment . newInstance ( ol dest Checkpoint Ex ploration Title ) ĊĠĠĠ Ġdialog Fragment . show Now ( ĊĠĠĠĠĠ Ġactivity . support FragmentManager , ĊĠĠĠĠĠ ĠTAG _ PROGRESS _ DATABASE _ FULL _ DIALOG ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Un saved Ex ploration Dialog Fragment () Ġ{ ĊĠĠĠ Ġval Ġprevious Fragment Ġ= ĊĠĠĠĠĠ Ġactivity . support FragmentManager . find Fragment By Tag ( TAG _ UN SA VED _ EX PL OR ATION _ DIALOG ) ĊĠĠĠ Ġif Ġ( previous Fragment Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġactivity . support FragmentManager . beginTransaction (). remove ( previous Fragment ). commit Now () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġdialog Fragment Ġ= ĠUn saved Ex ploration Dialog Fragment . newInstance () ĊĠĠĠ Ġdialog Fragment . show Now ( ĊĠĠĠĠĠ Ġactivity . support FragmentManager , ĊĠĠĠĠĠ ĠTAG _ UN SA VED _ EX PL OR ATION _ DIALOG ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠList ens Ġto Ġthe Ġresult Ġof Ġ[ Ex ploration Data Controller . get Ol dest Ex ploration Details DataProvider ]. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠIf Ġthe Ġresult Ġis Ġsuccess Ġit Ġupdates Ġthe Ġvalue Ġof Ġthe Ġvariables Ġoldest Checkpoint Ex ploration Id ĊĠĠ Ġ* Ġand Ġoldest Checkpoint Ex ploration Title . ĠIf Ġthe Ġresult Ġfails , Ġit Ġdoes Ġnot Ġinitializes Ġthe ĊĠĠ Ġ* Ġvariables Ġoldest Checkpoint Ex ploration Id Ġand Ġoldest Checkpoint Ex ploration Title Ġwith Ġany Ġvalue . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠSince Ġthis Ġfunction Ġis Ġkick ed Ġoff Ġbefore Ġany Ġother Ġsave Ġoperation , Ġtherefore Ġit Ġis Ġexpected ĊĠĠ Ġ* Ġto Ġcomplete Ġbefore Ġany Ġfollowing Ġsave Ġoperation Ġcompletes . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠIf Ġoperations Ġfails Ġor Ġthis Ġfunction Ġdoes Ġnot Ġget Ġenough Ġtime Ġto Ġcomplete , Ġuser Ġis Ġnot Ġblocked ĊĠĠ Ġ* Ġinstead Ġthe Ġflow Ġof Ġthe Ġapplication Ġpro ceeds Ġas Ġif Ġthe Ġcheck points Ġwere Ġnot Ġfound . ĠIn Ġthat Ġcase , ĊĠĠ Ġ* Ġthe Ġvariables Ġoldest Checkpoint Ex ploration Id Ġand Ġoldest Checkpoint Ex ploration Title Ġare Ġnot ĊĠĠ Ġ* Ġinitialized Ġand Ġthey Ġremain Ġun initialized . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġsubscribe To Ol dest Saved Ex ploration Details () Ġ{ ĊĠĠĠ Ġexploration Data Controller . get Ol dest Ex ploration Details DataProvider ( ĊĠĠĠĠĠ ĠProfile Id . newBuilder (). set Internal Id ( internal Profile Id ). build () ĊĠĠĠ Ġ). to LiveData (). observe ( ĊĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠ ĠObserver Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . is Success ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoldest Checkpoint Ex ploration Id Ġ= Ġit . get OrThrow (). ex ploration Id ĊĠĠĠĠĠĠĠĠĠ Ġoldest Checkpoint Ex ploration Title Ġ= Ġit . get OrThrow (). ex ploration Title ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . is Failure ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġopp ia Logger . e ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ex ploration Activity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Failed Ġto Ġretrieve Ġoldest Ġsaved Ġcheckpoint Ġdetails .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getError OrNull () ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠChecks Ġthe Ġcheckpoint State Ġfor Ġthe Ġcurrent Ġexploration Ġand Ġshows Ġan Ġappropriate Ġdialog ĊĠĠ Ġ* Ġfragment . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠIf Ġthe Ġcheckpoint State Ġis Ġequal Ġto ĠCHECK POINT _ SA VED _ DATABASE _ NOT _ EX CE EDED _ LIMIT , ĊĠĠ Ġ* Ġexploration Ġwill Ġbe Ġstopped Ġwithout Ġshowing Ġany Ġdialog Fragment . ĠIf Ġthe Ġcheckpoint State Ġis Ġequal ĊĠĠ Ġ* Ġto ĠCHECK POINT _ SA VED _ DATABASE _ EX CE EDED _ LIMIT , Ġ[ Progress Database Full Dialog Fragment ] Ġwill Ġbe ĊĠĠ Ġ* Ġdisplayed Ġto Ġthe Ġuser . ĠOtherwise , Ġthe Ġdialog Ġfragment Ġ[ Un saved Ex ploration Dialog Fragment ] Ġwill ĊĠĠ Ġ* Ġbe Ġdisplayed Ġto Ġthe Ġuser . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġshow Dialog Fragment Based On Current Checkpoint State () Ġ{ ĊĠĠĠ Ġval Ġcheckpoint State Ġ= Ġget Ex ploration Fragment ()?. get Ex ploration Checkpoint State () ĊĊĠĠĠ Ġ// ĠShow ĠUn saved Ex ploration Dialog Fragment Ġif Ġcheckpoint Ġstate Ġcould Ġnot Ġbe Ġretrieved . ĊĠĠĠ Ġif Ġ( checkpoint State Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġshow Un saved Ex ploration Dialog Fragment () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ( checkpoint State ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCheck point State . CHECK POINT _ SA VED _ DATABASE _ NOT _ EX CE EDED _ LIMIT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġstop Ex ploration () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠCheck point State . CHECK POINT _ SA VED _ DATABASE _ EX CE EDED _ LIMIT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Progress Database Full Dialog Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġshow Un saved Ex ploration Dialog Fragment () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ