diff options
Diffstat (limited to 'app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java')
-rw-r--r-- | app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java | 67 |
1 files changed, 29 insertions, 38 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java index a8107726..5e230a74 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java @@ -2,24 +2,22 @@ package it.niedermann.owncloud.notes.manageaccounts; import android.os.Bundle; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.lifecycle.LiveData; +import androidx.lifecycle.ViewModelProvider; -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.owncloud.notes.LockedActivity; import it.niedermann.owncloud.notes.databinding.ActivityManageAccountsBinding; import it.niedermann.owncloud.notes.persistence.NotesDatabase; import it.niedermann.owncloud.notes.persistence.entity.Account; - -import static androidx.lifecycle.Transformations.distinctUntilChanged; +import it.niedermann.owncloud.notes.shared.model.IResponseCallback; public class ManageAccountsActivity extends LockedActivity { private ActivityManageAccountsBinding binding; + private ManageAccountsViewModel viewModel; private ManageAccountAdapter adapter; private NotesDatabase db = null; @@ -28,45 +26,38 @@ public class ManageAccountsActivity extends LockedActivity { super.onCreate(savedInstanceState); binding = ActivityManageAccountsBinding.inflate(getLayoutInflater()); + viewModel = new ViewModelProvider(this).get(ManageAccountsViewModel.class); setContentView(binding.getRoot()); setSupportActionBar(binding.toolbar); db = NotesDatabase.getInstance(this); - distinctUntilChanged(db.getAccountDao().getAccounts$()).observe(this, (localAccounts) -> { - adapter = new ManageAccountAdapter((localAccount) -> SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccount.getAccountName()), (localAccount) -> { - LiveData<Void> deleteLiveData = db.deleteAccount(localAccount); - deleteLiveData.observe(this, (v) -> { - for (Account temp : localAccounts) { - if (temp.getId() == localAccount.getId()) { - localAccounts.remove(temp); - break; - } - } - if (localAccounts.size() > 0) { - SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccounts.get(0).getAccountName()); - adapter.setCurrentLocalAccount(localAccounts.get(0)); - } else { - SingleAccountHelper.setCurrentAccount(getApplicationContext(), null); - finish(); - } - deleteLiveData.removeObservers(this); - }); - }); - adapter.setLocalAccounts(localAccounts); - try { - final SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(this); - if (ssoAccount != null) { - new Thread(() -> { - final Account account = db.getAccountDao().getAccountByName(ssoAccount.name); - runOnUiThread(() -> adapter.setCurrentLocalAccount(account)); - }).start(); - } - } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) { - e.printStackTrace(); + adapter = new ManageAccountAdapter( + (accountToSelect) -> viewModel.selectAccount(accountToSelect, this), + (accountToDelete) -> viewModel.deleteAccount(accountToDelete, this) + ); + + binding.accounts.setAdapter(adapter); + + viewModel.getAccounts$().observe(this, (accounts) -> { + if (accounts == null || accounts.size() < 1) { + finish(); + return; } - binding.accounts.setAdapter(adapter); + this.adapter.setLocalAccounts(accounts); + viewModel.getCurrentAccount(this, new IResponseCallback<Account>() { + @Override + public void onSuccess(Account result) { + runOnUiThread(() -> adapter.setCurrentLocalAccount(result)); + } + + @Override + public void onError(@NonNull Throwable t) { + runOnUiThread(() -> adapter.setCurrentLocalAccount(null)); + t.printStackTrace(); + } + }); }); } |