Loading android/app/src/com/android/bluetooth/BluetoothMethodProxy.java +10 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.os.ParcelFileDescriptor; import android.provider.Telephony; import android.util.Log; import com.android.bluetooth.bass_client.BassClientPeriodicAdvertisingManager; import com.android.bluetooth.gatt.AppAdvertiseStats; import com.android.bluetooth.gatt.ContextMap; import com.android.bluetooth.gatt.GattService; Loading Loading @@ -236,6 +237,15 @@ public class BluetoothMethodProxy { return Telephony.Threads.getOrCreateThreadId(context, recipients); } /** * Proxies {@link * BassClientPeriodicAdvertisingManager#initializePeriodicAdvertisingManagerOnDefaultAdapter}. */ public boolean initializePeriodicAdvertisingManagerOnDefaultAdapter() { return BassClientPeriodicAdvertisingManager .initializePeriodicAdvertisingManagerOnDefaultAdapter(); } /** * Proxies {@link PeriodicAdvertisingManager#registerSync(ScanResult, int, int, * PeriodicAdvertisingCallback, Handler)}. Loading android/app/src/com/android/bluetooth/bass_client/BassClientPeriodicAdvertisingManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ import android.bluetooth.le.PeriodicAdvertisingManager; import android.util.Log; /** Bass Client Periodic Advertising object handler */ class BassClientPeriodicAdvertisingManager { public class BassClientPeriodicAdvertisingManager { private static final String TAG = "BassClientPeriodicAdvertisingManager"; private static PeriodicAdvertisingManager sPeriodicAdvertisingManager; Loading android/app/src/com/android/bluetooth/bass_client/BassClientService.java +773 −108 File changed.Preview size limit exceeded, changes collapsed. Show changes android/app/src/com/android/bluetooth/bass_client/BassClientStateMachine.java +130 −38 Original line number Diff line number Diff line Loading @@ -344,6 +344,11 @@ public class BassClientStateMachine extends StateMachine { } void parseBaseData(BluetoothDevice device, int syncHandle, byte[] serviceData) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("parseBaseData" + Arrays.toString(serviceData)); BaseData base = BaseData.parseBaseData(serviceData); if (base != null) { Loading Loading @@ -374,6 +379,11 @@ public class BassClientStateMachine extends StateMachine { } void parseScanRecord(int syncHandle, ScanRecord record) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("parseScanRecord: " + record); Map<ParcelUuid, byte[]> bmsAdvDataMap = record.getServiceData(); if (bmsAdvDataMap != null) { Loading @@ -396,6 +406,11 @@ public class BassClientStateMachine extends StateMachine { } private String checkAndParseBroadcastName(ScanRecord record) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("checkAndParseBroadcastName"); byte[] rawBytes = record.getBytes(); List<TypeValueEntry> entries = BluetoothUtils.parseLengthTypeValueBytes(rawBytes); Loading @@ -421,8 +436,12 @@ public class BassClientStateMachine extends StateMachine { return broadcastName; } private boolean selectSource( ScanResult scanRes, boolean autoTriggered) { private boolean selectSource(ScanResult scanRes, boolean autoTriggered) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("selectSource: ScanResult " + scanRes); mAutoTriggered = autoTriggered; mPASyncRetryCounter = 1; Loading Loading @@ -495,12 +514,22 @@ public class BassClientStateMachine extends StateMachine { } private boolean isSourceSynced(int broadcastId) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } List<Integer> activeSyncedSrc = mService.getActiveSyncedSources(mDevice); return (activeSyncedSrc != null && activeSyncedSrc.contains(mService.getSyncHandleForBroadcastId(broadcastId))); } private void cancelActiveSync(Integer syncHandle) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("cancelActiveSync: syncHandle = " + syncHandle); if (syncHandle == null) { // clean up the pending sync request if syncHandle is null Loading Loading @@ -531,6 +560,11 @@ public class BassClientStateMachine extends StateMachine { } private boolean unsyncSource(int syncHandle) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } if (syncHandle != BassConstants.INVALID_SYNC_HANDLE && mPeriodicAdvCallbacksMap.containsKey(syncHandle)) { try { Loading Loading @@ -560,6 +594,11 @@ public class BassClientStateMachine extends StateMachine { private BluetoothLeBroadcastMetadata getBroadcastMetadataFromBaseData( BaseData baseData, BluetoothDevice device, int syncHandle, boolean encrypted) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } BluetoothLeBroadcastMetadata.Builder metaData = new BluetoothLeBroadcastMetadata.Builder(); int index = 0; Loading Loading @@ -934,8 +973,10 @@ public class BassClientStateMachine extends StateMachine { || recvState.getSourceDevice().getAddress().equals(emptyBluetoothDevice)) { BluetoothDevice removedDevice = oldRecvState.getSourceDevice(); log("sourceInfo removal " + removedDevice); if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync( mService.getSyncHandleForBroadcastId(recvState.getBroadcastId())); } setCurrentBroadcastMetadata(oldRecvState.getSourceId(), null); if (mPendingSourceToSwitch != null) { // Source remove is triggered by switch source request Loading Loading @@ -1124,6 +1165,11 @@ public class BassClientStateMachine extends StateMachine { int skip, int timeout, int status) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("onSyncEstablished syncHandle: " + syncHandle + ", device: " + device + ", advertisingSid: " + advertisingSid Loading Loading @@ -1180,6 +1226,11 @@ public class BassClientStateMachine extends StateMachine { @Override public void onPeriodicAdvertisingReport(PeriodicAdvertisingReport report) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("onPeriodicAdvertisingReport"); Boolean first = mFirstTimeBisDiscoveryMap.get(report.getSyncHandle()); // Parse the BIS indices from report's service data Loading @@ -1191,6 +1242,11 @@ public class BassClientStateMachine extends StateMachine { @Override public void onSyncLost(int syncHandle) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("OnSyncLost" + syncHandle); if (Flags.leaudioBroadcastMonitorSourceSyncStatus()) { int broadcastId = mService.getBroadcastIdForSyncHandle(syncHandle); Loading @@ -1204,6 +1260,11 @@ public class BassClientStateMachine extends StateMachine { @Override public void onBigInfoAdvertisingReport(int syncHandle, boolean encrypted) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log( "onBIGInfoAdvertisingReport: syncHandle=" + syncHandle Loading Loading @@ -1738,7 +1799,9 @@ public class BassClientStateMachine extends StateMachine { mBluetoothGatt.disconnect(); mBluetoothGatt.close(); mBluetoothGatt = null; if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } transitionTo(mDisconnected); } else { log("mBluetoothGatt is null"); Loading @@ -1753,7 +1816,9 @@ public class BassClientStateMachine extends StateMachine { Log.w(TAG, "unexpected disconnected from " + mDevice); mService.handleDeviceDisconnection(mDevice, false); resetBluetoothGatt(); if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } transitionTo(mDisconnected); } break; Loading Loading @@ -1786,6 +1851,12 @@ public class BassClientStateMachine extends StateMachine { } break; case SELECT_BCAST_SOURCE: if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine" + " flag"); } ScanResult scanRes = (ScanResult) message.obj; boolean auto = ((int) message.arg1) == BassConstants.AUTO; // check if invalid sync handle exists indicating a pending sync request Loading @@ -1800,6 +1871,12 @@ public class BassClientStateMachine extends StateMachine { } break; case REACHED_MAX_SOURCE_LIMIT: if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine" + " flag"); } int handle = message.arg1; cancelActiveSync(handle); break; Loading Loading @@ -1828,6 +1905,7 @@ public class BassClientStateMachine extends StateMachine { case ADD_BCAST_SOURCE: metaData = (BluetoothLeBroadcastMetadata) message.obj; if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { List<Integer> activeSyncedSrc = mService.getActiveSyncedSources(mDevice); BluetoothDevice sourceDevice = metaData.getSourceDevice(); if (!mService.isLocalBroadcast(metaData) Loading @@ -1847,11 +1925,15 @@ public class BassClientStateMachine extends StateMachine { sendMessage(msg); mPendingSourceToAdd = metaData; } else { mService.getCallbacks().notifySourceAddFailed(mDevice, metaData, mService.getCallbacks() .notifySourceAddFailed( mDevice, metaData, BluetoothStatusCodes.ERROR_UNKNOWN); } break; } } byte[] addSourceInfo = convertMetadataToAddSourceByteArray(metaData); if (addSourceInfo == null) { Loading Loading @@ -2021,6 +2103,8 @@ public class BassClientStateMachine extends StateMachine { void sendPendingCallbacks(int pendingOp, int status) { switch (pendingOp) { case START_SCAN_OFFLOAD: // Do not want to cancel sync because one remote does not receive START_SCAN_OFFLOAD if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { if (!isSuccess(status)) { if (!mAutoTriggered) { cancelActiveSync(null); Loading @@ -2028,10 +2112,13 @@ public class BassClientStateMachine extends StateMachine { mAutoTriggered = false; } } } break; case ADD_BCAST_SOURCE: if (!isSuccess(status)) { if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } if (mPendingMetadata != null) { mService.getCallbacks() .notifySourceAddFailed(mDevice, mPendingMetadata, status); Loading @@ -2041,7 +2128,8 @@ public class BassClientStateMachine extends StateMachine { } break; case UPDATE_BCAST_SOURCE: if (!mAutoTriggered) { if (!mAutoTriggered || Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { if (!isSuccess(status)) { mService.getCallbacks().notifySourceModifyFailed(mDevice, mPendingSourceId, status); Loading Loading @@ -2115,7 +2203,9 @@ public class BassClientStateMachine extends StateMachine { mBluetoothGatt.disconnect(); mBluetoothGatt.close(); mBluetoothGatt = null; if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } transitionTo(mDisconnected); } else { log("mBluetoothGatt is null"); Loading @@ -2134,7 +2224,9 @@ public class BassClientStateMachine extends StateMachine { Log.w(TAG, "Unexpected disconnection " + mDevice); mService.handleDeviceDisconnection(mDevice, false); resetBluetoothGatt(); if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } transitionTo(mDisconnected); } break; Loading android/app/src/com/android/bluetooth/bass_client/BassObjectsFactory.java +7 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.bluetooth.bass_client; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.le.BluetoothLeScanner; import android.os.Looper; import android.util.Log; Loading Loading @@ -95,6 +96,11 @@ public class BassObjectsFactory { * @return a bluetooth LE scanner */ public BluetoothLeScannerWrapper getBluetoothLeScannerWrapper(BluetoothAdapter adapter) { return new BluetoothLeScannerWrapper(adapter.getBluetoothLeScanner()); BluetoothLeScanner bluetoothLeScanner = adapter.getBluetoothLeScanner(); if (bluetoothLeScanner == null) { return null; } else { return new BluetoothLeScannerWrapper(bluetoothLeScanner); } } } Loading
android/app/src/com/android/bluetooth/BluetoothMethodProxy.java +10 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.os.ParcelFileDescriptor; import android.provider.Telephony; import android.util.Log; import com.android.bluetooth.bass_client.BassClientPeriodicAdvertisingManager; import com.android.bluetooth.gatt.AppAdvertiseStats; import com.android.bluetooth.gatt.ContextMap; import com.android.bluetooth.gatt.GattService; Loading Loading @@ -236,6 +237,15 @@ public class BluetoothMethodProxy { return Telephony.Threads.getOrCreateThreadId(context, recipients); } /** * Proxies {@link * BassClientPeriodicAdvertisingManager#initializePeriodicAdvertisingManagerOnDefaultAdapter}. */ public boolean initializePeriodicAdvertisingManagerOnDefaultAdapter() { return BassClientPeriodicAdvertisingManager .initializePeriodicAdvertisingManagerOnDefaultAdapter(); } /** * Proxies {@link PeriodicAdvertisingManager#registerSync(ScanResult, int, int, * PeriodicAdvertisingCallback, Handler)}. Loading
android/app/src/com/android/bluetooth/bass_client/BassClientPeriodicAdvertisingManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ import android.bluetooth.le.PeriodicAdvertisingManager; import android.util.Log; /** Bass Client Periodic Advertising object handler */ class BassClientPeriodicAdvertisingManager { public class BassClientPeriodicAdvertisingManager { private static final String TAG = "BassClientPeriodicAdvertisingManager"; private static PeriodicAdvertisingManager sPeriodicAdvertisingManager; Loading
android/app/src/com/android/bluetooth/bass_client/BassClientService.java +773 −108 File changed.Preview size limit exceeded, changes collapsed. Show changes
android/app/src/com/android/bluetooth/bass_client/BassClientStateMachine.java +130 −38 Original line number Diff line number Diff line Loading @@ -344,6 +344,11 @@ public class BassClientStateMachine extends StateMachine { } void parseBaseData(BluetoothDevice device, int syncHandle, byte[] serviceData) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("parseBaseData" + Arrays.toString(serviceData)); BaseData base = BaseData.parseBaseData(serviceData); if (base != null) { Loading Loading @@ -374,6 +379,11 @@ public class BassClientStateMachine extends StateMachine { } void parseScanRecord(int syncHandle, ScanRecord record) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("parseScanRecord: " + record); Map<ParcelUuid, byte[]> bmsAdvDataMap = record.getServiceData(); if (bmsAdvDataMap != null) { Loading @@ -396,6 +406,11 @@ public class BassClientStateMachine extends StateMachine { } private String checkAndParseBroadcastName(ScanRecord record) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("checkAndParseBroadcastName"); byte[] rawBytes = record.getBytes(); List<TypeValueEntry> entries = BluetoothUtils.parseLengthTypeValueBytes(rawBytes); Loading @@ -421,8 +436,12 @@ public class BassClientStateMachine extends StateMachine { return broadcastName; } private boolean selectSource( ScanResult scanRes, boolean autoTriggered) { private boolean selectSource(ScanResult scanRes, boolean autoTriggered) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("selectSource: ScanResult " + scanRes); mAutoTriggered = autoTriggered; mPASyncRetryCounter = 1; Loading Loading @@ -495,12 +514,22 @@ public class BassClientStateMachine extends StateMachine { } private boolean isSourceSynced(int broadcastId) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } List<Integer> activeSyncedSrc = mService.getActiveSyncedSources(mDevice); return (activeSyncedSrc != null && activeSyncedSrc.contains(mService.getSyncHandleForBroadcastId(broadcastId))); } private void cancelActiveSync(Integer syncHandle) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("cancelActiveSync: syncHandle = " + syncHandle); if (syncHandle == null) { // clean up the pending sync request if syncHandle is null Loading Loading @@ -531,6 +560,11 @@ public class BassClientStateMachine extends StateMachine { } private boolean unsyncSource(int syncHandle) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } if (syncHandle != BassConstants.INVALID_SYNC_HANDLE && mPeriodicAdvCallbacksMap.containsKey(syncHandle)) { try { Loading Loading @@ -560,6 +594,11 @@ public class BassClientStateMachine extends StateMachine { private BluetoothLeBroadcastMetadata getBroadcastMetadataFromBaseData( BaseData baseData, BluetoothDevice device, int syncHandle, boolean encrypted) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } BluetoothLeBroadcastMetadata.Builder metaData = new BluetoothLeBroadcastMetadata.Builder(); int index = 0; Loading Loading @@ -934,8 +973,10 @@ public class BassClientStateMachine extends StateMachine { || recvState.getSourceDevice().getAddress().equals(emptyBluetoothDevice)) { BluetoothDevice removedDevice = oldRecvState.getSourceDevice(); log("sourceInfo removal " + removedDevice); if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync( mService.getSyncHandleForBroadcastId(recvState.getBroadcastId())); } setCurrentBroadcastMetadata(oldRecvState.getSourceId(), null); if (mPendingSourceToSwitch != null) { // Source remove is triggered by switch source request Loading Loading @@ -1124,6 +1165,11 @@ public class BassClientStateMachine extends StateMachine { int skip, int timeout, int status) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("onSyncEstablished syncHandle: " + syncHandle + ", device: " + device + ", advertisingSid: " + advertisingSid Loading Loading @@ -1180,6 +1226,11 @@ public class BassClientStateMachine extends StateMachine { @Override public void onPeriodicAdvertisingReport(PeriodicAdvertisingReport report) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("onPeriodicAdvertisingReport"); Boolean first = mFirstTimeBisDiscoveryMap.get(report.getSyncHandle()); // Parse the BIS indices from report's service data Loading @@ -1191,6 +1242,11 @@ public class BassClientStateMachine extends StateMachine { @Override public void onSyncLost(int syncHandle) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log("OnSyncLost" + syncHandle); if (Flags.leaudioBroadcastMonitorSourceSyncStatus()) { int broadcastId = mService.getBroadcastIdForSyncHandle(syncHandle); Loading @@ -1204,6 +1260,11 @@ public class BassClientStateMachine extends StateMachine { @Override public void onBigInfoAdvertisingReport(int syncHandle, boolean encrypted) { if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine flag"); } log( "onBIGInfoAdvertisingReport: syncHandle=" + syncHandle Loading Loading @@ -1738,7 +1799,9 @@ public class BassClientStateMachine extends StateMachine { mBluetoothGatt.disconnect(); mBluetoothGatt.close(); mBluetoothGatt = null; if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } transitionTo(mDisconnected); } else { log("mBluetoothGatt is null"); Loading @@ -1753,7 +1816,9 @@ public class BassClientStateMachine extends StateMachine { Log.w(TAG, "unexpected disconnected from " + mDevice); mService.handleDeviceDisconnection(mDevice, false); resetBluetoothGatt(); if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } transitionTo(mDisconnected); } break; Loading Loading @@ -1786,6 +1851,12 @@ public class BassClientStateMachine extends StateMachine { } break; case SELECT_BCAST_SOURCE: if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine" + " flag"); } ScanResult scanRes = (ScanResult) message.obj; boolean auto = ((int) message.arg1) == BassConstants.AUTO; // check if invalid sync handle exists indicating a pending sync request Loading @@ -1800,6 +1871,12 @@ public class BassClientStateMachine extends StateMachine { } break; case REACHED_MAX_SOURCE_LIMIT: if (Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { throw new RuntimeException( "Should never be executed with" + " leaudioBroadcastExtractPeriodicScannerFromStateMachine" + " flag"); } int handle = message.arg1; cancelActiveSync(handle); break; Loading Loading @@ -1828,6 +1905,7 @@ public class BassClientStateMachine extends StateMachine { case ADD_BCAST_SOURCE: metaData = (BluetoothLeBroadcastMetadata) message.obj; if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { List<Integer> activeSyncedSrc = mService.getActiveSyncedSources(mDevice); BluetoothDevice sourceDevice = metaData.getSourceDevice(); if (!mService.isLocalBroadcast(metaData) Loading @@ -1847,11 +1925,15 @@ public class BassClientStateMachine extends StateMachine { sendMessage(msg); mPendingSourceToAdd = metaData; } else { mService.getCallbacks().notifySourceAddFailed(mDevice, metaData, mService.getCallbacks() .notifySourceAddFailed( mDevice, metaData, BluetoothStatusCodes.ERROR_UNKNOWN); } break; } } byte[] addSourceInfo = convertMetadataToAddSourceByteArray(metaData); if (addSourceInfo == null) { Loading Loading @@ -2021,6 +2103,8 @@ public class BassClientStateMachine extends StateMachine { void sendPendingCallbacks(int pendingOp, int status) { switch (pendingOp) { case START_SCAN_OFFLOAD: // Do not want to cancel sync because one remote does not receive START_SCAN_OFFLOAD if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { if (!isSuccess(status)) { if (!mAutoTriggered) { cancelActiveSync(null); Loading @@ -2028,10 +2112,13 @@ public class BassClientStateMachine extends StateMachine { mAutoTriggered = false; } } } break; case ADD_BCAST_SOURCE: if (!isSuccess(status)) { if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } if (mPendingMetadata != null) { mService.getCallbacks() .notifySourceAddFailed(mDevice, mPendingMetadata, status); Loading @@ -2041,7 +2128,8 @@ public class BassClientStateMachine extends StateMachine { } break; case UPDATE_BCAST_SOURCE: if (!mAutoTriggered) { if (!mAutoTriggered || Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { if (!isSuccess(status)) { mService.getCallbacks().notifySourceModifyFailed(mDevice, mPendingSourceId, status); Loading Loading @@ -2115,7 +2203,9 @@ public class BassClientStateMachine extends StateMachine { mBluetoothGatt.disconnect(); mBluetoothGatt.close(); mBluetoothGatt = null; if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } transitionTo(mDisconnected); } else { log("mBluetoothGatt is null"); Loading @@ -2134,7 +2224,9 @@ public class BassClientStateMachine extends StateMachine { Log.w(TAG, "Unexpected disconnection " + mDevice); mService.handleDeviceDisconnection(mDevice, false); resetBluetoothGatt(); if (!Flags.leaudioBroadcastExtractPeriodicScannerFromStateMachine()) { cancelActiveSync(null); } transitionTo(mDisconnected); } break; Loading
android/app/src/com/android/bluetooth/bass_client/BassObjectsFactory.java +7 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.bluetooth.bass_client; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.le.BluetoothLeScanner; import android.os.Looper; import android.util.Log; Loading Loading @@ -95,6 +96,11 @@ public class BassObjectsFactory { * @return a bluetooth LE scanner */ public BluetoothLeScannerWrapper getBluetoothLeScannerWrapper(BluetoothAdapter adapter) { return new BluetoothLeScannerWrapper(adapter.getBluetoothLeScanner()); BluetoothLeScanner bluetoothLeScanner = adapter.getBluetoothLeScanner(); if (bluetoothLeScanner == null) { return null; } else { return new BluetoothLeScannerWrapper(bluetoothLeScanner); } } }