/*******************************************************************************
*
+ * 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
*
* Description Fetches all local adapter properties
bt_callbacks_t* bt_hal_cbacks = NULL;
bool restricted_mode = false;
bool single_user_mode = false;
+bool is_local_device_atv = false;
/*******************************************************************************
* Externs
****************************************************************************/
static int init(bt_callbacks_t* callbacks, bool start_restricted,
- bool is_single_user_mode) {
+ bool is_single_user_mode, bool is_atv) {
LOG_INFO(LOG_TAG, "%s: start restricted = %d ; single user = %d", __func__,
start_restricted, is_single_user_mode);
bt_hal_cbacks = callbacks;
restricted_mode = start_restricted;
single_user_mode = is_single_user_mode;
+ is_local_device_atv = is_atv;
stack_manager_get_interface()->init_stack();
btif_debug_init();
return BT_STATUS_SUCCESS;
bool is_restricted_mode() { return restricted_mode; }
bool is_single_user_mode() { return single_user_mode; }
+bool is_atv_device() { return is_local_device_atv; }
+
static int get_adapter_properties(void) {
/* sanity check */
if (!interface_ready()) return BT_STATUS_NOT_READY;
* restricted mode, bonds that are created are marked as restricted in the
* config file. These devices are deleted upon leaving restricted mode.
* The |is_single_user_mode| flag inits the adapter in NIAP mode.
+ * The |is_atv| flag indicates whether the local device is an Android TV
*/
int (*init)(bt_callbacks_t* callbacks, bool guest_mode,
- bool is_single_user_mode);
+ bool is_single_user_mode, bool is_atv);
/** Enable Bluetooth. */
int (*enable)();
// Initialize the Bluetooth interface. Set up the adapter (Bluetooth DM) API
// callbacks.
- status = hal_iface_->init(&bt_callbacks, false, false);
+ status = hal_iface_->init(&bt_callbacks, false, false, false);
if (status != BT_STATUS_SUCCESS) {
LOG(ERROR) << "Failed to initialize Bluetooth stack";
return false;
#include <cutils/log.h>
#include <log/log.h>
#include <string.h>
+#include "btif_api.h"
#include "btif_common.h"
#include "btif_storage.h"
#include "device/include/interop.h"
smp_int_data.status = SMP_PAIR_AUTH_FAIL;
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;
}
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;
ASSERT_TRUE(bt_callbacks != nullptr);
for (int i = 0; i < kTestRepeatCount; ++i) {
- bt_interface()->init(bt_callbacks, false, false);
+ bt_interface()->init(bt_callbacks, false, false, false);
EXPECT_EQ(bt_interface()->enable(), BT_STATUS_SUCCESS);
semaphore_wait(adapter_state_changed_callback_sem_);
EXPECT_EQ(GetState(), BT_STATE_ON) << "Adapter did not turn on.";