package Ġcom . ray works . service demo Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . os . Message Ċ import Ġandroid . os . Process Ċ import Ġandroid . os . Remote Exception Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ Ċ class ĠBinding Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġ/** ĠThe Ġprimary Ġinterface Ġwe Ġwill Ġbe Ġcalling Ġon Ġthe Ġservice . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġm Service : ĠI Remote Service ? Ġ= Ġnull ĊĠĠĠ Ġ/** ĠAnother Ġinterface Ġwe Ġuse Ġon Ġthe Ġservice . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġm Secondary Service : ĠI Secondary ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġm Kill Button : ĠButton ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġm Callback Text : ĠTextView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Is Bound Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStandard Ġinitialization Ġof Ġthis Ġactivity . Ġ ĠSet Ġup Ġthe ĠUI , Ġthen Ġwait ĊĠĠĠĠ Ġ* Ġfor Ġthe Ġuser Ġto Ġpoke Ġit Ġbefore Ġdoing Ġanything . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . remote _ service _ binding ) ĊĠĠĠĠĠĠĠ Ġ// ĠWatch Ġfor Ġbutton Ġclicks . ĊĠĠĠĠĠĠĠ Ġvar Ġbutton Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . bind ) Ġas ĠButton ĊĠĠĠĠĠĠĠ Ġbutton . setOnClickListener ( m Bind Listener ) ĊĠĠĠĠĠĠĠ Ġbutton Ġ= ĠfindViewById < View >( R . id . unbind ) Ġas ĠButton ĊĠĠĠĠĠĠĠ Ġbutton . setOnClickListener ( m Un bind Listener ) ĊĠĠĠĠĠĠĠ Ġm Kill Button Ġ= ĠfindViewById < View >( R . id . kill ) Ġas ĠButton ĊĠĠĠĠĠĠĠ Ġm Kill Button !!. setOnClickListener ( m Kill Listener ) ĊĠĠĠĠĠĠĠ Ġm Kill Button !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Callback Text Ġ= ĠfindViewById < View >( R . id . callback ) Ġas ĠTextView ĊĠĠĠĠĠĠĠ Ġm Callback Text !!. text Ġ= Ġ" Not Ġattached ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClass Ġfor Ġinteracting Ġwith Ġthe Ġmain Ġinterface Ġof Ġthe Ġservice . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Connection : ĠService Connection Ġ= Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠComponent Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice : ĠI Binder ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġcalled Ġwhen Ġthe Ġconnection Ġwith Ġthe Ġservice Ġhas Ġbeen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġestablished , Ġgiving Ġus Ġthe Ġservice Ġobject Ġwe Ġcan Ġuse Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinteract Ġwith Ġthe Ġservice . Ġ ĠWe Ġare Ġcommunic ating Ġwith Ġour ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġservice Ġthrough Ġan ĠID L Ġinterface , Ġso Ġget Ġa Ġclient - side ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrepresentation Ġof Ġthat Ġfrom Ġthe Ġraw Ġservice Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Service Ġ= ĠI Remote Service . Stub . as Interface ( service ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Kill Button !!. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback Text !!. text Ġ= Ġ" Attached ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġwant Ġto Ġmonitor Ġthe Ġservice Ġfor Ġas Ġlong Ġas Ġwe Ġare ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġconnected Ġto Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Service ?. register Callback ( m Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRemoteException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġthis Ġcase Ġthe Ġservice Ġhas Ġcr ashed Ġbefore Ġwe Ġcould Ġeven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġanything Ġwith Ġit ; Ġwe Ġcan Ġcount Ġon Ġsoon Ġbeing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdisconnected Ġ( and Ġthen Ġre connected Ġif Ġit Ġcan Ġbe Ġrestarted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġthere Ġis Ġno Ġneed Ġto Ġdo Ġanything Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAs Ġpart Ġof Ġthe Ġsample , Ġtell Ġthe Ġuser Ġwhat Ġhappened . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Binding , ĠR . string . remote _ service _ connected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( className : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġcalled Ġwhen Ġthe Ġconnection Ġwith Ġthe Ġservice Ġhas Ġbeen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġunexpected ly Ġdisconnected Ġ-- Ġthat Ġis , Ġits Ġprocess Ġcr ashed . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Service Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Kill Button !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback Text !!. text Ġ= Ġ" Disconnected ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAs Ġpart Ġof Ġthe Ġsample , Ġtell Ġthe Ġuser Ġwhat Ġhappened . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Binding , ĠR . string . remote _ service _ disconnected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClass Ġfor Ġinteracting Ġwith Ġthe Ġsecondary Ġinterface Ġof Ġthe Ġservice . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Secondary Connection : ĠService Connection Ġ= Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠclassName : ĠComponent Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice : ĠI Binder ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConnect ing Ġto Ġa Ġsecondary Ġinterface Ġis Ġthe Ġsame Ġas Ġany ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġother Ġinterface . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Secondary Service Ġ= ĠI Secondary . Stub . as Interface ( service ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Kill Button !!. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( className : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Secondary Service Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Kill Button !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Bind Listener Ġ= ĊĠĠĠĠĠĠĠ ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEst ablish Ġa Ġcouple Ġconnections Ġwith Ġthe Ġservice , Ġbinding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġby Ġinterface Ġnames . Ġ ĠThis Ġallows Ġother Ġapplications Ġto Ġbe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinstalled Ġthat Ġreplace Ġthe Ġremote Ġservice Ġby Ġimplementing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġsame Ġinterface . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Binding , ĠRemote Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠI Remote Service :: class . java . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Service ( intent , Ġm Connection , ĠContext . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠI Secondary :: class . java . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Service ( intent , Ġm Secondary Connection , ĠContext . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Bound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback Text !!. text Ġ= Ġ" Binding ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Un bind Listener Ġ= ĊĠĠĠĠĠĠĠ ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Is Bound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġhave Ġreceived Ġthe Ġservice , Ġand Ġhence Ġregistered Ġwith ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġit , Ġthen Ġnow Ġis Ġthe Ġtime Ġto Ġunregister . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Service Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Service !!. unregister Callback ( m Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRemoteException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThere Ġis Ġnothing Ġspecial Ġwe Ġneed Ġto Ġdo Ġif Ġthe Ġservice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhas Ġcr ashed . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDet ach Ġour Ġexisting Ġconnection . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun bind Service ( m Connection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun bind Service ( m Secondary Connection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Kill Button !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Bound Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback Text !!. text Ġ= Ġ" Un binding ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Kill Listener Ġ= ĊĠĠĠĠĠĠĠ ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġkill Ġthe Ġprocess Ġhosting Ġour Ġservice , Ġwe Ġneed Ġto Ġknow Ġits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPID . Ġ ĠCon ven ient ly Ġour Ġservice Ġhas Ġa Ġcall Ġthat Ġwill Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġus Ġthat Ġinformation . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Secondary Service Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpid Ġ= Ġm Secondary Service !!. pid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat , Ġthough Ġthis ĠAPI Ġallows Ġus Ġto Ġrequest Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġkill Ġany Ġprocess Ġbased Ġon Ġits ĠPID , Ġthe Ġkernel Ġwill ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstill Ġimp ose Ġstandard Ġrestrictions Ġon Ġwhich ĠP IDs Ġyou ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġare Ġactually Ġable Ġto Ġkill . Ġ ĠTypically Ġthis Ġmeans Ġonly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġprocess Ġrunning Ġyour Ġapplication Ġand Ġany Ġadditional ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprocesses Ġcreated Ġby Ġthat Ġapp Ġas Ġshown Ġhere ; Ġpackages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsharing Ġa Ġcommon ĠUID Ġwill Ġalso Ġbe Ġable Ġto Ġkill Ġeach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġother 's Ġprocesses . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProcess . kill Process ( pid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback Text !!. text Ġ= Ġ" K illed Ġservice Ġprocess ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠRemoteException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe cover Ġgrace fully Ġfrom Ġthe Ġprocess Ġhosting Ġthe Ġserver Ġdy ing . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġfor Ġpurposes Ġof Ġthe Ġsample , Ġput Ġup Ġa Ġnotification . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Binding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . remote _ call _ failed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġimplementation Ġis Ġused Ġto Ġreceive Ġcallbacks Ġfrom Ġthe Ġremote ĊĠĠĠĠ Ġ* Ġservice . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Callback : ĠI Remote Service Callback Ġ= Ġobject Ġ: ĠI Remote Service Callback . Stub () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġis Ġcalled Ġby Ġthe Ġremote Ġservice Ġregular ly Ġto Ġtell Ġus Ġabout ĊĠĠĠĠĠĠĠĠ Ġ* Ġnew Ġvalues . Ġ ĠNote Ġthat ĠIPC Ġcalls Ġare Ġdis patched Ġthrough Ġa Ġthread ĊĠĠĠĠĠĠĠĠ Ġ* Ġpool Ġrunning Ġin Ġeach Ġprocess , Ġso Ġthe Ġcode Ġexecuting Ġhere Ġwill ĊĠĠĠĠĠĠĠĠ Ġ* ĠNOT Ġbe Ġrunning Ġin Ġour Ġmain Ġthread Ġlike Ġmost Ġother Ġthings Ġ-- Ġso , ĊĠĠĠĠĠĠĠĠ Ġ* Ġto Ġupdate Ġthe ĠUI , Ġwe Ġneed Ġto Ġuse Ġa ĠHandler Ġto Ġhop Ġover Ġthere . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvalue Changed ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . sendMessage ( m Handler . obtain Message ( BU MP _ MSG , Ġvalue , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠBU MP _ MSG Ġ= Ġ 1 ĊĊĠĠĠ Ġ@ Suppress Lint (" Handler Leak ") ĊĠĠĠ Ġprivate Ġval Ġm Handler : ĠHandler Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠHandler () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( msg . what ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBU MP _ MSG Ġ-> Ġm Callback Text !!. text Ġ= Ġ" Received Ġfrom Ġservice : Ġ" Ġ+ Ġmsg . arg 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . handle Message ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ }