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

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-05-07 18:08:45 +0300
committerStefan Niedermann <info@niedermann.it>2020-05-07 18:08:45 +0300
commitfa1388cc43cb480721bdddafa61e417f2a884045 (patch)
tree068bb2c60ec22efe0737f85fe3b940d43a97c4bb /app/src/main/java
parent26d73013569d4a17c94211f46a002fa1fa4baae1 (diff)
#456 Clear storage tip: show direct button to start app info page
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java1
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java7
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java11
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/SelectCardActivity.java2
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java2
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java2
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java2
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionDialogFragment.java53
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/util/ExceptionUtil.java18
9 files changed, 63 insertions, 35 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
index df3187fe4..a9d0dd44c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
@@ -154,6 +154,7 @@ public class SyncManager {
refreshCapabilities(new IResponseCallback<Capabilities>(responseCallback.getAccount()) {
@Override
public void onResponse(Capabilities response) {
+ responseCallback.onError(new NextcloudHttpRequestFailedException(500, new Exception()));
if (!response.isMaintenanceEnabled()) {
long accountId = responseCallback.getAccount().getId();
Date lastSyncDate = LastSyncUtil.getLastSyncDate(responseCallback.getAccount().getId());
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java
index cf67130eb..ae7ab3683 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java
@@ -118,8 +118,7 @@ public class ImportAccountActivity extends AppCompatActivity {
}
assert error != null;
setStatusText(error.getMessage());
- runOnUiThread(() -> ExceptionDialogFragment.newInstance(error).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
- runOnUiThread(() -> ExceptionDialogFragment.newInstance(error).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
+ runOnUiThread(() -> ExceptionDialogFragment.newInstance(error, createdAccount).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
restoreWifiPref();
} else {
// Remember last account - THIS HAS TO BE DONE SYNCHRONOUSLY
@@ -146,7 +145,7 @@ public class ImportAccountActivity extends AppCompatActivity {
public void onError(Throwable throwable) {
super.onError(throwable);
setStatusText(throwable.getMessage());
- runOnUiThread(() -> ExceptionDialogFragment.newInstance(throwable).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
+ runOnUiThread(() -> ExceptionDialogFragment.newInstance(throwable, createdAccount).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
rollbackAccountCreation(syncManager, createdAccount.getId());
}
});
@@ -175,7 +174,7 @@ public class ImportAccountActivity extends AppCompatActivity {
setStatusText(R.string.you_have_to_be_connected_to_the_internet_in_order_to_add_an_account);
} else {
setStatusText(throwable.getMessage());
- runOnUiThread(() -> ExceptionDialogFragment.newInstance(throwable).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
+ runOnUiThread(() -> ExceptionDialogFragment.newInstance(throwable, createdAccount).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
}
rollbackAccountCreation(syncManager, createdAccount.getId());
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
index c52ed0de1..8c0c4f1c1 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
@@ -113,7 +113,7 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener
protected ActivityMainBinding binding;
protected NavHeaderMainBinding headerBinding;
- private MainViewModel mainViewModel;
+ protected MainViewModel mainViewModel;
private FilterViewModel filterViewModel;
protected static final int ACTIVITY_ABOUT = 1;
@@ -799,7 +799,7 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener
super.onError(throwable);
runOnUiThread(() -> {
importSnackbar.dismiss();
- runOnUiThread(() -> ExceptionDialogFragment.newInstance(throwable).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
+ runOnUiThread(() -> ExceptionDialogFragment.newInstance(throwable, createdAccount).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
});
}
});
@@ -841,7 +841,7 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener
.setPositiveButton(R.string.simple_close, null)
.show());
} else {
- ExceptionDialogFragment.newInstance(throwable).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ ExceptionDialogFragment.newInstance(throwable, createdAccount).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
}
}
});
@@ -851,8 +851,7 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener
DeckLog.warn("Account already added");
Snackbar.make(binding.coordinatorLayout, accountAlreadyAdded, Snackbar.LENGTH_LONG).show();
} else {
- ExceptionDialogFragment.newInstance(error).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
- ExceptionDialogFragment.newInstance(error).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ ExceptionDialogFragment.newInstance(error, createdAccount).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
}
}
});
@@ -958,7 +957,7 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener
if (!(throwable instanceof NextcloudHttpRequestFailedException) || ((NextcloudHttpRequestFailedException) throwable).getStatusCode() != HttpURLConnection.HTTP_UNAVAILABLE) {
runOnUiThread(() -> {
Snackbar.make(binding.coordinatorLayout, R.string.synchronization_failed, Snackbar.LENGTH_LONG)
- .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(throwable).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()))
+ .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(throwable, mainViewModel.getCurrentAccount()).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()))
.show();
});
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/SelectCardActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/SelectCardActivity.java
index 96f7ae565..98ead9a13 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/SelectCardActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/SelectCardActivity.java
@@ -95,7 +95,7 @@ public class SelectCardActivity extends MainActivity implements SelectCardListen
private void handleException(Throwable throwable) {
DeckLog.logError(throwable);
- String debugInfos = ExceptionUtil.getDebugInfos(this, throwable);
+ String debugInfos = ExceptionUtil.getDebugInfos(this, throwable, mainViewModel.getCurrentAccount());
final AlertDialog dialog = new BrandedAlertDialogBuilder(this)
.setTitle(R.string.error)
.setMessage(debugInfos)
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java
index e0ab5a8f2..3672e04c8 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java
@@ -113,7 +113,7 @@ public class AccessControlDialogFragment extends BrandedDialogFragment implement
if (wrappedDeleteLiveData.hasError()) {
DeckLog.logError(wrappedDeleteLiveData.getError());
Snackbar.make(requireView(), getString(R.string.error_revoking_ac, ac.getUser().getDisplayname()), Snackbar.LENGTH_LONG)
- .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(wrappedDeleteLiveData.getError()).show(getChildFragmentManager(), ExceptionDialogFragment.class.getSimpleName())).show();
+ .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(wrappedDeleteLiveData.getError(), viewModel.getCurrentAccount()).show(getChildFragmentManager(), ExceptionDialogFragment.class.getSimpleName())).show();
}
});
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
index 67bbd99a6..38bd9488f 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
@@ -262,7 +262,7 @@ public class CardDetailsFragment extends BrandedFragment implements OnDateSetLis
if (createLabelLiveData.hasError()) {
DeckLog.logError(createLabelLiveData.getError());
Snackbar.make(requireView(), getString(R.string.error_create_label, newLabel.getTitle()), Snackbar.LENGTH_LONG)
- .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(createLabelLiveData.getError()).show(getChildFragmentManager(), ExceptionDialogFragment.class.getSimpleName())).show();
+ .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(createLabelLiveData.getError(), viewModel.getAccount()).show(getChildFragmentManager(), ExceptionDialogFragment.class.getSimpleName())).show();
} else {
newLabel.setLocalId(createdLabel.getLocalId());
((LabelAutoCompleteAdapter) binding.labels.getAdapter()).exclude(createdLabel);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java
index e33827bf3..3ba3eb59f 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionActivity.java
@@ -37,7 +37,7 @@ public class ExceptionActivity extends AppCompatActivity {
binding.toolbar.setTitle(R.string.error);
binding.message.setText(throwable.getMessage());
- final String debugInfo = ExceptionUtil.getDebugInfos(this, throwable);
+ final String debugInfo = ExceptionUtil.getDebugInfos(this, throwable, null);
binding.stacktrace.setText(debugInfo);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionDialogFragment.java
index a1cbceac2..ba38cdf98 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionDialogFragment.java
@@ -3,6 +3,7 @@ package it.niedermann.nextcloud.deck.ui.exception;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -29,10 +30,12 @@ import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
+import it.niedermann.nextcloud.deck.BuildConfig;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.DialogExceptionBinding;
import it.niedermann.nextcloud.deck.databinding.ItemTipBinding;
+import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.util.ExceptionUtil;
import static it.niedermann.nextcloud.deck.util.ClipboardUtil.copyToClipboard;
@@ -40,10 +43,15 @@ import static it.niedermann.nextcloud.deck.util.ClipboardUtil.copyToClipboard;
public class ExceptionDialogFragment extends AppCompatDialogFragment {
private static final String KEY_THROWABLES = "throwables";
+ private static final String KEY_ACCOUNT = "account";
+ private static final String INTENT_EXTRA_BUTTON_TEXT = "button_text";
@NonNull
private ArrayList<Throwable> throwables = new ArrayList<>();
+ @Nullable
+ private Account account;
+
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
@@ -53,6 +61,10 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
if (throwablesArgument != null) {
throwables.addAll((ArrayList<Throwable>) throwablesArgument);
}
+ final Object accountArgument = args.getSerializable(KEY_ACCOUNT);
+ if (accountArgument != null) {
+ this.account = (Account) accountArgument;
+ }
}
if (throwables.size() == 0) {
throwables.add(new IllegalArgumentException("Did not receive any exception in " + ExceptionDialogFragment.class.getSimpleName()));
@@ -67,7 +79,7 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
final TipsAdapter adapter = new TipsAdapter();
- final String debugInfos = ExceptionUtil.getDebugInfos(requireContext(), throwables);
+ final String debugInfos = ExceptionUtil.getDebugInfos(requireContext(), throwables, account);
binding.tips.setAdapter(adapter);
binding.statusMessage.setText(throwables.get(0).getLocalizedMessage());
@@ -78,7 +90,10 @@ 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);
- adapter.add(R.string.error_dialog_tip_clear_storage);
+ Intent intent = new Intent(android.provider.Settings.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);
} else if (t instanceof NextcloudFilesAppNotSupportedException) {
adapter.add(R.string.error_dialog_tip_files_outdated);
} else if (t instanceof NextcloudApiNotRespondingException) {
@@ -86,7 +101,7 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
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(android.provider.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) {
@@ -96,7 +111,13 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
adapter.add(R.string.error_dialog_redirect);
break;
case 500:
- adapter.add(R.string.error_dialog_check_server_logs);
+ if (account != null) {
+ adapter.add(R.string.error_dialog_check_server_logs, new Intent(Intent.ACTION_VIEW)
+ .putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_server_logs)
+ .setData(Uri.parse(account.getUrl() + getString(R.string.url_fragment_server_logs))));
+ } else {
+ adapter.add(R.string.error_dialog_check_server_logs);
+ }
break;
case 503:
adapter.add(R.string.error_dialog_check_maintenance);
@@ -119,19 +140,12 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
.create();
}
- public static DialogFragment newInstance(ArrayList<Throwable> exceptions) {
- final Bundle args = new Bundle();
- args.putSerializable(KEY_THROWABLES, exceptions);
- final DialogFragment fragment = new ExceptionDialogFragment();
- fragment.setArguments(args);
- return fragment;
- }
-
- public static DialogFragment newInstance(Throwable exception) {
+ public static DialogFragment newInstance(Throwable exception, @Nullable Account account) {
final Bundle args = new Bundle();
final ArrayList<Throwable> list = new ArrayList<>(1);
list.add(exception);
args.putSerializable(KEY_THROWABLES, list);
+ args.putSerializable(KEY_ACCOUNT, account);
final DialogFragment fragment = new ExceptionDialogFragment();
fragment.setArguments(args);
return fragment;
@@ -183,10 +197,19 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment {
public void bind(TipsModel tip) {
binding.tip.setText(tip.text);
- if(tip.primaryAction == null) {
+ if (tip.primaryAction != null && tip.primaryAction.hasExtra(INTENT_EXTRA_BUTTON_TEXT)) {
+ binding.actionPrimary.setVisibility(View.VISIBLE);
+ binding.actionPrimary.setText(tip.primaryAction.getIntExtra(INTENT_EXTRA_BUTTON_TEXT, 0));
+ binding.actionPrimary.setOnClickListener((v) -> binding.getRoot().getRootView().getContext().startActivity(tip.primaryAction));
+ } else {
binding.actionPrimary.setVisibility(View.GONE);
+ }
+ if (tip.secondaryAction != null && tip.secondaryAction.hasExtra(INTENT_EXTRA_BUTTON_TEXT)) {
+ binding.actionSecondary.setVisibility(View.VISIBLE);
+ binding.actionSecondary.setText(tip.secondaryAction.getIntExtra(INTENT_EXTRA_BUTTON_TEXT, 0));
+ binding.actionSecondary.setOnClickListener((v) -> binding.getRoot().getRootView().getContext().startActivity(tip.secondaryAction));
} else {
- binding.actionPrimary.setVisibility(View.VISIBLE);
+ binding.actionSecondary.setVisibility(View.GONE);
}
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/ExceptionUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/ExceptionUtil.java
index 581313246..977463177 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/util/ExceptionUtil.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/ExceptionUtil.java
@@ -5,6 +5,7 @@ import android.content.pm.PackageManager;
import android.os.Build;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotInstalledException;
@@ -13,12 +14,12 @@ import com.nextcloud.android.sso.ui.UiExceptionManager;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.List;
import it.niedermann.nextcloud.deck.BuildConfig;
import it.niedermann.nextcloud.deck.DeckLog;
+import it.niedermann.nextcloud.deck.model.Account;
public class ExceptionUtil {
@@ -26,15 +27,15 @@ public class ExceptionUtil {
}
- public static String getDebugInfos(Context context, Throwable throwable) {
+ public static String getDebugInfos(@NonNull Context context, Throwable throwable, @Nullable Account account) {
List<Throwable> throwables = new ArrayList<>();
throwables.add(throwable);
- return getDebugInfos(context, throwables);
+ return getDebugInfos(context, throwables, account);
}
- public static String getDebugInfos(Context context, List<Throwable> throwables) {
+ public static String getDebugInfos(@NonNull Context context, @NonNull List<Throwable> throwables, @Nullable Account account) {
StringBuilder debugInfos = new StringBuilder(""
- + getAppVersions(context)
+ + getAppVersions(context, account)
+ "\n\n---\n"
+ getDeviceInfos()
+ "\n\n---"
@@ -45,12 +46,17 @@ public class ExceptionUtil {
return debugInfos.toString();
}
- private static String getAppVersions(Context context) {
+ private static String getAppVersions(Context context, @Nullable Account account) {
String versions = ""
+ "App Version: " + BuildConfig.VERSION_NAME + "\n"
+ "App Version Code: " + BuildConfig.VERSION_CODE + "\n"
+ "App Flavor: " + BuildConfig.FLAVOR + "\n";
+ if (account != null) {
+ versions += "\n";
+ versions += "Server Version: " + account.getServerDeckVersion() + "\n";
+ }
+
try {
versions += "\nFiles App Version Code: " + VersionCheckHelper.getNextcloudFilesVersionCode(context);
} catch (PackageManager.NameNotFoundException e) {