diff --git a/app/src/main/java/com/nextcloud/client/jobs/InternalTwoWaySyncWork.kt b/app/src/main/java/com/nextcloud/client/jobs/InternalTwoWaySyncWork.kt index a08cba02d7..a843316852 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/InternalTwoWaySyncWork.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/InternalTwoWaySyncWork.kt @@ -52,6 +52,13 @@ class InternalTwoWaySyncWork( return checkFreeSpaceResult } + // do not attempt to sync root folder + if (folder.remotePath == OCFile.ROOT_PATH) { + folder.internalFolderSyncTimestamp = -1L + fileDataStorageManager.saveFile(folder) + continue + } + Log_OC.d(TAG, "Folder ${folder.remotePath}: started!") val operation = SynchronizeFolderOperation(context, folder.remotePath, user, fileDataStorageManager) .execute(context) diff --git a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java index a2963f75cf..33c8170068 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -1126,6 +1126,10 @@ public class FileDataStorageManager { return (i == null) ? 0 : i; } + private long nullToMinusOne(Long i) { + return (i == null) ? -1L : i; + } + private OCFile createFileInstance(FileEntity fileEntity) { OCFile ocFile = new OCFile(fileEntity.getPath()); ocFile.setDecryptedRemotePath(fileEntity.getPathDecrypted()); @@ -1190,7 +1194,7 @@ public class FileDataStorageManager { ocFile.setLivePhoto(fileEntity.getMetadataLivePhoto()); ocFile.setHidden(nullToZero(fileEntity.getHidden()) == 1); ocFile.setE2eCounter(fileEntity.getE2eCounter()); - ocFile.setInternalFolderSyncTimestamp(nullToZero(fileEntity.getInternalTwoWaySync())); + ocFile.setInternalFolderSyncTimestamp(nullToMinusOne(fileEntity.getInternalTwoWaySync())); String sharees = fileEntity.getSharees(); // Surprisingly JSON deserialization causes significant overhead. diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/InternalTwoWaySyncAdapter.kt b/app/src/main/java/com/owncloud/android/ui/adapter/InternalTwoWaySyncAdapter.kt index b432add035..b766a3d679 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/InternalTwoWaySyncAdapter.kt +++ b/app/src/main/java/com/owncloud/android/ui/adapter/InternalTwoWaySyncAdapter.kt @@ -7,6 +7,7 @@ package com.owncloud.android.ui.adapter +import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.ViewGroup @@ -17,8 +18,8 @@ import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.OCFile class InternalTwoWaySyncAdapter( - dataStorageManager: FileDataStorageManager, - user: User, + private val dataStorageManager: FileDataStorageManager, + private val user: User, val context: Context ) : RecyclerView.Adapter() { var folders: List = dataStorageManager.getInternalTwoWaySyncFolders(user) @@ -38,6 +39,12 @@ class InternalTwoWaySyncAdapter( } override fun onBindViewHolder(holder: InternalTwoWaySyncViewHolder, position: Int) { - holder.bind(folders[position], context) + holder.bind(folders[position], context, dataStorageManager, this) + } + + @SuppressLint("NotifyDataSetChanged") + fun update() { + folders = dataStorageManager.getInternalTwoWaySyncFolders(user) + notifyDataSetChanged() } } diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/InternalTwoWaySyncViewHolder.kt b/app/src/main/java/com/owncloud/android/ui/adapter/InternalTwoWaySyncViewHolder.kt index 978b8c7317..a35f362bde 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/InternalTwoWaySyncViewHolder.kt +++ b/app/src/main/java/com/owncloud/android/ui/adapter/InternalTwoWaySyncViewHolder.kt @@ -12,12 +12,18 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView import com.owncloud.android.R import com.owncloud.android.databinding.InternalTwoWaySyncViewHolderBinding +import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.OCFile import com.owncloud.android.utils.DisplayUtils class InternalTwoWaySyncViewHolder(val binding: InternalTwoWaySyncViewHolderBinding) : RecyclerView.ViewHolder(binding.root) { - fun bind(folder: OCFile, context: Context) { + fun bind( + folder: OCFile, + context: Context, + dataStorageManager: FileDataStorageManager, + internalTwoWaySyncAdapter: InternalTwoWaySyncAdapter + ) { binding.run { size.text = DisplayUtils.bytesToHumanReadable(folder.fileLength) name.text = folder.decryptedFileName @@ -39,6 +45,12 @@ class InternalTwoWaySyncViewHolder(val binding: InternalTwoWaySyncViewHolderBind folder.internalFolderSyncTimestamp ) } + + unset.setOnClickListener { + folder.internalFolderSyncTimestamp = -1L + dataStorageManager.saveFile(folder) + internalTwoWaySyncAdapter.update() + } } } } diff --git a/app/src/main/res/layout/internal_two_way_sync_view_holder.xml b/app/src/main/res/layout/internal_two_way_sync_view_holder.xml index 4304150df2..680b921391 100644 --- a/app/src/main/res/layout/internal_two_way_sync_view_holder.xml +++ b/app/src/main/res/layout/internal_two_way_sync_view_holder.xml @@ -22,10 +22,11 @@ android:src="@drawable/folder" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 19f1cec7ec..fe4e5083d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1247,4 +1247,5 @@ Sync Please select a server… Unread notifications exist + Remove folder from internal two way sync