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 09:46:36 +0300
committerStefan Niedermann <info@niedermann.it>2020-07-02 09:46:36 +0300
commit32bcd2616d9b81cc96b31e58b4af31c72748671f (patch)
treede4a5f61b029980828fe621fbb73229f236e5eda /app/src/main/java/it/niedermann
parent0acc5373a460101b06f30816d44fca8f6b79c4e8 (diff)
Introduce quick actions for exception tips
Diffstat (limited to 'app/src/main/java/it/niedermann')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java67
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java55
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsModel.java30
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsViewHolder.java35
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java1
5 files changed, 141 insertions, 47 deletions
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 ec079906..b7f0cbdc 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,17 +2,18 @@ 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.view.LayoutInflater;
+import android.provider.Settings;
import android.view.View;
-import android.view.ViewGroup;
import androidx.annotation.NonNull;
-import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDialogFragment;
import androidx.fragment.app.DialogFragment;
-import androidx.recyclerview.widget.RecyclerView;
import com.nextcloud.android.sso.exceptions.NextcloudApiNotRespondingException;
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotSupportedException;
@@ -24,18 +25,19 @@ import org.json.JSONException;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
+import it.niedermann.owncloud.notes.BuildConfig;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.databinding.DialogExceptionBinding;
-import it.niedermann.owncloud.notes.databinding.ItemTipBinding;
+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 {
private static final String KEY_THROWABLES = "throwables";
+ public static final String INTENT_EXTRA_BUTTON_TEXT = "button_text";
@NonNull
private ArrayList<Throwable> throwables = new ArrayList<>();
@@ -58,7 +60,7 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
final View view = View.inflate(getContext(), R.layout.dialog_exception, null);
final DialogExceptionBinding binding = DialogExceptionBinding.bind(view);
- final TipsAdapter adapter = new TipsAdapter();
+ final TipsAdapter adapter = new TipsAdapter((actionIntent) -> requireActivity().startActivity(actionIntent));
final String debugInfos = ExceptionUtil.getDebugInfos(requireContext(), throwables);
@@ -70,16 +72,24 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
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) {
- adapter.add(R.string.error_dialog_tip_disable_battery_optimizations);
+ 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);
+ 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) {
@@ -127,41 +137,4 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
fragment.setArguments(args);
return fragment;
}
-
- private static class TipsAdapter extends RecyclerView.Adapter<TipsViewHolder> {
-
- @NonNull
- private List<Integer> tips = new LinkedList<>();
-
- @NonNull
- @Override
- public TipsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- final View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tip, parent, false);
- return new TipsViewHolder(v);
- }
-
- @Override
- public void onBindViewHolder(@NonNull TipsViewHolder holder, int position) {
- holder.binding.tip.setText(tips.get(position));
- }
-
- @Override
- public int getItemCount() {
- return tips.size();
- }
-
- private void add(@StringRes int tip) {
- tips.add(tip);
- notifyItemInserted(tips.size());
- }
- }
-
- private static class TipsViewHolder extends RecyclerView.ViewHolder {
- private final ItemTipBinding binding;
-
- private TipsViewHolder(@NonNull View itemView) {
- super(itemView);
- binding = ItemTipBinding.bind(itemView);
- }
- }
}
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
new file mode 100644
index 00000000..2bd92957
--- /dev/null
+++ b/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java
@@ -0,0 +1,55 @@
+package it.niedermann.owncloud.notes.exception.tips;
+
+import android.content.Intent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.core.util.Consumer;
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import it.niedermann.owncloud.notes.R;
+
+public class TipsAdapter extends RecyclerView.Adapter<TipsViewHolder> {
+
+ @NonNull
+ private Consumer<Intent> actionButtonClickedListener;
+ @NonNull
+ private List<TipsModel> tips = new LinkedList<>();
+
+ public TipsAdapter(@NonNull Consumer<Intent> actionButtonClickedListener) {
+ this.actionButtonClickedListener = actionButtonClickedListener;
+ }
+
+ @NonNull
+ @Override
+ public TipsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ final View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tip, parent, false);
+ return new TipsViewHolder(v);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull TipsViewHolder holder, int position) {
+ holder.bind(tips.get(position), actionButtonClickedListener);
+ }
+
+ @Override
+ public int getItemCount() {
+ return tips.size();
+ }
+
+ public void add(@StringRes int text) {
+ add(text, null);
+ }
+
+ public 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/java/it/niedermann/owncloud/notes/exception/tips/TipsModel.java b/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsModel.java
new file mode 100644
index 00000000..b2a4eec3
--- /dev/null
+++ b/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsModel.java
@@ -0,0 +1,30 @@
+package it.niedermann.owncloud.notes.exception.tips;
+
+import android.content.Intent;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+
+@SuppressWarnings("WeakerAccess")
+public class TipsModel {
+ @StringRes
+ private int text;
+ @Nullable
+ private
+ Intent actionIntent;
+
+ TipsModel(@StringRes int text, @Nullable Intent actionIntent) {
+ this.text = text;
+ this.actionIntent = actionIntent;
+ }
+
+ @StringRes
+ public int getText() {
+ return this.text;
+ }
+
+ @Nullable
+ public Intent getActionIntent() {
+ return this.actionIntent;
+ }
+} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsViewHolder.java
new file mode 100644
index 00000000..fab852df
--- /dev/null
+++ b/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsViewHolder.java
@@ -0,0 +1,35 @@
+package it.niedermann.owncloud.notes.exception.tips;
+
+import android.content.Intent;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.core.util.Consumer;
+import androidx.recyclerview.widget.RecyclerView;
+
+import it.niedermann.owncloud.notes.databinding.ItemTipBinding;
+
+import static it.niedermann.owncloud.notes.exception.ExceptionDialogFragment.INTENT_EXTRA_BUTTON_TEXT;
+
+
+public class TipsViewHolder extends RecyclerView.ViewHolder {
+ private final ItemTipBinding binding;
+
+ @SuppressWarnings("WeakerAccess")
+ public TipsViewHolder(@NonNull View itemView) {
+ super(itemView);
+ binding = ItemTipBinding.bind(itemView);
+ }
+
+ public void bind(TipsModel tip, Consumer<Intent> actionButtonClickedListener) {
+ binding.tip.setText(tip.getText());
+ final Intent actionIntent = tip.getActionIntent();
+ if (actionIntent != null && actionIntent.hasExtra(INTENT_EXTRA_BUTTON_TEXT)) {
+ binding.actionButton.setVisibility(View.VISIBLE);
+ binding.actionButton.setText(actionIntent.getIntExtra(INTENT_EXTRA_BUTTON_TEXT, 0));
+ binding.actionButton.setOnClickListener((v) -> actionButtonClickedListener.accept(actionIntent));
+ } else {
+ binding.actionButton.setVisibility(View.GONE);
+ }
+ }
+} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java
index 4b2f4b7d..306ef92a 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java
@@ -17,6 +17,7 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.PreferenceManager;
import com.google.android.material.snackbar.Snackbar;
+import com.nextcloud.android.sso.exceptions.NextcloudApiNotRespondingException;
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException;
import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException;