Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2021-04-24 13:39:04 +0300
committerStefan Niedermann <info@niedermann.it>2021-04-24 13:39:04 +0300
commitd3fbb89a9e7833f7efe6bc3c2ea12a40e42b0d8d (patch)
treed50c22007da15abee489839467f5c893ddfa5c92
parent38909fde268119d22fcc7021ef733e5bd2776168 (diff)
Fix #989 -️️ Display confirm dialog when deleting an account with unsynchronized changes
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java46
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsViewModel.java6
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/NoteDao.java3
-rw-r--r--app/src/main/res/values/strings.xml8
-rw-r--r--fastlane/metadata/android/en-US/changelogs/3004001.txt1
5 files changed, 50 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);
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0bf4663e..957c00e0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -13,6 +13,7 @@
<string name="action_sorting_method">Sorting method</string>
<string name="simple_cancel">Cancel</string>
<string name="simple_edit">Edit</string>
+ <string name="simple_remove">Remove</string>
<string name="action_edit_save">Save</string>
<string name="simple_about">About</string>
<string name="simple_link">Link</string>
@@ -298,4 +299,11 @@
<string name="no_other_accounts">You don\'t have configured any other accounts yet.</string>
<string name="choose_account">Choose account</string>
<string name="context_based_formatting">Context based formatting popover</string>
+
+
+ <plurals name="remove_account_message">
+ <item quantity="one">Removing the account %1$s will also delete one unsynchronized change irrecoverable.</item>
+ <item quantity="other">Removing the account %1$s will also delete %2$d unsynchronized changes irrecoverable.</item>
+ </plurals>
+ <string name="remove_account">Remove %1$s</string>
</resources>
diff --git a/fastlane/metadata/android/en-US/changelogs/3004001.txt b/fastlane/metadata/android/en-US/changelogs/3004001.txt
new file mode 100644
index 00000000..7b083e92
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/3004001.txt
@@ -0,0 +1 @@
+- ⚠️️ Display confirm dialog when deleting an account with unsynchronized changes (#989) \ No newline at end of file