Skip to content

Commit b2acf70

Browse files
Merge pull request #17093 from nextcloud/feat/swipe-video-preview-to-image-from-file-list
feat: swipe video preview to image from file list
2 parents 0be315c + 059b9bd commit b2acf70

7 files changed

Lines changed: 40 additions & 38 deletions

File tree

app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,22 @@ public List<OCFile> getFolderImages(OCFile folder, boolean onlyOnDevice) {
521521
return imageList;
522522
}
523523

524+
public List<OCFile> getFolderImagesAndVideos(OCFile folder, boolean onlyOnDevice) {
525+
List<OCFile> mediaList = new ArrayList<>();
526+
527+
if (folder != null) {
528+
List<OCFile> folderContent = getFolderContent(folder, onlyOnDevice);
529+
530+
for (OCFile ocFile : folderContent) {
531+
if (MimeTypeUtil.isImageOrVideo(ocFile)) {
532+
mediaList.add(ocFile);
533+
}
534+
}
535+
}
536+
537+
return mediaList;
538+
}
539+
524540
public boolean saveFile(OCFile ocFile) {
525541
Log_OC.d(TAG, "saving file: " + ocFile.getRemotePath());
526542

app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,11 @@ class FileDisplayActivity :
870870
val file = mWaitingToPreview ?: return false
871871

872872
return when {
873+
MimeTypeUtil.isVideo(file) -> {
874+
startImagePreview(file, true)
875+
true
876+
}
877+
873878
PreviewMediaActivity.canBePreviewed(file) -> {
874879
startMediaPreview(file, 0, true, true, true, true)
875880
true
@@ -2041,6 +2046,9 @@ class FileDisplayActivity :
20412046
} else if (PreviewTextFileFragment.canBePreviewed(file)) {
20422047
setFabVisible?.onComplete(false)
20432048
startTextPreview(file, false)
2049+
} else if (MimeTypeUtil.isVideo(file)) {
2050+
setFabVisible?.onComplete(false)
2051+
startImagePreview(file, true)
20442052
} else if (PreviewMediaActivity.Companion.canBePreviewed(file)) {
20452053
setFabVisible?.onComplete(false)
20462054
startMediaPreview(file, 0, true, true, false, true)

app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118
import com.owncloud.android.utils.EncryptionUtilsV2;
119119
import com.owncloud.android.utils.FileSortOrder;
120120
import com.owncloud.android.utils.FileStorageUtils;
121+
import com.owncloud.android.utils.MimeTypeUtil;
121122
import com.owncloud.android.utils.PermissionUtil;
122123
import com.owncloud.android.utils.overlay.OverlayManager;
123124
import com.owncloud.android.utils.theme.ThemeUtils;
@@ -1213,7 +1214,10 @@ private void handlePendingDownloadFile(OCFile file) {
12131214
User account = accountManager.getUser();
12141215
OCCapability capability = mContainerActivity.getStorageManager().getCapability(account.getAccountName());
12151216

1216-
if (PreviewMediaActivity.Companion.canBePreviewed(file) && !file.isEncrypted() && mContainerActivity instanceof FileDisplayActivity fda) {
1217+
if (MimeTypeUtil.isVideo(file) && !file.isEncrypted() && mContainerActivity instanceof FileDisplayActivity fda) {
1218+
setFabVisible(false);
1219+
fda.startImagePreview(file, true, null);
1220+
} else if (PreviewMediaActivity.Companion.canBePreviewed(file) && !file.isEncrypted() && mContainerActivity instanceof FileDisplayActivity fda) {
12171221
setFabVisible(false);
12181222
fda.startMediaPreview(file, 0, true, true, true, true);
12191223
} else if (editorUtils.isEditorAvailable(accountManager.getUser(), file.getMimeType()) && !file.isEncrypted()) {

app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,8 @@ class PreviewImageActivity :
278278
val optionalUser = user
279279
if (optionalUser.isPresent) {
280280
var file: OCFile? = file ?: throw IllegalStateException("Instanced with a NULL OCFile")
281-
// / Validate handled file (first image to preview)
282-
require(MimeTypeUtil.isImage(file)) { "Non-image file passed as argument" }
281+
// / Validate handled file (first media item to preview)
282+
require(MimeTypeUtil.isImageOrVideo(file)) { "Non-image/video file passed as argument" }
283283

284284
// Update file according to DB file, if it is possible
285285
if (file!!.fileId > FileDataStorageManager.ROOT_PARENT_ID) {

app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class PreviewImagePagerAdapter : FragmentStateAdapter {
6060
this.user = user
6161
this.selectedFile = selectedFile
6262
mStorageManager = storageManager
63-
imageFiles = mStorageManager.getFolderImages(parentFolder, onlyOnDevice)
63+
imageFiles = mStorageManager.getFolderImagesAndVideos(parentFolder, onlyOnDevice)
6464

6565
val sortOrder = preferences.getSortOrderByFolder(parentFolder)
6666
val foldersBeforeFiles = preferences.isSortFoldersBeforeFiles()

app/src/main/java/com/owncloud/android/ui/preview/PreviewMediaActivity.kt

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
*/
1313
package com.owncloud.android.ui.preview
1414

15-
import android.app.Activity
1615
import android.content.ComponentName
1716
import android.content.DialogInterface
1817
import android.content.Intent
@@ -143,7 +142,6 @@ class PreviewMediaActivity :
143142
WindowCompat.setDecorFitsSystemWindows(window, false)
144143
applyWindowInsets()
145144
initArguments(savedInstanceState)
146-
147145
if (MimeTypeUtil.isVideo(file)) {
148146
// release any background media session if exists
149147
sendAudioSessionReleaseBroadcast()
@@ -799,13 +797,8 @@ class PreviewMediaActivity :
799797
showDetails(file)
800798
}
801799

802-
override fun onBrowsedDownTo(folder: OCFile?) {
803-
// TODO Auto-generated method stub
804-
}
805-
806-
override fun onTransferStateChanged(file: OCFile?, downloading: Boolean, uploading: Boolean) {
807-
// TODO Auto-generated method stub
808-
}
800+
override fun onBrowsedDownTo(folder: OCFile?) = Unit
801+
override fun onTransferStateChanged(file: OCFile?, downloading: Boolean, uploading: Boolean) = Unit
809802

810803
override fun onConfigurationChanged(newConfig: Configuration) {
811804
super.onConfigurationChanged(newConfig)
@@ -818,15 +811,12 @@ class PreviewMediaActivity :
818811
Log_OC.v(TAG, "onActivityResult $this")
819812
super.onActivityResult(requestCode, resultCode, data)
820813

821-
if (resultCode == Activity.RESULT_OK) {
814+
if (resultCode == RESULT_OK) {
822815
savedPlaybackPosition = data?.getLongExtra(EXTRA_START_POSITION, 0) ?: 0
823816
autoplay = data?.getBooleanExtra(EXTRA_AUTOPLAY, false) ?: false
824817
}
825818
}
826819

827-
/**
828-
* Opens the previewed file with an external application.
829-
*/
830820
private fun openFile() {
831821
stopPreview(true)
832822
fileOperationsHelper.openFile(file)
@@ -855,12 +845,6 @@ class PreviewMediaActivity :
855845
private const val PLAYBACK_POSITION = "PLAYBACK_POSITION"
856846
private const val AUTOPLAY = "AUTOPLAY"
857847

858-
/**
859-
* Helper method to test if an [OCFile] can be passed to a [PreviewMediaActivity] to be previewed.
860-
*
861-
* @param file File to test if can be previewed.
862-
* @return 'True' if the file can be handled by the activity.
863-
*/
864848
fun canBePreviewed(file: OCFile?): Boolean =
865849
file != null && (MimeTypeUtil.isAudio(file) || MimeTypeUtil.isVideo(file))
866850
}

app/src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.kt

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ class PreviewMediaFragment :
185185
override fun onResume() {
186186
super.onResume()
187187
applyWindowInsets()
188+
prepareMedia()
188189
}
189190

190191
@OptIn(UnstableApi::class)
@@ -238,18 +239,13 @@ class PreviewMediaFragment :
238239
putParcelable(EXTRA_FILE, file)
239240
putParcelable(EXTRA_USER, user)
240241

241-
savedPlaybackPosition = exoPlayer?.currentPosition ?: 0L
242-
autoplay = exoPlayer?.isPlaying ?: false
242+
savedPlaybackPosition = exoPlayer?.currentPosition ?: savedPlaybackPosition
243+
autoplay = exoPlayer?.isPlaying ?: autoplay
243244
putLong(EXTRA_PLAY_POSITION, savedPlaybackPosition)
244245
putBoolean(EXTRA_PLAYING, autoplay)
245246
}
246247
}
247248

248-
override fun onStart() {
249-
super.onStart()
250-
prepareMedia()
251-
}
252-
253249
private fun prepareMedia() {
254250
if (file == null || !isAdded) {
255251
Log_OC.d(TAG, "File is null or fragment not attached to a context.")
@@ -499,12 +495,11 @@ class PreviewMediaFragment :
499495
autoplay = false
500496
}
501497

502-
override fun onStop() {
498+
override fun onPause() {
503499
if (!isFullscreenActive) {
504500
releaseVideoPlayer()
505501
}
506-
releaseVideoPlayer()
507-
super.onStop()
502+
super.onPause()
508503
}
509504

510505
@SuppressLint("ClickableViewAccessibility")
@@ -585,11 +580,6 @@ class PreviewMediaFragment :
585580
super.onDetach()
586581
}
587582

588-
override fun onPause() {
589-
exoPlayer?.pause()
590-
super.onPause()
591-
}
592-
593583
companion object {
594584
private val TAG: String = PreviewMediaFragment::class.java.simpleName
595585

0 commit comments

Comments
 (0)