Skip to content

BluetoothAdapter.getDefaultAdapter() can return null

The method setSpeakerPhoneOnInternal is calling BluetoothAdapter.getDefaultAdapter().getProfileConnectionState without checking first if its null or not.

There are other pieces of code, for example:

  • programmable_video/android/src/main/kotlin/twilio/flutter/twilio_programmable_video/AudioNotificationListener.kt:63
  • programmable_video/android/src/main/kotlin/twilio/flutter/twilio_programmable_video/AudioNotificationListener.kt:69

image

where we call for null-safety, but we don't do it in my proposal PR. Devices might opt not having a built-in Bluetooth and this is stopping the connection between them:

InitializationException(INIT_ERROR, java.lang.NullPointerException: Attempt to invoke virtual method 'int android.bluetooth.BluetoothAdapter.getProfileConnectionState(int)' on a null object reference, java.lang.NullPointerException: Attempt to invoke virtual method 'int android.bluetooth.BluetoothAdapter.getProfileConnectionState(int)' on a null object reference at twilio.flutter.twilio_programmable_video.PluginHandler.setSpeakerPhoneOnInternal(PluginHandler.kt:426) at twilio.flutter.twilio_programmable_video.PluginHandler.applyAudioSettings$twilio_programmable_video_debug(PluginHandler.kt:371) at twilio.flutter.twilio_programmable_video.PluginHandler.connect(PluginHandler.kt:642) at twilio.flutter.twilio_programmable_video.PluginHandler.onMethodCall(PluginHandler.kt:107) at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258) at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295) at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue0io-flutter-embedding-engine-dart- DartMessenger(DartMessenger.java:322) at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) )

Edited by Rafael Ruiz Muñoz

Merge request reports