diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-04-25 15:13:06 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-04-25 15:13:06 +0300 |
commit | 71010248cdd0941d9a68ab94874d96cc23941d62 (patch) | |
tree | fa189e3ab0b5d0a761c6f75253c55c25675098ea /app | |
parent | ac114f21c6ed0df62425b578c1b2a744927b7576 (diff) |
- #1014 Handle offline state when adding accounts (First time import)
Diffstat (limited to 'app')
3 files changed, 35 insertions, 9 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountActivity.java index 2695f08a..e996da53 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountActivity.java @@ -1,16 +1,12 @@ package it.niedermann.owncloud.notes.importaccount; import android.content.Intent; -import android.graphics.drawable.Drawable; -import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.View; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; -import androidx.core.content.ContextCompat; -import androidx.core.graphics.drawable.DrawableCompat; import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModelProvider; @@ -18,6 +14,7 @@ import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.exceptions.AccountImportCancelledException; import com.nextcloud.android.sso.exceptions.AndroidGetAccountsPermissionNotGranted; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotInstalledException; +import com.nextcloud.android.sso.exceptions.UnknownErrorException; import com.nextcloud.android.sso.helper.SingleAccountHelper; import com.nextcloud.android.sso.ui.UiExceptionManager; @@ -27,6 +24,7 @@ import it.niedermann.owncloud.notes.databinding.ActivityImportAccountBinding; import it.niedermann.owncloud.notes.exception.ExceptionDialogFragment; import it.niedermann.owncloud.notes.exception.ExceptionHandler; import it.niedermann.owncloud.notes.persistence.CapabilitiesClient; +import it.niedermann.owncloud.notes.persistence.SSOClient; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.shared.model.Capabilities; @@ -52,6 +50,7 @@ public class ImportAccountActivity extends AppCompatActivity { binding.welcomeText.setText(getString(R.string.welcome_text, getString(R.string.app_name))); binding.addButton.setOnClickListener((v) -> { binding.addButton.setEnabled(false); + binding.status.setVisibility(View.GONE); try { AccountImporter.pickNewAccount(this); } catch (NextcloudFilesAppNotInstalledException e) { @@ -100,15 +99,22 @@ public class ImportAccountActivity extends AppCompatActivity { })); } catch (Throwable e) { e.printStackTrace(); + SSOClient.invalidateAPICache(ssoAccount); + SingleAccountHelper.setCurrentAccount(this, null); runOnUiThread(() -> { - binding.addButton.setEnabled(true); - ExceptionDialogFragment.newInstance(e).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()); + restoreCleanState(); + if (e instanceof UnknownErrorException && e.getMessage().contains("No address associated with hostname")) { + binding.status.setText(R.string.you_have_to_be_connected_to_the_internet_in_order_to_add_an_account); + binding.status.setVisibility(View.VISIBLE); + } else { + ExceptionDialogFragment.newInstance(e).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()); + } }); } }).start(); }); } catch (AccountImportCancelledException e) { - runOnUiThread(() -> binding.addButton.setEnabled(true)); + restoreCleanState(); Log.i(TAG, "Account import has been canceled."); } } @@ -118,4 +124,11 @@ public class ImportAccountActivity extends AppCompatActivity { super.onRequestPermissionsResult(requestCode, permissions, grantResults); AccountImporter.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } + + private void restoreCleanState() { + runOnUiThread(() -> { + binding.addButton.setEnabled(true); + binding.progressCircular.setVisibility(View.GONE); + }); + } }
\ No newline at end of file diff --git a/app/src/main/res/layout/activity_import_account.xml b/app/src/main/res/layout/activity_import_account.xml index 4ad83f02..ed072796 100644 --- a/app/src/main/res/layout/activity_import_account.xml +++ b/app/src/main/res/layout/activity_import_account.xml @@ -50,6 +50,19 @@ android:text="@string/choose_account" app:backgroundTint="@color/defaultBrand" /> + <TextView + android:id="@+id/status" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/add_button" + android:layout_centerHorizontal="true" + android:layout_marginTop="32dp" + android:gravity="center_horizontal" + android:textAlignment="center" + android:textColor="@color/fg_secondary" + android:textSize="18sp" + tools:text="@string/you_have_to_be_connected_to_the_internet_in_order_to_add_an_account" /> + <ProgressBar android:id="@+id/progress_circular" android:layout_width="wrap_content" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 957c00e0..30779de1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -299,11 +299,11 @@ <string name="no_other_accounts">You don\'t have configured any other accounts yet.</string> <string name="choose_account">Choose account</string> <string name="context_based_formatting">Context based formatting popover</string> - - <plurals name="remove_account_message"> <item quantity="one">Removing the account %1$s will also delete one unsynchronized change irrecoverable.</item> <item quantity="other">Removing the account %1$s will also delete %2$d unsynchronized changes irrecoverable.</item> </plurals> <string name="remove_account">Remove %1$s</string> + + <string name="you_have_to_be_connected_to_the_internet_in_order_to_add_an_account">You have to be connected to the internet in order to add an account.</string> </resources> |