[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 Change-Id: I24ca7581d60afee484d14f66a411344ce132425a
This commit is contained in:
@@ -142,8 +142,6 @@ public class DiscoveryProviderManager extends
|
||||
|
||||
/** 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 @@ public class DiscoveryProviderManager extends
|
||||
@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 @@ public class DiscoveryProviderManager extends
|
||||
* @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 @@ public class DiscoveryProviderManager extends
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,8 +221,6 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
|
||||
|
||||
/** 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 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
|
||||
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 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
|
||||
}
|
||||
}
|
||||
|
||||
private void stopProviders() {
|
||||
@VisibleForTesting
|
||||
protected void stopProviders() {
|
||||
disableBle();
|
||||
stopBleProvider();
|
||||
stopChreProvider();
|
||||
}
|
||||
@@ -512,7 +515,7 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
|
||||
* @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 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,7 +173,10 @@ public class DiscoveryProviderManagerLegacyTest {
|
||||
@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 @@ public class DiscoveryProviderManagerLegacyTest {
|
||||
.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 @@ public class DiscoveryProviderManagerLegacyTest {
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -407,7 +411,7 @@ public class DiscoveryProviderManagerLegacyTest {
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -417,7 +421,7 @@ public class DiscoveryProviderManagerLegacyTest {
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -427,7 +431,7 @@ public class DiscoveryProviderManagerLegacyTest {
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||
when(mBluetoothAdapter.enableBLE()).thenReturn(false);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -436,7 +440,7 @@ public class DiscoveryProviderManagerLegacyTest {
|
||||
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -445,6 +449,6 @@ public class DiscoveryProviderManagerLegacyTest {
|
||||
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,10 +166,25 @@ public class DiscoveryProviderManagerTest {
|
||||
@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);
|
||||
@@ -358,7 +373,7 @@ public class DiscoveryProviderManagerTest {
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -368,7 +383,7 @@ public class DiscoveryProviderManagerTest {
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -378,7 +393,7 @@ public class DiscoveryProviderManagerTest {
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -388,7 +403,7 @@ public class DiscoveryProviderManagerTest {
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||
when(mBluetoothAdapter.enableBLE()).thenReturn(false);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -397,7 +412,7 @@ public class DiscoveryProviderManagerTest {
|
||||
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -406,6 +421,6 @@ public class DiscoveryProviderManagerTest {
|
||||
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
|
||||
|
||||
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
|
||||
assertThat(mDiscoveryProviderManager.enableBle()).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user