Pass whether the local device is an atv device to the native layer to
determine whether to include pairing dialogs for justworks and
encryption only LE pairing
Tag: #feature
Bug: 157038281
Test: Manual
Merged-In: Ib7575ff3d5f7e0c208743eff652440f7947dfed7
Change-Id: Ib7575ff3d5f7e0c208743eff652440f7947dfed7
(cherry picked from commit 9cfb9204e573b34da01415f32798cb5376f95555)
diff --git a/jni/com_android_bluetooth_btservice_AdapterService.cpp b/jni/com_android_bluetooth_btservice_AdapterService.cpp
index 0ac85f4..6262622 100644
--- a/jni/com_android_bluetooth_btservice_AdapterService.cpp
+++ b/jni/com_android_bluetooth_btservice_AdapterService.cpp
@@ -684,7 +684,7 @@
}
static bool initNative(JNIEnv* env, jobject obj, jboolean isGuest,
- jboolean isSingleUserMode) {
+ jboolean isSingleUserMode, jboolean isAtvDevice) {
ALOGV("%s", __func__);
android_bluetooth_UidTraffic.clazz =
@@ -700,7 +700,8 @@
int ret = sBluetoothInterface->init(&sBluetoothCallbacks,
isGuest == JNI_TRUE ? 1 : 0,
- isSingleUserMode == JNI_TRUE ? 1 : 0);
+ isSingleUserMode == JNI_TRUE ? 1 : 0,
+ isAtvDevice == JNI_TRUE ? 1 : 0);
if (ret != BT_STATUS_SUCCESS) {
ALOGE("Error while setting the callbacks: %d\n", ret);
sBluetoothInterface = NULL;
@@ -1240,7 +1241,7 @@
static JNINativeMethod sMethods[] = {
/* name, signature, funcPtr */
{"classInitNative", "()V", (void*)classInitNative},
- {"initNative", "(ZZ)Z", (void*)initNative},
+ {"initNative", "(ZZZ)Z", (void*)initNative},
{"cleanupNative", "()V", (void*)cleanupNative},
{"enableNative", "()Z", (void*)enableNative},
{"disableNative", "()Z", (void*)disableNative},
diff --git a/src/com/android/bluetooth/btservice/AdapterService.java b/src/com/android/bluetooth/btservice/AdapterService.java
index 2d3d69e..1d6c2e0 100644
--- a/src/com/android/bluetooth/btservice/AdapterService.java
+++ b/src/com/android/bluetooth/btservice/AdapterService.java
@@ -393,7 +393,11 @@
mAdapterProperties = new AdapterProperties(this);
mAdapterStateMachine = AdapterState.make(this);
mJniCallbacks = new JniCallbacks(this, mAdapterProperties);
- initNative(isGuest(), isSingleUserMode());
+
+ // Android TV doesn't show consent dialogs for just works and encryption only le pairing
+ boolean isAtvDevice = getApplicationContext().getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_LEANBACK_ONLY);
+ initNative(isGuest(), isSingleUserMode(), isAtvDevice);
mNativeAvailable = true;
mCallbacks = new RemoteCallbackList<IBluetoothCallback>();
mAppOps = getSystemService(AppOpsManager.class);
@@ -2891,7 +2895,8 @@
static native void classInitNative();
- native boolean initNative(boolean startRestricted, boolean isSingleUserMode);
+ native boolean initNative(boolean startRestricted, boolean isSingleUserMode,
+ boolean isAtvDevice);
native void cleanupNative();
diff --git a/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java b/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java
index 82fa163..2c8c9e2 100644
--- a/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java
+++ b/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java
@@ -101,7 +101,8 @@
}
Assert.assertNotNull(Looper.myLooper());
AdapterService adapterService = new AdapterService();
- adapterService.initNative(false /* is_restricted */, false /* is_single_user_mode */);
+ adapterService.initNative(false /* is_restricted */, false /* is_single_user_mode */,
+ false);
adapterService.cleanupNative();
HashMap<String, HashMap<String, String>> adapterConfig = TestUtils.readAdapterConfig();
Assert.assertNotNull(adapterConfig);
diff --git a/tests/unit/src/com/android/bluetooth/btservice/ProfileServiceTest.java b/tests/unit/src/com/android/bluetooth/btservice/ProfileServiceTest.java
index 6567398..5ddf14f 100644
--- a/tests/unit/src/com/android/bluetooth/btservice/ProfileServiceTest.java
+++ b/tests/unit/src/com/android/bluetooth/btservice/ProfileServiceTest.java
@@ -96,7 +96,8 @@
mProfiles = Config.getSupportedProfiles();
- mMockAdapterService.initNative(false /* is_restricted */, false /* is_single_user_mode */);
+ mMockAdapterService.initNative(false /* is_restricted */, false /* is_single_user_mode */,
+ false);
TestUtils.setAdapterService(mMockAdapterService);