[nearby] Enable BLE when init am: 6fca26676a
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2871066 Change-Id: I8ade1061642750bd3735d3bc116d5879b8ed1b41 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -21,6 +21,7 @@ import static android.nearby.ScanRequest.SCAN_TYPE_NEARBY_PRESENCE;
|
|||||||
import static com.android.server.nearby.NearbyService.TAG;
|
import static com.android.server.nearby.NearbyService.TAG;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.bluetooth.BluetoothAdapter;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.nearby.DataElement;
|
import android.nearby.DataElement;
|
||||||
import android.nearby.IScanListener;
|
import android.nearby.IScanListener;
|
||||||
@@ -141,6 +142,8 @@ 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();
|
||||||
}
|
}
|
||||||
@@ -313,4 +316,29 @@ public class DiscoveryProviderManager extends
|
|||||||
public void onMergedRegistrationsUpdated() {
|
public void onMergedRegistrationsUpdated() {
|
||||||
invalidateProviderScanMode();
|
invalidateProviderScanMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers Nearby service to Ble scan if Bluetooth is off. (Even when Bluetooth is off)
|
||||||
|
* @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() {
|
||||||
|
BluetoothAdapter adapter = mInjector.getBluetoothAdapter();
|
||||||
|
if (adapter == null) {
|
||||||
|
Log.e(TAG, "BluetoothAdapter is null.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (adapter.isEnabled() || adapter.isLeEnabled()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!adapter.isBleScanAlwaysAvailable()) {
|
||||||
|
Log.v(TAG, "Ble always on scan is disabled.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!adapter.enableBLE()) {
|
||||||
|
Log.e(TAG, "Failed to register Ble scan.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import static com.android.server.nearby.NearbyService.TAG;
|
|||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
|
import android.bluetooth.BluetoothAdapter;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.nearby.DataElement;
|
import android.nearby.DataElement;
|
||||||
import android.nearby.IScanListener;
|
import android.nearby.IScanListener;
|
||||||
@@ -220,6 +221,8 @@ 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();
|
||||||
}
|
}
|
||||||
@@ -503,4 +506,29 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
|
|||||||
unregisterScanListener(listener);
|
unregisterScanListener(listener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers Nearby service to Ble scan if Bluetooth is off. (Even when Bluetooth is off)
|
||||||
|
* @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() {
|
||||||
|
BluetoothAdapter adapter = mInjector.getBluetoothAdapter();
|
||||||
|
if (adapter == null) {
|
||||||
|
Log.e(TAG, "BluetoothAdapter is null.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (adapter.isEnabled() || adapter.isLeEnabled()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!adapter.isBleScanAlwaysAvailable()) {
|
||||||
|
Log.v(TAG, "Ble always on scan is disabled.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!adapter.enableBLE()) {
|
||||||
|
Log.e(TAG, "Failed to register Ble scan.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,12 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
|
|
||||||
import static org.mockito.Mockito.atLeastOnce;
|
import static org.mockito.Mockito.atLeastOnce;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
|
import android.bluetooth.BluetoothAdapter;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.nearby.DataElement;
|
import android.nearby.DataElement;
|
||||||
import android.nearby.IScanListener;
|
import android.nearby.IScanListener;
|
||||||
@@ -86,6 +88,8 @@ public class DiscoveryProviderManagerLegacyTest {
|
|||||||
DiscoveryProviderManagerLegacy.ScanListenerDeathRecipient mScanListenerDeathRecipient;
|
DiscoveryProviderManagerLegacy.ScanListenerDeathRecipient mScanListenerDeathRecipient;
|
||||||
@Mock
|
@Mock
|
||||||
IBinder mIBinder;
|
IBinder mIBinder;
|
||||||
|
@Mock
|
||||||
|
BluetoothAdapter mBluetoothAdapter;
|
||||||
private DiscoveryProviderManagerLegacy mDiscoveryProviderManager;
|
private DiscoveryProviderManagerLegacy mDiscoveryProviderManager;
|
||||||
private Map<IBinder, DiscoveryProviderManagerLegacy.ScanListenerRecord>
|
private Map<IBinder, DiscoveryProviderManagerLegacy.ScanListenerRecord>
|
||||||
mScanTypeScanListenerRecordMap;
|
mScanTypeScanListenerRecordMap;
|
||||||
@@ -137,8 +141,11 @@ public class DiscoveryProviderManagerLegacyTest {
|
|||||||
public void setup() {
|
public void setup() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
when(mInjector.getAppOpsManager()).thenReturn(mAppOpsManager);
|
when(mInjector.getAppOpsManager()).thenReturn(mAppOpsManager);
|
||||||
|
when(mInjector.getBluetoothAdapter()).thenReturn(mBluetoothAdapter);
|
||||||
when(mBleDiscoveryProvider.getController()).thenReturn(mBluetoothController);
|
when(mBleDiscoveryProvider.getController()).thenReturn(mBluetoothController);
|
||||||
when(mChreDiscoveryProvider.getController()).thenReturn(mChreController);
|
when(mChreDiscoveryProvider.getController()).thenReturn(mChreController);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(true);
|
||||||
|
|
||||||
mScanTypeScanListenerRecordMap = new HashMap<>();
|
mScanTypeScanListenerRecordMap = new HashMap<>();
|
||||||
mDiscoveryProviderManager =
|
mDiscoveryProviderManager =
|
||||||
@@ -163,6 +170,13 @@ public class DiscoveryProviderManagerLegacyTest {
|
|||||||
mDiscoveryProviderManager.invalidateProviderScanMode();
|
mDiscoveryProviderManager.invalidateProviderScanMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_enableBleWhenBleOff() throws Exception {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
mDiscoveryProviderManager.init();
|
||||||
|
verify(mBluetoothAdapter, times(1)).enableBLE();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testStartProviders_chreOnlyChreAvailable_bleProviderNotStarted() {
|
public void testStartProviders_chreOnlyChreAvailable_bleProviderNotStarted() {
|
||||||
when(mChreDiscoveryProvider.available()).thenReturn(true);
|
when(mChreDiscoveryProvider.available()).thenReturn(true);
|
||||||
@@ -375,4 +389,62 @@ public class DiscoveryProviderManagerLegacyTest {
|
|||||||
.isTrue();
|
.isTrue();
|
||||||
assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isNotNull();
|
assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isBluetoothEnabledTest_bluetoothEnabled() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isBluetoothEnabledTest_bleEnabled() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void enabledTest_enabled() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void enabledTest_enableFailed() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.enableBLE()).thenReturn(false);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void enabledTest_scanIsOn() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void enabledTest_failed() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,10 +24,12 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
import static org.mockito.Mockito.atLeastOnce;
|
import static org.mockito.Mockito.atLeastOnce;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.reset;
|
import static org.mockito.Mockito.reset;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
|
import android.bluetooth.BluetoothAdapter;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.nearby.DataElement;
|
import android.nearby.DataElement;
|
||||||
import android.nearby.IScanListener;
|
import android.nearby.IScanListener;
|
||||||
@@ -80,6 +82,8 @@ public class DiscoveryProviderManagerTest {
|
|||||||
CallerIdentity mCallerIdentity;
|
CallerIdentity mCallerIdentity;
|
||||||
@Mock
|
@Mock
|
||||||
IBinder mIBinder;
|
IBinder mIBinder;
|
||||||
|
@Mock
|
||||||
|
BluetoothAdapter mBluetoothAdapter;
|
||||||
private Executor mExecutor;
|
private Executor mExecutor;
|
||||||
private DiscoveryProviderManager mDiscoveryProviderManager;
|
private DiscoveryProviderManager mDiscoveryProviderManager;
|
||||||
|
|
||||||
@@ -134,6 +138,9 @@ public class DiscoveryProviderManagerTest {
|
|||||||
when(mBleDiscoveryProvider.getController()).thenReturn(mBluetoothController);
|
when(mBleDiscoveryProvider.getController()).thenReturn(mBluetoothController);
|
||||||
when(mChreDiscoveryProvider.getController()).thenReturn(mChreController);
|
when(mChreDiscoveryProvider.getController()).thenReturn(mChreController);
|
||||||
when(mScanListener.asBinder()).thenReturn(mIBinder);
|
when(mScanListener.asBinder()).thenReturn(mIBinder);
|
||||||
|
when(mInjector.getBluetoothAdapter()).thenReturn(mBluetoothAdapter);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(true);
|
||||||
|
|
||||||
mDiscoveryProviderManager =
|
mDiscoveryProviderManager =
|
||||||
new DiscoveryProviderManager(mContext, mExecutor, mInjector,
|
new DiscoveryProviderManager(mContext, mExecutor, mInjector,
|
||||||
@@ -156,6 +163,13 @@ public class DiscoveryProviderManagerTest {
|
|||||||
mDiscoveryProviderManager.invalidateProviderScanMode();
|
mDiscoveryProviderManager.invalidateProviderScanMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_enableBleWhenBleOff() throws Exception {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
mDiscoveryProviderManager.init();
|
||||||
|
verify(mBluetoothAdapter, times(1)).enableBLE();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testStartProviders_chreOnlyChreAvailable_bleProviderNotStarted() {
|
public void testStartProviders_chreOnlyChreAvailable_bleProviderNotStarted() {
|
||||||
reset(mBluetoothController);
|
reset(mBluetoothController);
|
||||||
@@ -336,4 +350,62 @@ public class DiscoveryProviderManagerTest {
|
|||||||
.isTrue();
|
.isTrue();
|
||||||
assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isNotNull();
|
assertThat(manager.mChreDiscoveryProvider.getFiltersLocked()).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isBluetoothEnabledTest_bluetoothEnabled() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isBluetoothEnabledTest_bleEnabled() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void enabledTest_enabled() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.enableBLE()).thenReturn(true);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void enabledTest_enableFailed() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.enableBLE()).thenReturn(false);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void enabledTest_scanIsOn() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(true);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void enabledTest_failed() {
|
||||||
|
when(mBluetoothAdapter.isEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isLeEnabled()).thenReturn(false);
|
||||||
|
when(mBluetoothAdapter.isBleScanAlwaysAvailable()).thenReturn(false);
|
||||||
|
|
||||||
|
assertThat(mDiscoveryProviderManager.setBleScanEnabled()).isFalse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user