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

Commit 9c534d0c authored by Rahul Sabnis's avatar Rahul Sabnis
Browse files

Check whether local device is an ATV device to determine whether to show

the consent dialog for BLE pairing in JUSTWORKS and ENCRYPTION_ONLY mode

Tag: #feature
Bug: 157038281
Test: Manual
Merged-In: I6d06f5996da71e5a1407e544b0023d82924aa56f
Change-Id: I6d06f5996da71e5a1407e544b0023d82924aa56f
parent 1df9a4bd
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -103,6 +103,18 @@ bt_status_t btif_cleanup_bluetooth(void);
 ******************************************************************************/
bool is_restricted_mode(void);

/*******************************************************************************
 *
 * Function         is_atv_device
 *
 * Description      Returns true if the local device is an Android TV
 *                  device, false if it is not.
 *
 * Returns          bool
 *
 ******************************************************************************/
bool is_atv_device(void);

/*******************************************************************************
 *
 * Function         btif_get_adapter_properties
+5 −1
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@

bt_callbacks_t* bt_hal_cbacks = NULL;
bool restricted_mode = false;
bool is_local_device_atv = false;

/*******************************************************************************
 *  Externs
@@ -131,7 +132,7 @@ static bool is_profile(const char* p1, const char* p2) {
 *
 ****************************************************************************/

static int init(bt_callbacks_t* callbacks) {
static int init(bt_callbacks_t* callbacks, bool is_atv) {
  LOG_INFO(LOG_TAG, "%s", __func__);

  if (interface_ready()) return BT_STATUS_DONE;
@@ -141,6 +142,7 @@ static int init(bt_callbacks_t* callbacks) {
#endif

  bt_hal_cbacks = callbacks;
  is_local_device_atv = is_atv;
  stack_manager_get_interface()->init_stack();
  btif_debug_init();
  return BT_STATUS_SUCCESS;
@@ -168,6 +170,8 @@ static void cleanup(void) { stack_manager_get_interface()->clean_up_stack(); }

bool is_restricted_mode() { return restricted_mode; }

bool is_atv_device() { return is_local_device_atv; }

static int get_adapter_properties(void) {
  /* sanity check */
  if (interface_ready() == false) return BT_STATUS_NOT_READY;
+1 −1
Original line number Diff line number Diff line
@@ -258,7 +258,7 @@ class BluetoothInterfaceImpl : public BluetoothInterface {

    // Initialize the Bluetooth interface. Set up the adapter (Bluetooth DM) API
    // callbacks.
    status = hal_iface_->init(&bt_callbacks);
    status = hal_iface_->init(&bt_callbacks, false);
    if (status != BT_STATUS_SUCCESS) {
      LOG(ERROR) << "Failed to initialize Bluetooth stack";
      return false;
+7 −4
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include <log/log.h>
#include <string.h>
#include "btif_api.h"
#include "btif_common.h"
#include "device/include/interop.h"
#include "include/bt_target.h"
@@ -1237,8 +1238,9 @@ void smp_decide_association_model(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
        p = (tSMP_INT_DATA*)&failure;
        int_evt = SMP_AUTH_CMPL_EVT;
      } else {
        if (p_cb->local_io_capability != SMP_IO_CAP_NONE &&
            p_cb->local_io_capability != SMP_IO_CAP_IN) {
        if (!is_atv_device() &&
            (p_cb->local_io_capability == SMP_IO_CAP_IO ||
             p_cb->local_io_capability == SMP_IO_CAP_KBDISP)) {
          /* display consent dialog if this device has a display */
          SMP_TRACE_DEBUG("ENCRYPTION_ONLY showing Consent Dialog");
          p_cb->cb_evt = SMP_CONSENT_REQ_EVT;
@@ -1598,8 +1600,9 @@ void smp_process_peer_nonce(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
      }

      if (p_cb->selected_association_model == SMP_MODEL_SEC_CONN_JUSTWORKS) {
        if (p_cb->local_io_capability != SMP_IO_CAP_NONE &&
            p_cb->local_io_capability != SMP_IO_CAP_IN) {
        if (!is_atv_device() &&
            (p_cb->local_io_capability == SMP_IO_CAP_IO ||
             p_cb->local_io_capability == SMP_IO_CAP_KBDISP)) {
          /* display consent dialog */
          SMP_TRACE_DEBUG("JUST WORKS showing Consent Dialog");
          p_cb->cb_evt = SMP_CONSENT_REQ_EVT;
+1 −1
Original line number Diff line number Diff line
@@ -178,7 +178,7 @@ TEST_F(BluetoothTest, AdapterCleanupDuringDiscovery) {
  ASSERT_TRUE(bt_callbacks != nullptr);

  for (int i = 0; i < kTestRepeatCount; ++i) {
    bt_interface()->init(bt_callbacks);
    bt_interface()->init(bt_callbacks, false);
    EXPECT_EQ(bt_interface()->enable(false), BT_STATUS_SUCCESS);
    semaphore_wait(adapter_state_changed_callback_sem_);
    EXPECT_EQ(GetState(), BT_STATE_ON) << "Adapter did not turn on.";
Loading