From 5232419054a7b8fe2034f2132eb6c0c389cd9c1a Mon Sep 17 00:00:00 2001 From: Alex Knop Date: Wed, 5 Feb 2025 18:52:51 -0500 Subject: [PATCH 1/9] fix ImageLoadingOffline Signed-off-by: Alex Knop --- .../com/owncloud/android/ui/fragment/OCFileListFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 7f32ae588f8f..96a4e6bf4478 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -1217,9 +1217,9 @@ private void fileOnItemClick(OCFile file) { case GALLERY_SEARCH -> VirtualFolderType.GALLERY; default -> VirtualFolderType.NONE; }; - ((FileDisplayActivity) mContainerActivity).startImagePreview(file, type, !file.isDown()); + ((FileDisplayActivity) mContainerActivity).startImagePreview(file, type, file.isDown()); } else { - ((FileDisplayActivity) mContainerActivity).startImagePreview(file, !file.isDown()); + ((FileDisplayActivity) mContainerActivity).startImagePreview(file, file.isDown()); } } else if (file.isDown() && MimeTypeUtil.isVCard(file)) { ((FileDisplayActivity) mContainerActivity).startContactListFragment(file); From 36e47c09bec9d1f201cdfe7a73c69d330ba24fc9 Mon Sep 17 00:00:00 2001 From: Alex Knop Date: Wed, 5 Feb 2025 20:45:33 -0500 Subject: [PATCH 2/9] reduce timeouts to speed up app Signed-off-by: Alex Knop --- .../owncloud/android/operations/RefreshFolderOperation.java | 3 ++- .../com/owncloud/android/ui/asynctasks/GetRemoteFileTask.kt | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java b/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java index 916ec1331f01..6caa2e0ededf 100644 --- a/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java @@ -16,6 +16,7 @@ import com.nextcloud.android.lib.resources.directediting.DirectEditingObtainRemoteOperation; import com.nextcloud.client.account.User; import com.nextcloud.common.NextcloudClient; +import com.nextcloud.common.SessionTimeOut; import com.nextcloud.utils.extensions.RemoteOperationResultExtensionsKt; import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.ArbitraryDataProviderImpl; @@ -385,7 +386,7 @@ private RemoteOperationResult checkForChanges(OwnCloudClient client) { Log_OC.d(TAG, "Checking changes in " + user.getAccountName() + remotePath); // remote request - result = new ReadFileRemoteOperation(remotePath).execute(client); + SessionTimeOut sessionTimeOut = new SessionTimeOut(1000,1000); result = new ReadFileRemoteOperation(remotePath, sessionTimeOut).execute(client); if (result.isSuccess()) { OCFile remoteFolder = FileStorageUtils.fillOCFile((RemoteFile) result.getData().get(0)); diff --git a/app/src/main/java/com/owncloud/android/ui/asynctasks/GetRemoteFileTask.kt b/app/src/main/java/com/owncloud/android/ui/asynctasks/GetRemoteFileTask.kt index 6d071f5e24dd..016be8858e49 100644 --- a/app/src/main/java/com/owncloud/android/ui/asynctasks/GetRemoteFileTask.kt +++ b/app/src/main/java/com/owncloud/android/ui/asynctasks/GetRemoteFileTask.kt @@ -8,6 +8,7 @@ package com.owncloud.android.ui.asynctasks import android.content.Context import com.nextcloud.client.account.User +import com.nextcloud.common.SessionTimeOut import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.OCFile import com.owncloud.android.lib.common.OwnCloudClient @@ -28,7 +29,8 @@ class GetRemoteFileTask( data class Result(val success: Boolean = false, val file: OCFile = OCFile("/")) override fun invoke(): Result { - val result = ReadFileRemoteOperation(fileUrl).execute(client) + val sessionTimeout = SessionTimeOut(1000, 1000) + val result = ReadFileRemoteOperation(fileUrl, sessionTimeout).execute(client) if (result.isSuccess) { val remoteFile = result.getData().get(0) as RemoteFile val temp = FileStorageUtils.fillOCFile(remoteFile) From 83156a171b443a30a5bcbe8a6cb2c6928521d496 Mon Sep 17 00:00:00 2001 From: Alex Knop Date: Wed, 5 Feb 2025 20:47:05 -0500 Subject: [PATCH 3/9] reduce timeouts to speed up app Signed-off-by: Alex Knop --- .../owncloud/android/operations/RefreshFolderOperation.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java b/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java index 6caa2e0ededf..44cd405b8e6a 100644 --- a/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java @@ -386,7 +386,8 @@ private RemoteOperationResult checkForChanges(OwnCloudClient client) { Log_OC.d(TAG, "Checking changes in " + user.getAccountName() + remotePath); // remote request - SessionTimeOut sessionTimeOut = new SessionTimeOut(1000,1000); result = new ReadFileRemoteOperation(remotePath, sessionTimeOut).execute(client); + SessionTimeOut sessionTimeOut = new SessionTimeOut(1000,1000); + result = new ReadFileRemoteOperation(remotePath, sessionTimeOut).execute(client); if (result.isSuccess()) { OCFile remoteFolder = FileStorageUtils.fillOCFile((RemoteFile) result.getData().get(0)); From ea6d64505d52245bb758ab635401957a6abafa81 Mon Sep 17 00:00:00 2001 From: Alex Knop Date: Thu, 6 Feb 2025 11:10:01 -0500 Subject: [PATCH 4/9] lower timeout for ocversion check Signed-off-by: Alex Knop --- .../owncloud/android/operations/UpdateOCVersionOperation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/operations/UpdateOCVersionOperation.java b/app/src/main/java/com/owncloud/android/operations/UpdateOCVersionOperation.java index e8f9fc114a7f..720fd539ab6b 100644 --- a/app/src/main/java/com/owncloud/android/operations/UpdateOCVersionOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/UpdateOCVersionOperation.java @@ -59,7 +59,7 @@ protected RemoteOperationResult run(OwnCloudClient client) { try { getMethod = new GetMethod(statUrl); - int status = client.executeMethod(getMethod); + int status = client.executeMethod(getMethod, 1000, 1000); if (status != HttpStatus.SC_OK) { result = new RemoteOperationResult(false, getMethod); client.exhaustResponse(getMethod.getResponseBodyAsStream()); From 74fe2d2e6f055cf87d45f368886bc58aba2a4939 Mon Sep 17 00:00:00 2001 From: Alex Knop Date: Thu, 6 Feb 2025 11:18:36 -0500 Subject: [PATCH 5/9] add constants for timeout values Signed-off-by: Alex Knop --- .../owncloud/android/ui/asynctasks/GetRemoteFileTask.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/ui/asynctasks/GetRemoteFileTask.kt b/app/src/main/java/com/owncloud/android/ui/asynctasks/GetRemoteFileTask.kt index 016be8858e49..1690d0cdc493 100644 --- a/app/src/main/java/com/owncloud/android/ui/asynctasks/GetRemoteFileTask.kt +++ b/app/src/main/java/com/owncloud/android/ui/asynctasks/GetRemoteFileTask.kt @@ -28,8 +28,14 @@ class GetRemoteFileTask( data class Result(val success: Boolean = false, val file: OCFile = OCFile("/")) + // Define constants for timeouts + companion object { + private const val CONNECTION_TIMEOUT = 1000 + private const val READ_TIMEOUT = 1000 + } + override fun invoke(): Result { - val sessionTimeout = SessionTimeOut(1000, 1000) + val sessionTimeout = SessionTimeOut(READ_TIMEOUT, CONNECTION_TIMEOUT) val result = ReadFileRemoteOperation(fileUrl, sessionTimeout).execute(client) if (result.isSuccess) { val remoteFile = result.getData().get(0) as RemoteFile From 46c33852b1791e38be3b7d56b311b53f38aee2db Mon Sep 17 00:00:00 2001 From: Alex Knop Date: Wed, 5 Feb 2025 15:47:04 -0500 Subject: [PATCH 6/9] fix check expiration Signed-off-by: Alex Knop --- .../android/providers/DocumentsStorageProvider.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java index 24180eede9f1..6974ce38008c 100644 --- a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java +++ b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java @@ -34,6 +34,7 @@ import com.nextcloud.client.preferences.AppPreferences; import com.nextcloud.client.preferences.AppPreferencesImpl; import com.nextcloud.client.utils.HashUtil; +import com.nextcloud.common.SessionTimeOut; import com.nextcloud.utils.extensions.ContextExtensionsKt; import com.nextcloud.utils.fileNameValidator.FileNameValidator; import com.owncloud.android.MainApp; @@ -284,11 +285,12 @@ public ParcelFileDescriptor openDocument(String documentId, String mode, Cancell private boolean hasServerChange(Document document) throws FileNotFoundException { Context context = getNonNullContext(); OCFile ocFile = document.getFile(); - RemoteOperationResult result = new CheckEtagRemoteOperation(ocFile.getRemotePath(), ocFile.getEtag()) + SessionTimeOut sessionTimeOut = new SessionTimeOut(1000,1000); + RemoteOperationResult result = new CheckEtagRemoteOperation(ocFile.getRemotePath(), ocFile.getEtag(), sessionTimeOut) .execute(document.getUser(), context); switch (result.getCode()) { case ETAG_CHANGED: - return true; + return false; case ETAG_UNCHANGED: return false; case FILE_NOT_FOUND: From 406d0f27e850eb86bdb797c87e12b61aea91b43d Mon Sep 17 00:00:00 2001 From: Alex Knop Date: Thu, 6 Feb 2025 11:39:38 -0500 Subject: [PATCH 7/9] alternative method --- .../owncloud/android/providers/DocumentsStorageProvider.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java index 6974ce38008c..f0bff43dd68b 100644 --- a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java +++ b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java @@ -207,7 +207,7 @@ public ParcelFileDescriptor openDocument(String documentId, String mode, Cancell int accessMode = ParcelFileDescriptor.parseMode(mode); boolean writeOnly = (accessMode & MODE_WRITE_ONLY) != 0; - boolean needsDownload = !ocFile.existsOnDevice() || (!writeOnly && hasServerChange(document)); + boolean needsDownload = !ocFile.existsOnDevice() && (!writeOnly && hasServerChange(document)); if (needsDownload) { if (ocFile.getLocalModificationTimestamp() > ocFile.getLastSyncDateForData()) { // TODO show a conflict notification with a pending intent that shows a ConflictResolveDialog @@ -290,7 +290,7 @@ private boolean hasServerChange(Document document) throws FileNotFoundException .execute(document.getUser(), context); switch (result.getCode()) { case ETAG_CHANGED: - return false; + return true; case ETAG_UNCHANGED: return false; case FILE_NOT_FOUND: From 0d18f89d205783bd871b5acf778a780c6f165383 Mon Sep 17 00:00:00 2001 From: Alex Knop Date: Thu, 6 Feb 2025 13:36:14 -0500 Subject: [PATCH 8/9] fix docs that etag can't be read on Signed-off-by: Alex Knop --- .../owncloud/android/providers/DocumentsStorageProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java index f0bff43dd68b..22d6533ca5e9 100644 --- a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java +++ b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java @@ -290,7 +290,7 @@ private boolean hasServerChange(Document document) throws FileNotFoundException .execute(document.getUser(), context); switch (result.getCode()) { case ETAG_CHANGED: - return true; + return result.getData() != null; case ETAG_UNCHANGED: return false; case FILE_NOT_FOUND: From 2c77117802db214d2c0e08386eec9102ae98c367 Mon Sep 17 00:00:00 2001 From: Alex Knop Date: Thu, 6 Feb 2025 13:38:42 -0500 Subject: [PATCH 9/9] fix docs that etag can't be read on Signed-off-by: Alex Knop --- .../owncloud/android/providers/DocumentsStorageProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java index 22d6533ca5e9..69fcf8ee424d 100644 --- a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java +++ b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java @@ -207,7 +207,7 @@ public ParcelFileDescriptor openDocument(String documentId, String mode, Cancell int accessMode = ParcelFileDescriptor.parseMode(mode); boolean writeOnly = (accessMode & MODE_WRITE_ONLY) != 0; - boolean needsDownload = !ocFile.existsOnDevice() && (!writeOnly && hasServerChange(document)); + boolean needsDownload = !ocFile.existsOnDevice() || (!writeOnly && hasServerChange(document)); if (needsDownload) { if (ocFile.getLocalModificationTimestamp() > ocFile.getLastSyncDateForData()) { // TODO show a conflict notification with a pending intent that shows a ConflictResolveDialog