| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package com.datarecovery.master.module.preview;
- import android.app.Activity;
- import android.content.Context;
- import android.content.Intent;
- import android.media.MediaPlayer;
- import android.net.Uri;
- import android.os.Bundle;
- import android.view.SurfaceHolder;
- import androidx.annotation.IntDef;
- import androidx.annotation.NonNull;
- import androidx.annotation.Nullable;
- import androidx.viewpager2.widget.ViewPager2;
- import com.atmob.app.lib.base.BaseActivity;
- import com.atmob.common.ui.SizeUtil;
- import com.datarecovery.master.databinding.ActivityPreviewBinding;
- import com.datarecovery.master.utils.ImageDeepDetector;
- import com.datarecovery.master.utils.SafeMediaPlayer;
- import com.gyf.immersionbar.ImmersionBar;
- import java.lang.ref.WeakReference;
- import java.util.List;
- import dagger.hilt.android.AndroidEntryPoint;
- @AndroidEntryPoint
- public class PreviewActivity extends BaseActivity<ActivityPreviewBinding> {
- public static final int TYPE_IMG = 1;
- public static final int TYPE_VIDEO = 2;
- public static final int TYPE_AUDIO = 3;
- private PreviewViewModel previewViewModel;
- private MediaPlayer mediaPlayer;
- private boolean isSurfaceCreated;
- private PreviewImagePagerAdapter imagePagerAdapter;
- private ViewPager2.OnPageChangeCallback onPageChangeCallback;
- @IntDef({TYPE_IMG, TYPE_VIDEO, TYPE_AUDIO})
- @interface Type {
- }
- public static void startImagePreView(Context context, List<ImageDeepDetector.ImageFile> imageFileList, int position) {
- Intent intent = new Intent(context, PreviewActivity.class);
- intent.putExtra("type", TYPE_IMG);
- intent.putExtra("position", position);
- PreviewViewModel.weakReference = new WeakReference<>(imageFileList);
- if (!(context instanceof Activity)) {
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
- context.startActivity(intent);
- }
- public static void start(Context context, @Type int type, Uri uri) {
- Intent intent = new Intent(context, PreviewActivity.class);
- intent.putExtra("type", type);
- intent.putExtra("uri", uri);
- if (!(context instanceof Activity)) {
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
- context.startActivity(intent);
- }
- @Override
- protected boolean shouldImmersion() {
- return true;
- }
- @Override
- protected void configImmersion(@NonNull ImmersionBar immersionBar) {
- immersionBar.statusBarDarkFont(true);
- }
- @Override
- protected void initViewModel() {
- previewViewModel = getViewModelProvider().get(PreviewViewModel.class);
- binding.setPreviewViewModel(previewViewModel);
- }
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- initView();
- initIntentData();
- initObserver();
- }
- private void initObserver() {
- }
- private void initIntentData() {
- int type = getIntent().getIntExtra("type", 0);
- int position = getIntent().getIntExtra("position", 0);
- previewViewModel.setPreviewData(type, position);
- if (type == TYPE_IMG) {
- initImagePreviewPager();
- } else {
- Uri uri = getIntent().getParcelableExtra("uri");
- previewViewModel.setUri(uri);
- if (type == TYPE_VIDEO || type == TYPE_AUDIO) {
- initMediaPlayer(uri);
- }
- if (type == TYPE_VIDEO) {
- initSurfaceView();
- }
- }
- }
- private void initView() {
- addTopStatusBarHeight(binding.previewHeader);
- binding.previewVideoContainer.setOnClickListener(v -> {
- if (isSurfaceCreated) {
- previewViewModel.setIsPlayStart();
- if (mediaPlayer.isPlaying()) {
- mediaPlayer.pause();
- } else {
- mediaPlayer.start();
- }
- previewViewModel.setIsPlaying(mediaPlayer.isPlaying());
- }
- });
- }
- private void initImagePreviewPager() {
- imagePagerAdapter = new PreviewImagePagerAdapter(previewViewModel.getImagePreviewList());
- binding.previewViewPager.setAdapter(imagePagerAdapter);
- onPageChangeCallback = new ViewPager2.OnPageChangeCallback() {
- @Override
- public void onPageSelected(int position) {
- previewViewModel.setPosition(position);
- }
- };
- binding.previewViewPager.registerOnPageChangeCallback(onPageChangeCallback);
- binding.previewViewPager.setCurrentItem(previewViewModel.getPosition(), false);
- }
- private void initSurfaceView() {
- SurfaceHolder holder = binding.previewVideo.getHolder();
- holder.addCallback(new SurfaceHolder.Callback() {
- @Override
- public void surfaceCreated(@NonNull SurfaceHolder holder) {
- mediaPlayer.setDisplay(holder);
- isSurfaceCreated = true;
- }
- @Override
- public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
- }
- @Override
- public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
- mediaPlayer.stop();
- mediaPlayer.setDisplay(null);
- }
- });
- }
- private void initMediaPlayer(Uri uri) {
- mediaPlayer = new SafeMediaPlayer();
- try {
- mediaPlayer.setDataSource(this, uri);
- mediaPlayer.setOnPreparedListener(mp -> {
- int videoWidth = mediaPlayer.getVideoWidth();
- int screenWidth = SizeUtil.getScreenWidth();
- float scaleX = screenWidth / (videoWidth * 1f);
- int width = (int) (videoWidth * scaleX);
- int height = (int) (mediaPlayer.getVideoHeight() * scaleX);
- binding.previewVideo.resize(width, height);
- });
- mediaPlayer.prepareAsync();
- } catch (Exception ignored) {
- }
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- binding.previewViewPager.unregisterOnPageChangeCallback(onPageChangeCallback);
- }
- }
|