diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/RemoveFilesDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/RemoveFilesDialogFragment.kt index cde23d60fdfd..9c300b54083b 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/RemoveFilesDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/RemoveFilesDialogFragment.kt @@ -24,7 +24,6 @@ import com.owncloud.android.datamodel.OCFile import com.owncloud.android.ui.activity.FileActivity import com.owncloud.android.ui.activity.FileDisplayActivity import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener -import com.owncloud.android.ui.preview.PreviewImageActivity import javax.inject.Inject /** @@ -125,14 +124,11 @@ class RemoveFilesDialogFragment : } finishActionMode() - finishPreviewImageActivity() } } override fun onNeutral(callerTag: String?) = Unit - private fun finishPreviewImageActivity() = getTypedActivity(PreviewImageActivity::class.java)?.finish() - private fun setActionMode(actionMode: ActionMode?) { this.actionMode = actionMode } diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt index 1d575dd32f5a..0ab320e7f09e 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt @@ -56,6 +56,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import java.io.Serializable import javax.inject.Inject import kotlin.math.max +import kotlin.math.min /** * Holds a swiping gallery where image files contained in an Nextcloud directory are shown. @@ -216,6 +217,17 @@ class PreviewImageActivity : } } + private fun updateViewPagerAfterDeletionAndAdvanceForward() { + val deletePosition = viewPager?.currentItem ?: return + previewImagePagerAdapter?.let { adapter -> + val nextPosition = min(deletePosition, adapter.itemCount - 1) + viewPager?.setCurrentItem(nextPosition, true) + adapter.delete(deletePosition) + // Page needs to be reselected after the adapter has been updated. Otherwise, wrong title is shown + selectPage(nextPosition) + } + } + private fun handleBackPress() { onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { @@ -285,9 +297,6 @@ class PreviewImageActivity : super.onRemoteOperationFinish(operation, result) if (operation is RemoveFileOperation) { - val deletePosition = viewPager?.currentItem ?: return - val nextPosition = if (deletePosition > 0) deletePosition - 1 else 0 - previewImagePagerAdapter?.let { if (it.itemCount <= 1) { backToDisplayActivity() @@ -295,12 +304,9 @@ class PreviewImageActivity : } } - if (user.isPresent) { - initViewPager(user.get()) + if (result.isSuccess) { + updateViewPagerAfterDeletionAndAdvanceForward() } - - viewPager?.setCurrentItem(nextPosition, true) - previewImagePagerAdapter?.delete(deletePosition) } else if (operation is SynchronizeFileOperation) { onSynchronizeFileOperationFinish(result) } diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt index 577f5c38c9d5..9f75a6972e05 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt @@ -205,4 +205,11 @@ class PreviewImagePagerAdapter : FragmentStateAdapter { override fun createFragment(position: Int): Fragment = getItem(position) override fun getItemCount(): Int = imageFiles.size + + override fun getItemId(position: Int): Long { + // The item ID function is needed to detect whether the deletion of the current item needs a UI update + return imageFiles.getOrNull(position)?.fileId ?: position.toLong() + } + + override fun containsItem(itemId: Long): Boolean = imageFiles.any { it.fileId == itemId } }