package Ġio . h arness . cf sdk . example Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġio . h arness . cf sdk . Cf Client Ċ import Ġio . h arness . cf sdk . Cf Configuration Ċ import Ġio . h arness . cf sdk . cloud . core . model . Evaluation Ċ import Ġio . h arness . cf sdk . cloud . events . Evaluation Listener Ċ import Ġio . h arness . cf sdk . cloud . model . Target Ċ import Ġio . h arness . cf sdk . cloud . ok sse . Events Listener Ċ import Ġio . h arness . cf sdk . cloud . ok sse . model . Status Event Ċ import Ġio . h arness . cf sdk . logging . Cf Log Ċ import Ġorg . json . JSONObject Ċ import Ġjava . util . concurrent . Executors Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġclients Ġ= Ġmutable ListOf < Cf Client >() ĊĠĠĠ Ġprivate Ġval Ġlog Tag Ġ= ĠMainActivity :: class . simple Name ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkeys Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġexecutor Ġ= ĠExec utors . new Single Thread Executor () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠF RE EM IUM _ API _ KEY Ġ= Ġ" 5 ca 0 3 8 0 d - 3 2 0 9 - 4 3 2 2 - ae 0 f - 9 0 3 c 5 8 c 2 4 4 5 7 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNON _ F RE EM IUM _ API _ KEY Ġ= Ġ" e 3 0 1 9 7 0 0 - b 9 5 f - 4 6 6 5 - 8 4 9 9 - ca 1 8 4 0 7 4 1 9 9 c " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġevents Listener Ġ= ĠEvents Listener Ġ{ Ġevent Ġ-> ĊĊĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ" Event : Ġ${ event . eventType }") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( event . eventType Ġ== ĠStatus Event . EVENT _ TYPE . EVAL UATION _ CHANGE ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevaluation : ĠEvaluation Ġ= Ġevent . extract Payload () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ" Evaluation Ġchanged : Ġ$ evaluation ") ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . eventType Ġ== ĠStatus Event . EVENT _ TYPE . EVAL UATION _ RE LOAD ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ" Evaluation Ġreload ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġflag 1 Listener : ĠEvaluation Listener Ġ= ĠEvaluation Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġclients . forEach Ġ{ Ġclient Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeval Ġ= Ġclient . bool Variation (" flag 1 ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ" flag 1 Ġvalue : Ġ$ eval ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġflag 2 Listener : ĠEvaluation Listener Ġ= ĠEvaluation Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġclients . forEach Ġ{ Ġclient Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeval Ġ= Ġclient . number Variation (" flag 2 ", Ġ- 1 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ" flag 2 Ġvalue : Ġ$ eval ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġflag 3 Listener : ĠEvaluation Listener Ġ= ĠEvaluation Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġclients . forEach Ġ{ Ġclient Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeval Ġ= Ġclient . string Variation (" flag 3 ", Ġ" NO _ VALUE !! !") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ" flag 3 Ġvalue : Ġ$ eval ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġflag 4 Listener : ĠEvaluation Listener Ġ= ĠEvaluation Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġclients . forEach Ġ{ Ġclient Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeval Ġ= Ġclient . json Variation (" flag 4 ", ĠJSONObject ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ" flag 4 Ġvalue : Ġ$ eval ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġkeys [" F reem ium "] Ġ= ĠF RE EM IUM _ API _ KEY ĊĠĠĠĠĠĠĠ Ġkeys [" Non - F reem ium "] Ġ= ĠNON _ F RE EM IUM _ API _ KEY ĊĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= ĠTarget (). identifier (" Harness "). name (" Harness ") ĊĊĠĠĠĠĠĠĠ Ġval Ġremote Configuration Ġ= ĠC f Configuration . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Analytics ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl (" https :// config . feature - flags . u at . h arness . io / api / 1 . 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ. event Url (" https :// event . feature - flags . u at . h arness . io / api / 1 . 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ. stream Url (" https :// config . feature - flags . u at . h arness . io / api / 1 . 0 / stream ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Stream ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġkeys . forEach Ġ{ Ġ( key Name , ĠapiKey ) Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . execute Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠC f Client () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclients . add ( client ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Prefix Ġ= Ġkey Name Ġ+ Ġ" Ġ:: Ġ" Ġ+ Ġclient . hashCode () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . initialize ( ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠapiKey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġresult Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is Success ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregister Events Ok Ġ= Ġclient . register Events Listener ( events Listener ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġregister Evalu ations Ok Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( client . register Evaluation Listener (" flag 1 ", Ġflag 1 Listener )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Evalu ations Ok ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( client . register Evaluation Listener (" flag 2 ", Ġflag 2 Listener )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Evalu ations Ok ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( client . register Evaluation Listener (" flag 3 ", Ġflag 3 Listener )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Evalu ations Ok ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( client . register Evaluation Listener (" flag 4 ", Ġflag 4 Listener )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Evalu ations Ok ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( register Events Ok Ġ&& Ġregister Evalu ations Ok Ġ== Ġ 4 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . i ( log Tag , Ġ"$ log Prefix ĠRegist rations ĠOK ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Val Ġ= Ġclient . bool Variation (" flag 1 ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ"$ log Prefix Ġflag 1 : Ġ$ b Val ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Val Ġ= Ġclient . number Variation (" flag 2 ", Ġ- 1 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ"$ log Prefix Ġflag 2 : Ġ$ n Val ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Val Ġ= Ġclient . string Variation (" flag 3 ", Ġ" NO _ VALUE !! !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ"$ log Prefix Ġflag 3 : Ġ$ s Val ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj Val Ġ= Ġclient . json Variation (" flag 4 ", ĠJSONObject ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . v ( log Tag , Ġ"$ log Prefix Ġflag 4 : Ġ$ j Val ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġresult . error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġ"$ log Prefix ĠInitialization Ġerror " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe ?. let Ġ{ Ġerr Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr . message ?. let Ġ{ ĠerrMsg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= ĠerrMsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC f Log . OUT . e ( log Tag , Ġmsg , Ġerr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmsg , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĊĠĠĠĠĠĠĠ Ġclients . forEach Ġ{ Ġclient Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . destroy () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }