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

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-07-02 10:08:31 +0300
committerStefan Niedermann <info@niedermann.it>2020-07-02 10:08:31 +0300
commit4f421425220c21b0c8598fc241709cebb5ea98f1 (patch)
treee93eb0641a2d17470f42cede6e46ed34f3acd695 /app/src/main
parent32bcd2616d9b81cc96b31e58b4af31c72748671f (diff)
Display exception tips on total crash
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java8
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java60
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java69
-rw-r--r--app/src/main/res/layout/activity_exception.xml48
-rw-r--r--app/src/main/res/layout/item_tip.xml2
5 files changed, 113 insertions, 74 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java
index 4999a30e..c90405a5 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java
@@ -9,10 +9,12 @@ import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
+import java.util.Collections;
import java.util.Objects;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.databinding.ActivityExceptionBinding;
+import it.niedermann.owncloud.notes.exception.tips.TipsAdapter;
import static it.niedermann.owncloud.notes.exception.ExceptionHandler.KEY_THROWABLE;
@@ -32,12 +34,18 @@ public class ExceptionActivity extends AppCompatActivity {
binding.copy.setOnClickListener((v) -> copyStacktraceToClipboard());
binding.close.setOnClickListener((v) -> close());
+
+ final TipsAdapter adapter = new TipsAdapter(this::startActivity);
+ binding.tips.setAdapter(adapter);
+ binding.tips.setNestedScrollingEnabled(false);
+
setSupportActionBar(binding.toolbar);
Throwable throwable = (Throwable) Objects.requireNonNull(getIntent().getSerializableExtra(KEY_THROWABLE));
throwable.printStackTrace();
binding.toolbar.setTitle(getString(R.string.simple_error));
binding.message.setText(throwable.getMessage());
binding.stacktrace.setText(ExceptionUtil.getDebugInfos(this, throwable));
+ adapter.setThrowables(Collections.singletonList(throwable));
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java
index b7f0cbdc..308529c3 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java
@@ -2,12 +2,7 @@ package it.niedermann.owncloud.notes.exception;
import android.app.Dialog;
import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
import android.os.Bundle;
-import android.provider.Settings;
import android.view.View;
import androidx.annotation.NonNull;
@@ -15,23 +10,12 @@ import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDialogFragment;
import androidx.fragment.app.DialogFragment;
-import com.nextcloud.android.sso.exceptions.NextcloudApiNotRespondingException;
-import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotSupportedException;
-import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException;
-import com.nextcloud.android.sso.exceptions.TokenMismatchException;
-
-import org.json.JSONException;
-
-import java.net.ConnectException;
-import java.net.SocketTimeoutException;
import java.util.ArrayList;
-import it.niedermann.owncloud.notes.BuildConfig;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.databinding.DialogExceptionBinding;
import it.niedermann.owncloud.notes.exception.tips.TipsAdapter;
-import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS;
import static it.niedermann.owncloud.notes.shared.util.ClipboardUtil.copyToClipboard;
public class ExceptionDialogFragment extends AppCompatDialogFragment {
@@ -68,49 +52,7 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
binding.statusMessage.setText(getString(R.string.error_sync, throwables.size() > 0 ? throwables.get(0).getLocalizedMessage() : getString(R.string.error_unknown)));
binding.stacktrace.setText(debugInfos);
- for (Throwable t : throwables) {
- if (t instanceof TokenMismatchException) {
- adapter.add(R.string.error_dialog_tip_token_mismatch_retry);
- adapter.add(R.string.error_dialog_tip_token_mismatch_clear_storage);
- Intent intent = new Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
- .setData(Uri.parse("package:" + BuildConfig.APPLICATION_ID))
- .putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_deck_info);
- adapter.add(R.string.error_dialog_tip_clear_storage, intent);
- adapter.add(R.string.error_dialog_tip_clear_storage);
- } else if (t instanceof NextcloudFilesAppNotSupportedException) {
- adapter.add(R.string.error_dialog_tip_files_outdated);
- } else if (t instanceof NextcloudApiNotRespondingException) {
- if (VERSION.SDK_INT >= VERSION_CODES.M) {
- adapter.add(R.string.error_dialog_tip_disable_battery_optimizations, new Intent().setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS).putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_battery_settings));
- } else {
- adapter.add(R.string.error_dialog_tip_disable_battery_optimizations);
- }
- adapter.add(R.string.error_dialog_tip_files_force_stop);
- adapter.add(R.string.error_dialog_tip_files_delete_storage);
- } else if (t instanceof SocketTimeoutException || t instanceof ConnectException) {
- adapter.add(R.string.error_dialog_timeout_instance);
- adapter.add(R.string.error_dialog_timeout_toggle, new Intent(Settings.ACTION_WIFI_SETTINGS).putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_network));
- } else if (t instanceof JSONException || t instanceof NullPointerException) {
- adapter.add(R.string.error_dialog_check_server);
- } else if (t instanceof NextcloudHttpRequestFailedException) {
- int statusCode = ((NextcloudHttpRequestFailedException) t).getStatusCode();
- switch (statusCode) {
- case 302:
- adapter.add(R.string.error_dialog_server_app_enabled);
- adapter.add(R.string.error_dialog_redirect);
- break;
- case 500:
- adapter.add(R.string.error_dialog_check_server_logs);
- break;
- case 503:
- adapter.add(R.string.error_dialog_check_maintenance);
- break;
- case 507:
- adapter.add(R.string.error_dialog_insufficient_storage);
- break;
- }
- }
- }
+ adapter.setThrowables(throwables);
return new AlertDialog.Builder(requireActivity())
.setView(binding.getRoot())
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java b/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java
index 2bd92957..844b3bcc 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java
@@ -1,6 +1,10 @@
package it.niedermann.owncloud.notes.exception.tips;
import android.content.Intent;
+import android.net.Uri;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
+import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -11,11 +15,24 @@ import androidx.annotation.StringRes;
import androidx.core.util.Consumer;
import androidx.recyclerview.widget.RecyclerView;
+import com.nextcloud.android.sso.exceptions.NextcloudApiNotRespondingException;
+import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotSupportedException;
+import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException;
+import com.nextcloud.android.sso.exceptions.TokenMismatchException;
+
+import org.json.JSONException;
+
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
import java.util.LinkedList;
import java.util.List;
+import it.niedermann.owncloud.notes.BuildConfig;
import it.niedermann.owncloud.notes.R;
+import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS;
+import static it.niedermann.owncloud.notes.exception.ExceptionDialogFragment.INTENT_EXTRA_BUTTON_TEXT;
+
public class TipsAdapter extends RecyclerView.Adapter<TipsViewHolder> {
@NonNull
@@ -44,12 +61,58 @@ public class TipsAdapter extends RecyclerView.Adapter<TipsViewHolder> {
return tips.size();
}
- public void add(@StringRes int text) {
+ public void setThrowables(@NonNull List<Throwable> throwables) {
+ for (Throwable t : throwables) {
+ if (t instanceof TokenMismatchException) {
+ add(R.string.error_dialog_tip_token_mismatch_retry);
+ add(R.string.error_dialog_tip_token_mismatch_clear_storage);
+ Intent intent = new Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
+ .setData(Uri.parse("package:" + BuildConfig.APPLICATION_ID))
+ .putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_deck_info);
+ add(R.string.error_dialog_tip_clear_storage, intent);
+ add(R.string.error_dialog_tip_clear_storage);
+ } else if (t instanceof NextcloudFilesAppNotSupportedException) {
+ add(R.string.error_dialog_tip_files_outdated);
+ } else if (t instanceof NextcloudApiNotRespondingException) {
+ if (VERSION.SDK_INT >= VERSION_CODES.M) {
+ add(R.string.error_dialog_tip_disable_battery_optimizations, new Intent().setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS).putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_battery_settings));
+ } else {
+ add(R.string.error_dialog_tip_disable_battery_optimizations);
+ }
+ add(R.string.error_dialog_tip_files_force_stop);
+ add(R.string.error_dialog_tip_files_delete_storage);
+ } else if (t instanceof SocketTimeoutException || t instanceof ConnectException) {
+ add(R.string.error_dialog_timeout_instance);
+ add(R.string.error_dialog_timeout_toggle, new Intent(Settings.ACTION_WIFI_SETTINGS).putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_network));
+ } else if (t instanceof JSONException || t instanceof NullPointerException) {
+ add(R.string.error_dialog_check_server);
+ } else if (t instanceof NextcloudHttpRequestFailedException) {
+ int statusCode = ((NextcloudHttpRequestFailedException) t).getStatusCode();
+ switch (statusCode) {
+ case 302:
+ add(R.string.error_dialog_server_app_enabled);
+ add(R.string.error_dialog_redirect);
+ break;
+ case 500:
+ add(R.string.error_dialog_check_server_logs);
+ break;
+ case 503:
+ add(R.string.error_dialog_check_maintenance);
+ break;
+ case 507:
+ add(R.string.error_dialog_insufficient_storage);
+ break;
+ }
+ }
+ }
+ notifyDataSetChanged();
+ }
+
+ private void add(@StringRes int text) {
add(text, null);
}
- public void add(@StringRes int text, @Nullable Intent primaryAction) {
+ private void add(@StringRes int text, @Nullable Intent primaryAction) {
tips.add(new TipsModel(text, primaryAction));
- notifyItemInserted(tips.size());
}
} \ No newline at end of file
diff --git a/app/src/main/res/layout/activity_exception.xml b/app/src/main/res/layout/activity_exception.xml
index 0dbe60f4..cae5f110 100644
--- a/app/src/main/res/layout/activity_exception.xml
+++ b/app/src/main/res/layout/activity_exception.xml
@@ -24,19 +24,45 @@
android:hint="An error appeared."
tools:ignore="HardcodedText" />
- <TextView
- android:id="@+id/stacktrace"
+ <ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
- android:layout_marginStart="@dimen/spacer_2x"
- android:layout_marginEnd="@dimen/spacer_2x"
- android:layout_weight="1"
- android:background="@color/bg_highlighted"
- android:padding="@dimen/spacer_1x"
- android:scrollbars="horizontal|vertical"
- android:textIsSelectable="true"
- android:typeface="monospace"
- tools:text="@string/android_get_accounts_permission_not_granted_exception_message" />
+ android:layout_weight="1">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/tips"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="@dimen/spacer_2x"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+ tools:itemCount="2"
+ tools:listitem="@layout/item_tip" />
+
+ <HorizontalScrollView
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1">
+
+ <TextView
+ android:id="@+id/stacktrace"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/spacer_2x"
+ android:layout_marginEnd="@dimen/spacer_2x"
+ android:background="@color/bg_highlighted"
+ android:padding="@dimen/spacer_1x"
+ android:textIsSelectable="true"
+ android:typeface="monospace"
+ tools:text="@string/android_get_accounts_permission_not_granted_exception_message" />
+ </HorizontalScrollView>
+ </LinearLayout>
+ </ScrollView>
<LinearLayout
style="?android:buttonBarStyle"
diff --git a/app/src/main/res/layout/item_tip.xml b/app/src/main/res/layout/item_tip.xml
index 5c9406b2..2177d013 100644
--- a/app/src/main/res/layout/item_tip.xml
+++ b/app/src/main/res/layout/item_tip.xml
@@ -29,6 +29,6 @@
android:layout_marginEnd="@dimen/spacer_1x"
android:textColor="@color/defaultBrand"
android:visibility="visible"
- tools:text="@string/error_files_app"
+ tools:text="@string/error_action_open_deck_info"
tools:visibility="visible" />
</LinearLayout> \ No newline at end of file