package Ġcr ux . b ph c . cms . view models Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Base 6 4 Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcr ux . b ph c . cms . app . My Application Ċ import Ġcr ux . b ph c . cms . app . Urls Ċ import Ġcr ux . b ph c . cms . app . append Or Set QueryParameter Ċ import Ġcr ux . b ph c . cms . helper . Course Data Handler Ċ import Ġcr ux . b ph c . cms . helper . Course RequestHandler Ċ import Ġcr ux . b ph c . cms . models . Single Live Event Ċ import Ġcr ux . b ph c . cms . models . User Account Ċ import Ġcr ux . b ph c . cms . models . core . User Detail Ċ import Ġcr ux . b ph c . cms . models . course . Module Ċ import Ġcr ux . b ph c . cms . network . APIClient Ċ import Ġcr ux . b ph c . cms . network . Mood le Services Ċ import Ġcr ux . b ph c . cms . utils . User Utils Ċ import Ġcr ux . b ph c . cms . utils . Utils Ċ import Ġio . realm . Realm Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . security . Message Digest Ċ import Ġjava . security . NoSuch AlgorithmException Ċ import Ġjava . util .* Ċ Ċ class ĠToken ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġjava Class . simple Name ĊĊĠĠĠ Ġprivate Ġval Ġm ood le Services : ĠM ood le Services Ġ= ĠAP IC lient . get Ret rofit Instance (). create ( Mood le Services :: class . java ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ on ErrorMessage : ĠMutable LiveData < Single Live Event < String >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġon ErrorMessage : ĠLive Data < Single Live Event < String >> Ġ= Ġ_ on ErrorMessage ĊĊĠĠĠ Ġprivate Ġval Ġ_ show Bad Token Dialog : ĠMutable LiveData < Single Live Event < Boolean >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġshow Bad Token Dialog : ĠLive Data < Single Live Event < Boolean >> Ġ= Ġ_ show Bad Token Dialog ĊĊĠĠĠ Ġprivate Ġval Ġ_ status : ĠMutable LiveData < Int > Ġ= ĠMutable LiveData ( NO _ STATUS ) ĊĠĠĠ Ġval Ġstatus : ĠLive Data < Int > Ġ= Ġ_ status ĊĊĠĠĠ Ġprivate Ġval Ġ_ start MainActivity : ĠMutable LiveData < Single Live Event < Boolean >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġstart MainActivity : ĠLive Data < Single Live Event < Boolean >> Ġ= Ġ_ start MainActivity ĊĊĠĠĠ Ġprivate Ġval Ġ_ start Intent : ĠMutable LiveData < Single Live Event < Intent >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġstart Intent : ĠLive Data < Single Live Event < Intent >> Ġ= Ġ_ start Intent ĊĊĠĠĠ Ġfun Ġprocess Intent ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ!= Ġnull Ġ&& Ġintent . action Ġ!= Ġnull Ġ&& Ġintent . action Ġ== ĠIntent . ACTION _ VIEW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġintent . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscheme Ġ= Ġdata . scheme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scheme Ġ!= Ġnull Ġ&& Ġscheme Ġ!= ĠUrl s . SSO _ URL _ SCHEME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on ErrorMessage . post Value ( Single Live Event (" Invalid Ġtoken ĠURI ĠSchema .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ show Bad Token Dialog . post Value ( Single Live Event ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhost Scheme Ġ= Ġ" token =" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhost Ġ= Ġdata . host ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( host Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! host . contains ( host Scheme )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on ErrorMessage . post Value ( Single Live Event (" Invalid Ġtoken ĠURI ĠSchema .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ show Bad Token Dialog . post Value ( Single Live Event ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClean Ġup Ġthe Ġhost Ġso Ġthat Ġwe Ġcan Ġextract Ġthe Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost Ġ= Ġhost . replace ( host Scheme , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost Ġ= Ġhost . replace ("/ ? # ?$ ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost Ġ= ĠString ( Base 6 4 . decode ( host , ĠBase 6 4 . DEFAULT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġhost . split (" ::: "). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parts . size Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on ErrorMessage . post Value ( Single Live Event (" Invalid Ġtoken Ġresponse Ġlength ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ show Bad Token Dialog . post Value ( Single Live Event ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdigest Ġ= Ġparts [ 0 ]. toUpperCase ( Locale . ROOT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġparts [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprivate Token Ġ= Ġif Ġ( parts . size Ġ>= Ġ 3 ) Ġparts [ 2 ] Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlaunch Data Ġ= ĠMy Application . instance . login Launch Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġlaunch Data [" SITE _ URL "] Ġ+ Ġlaunch Data [" PAS SP ORT "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Utils . bytes To Hex ( Message Digest . getInstance (" md 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. digest ( signature . toByteArray ( StandardCharsets . US _ ASCII ))) Ġ!= Ġdigest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on ErrorMessage . post Value ( Single Live Event (" Invalid Ġtoken Ġdigest ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ show Bad Token Dialog . post Value ( Single Live Event ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on ErrorMessage . post Value ( Single Live Event (" MD 5 Ġnot Ġa Ġvalid ĠMessage Digest Ġalgorithm ! Ġ: o ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Using Token ( token , Ġprivate Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlogin Using Token ( token : ĠString , Ġprivate Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ status . post Value ( FETCH ING _ DETAILS ) ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġm ood le Services . fetch User Detail ( token ) ĊĠĠĠĠĠĠĠ Ġcall . enqueue ( object Ġ: ĠCallback < User Detail > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < User Detail >, Ġresponse : ĠResponse < User Detail >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġuser Detail : ĠUser Detail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . body (). also Ġ{ Ġuser Detail Ġ= Ġit !! Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Detail . token Ġ= Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Detail . private Token Ġ= Ġprivate Token ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Account . setUser ( user Detail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch UserData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < User Detail >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w tf ( TAG , Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . post Value ( NO _ STATUS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġfetch UserData () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcourse Data Handler Ġ= ĠCourse Data Handler ( Realm . getDefaultInstance ()) ĊĠĠĠĠĠĠĠ Ġval Ġcourse RequestHandler Ġ= ĠCourse RequestHandler () ĊĊĠĠĠĠĠĠĠ Ġ/* ĠFetch ĠUser 's ĠCourse ĠList Ġ*/ ĊĠĠĠĠĠĠĠ Ġ_ status . post Value ( PROGRESS _ CO URSE _ LIST ) ĊĠĠĠĠĠĠĠ Ġval Ġcourse List Ġ= Ġcourse RequestHandler . getC ourse List ( getApplication () Ġas ĠContext ) ĊĠĠĠĠĠĠĠ Ġif Ġ( course List Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! User Utils . isValid Token ( User Account . token )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Utils . logout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Utils . clear Back Stack And Launch Token Activity ( getApplication ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcourse Data Handler . replace Courses ( course List ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠFetch ĠCourse ĠContent Ġ*/ ĊĠĠĠĠĠĠĠ Ġ_ status . post Value ( PROGRESS _ CO URSE _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġval Ġcourses Ġ= Ġcourse Data Handler . course List ĊĠĠĠĠĠĠĠ Ġfor Ġ( course Ġin Ġcourses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcourse Sections Ġ= Ġcourse RequestHandler . getC ourse Data ( course ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( course Section Ġin Ġcourse Sections ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodules : ĠList < Module > Ġ= Ġcourse Section . modules ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( module Ġin Ġmodules ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( module . mod Type Ġ=== ĠModule . Type . FOR UM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiscussions Ġ= Ġcourse RequestHandler . get Forum Dis cussion s ( module . instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( d Ġin Ġdiscussions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . forum Id Ġ= Ġmodule . instance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Data Handler . set Forum Dis cussion s ( module . instance , Ġdiscussions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Data Handler . replace Course Data ( course . id , Ġcourse Sections ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠFetch ĠSite ĠNews Ġ*/ ĊĠĠĠĠĠĠĠ Ġ_ status . post Value ( PROGRESS _ SITE _ NE WS ) ĊĠĠĠĠĠĠĠ Ġval Ġdiscussions Ġ= Ġcourse RequestHandler . get Forum Dis cussion s ( 1 ) Ġ// Ġ 1 Ġis Ġalways Ġsite Ġnews ĊĠĠĠĠĠĠĠ Ġif Ġ( discussion s Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( d Ġin Ġdiscussions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . forum Id Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Data Handler . set Forum Dis cussion s ( 1 , Ġdiscussions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck LoggedIn () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck LoggedIn () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( User Account . is LoggedIn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ start MainActivity . post Value ( Single Live Event ( true )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Login () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWe 'll Ġjust Ġcreate Ġan Ġinto Ġa Ġspecific ĠM ood le Ġendpoint . ĠThe ĠM ood le Ġwebsite Ġwill Ġhandle Ġthe Ġauthentication , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Ġa Ġtoken Ġand Ġredirect Ġthe Ġbrowser Ġto Ġthe ĠUri Ġwith Ġspecified Ġschema . ĠThe Ġbrowser Ġwill Ġcreate Ġan ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġthat 'll Ġlaunch Ġthis Ġactivity Ġagain . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ// ĠA Ġrandom Ġnumber Ġthat Ġidentifies Ġthe Ġrequest ĊĠĠĠĠĠĠĠ Ġval Ġpassport Ġ= ĠRandom (). nextInt ( 1 0 0 0 ). toString () ĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠUrl s . SSO _ LOGIN _ URL . build Up on () ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġbuilder . append Or Set QueryParameter (" passport ", Ġpassport ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġbuilder . append Or Set QueryParameter (" url scheme ", ĠUrl s . SSO _ URL _ SCHEME ) ĊĠĠĠĠĠĠĠ Ġval Ġlogin Url Ġ= Ġbuilder . toString () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġlaunch Ġdata , Ġwe Ġneed Ġthis Ġto Ġverify Ġthe Ġtoken Ġobtained Ġafter ĠSSO ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġ// ĠS ITE _ URL Ġmust Ġnot Ġend Ġwith Ġtrailing Ġ/ ĊĠĠĠĠĠĠĠ Ġdata [" SITE _ URL "] Ġ= ĠUrl s . MO OD LE _ URL . toString (). replace ("/ $ ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠ Ġdata [" PAS SP ORT "] Ġ= Ġpassport ĊĠĠĠĠĠĠĠ ĠMy Application . instance . set Login Launch Data ( data ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠ Ġintent . data Ġ= ĠUri . parse ( login Url ) ĊĠĠĠĠĠĠĠ Ġ_ start Intent . post Value ( Single Live Event ( intent )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFETCH ING _ DETAILS Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROG RESS _ CO URSE _ LIST Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROG RESS _ CO URSE _ CONTENT Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROG RESS _ SITE _ NE WS Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNO _ STATUS Ġ= Ġ 5 ĊĠĠĠ Ġ} Ċ }