diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-04-24 13:39:04 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-04-24 13:39:04 +0300 |
commit | d3fbb89a9e7833f7efe6bc3c2ea12a40e42b0d8d (patch) | |
tree | d50c22007da15abee489839467f5c893ddfa5c92 /app/src/main/java | |
parent | 38909fde268119d22fcc7021ef733e5bd2776168 (diff) |
Fix #989 -️️ Display confirm dialog when deleting an account with unsynchronized changes
Diffstat (limited to 'app/src/main/java')
3 files changed, 41 insertions, 14 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 5e230a74..4c307b07 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 @@ -6,11 +6,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.ViewModelProvider; -import com.nextcloud.android.sso.helper.SingleAccountHelper; - import it.niedermann.owncloud.notes.LockedActivity; +import it.niedermann.owncloud.notes.R; +import it.niedermann.owncloud.notes.branding.BrandedDeleteAlertDialogBuilder; import it.niedermann.owncloud.notes.databinding.ActivityManageAccountsBinding; -import it.niedermann.owncloud.notes.persistence.NotesDatabase; +import it.niedermann.owncloud.notes.exception.ExceptionDialogFragment; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.shared.model.IResponseCallback; @@ -19,7 +19,6 @@ public class ManageAccountsActivity extends LockedActivity { private ActivityManageAccountsBinding binding; private ManageAccountsViewModel viewModel; private ManageAccountAdapter adapter; - private NotesDatabase db = null; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -27,17 +26,11 @@ public class ManageAccountsActivity extends LockedActivity { binding = ActivityManageAccountsBinding.inflate(getLayoutInflater()); viewModel = new ViewModelProvider(this).get(ManageAccountsViewModel.class); - setContentView(binding.getRoot()); + setContentView(binding.getRoot()); setSupportActionBar(binding.toolbar); - db = NotesDatabase.getInstance(this); - - adapter = new ManageAccountAdapter( - (accountToSelect) -> viewModel.selectAccount(accountToSelect, this), - (accountToDelete) -> viewModel.deleteAccount(accountToDelete, this) - ); - + adapter = new ManageAccountAdapter(this::selectAccount, this::deleteAccount); binding.accounts.setAdapter(adapter); viewModel.getAccounts$().observe(this, (accounts) -> { @@ -61,6 +54,35 @@ public class ManageAccountsActivity extends LockedActivity { }); } + private void selectAccount(@NonNull Account accountToSelect) { + viewModel.selectAccount(accountToSelect, this); + } + + private void deleteAccount(@NonNull Account accountToDelete) { + viewModel.countUnsynchronizedNotes(accountToDelete.getId(), new IResponseCallback<Long>() { + @Override + public void onSuccess(Long unsynchronizedChangesCount) { + runOnUiThread(() -> { + if (unsynchronizedChangesCount != null && unsynchronizedChangesCount > 0) { + new BrandedDeleteAlertDialogBuilder(ManageAccountsActivity.this) + .setTitle(getString(R.string.remove_account, accountToDelete.getUserName())) + .setMessage(getResources().getQuantityString(R.plurals.remove_account_message, (int) unsynchronizedChangesCount.longValue(), accountToDelete.getAccountName(), unsynchronizedChangesCount)) + .setNeutralButton(android.R.string.cancel, null) + .setPositiveButton(R.string.simple_remove, (d, l) -> viewModel.deleteAccount(accountToDelete, ManageAccountsActivity.this)) + .show(); + } else { + viewModel.deleteAccount(accountToDelete, ManageAccountsActivity.this); + } + }); + } + + @Override + public void onError(@NonNull Throwable t) { + ExceptionDialogFragment.newInstance(t).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()); + } + }); + } + @Override public void applyBrand(int mainColor, int textColor) { applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsViewModel.java b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsViewModel.java index b86b6fac..3e7e430a 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsViewModel.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsViewModel.java @@ -8,7 +8,6 @@ import androidx.annotation.Nullable; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; -import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException; import com.nextcloud.android.sso.helper.SingleAccountHelper; @@ -16,7 +15,6 @@ import com.nextcloud.android.sso.helper.SingleAccountHelper; import java.util.List; import it.niedermann.owncloud.notes.persistence.NotesDatabase; -import it.niedermann.owncloud.notes.persistence.SSOClient; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.shared.model.IResponseCallback; @@ -68,4 +66,8 @@ public class ManageAccountsViewModel extends AndroidViewModel { public void selectAccount(@Nullable Account account, @NonNull Context context) { SingleAccountHelper.setCurrentAccount(context, (account == null) ? null : account.getAccountName()); } + + public void countUnsynchronizedNotes(long accountId, @NonNull IResponseCallback<Long> callback) { + new Thread(() -> callback.onSuccess(db.getNoteDao().countUnsynchronizedNotes(accountId))).start(); + } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/NoteDao.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/NoteDao.java index b0e93d2c..8cc73bf8 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/NoteDao.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/NoteDao.java @@ -194,4 +194,7 @@ public interface NoteDao { @Query("SELECT accountId, category, COUNT(*) as 'totalNotes' FROM NOTE WHERE STATUS != 'LOCAL_DELETED' AND accountId = :accountId AND category != '' AND category LIKE :searchTerm GROUP BY category") LiveData<List<CategoryWithNotesCount>> searchCategories$(Long accountId, String searchTerm); + + @Query("SELECT COUNT(*) FROM NOTE WHERE STATUS != '' AND accountId = :accountId") + Long countUnsynchronizedNotes(long accountId); } |