[nearby] Add nearby_enable_ble_in_init flag

Bug: 312430336
Ignore-AOSP-First: nearby_not_in_aosp_yet
Test: -m
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:fc084ea87ce18275c788c21ba9018636dfdff5e0)
Merged-In: I5bafa8a85d4f2169fcdef73e2d9f21534553ff72
Change-Id: I5bafa8a85d4f2169fcdef73e2d9f21534553ff72
This commit is contained in:
Xinyi Zhou
2023-12-12 19:53:31 +00:00
parent 11234fe8c1
commit f83d4df182
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 = public static final String NEARBY_REFACTOR_DISCOVERY_MANAGER =
"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 static final boolean IS_USER_BUILD = "user".equals(Build.TYPE);
private final DeviceConfigListener mDeviceConfigListener = new DeviceConfigListener(); private final DeviceConfigListener mDeviceConfigListener = new DeviceConfigListener();
@@ -67,6 +72,8 @@ public class NearbyConfiguration {
private boolean mSupportTestApp; private boolean mSupportTestApp;
@GuardedBy("mDeviceConfigLock") @GuardedBy("mDeviceConfigLock")
private boolean mRefactorDiscoveryManager; private boolean mRefactorDiscoveryManager;
@GuardedBy("mDeviceConfigLock")
private boolean mEnableBleInInit;
public NearbyConfiguration() { public NearbyConfiguration() {
mDeviceConfigListener.start(); 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 { private class DeviceConfigListener implements DeviceConfig.OnPropertiesChangedListener {
public void start() { public void start() {
DeviceConfig.addOnPropertiesChangedListener(getNamespace(), DeviceConfig.addOnPropertiesChangedListener(getNamespace(),
@@ -149,6 +165,8 @@ public class NearbyConfiguration {
NEARBY_SUPPORT_TEST_APP, false /* defaultValue */); NEARBY_SUPPORT_TEST_APP, false /* defaultValue */);
mRefactorDiscoveryManager = getDeviceConfigBoolean( mRefactorDiscoveryManager = getDeviceConfigBoolean(
NEARBY_REFACTOR_DISCOVERY_MANAGER, false /* defaultValue */); 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 androidx.annotation.NonNull;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.server.nearby.NearbyConfiguration;
import com.android.server.nearby.injector.Injector; import com.android.server.nearby.injector.Injector;
import com.android.server.nearby.managers.registration.DiscoveryRegistration; import com.android.server.nearby.managers.registration.DiscoveryRegistration;
import com.android.server.nearby.provider.AbstractDiscoveryProvider; import com.android.server.nearby.provider.AbstractDiscoveryProvider;
@@ -67,6 +68,7 @@ public class DiscoveryProviderManager extends
private final BleDiscoveryProvider mBleDiscoveryProvider; private final BleDiscoveryProvider mBleDiscoveryProvider;
private final Injector mInjector; private final Injector mInjector;
private final Executor mExecutor; private final Executor mExecutor;
private final NearbyConfiguration mNearbyConfiguration;
public DiscoveryProviderManager(Context context, Injector injector) { public DiscoveryProviderManager(Context context, Injector injector) {
Log.v(TAG, "DiscoveryProviderManager: "); Log.v(TAG, "DiscoveryProviderManager: ");
@@ -76,6 +78,7 @@ public class DiscoveryProviderManager extends
mChreDiscoveryProvider = new ChreDiscoveryProvider(mContext, mChreDiscoveryProvider = new ChreDiscoveryProvider(mContext,
new ChreCommunication(injector, mContext, mExecutor), mExecutor); new ChreCommunication(injector, mContext, mExecutor), mExecutor);
mInjector = injector; mInjector = injector;
mNearbyConfiguration = new NearbyConfiguration();
} }
@VisibleForTesting @VisibleForTesting
@@ -87,6 +90,7 @@ public class DiscoveryProviderManager extends
mInjector = injector; mInjector = injector;
mBleDiscoveryProvider = bleDiscoveryProvider; mBleDiscoveryProvider = bleDiscoveryProvider;
mChreDiscoveryProvider = chreDiscoveryProvider; mChreDiscoveryProvider = chreDiscoveryProvider;
mNearbyConfiguration = new NearbyConfiguration();
} }
private static boolean isChreOnly(Set<ScanFilter> scanFilters) { private static boolean isChreOnly(Set<ScanFilter> scanFilters) {
@@ -143,7 +147,9 @@ 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 // Register BLE only scan when Bluetooth is turned off
if (mNearbyConfiguration.enableBleInInit()) {
setBleScanEnabled(); setBleScanEnabled();
}
if (mInjector.getContextHubManager() != null) { if (mInjector.getContextHubManager() != null) {
mChreDiscoveryProvider.init(); mChreDiscoveryProvider.init();
} }

View File

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

View File

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

View File

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