package Ġcom . gi ants ol . yellow _ box Ċ Ċ import Ġandroid . app .* Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Remote Views Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . content . Context Compat ĊĊ Ċ class ĠMini Box Service Ġ: ĠService (), ĠMini Box . Callback Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ START _ MIN I _ BOX Ġ= Ġ" action . start . mini . box " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ PAUSE _ MIN I _ BOX Ġ= Ġ" action . pause . mini . box " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ RE SU ME _ MIN I _ BOX Ġ= Ġ" action . resume . mini . box " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ STOP _ MIN I _ BOX Ġ= Ġ" action . stop . mini . box " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNOT IFICATION _ ID Ġ= Ġ 1 0 0 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNOT IFICATION _ CHANNEL _ ID Ġ= Ġ" mini box . notification . channel " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ PAUSE _ BUTTON Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ STOP _ BUTTON Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ RE SU ME _ BUTTON Ġ= Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmini Box : ĠMini Box ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotification Manager : ĠNotification Manager ĊĠĠĠ Ġprivate Ġval Ġnotification Builder Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠNotification Compat . Builder ( this , ĠNOT IFICATION _ CHANNEL _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ notification _ mini _ box ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setColor ( Context Compat . getColor ( this , ĠR . color . default Theme Light Color )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( Pending Intent . getActivity ( this , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠMainActivity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ SINGLE _ TOP Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setColor ized ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setStyle ( Notification Compat . Decorated Custom View Style ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set O ngo ing ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġis Termin ating Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĊĠĠĠĠĠĠĠ Ġnotification Manager Ġ= Ġget System Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĊĠĠĠĠĠĠĠ Ġcreate Notification Channel () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Overlay Permission IfNeeded ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġterminate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notification Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠgetString ( R . string . mini _ box _ notification _ channel _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Text Ġ= ĠgetString ( R . string . mini _ box _ notification _ channel _ description ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimportance Ġ= ĠNotification Manager . IMPORT ANCE _ LOW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( NOTIFICATION _ CHANNEL _ ID , Ġname , Ġimportance ). apply Ġ{ Ġdescription Ġ= Ġdescription Text Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġterminate () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Foreground ( true ) ĊĠĠĠĠĠĠĠ Ġstop Self () ĊĠĠĠĠĠĠĠ Ġmini Box ?. destroy () Ġ// Ġshould Ġremove Ġviews Ġfrom Ġwindow ĊĠĠĠĠĠĠĠ Ġmini Box Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġis Termin ating Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Overlay Permission IfNeeded (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M Ġ&& Ġ! can Draw Overlay s ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Settings . ACTION _ MANAGE _ OVER LAY _ PERMISSION , ĠUri . parse (" package :${ packageName } ")). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ ACTIVITY _ CLEAR _ TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġterminate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Draw Overlay s ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Build . VERSION . SDK _ INT Ġ> ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwith ĠAndroid Ġ 8 . 1 Ġ( API Ġ 2 7 ) Ġwas Ġreleased Ġthat Ġit Ġshould Ġcontain Ġthe Ġfix ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . can Draw Overlay s ( context ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġcase Ġversion Ġis Ġbetween Ġ 6 . 0 Ġ( API Ġ 2 3 ) Ġand Ġ 8 . 0 Ġ( API Ġ 2 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Settings . can Draw Overlay s ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn ĠAndroid Ġ 8 . 0 Ġ( API Ġ 2 6 ), Ġwhen Ġuser Ġsuccessfully Ġgrant Ġpermission Ġand Ġreturn Ġto Ġthe Ġapp Ġby Ġpressing Ġback Ġbutton , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmethod Ġcan Draw Overlay s () Ġstill Ġreturn Ġfalse , Ġuntil Ġuser Ġdon 't Ġclose Ġthe Ġapp Ġand Ġopen Ġit Ġagain Ġor Ġjust Ġchoose Ġit Ġin Ġrecent Ġapps Ġdialog . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Draw Overlay s Work Around ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAndroid ĠO ìĹĲìĦľ Ġëĭ¤ë¥¸ Ġìķ ± ĠìľĦ ìĹĲ Ġê·¸ ë¦¬ ê¸° ë¥¼ Ġon ìľ¼ë¡ľ Ġíķĺ ê³ł Ġon Activity Result () ìĹĲìĦľ Ġê ¶ Į íķľ Ġì² ´ íģ¬ ë¥¼ Ġíķł ĠëķĮ ĊĠĠĠĠ Ġ* Ġíĥ ĢìĿ´ ë° į ĠìĿ´ ìĬ Ī ë¡ľ ĠSettings . can Draw Overlay s () ê°Ģ Ġfalse ë¥¼ Ġë¦¬ íĦ´ íķľëĭ¤ . ĊĠĠĠĠ Ġ* Ġê·¸ ìĹĲ ĠëĮĢíķľ Ġíķ´ ê²° ì ± ħ ìľ¼ë¡ľ ĠTYPE _ APPLICATION _ OVER LAY Ġparam ìĿĦ Ġê° ĸ ëĬĶ Ġtransparent Ġview ë¥¼ Ġadd / remove íķĺìĹ¬ ĊĠĠĠĠ Ġ* Ġê ¶ Į íķľ ìĿ´ ĠìŀĪëĬĶ Ġê²½ìļ° ìĹĲëĬĶ Ġtrue , Ġê ¶ Į íķľ ìĿ´ ĠìĹĨ ëĬĶ Ġê²½ìļ° ìĹĲëĬĶ Ġfalse ë¥¼ Ġë¦¬ íĦ´ íķĺ ëıĦë¡Ŀ Ġíķĺ ìĹ¬ ĠOverlay Ġê ¶ Į íķľ ìĿĦ Ġì² ´ íģ¬ íķľëĭ¤ . ĊĠĠĠĠ Ġ* Ġì°¸ ê³ł : Ġhttps :// stackoverflow . com / questions / 4 6 1 7 3 4 6 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcan Draw Overlay s Work Around ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwindow Manager Ġ= Ġcontext . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview ToAdd Ġ= ĠView ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . TYPE _ APPLICATION _ OVER LAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . TYPE _ SYSTEM _ ALERT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠWindow Manager . LayoutParams ( 0 , Ġ 0 , Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH ABLE Ġor ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPixel Format . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ToAdd . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . addView ( view ToAdd , Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . remove View ( view ToAdd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Task Removed ( root Intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Task Removed ( root Intent ) ĊĠĠĠĠĠĠĠ Ġterminate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġterminate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( intent ?. action Ġ== Ġnull Ġ|| Ġis Termin ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSTART _ NOT _ STICK Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( intent . action !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ START _ MIN I _ BOX Ġ-> Ġstart Mini Box () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ PAUSE _ MIN I _ BOX Ġ-> Ġpause Mini Box () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ RE SU ME _ MIN I _ BOX Ġ-> Ġstart Mini Box () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ STOP _ MIN I _ BOX Ġ-> Ġterminate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ NOT _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Mini Box () Ġ{ ĊĠĠĠĠĠĠĠ Ġmini Box ?. destroy () ĊĊĠĠĠĠĠĠĠ Ġstart Foreground ( NOTIFICATION _ ID , Ġcreate Started Notification ()) ĊĠĠĠĠĠĠĠ Ġmini Box Ġ= ĠMini Box ( this , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpause Mini Box () Ġ{ ĊĠĠĠĠĠĠĠ Ġmini Box ?. destroy () ĊĠĠĠĠĠĠĠ Ġnotification Manager . notify ( NOTIFICATION _ ID , Ġcreate Paused Notification ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Started Notification (): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠRemote Views ( packageName , ĠR . layout . mini _ box _ notification ) ĊĠĠĠĠĠĠĠ Ġval Ġpause Pending Intent Ġ= ĠPending Intent . getService ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠREQUEST _ CODE _ PAUSE _ BUTTON , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠMini Box Service :: class . java ). apply Ġ{ Ġaction Ġ= ĠACTION _ PAUSE _ MIN I _ BOX Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ UPDATE _ CURRENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview . setOn Click Pending Intent ( R . id . pause _ or _ resume _ button , Ġpause Pending Intent ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstop Pending Intent Ġ= ĠPending Intent . getService ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠREQUEST _ CODE _ STOP _ BUTTON , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠMini Box Service :: class . java ). apply Ġ{ Ġaction Ġ= ĠACTION _ STOP _ MIN I _ BOX Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ UPDATE _ CURRENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview . setOn Click Pending Intent ( R . id . stop _ button , Ġstop Pending Intent ) ĊĊĠĠĠĠĠĠĠ Ġview . setText View Text ( R . id . title , ĠgetText ( R . string . notification _ title _ started )) ĊĠĠĠĠĠĠĠ Ġview . setText View Text ( R . id . pause _ or _ resume _ button , ĠgetText ( R . string . notification _ pause )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnotification Builder . set Custom ContentView ( view ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Paused Notification (): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠRemote Views ( packageName , ĠR . layout . mini _ box _ notification ) ĊĠĠĠĠĠĠĠ Ġval Ġresume Pending Intent Ġ= ĠPending Intent . getService ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠREQUEST _ CODE _ RE SU ME _ BUTTON , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠMini Box Service :: class . java ). apply Ġ{ Ġaction Ġ= ĠACTION _ RE SU ME _ MIN I _ BOX Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ UPDATE _ CURRENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview . setOn Click Pending Intent ( R . id . pause _ or _ resume _ button , Ġresume Pending Intent ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstop Pending Intent Ġ= ĠPending Intent . getService ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠREQUEST _ CODE _ STOP _ BUTTON , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠMini Box Service :: class . java ). apply Ġ{ Ġaction Ġ= ĠACTION _ STOP _ MIN I _ BOX Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . FLAG _ UPDATE _ CURRENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview . setOn Click Pending Intent ( R . id . stop _ button , Ġstop Pending Intent ) ĊĊĠĠĠĠĠĠĠ Ġview . setText View Text ( R . id . title , ĠgetText ( R . string . notification _ title _ paused )) ĊĠĠĠĠĠĠĠ Ġview . setText View Text ( R . id . pause _ or _ resume _ button , ĠgetText ( R . string . notification _ resume )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnotification Builder . set Custom ContentView ( view ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Configuration Changed ( new Config : ĠConfiguration ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mini Box ?. is Destroyed Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box ?. destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmini Box Ġ= ĠMini Box ( this , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Mini Box () Ġ{ ĊĠĠĠĠĠĠĠ Ġterminate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Word ( word : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠApp MethodCall Handler . deliver Mini Box Word ( this , Ġword ) ĊĠĠĠ Ġ} Ċ }