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

Commit 0348f0a6 authored by Stefan Niedermann's avatar Stefan Niedermann
Browse files

Use IResponseCallback for adding a new Account

parent a690f3a9
Loading
Loading
Loading
Loading
+19 −12
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@ import android.view.View;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModelProvider;

import com.nextcloud.android.sso.AccountImporter;
@@ -27,6 +26,7 @@ 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;
import it.niedermann.owncloud.notes.shared.model.IResponseCallback;

public class ImportAccountActivity extends AppCompatActivity {

@@ -85,18 +85,25 @@ public class ImportAccountActivity extends AppCompatActivity {
                    try {
                        Log.i(TAG, "Loading capabilities for " + ssoAccount.name);
                        final Capabilities capabilities = CapabilitiesClient.getCapabilities(getApplicationContext(), ssoAccount, null);
                        LiveData<Account> createLiveData = importAccountViewModel.addAccount(ssoAccount.url, ssoAccount.userId, ssoAccount.name, capabilities);
                        runOnUiThread(() -> createLiveData.observe(this, (account) -> {
                            if (account != null) {
                        importAccountViewModel.addAccount(ssoAccount.url, ssoAccount.userId, ssoAccount.name, capabilities, new IResponseCallback<Account>() {
                            @Override
                            public void onSuccess(Account account) {
                                runOnUiThread(() -> {
                                    Log.i(TAG, capabilities.toString());
                                BrandingUtil.saveBrandColors(this, capabilities.getColor(), capabilities.getTextColor());
                                    BrandingUtil.saveBrandColors(ImportAccountActivity.this, capabilities.getColor(), capabilities.getTextColor());
                                    setResult(RESULT_OK);
                                    finish();
                            } else {
                                });
                            }

                            @Override
                            public void onError(@NonNull Throwable t) {
                                runOnUiThread(() -> {
                                    binding.addButton.setEnabled(true);
                                ExceptionDialogFragment.newInstance(new IllegalStateException("Created account is null.")).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
                                    ExceptionDialogFragment.newInstance(t).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
                                });
                            }
                        }));
                        });
                    } catch (Throwable e) {
                        e.printStackTrace();
                        SSOClient.invalidateAPICache(ssoAccount);
+3 −2
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import androidx.lifecycle.LiveData;
import it.niedermann.owncloud.notes.persistence.NotesRepository;
import it.niedermann.owncloud.notes.persistence.entity.Account;
import it.niedermann.owncloud.notes.shared.model.Capabilities;
import it.niedermann.owncloud.notes.shared.model.IResponseCallback;

public class ImportAccountViewModel extends AndroidViewModel {

@@ -22,7 +23,7 @@ public class ImportAccountViewModel extends AndroidViewModel {
        this.repo = NotesRepository.getInstance(application);
    }

    public LiveData<Account> addAccount(@NonNull String url, @NonNull String username, @NonNull String accountName, @NonNull Capabilities capabilities) {
        return repo.addAccount(url, username, accountName, capabilities);
    public void addAccount(@NonNull String url, @NonNull String username, @NonNull String accountName, @NonNull Capabilities capabilities, @NonNull IResponseCallback<Account> callback) {
        repo.addAccount(url, username, accountName, capabilities, callback);
    }
}
+15 −9
Original line number Diff line number Diff line
@@ -633,15 +633,21 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
                            try {
                                Log.i(TAG, "Refreshing capabilities for " + ssoAccount.name);
                                final Capabilities capabilities = CapabilitiesClient.getCapabilities(getApplicationContext(), ssoAccount, null);
                                LiveData<Account> createLiveData = mainViewModel.addAccount(ssoAccount.url, ssoAccount.userId, ssoAccount.name, capabilities);
                                runOnUiThread(() -> createLiveData.observe(this, (account) -> {
                                    createLiveData.removeObservers(this);
                                mainViewModel.addAccount(ssoAccount.url, ssoAccount.userId, ssoAccount.name, capabilities, new IResponseCallback<Account>() {
                                    @Override
                                    public void onSuccess(Account result) {
                                        new Thread(() -> {
                                            Log.i(TAG, capabilities.toString());
                                            final Account a = mainViewModel.getLocalAccountByAccountName(ssoAccount.name);
                                            runOnUiThread(() -> mainViewModel.postCurrentAccount(a));
                                        }).start();
                                }));
                                    }

                                    @Override
                                    public void onError(@NonNull Throwable t) {
                                        runOnUiThread(() -> ExceptionDialogFragment.newInstance(t).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
                                    }
                                });
                            } catch (Exception e) {
                                SSOClient.invalidateAPICache(ssoAccount);
                                // Happens when importing an already existing account the second time
+2 −2
Original line number Diff line number Diff line
@@ -526,8 +526,8 @@ public class MainViewModel extends AndroidViewModel {
        });
    }

    public LiveData<Account> addAccount(@NonNull String url, @NonNull String username, @NonNull String accountName, @NonNull Capabilities capabilities) {
        return repo.addAccount(url, username, accountName, capabilities);
    public void addAccount(@NonNull String url, @NonNull String username, @NonNull String accountName, @NonNull Capabilities capabilities, @NonNull IResponseCallback<Account> callback) {
        repo.addAccount(url, username, accountName, capabilities, callback);
    }

    public LiveData<Note> getFullNote$(long id) {
+8 −2
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ import it.niedermann.owncloud.notes.shared.model.Capabilities;
import it.niedermann.owncloud.notes.shared.model.CategorySortingMethod;
import it.niedermann.owncloud.notes.shared.model.DBStatus;
import it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType;
import it.niedermann.owncloud.notes.shared.model.IResponseCallback;
import it.niedermann.owncloud.notes.shared.model.ISyncCallback;
import it.niedermann.owncloud.notes.shared.model.NavigationCategory;
import it.niedermann.owncloud.notes.shared.model.SyncResultStatus;
@@ -160,8 +161,13 @@ public class NotesRepository {
    // Accounts

    @AnyThread
    public LiveData<Account> addAccount(@NonNull String url, @NonNull String username, @NonNull String accountName, @NonNull Capabilities capabilities) {
        return db.getAccountDao().getAccountById$(db.getAccountDao().insert(new Account(url, username, accountName, capabilities)));
    public void addAccount(@NonNull String url, @NonNull String username, @NonNull String accountName, @NonNull Capabilities capabilities, @NonNull IResponseCallback<Account> callback) {
        final Account createdAccount = db.getAccountDao().getAccountById(db.getAccountDao().insert(new Account(url, username, accountName, capabilities)));
        if(createdAccount == null) {
            callback.onError(new Exception("Could not read created account."));
        } else {
            callback.onSuccess(createdAccount);
        }
    }

    @WorkerThread
Loading