// ĠCopyright Ġ 2 0 2 1 ĠGoogle ĠLLC Ċ // Ċ // Ġ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 Ġcom . google . android . libraries . car . trust agent . ble message stream Ċ Ċ import Ġandroid . bluetooth . Bluetooth Device Ċ import Ġcom . google . android . libraries . car . trust agent . util . log d Ċ import Ġcom . google . android . libraries . car . trust agent . util . lo ge Ċ import Ġcom . google . android . libraries . car . trust agent . util . log i Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ Ċ /** Ċ Ġ* ĠA Ġgeneric Ġclass Ġwhich Ġmanages Ġcommon Ġlog ics Ġshared Ġamong Ġdifferent Ġconnection Ġmanagers Ġe . g . Ċ Ġ* Ġcallbacks Ġregistration . Ċ Ġ*/ Ċ abstract Ġclass ĠBluetooth ConnectionManager () Ġ{ ĊĠ Ġinternal Ġopen Ġval Ġconnection Callbacks Ġ= Ġmutable ListOf < Connection Callback >() ĊĠ Ġinternal Ġopen Ġval Ġmessage Callbacks Ġ= Ġmutable ListOf < Message Callback >() ĊĊĠ Ġabstract Ġval Ġmax Write Size : ĠInt ĊĠ Ġabstract Ġval Ġbluetooth Device : ĠBluetooth Device ĊĊĠ Ġabstract Ġval Ġdevice Name : ĠString ? ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠConnect s Ġto Ġremote Ġdevice . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠA Ġsuccessful Ġconnection Ġshould Ġinvoke Ġ[ Connection Callback . on Connected ]. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠConnection Ġenables Ġ[ sendMessage ]. ĊĠĠ Ġ*/ ĊĠ Ġabstract Ġfun Ġconnect () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠConnect s Ġto Ġremote Ġdevice . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThis Ġmethod Ġfunctions Ġthe Ġsame Ġas Ġ[ connect ] Ġexcept Ġit Ġreturns Ġ` true ` Ġif Ġconnection Ġwas ĊĠĠ Ġ* Ġestablished , Ġinstead Ġof Ġ[ Connection Callback ]. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠUse Ġthis Ġmethod , Ġrather Ġthan Ġ[ connect ], Ġif Ġyou Ġare Ġnot Ġinterested Ġin Ġthe Ġdis connection ĊĠĠ Ġ* Ġcallback , Ġor Ġwill Ġregister Ġa Ġcallback Ġseparately . ĊĠĠ Ġ*/ ĊĠ Ġopen Ġsuspend Ġfun Ġconnect To Device (): ĠBoolean Ġ= ĊĠĠĠ Ġsuspend Coroutine < Boolean > Ġ{ Ġcont Ġ-> ĊĠĠĠĠĠ Ġval Ġcallback Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠConnection Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Connected () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog d ( TAG , Ġ" Device Ġconnected !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Connection Callback ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Connection Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo ge ( TAG , Ġ" Bluetooth Ġcould Ġnot Ġestablish Ġconnection .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Connection Callback ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( false ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Disconnected () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo ge ( TAG , Ġ" Disconnected Ġwhile Ġattempting Ġto Ġestablish Ġconnection .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Connection Callback ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( false ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġregister Connection Callback ( callback ) ĊĠĠĠĠĠ Ġlog d ( TAG , Ġ" Connecting Ġto Ġdevice ") ĊĠĠĠĠĠ Ġconnect () ĊĠĠĠ Ġ} ĊĊĠ Ġabstract Ġfun Ġdisconnect () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSends Ġ[ message ] Ġto Ġa Ġconnected Ġdevice . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThe Ġdelivery Ġof Ġdata Ġis Ġnotified Ġthrough Ġ[ Message Callback . on Message Sent ]. ĠThis Ġmethod Ġshould ĊĠĠ Ġ* Ġnot Ġbe Ġinvoked Ġagain Ġbefore Ġthe Ġcallback ; Ġotherwise Ġthe Ġbehavior Ġis Ġundefined . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġrequest Ġto Ġsend Ġdata Ġwas Ġinitiated Ġsuccessfully ; Ġ` false ` Ġotherwise . ĊĠĠ Ġ*/ ĊĠ Ġabstract Ġfun ĠsendMessage ( message : ĠByteArray ): ĠBoolean ĊĊĠ Ġopen Ġfun Ġregister Connection Callback ( callback : ĠConnection Callback ) Ġ{ ĊĠĠĠ Ġcheck ( connection Callbacks . add ( callback )) Ġ{ Ġ" Could Ġnot Ġadd Ġconnection Ġcallback ." Ġ} ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġunregister Connection Callback ( callback : ĠConnection Callback ) Ġ{ ĊĠĠĠ Ġif Ġ(! connection Callbacks . remove ( callback )) Ġ{ ĊĠĠĠĠĠ Ġlog i ( TAG , Ġ" Did Ġnot Ġremove Ġcallback Ġfrom Ġexisting Ġones .") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġregister Message Callback ( callback : ĠMessage Callback ) Ġ{ ĊĠĠĠ Ġcheck ( message Callbacks . add ( callback )) Ġ{ Ġ" Could Ġnot Ġadd Ġmessage Ġcallback ." Ġ} ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġunregister Message Callback ( callback : ĠMessage Callback ) Ġ{ ĊĠĠĠ Ġif Ġ(! message Callbacks . remove ( callback )) Ġ{ ĊĠĠĠĠĠ Ġlog i ( TAG , Ġ" Did Ġnot Ġremove Ġcallback Ġfrom Ġexisting Ġones .") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠCallback Ġthat Ġwill Ġbe Ġnotified Ġfor Ġ[ connect ] Ġresult . Ġ*/ ĊĠ Ġinterface ĠConnection Callback Ġ{ ĊĠĠĠ Ġ/** ĠInv oked Ġwhen ĠG ATT Ġhas Ġbeen Ġconnected . Ġ*/ ĊĠĠĠ Ġfun Ġon Connected () ĊĊĠĠĠ Ġ/** ĠInv oked Ġwhen Ġ[ connect ] Ġcould Ġnot Ġbe Ġcompleted . Ġ*/ ĊĠĠĠ Ġfun Ġon Connection Failed () ĊĊĠĠĠ Ġ/** ĠInv oked Ġwhen ĠG ATT Ġhas Ġbeen Ġdisconnected . Ġ*/ ĊĠĠĠ Ġfun Ġon Disconnected () ĊĠ Ġ} ĊĊĠ Ġ/** ĠCallback Ġthat Ġwill Ġbe Ġnotified Ġfor Ġ[ sendMessage ] Ġresult Ġand Ġincoming Ġmessages . Ġ*/ ĊĠ Ġinterface ĠMessage Callback Ġ{ ĊĠĠĠ Ġ/** ĠInv oked Ġwhen Ġa Ġmessage Ġhas Ġbeen Ġreceived . Ġ*/ ĊĠĠĠ Ġfun Ġon Message Received ( data : ĠByteArray ) ĊĊĠĠĠ Ġ/** ĠInv oked Ġwhen Ġ[ message ] Ġhas Ġbeen Ġsent Ġsuccessfully . Ġ*/ ĊĠĠĠ Ġfun Ġon Message Sent ( message : ĠByteArray ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠDefaults Ġto Ġno - op . ĠOnly Ġoverride Ġif Ġacknowledge ment Ġfor Ġsending Ġa Ġmessage Ġis Ġrequired . ĊĠĠĠĠĠ Ġ// ĠFor Ġexample , Ġsending Ġchunk ed Ġmessage Ġthrough Ġ` B le Message Stream V 2 `. ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Bluetooth ConnectionManager " ĊĠ Ġ} Ċ } Ċ