Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.nextcloud.appReview.AppReviewShownModel;
import com.nextcloud.client.jobs.LogEntry;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.ui.fragment.FolderLayout;
import com.owncloud.android.utils.FileSortOrder;

import java.util.List;
Expand Down Expand Up @@ -131,19 +132,19 @@ default void onDarkThemeModeChanged(DarkMode mode) {
/**
* Get preferred folder display type.
*
* @param folder Folder
* @param layout FolderLayout
* @return preference value, default is
* {@link com.owncloud.android.ui.fragment.OCFileListFragment#FOLDER_LAYOUT_LIST}
*/
String getFolderLayout(OCFile folder);
String getFolderLayout(FolderLayout layout);

/**
* Set preferred folder display type.
*
* @param folder Folder which layout is being set or null for root folder
* @param layout FolderLayout which layout is being set
* @param layoutName preference value
*/
void setFolderLayout(@Nullable OCFile folder, String layoutName);
void setFolderLayout(@NonNull FolderLayout layout, String layoutName);

/**
* Saves the path where the user selected to do the last upload of a file shared from other app.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.ui.activity.PassCodeActivity;
import com.owncloud.android.ui.activity.SettingsActivity;
import com.owncloud.android.ui.fragment.FolderLayout;
import com.owncloud.android.utils.FileSortOrder;

import java.lang.reflect.Type;
Expand Down Expand Up @@ -82,7 +83,6 @@ public final class AppPreferencesImpl implements AppPreferences {
private static final String PREF__AUTO_UPLOAD_SPLIT_OUT = "autoUploadEntriesSplitOut";
private static final String PREF__AUTO_UPLOAD_INIT = "autoUploadInit";
private static final String PREF__FOLDER_SORT_ORDER = "folder_sort_order";
private static final String PREF__FOLDER_LAYOUT = "folder_layout";

private static final String PREF__LOCK_TIMESTAMP = "lock_timestamp";
private static final String PREF__SHOW_MEDIA_SCAN_NOTIFICATIONS = "show_media_scan_notifications";
Expand Down Expand Up @@ -336,21 +336,39 @@ public String[] getPassCode() {
}

@Override
public String getFolderLayout(OCFile folder) {
return getFolderPreference(context,
userAccountManager.getUser(),
PREF__FOLDER_LAYOUT,
folder,
FOLDER_LAYOUT_LIST);
public String getFolderLayout(FolderLayout layout) {
if (layout instanceof FolderLayout.Child child) {
// keep existing logic for child directories
return getFolderPreference(context,
userAccountManager.getUser(),
layout.getKey(),
child.getFolder(),
FOLDER_LAYOUT_LIST);
} else {
User user = userAccountManager.getUser();
if (user.isAnonymous()) {
return FOLDER_LAYOUT_LIST;
}

return preferences.getString(layout.getPrefKey(user), FOLDER_LAYOUT_LIST);
}
}

@Override
public void setFolderLayout(@Nullable OCFile folder, String layoutName) {
setFolderPreference(context,
userAccountManager.getUser(),
PREF__FOLDER_LAYOUT,
folder,
layoutName);
public void setFolderLayout(@NonNull FolderLayout layout, String layoutName) {
if (layout instanceof FolderLayout.Child child) {
setFolderPreference(context,
userAccountManager.getUser(),
child.getKey(),
child.getFolder(),
layoutName);
return;
}

// only use new way for root shared, favorite and all files
preferences.edit()
.putString(layout.getPrefKey(userAccountManager.getUser()), layoutName)
Comment thread
alperozturk96 marked this conversation as resolved.
.apply();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,10 @@ protected RemoteOperationResult run(OwnCloudClient client) {
if (result.isSuccess()) {
if (file.isFolder()) {
getStorageManager().moveLocalFile(file, newRemotePath, parent);
//saveLocalDirectory();

file.setFileName(newName);
if (!file.isEncrypted()) {
file.setDecryptedRemotePath(newRemotePath);
}
} else {
saveLocalFile(newRemotePath);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1691,6 +1691,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 @@ -2174,41 +2178,39 @@ 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
if (!result.isSuccess) {
Log_OC.e(TAG, "deletion failed")
return
}

// 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)
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()
}

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)
Comment thread
alperozturk96 marked this conversation as resolved.
}

override fun onAutoUploadFolderRemoved(
Expand Down Expand Up @@ -2352,38 +2354,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()) {
Comment thread
alperozturk96 marked this conversation as resolved.
updateListOfFilesFragment()
}
refreshGalleryFragmentIfNeeded()
fetchRecommendedFilesIfNeeded(ignoreETag = true, currentDir)
} else {
if (!result.isSuccess || optionalUser.isEmpty) {
DisplayUtils.showSnackMessage(
this,
ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())
Expand All @@ -2393,6 +2364,57 @@ class FileDisplayActivity :
mLastSslUntrustedServerResult = result
showUntrustedCertDialog(mLastSslUntrustedServerResult)
}
return
}

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

val file = storageManager.getFileById(renamedFile.parentId)
if (file != null && file == getCurrentDir()) {
fileListFragment?.adapter?.updateFile(renamedFile)
}

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 @@ -81,6 +81,7 @@
import java.util.Locale;
import java.util.Set;
import java.util.UUID;
import java.util.stream.IntStream;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
Expand Down Expand Up @@ -875,7 +876,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 +985,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 +1109,67 @@ 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 {
Comment thread
alperozturk96 marked this conversation as resolved.
notifyDataSetChanged();
}
Comment thread
alperozturk96 marked this conversation as resolved.
}

@SuppressLint("NotifyDataSetChanged")
public void updateFile(@NonNull OCFile updatedFile) {
long fileId = updatedFile.getFileId();

IntStream.range(0, mFilesAll.size())
.filter(i -> mFilesAll.get(i).getFileId() == fileId)
.findFirst()
.ifPresent(i -> mFilesAll.set(i, updatedFile));

int oldIndex = IntStream.range(0, mFiles.size())
.filter(i -> mFiles.get(i).getFileId() == fileId)
.findFirst()
.orElse(-1);
if (oldIndex == -1) return;

mFiles.remove(oldIndex);
mFiles.add(updatedFile);

FileSortOrder currentSortOrder = preferences.getSortOrderByFolder(currentDirectory);
if (searchType == SearchType.SHARED_FILTER) {
mFiles.sort((o1, o2) -> Long.compare(o2.getFirstShareTimestamp(), o1.getFirstShareTimestamp()));
} else {
boolean foldersBeforeFiles = preferences.isSortFoldersBeforeFiles();
boolean favoritesFirst = preferences.isSortFavoritesFirst();
mFiles = currentSortOrder.sortCloudFiles(mFiles, foldersBeforeFiles, favoritesFirst);
}

int newIndex = mFiles.indexOf(updatedFile);
if (newIndex == -1) {
notifyDataSetChanged();
return;
}

int headerOffset = shouldShowHeader() ? 1 : 0;
int oldAdapterPos = oldIndex + headerOffset;
int newAdapterPos = newIndex + headerOffset;

if (oldAdapterPos != newAdapterPos) {
notifyItemMoved(oldAdapterPos, newAdapterPos);
}
notifyItemChanged(newAdapterPos);

if (shouldShowRecommendedFiles() && recommendedFilesAdapter != null && updatedFile.isRecommendedFile()) {
int pos = recommendedFilesAdapter.getItemPosition(updatedFile);
if (pos != -1) recommendedFilesAdapter.notifyItemChanged(pos);
}
}

}
Loading
Loading