package Ġcom . vm lo ft . develop . library . im Ċ Ċ import Ġandroid . content . Context Ċ Ċ import Ġcom . hy ph enate . EM CallBack Ċ import Ġcom . hy ph enate . chat . EM Client Ċ import Ġcom . hy ph enate . chat . EM Options Ċ Ċ import Ġcom . vm lo ft . develop . library . common . common . C Error Ċ import Ġcom . vm lo ft . develop . library . common . common . C SP Manager Ċ import Ġcom . vm lo ft . develop . library . common . request . R Result Ċ import Ġcom . vm lo ft . develop . library . im . call . IM Call Manager Ċ import Ġcom . vm lo ft . develop . library . im . chat . IM Chat Manager Ċ import Ġcom . vm lo ft . develop . library . im . common . IM Exception Manager Ċ import Ġcom . vm lo ft . develop . library . im . common . IM SP Manager Ċ import Ġcom . vm lo ft . develop . library . im . connect . IM ConnectionManager Ċ import Ġcom . vm lo ft . develop . library . tools . utils . VM System Ċ Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ import Ġjava . util . concurrent . Count DownLatch Ċ Ċ /** Ċ Ġ* ĠCreate Ġby Ġl z an 1 3 Ġon Ġ 2 0 1 9 / 5 / 2 0 Ġ 2 2 : 2 2 Ċ Ġ* Ċ Ġ* Ġ åħ¥ åı£ ç±» Ċ Ġ*/ Ċ object ĠIM Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġim Listener : ĠI IM Listener ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä¸Ĭä¸ĭ æĸĩ å¯¹è±¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġlateinit Ġvar Ġim Context : ĠContext ĊĊĠĠĠ Ġ// Ġ è®°å½ķ å·²ç»ı åĪĿå§ĭåĮĸ ĊĠĠĠ Ġprivate Ġvar Ġis Init Ġ= Ġfalse ĊĊĠĠĠ Ġ// Ġå½ĵåīį çĻ»å½ķ çļĦ èĩªå·± ĠId ĊĠĠĠ Ġprivate Ġvar Ġself Id : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinit ( context : ĠContext , Ġlistener : ĠI IM Listener ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġim Context Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġim Listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ å½ĵåīį è¿Ľç¨ĭ Ġid Ġ å¹¶ åıĸå¾Ĺ è¿Ľç¨ĭ åĲį ĊĠĠĠĠĠĠĠ Ġval Ġprocess Name : ĠString ? Ġ= ĠVM System . process Name ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġå¦Ĥæŀľ app åĲ¯çĶ¨ äºĨ è¿ľç¨ĭ çļĦ service ï¼Į æŃ¤ application : onCreate ä¼ļ è¢« è°ĥçĶ¨ 2 æ¬¡ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ä¸ºäºĨ éĺ² æŃ¢ çİ¯ ä¿¡ SDK è¢« åĪĿå§ĭåĮĸ 2 æ¬¡ ï¼Į åĬł æŃ¤ åĪ¤æĸŃ ä¼ļ ä¿Ŀè¯ģ SDK è¢« åĪĿå§ĭåĮĸ 1 æ¬¡ ĊĠĠĠĠĠĠĠĠ Ġ* Ġé»ĺè®¤ çļĦ app ä¼ļ åľ¨ ä»¥ åĮħ åĲį ä¸º é»ĺè®¤ çļĦ process Ġname ä¸ĭ è¿Ĳè¡Į ï¼Į å¦Ĥæŀľ æŁ¥ åĪ°çļĦ process Ġname ä¸įæĺ¯ app çļĦ process Ġname å°± ç«ĭ åį³ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( process Name Ġ== Ġnull Ġ|| Ġ! process Name . equals ( context . packageName , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĪĻ æŃ¤ Ġapplication Ġæĺ¯ è¢« ĠService Ġ è°ĥçĶ¨ çļĦ ï¼Į çĽ´æİ¥ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Init ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Init ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ è°ĥçĶ¨ åĪĿå§ĭåĮĸ æĸ¹æ³ķ åĪĿå§ĭåĮĸ sdk ĊĠĠĠĠĠĠĠ ĠEM Client . getInstance (). init ( context , Ġoption Config ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® å¼ĢåĲ¯ Ġdebug Ġæ¨¡ å¼ı ĊĠĠĠĠĠĠĠ ĠEM Client . getInstance (). set Debug Mode ( Build Config . DEBUG ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIM Ġ åĨħéĥ¨ çĽ¸åħ³ ç®¡çĲĨ ç±»çļĦ åĪĿå§ĭåĮĸ ĊĠĠĠĠĠĠĠ ĠIM ConnectionManager . init () ĊĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ èģ Ĭ å¤© ç®¡çĲĨ ç±» ĊĠĠĠĠĠĠĠ ĠIM Chat Manager . init () ĊĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ éĢļ è¯Ŀ ç®¡çĲĨ ç±» ĊĠĠĠĠĠĠĠ ĠIM Call Manager . init () ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ å®ĮæĪĲ ĊĠĠĠĠĠĠĠ Ġis Init Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġis Init ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè¿ĶåĽŀ æĺ¯åĲ¦ æĪĲåĬŁ çĻ»å½ķ è¿ĩ ï¼Į åĲĮæĹ¶ æ²¡æľī è°ĥçĶ¨ Ġsign Out () ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis SignIn (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEM Client . getInstance (). is LoggedIn Before ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĻ»å½ķ ĠIM ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġsign In ( id : ĠString , Ġpassword : ĠString ) Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsign Out ( false ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠR Result < String > Ġ= ĠIM Exception Manager . dispose Error ( C Error . unknown , Ġ"") ĊĠĠĠĠĠĠĠ Ġ// Ġ éĺ» å¡ŀ çº¿ å±Ĥ å°Ĩ Ġcallback Ġ è½¬ ä¸º åĲĮæŃ¥ ĊĠĠĠĠĠĠĠ Ġval Ġcount DownLatch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ ĠEM Client . getInstance (). login ( id , Ġpassword , Ġobject Ġ: ĠEM CallBack Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIM SP Manager . put Self Id ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĽłä¸º è¿Ļä¸ª å¿ħé¡» è¦ģ çĻ»å½ķ ä¹ĭåĲİ æīįèĥ½ åĬłè½½ ï¼Į æīĢä»¥ è¿ĻéĩĮ ä¹Ł åĬłè½½ ä¸Ģæ¬¡ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEM Client . getInstance (). chat Manager (). load All Con versations () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠR Result . Success (" IM çĻ»å½ķ æĪĲåĬŁ ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è§£ éĻ¤ éĶģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( code : ĠInt , Ġerror : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠIM Exception Manager . dispose Error ( code , Ġerror ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è§£ éĻ¤ éĶģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress ( progress : ĠInt , Ġstatus : ĠString ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ çŃīå¾ħ åĽŀè°ĥ ç»ĵæĿŁ ĊĠĠĠĠĠĠĠ Ġcount DownLatch . await () ĊĠĠĠĠĠĠĠ Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢĢåĩº çĻ»å½ķ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġun build Ġæĺ¯åĲ¦ è§£ ç»ĳ æİ¨ éĢģ ĠToken ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsign Out ( un build : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ éĢĢåĩº åīį æ£ĢæŁ¥ ä¸Ģä¸ĭ æĺ¯åĲ¦ å·²ç»ı æĪĲåĬŁ çĻ»å½ķ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is SignIn ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠIM SP Manager . put Self Id ("") ĊĠĠĠĠĠĠĠ ĠEM Client . getInstance (). logout ( un build ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIM Ġéħįç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġoption Config (): ĠEM Options Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSDK åĪĿå§ĭåĮĸ çļĦ ä¸ĢäºĽ éħįç½® ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åħ³äºİ ĠEM Options Ġåı¯ä»¥ åıĤèĢĥ å®ĺæĸ¹ çļĦ ĠAPI Ġ æĸĩæ¡£ ĊĠĠĠĠĠĠĠĠ Ġ* Ġhttp :// www . ease mob . com / apid oc / android / chat 3 . 0 / class com _ 1 _ 1 hy ph enate _ 1 _ 1 chat _ 1 _ 1 _ e _ m _ options . html ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠEM Options () ĊĊĠĠĠĠĠĠĠ Ġ// Ġæĺ¯åĲ¦ åĲ¯åĬ¨ ĠDNS Ġ ä¿¡æģ¯ éħįç½® ï¼Į å¦Ĥæŀľ æĺ¯ ç§ģ æľī åĮĸ éĥ¨ç½² ï¼Į è¿ĻéĩĮ è¦ģ è®¾ç½®ä¸º Ġfalse ĊĠĠĠĠĠĠĠ Ġoptions . enable DNS Config ( true ) ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® ç§ģ æľī åĮĸ ĠIM Ġ åľ°åĿĢ ĊĠĠĠĠĠĠĠ Ġ// options . set IM Server (" im 1 . ease mob . com "); ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® ç§ģ æľī åĮĸ ĠIM Ġ ç«¯åı£ åı· ĊĠĠĠĠĠĠĠ Ġ// options . set Im Port ( 4 4 3 ); ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® ç§ģ æľī åĮĸ ĠRest Ġ åľ°åĿĢ + ç«¯åı£ åı· ĊĠĠĠĠĠĠĠ Ġ// options . set Rest Server (" a 1 . ease mob . com : 8 0 "); ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® App key ï¼Į å¦Ĥæŀľ éħįç½®æĸĩä»¶ å·²ç»ı éħįç½® ï¼Į è¿ĻéĩĮ åı¯ä»¥ ä¸į çĶ¨ è®¾ç½® ĊĠĠĠĠĠĠĠ Ġ// options . set App Key (" yun sh ang zhi j ia # yun y ue "); ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® åıª ä½¿çĶ¨ Ġhttps ĊĠĠĠĠĠĠĠ Ġoptions . using Https Only Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® èĩªåĬ¨ çĻ»å½ķ ĊĠĠĠĠĠĠĠ Ġoptions . auto Login Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æĺ¯åĲ¦ æĮīçħ§ æľįåĬ¡åĻ¨ æĹ¶éĹ´ æİĴåºı ï¼Į false æĮīçħ§ æľ¬åľ° æĹ¶éĹ´ æİĴåºı ï¼Į é»ĺè®¤ Ġtrue ĊĠĠĠĠĠĠĠ Ġoptions . is Sort Message By Server Time Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æĺ¯åĲ¦ éľĢè¦ģ åıĳéĢģ å·² è¯» åĽŀ æī§ ĊĠĠĠĠĠĠĠ Ġoptions . require Ack Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æĺ¯åĲ¦ éľĢè¦ģ åıĳéĢģ åĽŀ æī§ ĊĠĠĠĠĠĠĠ Ġoptions . require Delivery Ack Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġ æĶ¶ åĪ° å¥½ åıĭ çĶ³è¯· æĺ¯åĲ¦ èĩªåĬ¨ åĲĮ æĦı ï¼Į å¦Ĥæŀľ æĺ¯ èĩªåĬ¨ åĲĮ æĦı å°± ä¸įä¼ļ æĶ¶ åĪ° å¥½ åıĭ è¯·æ±Ĥ çļĦ åĽŀè°ĥ ï¼Į åĽłä¸º sdk ä¼ļ èĩªåĬ¨ å¤ĦçĲĨ ï¼Į é»ĺè®¤ä¸º true ĊĠĠĠĠĠĠĠ Ġoptions . accept Invitation Always Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġæĺ¯åĲ¦ èĩªåĬ¨ å°Ĩ æ¶Īæģ¯ éĻĦ ä»¶ ä¸Ĭä¼ł åĪ° çİ¯ ä¿¡ æľįåĬ¡åĻ¨ ï¼Į é»ĺè®¤ä¸º True æĺ¯ ä½¿çĶ¨ çİ¯ ä¿¡ æľįåĬ¡åĻ¨ ä¸Ĭä¼ł ä¸ĭè½½ ï¼Į å¦Ĥæŀľ è®¾ ä¸º Ġfalse ï¼Į éľĢè¦ģ å¼Ģåıĳ èĢħ èĩªå·± å¤ĦçĲĨ éĻĦ ä»¶ æ¶Īæģ¯ çļĦ ä¸Ĭä¼ł åĴĮ ä¸ĭè½½ ĊĠĠĠĠĠĠĠ Ġoptions . auto Transfer Message Attachments Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġæĺ¯åĲ¦ èĩªåĬ¨ ä¸ĭè½½ éĻĦ ä»¶ ç±» æ¶Īæģ¯ çļĦ ç¼© çķ¥ åĽ¾ çŃī ï¼Į é»ĺè®¤ä¸º Ġtrue Ġ è¿ĻéĩĮ åĴĮ ä¸Ĭ è¾¹ è¿Ļä¸ª åıĤæķ° çĽ¸åħ³ èģĶ ĊĠĠĠĠĠĠĠ Ġoptions . setAuto Download Thumbnail ( true ) ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æĺ¯åĲ¦ èĩªåĬ¨ æİ¥æĶ¶ åĬł ç¾¤ éĤ Ģ è¯· ï¼Į å¦Ĥæŀľ è®¾ç½® äºĨ å½ĵ æĶ¶ åĪ° ç¾¤ éĤ Ģ è¯· ä¼ļ èĩªåĬ¨ åĲĮ æĦı åĬłåħ¥ ĊĠĠĠĠĠĠĠ Ġoptions . is Auto Accept Group Invitation Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® ï¼Ī ä¸» åĬ¨ æĪĸ è¢« åĬ¨ ï¼ī éĢĢåĩº ç¾¤ ç»Ħ æĹ¶ ï¼Į æĺ¯åĲ¦ åĪłéĻ¤ ç¾¤ èģ Ĭ èģ Ĭ å¤© è®°å½ķ ĊĠĠĠĠĠĠĠ Ġoptions . is Delete Messages As Exit Group Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æĺ¯åĲ¦ åħģè®¸ èģ Ĭ å¤© å®¤ çļĦ Owner Ġ ç¦» å¼Ģ å¹¶ åĪłéĻ¤ èģ Ĭ å¤© å®¤ çļĦ ä¼ļ è¯Ŀ ĊĠĠĠĠĠĠĠ Ġoptions . allow Chat room Owner Leave ( true ) ĊĠĠĠĠĠĠĠ Ġreturn Ġoptions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å½ĵåīį çĻ»å½ķ IM çļĦ çĶ¨æĪ· Ġid ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Self Id (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġself Id Ġ?: ĠIM SP Manager . get Self Id () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ---------------------------------------------------------------- ----- ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢļçŁ¥ å¼Ģ åħ³ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Notify : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠC SP Manager . is Notify Msg Switch () ĊĠĠĠĠĠĠĠ Ġset ( open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC SP Manager . set Notify Msg Switch ( open ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢļçŁ¥ è¯¦æĥħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Notify Detail : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠC SP Manager . is Notify Msg Detail Switch () ĊĠĠĠĠĠĠĠ Ġset ( open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC SP Manager . set Notify Msg Detail Switch ( open ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ---------------------------------------------------------------- ----- ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åľĨ å½¢ å¤´ åĥı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Circle Avatar : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠIM SP Manager . is Circle Avatar () ĊĠĠĠĠĠĠĠ Ġset ( open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIM SP Manager . put Circle Avatar ( open ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æī ¬ å£° åĻ¨ æĴŃæĶ¾ è¯Ń éŁ³ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Speaker Voice : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠIM SP Manager . is Speaker Voice () ĊĠĠĠĠĠĠĠ Ġset ( speaker ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIM SP Manager . put Speaker Voice ( speaker ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