summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java
diff options
context:
space:
mode:
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.java98
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) {