summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/fr/gouv/etalab/mastodon/activities/MediaActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/fr/gouv/etalab/mastodon/activities/MediaActivity.java')
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/MediaActivity.java148
1 files changed, 107 insertions, 41 deletions
diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/MediaActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/MediaActivity.java
index 0bff575d5..a80492efa 100644
--- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/MediaActivity.java
+++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/MediaActivity.java
@@ -30,6 +30,10 @@ import android.support.v4.content.ContextCompat;
import android.support.v7.widget.Toolbar;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.webkit.WebView;
+import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
@@ -42,6 +46,7 @@ import com.bumptech.glide.request.transition.Transition;
import com.github.chrisbanes.photoview.OnMatrixChangedListener;
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;
@@ -64,6 +69,8 @@ import fr.gouv.etalab.mastodon.client.HttpsConnection;
import fr.gouv.etalab.mastodon.client.TLSSocketFactory;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnDownloadInterface;
+import fr.gouv.etalab.mastodon.webview.MastalabWebChromeClient;
+import fr.gouv.etalab.mastodon.webview.MastalabWebViewClient;
import static fr.gouv.etalab.mastodon.helper.Helper.EXTERNAL_STORAGE_REQUEST_CODE;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_BLACK;
@@ -104,9 +111,11 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
LEFT_TO_RIGHT,
POP
}
-
- private ImageButton media_save, media_close;
+ private WebView webview_video;
+ private ImageButton media_save,media_share, media_close;
private boolean scheduleHidden, scheduleHiddenDescription;
+ private SimpleExoPlayer player;
+ private boolean isSHaring;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -156,11 +165,37 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
media_save = findViewById(R.id.media_save);
+ media_share = findViewById(R.id.media_share);
media_close = findViewById(R.id.media_close);
progress = findViewById(R.id.loader_progress);
+ webview_video = findViewById(R.id.webview_video);
media_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
+ isSHaring = false;
+ if(attachment.getType().toLowerCase().equals("video") || attachment.getType().toLowerCase().equals("gifv") || attachment.getType().toLowerCase().equals("web")) {
+ if( attachment != null ) {
+ progress.setText("0 %");
+ progress.setVisibility(View.VISIBLE);
+ new HttpsConnection(MediaActivity.this).download(attachment.getUrl(), MediaActivity.this);
+ }
+ }else {
+ if (Build.VERSION.SDK_INT >= 23) {
+ if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(MediaActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_STORAGE_REQUEST_CODE);
+ } else {
+ Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo, false);
+ }
+ } else {
+ Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo, false);
+ }
+ }
+ }
+ });
+ media_share.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ isSHaring = true;
if(attachment.getType().toLowerCase().equals("video") || attachment.getType().toLowerCase().equals("gifv")) {
if( attachment != null ) {
progress.setText("0 %");
@@ -172,10 +207,10 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MediaActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_STORAGE_REQUEST_CODE);
} else {
- Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo);
+ Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo, true);
}
} else {
- Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo);
+ Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo, true);
}
}
}
@@ -195,6 +230,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
// DO DELAYED STUFF
media_close.setVisibility(View.GONE);
media_save.setVisibility(View.GONE);
+ media_share.setVisibility(View.GONE);
scheduleHidden = false;
}
}, 2000);
@@ -266,12 +302,14 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
scheduleHidden = true;
media_close.setVisibility(View.VISIBLE);
media_save.setVisibility(View.VISIBLE);
+ media_share.setVisibility(View.VISIBLE);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
media_close.setVisibility(View.GONE);
media_save.setVisibility(View.GONE);
+ media_share.setVisibility(View.GONE);
scheduleHidden = false;
}
}, 2000);
@@ -420,7 +458,6 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
case "gifv":
pbar_inf.setIndeterminate(false);
pbar_inf.setScaleY(3f);
- File file = new File(getCacheDir() + "/" + Helper.md5(url)+".mp4");
try {
HttpsURLConnection.setDefaultSSLSocketFactory(new TLSSocketFactory());
} catch (KeyManagementException e) {
@@ -428,41 +465,58 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
- if(file.exists()) {
- Uri uri = Uri.parse(file.getAbsolutePath());
- videoView.setVisibility(View.VISIBLE);
-
- DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getApplicationContext(),
- Util.getUserAgent(getApplicationContext(), "Mastalab"), null);
-
- ExtractorMediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory)
- .createMediaSource(uri);
-
- SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(MediaActivity.this);
- videoView.setPlayer(player);
- loader.setVisibility(View.GONE);
- player.prepare(videoSource);
- player.setPlayWhenReady(true);
- fileVideo = file;
- downloadedImage = null;
- }else{
- videoView.setVisibility(View.VISIBLE);
- Uri uri = Uri.parse(url);
-
- videoView.setVisibility(View.VISIBLE);
-
- DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getApplicationContext(),
- Util.getUserAgent(getApplicationContext(), "Mastalab"), null);
-
- ExtractorMediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory)
- .createMediaSource(uri);
-
- SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(MediaActivity.this);
- videoView.setPlayer(player);
- loader.setVisibility(View.GONE);
- player.prepare(videoSource);
- player.setPlayWhenReady(true);
+ videoView.setVisibility(View.VISIBLE);
+ Uri uri = Uri.parse(url);
+ DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getApplicationContext(),
+ Util.getUserAgent(getApplicationContext(), "Mastalab"), null);
+ ExtractorMediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory)
+ .createMediaSource(uri);
+ player = ExoPlayerFactory.newSimpleInstance(MediaActivity.this);
+ if( type.toLowerCase().equals("gifv"))
+ player.setRepeatMode(Player.REPEAT_MODE_ONE);
+ videoView.setPlayer(player);
+ loader.setVisibility(View.GONE);
+ player.prepare(videoSource);
+ player.setPlayWhenReady(true);
+ break;
+ case "web":
+ loader.setVisibility(View.GONE);
+ webview_video = Helper.initializeWebview(MediaActivity.this, R.id.webview_video);
+ webview_video.setVisibility(View.VISIBLE);
+ FrameLayout webview_container = findViewById(R.id.main_media_frame);
+ final ViewGroup videoLayout = findViewById(R.id.videoLayout);
+
+ MastalabWebChromeClient mastalabWebChromeClient = new MastalabWebChromeClient(MediaActivity.this, webview_video, webview_container, videoLayout);
+ mastalabWebChromeClient.setOnToggledFullscreen(new MastalabWebChromeClient.ToggledFullscreenCallback() {
+ @Override
+ public void toggledFullscreen(boolean fullscreen) {
+
+ if (fullscreen) {
+ videoLayout.setVisibility(View.VISIBLE);
+ WindowManager.LayoutParams attrs = getWindow().getAttributes();
+ attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
+ attrs.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+ getWindow().setAttributes(attrs);
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
+ } else {
+ WindowManager.LayoutParams attrs = getWindow().getAttributes();
+ attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
+ attrs.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+ getWindow().setAttributes(attrs);
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
+ videoLayout.setVisibility(View.GONE);
+ }
+ }
+ });
+ webview_video.getSettings().setAllowFileAccess(true);
+ webview_video.setWebChromeClient(mastalabWebChromeClient);
+ webview_video.getSettings().setDomStorageEnabled(true);
+ webview_video.getSettings().setAppCacheEnabled(true);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ webview_video.getSettings().setMediaPlaybackRequiresUserGesture(false);
}
+ webview_video.setWebViewClient(new MastalabWebViewClient(MediaActivity.this));
+ webview_video.loadUrl(attachment.getUrl());
break;
}
}
@@ -485,10 +539,10 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MediaActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_STORAGE_REQUEST_CODE);
} else {
- Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo);
+ Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo, isSHaring);
}
} else {
- Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo);
+ Helper.manageMoveFileDownload(MediaActivity.this, preview_url, finalUrlDownload, downloadedImage, fileVideo, isSHaring);
}
if( progress != null)
progress.setVisibility(View.GONE);
@@ -497,9 +551,21 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
}
@Override
+ public void onPause(){
+ super.onPause();
+ if( player != null) {
+ player.setPlayWhenReady(false);
+ }
+ }
+
+ @Override
public void onResume(){
super.onResume();
FullScreencall();
+ if( player != null) {
+ player.setPlayWhenReady(true);
+ }
+
}
public void FullScreencall() {
if(Build.VERSION.SDK_INT < 19) {