|
@@ -30,6 +30,7 @@ import android.content.res.Resources;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.BitmapFactory;
|
|
import android.graphics.BitmapFactory;
|
|
import android.graphics.Color;
|
|
import android.graphics.Color;
|
|
|
|
+import android.graphics.drawable.Drawable;
|
|
import android.media.MediaMetadataRetriever;
|
|
import android.media.MediaMetadataRetriever;
|
|
import android.net.Uri;
|
|
import android.net.Uri;
|
|
import android.os.AsyncTask;
|
|
import android.os.AsyncTask;
|
|
@@ -64,6 +65,7 @@ import com.owncloud.android.databinding.FragmentPreviewMediaBinding;
|
|
import com.owncloud.android.datamodel.OCFile;
|
|
import com.owncloud.android.datamodel.OCFile;
|
|
import com.owncloud.android.datamodel.ThumbnailsCacheManager;
|
|
import com.owncloud.android.datamodel.ThumbnailsCacheManager;
|
|
import com.owncloud.android.files.StreamMediaFileOperation;
|
|
import com.owncloud.android.files.StreamMediaFileOperation;
|
|
|
|
+import com.owncloud.android.files.services.FileDownloader;
|
|
import com.owncloud.android.lib.common.OwnCloudClient;
|
|
import com.owncloud.android.lib.common.OwnCloudClient;
|
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
@@ -84,7 +86,9 @@ import javax.inject.Inject;
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.StringRes;
|
|
import androidx.annotation.StringRes;
|
|
|
|
+import androidx.appcompat.content.res.AppCompatResources;
|
|
import androidx.appcompat.widget.AppCompatImageButton;
|
|
import androidx.appcompat.widget.AppCompatImageButton;
|
|
|
|
+import androidx.core.graphics.drawable.DrawableCompat;
|
|
import androidx.drawerlayout.widget.DrawerLayout;
|
|
import androidx.drawerlayout.widget.DrawerLayout;
|
|
import androidx.fragment.app.FragmentActivity;
|
|
import androidx.fragment.app.FragmentActivity;
|
|
import androidx.fragment.app.FragmentManager;
|
|
import androidx.fragment.app.FragmentManager;
|
|
@@ -271,7 +275,7 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
|
|
setThumbnailForAudio(file);
|
|
setThumbnailForAudio(file);
|
|
}
|
|
}
|
|
} catch (Throwable t) {
|
|
} catch (Throwable t) {
|
|
- binding.imagePreview.setImageResource(R.drawable.logo);
|
|
|
|
|
|
+ setGenericThumbnail();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -284,7 +288,21 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
|
|
if (thumbnail != null) {
|
|
if (thumbnail != null) {
|
|
binding.imagePreview.setImageBitmap(thumbnail);
|
|
binding.imagePreview.setImageBitmap(thumbnail);
|
|
} else {
|
|
} else {
|
|
- binding.imagePreview.setImageResource(R.drawable.logo);
|
|
|
|
|
|
+ setGenericThumbnail();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Set generic icon (logo) as placeholder for thumbnail in preview.
|
|
|
|
+ */
|
|
|
|
+ private void setGenericThumbnail() {
|
|
|
|
+ Drawable logo = AppCompatResources.getDrawable(requireContext(), R.drawable.logo);
|
|
|
|
+ if (logo != null) {
|
|
|
|
+ if (!getResources().getBoolean(R.bool.is_branded_client)) {
|
|
|
|
+ // only colour logo of non-branded client
|
|
|
|
+ DrawableCompat.setTint(logo, getResources().getColor(R.color.primary, requireContext().getTheme()));
|
|
|
|
+ }
|
|
|
|
+ binding.imagePreview.setImageDrawable(logo);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -395,7 +413,6 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
|
|
showFileActions(file);
|
|
showFileActions(file);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return true;
|
|
|
|
}
|
|
}
|
|
return super.onOptionsItemSelected(item);
|
|
return super.onOptionsItemSelected(item);
|
|
}
|
|
}
|
|
@@ -409,7 +426,8 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
|
|
R.id.action_move,
|
|
R.id.action_move,
|
|
R.id.action_copy,
|
|
R.id.action_copy,
|
|
R.id.action_favorite,
|
|
R.id.action_favorite,
|
|
- R.id.action_unset_favorite
|
|
|
|
|
|
+ R.id.action_unset_favorite,
|
|
|
|
+ R.id.action_pin_to_homescreen
|
|
));
|
|
));
|
|
if (getFile() != null && getFile().isSharedWithMe() && !getFile().canReshare()) {
|
|
if (getFile() != null && getFile().isSharedWithMe() && !getFile().canReshare()) {
|
|
additionalFilter.add(R.id.action_send_share_file);
|
|
additionalFilter.add(R.id.action_send_share_file);
|
|
@@ -441,6 +459,13 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
|
|
getContext(),
|
|
getContext(),
|
|
getView(),
|
|
getView(),
|
|
backgroundJobManager);
|
|
backgroundJobManager);
|
|
|
|
+ } else if (itemId == R.id.action_download_file) {
|
|
|
|
+ if (!containerActivity.getFileDownloaderBinder().isDownloading(user, getFile())) {
|
|
|
|
+ Intent i = new Intent(requireActivity(), FileDownloader.class);
|
|
|
|
+ i.putExtra(FileDownloader.EXTRA_USER, user);
|
|
|
|
+ i.putExtra(FileDownloader.EXTRA_FILE, getFile());
|
|
|
|
+ requireActivity().startService(i);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -481,16 +506,16 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
|
|
private void playVideoUri(final Uri uri) {
|
|
private void playVideoUri(final Uri uri) {
|
|
binding.progress.setVisibility(View.GONE);
|
|
binding.progress.setVisibility(View.GONE);
|
|
|
|
|
|
- exoPlayer.addMediaItem(MediaItem.fromUri(uri));
|
|
|
|
|
|
+ exoPlayer.setMediaItem(MediaItem.fromUri(uri));
|
|
|
|
+ exoPlayer.setPlayWhenReady(autoplay);
|
|
exoPlayer.prepare();
|
|
exoPlayer.prepare();
|
|
|
|
|
|
if (savedPlaybackPosition >= 0) {
|
|
if (savedPlaybackPosition >= 0) {
|
|
exoPlayer.seekTo(savedPlaybackPosition);
|
|
exoPlayer.seekTo(savedPlaybackPosition);
|
|
}
|
|
}
|
|
|
|
|
|
- if (autoplay) {
|
|
|
|
- exoPlayer.play();
|
|
|
|
- }
|
|
|
|
|
|
+ // only autoplay video once
|
|
|
|
+ autoplay = false;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -635,7 +660,6 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
|
|
private void openFile() {
|
|
private void openFile() {
|
|
stopPreview(true);
|
|
stopPreview(true);
|
|
containerActivity.getFileOperationsHelper().openFile(getFile());
|
|
containerActivity.getFileOperationsHelper().openFile(getFile());
|
|
- finishPreview();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -653,17 +677,8 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
|
|
if (MimeTypeUtil.isAudio(file) && stopAudio) {
|
|
if (MimeTypeUtil.isAudio(file) && stopAudio) {
|
|
mediaPlayerServiceConnection.pause();
|
|
mediaPlayerServiceConnection.pause();
|
|
} else if (MimeTypeUtil.isVideo(file)) {
|
|
} else if (MimeTypeUtil.isVideo(file)) {
|
|
- exoPlayer.stop(true);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Finishes the preview
|
|
|
|
- */
|
|
|
|
- private void finishPreview() {
|
|
|
|
- final Activity activity = getActivity();
|
|
|
|
- if (activity != null) {
|
|
|
|
- activity.onBackPressed();
|
|
|
|
|
|
+ savedPlaybackPosition = exoPlayer.getCurrentPosition();
|
|
|
|
+ exoPlayer.stop();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|