From d51d3d48573d7d9a78896f4f0b055422455ade68 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 23 Aug 2022 08:34:50 +0200 Subject: Add dashboard Signed-off-by: tobiasKaminsky --- .../DashboardGetWidgetItemsRemoteOperationIT.kt | 59 ++++++++++++++++++ .../DashboardListWidgetsRemoteOperationIT.kt | 47 ++++++++++++++ .../users/GetUserInfoRemoteOperationIT.kt | 6 +- .../shares/UpdateShareRemoteOperationIT.kt | 1 + .../lib/resources/dashboard/DashBoardButtonType.kt | 36 +++++++++++ .../lib/resources/dashboard/DashboardButton.kt | 33 ++++++++++ .../DashboardGetWidgetItemsRemoteOperation.kt | 71 ++++++++++++++++++++++ .../DashboardListWidgetsRemoteOperation.kt | 65 ++++++++++++++++++++ .../lib/resources/dashboard/DashboardWidget.kt | 37 +++++++++++ .../lib/resources/dashboard/DashboardWidgetItem.kt | 30 +++++++++ .../lib/resources/dashboard/DashboardWidgetList.kt | 31 ++++++++++ .../DirectEditingCreateFileRemoteOperation.java | 2 - ...ditingObtainListOfTemplatesRemoteOperation.java | 2 - .../DirectEditingObtainRemoteOperation.java | 2 - .../DirectEditingOpenFileRemoteOperation.java | 2 - .../profile/GetHoverCardRemoteOperation.kt | 1 - .../UnifiedSearchProvidersRemoteOperation.kt | 1 - .../search/UnifiedSearchRemoteOperation.kt | 9 +-- .../users/GenerateAppPasswordRemoteOperation.java | 1 - .../RichWorkspaceDirectEditingRemoteOperation.java | 1 - .../java/com/nextcloud/common/NextcloudClient.kt | 2 +- .../java/com/nextcloud/common/OkHttpMethodBase.kt | 12 ++-- .../lib/common/operations/RemoteOperation.java | 1 + .../activities/GetActivitiesRemoteOperation.java | 2 +- .../resources/e2ee/GetMetadataRemoteOperation.java | 2 - .../resources/e2ee/LockFileRemoteOperation.java | 2 - .../e2ee/StoreMetadataRemoteOperation.java | 2 - .../resources/files/CheckEtagRemoteOperation.java | 6 +- .../GetNotificationRemoteOperation.java | 3 +- .../GetNotificationsRemoteOperation.java | 2 +- ...sterAccountDeviceForNotificationsOperation.java | 2 +- .../status/GetCapabilitiesRemoteOperation.java | 2 +- .../users/CheckRemoteWipeRemoteOperation.java | 1 - .../users/ClearStatusMessageRemoteOperation.java | 2 - .../users/ConvertAppTokenRemoteOperation.java | 2 - .../users/DeleteAppPasswordRemoteOperation.java | 2 - .../GetPredefinedStatusesRemoteOperation.java | 2 - .../resources/users/GetPrivateKeyOperation.java | 2 - .../lib/resources/users/GetPublicKeyOperation.java | 2 - .../resources/users/GetStatusRemoteOperation.java | 1 - .../lib/resources/users/SendCSROperation.java | 2 - .../resources/users/StorePrivateKeyOperation.java | 2 - 42 files changed, 439 insertions(+), 54 deletions(-) create mode 100644 library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperationIT.kt create mode 100644 library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperationIT.kt create mode 100644 library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashBoardButtonType.kt create mode 100644 library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardButton.kt create mode 100644 library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperation.kt create mode 100644 library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperation.kt create mode 100644 library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidget.kt create mode 100644 library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetItem.kt create mode 100644 library/src/main/java/com/nextcloud/android/lib/resources/dashboard/DashboardWidgetList.kt 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..75a59a39 --- /dev/null +++ b/library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperationIT.kt @@ -0,0 +1,59 @@ +/* + * + * 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 . + */ + +package com.nextcloud.android.lib.resources.dashboard + +import com.owncloud.android.AbstractIT +import org.junit.Assert.assertTrue +import org.junit.Test + +class DashboardGetWidgetItemsRemoteOperationIT : AbstractIT() { + @Test + fun getItems() { + val widgetId = "recommendations" + 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..df163e53 --- /dev/null +++ b/library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardListWidgetsRemoteOperationIT.kt @@ -0,0 +1,47 @@ +/* + * + * 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 . + */ + +package com.nextcloud.android.lib.resources.dashboard + +import com.owncloud.android.AbstractIT +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +class DashboardListWidgetsRemoteOperationIT : AbstractIT() { + @Test + fun list() { + val result = DashboardListWidgetsRemoteOperation().execute(nextcloudClient) + assertTrue(result.isSuccess) + + assertTrue(result.resultData.isNotEmpty()) + + assertTrue(result.resultData["recommendations"]?.buttons?.getOrNull(0) == null) + + assertTrue(result.resultData["notes"]?.buttons?.getOrNull(0)?.text?.isNotEmpty() == true) + assertTrue(result.resultData["notes"]?.buttons?.getOrNull(0)?.type == DashBoardButtonType.NEW) + assertTrue(result.resultData["notes"]?.roundIcons == false) + + assertEquals(0, result.resultData["activity"]?.buttons?.size) + assertTrue(result.resultData["activity"]?.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/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 . + */ + +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 . + */ + +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 . + * + */ + +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>>() { + + override fun run(client: NextcloudClient): RemoteOperationResult>> { + lateinit var result: RemoteOperationResult>> + 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>>>() {} + ).ocs.data + + result = + RemoteOperationResult>>(true, get) + result.resultData = list + } else { + result = + RemoteOperationResult>>(false, get) + } + } catch (e: IOException) { + result = RemoteOperationResult>>(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 . + * + */ + +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>() { + + override fun run(client: NextcloudClient): RemoteOperationResult> { + lateinit var result: RemoteOperationResult> + 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>>() {} + ).ocs.data + + result = RemoteOperationResult>(true, get) + result.resultData = list + } else { + result = RemoteOperationResult>(false, get) + } + } catch (e: IOException) { + result = RemoteOperationResult>(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 . + */ + +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? +) : 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 . + */ + +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 . + */ + +package com.nextcloud.android.lib.resources.dashboard + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +data class DashboardWidgetList( + val widgets: Map = 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 run(OwnCloudClient client) { RemoteOperationResult 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 { 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..91b03bfb 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") + JSON_FORMAT + + SEARCH + + 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/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 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 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/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 { 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 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 { 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 { 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; /** -- cgit v1.2.3