package Ġio . pi ano . sample Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . webkit . Javascript Interface Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġio . pi ano . android . composer . Composer Ċ import Ġio . pi ano . android . composer . Composer Exception Ċ import Ġio . pi ano . android . composer . listeners . EventType Listener Ċ import Ġio . pi ano . android . composer . listeners . Experience Execute Listener Ċ import Ġio . pi ano . android . composer . listeners . Meter Listener Ċ import Ġio . pi ano . android . composer . listeners . Non Site Listener Ċ import Ġio . pi ano . android . composer . listeners . Show Login Listener Ċ import Ġio . pi ano . android . composer . listeners . Show Template Listener Ċ import Ġio . pi ano . android . composer . listeners . User Segment Listener Ċ import Ġio . pi ano . android . composer . model . Custom Parameters Ċ import Ġio . pi ano . android . composer . model . Event Ċ import Ġio . pi ano . android . composer . model . Experience Request Ċ import Ġio . pi ano . android . composer . model . events . EventType Ċ import Ġio . pi ano . android . composer . model . events . Show Template Ċ import Ġio . pi ano . android . composer . show template . Composer Js Ċ import Ġio . pi ano . android . composer . show template . Show Template Controller Ċ import Ġio . pi ano . android . id . P iano Id Ċ import Ġio . pi ano . android . id . P iano Id . Companion . getP iano Id Token Result Ċ import Ġio . pi ano . android . id . models . P iano Id Token Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠComposer Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġshow Template Controller : ĠShow Template Controller ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprefs Storage : ĠP refs Storage ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġprefs Storage Ġ= ĠSimple Dependencies Provider . getInstance ( this ). prefs Storage ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ composer ) ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= ĠfindViewById < Toolbar >( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcustom Parameters Ġ= ĠCustom Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. content (" content Key ", Ġ" content Value 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. content (" content Key ", Ġ" content Value 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. user (" user Key ", Ġ" user Value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request (" request Key ", Ġ" requ st Value 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request (" request Key ", Ġ" requ st Value 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request (" request Key ", Ġ" requ st Value 3 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠExperience Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag (" tag ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. debug ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. custom Params ( custom Parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġlisteners : ĠCollection < EventType Listener < out ĠEventType >> Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExperience Execute Listener Ġ{ Ġ(_, Ġ_, Ġevent Data ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ ${ Thread . currentThread (). name }] ĠUser Ġ= Ġ${ event Data . user }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Segment Listener Ġ{ Ġ(_, Ġ_, Ġevent Data ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ ${ Thread . currentThread (). name }] ĠUser Ġstate Ġ= Ġ${ event Data . state }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠShow Login Listener Ġ{ Ġ(_, Ġ_, Ġevent Data ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ ${ Thread . currentThread (). name }] Ġ${ event Data . user Provider }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In ( event Data . user Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeter Listener Ġ{ Ġ(_, Ġ_, Ġevent Data ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġevent Data . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ ${ Thread . currentThread (). name }] ĠMeter Ġstate : Ġ${ state . name } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews Ġ= Ġ$ views , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews Left Ġ= Ġ$ views Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Views Ġ= Ġ$ max Views , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Views Ġ= Ġ$ total Views ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠShow Template Listener Ġ{ Ġevent : ĠEvent < Show Template > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ ${ Thread . currentThread (). name }] Ġ${ event . event Data }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Template Controller Ġ= ĠShow Template Controller . show ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠComposer Js () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Javascript Interface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcustom Event ( event Data : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( findViewById ( R . id . app _ bar ), Ġevent Data , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Javascript Interface ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlogin ( event Data : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In ( Composer . USER _ PROVIDER _ PI AN O _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNon Site Listener Ġ{ Ġ(_, Ġevent ExecutionContext ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġevent ExecutionContext . active Met ers ?. first OrNull ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ ${ Thread . currentThread (). name }] ĠActive Ġmeter : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeter Name Ġ= Ġ$ meter Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews Ġ= Ġ$ views , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews Left Ġ= Ġ$ views Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Views Ġ= Ġ$ max Views , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Views Ġ= Ġ$ total Views ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ"[ ${ Thread . currentThread (). name }] ĠActive Ġmeters Ġare Ġnull Ġor Ġempty !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠComposer . getInstance (). get Experience ( request , Ġlisteners ) Ġ{ Ġexception : ĠComposer Exception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ ${ Thread . currentThread (). name }] Ġ${ exception . cause ?. message Ġ?: Ġexception . message }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset AccessToken ( token : ĠP iano Id Token ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs Storage . pi ano Id Token Ġ= Ġtoken ĊĠĠĠĠĠĠĠ Ġshow Template Controller ?. reload With Token ( token ?. accessToken Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ ĠComposer . getInstance (). user Token ( token ?. accessToken ) ĊĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( findViewById ( R . id . app _ bar ), Ġ" accessToken Ġ= Ġ" Ġ+ Ġtoken ?. accessToken , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign In ( user Provider : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( P iano Id . signIn (). get Intent ( this ), ĠPI AN O _ ID _ REQUEST _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠPI AN O _ ID _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRESULT _ OK Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset AccessToken ( data . getP iano Id Token Result ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( findViewById ( R . id . app _ bar ), Ġit . message Ġ?: Ġ" Unknown Ġerror ", ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRESULT _ C ANCE LED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( findViewById ( R . id . app _ bar ), Ġ" OAuth Ġcancelled ", ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP iano Id . RESULT _ ERROR Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( findViewById ( R . id . app _ bar ), Ġ" Result Ġerror ", ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPI AN O _ ID _ REQUEST _ CODE Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ } Ċ