package Ġorg . step ik . android . domain . course . inter actor Ċ Ċ import Ġcom . android . billing client . api . Billing Client Ċ import Ġcom . google . firebase . remote config . Firebase Remote Config Ċ import Ġcom . google . firebase . remote config . k tx . get Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . rx kotlin . Sing les . zip Ċ import Ġio . reactivex . rx kotlin . to Observable Ċ import Ġorg . step ic . d roid . configuration . Remote Config Ċ import Ġorg . step ik . android . domain . base . DataSource Type Ċ import Ġorg . step ik . android . domain . course . model . Course Stats Ċ import Ġorg . step ik . android . domain . course . model . Enrollment State Ċ import Ġorg . step ik . android . domain . course . model . Source Type Composition Ċ import Ġorg . step ik . android . domain . course . repository . Course Review Summary Repository Ċ import Ġorg . step ik . android . domain . course _ payments . model . Course Payment Ċ import Ġorg . step ik . android . domain . course _ payments . model . Dee plink Promo Code Ċ import Ġorg . step ik . android . domain . course _ payments . model . Promo Code Sku Ċ import Ġorg . step ik . android . domain . course _ payments . repository . Course Payments Repository Ċ import Ġorg . step ik . android . domain . course _ purchase . model . Course Purchase Flow Ċ import Ġorg . step ik . android . domain . mobile _ ti ers . inter actor . Mobile Ti ers Interactor Ċ import Ġorg . step ik . android . domain . mobile _ ti ers . model . Light Sku Ċ import Ġorg . step ik . android . domain . mobile _ ti ers . model . Mobile Tier Ċ import Ġorg . step ik . android . domain . mobile _ ti ers . repository . Light Sku Repository Ċ import Ġorg . step ik . android . domain . mobile _ ti ers . repository . Mobile Ti ers Repository Ċ import Ġorg . step ik . android . domain . progress . mapper . get Prog resses Ċ import Ġorg . step ik . android . domain . profile . repository . Profile Repository Ċ import Ġorg . step ik . android . domain . progress . repository . Progress Repository Ċ import Ġorg . step ik . android . domain . user _ courses . model . User Course Ċ import Ġorg . step ik . android . model . Course Ċ import Ġorg . step ik . android . model . Course Review Summary Ċ import Ġorg . step ik . android . model . Progress Ċ import Ġorg . step ik . android . remote . mobile _ ti ers . model . Mobile Tier Calculation Ċ import Ġru . nob ird . app . core . model . map To Long Array Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠCourse Stats Interactor Ċ @ Inject Ċ constructor ( ĊĠĠĠ Ġprivate Ġval Ġcourse Review Repository : ĠCourse Review Summary Repository , ĊĠĠĠ Ġprivate Ġval Ġcourse Payments Repository : ĠCourse Payments Repository , ĊĠĠĠ Ġprivate Ġval Ġprogress Repository : ĠProgress Repository , ĊĠĠĠ Ġprivate Ġval Ġprofile Repository : ĠProfile Repository , ĊĠĠĠ Ġprivate Ġval Ġmobile Ti ers Repository : ĠMobile Ti ers Repository , ĊĠĠĠ Ġprivate Ġval Ġlight Sku Repository : ĠLight Sku Repository , ĊĠĠĠ Ġprivate Ġval Ġmobile Ti ers Interactor : ĠMobile Ti ers Interactor , ĊĠĠĠ Ġprivate Ġval Ġfirebase Remote Config : ĠFirebase Remote Config Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġcheck Dee plink Promo Code Validity ( course Id : ĠLong , Ġprom o : ĠString ): ĠSingle < Pair < Dee plink Promo Code , ĠProm o Code Sku >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Flow Ġ= ĠCourse Purchase Flow . valueOf With Fallback ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Remote Config [ Remote Config . PUR CH ASE _ FLOW _ ANDROID ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uppercase () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠisIn App Active Ġ= Ġcurrent Flow . isIn App Active () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcourse Payments Repository ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check Dee plink Promo Code Validity ( course Id , Ġprom o ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġdee plink Promo Code Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isIn App Active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Ti ers Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. calculate Mobile Tier ( Mobile Tier Calculation ( course Ġ= Ġcourse Id , Ġprom o Ġ= Ġprom o ), ĠdataSource Type Ġ= ĠDataSource Type . REMOTE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Ġ{ Ġmobile Tier Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mobile Tier . promo Tier Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( dee plink Promo Code Ġto ĠProm o Code Sku . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight Sku Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Light Inventory ( Billing Client . Sku Type . IN APP , ĠlistOf ( mobile Tier . promo Tier ), ĠdataSource Type Ġ= ĠDataSource Type . REMOTE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġlight Sku Ġ-> Ġdee plink Promo Code Ġto ĠProm o Code Sku ( promo , Ġlight Sku . first OrNull ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( dee plink Promo Code Ġto ĠProm o Code Sku . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Item ( Dee plink Promo Code . EMPTY Ġto ĠProm o Code Sku . EMPTY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ< editor - fold Ġdesc =" Course Stats ĠWeb ĠPurchase ĠFlow "> ĊĠĠĠ Ġfun Ġget Course Stats ( ĊĠĠĠĠĠĠĠ Ġcourses : ĠList < Course >, ĊĠĠĠĠĠĠĠ Ġsource Type Composition : ĠSource Type Composition Ġ= ĠSource Type Composition . REMOTE , ĊĠĠĠĠĠĠĠ Ġresolve Enrollment State : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠSingle < List < Course Stats >> Ġ= ĊĠĠĠĠĠĠĠ Ġzip ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Course Review ( courses , Ġsource Type Composition . general Source Type ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Course Progress ( courses , Ġsource Type Composition . general Source Type ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Courses Enrollment States ( courses , Ġsource Type Composition . enrollment Source Type , Ġresolve Enrollment State ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġcourse Reviews , Ġcourse Prog resses , Ġenrollment States Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreviews Map Ġ= Ġcourse Reviews . associate By ( Course Review Summary :: course ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Maps Ġ= Ġcourse Prog resses . associate By ( Progress :: id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenrollment Map Ġ= Ġenrollment States . toMap () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourses . map Ġ{ Ġcourse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Stats ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreview Ġ= Ġreviews Map [ course . id ]?. average Ġ?: Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlearn ers Count Ġ= Ġcourse . learn ers Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread iness Ġ= Ġcourse . read iness , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġcourse . progress ?. let ( progress Maps :: get ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenrollment State Ġ= Ġenrollment Map . getValue ( course . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Courses Enrollment States ( courses : ĠList < Course >, Ġsource Type : ĠDataSource Type , Ġresolve Enrollment State : ĠBoolean ): ĠSingle < List < Pair < Long , ĠEn rollment State >>> Ġ= ĊĠĠĠĠĠĠĠ Ġcourses ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Ġ{ Ġresolve Course Enrollment State ( it , Ġsource Type , Ġresolve Enrollment State ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Course Enrollment State ( course : ĠCourse , Ġsource Type : ĠDataSource Type , Ġresolve Enrollment State : ĠBoolean ): ĠSingle < Pair < Long , ĠEn rollment State >> Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourse . enrollment Ġ> Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Repository . get Profile (). map Ġ{ Ġprofile Ġ-> Ġcourse . id Ġto Ġresolve En rolled Enrollment State ( course , Ġprofile . id ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! course . is Paid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( course . id Ġto ĠEn rollment State . Not En rolled Free ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Enrollment State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Payments Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getC ourse Payments By Course Id ( course . id , Ġcourse Payment Status Ġ= ĠCourse Payment . Status . SUCCESS , Ġsource Type Ġ= Ġsource Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġpayments Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( payments . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( course . id Ġto ĠEn rollment State . Not En rolled Web ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( course . id Ġto ĠEn rollment State . Not En rolled Free ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Item ( course . id Ġto ĠEn rollment State . Not En rolled Web ) Ġ// Ġif Ġbilling Ġnot Ġsupported Ġon Ġcurrent Ġdevice Ġor Ġto Ġaccess Ġpaid Ġcourse Ġoffline ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( course . id Ġto ĠEn rollment State . Not En rolled Free ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġ</ editor - fold > ĊĊĠĠĠ Ġ// Ġ< editor - fold Ġdesc =" Course Stats ĠI AP ĠPurchase ĠFlow "> ĊĠĠĠ Ġfun Ġget Course Stats Mobile Ti ers ( ĊĠĠĠĠĠĠĠ Ġcourses : ĠList < Course >, ĊĠĠĠĠĠĠĠ Ġsource Type Composition : ĠSource Type Composition Ġ= ĠSource Type Composition . REMOTE , ĊĠĠĠĠĠĠĠ Ġresolve Enrollment State : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠSingle < List < Course Stats >> Ġ= ĊĠĠĠĠĠĠĠ Ġzip ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Course Review ( courses , Ġsource Type Composition . general Source Type ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Course Progress ( courses , Ġsource Type Composition . general Source Type ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Courses Enrollment States With Ti ers ( courses , Ġsource Type Composition . enrollment Source Type , Ġresolve Enrollment State ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġcourse Reviews , Ġcourse Prog resses , Ġenrollment Map Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreviews Map Ġ= Ġcourse Reviews . associate By ( Course Review Summary :: course ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Maps Ġ= Ġcourse Prog resses . associate By ( Progress :: id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourses . map Ġ{ Ġcourse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Stats ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreview Ġ= Ġreviews Map [ course . id ]?. average Ġ?: Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlearn ers Count Ġ= Ġcourse . learn ers Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread iness Ġ= Ġcourse . read iness , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġcourse . progress ?. let ( progress Maps :: get ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenrollment State Ġ= Ġenrollment Map . getValue ( course . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Courses Enrollment States With Ti ers ( ĊĠĠĠĠĠĠĠ Ġcourses : ĠList < Course >, ĊĠĠĠĠĠĠĠ Ġsource Type : ĠDataSource Type , ĊĠĠĠĠĠĠĠ Ġresolve Enrollment State : ĠBoolean ĊĠĠĠ Ġ): ĠSingle < Map < Long , ĠEn rollment State >> Ġ= ĊĠĠĠĠĠĠĠ Ġmobile Ti ers Interactor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Ti ers And Sk us ( courses , Ġsource Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ( mobile Ti ers , Ġlight Sk us ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourses ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Ġ{ Ġcourse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmobile Ti ers By Course Id Ġ= Ġmobile Ti ers . associate By ( Mobile Tier :: course ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlight Sk us By Tier Id Ġ= Ġlight Sk us . associate By ( Light Sku :: id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Enrollment State Mobile Ti ers Single Course ( course , Ġsource Type , Ġmobile Ti ers By Course Id , Ġlight Sk us By Tier Id , Ġresolve Enrollment State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġcourse . id Ġto Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toMap () Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Enrollment State Mobile Ti ers Single Course ( ĊĠĠĠĠĠĠĠ Ġcourse : ĠCourse , ĊĠĠĠĠĠĠĠ Ġsource Type : ĠDataSource Type , ĊĠĠĠĠĠĠĠ Ġmobile Ti ers By Course Id : ĠMap < Long , ĠMobile Tier >, ĊĠĠĠĠĠĠĠ Ġlight Sk us By Tier Id : ĠMap < String , ĠLight Sku >, ĊĠĠĠĠĠĠĠ Ġresolve Enrollment State : ĠBoolean ĊĠĠĠ Ġ): ĠSingle < Enrollment State > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourse . enrollment Ġ> Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Repository . get Profile (). map Ġ{ Ġprofile Ġ-> Ġresolve En rolled Enrollment State ( course , Ġprofile . id ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! course . is Paid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( Enrollment State . Not En rolled Free ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourse . is Paid Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( standard Light Sku , Ġprom o Light Sku ) Ġ= Ġcourse . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Mobile Tier Ġ= Ġmobile Ti ers By Course Id [ it . id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Mobile Tier ?. price Tier ?. let Ġ{ Ġtier Ġ-> Ġlight Sk us By Tier Id [ tier ] Ġ} Ġto Ġcurrent Mobile Tier ?. promo Tier ?. let Ġ{ Ġtier Ġ-> Ġlight Sk us By Tier Id [ tier ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolve Enrollment State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Payments Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getC ourse Payments By Course Id ( course . id , Ġcourse Payment Status Ġ= ĠCourse Payment . Status . SUCCESS , Ġsource Type Ġ= Ġsource Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġpayments Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( payments . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( resolve Paid Enrollment State ( standard Light Sku , Ġprom o Light Sku )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( Enrollment State . Not En rolled Free ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Item ( resolve Paid Enrollment State ( standard Light Sku , Ġprom o Light Sku )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( resolve Paid Enrollment State ( standard Light Sku , Ġprom o Light Sku )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( Enrollment State . Not En rolled Free ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve En rolled Enrollment State ( course : ĠCourse , Ġprofile Id : ĠLong ): ĠEn rollment State . En rolled Ġ= ĊĠĠĠĠĠĠĠ ĠEn rollment State . En rolled ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Course ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Ġ= Ġcourse . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġprofile Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Arch ived Ġ= Ġcourse . is Arch ived , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite Ġ= Ġcourse . is Favorite , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast View ed Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Paid Enrollment State ( standard Light Sku : ĠLight Sku ?, Ġprom o Light Sku : ĠLight Sku ?): ĠEn rollment State Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( standard Light Sku Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Flow Ġ= ĠCourse Purchase Flow . valueOf With Fallback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Remote Config [ Remote Config . PUR CH ASE _ FLOW _ ANDROID ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uppercase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġwe Ġare Ġusing Ġstrictly ĠI AP , Ġthen Ġwe Ġit Ġis Ġnot Ġpossible Ġto Ġpurchase Ġcourses ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthrough Ġthe Ġapplication ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Flow Ġ== ĠCourse Purchase Flow . I AP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn rollment State . Not En rolled Unavailable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn rollment State . Not En rolled Web ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEn rollment State . Not En rolled Mobile Tier ( standard Light Sku , Ġprom o Light Sku ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġ</ editor - fold > ĊĊĠĠĠ Ġ// Ġ< editor - fold Ġdesc =" Course Stats Ġshared Ġfunctions "> ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoad Ġcourse Ġreviews Ġfor Ġnot Ġen rolled Ġ[ courses ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġresolve Course Review ( courses : ĠList < Course >, Ġsource Type : ĠDataSource Type ): ĠSingle < List < Course Review Summary >> Ġ= ĊĠĠĠĠĠĠĠ Ġcourse Review Repository ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getC ourse Review Sum maries ( course Review Summary Ids Ġ= Ġcourses . filter Ġ{ Ġit . enrollment Ġ== Ġ 0 L Ġ}. map To Long Array Ġ{ Ġit . review Summary Ġ}, Ġsource Type Ġ= Ġsource Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Item ( emptyList ()) ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Course Progress ( courses : ĠList < Course >, Ġsource Type : ĠDataSource Type ): ĠSingle < List < Progress >> Ġ= ĊĠĠĠĠĠĠĠ Ġprogress Repository ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Prog resses ( progress Ids Ġ= Ġcourses . get Prog resses (), Ġprimary Source Type Ġ= Ġsource Type ) ĊĠĠĠ Ġ// Ġ</ editor - fold > Ċ }