package Ġcom . amazonaws . iv s . basic broadcast . activities Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Notification Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . Port er D uff Color Filter Ċ import Ġandroid . media . projection . Media Projection Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . method . Hide Returns Transformation Method Ċ import Ġandroid . text . method . Password Transformation Method Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . amazonaws . iv s . basic broadcast . App Ċ import Ġcom . amazonaws . iv s . basic broadcast . R Ċ import Ġcom . amazonaws . iv s . basic broadcast . adapters . Device Spinner Adapter Ċ import Ġcom . amazonaws . iv s . basic broadcast . common .* Ċ import Ġcom . amazonaws . iv s . basic broadcast . common . Configuration . DEFAULT _ DEVICE _ POSITION Ċ import Ġcom . amazonaws . iv s . basic broadcast . data . Auth Data Item Ċ import Ġcom . amazonaws . iv s . basic broadcast . data . Local Cache Provider Ċ import Ġcom . amazonaws . iv s . basic broadcast . databinding . Activity Main Binding Ċ import Ġcom . amazonaws . iv s . basic broadcast . viewModel . Main ViewModel Ċ import Ġcom . amazonaws . iv s . broadcast . Bluetooth Ċ import Ġcom . amazonaws . iv s . broadcast . Broadcast Session Ċ import Ġcom . amazonaws . iv s . broadcast . Device Ċ import Ġcom . amazonaws . iv s . broadcast . Image Preview View Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġjavax . inject . Inject Ċ Ċ private Ġconst Ġval ĠSCREEN _ CAPTURE _ REQUEST _ ID Ġ= Ġ 0 x 1 0 0 0 Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Amazon IV S " Ċ Ċ class ĠMainActivity Ġ: ĠPermission Activity () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġcache Provider : ĠLocal Cache Provider ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain ViewModel Ġby Ġlazy ViewModel ({ Ġapplication Ġas ĠApp Ġ}, Ġ{ ĠMain ViewModel ( application ) Ġ}) ĊĊĠĠĠ Ġprivate Ġvar Ġoptions Visible Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġpermissions Ask ed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcapture Started Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Mut ed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Key Hidden Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġvar Ġimage Preview View : ĠImage Preview View ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġcamera Adapter Ġby Ġlazy Ġ{ ĠDevice Spinner Adapter ( this , Ġget Camera Items ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġmicro phone Adapter Ġby Ġlazy Ġ{ ĠDevice Spinner Adapter ( this , Ġget Micro phone Items ()) Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" On ĠCreate ") ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠApp . component . inject ( this ) ĊĠĠĠĠĠĠĠ ĠBluetooth . start Bluetooth S co ( application Context ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . preview . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Texture Ġview Ġchanged : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . preview View . addView ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Preview View Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . clear Preview . observe ( this , Ġ{ Ġclear Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Texture Ġview Ġcleared ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clear ) Ġbinding . preview View . removeAll Views () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . indicator Color . observe ( this , Ġ{ Ġcolor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Indicator Ġcolor Ġchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . broadcast Option View . status Indicator . background . color Filter Ġ= ĠPort er D uff Color Filter ( color , ĠPort er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . cam eras Changed . observe ( this , Ġ{ Ġchanged Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Available Ġcamera Ġsize Ġchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Adapter . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Adapter . addAll ( get Camera Items ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . micro phones Changed . observe ( this , Ġ{ Ġchanged Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Available Ġmicro phone Ġsize Ġchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmicro phone Adapter . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmicro phone Adapter . addAll ( get Micro phone Items ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . error H app ened . observe ( this , Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Error Ġdialog Ġis Ġshown : Ġ${ error . first }, Ġ${ error . second }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog ( error . first , Ġerror . second ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . disconnect H app ened . observe ( this , Ġ{ Ġdisconnected Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Disconnect Ġhappened ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( disconnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . paused ) Ġstop Session () Ġelse Ġend Session () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . select Default . observe ( this , Ġ{ Ġtype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Default Ġdevice Ġ$ type Ġchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠDevice . Descriptor . DeviceType . MICRO PHONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . micro phone Spinner . setSelection ( DEFAULT _ DEVICE _ POSITION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠDevice . Descriptor . DeviceType . CAMERA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . camera Spinner . setSelection ( DEFAULT _ DEVICE _ POSITION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġinit Ui () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" On Ġactivity Ġresult : Ġ$ request Code , Ġ$ result Code ") ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠSCREEN _ CAPTURE _ REQUEST _ ID Ġ&& ĠActivity . RESULT _ OK Ġ== ĠresultCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Started Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Session Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnotification : ĠNotification ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Ġ= ĠviewModel . create Notification ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . start Screen Capture ( data , Ġnotification ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġbinding . option View . ed t Stream . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġendpoint Ġ= Ġbinding . option View . ed t Endpoint . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Session ( endpoint , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . option View . root . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . broadcast Option View . root . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Session () ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" On ĠResume ") ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ( permissions Ask ed ) Ġpermissions Ask ed Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" On ĠDestroy ") ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġend Session () ĊĠĠĠĠĠĠĠ ĠBluetooth . stop Bluetooth S co ( application Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" On ĠPause ") ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . screen Capture Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" On ĠPause Ġsession Ġended ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Session () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Auth Data () ĊĠĠĠĠĠĠĠ Ġbinding . version . text Ġ= ĠBroadcast Session . getVersion () ĊĊĠĠĠĠĠĠĠ Ġbinding . broadcast Option View . btn End . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . paused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Session () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . session ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . option View . btn Start . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġbinding . option View . ed t Stream . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġendpoint Ġ= Ġbinding . option View . ed t Endpoint . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key . isNotEmpty () Ġ&& Ġendpoint . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Auth Data ( key , Ġendpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! are Permissions Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġask For Permissions Ġ{ Ġsuccess Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Session And Start ( endpoint , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Ask ed Ġ= Ġsuccess ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Session And Start ( endpoint , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . error _ some _ fields _ are _ empty ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . option View . btn Show hide Key . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠButton ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . toggle Visibility ( binding . option View . ed t Stream , Ġis Key Hidden ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Key Hidden Ġ= Ġ! is Key Hidden ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . main Root . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchange Ġ= Ġ! options Visible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . option Root . change Visibility ( change ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . device View . change Visibility ( change ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Visible Ġ= Ġchange ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . mute Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Mute (! is Mut ed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . camera Spinner . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġcamera Adapter ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Selection Changed Ġ{ Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . camera Selection Changed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . micro phone Spinner . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġmicro phone Adapter ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Selection Changed Ġ{ Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . micro phone Selection Changed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . option View . btn Screen Capture . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . screen Capture Mode ( isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Session ( on Ready : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Session Ġstarted . ĠCapture Ġstarted : Ġ$ capture Started ") ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . screen Capture Enabled Ġ&& Ġ! capture Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Screen Capture () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . create Session Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Ready () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . option View . root . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . broadcast Option View . root . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Auth Data ( key : ĠString , Ġendpoint : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Save Ġbroadcast Ġauth Ġdata ") ĊĠĠĠĠĠĠĠ Ġlaunch IO Ġ{ Ġcache Provider . auth Dao (). insert ( Auth Data Item ( key Ġ= Ġkey , Ġendpoint Ġ= Ġendpoint )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Auth Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Collect ing Ġsaved Ġauth Ġdata ") ĊĠĠĠĠĠĠĠ Ġlaunch Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Provider . auth Dao (). get Auth (). collect Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . option View . ed t Stream . setText ( data ?. key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . option View . ed t Endpoint . setText ( data ?. endpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Session ( endpoint : ĠString , Ġkey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Starting Ġsession ") ĊĠĠĠĠĠĠĠ ĠviewModel . session ?. start ( endpoint , Ġkey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Session And Start ( endpoint : ĠString , Ġkey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Session Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Session ( endpoint , Ġkey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Session () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Session Ġstopped ") ĊĠĠĠĠĠĠĠ Ġcapture Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠviewModel . session ?. stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġend Session () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Session Ġended ") ĊĠĠĠĠĠĠĠ Ġcapture Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . preview View . removeAll Views () ĊĠĠĠĠĠĠĠ Ġimage Preview View Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠviewModel . session ?. release () ĊĠĠĠĠĠĠĠ ĠviewModel . session Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreset Ui () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . broadcast Option View . root . hide () ĊĠĠĠĠĠĠĠ Ġbinding . option View . root . show () ĊĠĠĠĠĠĠĠ Ġtoggle Mute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Mute ( should Mute : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( should Mute ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . mute Button . background Ġ= ĠContext Compat . get Drawable ( application Context , ĠR . drawable . ic _ baseline _ volume _ off _ 2 4 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . mute Button . background Ġ= ĠContext Compat . get Drawable ( application Context , ĠR . drawable . ic _ baseline _ volume _ up _ 2 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . mute ( should Mute ) ĊĠĠĠĠĠĠĠ Ġis Mut ed Ġ= Ġshould Mute ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Screen Capture () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( application Context . getSystem Service ( MEDIA _ PRO JECTION _ SERVICE ) Ġas ? ĠMedia Projection Manager )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity IfNeeded ( create Screen Capture Intent (), ĠSCREEN _ CAPTURE _ REQUEST _ ID ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