/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcx . ap hex . energ ys ign Ċ Ċ import Ġandroid . bluetooth . Bluetooth Device Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . text . format . DateFormat Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . KeyEvent . ACTION _ DOWN Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . ch ib atch ing . kot pref . K ot pref Ċ import Ġcx . ap hex . energ ys ign . beat link data . Beat Link Data Consumer Server Service Ċ import Ġcx . ap hex . energ ys ign . ext . log D Ċ import Ġcx . ap hex . energ ys ign . ext . observe NonNull Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx java 3 . dis pos ables . Disposable Ċ import Ġkotlinx . android . synt hetic . main . activity _ server .* Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠG att Server Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġ/* ĠLocal ĠUI Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlog Adapter : ĠLog Adapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ server ) ĊĠĠĠĠĠĠĠ ĠK ot pref . init ( application Context ) ĊĊĠĠĠĠĠĠĠ Ġtime Format Ġ= ĠSimpleDateFormat (" HH : mm : ss ") ĊĠĠĠĠĠĠĠ ĠdateFormat Ġ= ĠDate Format . get Medium DateFormat ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġthe Ġlocal ĠUI ĊĠĠĠĠĠĠĠ Ġupdate Time View () ĊĊĠĠĠĠĠĠĠ Ġlog Adapter Ġ= ĠLog Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġlog _ list . adapter Ġ= Ġlog Adapter ĊĊĠĠĠĠĠĠĠ Ġ// ĠDevices Ġwith Ġa Ġdisplay Ġshould Ġnot Ġgo Ġto Ġsleep Ċ // ĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĊĠĠĠĠĠĠĠ ĠIntent ( this , ĠBe at Link Data Consumer Server Service :: class . java ). also Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Service ( intent , Ġconnection , ĠContext . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . current String . observe NonNull ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent _ string . text Ġ= ĠSTRING _ PREFIX Ġ+ Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . bt Ad vertise Status . observe NonNull ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadvert iser _ status . text Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . bt Device Status . observe NonNull ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice _ status . text Ġ= Ġit . bt Device . to Ui String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmt u _ status . text Ġ= Ġ" â ĵ Ĥ ï¸ı ${ it . mt u Ġ?: Ġ" 2 0 ? "} " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠScreen Logger . log Lines ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġlog Line Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Time View () Ġ// TODO Ġme bbe Ġrun Ġon Ġa Ġtimer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Adapter . add ( log Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog _ list . smooth Scroll To Position ( log Adapter . item Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġnow Playing Track Subscription : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġnew Posted User Message Subscription : ĠDis posable ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠDefines Ġcallbacks Ġfor Ġservice Ġbinding , Ġpassed Ġto Ġbind Service () Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġconnection Ġ= Ġobject Ġ: ĠService Connection Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( className : ĠComponent Name , Ġservice : ĠI Binder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 've Ġbound Ġto ĠLocal Service , Ġcast Ġthe ĠI Binder Ġand Ġget ĠLocal Service Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinder Ġ= Ġservice Ġas ĠBe at Link Data Consumer Server Service . Server Binder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnow Playing Track Subscription Ġ= Ġbinder . getService (). now Playing Track ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġtrack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . now Playing ( track ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Posted User Message Subscription Ġ= Ġbinder . getService (). new User Messages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġstr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . new Posted User Message ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( arg 0 : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnow Playing Track Subscription ?. dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch KeyEvent ( event : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey : ĠChar Ġ= Ġevent . key Character Map . get ( event . keyCode , Ġevent . meta State ). to Char () ĊĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog D (" Key press ! Ġ$ key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . keyCode Ġ== ĠKeyEvent . KEYCODE _ ENTER Ġ-> ĠviewModel . submit Keyboard Input () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . keyCode Ġ== ĠKeyEvent . KEYCODE _ DEL Ġ-> ĠviewModel . delete Key () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . keyCode Ġ== ĠKeyEvent . KEYCODE _ SPACE Ġ-> ĠviewModel . process New Keyboard Key (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . is Print ing Key Ġ-> ĠviewModel . process New Keyboard Key ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġtrue Ġ// Ġsuper . dispatch KeyEvent ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠBluetooth Device ?. to Ui String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ?. let Ġ{ Ġ" ðŁĵ ² ${ it . name Ġ?: Ġ"" }${ it }" Ġ} Ġ?: Ġ" ðŁĵ ´ " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtime Format : ĠSimpleDateFormat ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠdateFormat : Ġjava . text . DateFormat ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġgraphical ĠUI Ġon Ġdevices Ġthat Ġsupport Ġit Ġwith Ġthe Ġcurrent Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Time View () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Date Ġ= ĠdateFormat . format ( date ) ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Time Ġ= Ġtime Format . format ( date ) ĊĠĠĠĠĠĠĠ Ġlocal _ time . text Ġ= Ġ"$ display Date ĠðŁ ķ ° Ġ$ display Time " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTRING _ PREFIX : ĠString Ġ= Ġ" ðŁĶ ł " ĊĠĠĠ Ġ} Ċ } Ċ