diff options
Diffstat (limited to 'app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java')
-rw-r--r-- | app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java | 98 |
1 files changed, 84 insertions, 14 deletions
diff --git a/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java b/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java index 36e6e4313..e54d28ee8 100644 --- a/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.graphics.Bitmap; +import android.graphics.Color; import android.graphics.drawable.Drawable; import android.media.MediaPlayer; import android.net.Uri; @@ -51,11 +52,16 @@ import com.github.chrisbanes.photoview.PhotoView; import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; -import com.google.android.exoplayer2.source.ExtractorMediaSource; -import com.google.android.exoplayer2.ui.SimpleExoPlayerView; +import com.google.android.exoplayer2.source.ProgressiveMediaSource; +import com.google.android.exoplayer2.ui.PlayerView; import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.util.Util; +import com.r0adkll.slidr.Slidr; +import com.r0adkll.slidr.model.SlidrConfig; +import com.r0adkll.slidr.model.SlidrInterface; +import com.r0adkll.slidr.model.SlidrListener; +import com.r0adkll.slidr.model.SlidrPosition; import org.jetbrains.annotations.NotNull; @@ -70,6 +76,7 @@ import app.fedilab.android.R; import app.fedilab.android.activities.SlideMediaActivity; import app.fedilab.android.client.Entities.Attachment; import app.fedilab.android.client.TLSSocketFactory; +import app.fedilab.android.helper.CacheDataSourceFactory; import app.fedilab.android.helper.Helper; import app.fedilab.android.webview.CustomWebview; import app.fedilab.android.webview.MastalabWebChromeClient; @@ -105,6 +112,9 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl private ImageButton playView; private GLAudioVisualizationView visualizerView; private View rootView; + private SlidrInterface slidrInterface; + private boolean swipeEnabled; + private int bgColor; public MediaSliderFragment() { } @@ -118,8 +128,10 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl if (bundle != null) { attachment = bundle.getParcelable("attachment"); - } + bgColor = bundle.getInt("bgcolor", R.color.black); + } + swipeEnabled = true; message_ready = rootView.findViewById(R.id.message_ready); RelativeLayout content_audio = rootView.findViewById(R.id.content_audio); @@ -132,7 +144,7 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl ImageView next = rootView.findViewById(R.id.media_next); imageView = rootView.findViewById(R.id.media_picture); - SimpleExoPlayerView videoView = rootView.findViewById(R.id.media_video); + PlayerView videoView = rootView.findViewById(R.id.media_video); if (theme == Helper.THEME_BLACK) { changeDrawableColor(context, prev, R.color.dark_icon); changeDrawableColor(context, next, R.color.dark_icon); @@ -152,9 +164,9 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl if (!((SlideMediaActivity) context).getFullScreen()) { ((SlideMediaActivity) context).setFullscreen(true); } - ((SlideMediaActivity) context).enableSliding(false); + enableSliding(false); } else { - ((SlideMediaActivity) context).enableSliding(true); + enableSliding(true); } }); ProgressBar pbar_inf = rootView.findViewById(R.id.pbar_inf); @@ -171,6 +183,11 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl attachment.setType(type); } + if (bgColor != -1) { + RelativeLayout media_fragment_container = rootView.findViewById(R.id.media_fragment_container); + media_fragment_container.setBackgroundColor(bgColor); + } + switch (type.toLowerCase()) { case "image": pbar_inf.setScaleY(1f); @@ -236,10 +253,20 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl } videoView.setVisibility(View.VISIBLE); Uri uri = Uri.parse(url); - DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, - Util.getUserAgent(context, "Fedilab"), null); - ExtractorMediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory) - .createMediaSource(uri); + + String userAgent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); + int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB); + ProgressiveMediaSource videoSource; + if (video_cache == 0) { + DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, + Util.getUserAgent(context, userAgent), null); + videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory) + .createMediaSource(uri); + } else { + CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(context); + videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory) + .createMediaSource(uri); + } player = ExoPlayerFactory.newSimpleInstance(context); if (type.toLowerCase().equals("gifv")) player.setRepeatMode(Player.REPEAT_MODE_ONE); @@ -278,10 +305,8 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl webview_video.setWebChromeClient(mastalabWebChromeClient); webview_video.getSettings().setDomStorageEnabled(true); webview_video.getSettings().setAppCacheEnabled(true); - String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, null); - if (user_agent != null) { - webview_video.getSettings().setUserAgentString(user_agent); - } + String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); + webview_video.getSettings().setUserAgentString(user_agent); webview_video.getSettings().setMediaPlaybackRequiresUserGesture(false); webview_video.setWebViewClient(new MastalabWebViewClient((Activity) context)); webview_video.loadUrl(attachment.getUrl()); @@ -453,6 +478,10 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl } } catch (Exception ignored) { } + if (timer != null) { + timer.cancel(); + timer = null; + } super.onDestroy(); } @@ -475,8 +504,49 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl visualizerView.onResume(); } catch (Exception ignored) { } + if (slidrInterface == null && rootView != null) { + slidrInterface = Slidr.replace(rootView.findViewById(R.id.media_fragment_container), new SlidrConfig.Builder().sensitivity(1f) + .scrimColor(Color.BLACK) + .scrimStartAlpha(0.8f) + .scrimEndAlpha(0f) + .position(SlidrPosition.VERTICAL) + .velocityThreshold(2400) + .distanceThreshold(0.25f) + .edgeSize(0.18f) + .listener(new SlidrListener() { + @Override + public void onSlideStateChanged(int state) { + + } + + @Override + public void onSlideChange(float percent) { + ((SlideMediaActivity) context).setFullscreen(true); + } + + @Override + public void onSlideOpened() { + + } + + @Override + public boolean onSlideClosed() { + return false; + } + }) + .build()); + } } + private void enableSliding(boolean enable) { + if (enable && !swipeEnabled) { + slidrInterface.unlock(); + swipeEnabled = true; + } else if (!enable && swipeEnabled) { + slidrInterface.lock(); + swipeEnabled = false; + } + } @Override public void onCompletion(MediaPlayer mp) { |