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-06-15 18:06:30 +0300
committerStefan Niedermann <info@niedermann.it>2020-06-15 18:06:30 +0300
commit48d08f7d2bfe965b473ff443baaed1fdefe7acb5 (patch)
tree2c0995225184cdde369e7260270b258b05c3db51
parent84bd51500dd7349f6c9b95bf31685784ca4079c7 (diff)
Fix account deletion
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountAdapter.java24
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountsActivity.java67
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);
+ }));
}));
}