diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-04-29 13:58:56 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-04-29 13:58:56 +0300 |
commit | 1768b2b4a84605801c413928766b067d3b2cb5f4 (patch) | |
tree | 600a975bc8d60ad3c0d6b93f0769bb48f6dc98b8 /app/src | |
parent | 1b5b26650b696c84abf494b9402e5518d39613a5 (diff) |
#1167 Enhance exception handling
Diffstat (limited to 'app/src')
5 files changed, 26 insertions, 25 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java index e383091c..47dfca95 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java @@ -672,7 +672,7 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A runOnUiThread(() -> ExceptionDialogFragment.newInstance(t).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName())); } }); - } catch (Exception e) { + } catch (Throwable e) { SSOClient.invalidateAPICache(ssoAccount); // Happens when importing an already existing account the second time if (e instanceof TokenMismatchException && mainViewModel.getLocalAccountByAccountName(ssoAccount.name) != null) { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java index 1eca83a5..ec0e71c7 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java @@ -21,7 +21,6 @@ import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundExce import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; import com.nextcloud.android.sso.helper.SingleAccountHelper; -import java.net.HttpURLConnection; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -59,6 +58,7 @@ import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType. import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.RECENT; import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.UNCATEGORIZED; import static it.niedermann.owncloud.notes.shared.util.DisplayUtils.convertToCategoryNavigationItem; +import static java.net.HttpURLConnection.HTTP_NOT_MODIFIED; public class MainViewModel extends AndroidViewModel { @@ -405,17 +405,15 @@ public class MainViewModel extends AndroidViewModel { } catch (NextcloudFilesAppAccountNotFoundException e) { repo.deleteAccount(localAccount); callback.onError(e); - } catch (Exception e) { - if (e instanceof NextcloudHttpRequestFailedException) { - if (((NextcloudHttpRequestFailedException) e).getStatusCode() == HttpURLConnection.HTTP_NOT_MODIFIED) { - Log.i(TAG, "[synchronizeCapabilities] Capabilities not modified."); + } catch (Throwable t) { + if (t.getClass() == NextcloudHttpRequestFailedException.class || t instanceof NextcloudHttpRequestFailedException) { + if (((NextcloudHttpRequestFailedException) t).getStatusCode() == HTTP_NOT_MODIFIED) { + Log.d(TAG, "Server returned HTTP Status Code " + ((NextcloudHttpRequestFailedException) t).getStatusCode() + " - Capabilities not modified."); callback.onSuccess(null); - } else { - callback.onError(e); + return; } - } else { - callback.onError(e); } + callback.onError(t); } } else { if (repo.isNetworkConnected() && repo.isSyncOnlyOnWifi()) { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java index ffa5fd82..206195c8 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java @@ -27,7 +27,7 @@ public class CapabilitiesClient { private static final String API_ENDPOINT_OCS = "/ocs/v2.php/cloud/"; private static final String HEADER_KEY_ETAG = "ETag"; - public static Capabilities getCapabilities(@NonNull Context context, @NonNull SingleSignOnAccount ssoAccount, @Nullable String lastETag) throws NextcloudHttpRequestFailedException, IOException { + public static Capabilities getCapabilities(@NonNull Context context, @NonNull SingleSignOnAccount ssoAccount, @Nullable String lastETag) throws Throwable { final NextcloudAPI nextcloudAPI = SSOClient.getNextcloudAPI(context.getApplicationContext(), ssoAccount); final OcsAPI ocsAPI = new NextcloudRetrofitApiBuilder(nextcloudAPI, API_ENDPOINT_OCS).create(OcsAPI.class); try { @@ -41,8 +41,9 @@ public class CapabilitiesClient { } return capabilities; } catch (RuntimeException e) { - if (e.getCause() instanceof NextcloudHttpRequestFailedException) { - throw (NextcloudHttpRequestFailedException) e.getCause(); + final Throwable cause = e.getCause(); + if(cause != null) { + throw cause; } else { throw e; } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesWorker.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesWorker.java index 6a14f8f6..1dff46cf 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesWorker.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesWorker.java @@ -52,7 +52,7 @@ public class CapabilitiesWorker extends Worker { repo.updateBrand(account.getId(), capabilities.getColor(), capabilities.getTextColor()); repo.updateApiVersion(account.getId(), capabilities.getApiVersion()); Log.i(TAG, capabilities.toString()); - } catch (Exception e) { + } catch (Throwable e) { if (e instanceof NextcloudHttpRequestFailedException) { if (((NextcloudHttpRequestFailedException) e).getStatusCode() == HttpURLConnection.HTTP_NOT_MODIFIED) { Log.i(TAG, "Capabilities not modified."); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java index d1604695..1059e622 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java @@ -264,19 +264,21 @@ abstract class NotesServerSyncTask extends Thread { exceptions.add(e); } return true; - } catch (Exception e) { - if (e.getClass() == RuntimeException.class && e.getCause() instanceof NextcloudHttpRequestFailedException) { - if (((NextcloudHttpRequestFailedException) e.getCause()).getStatusCode() == HTTP_NOT_MODIFIED) { - Log.d(TAG, "Server returned HTTP Status Code " + ((NextcloudHttpRequestFailedException) e.getCause()).getStatusCode() + " - Notes not modified."); - return true; - } else if (((NextcloudHttpRequestFailedException) e.getCause()).getStatusCode() == HTTP_UNAVAILABLE) { - Log.d(TAG, "Server returned HTTP Status Code " + ((NextcloudHttpRequestFailedException) e.getCause()).getStatusCode() + " - Server is in maintenance mode."); - return true; + } catch (Throwable t) { + final Throwable cause = t.getCause(); + if (t.getClass() == RuntimeException.class && cause != null) { + if (cause.getClass() == NextcloudHttpRequestFailedException.class || cause instanceof NextcloudHttpRequestFailedException) { + final NextcloudHttpRequestFailedException httpException = (NextcloudHttpRequestFailedException) cause; + if (httpException.getStatusCode() == HTTP_NOT_MODIFIED) { + Log.d(TAG, "Server returned HTTP Status Code " + httpException.getStatusCode() + " - Notes not modified."); + return true; + } else if (httpException.getStatusCode() == HTTP_UNAVAILABLE) { + Log.d(TAG, "Server returned HTTP Status Code " + httpException.getStatusCode() + " - Server is in maintenance mode."); + return true; + } } - } else if (e instanceof TokenMismatchException) { - SSOClient.invalidateAPICache(ssoAccount); } - exceptions.add(e); + exceptions.add(t); return false; } } |