Loading android/app/Android.bp +5 −2 Original line number Diff line number Diff line Loading @@ -142,14 +142,17 @@ android_app { javacflags: ["-Aroom.schemaLocation=packages/modules/Bluetooth/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/schemas"], optimize: { enabled: false, enabled: true, shrink: true, optimize: false, proguard_flags_files: ["proguard.flags"], }, required: [ "android.hardware.bluetooth@1.0", "android.hardware.bluetooth@1.1", "android.hardware.bluetooth.audio@2.0", "android.hardware.bluetooth.audio@2.1", "android.hardware.bluetooth.audio-V1-ndk", "android.hardware.bluetooth.audio-V2-ndk", ], apex_available: [ "com.android.bluetooth", Loading android/app/AndroidManifest.xml +4 −1 Original line number Diff line number Diff line Loading @@ -519,9 +519,12 @@ <action android:name="android.bluetooth.IBluetoothPbapClient"/> </intent-filter> </service> <!-- Note: This service doesn't get started, it just indicates to the Authentication framework that we can create accounts of a specific type. As such, its safe to have as enabled on all targets and not just the ones that use PBAP Client --> <service android:process="@string/process" android:name="com.android.bluetooth.pbapclient.AuthenticationService" android:enabled="false" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.accounts.AccountAuthenticator"/> Loading android/app/jni/com_android_bluetooth_gatt.cpp +62 −63 Original line number Diff line number Diff line Loading @@ -992,6 +992,64 @@ class JniScanningCallbacks : ScanningCallbacks { sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanThresholdCrossed, client_if); } void OnPeriodicSyncStarted(int reg_id, uint8_t status, uint16_t sync_handle, uint8_t sid, uint8_t address_type, RawAddress address, uint8_t phy, uint16_t interval) override { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!mPeriodicScanCallbacksObj) { ALOGE("mPeriodicScanCallbacksObj is NULL. Return."); return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod( mPeriodicScanCallbacksObj, method_onSyncStarted, reg_id, sync_handle, sid, address_type, addr.get(), phy, interval, status); } void OnPeriodicSyncReport(uint16_t sync_handle, int8_t tx_power, int8_t rssi, uint8_t data_status, std::vector<uint8_t> data) override { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; ScopedLocalRef<jbyteArray> jb(sCallbackEnv.get(), sCallbackEnv->NewByteArray(data.size())); sCallbackEnv->SetByteArrayRegion(jb.get(), 0, data.size(), (jbyte*)data.data()); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncReport, sync_handle, tx_power, rssi, data_status, jb.get()); } void OnPeriodicSyncLost(uint16_t sync_handle) override { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncLost, sync_handle); } void OnPeriodicSyncTransferred(int pa_source, uint8_t status, RawAddress address) override { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!mPeriodicScanCallbacksObj) { ALOGE("mPeriodicScanCallbacksObj is NULL. Return."); return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncTransferredCallback, pa_source, status, addr.get()); } }; /** Loading Loading @@ -2249,54 +2307,12 @@ static void periodicScanCleanupNative(JNIEnv* env, jobject object) { } } static void onSyncStarted(int reg_id, uint8_t status, uint16_t sync_handle, uint8_t sid, uint8_t address_type, RawAddress address, uint8_t phy, uint16_t interval) { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!mPeriodicScanCallbacksObj) { ALOGE("mPeriodicScanCallbacksObj is NULL. Return."); return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncStarted, reg_id, sync_handle, sid, address_type, addr.get(), phy, interval, status); } static void onSyncReport(uint16_t sync_handle, int8_t tx_power, int8_t rssi, uint8_t data_status, std::vector<uint8_t> data) { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; ScopedLocalRef<jbyteArray> jb(sCallbackEnv.get(), sCallbackEnv->NewByteArray(data.size())); sCallbackEnv->SetByteArrayRegion(jb.get(), 0, data.size(), (jbyte*)data.data()); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncReport, sync_handle, tx_power, rssi, data_status, jb.get()); } static void onSyncLost(uint16_t sync_handle) { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncLost, sync_handle); } static void startSyncNative(JNIEnv* env, jobject object, jint sid, jstring address, jint skip, jint timeout, jint reg_id) { if (!sGattIf) return; sGattIf->scanner->StartSync(sid, str2addr(env, address), skip, timeout, base::Bind(&onSyncStarted, reg_id), base::Bind(&onSyncReport), base::Bind(&onSyncLost)); reg_id); } static void stopSyncNative(JNIEnv* env, jobject object, jint sync_handle) { Loading @@ -2310,37 +2326,20 @@ static void cancelSyncNative(JNIEnv* env, jobject object, jint sid, sGattIf->scanner->CancelCreateSync(sid, str2addr(env, address)); } static void onSyncTransferredCb(int pa_source, uint8_t status, RawAddress address) { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!mPeriodicScanCallbacksObj) { ALOGE("mPeriodicScanCallbacksObj is NULL. Return."); return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncTransferredCallback, pa_source, status, addr.get()); } static void syncTransferNative(JNIEnv* env, jobject object, jint pa_source, jstring addr, jint service_data, jint sync_handle) { if (!sGattIf) return; sGattIf->scanner->TransferSync(str2addr(env, addr), service_data, sync_handle, base::Bind(&onSyncTransferredCb, pa_source)); pa_source); } static void transferSetInfoNative(JNIEnv* env, jobject object, jint pa_source, jstring addr, jint service_data, jint adv_handle) { if (!sGattIf) return; sGattIf->scanner->TransferSetInfo( str2addr(env, addr), service_data, adv_handle, base::Bind(&onSyncTransferredCb, pa_source)); sGattIf->scanner->TransferSetInfo(str2addr(env, addr), service_data, adv_handle, pa_source); } static void gattTestNative(JNIEnv* env, jobject object, jint command, Loading android/app/proguard.flags 0 → 100644 +7 −0 Original line number Diff line number Diff line -allowaccessmodification -keep,allowoptimization,allowaccessmodification class com.android.bluetooth.** { *; } # Required to support APIs only referenced indirectly via tests. -keep class android.support.v4.media.MediaMetadataCompat { *; } -keep class android.support.v4.media.MediaBrowserCompat$MediaItem { *; } -keep class android.support.v4.media.MediaDescriptionCompat { *; } android/app/src/com/android/bluetooth/bas/BatteryStateMachine.java +2 −1 Original line number Diff line number Diff line Loading @@ -228,8 +228,9 @@ public class BatteryStateMachine extends StateMachine { mBluetoothGatt = mDevice.connectGatt(service, /*autoConnect=*/false, mGattCallback, TRANSPORT_AUTO, /*opportunistic=*/true, PHY_LE_1M_MASK | PHY_LE_2M_MASK, getHandler()); } else { mBluetoothGatt.connect(); } // opportunistic client will reconnect itself, no need to call mBluetoothGatt.connect() return mBluetoothGatt != null; } Loading Loading
android/app/Android.bp +5 −2 Original line number Diff line number Diff line Loading @@ -142,14 +142,17 @@ android_app { javacflags: ["-Aroom.schemaLocation=packages/modules/Bluetooth/android/app/tests/unit/src/com/android/bluetooth/btservice/storage/schemas"], optimize: { enabled: false, enabled: true, shrink: true, optimize: false, proguard_flags_files: ["proguard.flags"], }, required: [ "android.hardware.bluetooth@1.0", "android.hardware.bluetooth@1.1", "android.hardware.bluetooth.audio@2.0", "android.hardware.bluetooth.audio@2.1", "android.hardware.bluetooth.audio-V1-ndk", "android.hardware.bluetooth.audio-V2-ndk", ], apex_available: [ "com.android.bluetooth", Loading
android/app/AndroidManifest.xml +4 −1 Original line number Diff line number Diff line Loading @@ -519,9 +519,12 @@ <action android:name="android.bluetooth.IBluetoothPbapClient"/> </intent-filter> </service> <!-- Note: This service doesn't get started, it just indicates to the Authentication framework that we can create accounts of a specific type. As such, its safe to have as enabled on all targets and not just the ones that use PBAP Client --> <service android:process="@string/process" android:name="com.android.bluetooth.pbapclient.AuthenticationService" android:enabled="false" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.accounts.AccountAuthenticator"/> Loading
android/app/jni/com_android_bluetooth_gatt.cpp +62 −63 Original line number Diff line number Diff line Loading @@ -992,6 +992,64 @@ class JniScanningCallbacks : ScanningCallbacks { sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanThresholdCrossed, client_if); } void OnPeriodicSyncStarted(int reg_id, uint8_t status, uint16_t sync_handle, uint8_t sid, uint8_t address_type, RawAddress address, uint8_t phy, uint16_t interval) override { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!mPeriodicScanCallbacksObj) { ALOGE("mPeriodicScanCallbacksObj is NULL. Return."); return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod( mPeriodicScanCallbacksObj, method_onSyncStarted, reg_id, sync_handle, sid, address_type, addr.get(), phy, interval, status); } void OnPeriodicSyncReport(uint16_t sync_handle, int8_t tx_power, int8_t rssi, uint8_t data_status, std::vector<uint8_t> data) override { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; ScopedLocalRef<jbyteArray> jb(sCallbackEnv.get(), sCallbackEnv->NewByteArray(data.size())); sCallbackEnv->SetByteArrayRegion(jb.get(), 0, data.size(), (jbyte*)data.data()); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncReport, sync_handle, tx_power, rssi, data_status, jb.get()); } void OnPeriodicSyncLost(uint16_t sync_handle) override { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncLost, sync_handle); } void OnPeriodicSyncTransferred(int pa_source, uint8_t status, RawAddress address) override { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!mPeriodicScanCallbacksObj) { ALOGE("mPeriodicScanCallbacksObj is NULL. Return."); return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncTransferredCallback, pa_source, status, addr.get()); } }; /** Loading Loading @@ -2249,54 +2307,12 @@ static void periodicScanCleanupNative(JNIEnv* env, jobject object) { } } static void onSyncStarted(int reg_id, uint8_t status, uint16_t sync_handle, uint8_t sid, uint8_t address_type, RawAddress address, uint8_t phy, uint16_t interval) { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!mPeriodicScanCallbacksObj) { ALOGE("mPeriodicScanCallbacksObj is NULL. Return."); return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncStarted, reg_id, sync_handle, sid, address_type, addr.get(), phy, interval, status); } static void onSyncReport(uint16_t sync_handle, int8_t tx_power, int8_t rssi, uint8_t data_status, std::vector<uint8_t> data) { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; ScopedLocalRef<jbyteArray> jb(sCallbackEnv.get(), sCallbackEnv->NewByteArray(data.size())); sCallbackEnv->SetByteArrayRegion(jb.get(), 0, data.size(), (jbyte*)data.data()); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncReport, sync_handle, tx_power, rssi, data_status, jb.get()); } static void onSyncLost(uint16_t sync_handle) { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncLost, sync_handle); } static void startSyncNative(JNIEnv* env, jobject object, jint sid, jstring address, jint skip, jint timeout, jint reg_id) { if (!sGattIf) return; sGattIf->scanner->StartSync(sid, str2addr(env, address), skip, timeout, base::Bind(&onSyncStarted, reg_id), base::Bind(&onSyncReport), base::Bind(&onSyncLost)); reg_id); } static void stopSyncNative(JNIEnv* env, jobject object, jint sync_handle) { Loading @@ -2310,37 +2326,20 @@ static void cancelSyncNative(JNIEnv* env, jobject object, jint sid, sGattIf->scanner->CancelCreateSync(sid, str2addr(env, address)); } static void onSyncTransferredCb(int pa_source, uint8_t status, RawAddress address) { CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!mPeriodicScanCallbacksObj) { ALOGE("mPeriodicScanCallbacksObj is NULL. Return."); return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod(mPeriodicScanCallbacksObj, method_onSyncTransferredCallback, pa_source, status, addr.get()); } static void syncTransferNative(JNIEnv* env, jobject object, jint pa_source, jstring addr, jint service_data, jint sync_handle) { if (!sGattIf) return; sGattIf->scanner->TransferSync(str2addr(env, addr), service_data, sync_handle, base::Bind(&onSyncTransferredCb, pa_source)); pa_source); } static void transferSetInfoNative(JNIEnv* env, jobject object, jint pa_source, jstring addr, jint service_data, jint adv_handle) { if (!sGattIf) return; sGattIf->scanner->TransferSetInfo( str2addr(env, addr), service_data, adv_handle, base::Bind(&onSyncTransferredCb, pa_source)); sGattIf->scanner->TransferSetInfo(str2addr(env, addr), service_data, adv_handle, pa_source); } static void gattTestNative(JNIEnv* env, jobject object, jint command, Loading
android/app/proguard.flags 0 → 100644 +7 −0 Original line number Diff line number Diff line -allowaccessmodification -keep,allowoptimization,allowaccessmodification class com.android.bluetooth.** { *; } # Required to support APIs only referenced indirectly via tests. -keep class android.support.v4.media.MediaMetadataCompat { *; } -keep class android.support.v4.media.MediaBrowserCompat$MediaItem { *; } -keep class android.support.v4.media.MediaDescriptionCompat { *; }
android/app/src/com/android/bluetooth/bas/BatteryStateMachine.java +2 −1 Original line number Diff line number Diff line Loading @@ -228,8 +228,9 @@ public class BatteryStateMachine extends StateMachine { mBluetoothGatt = mDevice.connectGatt(service, /*autoConnect=*/false, mGattCallback, TRANSPORT_AUTO, /*opportunistic=*/true, PHY_LE_1M_MASK | PHY_LE_2M_MASK, getHandler()); } else { mBluetoothGatt.connect(); } // opportunistic client will reconnect itself, no need to call mBluetoothGatt.connect() return mBluetoothGatt != null; } Loading