[nearby] Add disable logic
Also moves enableBLE logic from init to when there is at least one
client
Test: -m
Bug: 294906731
Ignore-AOSP-First: nearby_not_in_aosp_yet
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:3f5aea69f9f36097b407822b0cc177c0df51f061)
Merged-In: I24ca7581d60afee484d14f66a411344ce132425a
Change-Id: I24ca7581d60afee484d14f66a411344ce132425a
diff --git a/nearby/service/java/com/android/server/nearby/managers/DiscoveryProviderManager.java b/nearby/service/java/com/android/server/nearby/managers/DiscoveryProviderManager.java
index 5c04a6c..fe952fe 100644
--- a/nearby/service/java/com/android/server/nearby/managers/DiscoveryProviderManager.java
+++ b/nearby/service/java/com/android/server/nearby/managers/DiscoveryProviderManager.java
@@ -142,8 +142,6 @@
/** Called after boot completed. */
public void init() {
- // Register BLE only scan when Bluetooth is turned off
- setBleScanEnabled();
if (mInjector.getContextHubManager() != null) {
mChreDiscoveryProvider.init();
}
@@ -167,12 +165,14 @@
@Override
public void onRegister() {
Log.v(TAG, "Registering the DiscoveryProviderManager.");
+ enableBle();
startProviders();
}
@Override
public void onUnregister() {
Log.v(TAG, "Unregistering the DiscoveryProviderManager.");
+ disableBle();
stopProviders();
}
@@ -322,7 +322,7 @@
* @return {@code true} when Nearby currently can scan through Bluetooth or Ble or successfully
* registers Nearby service to Ble scan when Blutooth is off.
*/
- public boolean setBleScanEnabled() {
+ public boolean enableBle() {
BluetoothAdapter adapter = mInjector.getBluetoothAdapter();
if (adapter == null) {
Log.e(TAG, "BluetoothAdapter is null.");
@@ -341,4 +341,18 @@
}
return true;
}
+
+ /**
+ * Unregisters Nearby service to Ble.
+ * Ble can be disabled when there is no app register the Ble service, so we can only to know we
+ * successfully unregister Ble by getting result from {@link BluetoothAdapter#disableBle()}.
+ */
+ public boolean disableBle() {
+ BluetoothAdapter adapter = mInjector.getBluetoothAdapter();
+ if (adapter == null) {
+ Log.e(TAG, "BluetoothAdapter is null.");
+ return false;
+ }
+ return adapter.disableBLE();
+ }
}
diff --git a/nearby/service/java/com/android/server/nearby/managers/DiscoveryProviderManagerLegacy.java b/nearby/service/java/com/android/server/nearby/managers/DiscoveryProviderManagerLegacy.java
index 549a6bf..65168d0 100644
--- a/nearby/service/java/com/android/server/nearby/managers/DiscoveryProviderManagerLegacy.java
+++ b/nearby/service/java/com/android/server/nearby/managers/DiscoveryProviderManagerLegacy.java
@@ -221,8 +221,6 @@
/** Called after boot completed. */
public void init() {
- // Register BLE only scan when Bluetooth is turned off
- setBleScanEnabled();
if (mInjector.getContextHubManager() != null) {
mChreDiscoveryProvider.init();
}
@@ -346,6 +344,9 @@
Log.w(TAG, "failed to start any provider because client disabled BLE");
return false;
}
+ if (!enableBle()) {
+ return false;
+ }
List<ScanFilter> scanFilters = getPresenceScanFilters();
boolean chreOnly = isChreOnly(scanFilters);
Boolean chreAvailable = mChreDiscoveryProvider.available();
@@ -413,7 +414,9 @@
}
}
- private void stopProviders() {
+ @VisibleForTesting
+ protected void stopProviders() {
+ disableBle();
stopBleProvider();
stopChreProvider();
}
@@ -512,7 +515,7 @@
* @return {@code true} when Nearby currently can scan through Bluetooth or Ble or successfully
* registers Nearby service to Ble scan when Blutooth is off.
*/
- public boolean setBleScanEnabled() {
+ public boolean enableBle() {
BluetoothAdapter adapter = mInjector.getBluetoothAdapter();
if (adapter == null) {
Log.e(TAG, "BluetoothAdapter is null.");
@@ -531,4 +534,18 @@
}
return true;
}
+
+ /**
+ * Unregisters Nearby service to Ble.
+ * Ble can be disabled when there is no app register the Ble service, so we can only to know we
+ * successfully unregister Ble by getting result from {@link BluetoothAdapter#disableBle()}.
+ */
+ public boolean disableBle() {
+ BluetoothAdapter adapter = mInjector.getBluetoothAdapter();
+ if (adapter == null) {
+ Log.e(TAG, "BluetoothAdapter is null.");
+ return false;
+ }
+ return adapter.disableBLE();
+ }
}
diff --git a/nearby/tests/unit/src/com/android/server/nearby/managers/DiscoveryProviderManagerLegacyTest.java b/nearby/tests/unit/src/com/android/server/nearby/managers/DiscoveryProviderManagerLegacyTest.java
index a8c30a8..c04cb38 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/managers/DiscoveryProviderManagerLegacyTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/managers/DiscoveryProviderManagerLegacyTest.java
@@ -173,7 +173,10 @@
@Test
public void test_enableBleWhenBleOff() throws Exception {
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
- mDiscoveryProviderManager.init();
+ ScanRequest scanRequest = new ScanRequest.Builder()
+ .setScanType(SCAN_TYPE_NEARBY_PRESENCE)
+ .addScanFilter(getChreOnlyPresenceScanFilter()).build();
+ mDiscoveryProviderManager.startProviders(scanRequest);
verify(mBluetoothAdapter, times(1)).enableBLE();
}
@@ -333,9 +336,10 @@
.isTrue();
assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isNotNull();
- manager.stopChreProvider();
+ manager.stopProviders();
Thread.sleep(200);
// The filters should be cleared right after.
+ verify(mBluetoothAdapter, times(1)).disableBLE();
assertThat(manager.mChreDiscoveryProvider.getController().isStarted())
.isFalse();
assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isEmpty();
@@ -397,7 +401,7 @@
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
+ assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
}
@Test
@@ -407,7 +411,7 @@
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
+ assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
}
@Test
@@ -417,7 +421,7 @@
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
+ assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
}
@Test
@@ -427,7 +431,7 @@
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(false);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
+ assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
}
@Test
@@ -436,7 +440,7 @@
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
+ assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
}
@Test
@@ -445,6 +449,6 @@
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
+ assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
}
}
diff --git a/nearby/tests/unit/src/com/android/server/nearby/managers/DiscoveryProviderManagerTest.java b/nearby/tests/unit/src/com/android/server/nearby/managers/DiscoveryProviderManagerTest.java
index b05893f..d747e59 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/managers/DiscoveryProviderManagerTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/managers/DiscoveryProviderManagerTest.java
@@ -166,11 +166,26 @@
@Test
public void test_enableBleWhenBleOff() throws Exception {
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
- mDiscoveryProviderManager.init();
+ ScanRequest scanRequest = new ScanRequest.Builder()
+ .setScanType(SCAN_TYPE_NEARBY_PRESENCE)
+ .addScanFilter(getChreOnlyPresenceScanFilter()).build();
+ mDiscoveryProviderManager.registerScanListener(scanRequest, mScanListener, mCallerIdentity);
verify(mBluetoothAdapter, times(1)).enableBLE();
}
@Test
+ public void test_disBleBleWhenNoClient() throws Exception {
+ when(mBluetoothAdapter.isEnabled()).thenReturn(false);
+ ScanRequest scanRequest = new ScanRequest.Builder()
+ .setScanType(SCAN_TYPE_NEARBY_PRESENCE)
+ .addScanFilter(getChreOnlyPresenceScanFilter()).build();
+ mDiscoveryProviderManager.registerScanListener(scanRequest, mScanListener, mCallerIdentity);
+ verify(mBluetoothAdapter, times(1)).enableBLE();
+ mDiscoveryProviderManager.unregisterScanListener(mScanListener);
+ verify(mBluetoothAdapter, times(1)).disableBLE();
+ }
+
+ @Test
public void testStartProviders_chreOnlyChreAvailable_bleProviderNotStarted() {
reset(mBluetoothController);
when(mChreDiscoveryProvider.available()).thenReturn(true);
@@ -358,7 +373,7 @@
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
+ assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
}
@Test
@@ -368,7 +383,7 @@
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
+ assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
}
@Test
@@ -378,7 +393,7 @@
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
+ assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
}
@Test
@@ -388,7 +403,7 @@
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(false);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
+ assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
}
@Test
@@ -397,7 +412,7 @@
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
+ assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
}
@Test
@@ -406,6 +421,6 @@
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
- assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
+ assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
}
}