Snap for 8857176 from 0f059ddb1d96a7ec27cdc328cc0ec195cfa6a0df to mainline-go-adbd-release
Change-Id: Ibf771a665c952568841e0c31b450392472088e46
diff --git a/AndroidTestTemplate.xml b/AndroidTestTemplate.xml
index 4fb4bf9..cca8d73 100644
--- a/AndroidTestTemplate.xml
+++ b/AndroidTestTemplate.xml
@@ -38,6 +38,6 @@
<!-- Only run tests in MTS if the Bluetooth Mainline module is installed. -->
<object type="module_controller"
class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
- <option name="mainline-module-package-name" value="com.google.android.bluetooth" />
+ <option name="mainline-module-package-name" value="com.android.btservices" />
</object>
</configuration>
diff --git a/android/app/src/com/android/bluetooth/btservice/AdapterService.java b/android/app/src/com/android/bluetooth/btservice/AdapterService.java
index 0251a22..f44b6d4 100644
--- a/android/app/src/com/android/bluetooth/btservice/AdapterService.java
+++ b/android/app/src/com/android/bluetooth/btservice/AdapterService.java
@@ -3881,7 +3881,7 @@
if (deviceProp != null && deviceProp.isConsolidated()) {
return deviceProp.getIdentityAddress();
} else {
- return null;
+ return address;
}
}
diff --git a/android/app/tests/unit/AndroidTest.xml b/android/app/tests/unit/AndroidTest.xml
index 97f1b8b..981e0a8 100644
--- a/android/app/tests/unit/AndroidTest.xml
+++ b/android/app/tests/unit/AndroidTest.xml
@@ -38,6 +38,6 @@
<!-- Only run Cts Tests in MTS if the Bluetooth Mainline module is installed. -->
<object type="module_controller"
class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
- <option name="mainline-module-package-name" value="com.google.android.bluetooth" />
+ <option name="mainline-module-package-name" value="com.android.btservices" />
</object>
</configuration>
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java
index a18cfff..042480d 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java
@@ -853,22 +853,19 @@
@Test
public void testAddressConsolidation() {
- // Verify that we return null when the device property for this address does not exist
- Assert.assertNull(mAdapterService.getIdentityAddress(TEST_BT_ADDR_1));
-
- // Create device property
+ // Create device properties
RemoteDevices remoteDevices = mAdapterService.getRemoteDevices();
remoteDevices.addDeviceProperties(Utils.getBytesFromAddress((TEST_BT_ADDR_1)));
-
- // Verify that we return null when the identity address is not known
- Assert.assertNull(mAdapterService.getIdentityAddress(TEST_BT_ADDR_1));
+ String identityAddress = mAdapterService.getIdentityAddress(TEST_BT_ADDR_1);
+ Assert.assertEquals(identityAddress, TEST_BT_ADDR_1);
// Trigger address consolidate callback
remoteDevices.addressConsolidateCallback(Utils.getBytesFromAddress(TEST_BT_ADDR_1),
Utils.getBytesFromAddress(TEST_BT_ADDR_2));
// Verify we can get correct identity address
- Assert.assertEquals(TEST_BT_ADDR_2, mAdapterService.getIdentityAddress(TEST_BT_ADDR_1));
+ identityAddress = mAdapterService.getIdentityAddress(TEST_BT_ADDR_1);
+ Assert.assertEquals(identityAddress, TEST_BT_ADDR_2);
}
private static byte[] getMetricsSalt(HashMap<String, HashMap<String, String>> adapterConfig) {
diff --git a/apex/Android.bp b/apex/Android.bp
index 3026a4c..82f74d9 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -80,7 +80,7 @@
],
key: "com.android.btservices.key",
certificate: ":com.android.btservices.certificate",
- updatable: false,
+ updatable: true,
compressible: false,
}
@@ -97,8 +97,11 @@
sdk {
name: "btservices-module-sdk",
- bootclasspath_fragments: ["com.android.btservices-bootclasspath-fragment"],
- systemserverclasspath_fragments: ["com.android.btservices-systemserverclasspath-fragment"],
+ apexes: [
+ // Adds exportable dependencies of the APEX to the sdk,
+ // e.g. *classpath_fragments.
+ "com.android.btservices",
+ ],
}
// Encapsulate the contributions made by the com.android.bluetooth to the bootclasspath.
diff --git a/framework/java/android/bluetooth/BluetoothDevice.java b/framework/java/android/bluetooth/BluetoothDevice.java
index e7a6ea0..5c91c94 100644
--- a/framework/java/android/bluetooth/BluetoothDevice.java
+++ b/framework/java/android/bluetooth/BluetoothDevice.java
@@ -1477,8 +1477,7 @@
* Returns the identity address of this BluetoothDevice.
* <p> For example, "00:11:22:AA:BB:CC".
*
- * @return this device's identity address as a string or {@code null} if the identity
- * address is either not known or is unable to be retrieved
+ * @return Bluetooth identity address as a string
* @hide
*/
@SystemApi
diff --git a/framework/tests/AndroidTest.xml b/framework/tests/AndroidTest.xml
index ed89c16..fd583b3 100644
--- a/framework/tests/AndroidTest.xml
+++ b/framework/tests/AndroidTest.xml
@@ -33,6 +33,6 @@
<!-- Only run BluetoothTests in MTS if the Bluetooth Mainline module is installed. -->
<object type="module_controller"
class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
- <option name="mainline-module-package-name" value="com.google.android.bluetooth" />
+ <option name="mainline-module-package-name" value="com.android.btservices" />
</object>
</configuration>
diff --git a/service/java/com/android/server/bluetooth/BluetoothManagerService.java b/service/java/com/android/server/bluetooth/BluetoothManagerService.java
index 042a435..dda3f04 100644
--- a/service/java/com/android/server/bluetooth/BluetoothManagerService.java
+++ b/service/java/com/android/server/bluetooth/BluetoothManagerService.java
@@ -56,6 +56,7 @@
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.ContentObserver;
@@ -2892,24 +2893,56 @@
*/
private void updateOppLauncherComponentState(UserHandle userHandle,
boolean bluetoothSharingDisallowed) {
- final ComponentName oppLauncherComponent = new ComponentName(
- mContext.getPackageManager().getPackagesForUid(Process.BLUETOOTH_UID)[0],
- "com.android.bluetooth.opp.BluetoothOppLauncherActivity");
- int newState;
- if (bluetoothSharingDisallowed) {
- newState = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
- } else if (BluetoothProperties.isProfileOppEnabled().orElse(false)) {
- newState = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
- } else {
- newState = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
- }
try {
- mContext.createContextAsUser(userHandle, 0)
- .getPackageManager()
- .setComponentEnabledSetting(oppLauncherComponent, newState,
- PackageManager.DONT_KILL_APP);
+ int newState;
+ if (bluetoothSharingDisallowed) {
+ newState = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+ } else if (BluetoothProperties.isProfileOppEnabled().orElse(false)) {
+ newState = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+ } else {
+ newState = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ }
+
+ String launcherActivity = "com.android.bluetooth.opp.BluetoothOppLauncherActivity";
+
+ PackageManager packageManager = mContext.createContextAsUser(userHandle, 0)
+ .getPackageManager();
+ var allPackages = packageManager.getPackagesForUid(Process.BLUETOOTH_UID);
+ for (String candidatePackage : allPackages) {
+ PackageInfo packageInfo;
+ try {
+ // note: we need the package manager for the SYSTEM user, not our userHandle
+ packageInfo = mContext.getPackageManager().getPackageInfo(
+ candidatePackage,
+ PackageManager.PackageInfoFlags.of(PackageManager.GET_ACTIVITIES));
+ } catch (PackageManager.NameNotFoundException e) {
+ // ignore, try next package
+ Log.e(TAG, "Could not find package " + candidatePackage);
+ continue;
+ } catch (Exception e) {
+ Log.e(TAG, "Error while loading package" + e);
+ continue;
+ }
+ if (packageInfo.activities == null) {
+ continue;
+ }
+ for (var activity : packageInfo.activities) {
+ if (launcherActivity.equals(activity.name)) {
+ final ComponentName oppLauncherComponent = new ComponentName(
+ candidatePackage, launcherActivity
+ );
+ packageManager.setComponentEnabledSetting(
+ oppLauncherComponent, newState, PackageManager.DONT_KILL_APP
+ );
+ return;
+ }
+ }
+ }
+
+ Log.e(TAG,
+ "Cannot toggle BluetoothOppLauncherActivity, could not find it in any package");
} catch (Exception e) {
- // The component was not found, do nothing.
+ Log.e(TAG, "updateOppLauncherComponentState failed: " + e);
}
}
diff --git a/service/tests/AndroidTest.xml b/service/tests/AndroidTest.xml
index c31c6cb..5be986f 100644
--- a/service/tests/AndroidTest.xml
+++ b/service/tests/AndroidTest.xml
@@ -21,7 +21,7 @@
<option name="test-suite-tag" value="apct" />
<option name="test-tag" value="ServiceBluetoothTests" />
<option name="config-descriptor:metadata" key="mainline-param"
- value="com.google.android.bluetooth.apex" />
+ value="com.google.android.btservices.apex" />
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
<option name="package" value="com.android.server.bluetooth.test" />
<option name="runner" value="com.android.server.bluetooth.CustomTestRunner" />
@@ -31,6 +31,6 @@
<!-- Only run ServiceBluetoothTests in MTS if the Bluetooth Mainline module is installed. -->
<object type="module_controller"
class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
- <option name="mainline-module-package-name" value="com.google.android.bluetooth" />
+ <option name="mainline-module-package-name" value="com.android.btservices" />
</object>
</configuration>
diff --git a/system/gd/AndroidTestTemplate.xml b/system/gd/AndroidTestTemplate.xml
index 4fb4bf9..cca8d73 100644
--- a/system/gd/AndroidTestTemplate.xml
+++ b/system/gd/AndroidTestTemplate.xml
@@ -38,6 +38,6 @@
<!-- Only run tests in MTS if the Bluetooth Mainline module is installed. -->
<object type="module_controller"
class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
- <option name="mainline-module-package-name" value="com.google.android.bluetooth" />
+ <option name="mainline-module-package-name" value="com.android.btservices" />
</object>
</configuration>
diff --git a/system/stack/gatt/gatt_utils.cc b/system/stack/gatt/gatt_utils.cc
index 991944a..661fc6f 100644
--- a/system/stack/gatt/gatt_utils.cc
+++ b/system/stack/gatt/gatt_utils.cc
@@ -1397,7 +1397,12 @@
/** Cancel LE Create Connection request */
bool gatt_cancel_open(tGATT_IF gatt_if, const RawAddress& bda) {
tGATT_TCB* p_tcb = gatt_find_tcb_by_addr(bda, BT_TRANSPORT_LE);
- if (!p_tcb) return true;
+ if (!p_tcb) {
+ LOG_WARN(
+ "Unable to cancel open for unknown connection gatt_if:%hhu peer:%s",
+ gatt_if, PRIVATE_ADDRESS(bda));
+ return true;
+ }
if (gatt_get_ch_state(p_tcb) == GATT_CH_OPEN) {
LOG(ERROR) << __func__ << ": link connected Too late to cancel";
@@ -1406,9 +1411,21 @@
gatt_update_app_use_link_flag(gatt_if, p_tcb, false, false);
- if (p_tcb->app_hold_link.empty()) gatt_disconnect(p_tcb);
+ if (p_tcb->app_hold_link.empty()) {
+ LOG_DEBUG(
+ "Client reference count is zero disconnecting device gatt_if:%hhu "
+ "peer:%s",
+ gatt_if, PRIVATE_ADDRESS(bda));
+ gatt_disconnect(p_tcb);
+ }
- connection_manager::direct_connect_remove(gatt_if, bda);
+ if (!connection_manager::direct_connect_remove(gatt_if, bda)) {
+ BTM_AcceptlistRemove(bda);
+ LOG_INFO(
+ "GATT connection manager has no record but removed filter acceptlist "
+ "gatt_if:%hhu peer:%s",
+ gatt_if, PRIVATE_ADDRESS(bda));
+ }
return true;
}