Loading services/core/java/com/android/server/BluetoothDeviceConfigListener.java +14 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ package com.android.server; import android.provider.DeviceConfig; import android.util.Slog; import java.util.ArrayList; /** * The BluetoothDeviceConfigListener handles system device config change callback and checks Loading @@ -30,10 +33,12 @@ import android.provider.DeviceConfig; class BluetoothDeviceConfigListener { private static final String TAG = "BluetoothDeviceConfigListener"; BluetoothManagerService mService; private final BluetoothManagerService mService; private final boolean mLogDebug; BluetoothDeviceConfigListener(BluetoothManagerService service) { BluetoothDeviceConfigListener(BluetoothManagerService service, boolean logDebug) { mService = service; mLogDebug = logDebug; DeviceConfig.addOnPropertiesChangedListener( DeviceConfig.NAMESPACE_BLUETOOTH, (Runnable r) -> r.run(), Loading @@ -47,6 +52,13 @@ class BluetoothDeviceConfigListener { if (!properties.getNamespace().equals(DeviceConfig.NAMESPACE_BLUETOOTH)) { return; } if (mLogDebug) { ArrayList<String> flags = new ArrayList<>(); for (String name : properties.getKeyset()) { flags.add(name + "='" + properties.getString(name, "") + "'"); } Slog.d(TAG, "onPropertiesChanged: " + String.join(",", flags)); } boolean foundInit = false; for (String name : properties.getKeyset()) { if (name.startsWith("INIT_")) { Loading services/core/java/com/android/server/BluetoothManagerService.java +45 −1 Original line number Diff line number Diff line Loading @@ -453,6 +453,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { if (mHandler.hasMessages(MESSAGE_INIT_FLAGS_CHANGED) && state == BluetoothProfile.STATE_DISCONNECTED && !mBluetoothModeChangeHelper.isA2dpOrHearingAidConnected()) { Slog.i(TAG, "Device disconnected, reactivating pending flag changes"); onInitFlagsChanged(); } } Loading Loading @@ -810,6 +811,35 @@ class BluetoothManagerService extends IBluetoothManager.Stub { return enabledProfiles; } private boolean isDeviceProvisioned() { return Settings.Global.getInt(mContentResolver, Settings.Global.DEVICE_PROVISIONED, 0) != 0; } // Monitor change of BLE scan only mode settings. private void registerForProvisioningStateChange() { ContentObserver contentObserver = new ContentObserver(null) { @Override public void onChange(boolean selfChange) { if (!isDeviceProvisioned()) { if (DBG) { Slog.d(TAG, "DEVICE_PROVISIONED setting changed, but device is not " + "provisioned"); } return; } if (mHandler.hasMessages(MESSAGE_INIT_FLAGS_CHANGED)) { Slog.i(TAG, "Device provisioned, reactivating pending flag changes"); onInitFlagsChanged(); } } }; mContentResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED), false, contentObserver); } // Monitor change of BLE scan only mode settings. private void registerForBleScanModeChange() { ContentObserver contentObserver = new ContentObserver(null) { Loading Loading @@ -1375,7 +1405,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub { if (mBluetoothAirplaneModeListener != null) { mBluetoothAirplaneModeListener.start(mBluetoothModeChangeHelper); } mBluetoothDeviceConfigListener = new BluetoothDeviceConfigListener(this); registerForProvisioningStateChange(); mBluetoothDeviceConfigListener = new BluetoothDeviceConfigListener(this, DBG); } /** Loading Loading @@ -2219,12 +2250,25 @@ class BluetoothManagerService extends IBluetoothManager.Stub { } mHandler.removeMessages(MESSAGE_INIT_FLAGS_CHANGED); if (mBluetoothModeChangeHelper.isA2dpOrHearingAidConnected()) { Slog.i(TAG, "Delaying MESSAGE_INIT_FLAGS_CHANGED by " + DELAY_FOR_RETRY_INIT_FLAG_CHECK_MS + " ms due to existing connections"); mHandler.sendEmptyMessageDelayed( MESSAGE_INIT_FLAGS_CHANGED, DELAY_FOR_RETRY_INIT_FLAG_CHECK_MS); break; } if (!isDeviceProvisioned()) { Slog.i(TAG, "Delaying MESSAGE_INIT_FLAGS_CHANGED by " + DELAY_FOR_RETRY_INIT_FLAG_CHECK_MS + "ms because device is not provisioned"); mHandler.sendEmptyMessageDelayed( MESSAGE_INIT_FLAGS_CHANGED, DELAY_FOR_RETRY_INIT_FLAG_CHECK_MS); break; } if (mBluetooth != null && isEnabled()) { Slog.i(TAG, "Restarting Bluetooth due to init flag change"); restartForReason( BluetoothProtoEnums.ENABLE_DISABLE_REASON_INIT_FLAGS_CHANGED); } Loading Loading
services/core/java/com/android/server/BluetoothDeviceConfigListener.java +14 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ package com.android.server; import android.provider.DeviceConfig; import android.util.Slog; import java.util.ArrayList; /** * The BluetoothDeviceConfigListener handles system device config change callback and checks Loading @@ -30,10 +33,12 @@ import android.provider.DeviceConfig; class BluetoothDeviceConfigListener { private static final String TAG = "BluetoothDeviceConfigListener"; BluetoothManagerService mService; private final BluetoothManagerService mService; private final boolean mLogDebug; BluetoothDeviceConfigListener(BluetoothManagerService service) { BluetoothDeviceConfigListener(BluetoothManagerService service, boolean logDebug) { mService = service; mLogDebug = logDebug; DeviceConfig.addOnPropertiesChangedListener( DeviceConfig.NAMESPACE_BLUETOOTH, (Runnable r) -> r.run(), Loading @@ -47,6 +52,13 @@ class BluetoothDeviceConfigListener { if (!properties.getNamespace().equals(DeviceConfig.NAMESPACE_BLUETOOTH)) { return; } if (mLogDebug) { ArrayList<String> flags = new ArrayList<>(); for (String name : properties.getKeyset()) { flags.add(name + "='" + properties.getString(name, "") + "'"); } Slog.d(TAG, "onPropertiesChanged: " + String.join(",", flags)); } boolean foundInit = false; for (String name : properties.getKeyset()) { if (name.startsWith("INIT_")) { Loading
services/core/java/com/android/server/BluetoothManagerService.java +45 −1 Original line number Diff line number Diff line Loading @@ -453,6 +453,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { if (mHandler.hasMessages(MESSAGE_INIT_FLAGS_CHANGED) && state == BluetoothProfile.STATE_DISCONNECTED && !mBluetoothModeChangeHelper.isA2dpOrHearingAidConnected()) { Slog.i(TAG, "Device disconnected, reactivating pending flag changes"); onInitFlagsChanged(); } } Loading Loading @@ -810,6 +811,35 @@ class BluetoothManagerService extends IBluetoothManager.Stub { return enabledProfiles; } private boolean isDeviceProvisioned() { return Settings.Global.getInt(mContentResolver, Settings.Global.DEVICE_PROVISIONED, 0) != 0; } // Monitor change of BLE scan only mode settings. private void registerForProvisioningStateChange() { ContentObserver contentObserver = new ContentObserver(null) { @Override public void onChange(boolean selfChange) { if (!isDeviceProvisioned()) { if (DBG) { Slog.d(TAG, "DEVICE_PROVISIONED setting changed, but device is not " + "provisioned"); } return; } if (mHandler.hasMessages(MESSAGE_INIT_FLAGS_CHANGED)) { Slog.i(TAG, "Device provisioned, reactivating pending flag changes"); onInitFlagsChanged(); } } }; mContentResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED), false, contentObserver); } // Monitor change of BLE scan only mode settings. private void registerForBleScanModeChange() { ContentObserver contentObserver = new ContentObserver(null) { Loading Loading @@ -1375,7 +1405,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub { if (mBluetoothAirplaneModeListener != null) { mBluetoothAirplaneModeListener.start(mBluetoothModeChangeHelper); } mBluetoothDeviceConfigListener = new BluetoothDeviceConfigListener(this); registerForProvisioningStateChange(); mBluetoothDeviceConfigListener = new BluetoothDeviceConfigListener(this, DBG); } /** Loading Loading @@ -2219,12 +2250,25 @@ class BluetoothManagerService extends IBluetoothManager.Stub { } mHandler.removeMessages(MESSAGE_INIT_FLAGS_CHANGED); if (mBluetoothModeChangeHelper.isA2dpOrHearingAidConnected()) { Slog.i(TAG, "Delaying MESSAGE_INIT_FLAGS_CHANGED by " + DELAY_FOR_RETRY_INIT_FLAG_CHECK_MS + " ms due to existing connections"); mHandler.sendEmptyMessageDelayed( MESSAGE_INIT_FLAGS_CHANGED, DELAY_FOR_RETRY_INIT_FLAG_CHECK_MS); break; } if (!isDeviceProvisioned()) { Slog.i(TAG, "Delaying MESSAGE_INIT_FLAGS_CHANGED by " + DELAY_FOR_RETRY_INIT_FLAG_CHECK_MS + "ms because device is not provisioned"); mHandler.sendEmptyMessageDelayed( MESSAGE_INIT_FLAGS_CHANGED, DELAY_FOR_RETRY_INIT_FLAG_CHECK_MS); break; } if (mBluetooth != null && isEnabled()) { Slog.i(TAG, "Restarting Bluetooth due to init flag change"); restartForReason( BluetoothProtoEnums.ENABLE_DISABLE_REASON_INIT_FLAGS_CHANGED); } Loading