mapbox / mapbox-maps-android

Interactive, thoroughly customizable maps in native Android powered by vector tiles and OpenGL.
https://www.mapbox.com/mobile-maps-sdk
Other
478 stars 134 forks source link

Black screen when switching from smartphone app to Android Auto #2468

Open schachi5000 opened 2 months ago

schachi5000 commented 2 months ago

Environment

Observed behavior and steps to reproduce

In our app we always close (finish) the smartphone app, once the Android Auto app has been launched by the user - to reduce load and keep the focus of the user on the head unit.

Exclusively on Samsung devices running Android 14 we've noticed, that the map surface in the head unit always turns black after a while, if the app was first launched on the smartphone.

At first the map screen is fully rendered, but after returning from another screen (i.e. Search) the map surface stays black. Only thing the user can now do in that situation is to close the app completely and directly start it manually via the head unit.

The following error log is constantly repeating while the screen is black.

[maps-android\Mbgl-RenderThread]: renderThreadPrepared=false but Android surface is valid, trying to recreate EGL...
[maps-android\Mbgl-RenderThread]: Setting up render thread, flags: creatingSurface=true, nativeRenderCreated=true, eglContextMadeCurrent=false, eglContextCreated=true, paused=false
[maps-android\Mbgl-EglCore]: eglCreateWindowSurface: EGL error: 0x300b
[maps-android\Mbgl-EglCore]: EGL error 12299 occurred for eglCreateWindowSurface!
[maps-android\Mbgl-RenderThread]: Could not create EGL surface although Android surface was valid, retrying in 50 ms...
[maps-android\Mbgl-RenderThread]: Setting up render thread failed, check logs above.
[maps-android\Mbgl-RenderThread]: renderThreadPrepared=false but Android surface is valid, trying to recreate EGL...
[maps-android\Mbgl-RenderThread]: Setting up render thread, flags: creatingSurface=true, nativeRenderCreated=true, eglContextMadeCurrent=false, eglContextCreated=true, paused=false

I was able to easily reproduce the behavior in your Android Auto example app, by adding some slight modifications.

  1. Added a MapView to the Activity
  2. When the CarSession is created the Activity is being finished (quick and dirty approach)
class MainActivity : AppCompatActivity() {
  companion object {
    var instance: MainActivity? = null
  }

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    instance = this
  }
}
class MapSession : Session() {
  private val carMapShowcase = CarMapShowcase()
  override fun onCreateScreen(intent: Intent): Screen {
    MainActivity.instance?.finish()

Expected behavior

The map screen should not turn black after returning to the map screen.

Additional links and references

https://github.com/user-attachments/assets/2bff183e-0dcf-421d-a73b-450281e19c38

schachi5000 commented 4 weeks ago

This issue still seems to be ongoing. Same behavior with the newest Mapbox version 11.7.1

kiryldz commented 4 weeks ago

@schachi5000 I am concerned that this issue seems to be very device specific: Samsung devices running Android 14. This somehow reminds me of https://github.com/flutter/flutter/issues/146499. Did you try to look for similar issues on Samsung forums? Can you also confirm that this issue happens on the latest Samsung One UI? We are not quite busy with other staff and sadly could not invest much resources in investigating this one so maximum information will be appreciated.

schachi5000 commented 4 weeks ago

@kiryldz I've only found this Issue from earlier this year. But it seems it didn't lead anywhere.

Can you also confirm that this issue happens on the latest Samsung One UI

My Samsung test device is running on One UI 6.1. That's the one where I can reliable reproduce the issue. On a Z Flip4 with One UI 5.1.1 everything works as intended.

I will try to get my hands on the One UI 7 Beta to see if the issue persists - but since there are a lot of Samsung users out there running Android 14, this would hardly be a viable solution for them :(