package Ġk z . opensource . tooltip s Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . view . View Ċ import Ġk z . opensource . tooltip s . anim ator . Default ToolTip Animator Ċ import Ġk z . opensource . tooltip s . anim ator . ToolTip Animator Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . HashMap Ċ Ċ private Ġconst Ġval ĠDEFAULT _ ANIM _ DURATION Ġ= Ġ 4 0 0 Ċ Ċ class ĠTool Tips Manager ( ĊĠĠĠ Ġvar Ġanimation Duration : ĠInt Ġ= ĠDEFAULT _ ANIM _ DURATION , ĊĠĠĠ Ġvar Ġtool Tip Animator : ĠTool Tip Animator Ġ= ĠDefault ToolTip Animator (), ĊĠĠĠ Ġvar Ġtip Listener : ĠTip Listener ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtips Map : ĠMutable Map < Int , ĠView > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġval Ġtip View Factory Ġ= ĠTip View Factory () ĊĊĠĠĠ Ġinterface ĠTip Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Tip Dis missed ( view : ĠView ?, Ġanchor View Id : ĠInt , Ġby User : ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ( tool Tip : ĠTool Tip ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtip View Ġ= Ġcreate ( tool Tip ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġanimate Ġtip Ġvisibility ĊĠĠĠĠĠĠĠ Ġtool Tip Animator . popup ( tip View , Ġanimation Duration . to Long ()). start () ĊĠĠĠĠĠĠĠ Ġreturn Ġtip View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate ( tool Tip : ĠTool Tip ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġonly Ġone Ġtip Ġis Ġallowed Ġnear Ġan Ġanchor Ġview Ġat Ġthe Ġsame Ġtime , Ġthus ĊĠĠĠĠĠĠĠ Ġ// Ġreuse Ġtip Ġif Ġalready Ġexist ĊĠĠĠĠĠĠĠ Ġif Ġ( tips Map . containsKey ( tool Tip . anchor View . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtips Map [ tool Tip . anchor View . id ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtip View Ġ= Ġtip View Factory . create OrNull ( tool Tip ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġtip View . setOnClickListener Ġ{ Ġview Ġ-> Ġdismiss ( view , Ġtrue ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġbind Ġtip View Ġwith Ġanchor View Ġid Ġfor Ġlater Ġuse ĊĠĠĠĠĠĠĠ Ġval Ġanchor View Id Ġ= Ġtool Tip . anchor View . id ĊĠĠĠĠĠĠĠ Ġtip View . tag Ġ= Ġanchor View Id ĊĠĠĠĠĠĠĠ Ġtips Map [ anchor View Id ] Ġ= Ġtip View ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtip View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss ( tip View : ĠView ?, Ġby User : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tip View Ġ!= Ġnull Ġ&& Ġis Visible ( tip View )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġtip View . tag Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtips Map . remove ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Dismiss ( tip View , Ġby User ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss ( key : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtips Map . containsKey ( key ) Ġ&& Ġdismiss ( tips Map [ key ], Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind ( key : ĠInt ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( tips Map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtips Map [ key ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind And Dismiss ( anchor View : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġfind ( anchor View . id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview Ġ!= Ġnull Ġ&& Ġdismiss ( view , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss All () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tips Map . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries : ĠList < Map . Entry < Int , ĠView >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArrayList < Map . Entry < Int , ĠView >>( tips Map . entries ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( _, Ġvalue ) Ġin Ġentries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss ( value , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtips Map . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Dismiss ( view : ĠView , Ġby User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtool Tip Animator . pop out ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Duration . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tip Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip Listener !!. on Tip Dis missed ( view , Ġview . tag Ġas ĠInt , Ġby User ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Visible ( tip View : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtip View . visibility Ġ== ĠView . VISIBLE ĊĠĠĠ Ġ} Ċ } Ċ