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 a08cba02d738..a84331685257 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 c4b99d48bdfa..3b5c12a2a17d 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -976,6 +976,10 @@ private long nullToZero(Long i) { 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()); @@ -1040,7 +1044,7 @@ private OCFile createFileInstance(FileEntity fileEntity) { 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 b432add035ef..b766a3d67953 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 978b8c73172a..a35f362bdec6 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 4304150df226..680b9213910c 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 ef279d0b936f..0d480ab72456 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1237,4 +1237,5 @@ Filenames must not contain spaces at the beginning or end Sync Please select a server… + Remove folder from internal two way sync