package Ġspace . ise ki . pm 2 5 Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . os . Binder Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . util . Log Ċ Ċ @ Suppress (" Local Variable Name ") Ċ class ĠLocal Service Connection < T Ġ: ĠService , ĠB Ġ: ĠBase Local Binder < T >> Ġ: ĠService Connection Ġ{ ĊĠĠĠ Ġval Ġservice : ĠT ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ s Ġ?: Ġerror (" unbind .") ĊĠĠĠ Ġval Ġis Bind : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ s Ġ!= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġ_ s : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġlist Ġ= Ġmutable ListOf <( T ) Ġ-> ĠUnit >() ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name ?, Ġservice : ĠI Binder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ_ s Ġ= Ġ_ s ĊĠĠĠĠĠĠĠ Ġif Ġ(_ s Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Simple Service Connection ", Ġ" service Ġnot Ġun bind ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġthis ._ s Ġ= Ġ( service Ġas ĠB ). service ĊĠĠĠĠĠĠĠ ĠLog . d (" Simple Service Connection ", Ġ" connect : Ġ$ name ") ĊĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ Ġit . invoke ( this . service ) Ġ} ĊĠĠĠĠĠĠĠ Ġlist . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ s Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠLog . d (" Simple Service Connection ", Ġ" disconnect : Ġ$ name ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġonce Bind ( handler : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Bind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( handler ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠBase Local Binder < T Ġ: ĠService >( val Ġservice : ĠT ) Ġ: ĠB inder () Ċ Ċ inline Ġfun Ġ< T Ġ: ĠService , ĠB Ġ: ĠBase Local Binder < T >> Ġlocal Service Connection () Ġ= ĊĠĠĠ ĠLocal Service Connection < T , ĠB >() Ċ