diff --git a/library/src/androidTest/java/com/owncloud/android/GetCapabilitiesRemoteOperationIT.java b/library/src/androidTest/java/com/owncloud/android/GetCapabilitiesRemoteOperationIT.java index a04d200278..0b8bcda75d 100644 --- a/library/src/androidTest/java/com/owncloud/android/GetCapabilitiesRemoteOperationIT.java +++ b/library/src/androidTest/java/com/owncloud/android/GetCapabilitiesRemoteOperationIT.java @@ -9,13 +9,6 @@ */ package com.owncloud.android; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.resources.status.CapabilityBooleanType; import com.owncloud.android.lib.resources.status.E2EVersion; @@ -26,6 +19,13 @@ import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + /** * Class to test GetRemoteCapabilitiesOperation */ @@ -153,11 +153,16 @@ private void checkCapability(OCCapability capability, String userId) { } // e2e - assertNotSame(capability.getEndToEndEncryptionApiVersion(), E2EVersion.UNKNOWN); + assertNotSame(E2EVersion.UNKNOWN, capability.getEndToEndEncryptionApiVersion()); // recommendations if (capability.getVersion().isNewerOrEqual(NextcloudVersion.nextcloud_31)) { assertTrue(capability.getRecommendations().isTrue()); } + + // busy + if (capability.getVersion().isNewerOrEqual(NextcloudVersion.nextcloud_32)) { + assertTrue(capability.getUserStatusSupportsBusy().isTrue()); + } } } diff --git a/library/src/main/java/com/owncloud/android/lib/resources/status/GetCapabilitiesRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/status/GetCapabilitiesRemoteOperation.java index d87dbf5d6b..e85dacb461 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/status/GetCapabilitiesRemoteOperation.java +++ b/library/src/main/java/com/owncloud/android/lib/resources/status/GetCapabilitiesRemoteOperation.java @@ -144,6 +144,7 @@ public class GetCapabilitiesRemoteOperation extends RemoteOperation { private static final String NODE_USER_STATUS = "user_status"; private static final String NODE_USER_STATUS_ENABLED = "enabled"; private static final String NODE_USER_STATUS_SUPPORTS_EMOJI = "supports_emoji"; + private static final String NODE_USER_STATUS_SUPPORTS_BUSY = "supports_busy"; // groupfolders private static final String NODE_GROUPFOLDERS = "groupfolders"; @@ -697,9 +698,16 @@ private OCCapability parseResponse(String response) throws JSONException { } else { capability.setUserStatusSupportsEmoji(CapabilityBooleanType.FALSE); } + + if (userStatusCapability.getBoolean(NODE_USER_STATUS_SUPPORTS_BUSY)) { + capability.setUserStatusSupportsBusy(CapabilityBooleanType.TRUE); + } else { + capability.setUserStatusSupportsBusy(CapabilityBooleanType.FALSE); + } } else { capability.setUserStatus(CapabilityBooleanType.FALSE); capability.setUserStatusSupportsEmoji(CapabilityBooleanType.FALSE); + capability.setUserStatusSupportsBusy(CapabilityBooleanType.FALSE); } // groupfolders diff --git a/library/src/main/java/com/owncloud/android/lib/resources/status/NextcloudVersion.kt b/library/src/main/java/com/owncloud/android/lib/resources/status/NextcloudVersion.kt index 50ffa3608c..6daf025c97 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/status/NextcloudVersion.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/status/NextcloudVersion.kt @@ -41,6 +41,9 @@ class NextcloudVersion : OwnCloudVersion { @JvmField val nextcloud_31 = NextcloudVersion(0x1F000000) // 31.0 + + @JvmField + val nextcloud_32 = NextcloudVersion(0x20000000) // 32.0 } constructor(string: String) : super(string) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/status/OCCapability.kt b/library/src/main/java/com/owncloud/android/lib/resources/status/OCCapability.kt index 10050e5ae4..dc435ff38c 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/status/OCCapability.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/status/OCCapability.kt @@ -92,6 +92,7 @@ class OCCapability { // user status var userStatus = CapabilityBooleanType.UNKNOWN var userStatusSupportsEmoji = CapabilityBooleanType.UNKNOWN + var userStatusSupportsBusy = CapabilityBooleanType.UNKNOWN // Groupfolders var groupfolders = CapabilityBooleanType.UNKNOWN diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/SetUserDefinedCustomStatusMessageRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/SetUserDefinedCustomStatusMessageRemoteOperation.java index b2291eeb7f..91db3710d1 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/users/SetUserDefinedCustomStatusMessageRemoteOperation.java +++ b/library/src/main/java/com/owncloud/android/lib/resources/users/SetUserDefinedCustomStatusMessageRemoteOperation.java @@ -16,6 +16,8 @@ import org.apache.commons.httpclient.HttpStatus; +import androidx.annotation.Nullable; + /** * Remote operation performing setting user defined custom status message */ @@ -28,7 +30,7 @@ public class SetUserDefinedCustomStatusMessageRemoteOperation extends OCSRemoteO private final String statusIcon; private final Long clearAt; - public SetUserDefinedCustomStatusMessageRemoteOperation(String message, String statusIcon, Long clearAt) { + public SetUserDefinedCustomStatusMessageRemoteOperation(String message, String statusIcon, @Nullable Long clearAt) { this.message = message; this.statusIcon = statusIcon; this.clearAt = clearAt; @@ -46,7 +48,9 @@ public RemoteOperationResult run(NextcloudClient client) { // request body JSONRequestBody jsonRequestBody = new JSONRequestBody("message", message); jsonRequestBody.put("statusIcon", statusIcon); - jsonRequestBody.put("clearAt", clearAt.toString()); + if (clearAt != null) { + jsonRequestBody.put("clearAt", clearAt.toString()); + } // remote request putMethod = new PutMethod(client.getBaseUri() + SET_STATUS_URL, true, jsonRequestBody.get()); diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/Status.kt b/library/src/main/java/com/owncloud/android/lib/resources/users/Status.kt index ada0094bca..3bf50f4abc 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/users/Status.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/users/Status.kt @@ -13,7 +13,7 @@ import android.os.Parcelable class Status( val status: StatusType, val message: String?, - val icon: String, + val icon: String?, val clearAt: Long ) : Parcelable { constructor(parcel: Parcel) : this( diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/StatusType.kt b/library/src/main/java/com/owncloud/android/lib/resources/users/StatusType.kt index d0725ef3d7..b35c60043b 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/users/StatusType.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/users/StatusType.kt @@ -25,5 +25,8 @@ enum class StatusType( AWAY("away"), @SerializedName("invisible") - INVISIBLE("invisible") + INVISIBLE("invisible"), + + @SerializedName("busy") + BUSY("busy") }