diff options
3 files changed, 43 insertions, 0 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java index 416b36981a4c..baccda7e3cc4 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java @@ -163,6 +163,16 @@ public interface BluetoothCallback { default void onAclConnectionStateChanged( @NonNull CachedBluetoothDevice cachedDevice, int state) {} + /** + * Called when the Auto-on state is changed for any user. Listens to intent + * {@link android.bluetooth.BluetoothAdapter#ACTION_AUTO_ON_STATE_CHANGED } + * + * @param state the Auto-on state, the possible values are: + * {@link android.bluetooth.BluetoothAdapter#AUTO_ON_STATE_ENABLED}, + * {@link android.bluetooth.BluetoothAdapter#AUTO_ON_STATE_DISABLED} + */ + default void onAutoOnStateChanged(int state) {} + @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "STATE_" }, value = { STATE_DISCONNECTED, diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java index 647fcb9f67fa..0996d52b0e30 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java @@ -133,6 +133,8 @@ public class BluetoothEventManager { addHandler(BluetoothDevice.ACTION_ACL_CONNECTED, new AclStateChangedHandler()); addHandler(BluetoothDevice.ACTION_ACL_DISCONNECTED, new AclStateChangedHandler()); + addHandler(BluetoothAdapter.ACTION_AUTO_ON_STATE_CHANGED, new AutoOnStateChangedHandler()); + registerAdapterIntentReceiver(); } @@ -552,4 +554,21 @@ public class BluetoothEventManager { dispatchAudioModeChanged(); } } + + private class AutoOnStateChangedHandler implements Handler { + + @Override + public void onReceive(Context context, Intent intent, BluetoothDevice device) { + String action = intent.getAction(); + if (action == null) { + Log.w(TAG, "AutoOnStateChangedHandler() action is null"); + return; + } + int state = intent.getIntExtra(BluetoothAdapter.EXTRA_AUTO_ON_STATE, + BluetoothAdapter.ERROR); + for (BluetoothCallback callback : mCallbacks) { + callback.onAutoOnStateChanged(state); + } + } + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java index 13635c3a8256..48bbf4ea6a65 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java @@ -18,6 +18,7 @@ package com.android.settingslib.bluetooth; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -489,4 +490,17 @@ public class BluetoothEventManagerTest { verify(mErrorListener).onShowError(any(Context.class), eq(DEVICE_NAME), eq(R.string.bluetooth_pairing_pin_error_message)); } + + /** + * Intent ACTION_AUTO_ON_STATE_CHANGED should dispatch to callback. + */ + @Test + public void intentWithExtraState_autoOnStateChangedShouldDispatchToRegisterCallback() { + mBluetoothEventManager.registerCallback(mBluetoothCallback); + mIntent = new Intent(BluetoothAdapter.ACTION_AUTO_ON_STATE_CHANGED); + + mContext.sendBroadcast(mIntent); + + verify(mBluetoothCallback).onAutoOnStateChanged(anyInt()); + } } |