Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71010248 authored by Stefan Niedermann's avatar Stefan Niedermann
Browse files

- #1014 Handle offline state when adding accounts (First time import)

parent ac114f21
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
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);
                            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
+13 −0
Original line number Diff line number Diff line
@@ -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"
+2 −2
Original line number Diff line number Diff line
@@ -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>