package Ġtech . taken oko . screen mirror . service Ċ Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ 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 .* Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . widget . Remote Views Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġtech . taken oko . screen mirror . MainActivity Ċ import Ġtech . taken oko . screen mirror . R Ċ import Ġtech . taken oko . screen mirror . use case . Mirror ing Use case Ċ import Ġtech . taken oko . screen mirror . utils . M Log ĊĊ Ċ class ĠM irror ing Service Ġ: ĠService () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġmirror ing Use case : ĠM irror ing Use case ĊĠĠĠ Ġlateinit Ġvar Ġremote Views : ĠRemote Views ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ ĠM Log . info ( TAG , Ġ" on Bind ") ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ ĠM Log . info ( TAG , Ġ" onStart Command ") ĊĊĠĠĠĠĠĠĠ Ġif ( CLOSE _ BTN _ INT ENT Ġ== Ġintent ?. action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Self () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSTART _ NOT _ STICK Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( OPEN _ BTN _ INT ENT Ġ== Ġintent ?. action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( application Context , ĠMainActivity :: class . java ). set Flags ( FLAG _ ACTIVITY _ SINGLE _ TOP Ġor ĠFLAG _ ACTIVITY _ NEW _ TASK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSTART _ NOT _ STICK Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ?). also Ġ{ Ġmanager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( manager ?. get Notification Channel ( CHANNEL _ ID ) Ġ== Ġnull ) Ġmanager ?. create Notification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Channel ( CHANNEL _ ID , ĠCHAN NEL _ NAME , ĠNotification Manager . IMPORT ANCE _ HIGH ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= ĠCHAN NEL _ DESC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġstart Foreground ( ID , ĠNotification Compat . Builder ( this , ĠCHAN NEL _ ID ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Views Ġ= Ġthis @ Mirror ing Service . create Notification View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠContext Compat . getColor ( application Context , ĠR . color . color Notification Back ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Color ized ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Small Icon ( R . mip map . ic _ launcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Style ( Notification Compat . Decorated Custom View Style ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Custom ContentView ( remote Views ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Custom Big ContentView ( remote Views ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Title ( NOTIFY _ TITLE ) ĊĠĠĠĠĠĠĠ Ġ}. build ()) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ NOT _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ ĠM Log . info ( TAG , Ġ" onCreate ") ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġmirror ing Use case Ġ= ĠM irror ing Use case ( this ) ĊĠĠĠĠĠĠĠ Ġmirror ing Use case . start () ĊĠĠĠĠĠĠĠ Ġregister Receiver ( config Change Broadcast Rec iver , ĠIntent Filter (" android . intent . action . CONFIGURATION _ CHANGED ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠM Log . info ( TAG , Ġ" on Destroy ") ĊĠĠĠĠĠĠĠ Ġunregister Receiver ( config Change Broadcast Rec iver ) ĊĠĠĠĠĠĠĠ Ġmirror ing Use case . stop () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notification View (): ĠRemote Views Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRemote Views ( packageName , ĠR . layout . notification _ layout ) Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClick Pending Intent ( R . id . notification Close Button , Ġstop Pending Intent ( this @ Mirror ing Service )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClick Pending Intent ( R . id . notification Layout , Ġopen Pending Intent ( this @ Mirror ing Service )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconfig Change Broadcast Rec iver Ġ= Ġobject : ĠBroadcast Receiver (){ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM Log . info ( TAG , Ġ" on Receive ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmirror ing Use case . restart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG : ĠString Ġ= ĠM irror ing Service :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCHAN NEL _ ID Ġ= Ġ" mirror Foreground " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCHAN NEL _ NAME Ġ= Ġ" ãĥŁ ãĥ© ãĥ¼ãĥ ª ãĥ³ãĤ° " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCHAN NEL _ DESC Ġ= Ġ" éĮ² çĶ» ãģĻãĤĭ ãĤĪ " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOT IFY _ TITLE Ġ= Ġ" Screen Mirror " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOT IFY _ TEXT Ġ= Ġ" ãĥŁ ãĥ© ãĥ¼ãĥ ª ãĥ³ãĤ° ä¸Ń ãģł ãĤĪ " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCLOSE _ BTN _ INT ENT Ġ= Ġ" tech . taken oko . screen mirror . service . Mirror ing Service . CLOSE _ BTN _ INT ENT " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOPEN _ BTN _ INT ENT Ġ= Ġ" tech . taken oko . screen mirror . service . Mirror ing Service . OPEN _ BTN _ INT ENT " ĊĊĠĠĠĠĠĠĠ Ġval Ġstart : Ġ( Context ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( it , ĠM irror ing Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 6 ) Ġit . start Service ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġit . start Service ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstop : Ġ( Context ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( it , ĠM irror ing Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . stop Service ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstop Pending Intent : Ġ( Context ) Ġ-> Ġ ĠPending Intent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( it , ĠM irror ing Service :: class . java ). apply Ġ{ Ġaction Ġ= ĠCLOSE _ BTN _ INT ENT Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . getService ( it , Ġ 0 , Ġintent , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġopen Pending Intent : Ġ( Context ) Ġ-> Ġ ĠPending Intent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( it , ĠM irror ing Service :: class . java ). apply Ġ{ Ġaction Ġ= ĠOPEN _ BTN _ INT ENT Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . getService ( it , Ġ 0 , Ġintent , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }