[nearby] Add disable logic am: 164969d600 am: 63d4d8ca91

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2871068

Change-Id: I629a70fd6758f3c5a37210a28cb9ad0e08a3ff8f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Xinyi Zhou
2023-12-13 21:14:48 +00:00
committed by Automerger Merge Worker
4 changed files with 72 additions and 22 deletions

View File

@@ -142,8 +142,6 @@ public class DiscoveryProviderManager extends
/** Called after boot completed. */ /** Called after boot completed. */
public void init() { public void init() {
// Register BLE only scan when Bluetooth is turned off
setBleScanEnabled();
if (mInjector.getContextHubManager() != null) { if (mInjector.getContextHubManager() != null) {
mChreDiscoveryProvider.init(); mChreDiscoveryProvider.init();
} }
@@ -167,12 +165,14 @@ public class DiscoveryProviderManager extends
@Override @Override
public void onRegister() { public void onRegister() {
Log.v(TAG, "Registering the DiscoveryProviderManager."); Log.v(TAG, "Registering the DiscoveryProviderManager.");
enableBle();
startProviders(); startProviders();
} }
@Override @Override
public void onUnregister() { public void onUnregister() {
Log.v(TAG, "Unregistering the DiscoveryProviderManager."); Log.v(TAG, "Unregistering the DiscoveryProviderManager.");
disableBle();
stopProviders(); stopProviders();
} }
@@ -322,7 +322,7 @@ public class DiscoveryProviderManager extends
* @return {@code true} when Nearby currently can scan through Bluetooth or Ble or successfully * @return {@code true} when Nearby currently can scan through Bluetooth or Ble or successfully
* registers Nearby service to Ble scan when Blutooth is off. * registers Nearby service to Ble scan when Blutooth is off.
*/ */
public boolean setBleScanEnabled() { public boolean enableBle() {
BluetoothAdapter adapter = mInjector.getBluetoothAdapter(); BluetoothAdapter adapter = mInjector.getBluetoothAdapter();
if (adapter == null) { if (adapter == null) {
Log.e(TAG, "BluetoothAdapter is null."); Log.e(TAG, "BluetoothAdapter is null.");
@@ -341,4 +341,18 @@ public class DiscoveryProviderManager extends
} }
return true; 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();
}
} }

View File

@@ -221,8 +221,6 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
/** Called after boot completed. */ /** Called after boot completed. */
public void init() { public void init() {
// Register BLE only scan when Bluetooth is turned off
setBleScanEnabled();
if (mInjector.getContextHubManager() != null) { if (mInjector.getContextHubManager() != null) {
mChreDiscoveryProvider.init(); mChreDiscoveryProvider.init();
} }
@@ -346,6 +344,9 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
Log.w(TAG, "failed to start any provider because client disabled BLE"); Log.w(TAG, "failed to start any provider because client disabled BLE");
return false; return false;
} }
if (!enableBle()) {
return false;
}
List<ScanFilter> scanFilters = getPresenceScanFilters(); List<ScanFilter> scanFilters = getPresenceScanFilters();
boolean chreOnly = isChreOnly(scanFilters); boolean chreOnly = isChreOnly(scanFilters);
Boolean chreAvailable = mChreDiscoveryProvider.available(); Boolean chreAvailable = mChreDiscoveryProvider.available();
@@ -413,7 +414,9 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
} }
} }
private void stopProviders() { @VisibleForTesting
protected void stopProviders() {
disableBle();
stopBleProvider(); stopBleProvider();
stopChreProvider(); stopChreProvider();
} }
@@ -512,7 +515,7 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
* @return {@code true} when Nearby currently can scan through Bluetooth or Ble or successfully * @return {@code true} when Nearby currently can scan through Bluetooth or Ble or successfully
* registers Nearby service to Ble scan when Blutooth is off. * registers Nearby service to Ble scan when Blutooth is off.
*/ */
public boolean setBleScanEnabled() { public boolean enableBle() {
BluetoothAdapter adapter = mInjector.getBluetoothAdapter(); BluetoothAdapter adapter = mInjector.getBluetoothAdapter();
if (adapter == null) { if (adapter == null) {
Log.e(TAG, "BluetoothAdapter is null."); Log.e(TAG, "BluetoothAdapter is null.");
@@ -531,4 +534,18 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
} }
return true; 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();
}
} }

