mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-02-11 08:58:43 +01:00
Zoomable ViewVideoActivity.
This commit is contained in:
parent
bc9cfc8183
commit
c8c3c23093
@ -182,6 +182,8 @@ dependencies {
|
|||||||
// RecyclerView fast scrolling
|
// RecyclerView fast scrolling
|
||||||
implementation 'me.zhanghai.android.fastscroll:library:1.1.7'
|
implementation 'me.zhanghai.android.fastscroll:library:1.1.7'
|
||||||
|
|
||||||
|
implementation 'com.otaliastudios:zoomlayout:1.8.0'
|
||||||
|
|
||||||
|
|
||||||
/**** Builds and flavors ****/
|
/**** Builds and flavors ****/
|
||||||
// debugImplementation because LeakCanary should only run in debug builds.
|
// debugImplementation because LeakCanary should only run in debug builds.
|
||||||
|
@ -46,7 +46,7 @@ import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
|
|||||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||||
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
||||||
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
|
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
|
||||||
import com.google.android.exoplayer2.ui.PlayerView;
|
import com.google.android.exoplayer2.ui.PlayerControlView;
|
||||||
import com.google.android.exoplayer2.ui.TrackSelectionDialogBuilder;
|
import com.google.android.exoplayer2.ui.TrackSelectionDialogBuilder;
|
||||||
import com.google.android.exoplayer2.upstream.DataSource;
|
import com.google.android.exoplayer2.upstream.DataSource;
|
||||||
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
||||||
@ -54,8 +54,10 @@ import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
|
|||||||
import com.google.android.exoplayer2.upstream.cache.CacheDataSourceFactory;
|
import com.google.android.exoplayer2.upstream.cache.CacheDataSourceFactory;
|
||||||
import com.google.android.exoplayer2.upstream.cache.SimpleCache;
|
import com.google.android.exoplayer2.upstream.cache.SimpleCache;
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
|
import com.google.android.exoplayer2.video.VideoListener;
|
||||||
import com.google.android.material.bottomappbar.BottomAppBar;
|
import com.google.android.material.bottomappbar.BottomAppBar;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
import com.otaliastudios.zoom.ZoomSurfaceView;
|
||||||
|
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
|
||||||
@ -131,8 +133,10 @@ public class ViewVideoActivity extends AppCompatActivity {
|
|||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@BindView(R.id.progress_bar_view_video_activity)
|
@BindView(R.id.progress_bar_view_video_activity)
|
||||||
ProgressBar progressBar;
|
ProgressBar progressBar;
|
||||||
@BindView(R.id.player_view_view_video_activity)
|
@BindView(R.id.zoom_surface_view_view_video_activity)
|
||||||
PlayerView videoPlayerView;
|
ZoomSurfaceView zoomSurfaceView;
|
||||||
|
@BindView(R.id.player_control_view_view_video_activity)
|
||||||
|
PlayerControlView playerControlView;
|
||||||
@BindView(R.id.mute_exo_playback_control_view)
|
@BindView(R.id.mute_exo_playback_control_view)
|
||||||
ImageButton muteButton;
|
ImageButton muteButton;
|
||||||
@BindView(R.id.hd_exo_playback_control_view)
|
@BindView(R.id.hd_exo_playback_control_view)
|
||||||
@ -325,7 +329,7 @@ public class ViewVideoActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
videoPlayerView.setControllerVisibilityListener(visibility -> {
|
playerControlView.setVisibilityListener(visibility -> {
|
||||||
switch (visibility) {
|
switch (visibility) {
|
||||||
case View.GONE:
|
case View.GONE:
|
||||||
getWindow().getDecorView().setSystemUiVisibility(
|
getWindow().getDecorView().setSystemUiVisibility(
|
||||||
@ -347,7 +351,35 @@ public class ViewVideoActivity extends AppCompatActivity {
|
|||||||
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory();
|
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory();
|
||||||
trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
|
trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
|
||||||
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
|
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
|
||||||
videoPlayerView.setPlayer(player);
|
|
||||||
|
playerControlView.setPlayer(player);
|
||||||
|
|
||||||
|
player.addVideoListener(new VideoListener() {
|
||||||
|
@Override
|
||||||
|
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
|
||||||
|
zoomSurfaceView.setContentSize(width, height);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
zoomSurfaceView.addCallback(new ZoomSurfaceView.Callback() {
|
||||||
|
@Override
|
||||||
|
public void onZoomSurfaceCreated(@NonNull ZoomSurfaceView zoomSurfaceView) {
|
||||||
|
player.setVideoSurface(zoomSurfaceView.getSurface());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onZoomSurfaceDestroyed(@NonNull ZoomSurfaceView zoomSurfaceView) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
zoomSurfaceView.setOnClickListener(view -> {
|
||||||
|
if (playerControlView.isVisible()) {
|
||||||
|
playerControlView.hide();
|
||||||
|
} else {
|
||||||
|
playerControlView.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
mVideoUri = intent.getData();
|
mVideoUri = intent.getData();
|
||||||
videoType = getIntent().getIntExtra(EXTRA_VIDEO_TYPE, VIDEO_TYPE_NORMAL);
|
videoType = getIntent().getIntExtra(EXTRA_VIDEO_TYPE, VIDEO_TYPE_NORMAL);
|
||||||
@ -507,8 +539,8 @@ public class ViewVideoActivity extends AppCompatActivity {
|
|||||||
dataSourceFactory = new CacheDataSourceFactory(mSimpleCache,
|
dataSourceFactory = new CacheDataSourceFactory(mSimpleCache,
|
||||||
new DefaultDataSourceFactory(ViewVideoActivity.this,
|
new DefaultDataSourceFactory(ViewVideoActivity.this,
|
||||||
Util.getUserAgent(ViewVideoActivity.this, "Infinity")));
|
Util.getUserAgent(ViewVideoActivity.this, "Infinity")));
|
||||||
player.prepare(new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mVideoUri));
|
|
||||||
preparePlayer(savedInstanceState);
|
preparePlayer(savedInstanceState);
|
||||||
|
player.prepare(new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mVideoUri));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -586,8 +618,8 @@ public class ViewVideoActivity extends AppCompatActivity {
|
|||||||
Util.getUserAgent(ViewVideoActivity.this,
|
Util.getUserAgent(ViewVideoActivity.this,
|
||||||
"Infinity")));
|
"Infinity")));
|
||||||
// Prepare the player with the source.
|
// Prepare the player with the source.
|
||||||
player.prepare(new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(mVideoUri));
|
|
||||||
preparePlayer(savedInstanceState);
|
preparePlayer(savedInstanceState);
|
||||||
|
player.prepare(new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(mVideoUri));
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(ViewVideoActivity.this, R.string.error_fetching_v_redd_it_video_cannot_get_video_url, Toast.LENGTH_LONG).show();
|
Toast.makeText(ViewVideoActivity.this, R.string.error_fetching_v_redd_it_video_cannot_get_video_url, Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
@ -20,11 +20,21 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.exoplayer2.ui.PlayerView
|
<com.otaliastudios.zoom.ZoomSurfaceView
|
||||||
android:id="@+id/player_view_view_video_activity"
|
android:id="@+id/zoom_surface_view_view_video_activity"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
app:controller_layout_id="@layout/exo_playback_control_view"/>
|
app:horizontalPanEnabled="true"
|
||||||
|
app:verticalPanEnabled="true"
|
||||||
|
app:zoomEnabled="true" />
|
||||||
|
|
||||||
|
<com.google.android.exoplayer2.ui.PlayerControlView
|
||||||
|
android:id="@+id/player_control_view_view_video_activity"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
app:controller_layout_id="@layout/exo_playback_control_view"
|
||||||
|
app:show_timeout="1500" />
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:id="@+id/progress_bar_view_video_activity"
|
android:id="@+id/progress_bar_view_video_activity"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user