diff options
author | 2025-03-06 00:57:19 -0800 | |
---|---|---|
committer | 2025-03-09 23:18:35 -0700 | |
commit | bcbc504255c5b3ddd91e78c13cfd2f593aa42351 (patch) | |
tree | 4768d769b1e39e9a91ce2d4930e99fa611a51c22 | |
parent | 0e826869f6b2d5109f8145ca59aab11024206185 (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
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(); |