From 56fc727896a667954a71bb4b25e74a4c01842e2b Mon Sep 17 00:00:00 2001 From: Juan Carlos Garrote Date: Wed, 29 Jan 2025 11:46:33 +0100 Subject: [PATCH] refactor: avoid swallowed exceptions --- owncloudApp/src/main/java/com/owncloud/android/MainApp.kt | 1 + .../main/java/com/owncloud/android/extensions/ActivityExt.kt | 1 + .../android/presentation/accounts/ManageAccountsAdapter.kt | 2 +- .../documentsprovider/DocumentsStorageProvider.kt | 1 + .../android/presentation/sharing/RemoveShareDialogFragment.kt | 1 + .../android/presentation/sharing/ShareFileFragment.kt | 1 + .../presentation/sharing/sharees/EditPrivateShareFragment.kt | 1 + .../presentation/sharing/sharees/SearchShareesFragment.kt | 1 + .../presentation/sharing/shares/PublicShareDialogFragment.kt | 1 + .../android/presentation/transfers/TransfersAdapter.kt | 2 +- .../java/com/owncloud/android/ui/activity/DrawerActivity.kt | 2 +- .../com/owncloud/android/ui/activity/FolderPickerActivity.kt | 1 + .../com/owncloud/android/ui/preview/PreviewAudioFragment.kt | 1 + .../usecases/synchronization/SynchronizeFileUseCase.kt | 1 + .../com/owncloud/android/workers/AutomaticUploadsWorker.kt | 2 ++ .../android/workers/AvailableOfflinePeriodicWorker.kt | 1 + .../com/owncloud/android/workers/OldLogsCollectorWorker.kt | 2 ++ ...RemoveLocallyFilesWithLastUsageOlderThanGivenTimeWorker.kt | 2 ++ .../android/lib/resources/status/GetRemoteStatusOperation.kt | 2 ++ .../owncloud/android/lib/resources/status/OwnCloudVersion.kt | 2 ++ .../main/java/com/owncloud/android/data/extensions/FileExt.kt | 3 +++ .../android/data/files/repository/OCFileRepository.kt | 2 +- .../android/data/server/repository/OCServerInfoRepository.kt | 4 ++-- 23 files changed, 31 insertions(+), 6 deletions(-) diff --git a/owncloudApp/src/main/java/com/owncloud/android/MainApp.kt b/owncloudApp/src/main/java/com/owncloud/android/MainApp.kt index 5d5db83472b..3af6a25362e 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/MainApp.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/MainApp.kt @@ -345,6 +345,7 @@ class MainApp : Application() { val longVersionCode: Long = PackageInfoCompat.getLongVersionCode(pInfo) longVersionCode.toInt() } catch (e: PackageManager.NameNotFoundException) { + Timber.w(e, "Version code not found, using 0 as fallback") 0 } diff --git a/owncloudApp/src/main/java/com/owncloud/android/extensions/ActivityExt.kt b/owncloudApp/src/main/java/com/owncloud/android/extensions/ActivityExt.kt index e92e75ccf12..66d6ccac07f 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/extensions/ActivityExt.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/extensions/ActivityExt.kt @@ -230,6 +230,7 @@ fun Activity.openFileWithIntent(intentForSavedMimeType: Intent, intentForGuessed ) ) } catch (anfe: ActivityNotFoundException) { + Timber.i(anfe, "No app found for file type") showMessageInSnackbar( message = this.getString( R.string.file_list_no_app_for_file_type diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/accounts/ManageAccountsAdapter.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/accounts/ManageAccountsAdapter.kt index eaaf9b4ba03..8e7c646966b 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/accounts/ManageAccountsAdapter.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/accounts/ManageAccountsAdapter.kt @@ -84,7 +84,7 @@ class ManageAccountsAdapter( holder.binding.name.text = oca.displayName } catch (e: Exception) { Timber.w( - "Account not found right after being read :\\ ; using account name instead of display name" + e, "Account not found right after being read :\\ ; using account name instead of display name" ) holder.binding.name.text = AccountUtils.getUsernameOfAccount(account.name) } diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/documentsprovider/DocumentsStorageProvider.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/documentsprovider/DocumentsStorageProvider.kt index 3d2c1be78f6..499399e89b0 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/documentsprovider/DocumentsStorageProvider.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/documentsprovider/DocumentsStorageProvider.kt @@ -170,6 +170,7 @@ class DocumentsStorageProvider : DocumentsProvider() { } } } catch (e: IOException) { + Timber.e(e, "Couldn't open document") throw FileNotFoundException("Failed to open document with id $documentId and mode $mode") } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/RemoveShareDialogFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/RemoveShareDialogFragment.kt index c3854d4f572..8d9eca34633 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/RemoveShareDialogFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/RemoveShareDialogFragment.kt @@ -68,6 +68,7 @@ class RemoveShareDialogFragment : ConfirmationDialogFragment(), ConfirmationDial try { listener = activity as ShareFragmentListener? } catch (e: IllegalStateException) { + Timber.e(e, "The activity attached doesn't implement OnShareFragmentInteractionListener") throw IllegalStateException(requireActivity().toString() + " must implement OnShareFragmentInteractionListener") } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/ShareFileFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/ShareFileFragment.kt index 5fe32a69785..00a24ea730f 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/ShareFileFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/ShareFileFragment.kt @@ -284,6 +284,7 @@ class ShareFileFragment : Fragment(), ShareUserListAdapter.ShareUserAdapterListe try { listener = context as ShareFragmentListener? } catch (e: ClassCastException) { + Timber.e(e, "The activity attached doesn't implement OnShareFragmentInteractionListener") throw ClassCastException(activity.toString() + " must implement OnShareFragmentInteractionListener") } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/sharees/EditPrivateShareFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/sharees/EditPrivateShareFragment.kt index 93c270d2806..46b85b95afe 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/sharees/EditPrivateShareFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/sharees/EditPrivateShareFragment.kt @@ -148,6 +148,7 @@ class EditPrivateShareFragment : DialogFragment() { try { listener = activity as ShareFragmentListener? } catch (e: IllegalStateException) { + Timber.e(e, "The activity attached doesn't implement OnShareFragmentInteractionListener") throw IllegalStateException(requireActivity().toString() + " must implement OnShareFragmentInteractionListener") } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/sharees/SearchShareesFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/sharees/SearchShareesFragment.kt index d9d1de9f94e..925ff311ec8 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/sharees/SearchShareesFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/sharees/SearchShareesFragment.kt @@ -190,6 +190,7 @@ class SearchShareesFragment : Fragment(), try { listener = activity as ShareFragmentListener? } catch (e: ClassCastException) { + Timber.e(e, "The activity attached doesn't implement OnFragmentInteractionListener") throw ClassCastException(requireActivity().toString() + " must implement OnFragmentInteractionListener") } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/shares/PublicShareDialogFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/shares/PublicShareDialogFragment.kt index ae472e333ee..4a70511cb4a 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/shares/PublicShareDialogFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/shares/PublicShareDialogFragment.kt @@ -610,6 +610,7 @@ class PublicShareDialogFragment : DialogFragment() { try { listener = activity as ShareFragmentListener? } catch (e: IllegalStateException) { + Timber.e(e, "The activity attached doesn't implement OnShareFragmentInteractionListener") throw IllegalStateException(activity?.toString() + " must implement OnShareFragmentInteractionListener") } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/transfers/TransfersAdapter.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/transfers/TransfersAdapter.kt index c635ea91c8c..8eda5b04f08 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/transfers/TransfersAdapter.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/transfers/TransfersAdapter.kt @@ -147,7 +147,7 @@ class TransfersAdapter( DisplayUtils.convertIdn(account.name.substring(account.name.lastIndexOf("@") + 1), false) uploadAccount.text = accountName } catch (e: Exception) { - Timber.w("Couldn't get display name for account, using old style") + Timber.w(e, "Couldn't get display name for account, using old style") uploadAccount.text = transferItem.transfer.accountName } diff --git a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.kt b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.kt index d01e9e27f9c..cd1e1a7e39d 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.kt @@ -446,7 +446,7 @@ abstract class DrawerActivity : ToolbarActivity() { val ocAccount = OwnCloudAccount(account, this) getDrawerUserName()?.text = ocAccount.displayName } catch (e: Exception) { - Timber.w("Couldn't read display name of account; using account name instead") + Timber.w(e, "Couldn't read display name of account; using account name instead") getDrawerUserName()?.text = drawerViewModel.getUsernameOfAccount(account.name) } diff --git a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt index df437106b7d..6654096bbf2 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt @@ -351,6 +351,7 @@ open class FolderPickerActivity : FileActivity(), val currentDir = try { getCurrentFolder() } catch (e: NullPointerException) { + Timber.i(e, "Couldn't retrieve current folder, so using file property") file } diff --git a/owncloudApp/src/main/java/com/owncloud/android/ui/preview/PreviewAudioFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/ui/preview/PreviewAudioFragment.kt index 9353ef46096..b3bd4d92712 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/ui/preview/PreviewAudioFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/ui/preview/PreviewAudioFragment.kt @@ -180,6 +180,7 @@ class PreviewAudioFragment : FileFragment() { imagePreview?.setImageResource(R.drawable.ic_place_holder_music_cover_art) } } catch (t: Throwable) { + Timber.i(t, "Couldn't extract cover art, setting default image instead") imagePreview?.setImageResource(R.drawable.ic_place_holder_music_cover_art) } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/usecases/synchronization/SynchronizeFileUseCase.kt b/owncloudApp/src/main/java/com/owncloud/android/usecases/synchronization/SynchronizeFileUseCase.kt index e292f902792..c10d3ad3faf 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/usecases/synchronization/SynchronizeFileUseCase.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/usecases/synchronization/SynchronizeFileUseCase.kt @@ -53,6 +53,7 @@ class SynchronizeFileUseCase( spaceId = fileToSynchronize.spaceId ) } catch (exception: FileNotFoundException) { + Timber.i(exception, "File does not exist anymore in remote") // 1.1 File does not exist anymore in remote val localFile = fileToSynchronize.id?.let { fileRepository.getFileById(it) } // If it still exists locally, but file has different path, another operation could have been done simultaneously diff --git a/owncloudApp/src/main/java/com/owncloud/android/workers/AutomaticUploadsWorker.kt b/owncloudApp/src/main/java/com/owncloud/android/workers/AutomaticUploadsWorker.kt index 1508b89a0e9..e0a3866bce5 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/workers/AutomaticUploadsWorker.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/workers/AutomaticUploadsWorker.kt @@ -88,6 +88,7 @@ class AutomaticUploadsWorker( checkSourcePathIsAValidUriOrThrowException(pictureUploadsConfiguration.sourcePath) syncFolder(pictureUploadsConfiguration) } catch (illegalArgumentException: IllegalArgumentException) { + Timber.e(illegalArgumentException, "Source path for picture uploads is not valid") showNotificationToUpdateUri(SyncType.PICTURE_UPLOADS) return Result.failure() } @@ -97,6 +98,7 @@ class AutomaticUploadsWorker( checkSourcePathIsAValidUriOrThrowException(videoUploadsConfiguration.sourcePath) syncFolder(videoUploadsConfiguration) } catch (illegalArgumentException: IllegalArgumentException) { + Timber.e(illegalArgumentException, "Source path for video uploads is not valid") showNotificationToUpdateUri(SyncType.VIDEO_UPLOADS) return Result.failure() } diff --git a/owncloudApp/src/main/java/com/owncloud/android/workers/AvailableOfflinePeriodicWorker.kt b/owncloudApp/src/main/java/com/owncloud/android/workers/AvailableOfflinePeriodicWorker.kt index 9695db105bf..12094f32a66 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/workers/AvailableOfflinePeriodicWorker.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/workers/AvailableOfflinePeriodicWorker.kt @@ -51,6 +51,7 @@ class AvailableOfflinePeriodicWorker( Result.success() } catch (exception: Exception) { + Timber.e(exception, "Sync of available offline files failed") Result.failure() } diff --git a/owncloudApp/src/main/java/com/owncloud/android/workers/OldLogsCollectorWorker.kt b/owncloudApp/src/main/java/com/owncloud/android/workers/OldLogsCollectorWorker.kt index 08889d6a82a..318c629c239 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/workers/OldLogsCollectorWorker.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/workers/OldLogsCollectorWorker.kt @@ -46,8 +46,10 @@ class OldLogsCollectorWorker( removeOldLogs(logsFiles) Result.success() } catch (ioException: IOException) { + Timber.e(ioException, "An error occurred trying to access the file") Result.failure() } catch (securityException: SecurityException) { + Timber.e(securityException, "A security violation was produced") Result.failure() } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/workers/RemoveLocallyFilesWithLastUsageOlderThanGivenTimeWorker.kt b/owncloudApp/src/main/java/com/owncloud/android/workers/RemoveLocallyFilesWithLastUsageOlderThanGivenTimeWorker.kt index 5b94e3be523..15250ce60ae 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/workers/RemoveLocallyFilesWithLastUsageOlderThanGivenTimeWorker.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/workers/RemoveLocallyFilesWithLastUsageOlderThanGivenTimeWorker.kt @@ -30,6 +30,7 @@ import com.owncloud.android.ui.preview.PreviewVideoActivity import com.owncloud.android.usecases.files.RemoveLocallyFilesWithLastUsageOlderThanGivenTimeUseCase import org.koin.core.component.KoinComponent import org.koin.core.component.inject +import timber.log.Timber import java.util.concurrent.TimeUnit class RemoveLocallyFilesWithLastUsageOlderThanGivenTimeWorker( @@ -50,6 +51,7 @@ class RemoveLocallyFilesWithLastUsageOlderThanGivenTimeWorker( ) Result.success() } catch (exception: Exception) { + Timber.e(exception, "An error occurred when trying to remove local files") Result.failure() } diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.kt index 3be9c82b8df..0f456b116b7 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.kt @@ -31,6 +31,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCo import com.owncloud.android.lib.resources.status.HttpScheme.HTTPS_PREFIX import com.owncloud.android.lib.resources.status.HttpScheme.HTTP_PREFIX import org.json.JSONException +import timber.log.Timber /** * Checks if the server is valid @@ -63,6 +64,7 @@ class GetRemoteStatusOperation : RemoteOperation() { updateClientBaseUrl(client, result.data.baseUrl) return result } catch (e: JSONException) { + Timber.e(e, "JSON is not correct") RemoteOperationResult(ResultCode.INSTANCE_NOT_CONFIGURED) } catch (e: Exception) { RemoteOperationResult(e) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OwnCloudVersion.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OwnCloudVersion.kt index 226bcade362..2a8f6749675 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OwnCloudVersion.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OwnCloudVersion.kt @@ -27,6 +27,7 @@ package com.owncloud.android.lib.resources.status import android.os.Parcel import android.os.Parcelable +import timber.log.Timber class OwnCloudVersion(version: String) : Comparable, Parcelable { @@ -94,6 +95,7 @@ class OwnCloudVersion(version: String) : Comparable, Parcelable isVersionValid = true } catch (e: Exception) { + Timber.w(e, "Version is invalid") isVersionValid = false // if invalid, the instance will respond as if server is 8.1, minimum with capabilities API, // and "dead" : https://github.com/owncloud/core/wiki/Maintenance-and-Release-Schedule diff --git a/owncloudData/src/main/java/com/owncloud/android/data/extensions/FileExt.kt b/owncloudData/src/main/java/com/owncloud/android/data/extensions/FileExt.kt index 5fa12e4e583..b59ffaa3e63 100644 --- a/owncloudData/src/main/java/com/owncloud/android/data/extensions/FileExt.kt +++ b/owncloudData/src/main/java/com/owncloud/android/data/extensions/FileExt.kt @@ -20,6 +20,7 @@ package com.owncloud.android.data.extensions +import timber.log.Timber import java.io.File import java.io.IOException @@ -86,6 +87,7 @@ fun File.moveRecursively( src.delete() } } catch (e: IOException) { + Timber.e(e, "An error occurred while trying to move the file") src.delete() dstFile.delete() } @@ -96,6 +98,7 @@ fun File.moveRecursively( return true } catch (e: TerminateException) { + Timber.e(e, "The process terminated unexpectedly") return false } } diff --git a/owncloudData/src/main/java/com/owncloud/android/data/files/repository/OCFileRepository.kt b/owncloudData/src/main/java/com/owncloud/android/data/files/repository/OCFileRepository.kt index 072538e4f5b..e272d465cfc 100644 --- a/owncloudData/src/main/java/com/owncloud/android/data/files/repository/OCFileRepository.kt +++ b/owncloudData/src/main/java/com/owncloud/android/data/files/repository/OCFileRepository.kt @@ -447,7 +447,7 @@ class OCFileRepository( spaceWebDavUrl = spaceWebDavUrl, ) } catch (fileNotFoundException: FileNotFoundException) { - Timber.i("File ${ocFile.fileName} was not found in server. Let's remove it from local storage") + Timber.i(fileNotFoundException, "File ${ocFile.fileName} was not found in server. Let's remove it from local storage") } } ocFile.etagInConflict?.let { diff --git a/owncloudData/src/main/java/com/owncloud/android/data/server/repository/OCServerInfoRepository.kt b/owncloudData/src/main/java/com/owncloud/android/data/server/repository/OCServerInfoRepository.kt index 6547add0bd3..db1bd847126 100644 --- a/owncloudData/src/main/java/com/owncloud/android/data/server/repository/OCServerInfoRepository.kt +++ b/owncloudData/src/main/java/com/owncloud/android/data/server/repository/OCServerInfoRepository.kt @@ -56,7 +56,7 @@ class OCServerInfoRepository( val openIDConnectServerConfiguration = try { oidcRemoteOAuthDataSource.performOIDCDiscovery(serverInfo.baseUrl) } catch (exception: Exception) { - Timber.d("OIDC discovery not found") + Timber.d(exception, "OIDC discovery not found") null } @@ -85,7 +85,7 @@ class OCServerInfoRepository( resource = serverUrl, ).firstOrNull() } catch (exception: Exception) { - Timber.d("Cant retrieve the oidc issuer from webfinger.") + Timber.d(exception, "Cant retrieve the oidc issuer from webfinger.") null }