package Ġnet . ys library . mon ot weet y . notification Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . os . Binder Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . support . annotation . String Def Ċ import Ġandroid . support . v 4 . app . Notification Compat Ċ import Ġandroid . support . v 4 . app . Notification Manager Compat Ċ import Ġandroid . support . v 4 . app . Remote Input Ċ import Ġandroid . support . v 4 . app . Task Stack Builder Ċ import Ġandroid . widget . Toast Ċ import Ġnet . ys library . mon ot weet y . App Ċ import Ġnet . ys library . mon ot weet y . R Ċ import Ġnet . ys library . mon ot weet y . activity . compose . Compose Activity Ċ import Ġnet . ys library . mon ot weet y . activity . main . MainActivity Ċ import Ġnet . ys library . mon ot weet y . analytics . Analytics Ċ import Ġnet . ys library . mon ot weet y . base . Has Component Ċ import Ġnet . ys library . mon ot weet y . base . close Notification Drawer Ċ import Ġnet . ys library . mon ot weet y . data . app info . App Info Ċ import Ġnet . ys library . mon ot weet y . setting . domain . Footer StateManager Ċ import Ġrx . Comp letable Ċ import Ġrx . android . schedul ers . Android Schedulers Ċ import Ġrx . lang . kotlin . addTo Ċ import Ġrx . subscriptions . Composite Subscription Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ class ĠNotification Service Ġ: ĠService (), ĠHas Component < Notification Component > Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠKEY _ NOTIFICATION _ TW E ET _ TEXT Ġ= Ġ" notification _ tweet _ text " ĊĊĠĠĠ Ġconst Ġval ĠACTION Ġ= Ġ" net . ys library . mon ot weet y . notification . Notification Service . Action " ĊĊĠĠĠ Ġconst Ġval ĠKEY _ COMMAND Ġ= Ġ" notification _ command " ĊĊĠĠĠ Ġconst Ġval ĠCOMMAND _ SHOW _ NOTIFICATION Ġ= Ġ" net . ys library . mon ot weet y . notification . Notification Service . Show Notification " ĊĠĠĠ Ġconst Ġval ĠCOMMAND _ CLOSE _ NOTIFICATION Ġ= Ġ" net . ys library . mon ot weet y . notification . Notification Service . Close Notification " ĊĠĠĠ Ġconst Ġval ĠCOMMAND _ DIRECT _ TW E ET Ġ= Ġ" net . ys library . mon ot weet y . notification . Notification Service . Direct Tweet " ĊĠĠĠ Ġconst Ġval ĠCOMMAND _ SHOW _ TW E ET _ DIALOG Ġ= Ġ" net . ys library . mon ot weet y . notification . Notification Service . Show Tweet Dialog " ĊĊĠĠĠ Ġfun Ġcommand Intent (@ Command Type Ġcommand : ĠString ): ĠIntent Ġ{ ĊĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠ Ġintent . action Ġ= ĠACTION ĊĠĠĠĠĠ Ġintent . putExtra ( KEY _ COMMAND , Ġcommand ) ĊĊĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcalling Intent ( context : ĠContext ): ĠIntent Ġ{ ĊĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠNotification Service :: class . java ) ĊĊĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġbinder : ĠI Binder Ġby Ġlazy Ġ{ ĠService Binder () Ġ} ĊĠ Ġprivate Ġval Ġcommand Receiver : ĠNotification Command Receiver Ġby Ġlazy Ġ{ ĠNotification Command Receiver () Ġ} ĊĊĠ Ġ@ set :[ Inject ] ĊĠ Ġvar ĠviewModel Ġby ĠDeleg ates . notNull < Notification Service ViewModel >() ĊĊĠ Ġ@ set :[ Inject ] ĊĠ Ġvar Ġnotification Manager Ġby ĠDeleg ates . notNull < Notification Manager Compat >() ĊĊĠ Ġ@ set :[ Inject ] ĊĠ Ġvar Ġanalytics Ġby ĠDeleg ates . notNull < Analytics >() ĊĊĠ Ġprivate Ġval Ġsubscriptions Ġ= ĠComposite Subscription () ĊĊĊĠ Ġoverride Ġval Ġcomponent : ĠNotification Component Ġby Ġlazy Ġ{ ĊĠĠĠ ĠD agger Notification Component . builder () ĊĠĠĠĠĠĠĠ Ġ. user Component ( App . user Component ( this )) ĊĠĠĠĠĠĠĠ Ġ. notification Service Module ( Notification Service Module ( this )) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠ Ġsuper . onCreate () ĊĠĠĠ ĠTim ber . d (" onCreate ") ĊĊĠĠĠ Ġ// Ġcheck Ġlogin Ġstatus Ġbefore Ġinject Ġdependencies Ġ& Ġinitialize ĊĠĠĠ ĠApp . app Component ( this ). is LoggedIn () ĊĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġlogged In Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( logged In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinject Dependencies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Events () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Command Receiver () ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Self () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. addTo ( subscriptions ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ): ĠI Binder ? Ġ{ ĊĠĠĠ Ġreturn Ġbinder ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠ ĠTim ber . d (" onStart Command : Ġ${ intent ?. toString () }") ĊĊĠĠĠ Ġval Ġnotification Ġ= Ġshow Notification () ĊĠĠĠ Ġstart Foreground ( R . id . tweet _ notification , Ġnotification ) ĊĊĠĠĠ Ġreturn ĠSTART _ STICK Y ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ ĠTim ber . d (" on Destroy ") ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġunregister Receiver ( command Receiver ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġsuppress Ġexception ĊĠĠĠĠĠ Ġ// Ġhttp :// stackoverflow . com / questions / 1 2 4 2 1 4 4 9 / android - broadcast receiver - unregister receiver - issue - not - registered # answer - 3 1 2 7 6 2 0 5 ĊĠĠĠĠĠ Ġ// Ġhttps :// github . com / y shr sm z / om nit weet y - android / issues / 2 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsubscriptions . unsubscribe () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Un bind ( intent : ĠIntent ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġsuper . on Un bind ( intent ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Re bind ( intent : ĠIntent ?) Ġ{ ĊĠĠĠ Ġsuper . on Re bind ( intent ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinject Dependencies () Ġ{ ĊĠĠĠ Ġcomponent . inject ( this ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġregister Command Receiver () Ġ{ ĊĠĠĠ Ġval Ġintent Filter Ġ= ĠIntent Filter () ĊĠĠĠ Ġintent Filter . addAction ( ACTION ) ĊĠĠĠ Ġregister Receiver ( command Receiver , Ġintent Filter ) ĊĠ Ġ} ĊĊĠ Ġfun Ġset Events () Ġ{ ĊĠĠĠ ĠviewModel . error ĊĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġclose Notification Drawer () ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . on Update Notification Requested () ĊĠĠĠĠĠĠĠĠĠ Ġshow Error ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. addTo ( subscriptions ) ĊĊĠĠĠ ĠviewModel . over long Status ĊĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġclose Notification Drawer () ĊĠĠĠĠĠĠĠĠĠ Ġshow Tweet Failed Because Of Length () ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . on Update Notification Requested () ĊĠĠĠĠĠĠĠĠĠ Ġshow Tweet Dialog ( it . status ) ĊĠĠĠĠĠĠĠĠĠ Ġanalytics . tweet From Notification But Too Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. addTo ( subscriptions ) ĊĊĠĠĠ ĠviewModel . close Notification Drawer ĊĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġclose Notification Drawer () Ġ} ĊĠĠĠĠĠĠĠ Ġ. addTo ( subscriptions ) ĊĊĠĠĠ ĠviewModel . update Completed ĊĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . on Update Notification Requested () ĊĠĠĠĠĠĠĠĠĠ Ġshow Tweet Succeeded () ĊĠĠĠĠĠĠĠĠĠ Ġanalytics . tweet From Notification () ĊĠĠĠĠĠĠĠ Ġ}. addTo ( subscriptions ) ĊĊĠĠĠ ĠviewModel . update Notification Requests ĊĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġupdate Notification ( it . footer State , Ġit . timeline App ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. addTo ( subscriptions ) ĊĊĠĠĠ ĠviewModel . stop Notification Service ĊĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġstop Self () Ġ} ĊĠĠĠĠĠĠĠ Ġ. addTo ( subscriptions ) ĊĠ Ġ} ĊĊĠ Ġfun Ġbuild Notification ( footer State : ĠFooter StateManager . State , Ġapp Info : ĠApp Info ): ĠNotification Ġ{ ĊĠĠĠ Ġval Ġdirect Tweet Intent Ġ= ĠPending Intent . get Broadcast ( application Context , Ġ 0 , ĊĠĠĠĠĠĠĠ Ġcommand Intent ( COMMAND _ DIRECT _ TW E ET ), ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĊĠĠĠ Ġval Ġopen Dialog Intent Ġ= ĠPending Intent . getActivity ( application Context , Ġ 1 , ĊĠĠĠĠĠĠĠ ĠCompose Activity . calling Intent ( application Context ), ĠPending Intent . FLAG _ CANCEL _ CURRENT ) ĊĊĠĠĠ Ġval Ġclose Intent Ġ= ĠPending Intent . get Broadcast ( application Context , Ġ 2 , ĊĠĠĠĠĠĠĠ Ġcommand Intent ( COMMAND _ CLOSE _ NOTIFICATION ), ĠPending Intent . FLAG _ CANCEL _ CURRENT ) ĊĊĠĠĠ Ġval Ġopen Setting Intent Ġ= ĠTask Stack Builder . create ( application Context ) ĊĠĠĠĠĠĠĠ Ġ. add Parent Stack ( MainActivity :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. add Next Intent ( MainActivity . calling Intent ( application Context )) ĊĠĠĠĠĠĠĠ Ġ. get Pending Intent ( 3 , ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĊĠĠĠ Ġval Ġremote Input Ġ= ĠRemote Input . Builder ( KEY _ NOTIFICATION _ TW E ET _ TEXT ) ĊĠĠĠĠĠĠĠ Ġ. setLabel ( getString ( R . string . label _ whats _ happ ening )) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġval Ġdirect Tweet Action Ġ= ĠNotification Compat . Action . Builder ( ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ send _ black _ 2 4 dp , ĊĠĠĠĠĠĠĠ ĠgetString ( R . string . label _ tweet _ now ), ĊĠĠĠĠĠĠĠ Ġdirect Tweet Intent ) ĊĠĠĠĠĠĠĠ Ġ. add Remote Input ( remote Input ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġval Ġclose Action Ġ= ĠNotification Compat . Action . Builder ( ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ close _ black _ 2 4 dp , ĊĠĠĠĠĠĠĠ ĠgetString ( R . string . label _ close _ notification ), ĊĠĠĠĠĠĠĠ Ġclose Intent ). build () ĊĊĠĠĠ Ġval Ġsetting Action Ġ= ĠNotification Compat . Action . Builder ( ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ settings _ black _ 2 4 dp , ĊĠĠĠĠĠĠĠ ĠgetString ( R . string . label _ open _ settings ), ĊĠĠĠĠĠĠĠ Ġopen Setting Intent ). build () ĊĊĠĠĠ Ġval Ġfooter State String Ġ= Ġif Ġ( footer State . enabled ) ĊĠĠĠĠĠ ĠgetString ( R . string . label _ notification _ footer _ on , Ġfooter State . text ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠ ĠgetString ( R . string . label _ notification _ footer _ off ) ĊĠĠĠ Ġval Ġin box Style Ġ= ĠNotification Compat . Inbox Style () ĊĠĠĠ Ġin box Style . add Line ( getString ( R . string . label _ notification _ content )) ĊĠĠĠ Ġin box Style . add Line ( footer State String ) ĊĊĠĠĠ Ġval Ġbuilder Ġ= ĠNotification Compat . Builder ( application Context , ĠChannel . EDITOR . id ) ĊĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ notification ) ĊĠĠĠĠĠĠĠ Ġ. setContent Title ( getString ( R . string . app _ name )) ĊĠĠĠĠĠĠĠ Ġ. setContent Text ( getString ( R . string . label _ notification _ content )) ĊĠĠĠĠĠĠĠ Ġ. setContent Intent ( open Dialog Intent ) ĊĠĠĠĠĠĠĠ Ġ. setStyle ( inbox Style ) ĊĠĠĠĠĠĠĠ Ġ. set Show When ( false ) ĊĠĠĠĠĠĠĠ Ġ. set Priority ( Notification Compat . PRIORITY _ MAX ) ĊĊĊĠĠĠ Ġ// Ġadd Ġremote Ġinput Ġif Ġand Ġonly Ġif Ġdevice Ġsdk Ġversion Ġis Ġgreater Ġthan ĠN ou gat ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠ Ġbuilder . addAction ( direct Tweet Action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbuilder . addAction ( setting Action ) ĊĊĠĠĠ Ġif Ġ( app Info . installed ) Ġ{ ĊĠĠĠĠĠ Ġval Ġopen Timeline Intent Ġ= ĠPending Intent . getActivity ( application Context , Ġ 1 , ĊĠĠĠĠĠĠĠĠĠ Ġpackage Manager . get Launch Intent For Package ( app Info . packageName ), ĠPending Intent . FLAG _ CANCEL _ CURRENT ) ĊĊĠĠĠĠĠ Ġval Ġtimeline Action Ġ= ĠNotification Compat . Action . Builder ( ĊĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ view _ headline _ black _ 2 4 dp , ĊĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . label _ open _ timeline ), ĊĠĠĠĠĠĠĠĠĠ Ġopen Timeline Intent ). build () ĊĊĠĠĠĠĠ Ġbuilder . addAction ( timeline Action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbuilder . addAction ( close Action ) ĊĊĠĠĠ Ġreturn Ġbuilder . build () ĊĠ Ġ} ĊĊĠ Ġfun Ġshow Notification (): ĠNotification Ġ{ ĊĠĠĠ ĠTim ber . d (" show Ġnotification ") ĊĊĠĠĠ Ġval Ġfooter State Ġ= ĠviewModel . footer State . to Blocking (). first () ĊĠĠĠ Ġval Ġapp Info Ġ= ĠviewModel . selected Timeline App . to Blocking (). first () ĊĠĠĠ Ġval Ġnot i Ġ= Ġbuild Notification ( footer State , Ġapp Info ) ĊĊĠĠĠ Ġnot i . flags Ġ= ĠNotification Compat . FLAG _ NO _ CLEAR ĊĊĠĠĠ Ġnotification Manager . notify ( R . id . tweet _ notification , Ġnot i ) ĊĊĠĠĠ Ġreturn Ġnot i ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate Notification ( footer State : ĠFooter StateManager . State , Ġapp Info : ĠApp Info ): ĠNotification Ġ{ ĊĠĠĠ ĠTim ber . d (" update Ġnotification ") ĊĊĠĠĠ Ġval Ġnot i Ġ= Ġbuild Notification ( footer State , Ġapp Info ) ĊĊĠĠĠ Ġnot i . flags Ġ= ĠNotification Compat . FLAG _ NO _ CLEAR ĊĊĠĠĠ Ġnotification Manager . notify ( R . id . tweet _ notification , Ġnot i ) ĊĊĠĠĠ Ġreturn Ġnot i ĊĠ Ġ} ĊĊĠ Ġfun Ġshow Tweet Dialog ( status : ĠString ) Ġ{ ĊĠĠĠ ĠstartActivity ( Compose Activity . calling Intent ( application Context , Ġstatus )) ĊĠ Ġ} ĊĊĠ Ġfun Ġshow Tweet Succeeded () Ġ{ ĊĠĠĠ ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠ ĠToast . makeText ( application Context , ĠgetString ( R . string . message _ tweet _ succeeded ), ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ}. subscribe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠ Ġ} ĊĊĠ Ġfun Ġshow Tweet Failed () Ġ{ ĊĠĠĠ ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠ ĠToast . makeText ( application Context , ĠgetString ( R . string . error _ tweet _ failed ), ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ}. subscribe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠ Ġ} ĊĊĠ Ġfun Ġshow Tweet Failed Because Of Length () Ġ{ ĊĠĠĠ ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠ ĠToast . makeText ( application Context , ĠgetString ( R . string . error _ tweet _ failed _ because _ of _ length ), ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ}. subscribe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠ Ġ} ĊĊĠ Ġfun Ġshow Error ( message : ĠString ) Ġ{ ĊĠĠĠ ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠ ĠToast . makeText ( application Context , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ}. subscribe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠ Ġ} ĊĊĠ Ġinner Ġclass ĠService Binder Ġ: ĠB inder () Ġ{ ĊĠĠĠ Ġval Ġservice : ĠNotification Service ĊĠĠĠĠĠ Ġget () Ġ= Ġthis @ Notification Service ĊĠ Ġ} ĊĊĠ Ġ@ Retention ( Annotation Retention . SOURCE ) ĊĠ Ġ@ String Def ( ĊĠĠĠĠĠ ĠCOMMAND _ SHOW _ NOTIFICATION , ĊĠĠĠĠĠ ĠCOMMAND _ CLOSE _ NOTIFICATION , ĊĠĠĠĠĠ ĠCOMMAND _ DIRECT _ TW E ET , ĊĠĠĠĠĠ ĠCOMMAND _ SHOW _ TW E ET _ DIALOG ) ĊĠ Ġannotation Ġclass ĠCommand Type ĊĊĠ Ġinner Ġclass ĠNotification Command Receiver Ġ: ĠBroadcast Receiver () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠ Ġval Ġcommand Ġ= Ġintent ?. getString Extra ( KEY _ COMMAND ) ĊĊĠĠĠĠĠ ĠTim ber . d (" on Receive Ġ- Ġcommand : Ġ$ command ") ĊĊĠĠĠĠĠ Ġ// ĠTODO : Ġcheck Ġlogin Ġstatus Ġfirst ĊĊĠĠĠĠĠ Ġcommand ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠCOMMAND _ CLOSE _ NOTIFICATION Ġ-> ĠviewModel . onClose Notification Command () ĊĠĠĠĠĠĠĠĠĠ ĠCOMMAND _ DIRECT _ TW E ET Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠRemote Input . get Results From Intent ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle ?. getString ( KEY _ NOTIFICATION _ TW E ET _ TEXT )?. let Ġ{ Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Direct Tweet Command ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