From 82e9db1a76dde4a25ebf20a68efb55fe10e1782f Mon Sep 17 00:00:00 2001 From: srv-twry Date: Wed, 16 Aug 2017 18:31:11 +0530 Subject: [PATCH 1/5] fix: Added a progress dialog while deleting the forms. FIX #1258 --- .../android/fragments/DataManagerList.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java index 1305a47a653..b8a02f656f1 100644 --- a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java +++ b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java @@ -15,6 +15,7 @@ package org.odk.collect.android.fragments; import android.app.AlertDialog; +import android.app.ProgressDialog; import android.content.DialogInterface; import android.database.Cursor; import android.os.AsyncTask; @@ -55,7 +56,7 @@ public class DataManagerList extends InstanceListFragment DeleteInstancesTask deleteInstancesTask = null; private AlertDialog alertDialog; private InstanceSyncTask instanceSyncTask; - + private ProgressDialog progressDialog; public static DataManagerList newInstance() { return new DataManagerList(); } @@ -199,6 +200,17 @@ public void onClick(DialogInterface dialog, int i) { */ private void deleteSelectedInstances() { if (deleteInstancesTask == null) { + + /* + * For solving #1258. + * Create the progress dialog before starting the background task. + * Could have been done in the DeleteInstancesTask's onPreExecute() but was unable to get the context correctly. + * */ + progressDialog = new ProgressDialog(getContext()); + progressDialog.setMessage("Deleting selected forms..."); + progressDialog.setCancelable(false); + progressDialog.show(); + deleteInstancesTask = new DeleteInstancesTask(); deleteInstancesTask.setContentResolver(getActivity().getContentResolver()); deleteInstancesTask.setDeleteListener(this); @@ -230,12 +242,16 @@ public void deleteComplete(int deletedInstances) { String.valueOf(toDeleteCount - deletedInstances), String.valueOf(toDeleteCount))); } + deleteInstancesTask = null; getListView().clearChoices(); // doesn't unset the checkboxes for (int i = 0; i < getListView().getCount(); ++i) { getListView().setItemChecked(i, false); } deleteButton.setEnabled(false); + + //Dismiss the progress dialog. + progressDialog.dismiss(); } @Override From 70133ff80f67e7b22837826c78c0daa4eda6a767 Mon Sep 17 00:00:00 2001 From: srv-twry Date: Wed, 16 Aug 2017 23:31:09 +0530 Subject: [PATCH 2/5] fix: #1258 Fixed checkstyle error --- .../java/org/odk/collect/android/fragments/DataManagerList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java index b8a02f656f1..a78b2fb07ee 100644 --- a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java +++ b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java @@ -57,11 +57,11 @@ public class DataManagerList extends InstanceListFragment private AlertDialog alertDialog; private InstanceSyncTask instanceSyncTask; private ProgressDialog progressDialog; + public static DataManagerList newInstance() { return new DataManagerList(); } - @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, From 7beb1240b6cc61af8d635ce22ecc2187641c832a Mon Sep 17 00:00:00 2001 From: srv-twry Date: Fri, 18 Aug 2017 01:18:04 +0530 Subject: [PATCH 3/5] fix: Added status to the progress dialog The Progress dialog now correctly shows the index of the form currently being deleted. Fix #1258 --- .../android/fragments/DataManagerList.java | 16 ++++++++-------- .../listeners/DeleteInstancesListener.java | 2 ++ .../android/tasks/DeleteInstancesTask.java | 15 ++++++++++++++- collect_app/src/main/res/values/strings.xml | 3 +++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java index a78b2fb07ee..f5dc5cfbb1b 100644 --- a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java +++ b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java @@ -21,6 +21,7 @@ import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -194,20 +195,20 @@ public void onClick(DialogInterface dialog, int i) { alertDialog.show(); } + @Override + public void progressUpdate(int progress, int total) { + progressDialog.setMessage(getResources().getString(R.string.deleting_form_dialog_first) + String.valueOf(progress) + getResources().getString(R.string.deleting_form_dialog_second) + String.valueOf(total)); + } + /** * Deletes the selected files. Content provider handles removing the files * from the filesystem. */ private void deleteSelectedInstances() { if (deleteInstancesTask == null) { - - /* - * For solving #1258. - * Create the progress dialog before starting the background task. - * Could have been done in the DeleteInstancesTask's onPreExecute() but was unable to get the context correctly. - * */ progressDialog = new ProgressDialog(getContext()); - progressDialog.setMessage("Deleting selected forms..."); + progressDialog.setMessage(getResources().getString(R.string.form_delete_message)); + progressDialog.setIndeterminate(true); progressDialog.setCancelable(false); progressDialog.show(); @@ -250,7 +251,6 @@ public void deleteComplete(int deletedInstances) { } deleteButton.setEnabled(false); - //Dismiss the progress dialog. progressDialog.dismiss(); } diff --git a/collect_app/src/main/java/org/odk/collect/android/listeners/DeleteInstancesListener.java b/collect_app/src/main/java/org/odk/collect/android/listeners/DeleteInstancesListener.java index b224ef0b42f..f9c5b54983e 100644 --- a/collect_app/src/main/java/org/odk/collect/android/listeners/DeleteInstancesListener.java +++ b/collect_app/src/main/java/org/odk/collect/android/listeners/DeleteInstancesListener.java @@ -22,4 +22,6 @@ */ public interface DeleteInstancesListener { void deleteComplete(int deletedInstances); + + void progressUpdate(int progress, int total); } diff --git a/collect_app/src/main/java/org/odk/collect/android/tasks/DeleteInstancesTask.java b/collect_app/src/main/java/org/odk/collect/android/tasks/DeleteInstancesTask.java index f1c08b6b3c8..3327f7ddf68 100644 --- a/collect_app/src/main/java/org/odk/collect/android/tasks/DeleteInstancesTask.java +++ b/collect_app/src/main/java/org/odk/collect/android/tasks/DeleteInstancesTask.java @@ -30,7 +30,7 @@ * @author norman86@gmail.com * @author mitchellsundt@gmail.com */ -public class DeleteInstancesTask extends AsyncTask { +public class DeleteInstancesTask extends AsyncTask { private ContentResolver contentResolver; @@ -65,6 +65,10 @@ protected Integer doInBackground(Long... params) { if (wasDeleted > 0) { Collect.getInstance().getActivityLogger().logAction(this, "delete", deleteForm.toString()); } + + successCount++; + publishProgress(successCount,toDeleteCount); + } catch (Exception ex) { Timber.e("Exception during delete of: %s exception: %s", param.toString(), ex.toString()); } @@ -73,6 +77,15 @@ protected Integer doInBackground(Long... params) { return deleted; } + @Override + protected void onProgressUpdate(Integer... values) { + synchronized (this) { + if (deleteInstancesListener != null) { + deleteInstancesListener.progressUpdate(values[0],values[1]); + } + } + } + @Override protected void onPostExecute(Integer result) { contentResolver = null; diff --git a/collect_app/src/main/res/values/strings.xml b/collect_app/src/main/res/values/strings.xml index 51f99f27156..a63a8d45f99 100644 --- a/collect_app/src/main/res/values/strings.xml +++ b/collect_app/src/main/res/values/strings.xml @@ -507,4 +507,7 @@ Selected offline layer file uses the PBF format which is not supported! Sort by Server + Deleting selected forms + Deleting form:\u0020 + \u0020out of\u0020 From cc7928919563625d50a7a565a62284edb6f050b1 Mon Sep 17 00:00:00 2001 From: srv-twry Date: Fri, 18 Aug 2017 01:37:03 +0530 Subject: [PATCH 4/5] fix: Fixed checkstyle error --- .../java/org/odk/collect/android/fragments/DataManagerList.java | 1 - 1 file changed, 1 deletion(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java index f5dc5cfbb1b..8429862bb0c 100644 --- a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java +++ b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java @@ -21,7 +21,6 @@ import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; From 72187afa3c0bbdbe5e108be20f95d4b18937352d Mon Sep 17 00:00:00 2001 From: srv-twry Date: Fri, 18 Aug 2017 12:11:01 +0530 Subject: [PATCH 5/5] fix: Using string resources with placeholders Fix #1258 --- .../org/odk/collect/android/fragments/DataManagerList.java | 3 ++- collect_app/src/main/res/values/strings.xml | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java index 8429862bb0c..4a95ecb71c9 100644 --- a/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java +++ b/collect_app/src/main/java/org/odk/collect/android/fragments/DataManagerList.java @@ -196,7 +196,8 @@ public void onClick(DialogInterface dialog, int i) { @Override public void progressUpdate(int progress, int total) { - progressDialog.setMessage(getResources().getString(R.string.deleting_form_dialog_first) + String.valueOf(progress) + getResources().getString(R.string.deleting_form_dialog_second) + String.valueOf(total)); + String message = String.format(getResources().getString(R.string.deleting_form_dialog_update_message),progress,total); + progressDialog.setMessage(message); } /** diff --git a/collect_app/src/main/res/values/strings.xml b/collect_app/src/main/res/values/strings.xml index a63a8d45f99..7bf0cf396d0 100644 --- a/collect_app/src/main/res/values/strings.xml +++ b/collect_app/src/main/res/values/strings.xml @@ -508,6 +508,5 @@ Sort by Server Deleting selected forms - Deleting form:\u0020 - \u0020out of\u0020 + Deleting form: %1$d out of %2$d