androidx / media

Jetpack Media3 support libraries for media use cases, including ExoPlayer, an extensible media player for Android
https://developer.android.com/media/media3
Apache License 2.0
1.65k stars 390 forks source link

Caused by java.io.FileNotFoundException res/drawable-xhdpi-v4/exo_icon_vr.png #1811

Open mattiaferigutti opened 4 days ago

mattiaferigutti commented 4 days ago

Version

Media3 1.4.1

More version details

No response

Devices that reproduce the issue

CleanShot 2024-10-18 at 01 31 45@2x

Devices that do not reproduce the issue

No response

Reproducible in the demo app?

Yes

Reproduction steps

No idea

Expected result

The texture view player plays successfully

Actual result

The app crashes with the following full stack trace:

Fatal Exception: android.view.InflateException: Binary XML file line #9 in com.my.app:layout/player_view: Binary XML file line #9 in com.my.app:layout/player_view: Error inflating class androidx.media3.ui.PlayerView

Caused by android.view.InflateException: Binary XML file line #9 in com.my.app:layout/player_view: Error inflating class androidx.media3.ui.PlayerView

Caused by java.lang.reflect.InvocationTargetException:
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:742)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:894)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:849)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:462)
       at com.my.app.presenters.ui.common.video_player.TextureVideoPlayerKt.TextureVideoPlayer$lambda$2(TextureVideoPlayer.kt:36)
       at androidx.compose.ui.viewinterop.ViewFactoryHolder.<init>(AndroidView.android.kt:344)
       at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1$1.invoke(AndroidView.android.kt:275)
       at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1$1.invoke(AndroidView.android.kt)
       at androidx.compose.runtime.changelist.Operation$InsertNodeFixup.execute(Operation.kt:585)
       at androidx.compose.runtime.changelist.Operations.executeAndFlushAllPendingOperations(Operations.kt:310)
       at androidx.compose.runtime.changelist.FixupList.executeAndFlushAllPendingFixups(FixupList.kt:50)
       at androidx.compose.runtime.changelist.Operation$InsertSlotsWithFixups.execute(Operation.kt:552)
       at androidx.compose.runtime.changelist.Operations.executeAndFlushAllPendingOperations(Operations.kt:310)
       at androidx.compose.runtime.changelist.ChangeList.executeAndFlushAllPendingChanges(ChangeList.kt:81)
       at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:984)
       at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1013)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:685)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:585)
       at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41)
       at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$setScheduledFrameDispatch$p(AndroidUiDispatcher.android.kt)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt)
       at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1404)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1415)
       at android.view.Choreographer.doCallbacks(Choreographer.java:1015)
       at android.view.Choreographer.doFrame(Choreographer.java:941)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1389)
       at android.os.Handler.handleCallback(Handler.java:959)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loopOnce(Looper.java:232)
       at android.os.Looper.loop(Looper.java:317)
       at android.app.ActivityThread.main(ActivityThread.java:8590)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:585)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)

Caused by android.view.InflateException: Binary XML file line #64 in com.my.app:layout/exo_player_control_view: Binary XML file line #64 in com.my.app:layout/exo_player_control_view: Error inflating class android.widget.ImageButton

Caused by android.view.InflateException: Binary XML file line #64 in com.my.app:layout/exo_player_control_view: Error inflating class android.widget.ImageButton

Caused by java.lang.reflect.InvocationTargetException:
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:742)
       at android.view.LayoutInflater.createView(LayoutInflater.java:664)
       at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
       at android.view.LayoutInflater.onCreateView(LayoutInflater.java:818)
       at android.view.LayoutInflater.onCreateView(LayoutInflater.java:838)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:892)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:849)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:1011)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:972)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:1014)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:972)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:1014)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:540)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:462)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:413)
       at androidx.media3.ui.PlayerControlView.<init>(PlayerControlView.java:584)
       at androidx.media3.ui.PlayerView.<init>(PlayerView.java:575)
       at androidx.media3.ui.PlayerView.<init>(PlayerView.java:345)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:742)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:894)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:849)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:462)
       at com.my.app.presenters.ui.common.video_player.TextureVideoPlayerKt.TextureVideoPlayer$lambda$2(TextureVideoPlayer.kt:36)
       at androidx.compose.ui.viewinterop.ViewFactoryHolder.<init>(AndroidView.android.kt:344)
       at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1$1.invoke(AndroidView.android.kt:275)
       at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1$1.invoke(AndroidView.android.kt)
       at androidx.compose.runtime.changelist.Operation$InsertNodeFixup.execute(Operation.kt:585)
       at androidx.compose.runtime.changelist.Operations.executeAndFlushAllPendingOperations(Operations.kt:310)
       at androidx.compose.runtime.changelist.FixupList.executeAndFlushAllPendingFixups(FixupList.kt:50)
       at androidx.compose.runtime.changelist.Operation$InsertSlotsWithFixups.execute(Operation.kt:552)
       at androidx.compose.runtime.changelist.Operations.executeAndFlushAllPendingOperations(Operations.kt:310)
       at androidx.compose.runtime.changelist.ChangeList.executeAndFlushAllPendingChanges(ChangeList.kt:81)
       at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:984)
       at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1013)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:685)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:585)
       at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41)
       at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$setScheduledFrameDispatch$p(AndroidUiDispatcher.android.kt)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt)
       at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1404)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1415)
       at android.view.Choreographer.doCallbacks(Choreographer.java:1015)
       at android.view.Choreographer.doFrame(Choreographer.java:941)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1389)
       at android.os.Handler.handleCallback(Handler.java:959)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loopOnce(Looper.java:232)
       at android.os.Looper.loop(Looper.java:317)
       at android.app.ActivityThread.main(ActivityThread.java:8590)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:585)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)

