From 69ffac28bb77bc7faeb0b8d84ed4fe171103265e Mon Sep 17 00:00:00 2001 From: tonihei Date: Tue, 26 Sep 2023 04:54:30 -0700 Subject: [PATCH] Set SurfaceView lifecycle to follow attachment in PlayerView This avoids destroying the surface if PlayerView is hidden in the view hierarchy. PiperOrigin-RevId: 568501459 --- .../main/java/androidx/media3/ui/PlayerView.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java index 0c8be97f38..caa827f0c4 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java @@ -49,6 +49,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.ColorInt; +import androidx.annotation.DoNotInline; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @@ -427,7 +428,11 @@ public class PlayerView extends FrameLayout implements AdViewProvider { } break; default: - surfaceView = new SurfaceView(context); + SurfaceView view = new SurfaceView(context); + if (Util.SDK_INT >= 34) { + Api34.setSurfaceLifecycleToFollowsAttachment(view); + } + surfaceView = view; break; } surfaceView.setLayoutParams(params); @@ -1737,4 +1742,13 @@ public class PlayerView extends FrameLayout implements AdViewProvider { } } } + + @RequiresApi(34) + private static class Api34 { + + @DoNotInline + public static void setSurfaceLifecycleToFollowsAttachment(SurfaceView surfaceView) { + surfaceView.setSurfaceLifecycle(SurfaceView.SURFACE_LIFECYCLE_FOLLOWS_ATTACHMENT); + } + } }