diff options
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.java | 148 |
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) { |