video card: playback preview: upd

This commit is contained in:
Yuriy Liskov
2025-05-13 01:10:49 +03:00
parent c8ab2b7c61
commit 057643c73e
4 changed files with 26 additions and 18 deletions

View File

@ -120,6 +120,7 @@ public class ComplexImageView extends RelativeLayout {
mPreviewImage.setScaleType(ScaleType.CENTER_CROP); mPreviewImage.setScaleType(ScaleType.CENTER_CROP);
mPreviewImage.setAdjustViewBounds(true); mPreviewImage.setAdjustViewBounds(true);
mPreviewContainer.addView(mPreviewImage, new FrameLayout.LayoutParams(mPreviewWidth, mPreviewHeight)); mPreviewContainer.addView(mPreviewImage, new FrameLayout.LayoutParams(mPreviewWidth, mPreviewHeight));
mPreviewContainer.setVisibility(View.VISIBLE);
} }
Glide.with(getContext().getApplicationContext()) // FIX: "You cannot start a load for a destroyed activity" Glide.with(getContext().getApplicationContext()) // FIX: "You cannot start a load for a destroyed activity"
@ -139,7 +140,10 @@ public class ComplexImageView extends RelativeLayout {
if (mPreviewPlayer == null) { if (mPreviewPlayer == null) {
mPreviewPlayer = new EmbedPlayerView(getContext()); mPreviewPlayer = new EmbedPlayerView(getContext());
mPreviewPlayer.setUseController(false); mPreviewPlayer.setUseController(false);
mPreviewPlayer.setOnLoad(() -> mPreviewContainer.addView(mPreviewPlayer, new FrameLayout.LayoutParams(mPreviewWidth, mPreviewHeight))); mPreviewPlayer.setOnLoad(() -> {
mPreviewContainer.addView(mPreviewPlayer, new FrameLayout.LayoutParams(mPreviewWidth, mPreviewHeight));
mPreviewContainer.setVisibility(View.VISIBLE);
});
} }
mPreviewPlayer.openVideo(mPreviewVideoId); mPreviewPlayer.openVideo(mPreviewVideoId);
@ -148,6 +152,7 @@ public class ComplexImageView extends RelativeLayout {
public void stopPlayback() { public void stopPlayback() {
if (mPreviewUrl != null) { if (mPreviewUrl != null) {
mPreviewContainer.removeView(mPreviewImage); mPreviewContainer.removeView(mPreviewImage);
mPreviewContainer.setVisibility(View.GONE);
mPreviewImage.setImageDrawable(null); mPreviewImage.setImageDrawable(null);
Glide.with(getContext()).clear(mPreviewImage); Glide.with(getContext()).clear(mPreviewImage);
mPreviewImage = null; mPreviewImage = null;
@ -156,6 +161,7 @@ public class ComplexImageView extends RelativeLayout {
if (mPreviewPlayer != null) { if (mPreviewPlayer != null) {
mPreviewContainer.removeView(mPreviewPlayer); mPreviewContainer.removeView(mPreviewPlayer);
mPreviewContainer.setVisibility(View.GONE);
mPreviewPlayer.finish(); mPreviewPlayer.finish();
mPreviewPlayer = null; mPreviewPlayer = null;
} }

View File

@ -232,7 +232,7 @@ public class EmbedPlayerView extends PlayerView implements PlaybackView {
@Override @Override
public void finish() { public void finish() {
releasePlayer(); destroyPlayerObjects();
} }
@Override @Override
@ -466,9 +466,14 @@ public class EmbedPlayerView extends PlayerView implements PlaybackView {
mVideo = video; mVideo = video;
mPlaybackPresenter.onNewVideo(video); mPlaybackPresenter.onNewVideo(video);
initPlayer(); initPlayer();
createPlayerObjects();
} }
private void createPlayerObjects() { private void createPlayerObjects() {
if (isEngineInitialized()) {
return;
}
// Use default or pass your bandwidthMeter here: bandwidthMeter = new DefaultBandwidthMeter.Builder(getContext()).build() // Use default or pass your bandwidthMeter here: bandwidthMeter = new DefaultBandwidthMeter.Builder(getContext()).build()
DefaultTrackSelector trackSelector = new RestoreTrackSelector(new AdaptiveTrackSelection.Factory()); DefaultTrackSelector trackSelector = new RestoreTrackSelector(new AdaptiveTrackSelection.Factory());
mExoPlayerController.setTrackSelector(trackSelector); mExoPlayerController.setTrackSelector(trackSelector);
@ -491,27 +496,24 @@ public class EmbedPlayerView extends PlayerView implements PlaybackView {
} }
setPlayer(mPlayer); setPlayer(mPlayer);
}
private void releasePlayer() { mPlaybackPresenter.onEngineInitialized(); // start playback
if (isEngineInitialized()) {
Log.d(TAG, "releasePlayer: Start releasing player engine...");
mOnLoad = null;
mPlaybackPresenter.onEngineReleased();
destroyPlayerObjects();
}
} }
private void destroyPlayerObjects() { private void destroyPlayerObjects() {
// Fix access calls when player isn't initialized if (isEngineInitialized()) {
mExoPlayerController.release(); mOnLoad = null;
mPlayer = null; mPlaybackPresenter.onEngineReleased();
setPlayer(null); // Fix access calls when player isn't initialized
//mPlaybackPresenter.setView(null); mExoPlayerController.release();
mPlayer = null;
setPlayer(null);
//mPlaybackPresenter.setView(null);
}
} }
private void initPlayer() { private void initPlayer() {
if (isEngineInitialized()) { if (mExoPlayerController != null) {
return; return;
} }
@ -520,8 +522,6 @@ public class EmbedPlayerView extends PlayerView implements PlaybackView {
mExoPlayerController = new ExoPlayerController(getContext(), mPlaybackPresenter); mExoPlayerController = new ExoPlayerController(getContext(), mPlaybackPresenter);
mExoPlayerController.setOnVideoLoaded(this::onVideoLoaded); mExoPlayerController.setOnVideoLoaded(this::onVideoLoaded);
mPlaybackPresenter.onViewInitialized(); // init all controllers mPlaybackPresenter.onViewInitialized(); // init all controllers
createPlayerObjects();
mPlaybackPresenter.onEngineInitialized(); // start playback
} }
private void onVideoLoaded() { private void onVideoLoaded() {

View File

@ -13,6 +13,7 @@
android:adjustViewBounds="true" android:adjustViewBounds="true"
tools:ignore="ContentDescription"/> tools:ignore="ContentDescription"/>
<FrameLayout <FrameLayout
android:visibility="gone"
android:id="@+id/preview_container" android:id="@+id/preview_container"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />

View File

@ -5,6 +5,7 @@
tools:ignore="ContentDescription" tools:ignore="ContentDescription"
style="?attr/imageCardViewImageStyle"/> style="?attr/imageCardViewImageStyle"/>
<FrameLayout <FrameLayout
android:visibility="gone"
android:id="@+id/preview_container" android:id="@+id/preview_container"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />