diff --git a/app/src/androidTest/java/com/nextcloud/utils/SharePermissionManagerTest.kt b/app/src/androidTest/java/com/nextcloud/utils/SharePermissionManagerTest.kt index 071adc9915c3..2a5abf048e39 100644 --- a/app/src/androidTest/java/com/nextcloud/utils/SharePermissionManagerTest.kt +++ b/app/src/androidTest/java/com/nextcloud/utils/SharePermissionManagerTest.kt @@ -7,15 +7,14 @@ package com.nextcloud.utils -import com.google.gson.Gson import com.owncloud.android.datamodel.quickPermission.QuickPermissionType import com.owncloud.android.lib.resources.shares.OCShare import com.owncloud.android.lib.resources.shares.ShareType -import com.owncloud.android.lib.resources.shares.attributes.ShareAttributes +import com.owncloud.android.lib.resources.shares.extensions.isAllowDownloadAndSyncEnabled +import com.owncloud.android.lib.resources.shares.extensions.toggleAllowDownloadAndSync import com.owncloud.android.ui.fragment.util.SharePermissionManager import junit.framework.TestCase.assertEquals import junit.framework.TestCase.assertFalse -import junit.framework.TestCase.assertNotNull import junit.framework.TestCase.assertTrue import org.junit.Test @@ -252,17 +251,23 @@ class SharePermissionManagerTest { // region Attributes Tests @Test fun testToggleAllowDownloadAndSyncShouldCreateAttributeJsonIfNoneExists() { - val json = SharePermissionManager.toggleAllowDownloadAndSync(true, null) - assertNotNull(json) - val downloadAttribute = ShareAttributes.createDownloadAttributes(true) - val expectedJson = Gson().toJson(listOf(downloadAttribute)) - assertEquals(json, expectedJson) + val ocShare = OCShare().apply { + isFolder = true + shareType = ShareType.USER + permissions = 17 + } + ocShare.attributes = toggleAllowDownloadAndSync( + ocShare.attributes, + isChecked = true, + useV2DownloadAttributes = false + ) + assertTrue(ocShare.isAllowDownloadAndSyncEnabled(false)) } @Test fun testIsAllowDownloadAndSyncEnabledShouldReturnFalseIfAttributeIsMissing() { val share = createShare(OCShare.READ_PERMISSION_FLAG, attributesJson = null) - assertFalse(SharePermissionManager.isAllowDownloadAndSyncEnabled(share)) + assertFalse(share.isAllowDownloadAndSyncEnabled(false)) } // endregion } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt index f63e1c6f93b9..058c37dce067 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt @@ -28,6 +28,9 @@ import com.owncloud.android.datamodel.quickPermission.QuickPermissionType import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.lib.resources.shares.OCShare import com.owncloud.android.lib.resources.shares.ShareType +import com.owncloud.android.lib.resources.shares.extensions.isAllowDownloadAndSyncEnabled +import com.owncloud.android.lib.resources.shares.extensions.toggleAllowDownloadAndSync +import com.owncloud.android.lib.resources.status.NextcloudVersion import com.owncloud.android.lib.resources.status.OCCapability import com.owncloud.android.ui.activity.FileActivity import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment @@ -629,7 +632,8 @@ class FileDetailsSharingProcessFragment : } if (!isPublicShare()) { - shareAllowDownloadAndSyncCheckbox.isChecked = isAllowDownloadAndSyncEnabled(share) + shareAllowDownloadAndSyncCheckbox.isChecked = + share?.isAllowDownloadAndSyncEnabled(useV2DownloadAttributes()) == true } } } @@ -652,7 +656,7 @@ class FileDetailsSharingProcessFragment : if (!isPublicShare()) { binding.shareAllowDownloadAndSyncCheckbox.setOnCheckedChangeListener { _, isChecked -> - val result = SharePermissionManager.toggleAllowDownloadAndSync(isChecked, share) + val result = toggleAllowDownloadAndSync(share?.attributes, isChecked, useV2DownloadAttributes()) share?.attributes = result downloadAttribute = result } @@ -899,5 +903,9 @@ class FileDetailsSharingProcessFragment : (isPublicShare() && capabilities.filesDownloadLimit.isTrue && share?.isFolder == false) private fun isPublicShare(): Boolean = (shareType == ShareType.PUBLIC_LINK) + + private fun useV2DownloadAttributes(): Boolean = capabilities.version + .isNewerOrEqual(NextcloudVersion.nextcloud_30) + // endregion } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/util/SharePermissionManager.kt b/app/src/main/java/com/owncloud/android/ui/fragment/util/SharePermissionManager.kt index 14e8a7dbddc0..e391341f3bbd 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/util/SharePermissionManager.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/util/SharePermissionManager.kt @@ -10,9 +10,6 @@ package com.owncloud.android.ui.fragment.util import com.owncloud.android.datamodel.quickPermission.QuickPermissionType import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.lib.resources.shares.OCShare -import com.owncloud.android.lib.resources.shares.attributes.ShareAttributes -import com.owncloud.android.lib.resources.shares.attributes.ShareAttributesJsonHandler -import com.owncloud.android.lib.resources.shares.attributes.getDownloadAttribute import com.owncloud.android.ui.fragment.FileDetailsSharingProcessFragment.Companion.TAG object SharePermissionManager { @@ -66,33 +63,6 @@ object SharePermissionManager { } // endregion - // region DownloadAttribute - fun toggleAllowDownloadAndSync(isChecked: Boolean, share: OCShare?): String? { - val shareAttributes = getShareAttributes(share)?.toMutableList() - if (shareAttributes == null) { - val downloadAttribute = ShareAttributes.createDownloadAttributes(isChecked) - val updatedShareAttributes = listOf(downloadAttribute) - return ShareAttributesJsonHandler.toJson(updatedShareAttributes) - } - - val downloadAttributeIndex = shareAttributes.indexOf(shareAttributes.getDownloadAttribute()) - if (downloadAttributeIndex >= 0) { - val updatedAttribute = shareAttributes[downloadAttributeIndex].copy(value = isChecked) - shareAttributes[downloadAttributeIndex] = updatedAttribute - } - - return ShareAttributesJsonHandler.toJson(shareAttributes) - } - - fun isAllowDownloadAndSyncEnabled(share: OCShare?): Boolean { - return getShareAttributes(share).getDownloadAttribute()?.value == true - } - - private fun getShareAttributes(share: OCShare?): List? { - return share?.attributes?.let { ShareAttributesJsonHandler.toList(it) } - } - // endregion - // region Helper Methods fun canEdit(share: OCShare?): Boolean { if (share == null) { diff --git a/build.gradle b/build.gradle index f2ced65db0aa..e05df1f47c21 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ */ buildscript { ext { - androidLibraryVersion ="0edf15760b8a086ab9969e103c7229dad973efbd" + androidLibraryVersion ="3dbcf59067" androidCommonLibraryVersion = "0.26.0" androidPluginVersion = "8.11.0" androidxMediaVersion = "1.5.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 2633a332f18d..8cc2f75e17f5 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -13092,6 +13092,14 @@ + + + + + + + + @@ -13108,6 +13116,14 @@ + + + + + + + + @@ -13268,6 +13284,14 @@ + + + + + + + + @@ -13380,6 +13404,14 @@ + + + + + + + + @@ -13484,6 +13516,14 @@ + + + + + + + +