[nearby] Add nearby_enable_ble_in_init flag

Bug: 312430336
Ignore-AOSP-First: nearby_not_in_aosp_yet
Test: -m
Change-Id: I5bafa8a85d4f2169fcdef73e2d9f21534553ff72
This commit is contained in:
Xinyi Zhou
2023-11-28 11:49:02 -08:00
parent 5cff79392b
commit fc084ea87c
5 changed files with 42 additions and 2 deletions

View File

@@ -54,6 +54,11 @@ public class NearbyConfiguration {
public static final String NEARBY_REFACTOR_DISCOVERY_MANAGER =
"nearby_refactor_discovery_manager";
/**
* Flag to guard enable BLE during Nearby Service init time.
*/
public static final String NEARBY_ENABLE_BLE_IN_INIT = "nearby_enable_ble_in_init";
private static final boolean IS_USER_BUILD = "user".equals(Build.TYPE);
private final DeviceConfigListener mDeviceConfigListener = new DeviceConfigListener();
@@ -67,6 +72,8 @@ public class NearbyConfiguration {
private boolean mSupportTestApp;
@GuardedBy("mDeviceConfigLock")
private boolean mRefactorDiscoveryManager;
@GuardedBy("mDeviceConfigLock")
private boolean mEnableBleInInit;
public NearbyConfiguration() {
mDeviceConfigListener.start();
@@ -131,6 +138,15 @@ public class NearbyConfiguration {
}
}
/**
* @return {@code true} if enableBLE() is called during NearbyService init time.
*/
public boolean enableBleInInit() {
synchronized (mDeviceConfigLock) {
return mEnableBleInInit;
}
}
private class DeviceConfigListener implements DeviceConfig.OnPropertiesChangedListener {
public void start() {
DeviceConfig.addOnPropertiesChangedListener(getNamespace(),
@@ -149,6 +165,8 @@ public class NearbyConfiguration {
NEARBY_SUPPORT_TEST_APP, false /* defaultValue */);
mRefactorDiscoveryManager = getDeviceConfigBoolean(
NEARBY_REFACTOR_DISCOVERY_MANAGER, false /* defaultValue */);
mEnableBleInInit = getDeviceConfigBoolean(
NEARBY_ENABLE_BLE_IN_INIT, true /* defaultValue */);
}
}
}

View File

@@ -36,6 +36,7 @@ import android.util.Log;
import androidx.annotation.NonNull;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.nearby.NearbyConfiguration;
import com.android.server.nearby.injector.Injector;
import com.android.server.nearby.managers.registration.DiscoveryRegistration;
import com.android.server.nearby.provider.AbstractDiscoveryProvider;
@@ -67,6 +68,7 @@ public class DiscoveryProviderManager extends
private final BleDiscoveryProvider mBleDiscoveryProvider;
private final Injector mInjector;
private final Executor mExecutor;
private final NearbyConfiguration mNearbyConfiguration;
public DiscoveryProviderManager(Context context, Injector injector) {
Log.v(TAG, "DiscoveryProviderManager: ");
@@ -76,6 +78,7 @@ public class DiscoveryProviderManager extends
mChreDiscoveryProvider = new ChreDiscoveryProvider(mContext,
new ChreCommunication(injector, mContext, mExecutor), mExecutor);
mInjector = injector;
mNearbyConfiguration = new NearbyConfiguration();
}
@VisibleForTesting
@@ -87,6 +90,7 @@ public class DiscoveryProviderManager extends
mInjector = injector;
mBleDiscoveryProvider = bleDiscoveryProvider;
mChreDiscoveryProvider = chreDiscoveryProvider;
mNearbyConfiguration = new NearbyConfiguration();
}
private static boolean isChreOnly(Set<ScanFilter> scanFilters) {
@@ -143,7 +147,9 @@ public class DiscoveryProviderManager extends
/** Called after boot completed. */
public void init() {
// Register BLE only scan when Bluetooth is turned off
setBleScanEnabled();
if (mNearbyConfiguration.enableBleInInit()) {
setBleScanEnabled();
}
if (mInjector.getContextHubManager() != null) {
mChreDiscoveryProvider.init();
}

View File

@@ -39,6 +39,7 @@ import android.util.Log;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.nearby.NearbyConfiguration;
import com.android.server.nearby.injector.Injector;
import com.android.server.nearby.metrics.NearbyMetrics;
import com.android.server.nearby.presence.PresenceDiscoveryResult;
@@ -70,6 +71,7 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
private final Context mContext;
private final BleDiscoveryProvider mBleDiscoveryProvider;
private final Injector mInjector;
private final NearbyConfiguration mNearbyConfiguration;
@ScanRequest.ScanMode
private int mScanMode;
@GuardedBy("mLock")
@@ -84,6 +86,7 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
mContext, new ChreCommunication(injector, mContext, executor), executor);
mScanTypeScanListenerRecordMap = new HashMap<>();
mInjector = injector;
mNearbyConfiguration = new NearbyConfiguration();
Log.v(TAG, "DiscoveryProviderManagerLegacy: ");
}
@@ -97,6 +100,7 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
mBleDiscoveryProvider = bleDiscoveryProvider;
mChreDiscoveryProvider = chreDiscoveryProvider;
mScanTypeScanListenerRecordMap = scanTypeScanListenerRecordMap;
mNearbyConfiguration = new NearbyConfiguration();
}
private static boolean isChreOnly(List<ScanFilter> scanFilters) {
@@ -222,7 +226,9 @@ public class DiscoveryProviderManagerLegacy implements AbstractDiscoveryProvider
/** Called after boot completed. */
public void init() {
// Register BLE only scan when Bluetooth is turned off
setBleScanEnabled();
if (mNearbyConfiguration.enableBleInInit()) {
setBleScanEnabled();
}
if (mInjector.getContextHubManager() != null) {
mChreDiscoveryProvider.init();
}

View File

@@ -16,6 +16,7 @@
package com.android.server.nearby.managers;
import static android.Manifest.permission.READ_DEVICE_CONFIG;
import static android.nearby.PresenceCredential.IDENTITY_TYPE_PRIVATE;
import static android.nearby.ScanRequest.SCAN_TYPE_NEARBY_PRESENCE;
@@ -38,6 +39,8 @@ import android.nearby.PublicCredential;
import android.nearby.ScanRequest;
import android.os.IBinder;
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.server.nearby.injector.Injector;
import com.android.server.nearby.provider.BleDiscoveryProvider;
import com.android.server.nearby.provider.ChreCommunication;
@@ -139,6 +142,8 @@ public class DiscoveryProviderManagerLegacyTest {
@Before
public void setup() {
InstrumentationRegistry.getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
READ_DEVICE_CONFIG);
MockitoAnnotations.initMocks(this);
when(mInjector.getAppOpsManager()).thenReturn(mAppOpsManager);
when(mInjector.getBluetoothAdapter()).thenReturn(mBluetoothAdapter);

View File

@@ -16,6 +16,7 @@
package com.android.server.nearby.managers;
import static android.Manifest.permission.READ_DEVICE_CONFIG;
import static android.nearby.PresenceCredential.IDENTITY_TYPE_PRIVATE;
import static android.nearby.ScanRequest.SCAN_TYPE_NEARBY_PRESENCE;
@@ -39,6 +40,8 @@ import android.nearby.PublicCredential;
import android.nearby.ScanRequest;
import android.os.IBinder;
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.server.nearby.injector.Injector;
import com.android.server.nearby.provider.BleDiscoveryProvider;
import com.android.server.nearby.provider.ChreCommunication;
@@ -132,6 +135,8 @@ public class DiscoveryProviderManagerTest {
@Before
public void setup() {
InstrumentationRegistry.getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
READ_DEVICE_CONFIG);
MockitoAnnotations.initMocks(this);
mExecutor = Executors.newSingleThreadExecutor();
when(mInjector.getAppOpsManager()).thenReturn(mAppOpsManager);