diff options
author | BrettyWhite <geekman3454@protonmail.com> | 2018-12-03 11:45:10 -0500 |
---|---|---|
committer | BrettyWhite <geekman3454@protonmail.com> | 2018-12-03 11:45:10 -0500 |
commit | 285959dc7725685f5e81f47deeb2e6519e1945eb (patch) | |
tree | 9f312fbcebddc4dba460abe70f943d3074f9e25f | |
parent | 490be41b20ec4bb4a81837e73eb6ea9bfcea7a8a (diff) | |
download | sdl_android-285959dc7725685f5e81f47deeb2e6519e1945eb.tar.gz |
fix legacy disconnect issuesbugfix/legacydisconnect
-rw-r--r-- | sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java b/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java index 38df218b2..eb0e28190 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java +++ b/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java @@ -32,8 +32,12 @@ package com.smartdevicelink.transport; +import android.bluetooth.BluetoothDevice; +import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -63,6 +67,8 @@ public class TransportManager { MultiplexBluetoothTransport legacyBluetoothTransport; LegacyBluetoothHandler legacyBluetoothHandler; + final WeakReference<Context> contextWeakReference; + /** * Managing transports @@ -82,6 +88,8 @@ public class TransportManager { config.service = SdlBroadcastReceiver.consumeQueuedRouterService(); } + contextWeakReference = new WeakReference<>(config.context); + RouterServiceValidator validator = new RouterServiceValidator(config); if(validator.validate()){ transport = new TransportBrokerImpl(config.context, config.appId,config.service); @@ -210,7 +218,7 @@ public class TransportManager { } public void requestSecondaryTransportConnection(byte sessionId, Bundle params){ - transport.requestSecondaryTransportConnection(sessionId, params); + transport.requestSecondaryTransportConnection(sessionId, params); } protected class TransportBrokerImpl extends TransportBroker{ @@ -283,6 +291,9 @@ public class TransportManager { } legacyBluetoothHandler = new LegacyBluetoothHandler(this); legacyBluetoothTransport = new MultiplexBluetoothTransport(legacyBluetoothHandler); + if(contextWeakReference.get() != null){ + contextWeakReference.get().registerReceiver(legacyDisconnectReceiver,new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED) ); + } }else{ new Handler().postDelayed(new Runnable() { @Override @@ -295,7 +306,9 @@ public class TransportManager { } protected synchronized void exitLegacyMode(String info ){ + TransportRecord legacyTransportRecord = null; if(legacyBluetoothTransport != null){ + legacyTransportRecord = legacyBluetoothTransport.getTransportRecord(); legacyBluetoothTransport.stop(); legacyBluetoothTransport = null; } @@ -303,7 +316,12 @@ public class TransportManager { synchronized (TRANSPORT_STATUS_LOCK){ TransportManager.this.transportStatus.clear(); } - transportListener.onTransportDisconnected(info, new TransportRecord(TransportType.BLUETOOTH,null),null); + if(contextWeakReference !=null){ + try{ + contextWeakReference.get().unregisterReceiver(legacyDisconnectReceiver); + }catch (Exception e){} + } + transportListener.onTransportDisconnected(info, legacyTransportRecord,null); } public interface TransportEventListener{ @@ -328,6 +346,16 @@ public class TransportManager { } + private BroadcastReceiver legacyDisconnectReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if(intent != null){ + if(BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(intent.getAction())){ + exitLegacyMode("Bluetooth disconnected"); + } + } + } + }; protected static class LegacyBluetoothHandler extends Handler{ |