package Ġcom . ably . tracking . test . android . common Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ Ċ private Ġval ĠTAG Ġ= Ġ" PUBL ISH ING ĠSDK ĠIT " Ċ private Ġval Ġencountered Thread Ids Ġ= ĠHashSet < Long >() Ċ Ċ @ Suppress Lint (" Log Not Tim ber ", Ġ" Log Conditional ") Ċ fun Ġtest Log D ( message : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġthread Ġ= ĠThread . currentThread () ĊĠĠĠ Ġval Ġcurrent Thread Id Ġ= Ġthread . id ĊĠĠĠ Ġif Ġ(! en counter ed Thread Ids . contains ( currentThread Id )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Thread Looper Ġ= ĠL ooper . my Looper () ĊĊĠĠĠĠĠĠĠ Ġval Ġlo oper Description Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġcurrent Thread Looper ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentThread Looper Ġ== ĠL ooper . get Main Looper ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" main ĠL ooper " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" has ĠL ooper Ġ( not Ġmain )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" no ĠL ooper " ĊĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" THREAD Ġ$ currentThread Id Ġis Ġ'${ thread . name }' Ġ[$ lo oper Description ]") ĊĠĠĠĠĠĠĠ Ġencountered Thread Ids . add ( currentThread Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠLog . d ( TAG , Ġ"${ Thread . currentThread (). id }: Ġ Ġ$ message ") Ċ } Ċ