Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/android-library.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Kaminsky <tobias@kaminsky.me>2022-10-12 12:37:12 +0300
committerGitHub <noreply@github.com>2022-10-12 12:37:12 +0300
commit577887e4debc9402835a9a4aeb261bdea4bdc9b3 (patch)
tree7c7cd161d42a87f5d877d69d5f9d2c9e21ed2206
parent8b53159201c4e03eab75ee8bc805b1a1d6b2de3a (diff)
parent81d4320b03a401bc8344b075ad24c99fd6742804 (diff)
Merge pull request #972 from nextcloud/dashboard
Dashboard API
-rw-r--r--gradle.properties2
-rw-r--r--library/build.gradle2
-rw-r--r--library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperationIT.kt86
-rw-r--r--library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperationIT.kt55
-rw-r--r--library/src/androidTest/java/com/nextcloud/lib/resources/users/GetUserInfoRemoteOperationIT.kt6
-rw-r--r--library/src/androidTest/java/com/owncloud/android/AbstractIT.java9
-rw-r--r--library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt22
-rw-r--r--library/src/androidTest/java/com/owncloud/android/lib/resources/shares/UpdateShareRemoteOperationIT.kt1
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashBoardButtonType.kt36
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardButton.kt33
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperation.kt71
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperation.kt65
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidget.kt37
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetItem.kt30
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetList.kt31
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingCreateFileRemoteOperation.java2
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainListOfTemplatesRemoteOperation.java2
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainRemoteOperation.java2
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingOpenFileRemoteOperation.java2
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/profile/GetHoverCardRemoteOperation.kt1
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchProvidersRemoteOperation.kt1
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchRemoteOperation.kt9
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/resources/users/GenerateAppPasswordRemoteOperation.java1
-rw-r--r--library/src/main/java/com/nextcloud/android/lib/richWorkspace/RichWorkspaceDirectEditingRemoteOperation.java1
-rw-r--r--library/src/main/java/com/nextcloud/common/NextcloudClient.kt2
-rw-r--r--library/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt12
-rw-r--r--library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.java40
-rw-r--r--library/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperation.java1
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/activities/GetActivitiesRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/e2ee/GetMetadataRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/e2ee/LockFileRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/e2ee/StoreMetadataRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/files/CheckEtagRemoteOperation.java6
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationRemoteOperation.java3
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationsRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/notifications/RegisterAccountDeviceForNotificationsOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/status/GetCapabilitiesRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/status/NextcloudVersion.kt5
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/CheckRemoteWipeRemoteOperation.java1
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/ClearStatusMessageRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/ConvertAppTokenRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/DeleteAppPasswordRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/GetPredefinedStatusesRemoteOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/GetPrivateKeyOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/GetPublicKeyOperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/GetStatusRemoteOperation.java1
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/SendCSROperation.java2
-rw-r--r--library/src/main/java/com/owncloud/android/lib/resources/users/StorePrivateKeyOperation.java2
-rw-r--r--scripts/analysis/findbugs-results.txt2
49 files changed, 530 insertions, 80 deletions
diff --git a/gradle.properties b/gradle.properties
index 60377ad6..d20565d6 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,4 +2,6 @@
NC_TEST_SERVER_BASEURL=https://server
NC_TEST_SERVER_USERNAME=test
NC_TEST_SERVER_PASSWORD=test
+NC_TEST_SERVER_USERNAME2=admin
+NC_TEST_SERVER_PASSWORD2=admin
android.useAndroidX=true
diff --git a/library/build.gradle b/library/build.gradle
index a813250d..e441791b 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -131,6 +131,8 @@ android {
testInstrumentationRunnerArgument "TEST_SERVER_URL", "${NC_TEST_SERVER_BASEURL}"
testInstrumentationRunnerArgument "TEST_SERVER_USERNAME", "${NC_TEST_SERVER_USERNAME}"
testInstrumentationRunnerArgument "TEST_SERVER_PASSWORD", "${NC_TEST_SERVER_PASSWORD}"
+ testInstrumentationRunnerArgument "TEST_SERVER_USERNAME2", "${NC_TEST_SERVER_USERNAME2}"
+ testInstrumentationRunnerArgument "TEST_SERVER_PASSWORD2", "${NC_TEST_SERVER_PASSWORD2}"
testInstrumentationRunnerArguments disableAnalytics: 'true'
multiDexEnabled true
diff --git a/library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperationIT.kt b/library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperationIT.kt
new file mode 100644
index 00000000..f762f956
--- /dev/null
+++ b/library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperationIT.kt
@@ -0,0 +1,86 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2022 Tobias Kaminsky
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nextcloud.android.lib.resources.dashboard
+
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.lib.resources.files.CreateFolderRemoteOperation
+import com.owncloud.android.lib.resources.shares.CreateShareRemoteOperation
+import com.owncloud.android.lib.resources.shares.OCShare
+import com.owncloud.android.lib.resources.shares.ShareType
+import com.owncloud.android.lib.resources.status.GetCapabilitiesRemoteOperation
+import com.owncloud.android.lib.resources.status.NextcloudVersion
+import com.owncloud.android.lib.resources.status.OCCapability
+import org.junit.Assert.assertTrue
+import org.junit.Assume.assumeTrue
+import org.junit.Test
+
+class DashboardGetWidgetItemsRemoteOperationIT : AbstractIT() {
+ @Test
+ fun getItems() {
+ // only on NC25+
+ val ocCapability = GetCapabilitiesRemoteOperation()
+ .execute(nextcloudClient).singleData as OCCapability
+ assumeTrue(ocCapability.version.isNewerOrEqual(NextcloudVersion.nextcloud_25))
+
+ // create folder to have some content
+ assertTrue(CreateFolderRemoteOperation("/testFolder", false).execute(client2).isSuccess)
+ assertTrue(
+ CreateShareRemoteOperation(
+ "/testFolder",
+ ShareType.USER,
+ client.userId,
+ false,
+ "",
+ OCShare.MAXIMUM_PERMISSIONS_FOR_FOLDER
+ ).execute(client2)
+ .isSuccess
+ )
+
+ val widgetId = "activity"
+ val result =
+ DashboardGetWidgetItemsRemoteOperation(widgetId, LIMIT_SIZE).execute(nextcloudClient)
+
+ assertTrue(result.isSuccess)
+ assertTrue(result.resultData[widgetId]?.isNotEmpty() ?: false)
+
+ val firstResult = result.resultData[widgetId]?.get(0)
+ assertTrue(firstResult?.title?.isNotEmpty() == true)
+ assertTrue(firstResult?.subtitle != null)
+ assertTrue(firstResult?.link?.isNotEmpty() == true)
+ assertTrue(firstResult?.iconUrl?.isNotEmpty() == true)
+ }
+
+ @Test
+ fun getEmptyItems() {
+ val widgetId = "nonExistingWidget"
+ val result =
+ DashboardGetWidgetItemsRemoteOperation(widgetId, LIMIT_SIZE).execute(nextcloudClient)
+
+ assertTrue(result.isSuccess)
+ assertTrue(result.resultData.isEmpty())
+ }
+
+ companion object {
+ const val LIMIT_SIZE = 14
+ }
+}
diff --git a/library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperationIT.kt b/library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperationIT.kt
new file mode 100644
index 00000000..90fbeaff
--- /dev/null
+++ b/library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperationIT.kt
@@ -0,0 +1,55 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2022 Tobias Kaminsky
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nextcloud.android.lib.resources.dashboard
+
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.lib.resources.status.GetCapabilitiesRemoteOperation
+import com.owncloud.android.lib.resources.status.NextcloudVersion
+import com.owncloud.android.lib.resources.status.OCCapability
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Assume
+import org.junit.Test
+
+class DashboardListWidgetsRemoteOperationIT : AbstractIT() {
+ @Test
+ fun list() {
+ // only on NC25+
+ val ocCapability = GetCapabilitiesRemoteOperation()
+ .execute(nextcloudClient).singleData as OCCapability
+ Assume.assumeTrue(ocCapability.version.isNewerOrEqual(NextcloudVersion.nextcloud_25))
+
+ val result = DashboardListWidgetsRemoteOperation().execute(nextcloudClient)
+ assertTrue(result.isSuccess)
+
+ assertTrue(result.resultData.isNotEmpty())
+
+ assertTrue(result.resultData["recommendations"]?.buttons?.getOrNull(0) == null)
+
+ assertEquals(1, result.resultData["activity"]?.buttons?.size)
+ assertTrue(result.resultData["activity"]?.buttons?.getOrNull(0)?.type == DashBoardButtonType.MORE)
+ assertTrue(result.resultData["activity"]?.roundIcons == false)
+
+ assertTrue(result.resultData["user_status"]?.roundIcons == true)
+ }
+}
diff --git a/library/src/androidTest/java/com/nextcloud/lib/resources/users/GetUserInfoRemoteOperationIT.kt b/library/src/androidTest/java/com/nextcloud/lib/resources/users/GetUserInfoRemoteOperationIT.kt
index 82b8151f..4f12e867 100644
--- a/library/src/androidTest/java/com/nextcloud/lib/resources/users/GetUserInfoRemoteOperationIT.kt
+++ b/library/src/androidTest/java/com/nextcloud/lib/resources/users/GetUserInfoRemoteOperationIT.kt
@@ -58,7 +58,7 @@ class GetUserInfoRemoteOperationIT : AbstractIT() {
assertEquals("User Two", userInfo.displayName)
assertEquals("user2", userInfo.id)
- assertEquals(1073741824L, userInfo.quota?.quota)
+ assertEquals(QUOTA_1GB, userInfo.quota?.quota)
}
@After
@@ -70,4 +70,8 @@ class GetUserInfoRemoteOperationIT : AbstractIT() {
nextcloudClient.credentials = Credentials.basic(loginName.orEmpty(), password.orEmpty())
}
+
+ companion object {
+ const val QUOTA_1GB = 1073741824L
+ }
}
diff --git a/library/src/androidTest/java/com/owncloud/android/AbstractIT.java b/library/src/androidTest/java/com/owncloud/android/AbstractIT.java
index 352761a6..c8692779 100644
--- a/library/src/androidTest/java/com/owncloud/android/AbstractIT.java
+++ b/library/src/androidTest/java/com/owncloud/android/AbstractIT.java
@@ -81,6 +81,7 @@ public abstract class AbstractIT {
public static final int MILLI_TO_SECOND = 1000;
public static OwnCloudClient client;
+ public static OwnCloudClient client2;
protected static NextcloudClient nextcloudClient;
protected static Context context;
protected static Uri url;
@@ -107,6 +108,14 @@ public abstract class AbstractIT {
client.setCredentials(new OwnCloudBasicCredentials(loginName, password));
client.setUserId(loginName); // for test same as userId
+ // second user to test internal sharing
+ String loginName2 = arguments.getString("TEST_SERVER_USERNAME2");
+ String password2 = arguments.getString("TEST_SERVER_PASSWORD2");
+
+ client2 = OwnCloudClientFactory.createOwnCloudClient(url, context, true);
+ client2.setCredentials(new OwnCloudBasicCredentials(loginName2, password2));
+ client2.setUserId(loginName2); // for test same as userId
+
OwnCloudClientManagerFactory.setUserAgent("Mozilla/5.0 (Android) Nextcloud-android/1.0.0");
String userId = loginName; // for test same as userId
diff --git a/library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt b/library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt
index ba716b70..5ecad4de 100644
--- a/library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt
+++ b/library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt
@@ -97,16 +97,18 @@ class UploadFileRemoteOperationIT : AbstractIT() {
private fun getCreationTimestamp(file: File): Long? {
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
return null
- } else try {
- Files.readAttributes(file.toPath(), BasicFileAttributes::class.java)
- .creationTime()
- .to(TimeUnit.SECONDS)
- } catch (e: IOException) {
- Log_OC.e(
- UploadFileRemoteOperation::class.java.simpleName,
- "Failed to read creation timestamp for file: " + file.name
- )
- null
+ } else {
+ try {
+ Files.readAttributes(file.toPath(), BasicFileAttributes::class.java)
+ .creationTime()
+ .to(TimeUnit.SECONDS)
+ } catch (e: IOException) {
+ Log_OC.e(
+ UploadFileRemoteOperation::class.java.simpleName,
+ "Failed to read creation timestamp for file: " + file.name
+ )
+ null
+ }
}
}
diff --git a/library/src/androidTest/java/com/owncloud/android/lib/resources/shares/UpdateShareRemoteOperationIT.kt b/library/src/androidTest/java/com/owncloud/android/lib/resources/shares/UpdateShareRemoteOperationIT.kt
index 031776b3..0c95db2b 100644
--- a/library/src/androidTest/java/com/owncloud/android/lib/resources/shares/UpdateShareRemoteOperationIT.kt
+++ b/library/src/androidTest/java/com/owncloud/android/lib/resources/shares/UpdateShareRemoteOperationIT.kt
@@ -129,6 +129,7 @@ class UpdateShareRemoteOperationIT : AbstractIT() {
}
@Test
+ @Suppress("MaxLineLength")
fun invalidPassword() {
val folder = "/invalidPassword/"
Assert.assertTrue(CreateFolderRemoteOperation(folder, true).execute(client).isSuccess)
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashBoardButtonType.kt b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashBoardButtonType.kt
new file mode 100644
index 00000000..224496c8
--- /dev/null
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashBoardButtonType.kt
@@ -0,0 +1,36 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2022 Tobias Kaminsky
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nextcloud.android.lib.resources.dashboard
+
+import com.google.gson.annotations.SerializedName
+
+enum class DashBoardButtonType {
+ @SerializedName("new")
+ NEW,
+
+ @SerializedName("more")
+ MORE,
+
+ @SerializedName("setup")
+ SETUP
+}
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardButton.kt b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardButton.kt
new file mode 100644
index 00000000..ac31f696
--- /dev/null
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardButton.kt
@@ -0,0 +1,33 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2022 Tobias Kaminsky
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nextcloud.android.lib.resources.dashboard
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+data class DashboardButton(
+ val type: DashBoardButtonType,
+ val text: String,
+ val link: String
+) : Parcelable
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperation.kt b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperation.kt
new file mode 100644
index 00000000..3c926472
--- /dev/null
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperation.kt
@@ -0,0 +1,71 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2022 Tobias Kaminsky
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+package com.nextcloud.android.lib.resources.dashboard
+
+import com.google.gson.reflect.TypeToken
+import com.nextcloud.common.NextcloudClient
+import com.nextcloud.operations.GetMethod
+import com.owncloud.android.lib.common.operations.RemoteOperationResult
+import com.owncloud.android.lib.ocs.ServerResponse
+import com.owncloud.android.lib.resources.OCSRemoteOperation
+import org.apache.commons.httpclient.HttpStatus
+import java.io.IOException
+
+class DashboardGetWidgetItemsRemoteOperation(val id: String, private val limitSize: Int) :
+ OCSRemoteOperation<HashMap<String, List<DashboardWidgetItem>>>() {
+
+ override fun run(client: NextcloudClient): RemoteOperationResult<HashMap<String, List<DashboardWidgetItem>>> {
+ lateinit var result: RemoteOperationResult<HashMap<String, List<DashboardWidgetItem>>>
+ lateinit var get: GetMethod
+
+ try {
+ get = GetMethod(client.baseUri.toString() + ENDPOINT + JSON_FORMAT, true)
+ get.setQueryString(mapOf(Pair("widgets[]", id), Pair(LIMIT, limitSize.toString())))
+ val status = client.execute(get)
+
+ if (status == HttpStatus.SC_OK) {
+ val list = getServerResponse(
+ get,
+ object :
+ TypeToken<ServerResponse<HashMap<String, List<DashboardWidgetItem>>>>() {}
+ ).ocs.data
+
+ result =
+ RemoteOperationResult<HashMap<String, List<DashboardWidgetItem>>>(true, get)
+ result.resultData = list
+ } else {
+ result =
+ RemoteOperationResult<HashMap<String, List<DashboardWidgetItem>>>(false, get)
+ }
+ } catch (e: IOException) {
+ result = RemoteOperationResult<HashMap<String, List<DashboardWidgetItem>>>(e)
+ }
+
+ return result
+ }
+
+ companion object {
+ const val ENDPOINT = "/ocs/v2.php/apps/dashboard/api/v1/widget-items"
+ const val LIMIT = "limit"
+ }
+}
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperation.kt b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperation.kt
new file mode 100644
index 00000000..446a12bd
--- /dev/null
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperation.kt
@@ -0,0 +1,65 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2022 Tobias Kaminsky
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+package com.nextcloud.android.lib.resources.dashboard
+
+import com.google.gson.reflect.TypeToken
+import com.nextcloud.common.NextcloudClient
+import com.nextcloud.operations.GetMethod
+import com.owncloud.android.lib.common.operations.RemoteOperationResult
+import com.owncloud.android.lib.ocs.ServerResponse
+import com.owncloud.android.lib.resources.OCSRemoteOperation
+import org.apache.commons.httpclient.HttpStatus
+import java.io.IOException
+
+class DashboardListWidgetsRemoteOperation : OCSRemoteOperation<Map<String, DashboardWidget>>() {
+
+ override fun run(client: NextcloudClient): RemoteOperationResult<Map<String, DashboardWidget>> {
+ lateinit var result: RemoteOperationResult<Map<String, DashboardWidget>>
+ lateinit var get: GetMethod
+
+ try {
+ get = GetMethod(client.baseUri.toString() + LIST_ENDPOINT + JSON_FORMAT, true)
+ val status = client.execute(get)
+
+ if (status == HttpStatus.SC_OK) {
+ val list = getServerResponse(
+ get,
+ object : TypeToken<ServerResponse<HashMap<String, DashboardWidget>>>() {}
+ ).ocs.data
+
+ result = RemoteOperationResult<Map<String, DashboardWidget>>(true, get)
+ result.resultData = list
+ } else {
+ result = RemoteOperationResult<Map<String, DashboardWidget>>(false, get)
+ }
+ } catch (e: IOException) {
+ result = RemoteOperationResult<Map<String, DashboardWidget>>(e)
+ }
+
+ return result
+ }
+
+ companion object {
+ const val LIST_ENDPOINT = "/ocs/v2.php/apps/dashboard/api/v1/widgets"
+ }
+}
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidget.kt b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidget.kt
new file mode 100644
index 00000000..0b0a7868
--- /dev/null
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidget.kt
@@ -0,0 +1,37 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2022 Tobias Kaminsky
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nextcloud.android.lib.resources.dashboard
+
+import android.os.Parcelable
+import com.google.gson.annotations.SerializedName
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+data class DashboardWidget(
+ val id: String,
+ val title: String,
+ val order: Int,
+ @SerializedName("icon_url") val iconUrl: String,
+ @SerializedName("item_icons_round") val roundIcons: Boolean,
+ val buttons: List<DashboardButton>?
+) : Parcelable
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetItem.kt b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetItem.kt
new file mode 100644
index 00000000..94d932fd
--- /dev/null
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetItem.kt
@@ -0,0 +1,30 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2022 Tobias Kaminsky
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nextcloud.android.lib.resources.dashboard
+
+data class DashboardWidgetItem(
+ val title: String,
+ val subtitle: String,
+ val link: String,
+ val iconUrl: String
+)
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetList.kt b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetList.kt
new file mode 100644
index 00000000..1a9942bf
--- /dev/null
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetList.kt
@@ -0,0 +1,31 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2022 Tobias Kaminsky
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nextcloud.android.lib.resources.dashboard
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+data class DashboardWidgetList(
+ val widgets: Map<String, DashboardWidget> = HashMap()
+) : Parcelable
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingCreateFileRemoteOperation.java b/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingCreateFileRemoteOperation.java
index f512e038..4e9777e6 100644
--- a/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingCreateFileRemoteOperation.java
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingCreateFileRemoteOperation.java
@@ -46,8 +46,6 @@ public class DirectEditingCreateFileRemoteOperation extends RemoteOperation<Stri
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
private static final String DIRECT_ENDPOINT = "/ocs/v2.php/apps/files/api/v1/directEditing/create";
- private static final String JSON_FORMAT = "?format=json";
-
private final String path;
private final String editor;
private final String creator;
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainListOfTemplatesRemoteOperation.java b/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainListOfTemplatesRemoteOperation.java
index 7a94eb68..dfcb4470 100644
--- a/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainListOfTemplatesRemoteOperation.java
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainListOfTemplatesRemoteOperation.java
@@ -48,8 +48,6 @@ public class DirectEditingObtainListOfTemplatesRemoteOperation extends OCSRemote
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
private static final String DIRECT_ENDPOINT = "/ocs/v2.php/apps/files/api/v1/directEditing/templates/";
- private static final String JSON_FORMAT = "?format=json";
-
private final String editor;
private final String template;
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainRemoteOperation.java b/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainRemoteOperation.java
index 2e0c7604..c49a748b 100644
--- a/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainRemoteOperation.java
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingObtainRemoteOperation.java
@@ -44,8 +44,6 @@ public class DirectEditingObtainRemoteOperation extends OCSRemoteOperation<Direc
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
private static final String DIRECT_ENDPOINT = "/ocs/v2.php/apps/files/api/v1/directEditing";
- private static final String JSON_FORMAT = "?format=json";
-
protected RemoteOperationResult<DirectEditing> run(OwnCloudClient client) {
RemoteOperationResult<DirectEditing> result;
GetMethod getMethod = null;
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingOpenFileRemoteOperation.java b/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingOpenFileRemoteOperation.java
index 62574536..4dadeacb 100644
--- a/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingOpenFileRemoteOperation.java
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/directediting/DirectEditingOpenFileRemoteOperation.java
@@ -46,8 +46,6 @@ public class DirectEditingOpenFileRemoteOperation extends RemoteOperation {
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
private static final String DIRECT_ENDPOINT = "/ocs/v2.php/apps/files/api/v1/directEditing/open";
- private static final String JSON_FORMAT = "?format=json";
-
private final String filePath;
private final String editor;
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/profile/GetHoverCardRemoteOperation.kt b/library/src/main/java/com/nextcloud/android/lib/resources/profile/GetHoverCardRemoteOperation.kt
index c45c0c97..45c1e0a7 100644
--- a/library/src/main/java/com/nextcloud/android/lib/resources/profile/GetHoverCardRemoteOperation.kt
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/profile/GetHoverCardRemoteOperation.kt
@@ -74,6 +74,5 @@ class GetHoverCardRemoteOperation(private val userId: String) : OCSRemoteOperati
companion object {
private val TAG = GetHoverCardRemoteOperation::class.java.simpleName
private const val DIRECT_ENDPOINT = "/ocs/v2.php/hovercard/v1/"
- private const val JSON_FORMAT = "?format=json"
}
}
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchProvidersRemoteOperation.kt b/library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchProvidersRemoteOperation.kt
index 3f3fb455..bac5b837 100644
--- a/library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchProvidersRemoteOperation.kt
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchProvidersRemoteOperation.kt
@@ -41,7 +41,6 @@ class UnifiedSearchProvidersRemoteOperation : OCSRemoteOperation<SearchProviders
companion object {
private val TAG = UnifiedSearchProvidersRemoteOperation::class.java.simpleName
private const val ENDPOINT = "/ocs/v2.php/search/providers"
- private const val JSON_FORMAT = "?format=json"
}
override fun run(client: NextcloudClient): RemoteOperationResult<SearchProviders> {
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchRemoteOperation.kt b/library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchRemoteOperation.kt
index 16b04dfe..093adaf0 100644
--- a/library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchRemoteOperation.kt
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/search/UnifiedSearchRemoteOperation.kt
@@ -47,8 +47,8 @@ class UnifiedSearchRemoteOperation(
companion object {
private val TAG = UnifiedSearchRemoteOperation::class.java.simpleName
private const val ENDPOINT = "/ocs/v2.php/search/providers/"
- private const val SEARCH_TERM = "/search?term="
- private const val JSON_FORMAT = "&format=json"
+ private const val SEARCH = "/search"
+ private const val TERM = "&term="
private const val LIMIT = "&limit=%d"
private const val CURSOR = "&cursor=%d"
}
@@ -66,9 +66,10 @@ class UnifiedSearchRemoteOperation(
var uri = client.baseUri.toString() +
ENDPOINT +
provider +
- SEARCH_TERM +
- URLEncoder.encode(query, "UTF-8") +
+ SEARCH +
JSON_FORMAT +
+ TERM +
+ URLEncoder.encode(query, "UTF-8") +
LIMIT.format(limit)
cursor?.let {
uri += CURSOR.format(it)
diff --git a/library/src/main/java/com/nextcloud/android/lib/resources/users/GenerateAppPasswordRemoteOperation.java b/library/src/main/java/com/nextcloud/android/lib/resources/users/GenerateAppPasswordRemoteOperation.java
index dd62c0f8..bd66d365 100644
--- a/library/src/main/java/com/nextcloud/android/lib/resources/users/GenerateAppPasswordRemoteOperation.java
+++ b/library/src/main/java/com/nextcloud/android/lib/resources/users/GenerateAppPasswordRemoteOperation.java
@@ -46,7 +46,6 @@ public class GenerateAppPasswordRemoteOperation extends OCSRemoteOperation {
private static final int SYNC_READ_TIMEOUT = 40000;
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
private static final String DIRECT_ENDPOINT = "/ocs/v2.php/core/getapppassword";
- private static final String JSON_FORMAT = "?format=json";
// JSON node names
private static final String NODE_OCS = "ocs";
diff --git a/library/src/main/java/com/nextcloud/android/lib/richWorkspace/RichWorkspaceDirectEditingRemoteOperation.java b/library/src/main/java/com/nextcloud/android/lib/richWorkspace/RichWorkspaceDirectEditingRemoteOperation.java
index 7718f74a..0f98565a 100644
--- a/library/src/main/java/com/nextcloud/android/lib/richWorkspace/RichWorkspaceDirectEditingRemoteOperation.java
+++ b/library/src/main/java/com/nextcloud/android/lib/richWorkspace/RichWorkspaceDirectEditingRemoteOperation.java
@@ -50,7 +50,6 @@ public class RichWorkspaceDirectEditingRemoteOperation extends RemoteOperation {
private static final int SYNC_READ_TIMEOUT = 40000;
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
private static final String DIRECT_ENDPOINT = "/ocs/v2.php/apps/text/workspace/direct";
- private static final String JSON_FORMAT = "?format=json";
private static final String PATH = "path";
private String path;
diff --git a/library/src/main/java/com/nextcloud/common/NextcloudClient.kt b/library/src/main/java/com/nextcloud/common/NextcloudClient.kt
index 9a53986c..d2359395 100644
--- a/library/src/main/java/com/nextcloud/common/NextcloudClient.kt
+++ b/library/src/main/java/com/nextcloud/common/NextcloudClient.kt
@@ -109,7 +109,7 @@ class NextcloudClient private constructor(
}
}
- @Throws(Exception::class)
+ @Throws(IOException::class)
fun execute(method: OkHttpMethodBase): Int {
return method.execute(this)
}
diff --git a/library/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt b/library/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt
index 05b71f34..2b6020b9 100644
--- a/library/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt
+++ b/library/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt
@@ -29,6 +29,7 @@ package com.nextcloud.common
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
import com.owncloud.android.lib.common.operations.RemoteOperation
+import com.owncloud.android.lib.common.utils.Log_OC
import okhttp3.Headers
import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
@@ -39,9 +40,10 @@ import java.io.IOException
/**
* Common base class for all new OkHttpMethods
*/
+@Suppress("TooManyFunctions")
abstract class OkHttpMethodBase(
var uri: String,
- val useOcsApiRequestHeader: Boolean
+ private val useOcsApiRequestHeader: Boolean
) {
companion object {
const val UNKNOWN_STATUS_CODE: Int = -1
@@ -59,8 +61,10 @@ abstract class OkHttpMethodBase(
requestHeaders["http.protocol.single-cookie-header"] = "true"
}
- fun buildQueryParameter(): HttpUrl {
- val httpBuilder = uri.toHttpUrlOrNull()?.newBuilder() ?: throw IllegalStateException("Error")
+ @Throws(IllegalStateException::class)
+ private fun buildQueryParameter(): HttpUrl {
+ val httpBuilder =
+ uri.toHttpUrlOrNull()?.newBuilder() ?: throw IllegalStateException("Error")
queryMap.forEach { (k, v) -> httpBuilder.addQueryParameter(k, v) }
@@ -170,7 +174,7 @@ abstract class OkHttpMethodBase(
try {
response = client.client.newCall(request).execute()
} catch (ex: IOException) {
- System.out.println(ex.message)
+ Log_OC.e(this, ex.message, ex)
}
return response?.code ?: UNKNOWN_STATUS_CODE
diff --git a/library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.java b/library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.java
index fa872fe8..57c830c9 100644
--- a/library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.java
+++ b/library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.java
@@ -46,6 +46,7 @@ import java.util.List;
import javax.annotation.Nullable;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import lombok.Getter;
import lombok.Setter;
@@ -124,16 +125,26 @@ public class WebdavEntry {
@Getter private ShareeUser[] sharees = new ShareeUser[0];
@Getter private String richWorkspace = null;
@Getter private boolean isLocked = false;
- @Getter private FileLockType lockOwnerType = null;
- @Getter private String lockOwnerId = null;
- @Getter private String lockOwnerDisplayName = null;
- @Getter private long lockTimestamp;
- @Getter private String lockOwnerEditor = null;
- @Getter private long lockTimeout;
- @Getter private String lockToken = null;
+ @Getter
+ private FileLockType lockOwnerType = null;
+ @Getter
+ private String lockOwnerId = null;
+ @Getter
+ private String lockOwnerDisplayName = null;
+ @Getter
+ private long lockTimestamp;
+ @Getter
+ private String lockOwnerEditor = null;
+ @Getter
+ private long lockTimeout;
+ @Getter
+ private String lockToken = null;
public enum MountType {INTERNAL, EXTERNAL, GROUP}
+ @SuppressFBWarnings(
+ value = "STT_TOSTRING_STORED_IN_FIELD",
+ justification = "Will be replaced with davX5")
public WebdavEntry(MultiStatusResponse ms, String splitElement) {
resetData();
@@ -155,8 +166,7 @@ public class WebdavEntry {
if (prop != null) {
name = prop.getName().toString();
name = name.substring(1, name.length() - 1);
- }
- else {
+ } else {
String[] tmp = path.split("/");
if (tmp.length > 0)
name = tmp[tmp.length - 1];
@@ -178,7 +188,7 @@ public class WebdavEntry {
}
}
}
-
+
// check if it's a folder in the standard way: see RFC2518 12.2 . RFC4918 14.3
// {DAV:}resourcetype
prop = propSet.get(DavPropertyName.RESOURCETYPE);
@@ -186,9 +196,9 @@ public class WebdavEntry {
Object value = prop.getValue();
if (value != null) {
contentType = "DIR"; // a specific attribute would be better,
- // but this is enough;
- // unless while we have no reason to distinguish
- // MIME types for folders
+ // but this is enough;
+ // unless while we have no reason to distinguish
+ // MIME types for folders
}
}
@@ -341,7 +351,7 @@ public class WebdavEntry {
} else {
hasPreview = true;
}
-
+
// NC trashbin-original-location <nc:trashbin-original-location>
prop = propSet.get(TRASHBIN_ORIGINAL_LOCATION, ncNamespace);
if (prop != null) {
@@ -386,7 +396,7 @@ public class WebdavEntry {
ArrayList list = (ArrayList) prop.getValue();
List<ShareeUser> tempList = new ArrayList<>();
-
+
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
diff --git a/library/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperation.java
index 8d1c18d0..1a04b80b 100644
--- a/library/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperation.java
@@ -73,6 +73,7 @@ public abstract class RemoteOperation<T> implements Runnable {
public static final String JSON_ENCODED = "application/json";
protected static final String E2E_TOKEN = "e2e-token";
protected static final String REMOTE_WIPE_TOKEN = "token";
+ protected static final String JSON_FORMAT = "?format=json";
/** ownCloud account in the remote ownCloud server to operate */
private Account mAccount = null;
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/activities/GetActivitiesRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/activities/GetActivitiesRemoteOperation.java
index 41c5cdcf..642ca5c0 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/activities/GetActivitiesRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/activities/GetActivitiesRemoteOperation.java
@@ -152,7 +152,7 @@ public class GetActivitiesRemoteOperation extends RemoteOperation {
Log_OC.e(TAG, "Failed response while getting user activities");
Log_OC.e(TAG, "*** status code: " + status + " ; response message: " + response);
}
- } catch (Exception e) {
+ } catch (IOException e) {
Log_OC.e(TAG, "Error getting user activities", e);
return new RemoteOperationResult(e);
} finally {
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/e2ee/GetMetadataRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/e2ee/GetMetadataRemoteOperation.java
index 85aa56be..38c832d1 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/e2ee/GetMetadataRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/e2ee/GetMetadataRemoteOperation.java
@@ -55,8 +55,6 @@ public class GetMetadataRemoteOperation extends RemoteOperation {
private static final String NODE_DATA = "data";
private static final String NODE_META_DATA = "meta-data";
- private static final String JSON_FORMAT = "?format=json";
-
private String fileId;
/**
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/e2ee/LockFileRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/e2ee/LockFileRemoteOperation.java
index b33a7a86..054626aa 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/e2ee/LockFileRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/e2ee/LockFileRemoteOperation.java
@@ -56,8 +56,6 @@ public class LockFileRemoteOperation extends RemoteOperation {
private static final String NODE_OCS = "ocs";
private static final String NODE_DATA = "data";
- private static final String JSON_FORMAT = "?format=json";
-
/**
* Constructor
*/
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/e2ee/StoreMetadataRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/e2ee/StoreMetadataRemoteOperation.java
index 206f5dda..07c3637d 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/e2ee/StoreMetadataRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/e2ee/StoreMetadataRemoteOperation.java
@@ -56,8 +56,6 @@ public class StoreMetadataRemoteOperation extends RemoteOperation {
private static final String NODE_DATA = "data";
private static final String NODE_META_DATA = "meta-data";
- private static final String JSON_FORMAT = "?format=json";
-
private String fileId;
private String encryptedMetadataJson;
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/files/CheckEtagRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/files/CheckEtagRemoteOperation.java
index 09be5120..6c3b9d0c 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/files/CheckEtagRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/files/CheckEtagRemoteOperation.java
@@ -35,11 +35,13 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCo
import com.owncloud.android.lib.common.utils.Log_OC;
import org.apache.commons.httpclient.HttpStatus;
+import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.MultiStatusResponse;
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
import org.apache.jackrabbit.webdav.property.DavPropertyName;
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
+import java.io.IOException;
import java.util.ArrayList;
/**
@@ -91,11 +93,11 @@ public class CheckEtagRemoteOperation extends RemoteOperation {
return result;
}
}
-
+
if (status == HttpStatus.SC_NOT_FOUND) {
return new RemoteOperationResult(ResultCode.FILE_NOT_FOUND);
}
- } catch (Exception e) {
+ } catch (DavException | IOException e) {
Log_OC.e(TAG, "Error while retrieving eTag");
} finally {
if (propfind != null) {
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationRemoteOperation.java
index 5824e4a5..8aa6d5e6 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationRemoteOperation.java
@@ -57,7 +57,6 @@ public class GetNotificationRemoteOperation extends RemoteOperation {
// OCS Route
private static final String OCS_ROUTE_LIST_V12_AND_UP =
"/ocs/v2.php/apps/notifications/api/v2/notifications/";
- private static final String FORMAT_JSON = "?format=json";
// JSON Node names
private static final String NODE_OCS = "ocs";
@@ -76,7 +75,7 @@ public class GetNotificationRemoteOperation extends RemoteOperation {
int status;
GetMethod get = null;
List<Notification> notifications = new ArrayList<>();
- String url = client.getBaseUri() + OCS_ROUTE_LIST_V12_AND_UP + id + FORMAT_JSON;
+ String url = client.getBaseUri() + OCS_ROUTE_LIST_V12_AND_UP + id + JSON_FORMAT;
// get the notifications
try {
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationsRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationsRemoteOperation.java
index 80605aef..f84aef89 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationsRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/notifications/GetNotificationsRemoteOperation.java
@@ -56,7 +56,7 @@ public class GetNotificationsRemoteOperation extends RemoteOperation {
// OCS Route
private static final String OCS_ROUTE_LIST_V12_AND_UP =
- "/ocs/v2.php/apps/notifications/api/v2/notifications?format=json";
+ "/ocs/v2.php/apps/notifications/api/v2/notifications" + JSON_FORMAT;
private static final String TAG = GetNotificationsRemoteOperation.class.getSimpleName();
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/notifications/RegisterAccountDeviceForNotificationsOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/notifications/RegisterAccountDeviceForNotificationsOperation.java
index fbf961fa..bb28902f 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/notifications/RegisterAccountDeviceForNotificationsOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/notifications/RegisterAccountDeviceForNotificationsOperation.java
@@ -46,7 +46,7 @@ import java.lang.reflect.Type;
public class RegisterAccountDeviceForNotificationsOperation extends RemoteOperation {
// OCS Route
private static final String OCS_ROUTE =
- "/ocs/v2.php/apps/notifications/api/v2/push?format=json";
+ "/ocs/v2.php/apps/notifications/api/v2/push" + JSON_FORMAT;
private static final String TAG = RegisterAccountDeviceForNotificationsOperation.class.getSimpleName();
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 ef45e894..8b6658f1 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
@@ -221,7 +221,7 @@ public class GetCapabilitiesRemoteOperation extends RemoteOperation {
Log_OC.e(TAG, "*** status code: " + status);
}
}
- } catch (Exception e) {
+ } catch (JSONException | IOException e) {
result = new RemoteOperationResult(e);
Log_OC.e(TAG, "Exception while getting capabilities", e);
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 67fd561b..a9552250 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
@@ -26,11 +26,16 @@ class NextcloudVersion : OwnCloudVersion {
companion object {
@JvmField
val nextcloud_21 = NextcloudVersion(0x15000000) // 21.0
+
@JvmField
val nextcloud_22 = NextcloudVersion(0x16000000) // 22.0
val nextcloud_23 = NextcloudVersion(0x17000000) // 23.0
+
@JvmField
val nextcloud_24 = NextcloudVersion(0x18000000) // 24.0
+
+ @JvmField
+ val nextcloud_25 = NextcloudVersion(0x19000000) // 25.0
}
constructor(string: String) : super(string)
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/CheckRemoteWipeRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/CheckRemoteWipeRemoteOperation.java
index 39296f22..c0e4771b 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/CheckRemoteWipeRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/CheckRemoteWipeRemoteOperation.java
@@ -49,7 +49,6 @@ public class CheckRemoteWipeRemoteOperation extends RemoteOperation {
private static final String REMOTE_WIPE_URL = "/index.php/core/wipe/check";
// JSON node names
- private static final String JSON_FORMAT = "?format=json";
private static final String WIPE = "wipe";
/**
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/ClearStatusMessageRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/ClearStatusMessageRemoteOperation.java
index b25aac9e..07422146 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/ClearStatusMessageRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/ClearStatusMessageRemoteOperation.java
@@ -45,8 +45,6 @@ public class ClearStatusMessageRemoteOperation extends OCSRemoteOperation {
private static final String TAG = ClearStatusMessageRemoteOperation.class.getSimpleName();
private static final String URL = "/ocs/v2.php/apps/user_status/api/v1/user_status/message";
- private static final String JSON_FORMAT = "?format=json";
-
/**
* @param client Client object
*/
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/ConvertAppTokenRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/ConvertAppTokenRemoteOperation.java
index 8c43291e..321dca24 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/ConvertAppTokenRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/ConvertAppTokenRemoteOperation.java
@@ -49,8 +49,6 @@ public class ConvertAppTokenRemoteOperation extends OCSRemoteOperation<String> {
private static final String TAG = ConvertAppTokenRemoteOperation.class.getSimpleName();
private static final String URL = "/ocs/v2.php/core/getapppassword";
- private static final String JSON_FORMAT = "?format=json";
-
@Override
public RemoteOperationResult<String> run(NextcloudClient client) {
GetMethod method = null;
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/DeleteAppPasswordRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/DeleteAppPasswordRemoteOperation.java
index 76af5a3b..a143507e 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/DeleteAppPasswordRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/DeleteAppPasswordRemoteOperation.java
@@ -45,8 +45,6 @@ public class DeleteAppPasswordRemoteOperation extends RemoteOperation {
private static final String TAG = DeleteAppPasswordRemoteOperation.class.getSimpleName();
private static final String URL = "/ocs/v2.php/core/apppassword";
- private static final String JSON_FORMAT = "?format=json";
-
@Override
public RemoteOperationResult run(NextcloudClient client) {
DeleteMethod deleteMethod = null;
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/GetPredefinedStatusesRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/GetPredefinedStatusesRemoteOperation.java
index 59b4e27b..ae0370dd 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/GetPredefinedStatusesRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/GetPredefinedStatusesRemoteOperation.java
@@ -46,8 +46,6 @@ public class GetPredefinedStatusesRemoteOperation extends OCSRemoteOperation<Arr
private static final String TAG = GetPredefinedStatusesRemoteOperation.class.getSimpleName();
private static final String GET_STATUS_URL = "/ocs/v2.php/apps/user_status/api/v1/predefined_statuses";
- private static final String JSON_FORMAT = "?format=json";
-
/**
* @param client Client object
*/
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/GetPrivateKeyOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/GetPrivateKeyOperation.java
index 8aa26874..8f440e66 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/GetPrivateKeyOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/GetPrivateKeyOperation.java
@@ -50,8 +50,6 @@ public class GetPrivateKeyOperation extends OCSRemoteOperation<PrivateKey> {
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
private static final String PUBLIC_KEY_URL = "/ocs/v2.php/apps/end_to_end_encryption/api/v1/private-key";
- private static final String JSON_FORMAT = "?format=json";
-
/**
* @param client Client object
*/
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/GetPublicKeyOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/GetPublicKeyOperation.java
index fdb6a93f..39fc41ce 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/GetPublicKeyOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/GetPublicKeyOperation.java
@@ -55,8 +55,6 @@ public class GetPublicKeyOperation extends RemoteOperation {
private static final String NODE_DATA = "data";
private static final String NODE_PUBLIC_KEYS = "public-keys";
- private static final String JSON_FORMAT = "?format=json";
-
/**
* @param client Client object
*/
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/GetStatusRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/GetStatusRemoteOperation.java
index 7fb3ce81..e3b793dd 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/GetStatusRemoteOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/GetStatusRemoteOperation.java
@@ -44,7 +44,6 @@ public class GetStatusRemoteOperation extends OCSRemoteOperation<Status> {
private static final String TAG = GetStatusRemoteOperation.class.getSimpleName();
private static final String GET_STATUS_URL = "/ocs/v2.php/apps/user_status/api/v1/user_status";
- private static final String JSON_FORMAT = "?format=json";
/**
* @param client Client object
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/SendCSROperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/SendCSROperation.java
index c91c0751..4d57778d 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/SendCSROperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/SendCSROperation.java
@@ -56,8 +56,6 @@ public class SendCSROperation extends RemoteOperation {
private static final String NODE_DATA = "data";
private static final String NODE_PUBLIC_KEY = "public-key";
- private static final String JSON_FORMAT = "?format=json";
-
private String csr;
/**
diff --git a/library/src/main/java/com/owncloud/android/lib/resources/users/StorePrivateKeyOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/users/StorePrivateKeyOperation.java
index c40e0373..ef4de409 100644
--- a/library/src/main/java/com/owncloud/android/lib/resources/users/StorePrivateKeyOperation.java
+++ b/library/src/main/java/com/owncloud/android/lib/resources/users/StorePrivateKeyOperation.java
@@ -56,8 +56,6 @@ public class StorePrivateKeyOperation extends RemoteOperation {
private static final String NODE_DATA = "data";
private static final String NODE_PRIVATE_KEY = "private-key";
- private static final String JSON_FORMAT = "?format=json";
-
private String privateKey;
/**
diff --git a/scripts/analysis/findbugs-results.txt b/scripts/analysis/findbugs-results.txt
index d7019ae2..acfba609 100644
--- a/scripts/analysis/findbugs-results.txt
+++ b/scripts/analysis/findbugs-results.txt
@@ -1 +1 @@
-149 \ No newline at end of file
+141 \ No newline at end of file