Caused by android.content.res.Resources$NotFoundException: Drawable com.my.app:drawable/exo_icon_vr with resource ID #0x7f0800fe

Caused by android.content.res.Resources$NotFoundException: File res/drawable-xhdpi-v4/exo_icon_vr.png from drawable resource ID #0x7f0800fe
       at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:986)
       at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:754)
       at android.content.res.Resources.loadDrawable(Resources.java:1011)
       at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:1021)
       at android.content.res.TypedArray.getDrawable(TypedArray.java:995)
       at android.widget.ImageView.<init>(ImageView.java:205)
       at android.widget.ImageButton.<init>(ImageButton.java:91)
       at android.widget.ImageButton.<init>(ImageButton.java:87)
       at android.widget.ImageButton.<init>(ImageButton.java:83)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:742)
       at android.view.LayoutInflater.createView(LayoutInflater.java:664)
       at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
       at android.view.LayoutInflater.onCreateView(LayoutInflater.java:818)
       at android.view.LayoutInflater.onCreateView(LayoutInflater.java:838)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:892)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:849)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:1011)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:972)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:1014)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:972)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:1014)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:540)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:462)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:413)
       at androidx.media3.ui.PlayerControlView.<init>(PlayerControlView.java:584)
       at androidx.media3.ui.PlayerView.<init>(PlayerView.java:575)
       at androidx.media3.ui.PlayerView.<init>(PlayerView.java:345)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:742)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:894)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:849)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:462)
       at com.my.app.presenters.ui.common.video_player.TextureVideoPlayerKt.TextureVideoPlayer$lambda$2(TextureVideoPlayer.kt:36)
       at androidx.compose.ui.viewinterop.ViewFactoryHolder.<init>(AndroidView.android.kt:344)
       at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1$1.invoke(AndroidView.android.kt:275)
       at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1$1.invoke(AndroidView.android.kt)
       at androidx.compose.runtime.changelist.Operation$InsertNodeFixup.execute(Operation.kt:585)
       at androidx.compose.runtime.changelist.Operations.executeAndFlushAllPendingOperations(Operations.kt:310)
       at androidx.compose.runtime.changelist.FixupList.executeAndFlushAllPendingFixups(FixupList.kt:50)
       at androidx.compose.runtime.changelist.Operation$InsertSlotsWithFixups.execute(Operation.kt:552)
       at androidx.compose.runtime.changelist.Operations.executeAndFlushAllPendingOperations(Operations.kt:310)
       at androidx.compose.runtime.changelist.ChangeList.executeAndFlushAllPendingChanges(ChangeList.kt:81)
       at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:984)
       at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1013)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:685)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:585)
       at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41)
       at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$setScheduledFrameDispatch$p(AndroidUiDispatcher.android.kt)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt)
       at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1404)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1415)
       at android.view.Choreographer.doCallbacks(Choreographer.java:1015)
       at android.view.Choreographer.doFrame(Choreographer.java:941)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1389)
       at android.os.Handler.handleCallback(Handler.java:959)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loopOnce(Looper.java:232)
       at android.os.Looper.loop(Looper.java:317)
       at android.app.ActivityThread.main(ActivityThread.java:8590)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:585)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)

