package Ġcom . fs ry an . tools . logging . android . ur ban air ship Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġcom . fs ry an . tools . logging . android . Context Specific Event Logger Ċ import Ġcom . ur ban air ship . UA ir ship Ċ import Ġcom . ur ban air ship . analytics . Custom Event Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . Copy On Write Array Set Ċ Ċ class ĠU rb an Air ship Event Logger : ĠContext Specific Event Logger () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġstored Attrs Ġ= ĠConcurrent HashMap < String , ĠString >() ĊĠĠĠ Ġprivate Ġval Ġidentifier Attrs Ġ= ĠCopy On Write Array Set < String >() ĊĊĠĠĠ Ġoverride Ġfun Ġid (): ĠString Ġ= Ġ" ur ban air ship " ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Initialized ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġapp Info Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getApplication Info ( context . packageName , ĠPackage Manager . GET _ META _ DATA ) ĊĠĠĠĠĠĠĠ Ġval Ġidentifier Attr Array Res Ġ= Ġapp Info . metaData . getInt (" fs ry an . log . ua . identifier _ attrs ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( identifier Attr Array Res Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Attrs . addAll ( context . resources . getString Array ( identifier Attr Array Res )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . initialize ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Attr ( attr Name : ĠString , Ġattr Value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr Name Ġ== Ġtrack Screen Attr Name Ġ-> Ġtrack Screen ( attr Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Attrs . contains ( attr Name ) Ġ-> Ġadd Identifier ( attr Name , Ġattr Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . add Attr ( attr Name , Ġattr Value ). also Ġ{ Ġstored Attrs [ attr Name ] Ġ= Ġattr Value Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Attr ( attr Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Attrs . contains ( attr Name ) Ġ-> Ġremove Identifier ( attr Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstored Attrs . remove ( attr Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . removeAttr ( attr Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Event ( eventName : ĠString , Ġattrs : ĠMap < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Attrs Ġ= Ġadd Default Attrs To ( attrs ) Ġ+ Ġstored Attrs ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠCustom Event . newBuilder ( eventName ) ĊĠĠĠĠĠĠĠ Ġactual Attrs . entries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Boolean Property ( key ) Ġ-> Ġbuilder . addProperty ( key , Ġvalue . to Boolean ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Long Property ( key ) Ġ-> Ġbuilder . addProperty ( key , Ġvalue . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Double Property ( key ) Ġ-> Ġbuilder . addProperty ( key , Ġvalue . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbuilder . addProperty ( key , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . build (). track () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtrack Screen ( screen Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠU Air ship . shared (). analytics . track Screen ( screen Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Identifier ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠU Air ship . shared (). analytics . edit Associated Identifiers (). add Identifier ( key , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Identifier ( key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠU Air ship . shared (). analytics . edit Associated Identifiers (). remove Identifier ( key ) ĊĠĠĠ Ġ} Ċ }