summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author William Escande <wescande@google.com> 2025-03-06 00:57:19 -0800
committer William Escande <wescande@google.com> 2025-03-09 23:18:35 -0700
commitbcbc504255c5b3ddd91e78c13cfd2f593aa42351 (patch)
tree4768d769b1e39e9a91ce2d4930e99fa611a51c22
parent0e826869f6b2d5109f8145ca59aab11024206185 (diff)
25Q1 flag removal: get_state_from_system_server
Bug: 362569584 Fix: 362569584 Flag: com.android.bluetooth.flags.get_state_from_system_server Test: m com.android.bt Change-Id: I0156a3a4f7f60e4c1c44cb9245c52946e21f568c
-rw-r--r--android/app/src/com/android/bluetooth/btservice/AdapterService.java17
-rw-r--r--flags/system_service.aconfig10
-rw-r--r--framework/java/android/bluetooth/BluetoothAdapter.java66
-rw-r--r--service/src/AdapterState.kt5
-rw-r--r--service/src/airplane/ModeListenerTest.kt6
-rw-r--r--service/src/com/android/server/bluetooth/BluetoothServiceBinder.java11
-rw-r--r--service/tests/src/com/android/server/bluetooth/BluetoothServiceBinderTest.java17
7 files changed, 5 insertions, 127 deletions
diff --git a/android/app/src/com/android/bluetooth/btservice/AdapterService.java b/android/app/src/com/android/bluetooth/btservice/AdapterService.java
index 522d2821aa..9cc7148699 100644
--- a/android/app/src/com/android/bluetooth/btservice/AdapterService.java
+++ b/android/app/src/com/android/bluetooth/btservice/AdapterService.java
@@ -1115,14 +1115,6 @@ public class AdapterService extends Service {
}
}
- private static void invalidateBluetoothGetStateCache() {
- if (Flags.getStateFromSystemServer()) {
- // State is managed by the system server
- return;
- }
- BluetoothAdapter.invalidateBluetoothGetStateCache();
- }
-
void updateLeAudioProfileServiceState() {
Set<Integer> nonSupportedProfiles = new HashSet<>();
@@ -1193,7 +1185,6 @@ public class AdapterService extends Service {
void updateAdapterState(int prevState, int newState) {
mAdapterProperties.setState(newState);
- invalidateBluetoothGetStateCache();
// Only BluetoothManagerService should be registered
int n = mRemoteCallbacks.beginBroadcast();
@@ -1503,9 +1494,6 @@ public class AdapterService extends Service {
BluetoothAdapter.invalidateGetProfileConnectionStateCache();
BluetoothAdapter.invalidateIsOffloadedFilteringSupportedCache();
BluetoothDevice.invalidateBluetoothGetBondStateCache();
- if (!Flags.getStateFromSystemServer()) {
- BluetoothAdapter.invalidateBluetoothGetStateCache();
- }
BluetoothAdapter.invalidateGetAdapterConnectionStateCache();
BluetoothMap.invalidateBluetoothGetConnectionStateCache();
BluetoothSap.invalidateBluetoothGetConnectionStateCache();
@@ -2217,11 +2205,6 @@ public class AdapterService extends Service {
AdapterServiceBinder(AdapterService svc) {
mService = svc;
- if (Flags.getStateFromSystemServer()) {
- return;
- }
- mService.invalidateBluetoothGetStateCache();
- BluetoothAdapter.getDefaultAdapter().disableBluetoothGetStateCache();
}
public AdapterService getService() {
diff --git a/flags/system_service.aconfig b/flags/system_service.aconfig
index 65caf1e60c..cd9322c34d 100644
--- a/flags/system_service.aconfig
+++ b/flags/system_service.aconfig
@@ -12,16 +12,6 @@ flag {
}
flag {
- name: "get_state_from_system_server"
- namespace: "bluetooth"
- description: "Get Bluetooth state from system server instead of from Bluetooth app"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
- bug: "362569584"
-}
-
-flag {
name: "get_name_and_address_as_callback"
namespace: "bluetooth"
description: "Getting the name and address is a non-oneway call. Instead inform the system server with callback"
diff --git a/framework/java/android/bluetooth/BluetoothAdapter.java b/framework/java/android/bluetooth/BluetoothAdapter.java
index ac53cfdff8..7e1ee7ed0e 100644
--- a/framework/java/android/bluetooth/BluetoothAdapter.java
+++ b/framework/java/android/bluetooth/BluetoothAdapter.java
@@ -1435,25 +1435,6 @@ public final class BluetoothAdapter {
IpcDataCache.invalidateCache(IpcDataCache.MODULE_BLUETOOTH, api);
}
- private static final IpcDataCache.QueryHandler<IBluetooth, Integer> sBluetoothGetStateQuery =
- new IpcDataCache.QueryHandler<>() {
- @RequiresLegacyBluetoothPermission
- @RequiresNoPermission
- @Override
- public @InternalAdapterState Integer apply(IBluetooth serviceQuery) {
- try {
- return serviceQuery.getState();
- } catch (RemoteException e) {
- throw e.rethrowAsRuntimeException();
- }
- }
- @RequiresNoPermission
- @Override
- public boolean shouldBypassCache(IBluetooth serviceQuery) {
- return false;
- }
- };
-
private static final IpcDataCache.QueryHandler<Void, Integer> sBluetoothGetSystemStateQuery =
new IpcDataCache.QueryHandler<>() {
@RequiresNoPermission
@@ -1478,14 +1459,9 @@ public final class BluetoothAdapter {
}
};
- private static final String GET_STATE_API = "BluetoothAdapter_getState";
-
/** @hide */
public static final String GET_SYSTEM_STATE_API = IBluetoothManager.GET_SYSTEM_STATE_API;
- private static final IpcDataCache<IBluetooth, Integer> sBluetoothGetStateCache =
- new BluetoothCache<>(GET_STATE_API, sBluetoothGetStateQuery);
-
private static final IpcDataCache<Void, Integer> sBluetoothGetSystemStateCache =
new IpcDataCache<>(
1,
@@ -1494,44 +1470,6 @@ public final class BluetoothAdapter {
GET_SYSTEM_STATE_API,
sBluetoothGetSystemStateQuery);
- /** @hide */
- @RequiresNoPermission
- public void disableBluetoothGetStateCache() {
- if (Flags.getStateFromSystemServer()) {
- throw new IllegalStateException("getStateFromSystemServer is enabled");
- }
- sBluetoothGetStateCache.disableForCurrentProcess();
- }
-
- /** @hide */
- public static void invalidateBluetoothGetStateCache() {
- if (Flags.getStateFromSystemServer()) {
- throw new IllegalStateException("getStateFromSystemServer is enabled");
- }
- invalidateCache(GET_STATE_API);
- }
-
- /** Fetch the current bluetooth state. If the service is down, return OFF. */
- private @InternalAdapterState int getStateInternal() {
- if (Flags.getStateFromSystemServer()) {
- return sBluetoothGetSystemStateCache.query(null);
- }
- mServiceLock.readLock().lock();
- try {
- if (mService != null) {
- return sBluetoothGetStateCache.query(mService);
- }
- } catch (RuntimeException e) {
- if (!(e.getCause() instanceof RemoteException)) {
- throw e;
- }
- Log.e(TAG, e.toString() + "\n" + Log.getStackTraceString(new Throwable()));
- } finally {
- mServiceLock.readLock().unlock();
- }
- return STATE_OFF;
- }
-
/**
* Get the current state of the local Bluetooth adapter.
*
@@ -1543,7 +1481,7 @@ public final class BluetoothAdapter {
@RequiresLegacyBluetoothPermission
@RequiresNoPermission
public @AdapterState int getState() {
- int state = getStateInternal();
+ int state = sBluetoothGetSystemStateCache.query(null);
// Consider all internal states as OFF
if (state == BluetoothAdapter.STATE_BLE_ON
@@ -1584,7 +1522,7 @@ public final class BluetoothAdapter {
"Use {@link #getState()} instead to determine "
+ "whether you can use BLE & BT classic.")
public @InternalAdapterState int getLeState() {
- int state = getStateInternal();
+ int state = sBluetoothGetSystemStateCache.query(null);
if (VDBG) {
Log.d(TAG, "getLeState() returning " + BluetoothAdapter.nameForState(state));
diff --git a/service/src/AdapterState.kt b/service/src/AdapterState.kt
index ac52185c89..ef6900975e 100644
--- a/service/src/AdapterState.kt
+++ b/service/src/AdapterState.kt
@@ -20,7 +20,6 @@ import android.bluetooth.BluetoothAdapter.STATE_OFF
import android.bluetooth.IBluetoothManager.GET_SYSTEM_STATE_API
import android.bluetooth.IBluetoothManager.IPC_CACHE_MODULE_SYSTEM
import android.os.IpcDataCache
-import com.android.bluetooth.flags.Flags
import kotlin.time.Duration
import kotlin.time.toKotlinDuration
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -40,9 +39,7 @@ class BluetoothAdapterState {
fun set(s: Int) = runBlocking {
_uiState.emit(s)
- if (Flags.getStateFromSystemServer()) {
- IpcDataCache.invalidateCache(IPC_CACHE_MODULE_SYSTEM, GET_SYSTEM_STATE_API)
- }
+ IpcDataCache.invalidateCache(IPC_CACHE_MODULE_SYSTEM, GET_SYSTEM_STATE_API)
}
fun get(): Int = _uiState.replayCache.get(0)
diff --git a/service/src/airplane/ModeListenerTest.kt b/service/src/airplane/ModeListenerTest.kt
index b455b1122d..50f7f06a5c 100644
--- a/service/src/airplane/ModeListenerTest.kt
+++ b/service/src/airplane/ModeListenerTest.kt
@@ -26,7 +26,6 @@ import android.platform.test.flag.junit.FlagsParameterization
import android.platform.test.flag.junit.SetFlagsRule
import android.provider.Settings
import androidx.test.core.app.ApplicationProvider
-import com.android.bluetooth.flags.Flags
import com.android.server.bluetooth.BluetoothAdapterState
import com.android.server.bluetooth.Log
import com.android.server.bluetooth.airplane.APM_BT_ENABLED_NOTIFICATION
@@ -63,14 +62,13 @@ class ModeListenerTest(flags: FlagsParameterization) {
companion object {
@JvmStatic
@Parameters(name = "{0}")
- fun getParams() =
- FlagsParameterization.allCombinationsOf(Flags.FLAG_GET_STATE_FROM_SYSTEM_SERVER)
+ fun getParams() = FlagsParameterization.allCombinationsOf()
internal fun setupAirplaneModeToOn(
resolver: ContentResolver,
looper: Looper,
user: () -> Context,
- enableEnhancedMode: Boolean
+ enableEnhancedMode: Boolean,
) {
enableSensitive(resolver, looper, Settings.Global.AIRPLANE_MODE_RADIOS)
enableMode(resolver, looper, Settings.Global.AIRPLANE_MODE_ON)
diff --git a/service/src/com/android/server/bluetooth/BluetoothServiceBinder.java b/service/src/com/android/server/bluetooth/BluetoothServiceBinder.java
index bb0e951d96..99759d764d 100644
--- a/service/src/com/android/server/bluetooth/BluetoothServiceBinder.java
+++ b/service/src/com/android/server/bluetooth/BluetoothServiceBinder.java
@@ -44,8 +44,6 @@ import android.permission.PermissionManager;
import androidx.annotation.RequiresApi;
-import com.android.bluetooth.flags.Flags;
-
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -170,15 +168,6 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub {
@Override
public int getState() {
- if (Flags.getStateFromSystemServer()) {
- return mBluetoothManagerService.getState();
- }
- if (!isCallerSystem(getCallingAppId())
- && !mPermissionUtils.checkIfCallerIsForegroundUser(mUserManager)) {
- Log.w(TAG, "getState(): UNAUTHORIZED. Report OFF for non-active and non system user");
- return BluetoothAdapter.STATE_OFF;
- }
-
return mBluetoothManagerService.getState();
}
diff --git a/service/tests/src/com/android/server/bluetooth/BluetoothServiceBinderTest.java b/service/tests/src/com/android/server/bluetooth/BluetoothServiceBinderTest.java
index ec4abca34f..7ef4ec8887 100644
--- a/service/tests/src/com/android/server/bluetooth/BluetoothServiceBinderTest.java
+++ b/service/tests/src/com/android/server/bluetooth/BluetoothServiceBinderTest.java
@@ -49,16 +49,12 @@ import android.content.ContextWrapper;
import android.os.IBinder;
import android.os.Process;
import android.os.UserManager;
-import android.platform.test.annotations.DisableFlags;
-import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
-import com.android.bluetooth.flags.Flags;
-
import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
@@ -226,19 +222,6 @@ public class BluetoothServiceBinderTest {
}
@Test
- @DisableFlags(Flags.FLAG_GET_STATE_FROM_SYSTEM_SERVER)
- public void getState() {
- // TODO(b/280518177): add more test from not System / ...
- // TODO(b/280518177): add more test when caller is not in foreground
-
- mBinder.getState();
- verify(mManagerService).getState();
- verify(mUserManager).getProfileParent(any());
- verifyMock();
- }
-
- @Test
- @EnableFlags(Flags.FLAG_GET_STATE_FROM_SYSTEM_SERVER)
public void getStateFromSystemServer() {
mBinder.getState();
verify(mManagerService).getState();