Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da4cb22c authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 8591706 from ae137a8c to tm-qpr1-release

Change-Id: Ic2e7622dc21dc4caf196b4258e51955cbec6a864
parents 6650ce0f ae137a8c
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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",
+4 −1
Original line number Diff line number Diff line
@@ -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"/>
+62 −63
Original line number Diff line number Diff line
@@ -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());
  }
};

/**
@@ -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) {
@@ -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,
+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 { *; }
+2 −1
Original line number Diff line number Diff line
@@ -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