package Ġcom . ad ap ty . internal . data . cloud Ċ Ċ import Ġandroidx . annotation . Restrict To Ċ import Ġcom . ad ap ty . internal . data . cache . Cache Repository Ċ import Ġcom . ad ap ty . internal . data . models . Aws Record Model Ċ import Ġcom . ad ap ty . internal . utils . Logger Ċ import Ġcom . ad ap ty . internal . utils . execute Ċ import Ġcom . ad ap ty . internal . utils . generate Uuid Ċ import Ġcom . google . android . gms . common . util . Base 6 4 Utils Ċ import Ġcom . google . gson . Gson Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ @ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) Ċ internal Ġclass ĠK inesis Manager ( ĊĠĠĠ Ġprivate Ġval Ġcache Repository : ĠCache Repository , ĊĠĠĠ Ġprivate Ġval Ġgson : ĠGson , ĊĠĠĠ Ġprivate Ġval ĠhttpClient : ĠHttpClient , ĊĠĠĠ Ġprivate Ġval Ġrequest Factory : ĠRequest Factory Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġk inesis Stream Ġ= Ġ" ad ap ty - data - pipeline - prod " ĊĠĠĠ Ġprivate Ġval ĠsessionId Ġ= Ġgenerate Uuid () ĊĊĠĠĠ Ġfun Ġtrack Event ( eventName : ĠString , Ġsub Map : ĠMap < String , ĠString >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! cache Repository . get External Analytics Enabled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . log Verbose Ġ{ Ġ" We Ġcan 't Ġhandle Ġanalytics Ġevents , Ġsince Ġyou 've Ġopt ed Ġit Ġout ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġiam Access KeyId Ġ= Ġcache Repository . get Iam Access KeyId () ĊĠĠĠĠĠĠĠ Ġval Ġiam SecretKey Ġ= Ġcache Repository . get Iam SecretKey () ĊĠĠĠĠĠĠĠ Ġval Ġiam Session Token Ġ= Ġcache Repository . get Iam Session Token () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( iam Access KeyId Ġ== Ġnull Ġ|| Ġiam SecretKey Ġ== Ġnull Ġ|| Ġiam Session Token Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Str Ġ= Ġgson . toJson ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" profile _ id " Ġto Ġcache Repository . get Profile Id (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" session _ id " Ġto ĠsessionId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" event _ name " Ġto ĠeventName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" profile _ installation _ meta _ id " Ġto Ġcache Repository . get Installation Meta Id (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" event _ id " Ġto Ġgenerate Uuid (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" created _ at " Ġto Ġget Iso 8 6 0 1 Time Date (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" platform " Ġto Ġ" Android " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Map ?. let (:: put All ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= Ġcache Repository . get K inesis Records () ĊĠĠĠĠĠĠĠ Ġrecords . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAws Record Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 Utils . encode ( data Str . toByteArray ()). replace ("\ n ", Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Repository . get Installation Meta Id (). or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcache Repository . save K inesis Records ( records . take Last ( 5 0 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġhash Map Of < String , ĠAny >(" Records " Ġto Ġrecords , Ġ" Stream Name " Ġto Ġk inesis Stream ) ĊĊĠĠĠĠĠĠĠ Ġexecute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠhttpClient . new Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Factory . k inesis Request ( body ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( response Ġas ? ĠResponse . Success )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ( response Ġas ? ĠResponse . Error )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġit . error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsent Records Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( body [ records ] Ġas ? ĠArrayList <* >) ?. filter Is Instance < Aws Record Model >() Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsaved Records Ġ= Ġcache Repository . get K inesis Records () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot Sent Ġ= ĠArrayList ( saved Records . subtract ( sent Records )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Repository . save K inesis Records ( not Sent . take Last ( 5 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Iso 8 6 0 1 Time Date (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCalendar . getInstance (). time ĊĠĠĠĠĠĠĠ Ġval Ġtz Ġ= ĠTime Zone . getTime Zone (" GMT ") ĊĠĠĠĠĠĠĠ Ġval Ġdf : ĠDate Format Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimpleDateFormat (" yyyy - MM - dd ' T ' HH : mm : ss . SS SZ ", ĠLocale . US ) ĊĊĠĠĠĠĠĠĠ Ġdf . time Zone Ġ= Ġtz ĊĠĠĠĠĠĠĠ Ġreturn Ġdf . format ( c ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠArrayList < T >. take Last ( n : ĠInt ): ĠArrayList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( n Ġ== Ġ 0 ) Ġreturn Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġthis . size ĊĠĠĠĠĠĠĠ Ġif Ġ( n Ġ>= Ġsize ) Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġif Ġ( n Ġ== Ġ 1 ) Ġreturn Ġarray ListOf ( last ()) ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < T >( n ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġsize Ġ- Ġn Ġuntil Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( this [ index ]) ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} Ċ }