View File

@@ -173,7 +173,10 @@ public class DiscoveryProviderManagerLegacyTest {
@Test @Test
public void test_enableBleWhenBleOff() throws Exception { public void test_enableBleWhenBleOff() throws Exception {
when(mBluetoothAdapter.isEnabled()).thenReturn(false); 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(); verify(mBluetoothAdapter, times(1)).enableBLE();
} }
@@ -333,9 +336,10 @@ public class DiscoveryProviderManagerLegacyTest {
.isTrue(); .isTrue();
assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isNotNull(); assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isNotNull();
manager.stopChreProvider(); manager.stopProviders();
Thread.sleep(200); Thread.sleep(200);
// The filters should be cleared right after. // The filters should be cleared right after.
verify(mBluetoothAdapter, times(1)).disableBLE();
assertThat(manager.mChreDiscoveryProvider.getController().isStarted()) assertThat(manager.mChreDiscoveryProvider.getController().isStarted())
.isFalse(); .isFalse();
assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isEmpty(); assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isEmpty();
@@ -397,7 +401,7 @@ public class DiscoveryProviderManagerLegacyTest {
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true); when(mBluetoothAdapter.enableBLE()).thenReturn(true);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue(); assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
} }
@Test @Test
@@ -407,7 +411,7 @@ public class DiscoveryProviderManagerLegacyTest {
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true); when(mBluetoothAdapter.enableBLE()).thenReturn(true);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue(); assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
} }
@Test @Test
@@ -417,7 +421,7 @@ public class DiscoveryProviderManagerLegacyTest {
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true); when(mBluetoothAdapter.enableBLE()).thenReturn(true);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue(); assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
} }
@Test @Test
@@ -427,7 +431,7 @@ public class DiscoveryProviderManagerLegacyTest {
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(false); when(mBluetoothAdapter.enableBLE()).thenReturn(false);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse(); assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
} }
@Test @Test
@@ -436,7 +440,7 @@ public class DiscoveryProviderManagerLegacyTest {
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false); when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue(); assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
} }
@Test @Test
@@ -445,6 +449,6 @@ public class DiscoveryProviderManagerLegacyTest {
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false); when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse(); assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
} }
} }

View File

@@ -166,10 +166,25 @@ public class DiscoveryProviderManagerTest {
@Test @Test
public void test_enableBleWhenBleOff() throws Exception { public void test_enableBleWhenBleOff() throws Exception {
when(mBluetoothAdapter.isEnabled()).thenReturn(false); 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(); 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 @Test
public void testStartProviders_chreOnlyChreAvailable_bleProviderNotStarted() { public void testStartProviders_chreOnlyChreAvailable_bleProviderNotStarted() {
reset(mBluetoothController); reset(mBluetoothController);
@@ -358,7 +373,7 @@ public class DiscoveryProviderManagerTest {
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true); when(mBluetoothAdapter.enableBLE()).thenReturn(true);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue(); assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
} }
@Test @Test
@@ -368,7 +383,7 @@ public class DiscoveryProviderManagerTest {
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true); when(mBluetoothAdapter.enableBLE()).thenReturn(true);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue(); assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
} }
@Test @Test
@@ -378,7 +393,7 @@ public class DiscoveryProviderManagerTest {
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(true); when(mBluetoothAdapter.enableBLE()).thenReturn(true);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue(); assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
} }
@Test @Test
@@ -388,7 +403,7 @@ public class DiscoveryProviderManagerTest {
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
when(mBluetoothAdapter.enableBLE()).thenReturn(false); when(mBluetoothAdapter.enableBLE()).thenReturn(false);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse(); assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
} }
@Test @Test
@@ -397,7 +412,7 @@ public class DiscoveryProviderManagerTest {
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false); when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue(); assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
} }
@Test @Test
@@ -406,6 +421,6 @@ public class DiscoveryProviderManagerTest {
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false); when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false); when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse(); assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
} }
} }