diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-06-15 18:06:30 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-06-15 18:06:30 +0300 |
commit | 48d08f7d2bfe965b473ff443baaed1fdefe7acb5 (patch) | |
tree | 2c0995225184cdde369e7260270b258b05c3db51 | |
parent | 84bd51500dd7349f6c9b95bf31685784ca4079c7 (diff) |
Fix account deletion
2 files changed, 48 insertions, 43 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountAdapter.java index b585d18cd..c316705d0 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountAdapter.java @@ -6,6 +6,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.util.Consumer; +import androidx.core.util.Pair; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; @@ -22,10 +23,10 @@ public class ManageAccountAdapter extends RecyclerView.Adapter<ManageAccountView private final List<Account> accounts = new ArrayList<>(); @NonNull private final Consumer<Account> onAccountClick; - @Nullable - private final Consumer<Account> onAccountDelete; + @NonNull + private final Consumer<Pair<Account, Account>> onAccountDelete; - public ManageAccountAdapter(@NonNull Consumer<Account> onAccountClick, @Nullable Consumer<Account> onAccountDelete) { + public ManageAccountAdapter(@NonNull Consumer<Account> onAccountClick, @NonNull Consumer<Pair<Account, Account>> onAccountDelete) { this.onAccountClick = onAccountClick; this.onAccountDelete = onAccountDelete; setHasStableIds(true); @@ -49,16 +50,17 @@ public class ManageAccountAdapter extends RecyclerView.Adapter<ManageAccountView setCurrentAccount(clickedAccount); onAccountClick.accept(clickedAccount); }, (accountToDelete -> { - if (onAccountDelete != null) { - for (int i = 0; i < accounts.size(); i++) { - if (accounts.get(i).getId().equals(accountToDelete.getId())) { - accounts.remove(i); - notifyItemRemoved(i); - break; - } + for (int i = 0; i < accounts.size(); i++) { + if (accounts.get(i).getId().equals(accountToDelete.getId())) { + accounts.remove(i); + notifyItemRemoved(i); + break; } - onAccountDelete.accept(accountToDelete); } + + Account newAccount = accounts.size() > 0 ? accounts.get(0) : null; + setCurrentAccount(newAccount); + onAccountDelete.accept(new Pair<>(accountToDelete, newAccount)); }), currentAccount != null && currentAccount.getId().equals(account.getId())); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java index e0b6e00a1..ed62e85cb 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java @@ -2,14 +2,12 @@ package it.niedermann.nextcloud.deck.ui.manageaccounts; import android.graphics.Color; import android.os.Bundle; +import android.util.Log; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; -import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException; import com.nextcloud.android.sso.helper.SingleAccountHelper; -import com.nextcloud.android.sso.model.SingleSignOnAccount; import it.niedermann.nextcloud.deck.Application; import it.niedermann.nextcloud.deck.databinding.ActivityManageAccountsBinding; @@ -17,13 +15,16 @@ import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.ui.branding.BrandedActivity; +import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; + public class ManageAccountsActivity extends BrandedActivity { + private static final String TAG = ManageAccountsActivity.class.getSimpleName(); + private ActivityManageAccountsBinding binding; private ManageAccountAdapter adapter; private SyncManager syncManager = null; - @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -35,38 +36,40 @@ public class ManageAccountsActivity extends BrandedActivity { syncManager = new SyncManager(this); - syncManager.readAccounts().observe(this, (localAccounts -> { - - adapter = new ManageAccountAdapter((account) -> { - SingleAccountHelper.setCurrentAccount(getApplicationContext(), account.getName()); + adapter = new ManageAccountAdapter((account) -> { + SingleAccountHelper.setCurrentAccount(getApplicationContext(), account.getName()); + syncManager = new SyncManager(this); + Application.saveBrandColors(this, Color.parseColor(account.getColor()), Color.parseColor(account.getTextColor())); + Application.saveCurrentAccountId(this, account.getId()); + }, (accountPair) -> { + if (accountPair.first != null) { + syncManager.deleteAccount(accountPair.first.getId()); + } else { + throw new IllegalArgumentException("Could not delete account because given account was null."); + } + Account newAccount = accountPair.second; + if (newAccount != null) { + SingleAccountHelper.setCurrentAccount(getApplicationContext(), newAccount.getName()); + Application.saveBrandColors(this, Color.parseColor(newAccount.getColor()), Color.parseColor(newAccount.getTextColor())); + Application.saveCurrentAccountId(this, newAccount.getId()); syncManager = new SyncManager(this); - Application.saveBrandColors(this, Color.parseColor(account.getColor()), Color.parseColor(account.getTextColor())); - Application.saveCurrentAccountId(this, account.getId()); - }, (deletedAccount) -> { - syncManager.deleteAccount(deletedAccount.getId()); - localAccounts.remove(deletedAccount); - if (localAccounts.size() > 0) { - Account newAccount = localAccounts.get(0); - syncManager = new SyncManager(this); - adapter.setCurrentAccount(newAccount); - SingleAccountHelper.setCurrentAccount(getApplicationContext(), newAccount.getName()); - Application.saveBrandColors(this, Color.parseColor(newAccount.getColor()), Color.parseColor(newAccount.getTextColor())); - Application.saveCurrentAccountId(this, newAccount.getId()); - } else { + } else { + Log.i(TAG, "Got delete account request, but new account is null. Maybe last account has been deleted?"); + } + }); + binding.accounts.setAdapter(adapter); + + observeOnce(syncManager.readAccount(Application.readCurrentAccountId(this)), this, (account -> { + adapter.setCurrentAccount(account); + syncManager.readAccounts().observe(this, (localAccounts -> { + if (localAccounts.size() == 0) { + Log.i(TAG, "No accounts, finishing " + ManageAccountsActivity.class.getSimpleName()); setResult(AppCompatActivity.RESULT_FIRST_USER); finish(); + } else { + adapter.setAccounts(localAccounts); } - }); - adapter.setAccounts(localAccounts); - try { - SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(this); - if (ssoAccount != null) { - syncManager.readAccount(ssoAccount.name).observe(this, (account -> adapter.setCurrentAccount(account))); - } - } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) { - e.printStackTrace(); - } - binding.accounts.setAdapter(adapter); + })); })); } |