Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ default void onDarkThemeModeChanged(DarkMode mode) {
* @return preference value, default is
* {@link com.owncloud.android.ui.fragment.OCFileListFragment#FOLDER_LAYOUT_LIST}
*/
String getFolderLayout(OCFile folder);
String getFolderLayout(OCFile folder, String defaultLayout);

/**
* Set preferred folder display type.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -336,12 +336,12 @@ public String[] getPassCode() {
}

@Override
public String getFolderLayout(OCFile folder) {
public String getFolderLayout(OCFile folder, String defaultLayout) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please adopt to use it like in " setSortOrder(FileSortOrder.Type type"

return getFolderPreference(context,
userAccountManager.getUser(),
PREF__FOLDER_LAYOUT,
folder,
FOLDER_LAYOUT_LIST);
defaultLayout);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1680,6 +1680,10 @@ class FileDisplayActivity :
it.setEmptyListMessage(EmptyListState.ONLY_ON_DEVICE)
}

it.searchEvent?.searchType == SearchRemoteOperation.SearchType.FAVORITE_SEARCH -> {
it.setEmptyListMessage(SearchType.FAVORITE_SEARCH)
}

else -> it.setEmptyListMessage(SearchType.NO_SEARCH)
}
}
Expand Down Expand Up @@ -2163,41 +2167,34 @@ class FileDisplayActivity :
*/
private fun onRemoveFileOperationFinish(operation: RemoveFileOperation, result: RemoteOperationResult<*>) {
deleteBatchTracker.onSingleDeleteFinished()
if (!result.isSuccess && result.isSslRecoverableException) {
mLastSslUntrustedServerResult = result
showUntrustedCertDialog(mLastSslUntrustedServerResult)
return
}

if (result.isSuccess) {
val removedFile = operation.file
tryStopPlaying(removedFile)
val leftFragment = this.leftFragment
val removedFile = operation.file
tryStopPlaying(removedFile)
val leftFragment = this.leftFragment

// check if file is still available, if so do nothing
val fileAvailable = storageManager.fileExists(removedFile.fileId)
if (leftFragment is FileFragment && !fileAvailable && removedFile == leftFragment.file) {
file = storageManager.getFileById(removedFile.parentId)
resetScrollingAndUpdateActionBar()
}
val parentFile = storageManager.getFileById(removedFile.parentId)
if (parentFile != null && parentFile == getCurrentDir()) {
updateListOfFilesFragment()
} else if (leftFragment is OCFileListFragment &&
SearchRemoteOperation.SearchType.FAVORITE_SEARCH == leftFragment.searchEvent?.searchType
) {
leftFragment.adapter?.run {
val file = files.find { it.fileId == removedFile.fileId }
if (file != null) {
val pos = getItemPosition(file)
files.remove(file)
notifyItemRemoved(pos)
}
}
}
supportInvalidateOptionsMenu()
fetchRecommendedFilesIfNeeded(ignoreETag = true, currentDir)
} else {
if (result.isSslRecoverableException) {
mLastSslUntrustedServerResult = result
showUntrustedCertDialog(mLastSslUntrustedServerResult)
// check if file is still available, if so do nothing
val fileAvailable = storageManager.fileExists(removedFile.fileId)
if (leftFragment is FileFragment && !fileAvailable && removedFile == leftFragment.file) {
file = storageManager.getFileById(removedFile.parentId)
resetScrollingAndUpdateActionBar()
}

if (leftFragment is OCFileListFragment) {
leftFragment.adapter?.removeFile(removedFile)

if (leftFragment.adapter?.isEmpty == true) {
val emptyState = leftFragment.searchEvent?.toSearchType() ?: SearchType.NO_SEARCH
leftFragment.setEmptyListMessage(emptyState)
}
}

supportInvalidateOptionsMenu()
fetchRecommendedFilesIfNeeded(ignoreETag = true, currentDir)
}

override fun onAutoUploadFolderRemoved(
Expand Down Expand Up @@ -2341,38 +2338,7 @@ class FileDisplayActivity :
private fun onRenameFileOperationFinish(operation: RenameFileOperation, result: RemoteOperationResult<*>) {
val optionalUser = user
val renamedFile = operation.file
if (result.isSuccess && optionalUser.isPresent) {
val currentUser = optionalUser.get()
val leftFragment = this.leftFragment
if (leftFragment is FileFragment) {
if (leftFragment is FileDetailFragment && renamedFile == leftFragment.file) {
leftFragment.updateFileDetails(renamedFile, currentUser)
showDetails(renamedFile)
} else if (leftFragment is PreviewMediaFragment && renamedFile == leftFragment.file) {
leftFragment.updateFile(renamedFile)
if (PreviewMediaFragment.canBePreviewed(renamedFile)) {
val position = leftFragment.position
startMediaPreview(renamedFile, position, true, true, true, false)
} else {
fileOperationsHelper.openFile(renamedFile)
}
} else if (leftFragment is PreviewTextFragment && renamedFile == leftFragment.file) {
(leftFragment as PreviewTextFileFragment).updateFile(renamedFile)
if (PreviewTextFileFragment.canBePreviewed(renamedFile)) {
startTextPreview(renamedFile, true)
} else {
fileOperationsHelper.openFile(renamedFile)
}
}
}

val file = storageManager.getFileById(renamedFile.parentId)
if (file != null && file == getCurrentDir()) {
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if (file != null && file == getCurrentDir()) {

Is there any reason to use this condition here @tobiasKaminsky ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need it, yes. If e.g. someone renames a file and directly navigates to another folder.
then we do not need to refresh the other folder.

updateListOfFilesFragment()
}
refreshGalleryFragmentIfNeeded()
fetchRecommendedFilesIfNeeded(ignoreETag = true, currentDir)
} else {
if (!result.isSuccess || optionalUser.isEmpty) {
DisplayUtils.showSnackMessage(
this,
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())
Expand All @@ -2382,6 +2348,53 @@ class FileDisplayActivity :
mLastSslUntrustedServerResult = result
showUntrustedCertDialog(mLastSslUntrustedServerResult)
}
return
}

val currentUser = optionalUser.get()
val leftFragment = this.leftFragment
if (leftFragment is FileFragment) {
onRenameFileOperationFinishForFileFragment(leftFragment, renamedFile, currentUser)
}

updateListOfFilesFragment()
refreshGalleryFragmentIfNeeded()
fetchRecommendedFilesIfNeeded(ignoreETag = true, currentDir)
}

private fun onRenameFileOperationFinishForFileFragment(fragment: FileFragment, ocFile: OCFile, user: User) {
if (fragment.file != ocFile) return

when (fragment) {
is FileDetailFragment -> {
fragment.updateFileDetails(ocFile, user)
showDetails(ocFile)
}

is PreviewMediaFragment -> {
fragment.updateFile(ocFile)
if (PreviewMediaFragment.canBePreviewed(ocFile)) {
startMediaPreview(
ocFile,
fragment.position,
true,
true,
true,
false
)
} else {
fileOperationsHelper.openFile(ocFile)
}
}

is PreviewTextFileFragment -> {
fragment.updateFile(ocFile)
if (PreviewTextFileFragment.canBePreviewed(ocFile)) {
startTextPreview(ocFile, true)
} else {
fileOperationsHelper.openFile(ocFile)
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -875,7 +875,9 @@ public void swapDirectory(
public void updateAdapter(List<OCFile> newFiles, OCFile directory) {
Log_OC.d(TAG, "updating the adapter");

mFiles = new ArrayList<>(newFiles);
mFiles.clear();
mFiles.addAll(newFiles);

mFilesAll.clear();
mFilesAll.addAll(mFiles);

Expand Down Expand Up @@ -982,12 +984,6 @@ public void insertFile(@Nullable OCFile file) {
}
}

public void addVirtualFile(@NonNull OCFile file) {
if (mFiles.isEmpty() || !mFiles.contains(file)) {
mFiles.add(file);
}
}

@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
super.onViewRecycled(holder);
Expand Down Expand Up @@ -1112,4 +1108,18 @@ public void removeAllFiles() {
mFilesAll.clear();
notifyDataSetChanged();
}

@SuppressLint("NotifyDataSetChanged")
public void removeFile(@NonNull OCFile file) {
int position = getItemPosition(file);

mFiles.remove(file);
mFilesAll.remove(file);

if (position != -1) {
notifyItemRemoved(position);
} else {
notifyDataSetChanged();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,6 @@ import com.owncloud.android.utils.KeyboardUtils
import com.owncloud.android.utils.theme.ViewThemeUtils
import javax.inject.Inject

/**
* Dialog to input a new name for an [OCFile] being renamed.
* Triggers the rename operation.
*/
class RenameFileDialogFragment :
DialogFragment(),
DialogInterface.OnClickListener,
Expand All @@ -58,7 +54,7 @@ class RenameFileDialogFragment :
lateinit var currentAccount: CurrentAccountProvider

private lateinit var binding: EditBoxDialogBinding
private var mTargetFile: OCFile? = null
private var targetFile: OCFile? = null
private var positiveButton: MaterialButton? = null
private var fileNames: MutableSet<String>? = null

Expand All @@ -73,15 +69,15 @@ class RenameFileDialogFragment :
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
mTargetFile = requireArguments().getParcelableArgument(ARG_TARGET_FILE, OCFile::class.java)
targetFile = requireArguments().getParcelableArgument(ARG_TARGET_FILE, OCFile::class.java)

val inflater = requireActivity().layoutInflater
binding = EditBoxDialogBinding.inflate(inflater, null, false)

val currentName = mTargetFile?.fileName
val currentName = targetFile?.fileName
binding.userInput.setText(currentName)
viewThemeUtils.material.colorTextInputLayout(binding.userInputContainer)
val extensionStart = if (mTargetFile?.isFolder == true) -1 else currentName?.lastIndexOf('.')
val extensionStart = if (targetFile?.isFolder == true) -1 else currentName?.lastIndexOf('.')
val selectionEnd = if ((extensionStart ?: -1) >= 0) extensionStart else currentName?.length
if (selectionEnd != null) {
binding.userInput.setSelection(0, selectionEnd)
Expand All @@ -97,7 +93,7 @@ class RenameFileDialogFragment :

binding.userInput.addTextChangedListener(
FileNameTextWatcher(
previousFileName = mTargetFile?.fileName,
previousFileName = targetFile?.fileName,
context = binding.userInputContainer.context,
capabilitiesProvider = { oCCapability },
existingFileNamesProvider = { fileNames ?: setOf() },
Expand Down Expand Up @@ -168,17 +164,24 @@ class RenameFileDialogFragment :
return
}

if (mTargetFile?.isOfflineOperation == true) {
fileDataStorageManager.renameOfflineOperation(mTargetFile, newFileName)
typedActivity<FileDisplayActivity>()?.refreshCurrentDirectory()
} else {
typedActivity<FileDisplayActivity>()?.connectivityService?.isNetworkAndServerAvailable { result ->
if (result) {
typedActivity<ComponentsGetter>()?.fileOperationsHelper?.renameFile(mTargetFile, newFileName)
} else {
fileDataStorageManager.addRenameFileOfflineOperation(mTargetFile, newFileName)
typedActivity<FileDisplayActivity>()?.refreshCurrentDirectory()
}
val fda = typedActivity<FileDisplayActivity>()

if (targetFile?.isOfflineOperation == true) {
fileDataStorageManager.renameOfflineOperation(targetFile, newFileName)
fda?.refreshCurrentDirectory()
return
}

fda?.connectivityService?.isNetworkAndServerAvailable { result ->
if (result) {
/*
* result of it triggered by
* [com.owncloud.android.ui.activity.FileDisplayActivity.onRemoteOperationFinish]
*/
typedActivity<ComponentsGetter>()?.fileOperationsHelper?.renameFile(targetFile, newFileName)
} else {
fileDataStorageManager.addRenameFileOfflineOperation(targetFile, newFileName)
fda.refreshCurrentDirectory()
}
}
}
Expand All @@ -188,22 +191,13 @@ class RenameFileDialogFragment :
private const val ARG_TARGET_FILE = "TARGET_FILE"
private const val ARG_PARENT_FOLDER = "PARENT_FOLDER"

/**
* Public factory method to create new RenameFileDialogFragment instances.
*
* @param file File to rename.
* @return Dialog ready to show.
*/
@JvmStatic
fun newInstance(file: OCFile?, parentFolder: OCFile?): RenameFileDialogFragment {
val bundle = Bundle().apply {
putParcelable(ARG_TARGET_FILE, file)
putParcelable(ARG_PARENT_FOLDER, parentFolder)
}

return RenameFileDialogFragment().apply {
arguments = bundle
fun newInstance(file: OCFile?, parentFolder: OCFile?): RenameFileDialogFragment =
RenameFileDialogFragment().apply {
arguments = Bundle().apply {
putParcelable(ARG_TARGET_FILE, file)
putParcelable(ARG_PARENT_FOLDER, parentFolder)
}
}
}
}
}
Loading
Loading