Caused by java.io.FileNotFoundException: res/drawable-xhdpi-v4/exo_icon_vr.png
       at android.content.res.AssetManager.nativeOpenNonAsset(AssetManager.java)
       at android.content.res.AssetManager.openNonAsset(AssetManager.java:1040)
       at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:975)
       at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:754)
       at android.content.res.Resources.loadDrawable(Resources.java:1011)
       at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:1021)
       at android.content.res.TypedArray.getDrawable(TypedArray.java:995)
       at android.widget.ImageView.<init>(ImageView.java:205)
       at android.widget.ImageButton.<init>(ImageButton.java:91)
       at android.widget.ImageButton.<init>(ImageButton.java:87)
       at android.widget.ImageButton.<init>(ImageButton.java:83)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:742)
       at android.view.LayoutInflater.createView(LayoutInflater.java:664)
       at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
       at android.view.LayoutInflater.onCreateView(LayoutInflater.java:818)
       at android.view.LayoutInflater.onCreateView(LayoutInflater.java:838)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:892)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:849)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:1011)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:972)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:1014)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:972)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:1014)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:540)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:462)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:413)
       at androidx.media3.ui.PlayerControlView.<init>(PlayerControlView.java:584)
       at androidx.media3.ui.PlayerView.<init>(PlayerView.java:575)
       at androidx.media3.ui.PlayerView.<init>(PlayerView.java:345)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:742)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:894)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:849)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:462)
       at com.my.app.presenters.ui.common.video_player.TextureVideoPlayerKt.TextureVideoPlayer$lambda$2(TextureVideoPlayer.kt:36)
       at androidx.compose.ui.viewinterop.ViewFactoryHolder.<init>(AndroidView.android.kt:344)
       at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1$1.invoke(AndroidView.android.kt:275)
       at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1$1.invoke(AndroidView.android.kt)
       at androidx.compose.runtime.changelist.Operation$InsertNodeFixup.execute(Operation.kt:585)
       at androidx.compose.runtime.changelist.Operations.executeAndFlushAllPendingOperations(Operations.kt:310)
       at androidx.compose.runtime.changelist.FixupList.executeAndFlushAllPendingFixups(FixupList.kt:50)
       at androidx.compose.runtime.changelist.Operation$InsertSlotsWithFixups.execute(Operation.kt:552)
       at androidx.compose.runtime.changelist.Operations.executeAndFlushAllPendingOperations(Operations.kt:310)
       at androidx.compose.runtime.changelist.ChangeList.executeAndFlushAllPendingChanges(ChangeList.kt:81)
       at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:984)
       at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1013)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:685)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:585)
       at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41)
       at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$setScheduledFrameDispatch$p(AndroidUiDispatcher.android.kt)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt)
       at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1404)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1415)
       at android.view.Choreographer.doCallbacks(Choreographer.java:1015)
       at android.view.Choreographer.doFrame(Choreographer.java:941)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1389)
       at android.os.Handler.handleCallback(Handler.java:959)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loopOnce(Looper.java:232)
       at android.os.Looper.loop(Looper.java:317)
       at android.app.ActivityThread.main(ActivityThread.java:8590)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:585)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)

the issue seems to be related to Caused by java.io.FileNotFoundException res/drawable-xhdpi-v4/exo_icon_vr.png.

my code:

<?xml version="1.0" encoding="utf-8"?>
<androidx.media3.ui.PlayerView android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:use_controller="false"
    app:resize_mode="zoom"
    xmlns:android="http://schemas.android.com/apk/res/android"
    app:surface_type="texture_view"
    android:id="@+id/playerView"/>
import android.view.LayoutInflater
import androidx.annotation.OptIn
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.Lifecycle
import androidx.media3.common.PlaybackException
import androidx.media3.common.Player
import androidx.media3.common.util.UnstableApi
import androidx.media3.ui.PlayerView
import com.bowerydigital.bend.R
import com.bowerydigital.bend.domain.x_functions.OnLifecycleEvent
import com.bowerydigital.bend.presenters.ui.common.video_player.model.MediaType
import com.bowerydigital.bend.presenters.ui.common.video_player.state.VideoPlayerState
import timber.log.Timber

@OptIn(UnstableApi::class)
@Composable
fun TextureVideoPlayer(
  modifier: Modifier = Modifier,
  videoPlayerManager: VideoPlayerState,
) {
  var lifecycle by remember {
    mutableStateOf(Lifecycle.Event.ON_CREATE)
  }

  OnLifecycleEvent { _, event ->
    lifecycle = event
  }

  AndroidView(
    modifier = modifier,
    factory = { context ->
      val view = LayoutInflater.from(context).inflate(R.layout.player_view, null, false)
      val textView = view.findViewById<PlayerView>(R.id.playerView)
      textView.player = videoPlayerManager.exoPlayer
      textView
    },
    update = { view ->
      when (lifecycle) {
        Lifecycle.Event.ON_PAUSE -> {
          view.onPause()
          view.player?.pause()
        }
        Lifecycle.Event.ON_RESUME -> {
          view.onResume()
        }
        else -> Unit
      }
    }
  )
}

Media

Not applicable

Bug Report

oceanjules commented 3 days ago

Hi, thanks for your report! It does look that our VR icon differs slightly from the rest, although I thought it would just go looking here: https://github.com/androidx/media/tree/release/libraries/ui/src/main/res/drawable-xhdpi and ignore the -v4 suffix.

It looks like it's the only one that is not in the following resource folder: https://github.com/androidx/media/tree/release/libraries/ui/src/main/res/drawable-anydpi-v21

Let me see if adding a vector drawable will solve the issue..