From 30df9890ba57409b41d6a26c3a55172792099dc9 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Mon, 6 Apr 2020 11:31:17 +0300 Subject: [PATCH 01/33] make number of contacts schedule displayed on summary configurable add contact no to globals when quick check is opened from register --- gradle.properties | 2 +- .../activity/ContactSummarySendActivity.java | 18 ++++++++++++++++-- .../anc/library/util/ConstantsUtils.java | 1 + .../smartregister/anc/library/util/Utils.java | 6 +++++- reference-app/src/main/assets/app.properties | 3 ++- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9facc607a..c7ad97f6c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.1.9999-SNAPSHOT +VERSION_NAME=2.0.2-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactSummarySendActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactSummarySendActivity.java index b61a22685..f40c95fe6 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactSummarySendActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactSummarySendActivity.java @@ -11,6 +11,7 @@ import android.widget.TextView; import android.widget.Toast; +import org.apache.commons.lang3.StringUtils; import org.smartregister.anc.library.AncLibrary; import org.smartregister.anc.library.R; import org.smartregister.anc.library.adapter.ContactSummaryAdapter; @@ -106,11 +107,24 @@ public void displayPatientName(String fullName) { @Override public void displayUpcomingContactDates(List models) { - if (models.size() <= 0) { + if (models == null || models.isEmpty()) { contactDatesRecyclerView.setVisibility(View.GONE); contactScheduleHeadingTextView.setVisibility(View.GONE); + return; } - contactSummaryAdapter.setContactDates(models.size() > 5 ? models.subList(0, 4) : models); + String maxContactToDisplay = Utils.getProperties(getApplicationContext()).getProperty(ConstantsUtils.Properties.MAX_CONTACT_SCHEDULE_DISPLAYED, ""); + if (StringUtils.isNotBlank(maxContactToDisplay)) { + try { + int count = Integer.parseInt(maxContactToDisplay); + contactSummaryAdapter.setContactDates(models.size() > count ? models.subList(0, (count - 1)) : models); + } catch (NumberFormatException e) { + contactSummaryAdapter.setContactDates(models); + Timber.e(e); + } + } else { + contactSummaryAdapter.setContactDates(models); + } + } @Override diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java index c7b00b4c7..26e2286af 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java @@ -70,6 +70,7 @@ public abstract class ConstantsUtils { public interface Properties { String CAN_SAVE_SITE_INITIAL_SETTING = "CAN_SAVE_INITIAL_SITE_SETTING"; + String MAX_CONTACT_SCHEDULE_DISPLAYED = "MAX_CONTACT_SCHEDULE_DISPLAYED"; } public interface TemplateUtils { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index 7e98bf8d5..bd91eb018 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -201,7 +201,6 @@ public static void proceedToContact(String baseEntityId, HashMap try { Intent intent = new Intent(context.getApplicationContext(), ContactJsonFormActivity.class); - Contact quickCheck = new Contact(); quickCheck.setName(context.getResources().getString(R.string.quick_check)); quickCheck.setFormName(ConstantsUtils.JsonFormUtils.ANC_QUICK_CHECK); @@ -212,6 +211,7 @@ public static void proceedToContact(String baseEntityId, HashMap quickCheck.setWizard(false); quickCheck.setHideSaveLabel(true); + //partial contact exists? PartialContact partialContactRequest = new PartialContact(); partialContactRequest.setBaseEntityId(baseEntityId); @@ -224,6 +224,10 @@ public static void proceedToContact(String baseEntityId, HashMap ContactModel baseContactModel = new ContactModel(); JSONObject form = baseContactModel.getFormAsJson(quickCheck.getFormName(), baseEntityId, locationId); + JSONObject globals = new JSONObject(); + globals.put(ConstantsUtils.CONTACT_NO, personObjectClient.get(DBConstantsUtils.KeyUtils.NEXT_CONTACT)); + form.put(ConstantsUtils.GLOBAL, globals); + String processedForm = ANCFormUtils.getFormJsonCore(partialContactRequest, form).toString(); if (hasPendingRequiredFields(new JSONObject(processedForm))) { diff --git a/reference-app/src/main/assets/app.properties b/reference-app/src/main/assets/app.properties index 90b69b65a..906e7afbc 100644 --- a/reference-app/src/main/assets/app.properties +++ b/reference-app/src/main/assets/app.properties @@ -2,4 +2,5 @@ DRISHTI_BASE_URL= PORT=-1 SHOULD_VERIFY_CERTIFICATE=false SYNC_DOWNLOAD_BATCH_SIZE=100 -CAN_SAVE_INITIAL_SITE_SETTING=false \ No newline at end of file +CAN_SAVE_INITIAL_SITE_SETTING=false +MAX_CONTACT_SCHEDULE_DISPLAYED=5 \ No newline at end of file From a500ed12a099c9256b53c2d62a433d50c4399d87 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Wed, 8 Apr 2020 14:18:43 +0300 Subject: [PATCH 02/33] fix null GA fix required field counts --- gradle.properties | 2 +- .../activity/ContactJsonFormActivity.java | 10 +++++++++- .../library/activity/MainContactActivity.java | 17 ++++++++++++++++- .../task/LoadContactSummaryDataTask.java | 11 ++++++++++- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index c7ad97f6c..9039da1b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.2-SNAPSHOT +VERSION_NAME=2.0.2.5-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java index 0a779f74f..772bf3b7b 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java @@ -23,8 +23,8 @@ import org.smartregister.anc.library.fragment.ContactWizardJsonFormFragment; import org.smartregister.anc.library.helper.AncRulesEngineFactory; import org.smartregister.anc.library.task.BackPressedPersistPartialTask; -import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.ANCFormUtils; +import org.smartregister.anc.library.util.ConstantsUtils; import java.util.HashMap; import java.util.List; @@ -142,6 +142,14 @@ protected void checkBoxWriteValue(String stepName, String parentKey, String chil @Override public void onBackPressed() { + if (getmJSONObject().optString(JsonFormConstants.ENCOUNTER_TYPE).equals(ConstantsUtils.JsonFormUtils.ANC_PROFILE_ENCOUNTER_TYPE)) { + ContactWizardJsonFormFragment contactWizardJsonFormFragment = (ContactWizardJsonFormFragment) getVisibleFragment(); + contactWizardJsonFormFragment.getPresenter().validateAndWriteValues(); + Intent intent = new Intent(); + intent.putExtra("formInvalidFields", + getmJSONObject().optString(JsonFormConstants.ENCOUNTER_TYPE) + ":" + contactWizardJsonFormFragment.getPresenter().getInvalidFields().size()); + setResult(RESULT_OK, intent); + } new BackPressedPersistPartialTask(getContact(), this, getIntent(), currentJsonState()).execute(); } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java index 8ee32872e..5fd46a950 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java @@ -1,6 +1,7 @@ package org.smartregister.anc.library.activity; import android.annotation.SuppressLint; +import android.content.Intent; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -20,9 +21,9 @@ import org.smartregister.anc.library.model.PartialContact; import org.smartregister.anc.library.model.PreviousContact; import org.smartregister.anc.library.presenter.ContactPresenter; +import org.smartregister.anc.library.util.ANCFormUtils; import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; -import org.smartregister.anc.library.util.ANCFormUtils; import org.smartregister.anc.library.util.DBConstantsUtils; import org.smartregister.anc.library.util.FilePathUtils; import org.smartregister.anc.library.util.Utils; @@ -58,6 +59,7 @@ public class MainContactActivity extends BaseContactActivity implements ContactC private String[] contactForms = new String[]{ConstantsUtils.JsonFormUtils.ANC_QUICK_CHECK, ConstantsUtils.JsonFormUtils.ANC_PROFILE, ConstantsUtils.JsonFormUtils.ANC_SYMPTOMS_FOLLOW_UP, ConstantsUtils.JsonFormUtils.ANC_PHYSICAL_EXAM, ConstantsUtils.JsonFormUtils.ANC_TEST, ConstantsUtils.JsonFormUtils.ANC_COUNSELLING_TREATMENT, ConstantsUtils.JsonFormUtils.ANC_TEST_TASKS}; + private String formInvalidFields = null; @Override protected void onResume() { @@ -90,6 +92,12 @@ private void initializeMainContactContainers() { process(contactForms); requiredFieldsMap.put(ConstantsUtils.JsonFormUtils.ANC_TEST_TASKS_ENCOUNTER_TYPE, 0); + if (StringUtils.isNotBlank(formInvalidFields) && contactNo > 1) { + String[] pair = formInvalidFields.split(":"); + if (ConstantsUtils.JsonFormUtils.ANC_PROFILE_ENCOUNTER_TYPE.equals(pair[0])) + requiredFieldsMap.put(pair[0], Integer.parseInt(pair[1])); + } + List contacts = new ArrayList<>(); Contact quickCheck = new Contact(); @@ -761,4 +769,11 @@ protected void onPause() { formGlobalValues.clear(); invisibleRequiredFields.clear(); } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == RESULT_OK && data != null) { + formInvalidFields = data.getStringExtra("formInvalidFields"); + } + } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java index 11c6e5ac1..bdb7e3191 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java @@ -6,6 +6,7 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import org.apache.commons.lang3.StringUtils; import org.jeasy.rules.api.Facts; import org.smartregister.anc.library.R; import org.smartregister.anc.library.activity.ContactSummaryFinishActivity; @@ -16,6 +17,8 @@ import org.smartregister.anc.library.util.DBConstantsUtils; import org.smartregister.anc.library.util.Utils; +import java.util.HashMap; + import timber.log.Timber; public class LoadContactSummaryDataTask extends AsyncTask { @@ -55,7 +58,13 @@ protected void onPreExecute() { @Override protected void onPostExecute(Void result) { - String edd = facts.get(DBConstantsUtils.KeyUtils.EDD); + HashMap clientDetails; + try { + clientDetails = (HashMap) intent.getSerializableExtra(ConstantsUtils.IntentKeyUtils.CLIENT_MAP); + } catch (NullPointerException e) { + clientDetails = new HashMap<>(); + } + String edd = StringUtils.isNotBlank(facts.get(DBConstantsUtils.KeyUtils.EDD)) ? facts.get(DBConstantsUtils.KeyUtils.EDD) : Utils.reverseHyphenSeperatedValues(clientDetails.get(ConstantsUtils.EDD), "-"); String contactNo = String.valueOf(intent.getExtras().getInt(ConstantsUtils.IntentKeyUtils.CONTACT_NO)); if (edd != null && ((ContactSummaryFinishActivity) context).saveFinishMenuItem != null) { From 45d63343b60d1ce1d08007775bfbe045c4ce42f8 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 9 Apr 2020 16:32:11 +0300 Subject: [PATCH 03/33] updated code to tests native forms performance improvement --- gradle.properties | 2 +- opensrp-anc/build.gradle | 2 +- .../anc/library/activity/ContactJsonFormActivity.java | 2 +- reference-app/build.gradle | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9039da1b4..7dccf8295 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.2.5-LOCAL-SNAPSHOT +VERSION_NAME=2.0.2.6-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index aa3d3825e..77a97c59b 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -145,7 +145,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.7.28-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.7.30-OPTIMIZE_FORMS-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java index 772bf3b7b..4d4be62df 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java @@ -130,7 +130,7 @@ protected void checkBoxWriteValue(String stepName, String parentKey, String chil quickCheckDangerSignsSelectionHandler(fields); } - invokeRefreshLogic(value, popup, parentKey, childKey); + invokeRefreshLogic(value, popup, parentKey, childKey, stepName); return; } } diff --git a/reference-app/build.gradle b/reference-app/build.gradle index cadd0a7aa..2cf16ecc4 100644 --- a/reference-app/build.gradle +++ b/reference-app/build.gradle @@ -130,7 +130,7 @@ android { } debug { - resValue "string", 'opensrp_url', '"https://anc-stage.smartregister.org/opensrp/"' + resValue "string", 'opensrp_url', '"https://opensrp-jembi-eregister.smartregister.org/opensrp/"' //TODO should be changed to anc staging url buildConfigField "int", "OPENMRS_UNIQUE_ID_INITIAL_BATCH_SIZE", '250' buildConfigField "int", "OPENMRS_UNIQUE_ID_BATCH_SIZE", '100' buildConfigField "int", "OPENMRS_UNIQUE_ID_SOURCE", '2' @@ -221,7 +221,7 @@ tasks.withType(Test) { dependencies { def powerMockVersion = '2.0.4' implementation project(":opensrp-anc") - implementation('org.smartregister:opensrp-client-native-form:1.7.28-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.7.30-OPTIMIZE_FORMS-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' From 3063c0ef8465eb5a4ef21ae17d1fee46f4b98b1c Mon Sep 17 00:00:00 2001 From: bennsimon Date: Sun, 12 Apr 2020 08:55:18 +0300 Subject: [PATCH 04/33] code cleanup --- gradle.properties | 2 +- opensrp-anc/build.gradle | 2 +- .../activity/ContactJsonFormActivity.java | 10 +++++++++ .../ContactWizardJsonFormFragment.java | 11 +++++----- reference-app/build.gradle | 22 +++++++++---------- 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7dccf8295..8796c64ba 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.2.6-LOCAL-SNAPSHOT +VERSION_NAME=2.0.2.7-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index 77a97c59b..ae706d50a 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -145,7 +145,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.7.30-OPTIMIZE_FORMS-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.7.31.0.5-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java index 4d4be62df..f7f92fe77 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java @@ -240,6 +240,16 @@ protected void callSuperWriteValue(String stepName, String key, String value, St } + + @Override + public void performActionOnReceived(String essentials) { + try { + invokeRefreshLogic(null, false, null, null, essentials.split(":")[0]); + } catch (Exception e) { + Timber.e(e); + } + } + public void showProgressDialog(String titleIdentifier) { if (progressDialog == null) { progressDialog = new ProgressDialog(this); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java index a09aa48f3..a7e39e154 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java @@ -144,11 +144,12 @@ protected void setupCustomUI() { @Override public void onResume() { super.onResume(); - if (!getJsonApi().isPreviousPressed()) { - skipStepsOnNextPressed(); - } else { - skipStepOnPreviousPressed(); - } +// no need repetition +// if (!getJsonApi().isPreviousPressed()) { +// skipStepsOnNextPressed(); +// } else { +// skipStepOnPreviousPressed(); +// } setJsonFormFragment(this); } diff --git a/reference-app/build.gradle b/reference-app/build.gradle index 2cf16ecc4..83a7e5ef3 100644 --- a/reference-app/build.gradle +++ b/reference-app/build.gradle @@ -221,17 +221,17 @@ tasks.withType(Test) { dependencies { def powerMockVersion = '2.0.4' implementation project(":opensrp-anc") - implementation('org.smartregister:opensrp-client-native-form:1.7.30-OPTIMIZE_FORMS-SNAPSHOT@aar') { - transitive = true - exclude group: 'com.android.support', module: 'recyclerview-v7' - exclude group: 'com.android.support', module: 'appcompat-v7' - exclude group: 'com.android.support', module: 'cardview-v7' - exclude group: 'com.android.support', module: 'support-media-compat' - exclude group: 'com.android.support', module: 'support-v4' - exclude group: 'com.android.support', module: 'design' - exclude group: 'org.yaml', module: 'snakeyaml' - exclude group: 'io.ona.rdt-capture', module: 'lib' - } +// implementation('org.smartregister:opensrp-client-native-form:1.7.30-OPTIMIZE_FORMS-SNAPSHOT@aar') { +// transitive = true +// exclude group: 'com.android.support', module: 'recyclerview-v7' +// exclude group: 'com.android.support', module: 'appcompat-v7' +// exclude group: 'com.android.support', module: 'cardview-v7' +// exclude group: 'com.android.support', module: 'support-media-compat' +// exclude group: 'com.android.support', module: 'support-v4' +// exclude group: 'com.android.support', module: 'design' +// exclude group: 'org.yaml', module: 'snakeyaml' +// exclude group: 'io.ona.rdt-capture', module: 'lib' +// } implementation('org.smartregister:opensrp-client-core:1.9.4-SNAPSHOT@aar') { transitive = true exclude group: 'com.github.bmelnychuk', module: 'atv' From 2537fe1649e2d649cdb63c0f614f42b557798f5a Mon Sep 17 00:00:00 2001 From: bennsimon Date: Sun, 12 Apr 2020 15:20:26 +0300 Subject: [PATCH 05/33] fix gibberish text and crash in ct --- gradle.properties | 2 +- opensrp-anc/build.gradle | 2 +- .../fragment/ProfileContactsFragment.java | 24 ++++++++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 8796c64ba..788931ce5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.2.7-LOCAL-SNAPSHOT +VERSION_NAME=2.0.2.9-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index ae706d50a..5480bcf6c 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -145,7 +145,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.7.31.0.5-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.7.31.0.8-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileContactsFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileContactsFragment.java index 17c4308d3..a6b44b4dc 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileContactsFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileContactsFragment.java @@ -14,6 +14,7 @@ import android.widget.ScrollView; import android.widget.TextView; +import org.apache.commons.lang3.StringUtils; import org.jeasy.rules.api.Facts; import org.smartregister.anc.library.AncLibrary; import org.smartregister.anc.library.R; @@ -27,12 +28,13 @@ import org.smartregister.anc.library.domain.YamlConfig; import org.smartregister.anc.library.domain.YamlConfigItem; import org.smartregister.anc.library.domain.YamlConfigWrapper; +import org.smartregister.anc.library.model.PreviousContact; import org.smartregister.anc.library.model.Task; import org.smartregister.anc.library.presenter.ProfileFragmentPresenter; +import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; import org.smartregister.anc.library.util.FilePathUtils; -import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.view.fragment.BaseProfileFragment; @@ -119,6 +121,7 @@ protected void onResumption() { } setUpAlertStatusButton(); contactNo = String.valueOf(Utils.getTodayContact(clientDetails.get(DBConstantsUtils.KeyUtils.NEXT_CONTACT))); + populatePreviousContactMissingEssentials(clientDetails); initializeLastContactDetails(clientDetails); if (lastContactDetails.isEmpty() && lastContactTests.isEmpty()) { @@ -130,6 +133,25 @@ protected void onResumption() { } } + private void populatePreviousContactMissingEssentials(HashMap clientDetails) { + try { + if (clientDetails != null && clientDetails.containsKey("edd") && StringUtils.isNotBlank(clientDetails.get("edd"))) { + Facts entries = AncLibrary.getInstance().getPreviousContactRepository().getPreviousContactFacts(baseEntityId, contactNo, false); + if (entries != null && entries.get(ConstantsUtils.GEST_AGE_OPENMRS) != null) + return; + int gestAgeOpenmrs = Utils.getGestationAgeFromEDDate(clientDetails.get("edd")); + PreviousContact previousContact = new PreviousContact(); + previousContact.setBaseEntityId(baseEntityId); + previousContact.setContactNo(contactNo); + previousContact.setKey(ConstantsUtils.GEST_AGE_OPENMRS); + previousContact.setValue(String.valueOf(gestAgeOpenmrs)); + AncLibrary.getInstance().getPreviousContactRepository().savePreviousContact(previousContact); + } + } catch (Exception e) { + Timber.e(e); + } + } + private void setUpAlertStatusButton() { Utils.processButtonAlertStatus(getActivity(), dueButton, buttonAlertStatus); } From 7deff81d1f334e20a0126c8aafe733539031b109 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 14 May 2020 10:17:10 +0300 Subject: [PATCH 06/33] update to local snapshot --- gradle.properties | 2 ++ opensrp-anc/build.gradle | 2 +- .../anc/library/activity/ContactJsonFormActivity.java | 10 ---------- .../ContactWizardJsonFormFragmentPresenter.java | 2 +- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/gradle.properties b/gradle.properties index 788931ce5..62983d75b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,6 +8,8 @@ # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true +org.gradle.jvmargs=-Xmx1536m + android.debug.obsoleteApi=true ## PUBLISHING VARS diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index 5480bcf6c..d66c3c5cc 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -145,7 +145,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.7.31.0.8-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.7.32-1046.5-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java index f7f92fe77..4d4be62df 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java @@ -240,16 +240,6 @@ protected void callSuperWriteValue(String stepName, String key, String value, St } - - @Override - public void performActionOnReceived(String essentials) { - try { - invokeRefreshLogic(null, false, null, null, essentials.split(":")[0]); - } catch (Exception e) { - Timber.e(e); - } - } - public void showProgressDialog(String titleIdentifier) { if (progressDialog == null) { progressDialog = new ProgressDialog(this); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java index c52e68066..15a6f663e 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java @@ -11,8 +11,8 @@ import com.vijay.jsonwizard.widgets.NativeRadioButtonFactory; import org.smartregister.anc.library.fragment.ContactWizardJsonFormFragment; -import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.ANCFormUtils; +import org.smartregister.anc.library.util.ConstantsUtils; /** * Created by keyman on 04/08/18. From f430666b9bb8d60bf2570889463bc226ff286de8 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 21 May 2020 12:55:28 +0300 Subject: [PATCH 07/33] update code with latest optimization code --- gradle.properties | 2 +- opensrp-anc/build.gradle | 2 +- .../anc/library/activity/ContactJsonFormActivity.java | 2 +- .../anc/library/activity/MainContactActivity.java | 2 +- .../anc/library/fragment/ContactWizardJsonFormFragment.java | 5 ++++- .../presenter/ContactWizardJsonFormFragmentPresenter.java | 6 ++++-- 6 files changed, 12 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index 62983d75b..ce4b73b6c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.2.9-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.1-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index d66c3c5cc..5dc5da57a 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -145,7 +145,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.7.32-1046.5-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.7.32-1050.2-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java index 4d4be62df..662e4d44e 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java @@ -130,7 +130,7 @@ protected void checkBoxWriteValue(String stepName, String parentKey, String chil quickCheckDangerSignsSelectionHandler(fields); } - invokeRefreshLogic(value, popup, parentKey, childKey, stepName); + invokeRefreshLogic(value, popup, parentKey, childKey, stepName, false); return; } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java index 5fd46a950..17bd83f7e 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java @@ -326,7 +326,7 @@ private void processRequiredStepsField(JSONObject object) throws Exception { Iterator keys = object.keys(); while (keys.hasNext()) { String key = keys.next(); - if (key.startsWith(RuleConstant.STEP)) { + if (key.startsWith(RuleConstant.STEP) && !object.getJSONObject(key).has("skipped")) { JSONArray stepArray = object.getJSONObject(key).getJSONArray(JsonFormConstants.FIELDS); for (int i = 0; i < stepArray.length(); i++) { JSONObject fieldObject = stepArray.getJSONObject(i); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java index a7e39e154..43fdad1de 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java @@ -22,16 +22,19 @@ import android.widget.Toast; import com.vijay.jsonwizard.activities.JsonFormActivity; +import com.vijay.jsonwizard.constants.JsonFormConstants; import com.vijay.jsonwizard.fragments.JsonWizardFormFragment; import com.vijay.jsonwizard.interactors.JsonFormInteractor; +import org.apache.commons.lang3.StringUtils; +import org.json.JSONObject; import org.smartregister.anc.library.R; import org.smartregister.anc.library.activity.ContactJsonFormActivity; import org.smartregister.anc.library.domain.Contact; import org.smartregister.anc.library.presenter.ContactWizardJsonFormFragmentPresenter; import org.smartregister.anc.library.task.ANCNextProgressDialogTask; -import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.ANCFormUtils; +import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.anc.library.viewstate.ContactJsonFormFragmentViewState; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java index 15a6f663e..9357b164e 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java @@ -10,6 +10,7 @@ import com.vijay.jsonwizard.presenters.JsonWizardFormFragmentPresenter; import com.vijay.jsonwizard.widgets.NativeRadioButtonFactory; +import org.apache.commons.lang3.StringUtils; import org.smartregister.anc.library.fragment.ContactWizardJsonFormFragment; import org.smartregister.anc.library.util.ANCFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; @@ -33,8 +34,9 @@ public void setUpToolBar() { @Override protected boolean moveToNextWizardStep() { - if (!"".equals(mStepDetails.optString(JsonFormConstants.NEXT))) { - JsonFormFragment next = ContactWizardJsonFormFragment.getFormFragment(mStepDetails.optString(ConstantsUtils.NEXT)); + String nextStep = getFormFragment().getJsonApi().nextStep(); + if (StringUtils.isNotBlank(nextStep)) { + JsonFormFragment next = ContactWizardJsonFormFragment.getFormFragment(nextStep); getView().hideKeyBoard(); getView().transactThis(next); return true; From 0c8f1b63cad5f39ee1cc8e7b697e248c2a5d1443 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Fri, 29 May 2020 17:46:58 +0300 Subject: [PATCH 08/33] update popStack --- gradle.properties | 2 +- opensrp-anc/build.gradle | 2 +- .../library/activity/ContactJsonFormActivity.java | 2 +- .../fragment/ContactWizardJsonFormFragment.java | 13 +++---------- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/gradle.properties b/gradle.properties index ce4b73b6c..9df418453 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.3.1-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.4-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index 5dc5da57a..7520472b0 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -145,7 +145,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.7.32-1050.2-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.7.32-1137.1-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java index 662e4d44e..50c257d0b 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java @@ -88,7 +88,7 @@ protected void initializeFormFragmentCore() { JsonWizardFormFragment contactJsonFormFragment = ContactWizardJsonFormFragment.getFormFragment(JsonFormConstants.FIRST_STEP_NAME); - getSupportFragmentManager().beginTransaction().add(com.vijay.jsonwizard.R.id.container, contactJsonFormFragment) + getSupportFragmentManager().beginTransaction().add(com.vijay.jsonwizard.R.id.container, contactJsonFormFragment).addToBackStack(contactJsonFormFragment.getArguments().getString(JsonFormConstants.STEPNAME)) .commit(); } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java index 43fdad1de..3ebce96ab 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java @@ -22,12 +22,9 @@ import android.widget.Toast; import com.vijay.jsonwizard.activities.JsonFormActivity; -import com.vijay.jsonwizard.constants.JsonFormConstants; import com.vijay.jsonwizard.fragments.JsonWizardFormFragment; import com.vijay.jsonwizard.interactors.JsonFormInteractor; -import org.apache.commons.lang3.StringUtils; -import org.json.JSONObject; import org.smartregister.anc.library.R; import org.smartregister.anc.library.activity.ContactJsonFormActivity; import org.smartregister.anc.library.domain.Contact; @@ -144,15 +141,10 @@ protected void setupCustomUI() { } } + // @Override public void onResume() { super.onResume(); -// no need repetition -// if (!getJsonApi().isPreviousPressed()) { -// skipStepsOnNextPressed(); -// } else { -// skipStepOnPreviousPressed(); -// } setJsonFormFragment(this); } @@ -361,7 +353,8 @@ public void onClick(View view) { view.getId() == com.vijay.jsonwizard.R.id.previous_icon) { assert getFragmentManager() != null; getJsonApi().setPreviousPressed(true); - getFragmentManager().popBackStack(); + getJsonApi().getStack().pop(); + getFragmentManager().popBackStack(getJsonApi().getStack().pop(), 0); } else if (view.getId() == R.id.refer) { displayReferralDialog(); } else if (view.getId() == R.id.proceed && getActivity() != null) { From dd5c4c347fc604c2aab7e38ab16a3cc9bae3dc02 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Wed, 24 Jun 2020 12:17:08 +0300 Subject: [PATCH 09/33] add contact sequencing logic --- gradle.properties | 2 +- opensrp-anc/build.gradle | 2 +- .../main/assets/json.form/anc_register.json | 19 +++ .../smartregister/anc/library/AncLibrary.java | 9 ++ .../activity/ContactJsonFormActivity.java | 3 +- .../library/activity/MainContactActivity.java | 12 +- .../ContactWizardJsonFormFragment.java | 40 ++++-- .../library/interactor/ContactInteractor.java | 15 +- .../interactor/RegisterInteractor.java | 31 +++- .../library/presenter/ContactPresenter.java | 7 +- ...ontactWizardJsonFormFragmentPresenter.java | 9 +- .../library/repository/PatientRepository.java | 14 ++ .../anc/library/util/ANCJsonFormUtils.java | 87 ++++++----- .../anc/library/util/ConstantsUtils.java | 9 ++ .../anc/library/util/DBConstantsUtils.java | 1 + .../smartregister/anc/library/util/Utils.java | 136 ++++++++++++++++++ reference-app/src/main/assets/app.properties | 3 +- 17 files changed, 319 insertions(+), 80 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9df418453..cfc79dc2a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.3.4-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.7-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index 7520472b0..4f60e9556 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -145,7 +145,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.7.32-1137.1-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.9.2-r116-OPTIMIZED-LOCAL-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/main/assets/json.form/anc_register.json b/opensrp-anc/src/main/assets/json.form/anc_register.json index 5b49920f0..3e614184d 100644 --- a/opensrp-anc/src/main/assets/json.form/anc_register.json +++ b/opensrp-anc/src/main/assets/json.form/anc_register.json @@ -413,6 +413,25 @@ "openmrs_entity_id": "last_contact_record_date", "type": "hidden", "value": "" + }, + { + "key": "previous_visits", + "type": "repeating_group", + "reference_edit_text_hint": "# of visits", + "repeating_group_label": "", + "openmrs_entity_parent": "", + "openmrs_entity": "", + "openmrs_entity_id": "", + "value": [ + { + "key": "visit_date", + "openmrs_entity_parent": "", + "openmrs_entity": "", + "openmrs_entity_id": "", + "type": "date_picker", + "hint": "Visit date" + } + ] } ] } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/AncLibrary.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/AncLibrary.java index 6647905b1..4a5581706 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/AncLibrary.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/AncLibrary.java @@ -25,6 +25,7 @@ import org.smartregister.anc.library.repository.PreviousContactRepository; import org.smartregister.anc.library.repository.RegisterQueryProvider; import org.smartregister.anc.library.util.AncMetadata; +import org.smartregister.anc.library.util.AppExecutors; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.FilePathUtils; import org.smartregister.configurableviews.helper.JsonSpecHelper; @@ -70,6 +71,7 @@ public class AncLibrary { private int databaseVersion; private ActivityConfiguration activityConfiguration; private AncMetadata ancMetadata = new AncMetadata(); + private AppExecutors appExecutors; private AncLibrary(@NonNull Context context, int dbVersion, @NonNull ActivityConfiguration activityConfiguration, @Nullable SubscriberInfoIndex subscriberInfoIndex, @Nullable RegisterQueryProvider registerQueryProvider) { @@ -344,4 +346,11 @@ public void setRegisterQueryProvider(RegisterQueryProvider registerQueryProvider public AncMetadata getAncMetadata() { return ancMetadata; } + + public AppExecutors getAppExecutors() { + if (appExecutors == null) { + appExecutors = new AppExecutors(); + } + return appExecutors; + } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java index 50c257d0b..0b163ce26 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java @@ -88,8 +88,7 @@ protected void initializeFormFragmentCore() { JsonWizardFormFragment contactJsonFormFragment = ContactWizardJsonFormFragment.getFormFragment(JsonFormConstants.FIRST_STEP_NAME); - getSupportFragmentManager().beginTransaction().add(com.vijay.jsonwizard.R.id.container, contactJsonFormFragment).addToBackStack(contactJsonFormFragment.getArguments().getString(JsonFormConstants.STEPNAME)) - .commit(); + getSupportFragmentManager().beginTransaction().add(com.vijay.jsonwizard.R.id.container, contactJsonFormFragment).commit(); } @Override diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java index 17bd83f7e..695d6f372 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/MainContactActivity.java @@ -21,6 +21,7 @@ import org.smartregister.anc.library.model.PartialContact; import org.smartregister.anc.library.model.PreviousContact; import org.smartregister.anc.library.presenter.ContactPresenter; +import org.smartregister.anc.library.repository.PatientRepository; import org.smartregister.anc.library.util.ANCFormUtils; import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; @@ -92,7 +93,7 @@ private void initializeMainContactContainers() { process(contactForms); requiredFieldsMap.put(ConstantsUtils.JsonFormUtils.ANC_TEST_TASKS_ENCOUNTER_TYPE, 0); - if (StringUtils.isNotBlank(formInvalidFields) && contactNo > 1) { + if (StringUtils.isNotBlank(formInvalidFields) && contactNo > 1 && !PatientRepository.isFirstVisit(baseEntityId)) { String[] pair = formInvalidFields.split(":"); if (ConstantsUtils.JsonFormUtils.ANC_PROFILE_ENCOUNTER_TYPE.equals(pair[0])) requiredFieldsMap.put(pair[0], Integer.parseInt(pair[1])); @@ -223,7 +224,7 @@ private void loadContactGlobalsConfig() throws IOException { private void process(String[] mainContactForms) { //Fetch and load previously saved values try { - if (contactNo > 1) { + if (contactNo > 1 && !PatientRepository.isFirstVisit(baseEntityId)) { for (String formEventType : new ArrayList<>(Arrays.asList(mainContactForms))) { if (eventToFileMap.containsValue(formEventType)) { updateGlobalValuesWithDefaults(formEventType); @@ -315,7 +316,8 @@ private void processRequiredStepsField(JSONObject object) throws Exception { if (!ConstantsUtils.JsonFormUtils.ANC_TEST_ENCOUNTER_TYPE.equals(encounterType) && (requiredFieldsMap.size() == 0 || !requiredFieldsMap.containsKey(encounterType))) { requiredFieldsMap.put(object.getString(ConstantsUtils.JsonFormKeyUtils.ENCOUNTER_TYPE), 0); } - if (contactNo > 1 && ConstantsUtils.JsonFormUtils.ANC_PROFILE_ENCOUNTER_TYPE.equals(encounterType)) { + if (contactNo > 1 && ConstantsUtils.JsonFormUtils.ANC_PROFILE_ENCOUNTER_TYPE.equals(encounterType) + && !PatientRepository.isFirstVisit(baseEntityId)) { requiredFieldsMap.put(ConstantsUtils.JsonFormUtils.ANC_PROFILE_ENCOUNTER_TYPE, 0); } @@ -738,6 +740,10 @@ public void loadGlobals(Contact contact) { map.put(ConstantsUtils.PREVIOUS_CONTACT_NO, contactNo > 1 ? String.valueOf(contactNo - 1) : "0"); map.put(ConstantsUtils.AGE, womanAge); + if (ConstantsUtils.DueCheckStrategy.CHECK_FOR_FIRST_CONTACT.equals(Utils.getDueCheckStrategy())) { + map.put(ConstantsUtils.IS_FIRST_CONTACT, String.valueOf(PatientRepository.isFirstVisit(baseEntityId))); + } + //Inject gestational age when it has not been calculated from profile form if (TextUtils.isEmpty(formGlobalValues.get(ConstantsUtils.GEST_AGE_OPENMRS))) { map.put(ConstantsUtils.GEST_AGE_OPENMRS, String.valueOf(presenter.getGestationAge())); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java index 3ebce96ab..db6570cff 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java @@ -29,7 +29,6 @@ import org.smartregister.anc.library.activity.ContactJsonFormActivity; import org.smartregister.anc.library.domain.Contact; import org.smartregister.anc.library.presenter.ContactWizardJsonFormFragmentPresenter; -import org.smartregister.anc.library.task.ANCNextProgressDialogTask; import org.smartregister.anc.library.util.ANCFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; @@ -141,7 +140,6 @@ protected void setupCustomUI() { } } - // @Override public void onResume() { super.onResume(); @@ -286,15 +284,25 @@ public void displayQuickCheckBottomReferralButtons(boolean none, boolean other) proceedButton = buttonLayout.findViewById(R.id.proceed); } - setQuickCheckButtonsVisible(none, other, buttonLayout, referButton, proceedButton); - setQuickCheckButtonsInvisible(none, other, buttonLayout, referButton, proceedButton); - if ((none && !other) && buttonLayout != null) { - referButton.setVisibility(View.GONE); - } + Button finalReferButton = referButton; + Button finalProceedButton = proceedButton; + getJsonApi().getAppExecutors().mainThread().execute(new Runnable() { + @Override + public void run() { + setQuickCheckButtonsVisible(none, other, buttonLayout, finalReferButton, finalProceedButton); + setQuickCheckButtonsInvisible(none, other, buttonLayout, finalReferButton, finalProceedButton); + + if ((none && !other) && buttonLayout != null) { + finalReferButton.setVisibility(View.GONE); + } + } + }); + } + @Nullable private LinearLayout getQuickCheckButtonsLayout() { LinearLayout linearLayout = (LinearLayout) this.getView(); @@ -339,11 +347,22 @@ public void onClick(View view) { if (view.getId() == com.vijay.jsonwizard.R.id.next || view.getId() == com.vijay.jsonwizard.R.id.next_icon) { Object tag = view.getTag(com.vijay.jsonwizard.R.id.NEXT_STATE); if (tag == null) { - new ANCNextProgressDialogTask(getJsonFormFragment()).execute(); + getJsonApi().getAppExecutors().diskIO().execute(new Runnable() { + @Override + public void run() { + next(); + } + }); +// new ANCNextProgressDialogTask(getJsonFormFragment()).execute(); } else { boolean next = (boolean) tag; if (next) { - new ANCNextProgressDialogTask(getJsonFormFragment()).execute(); + getJsonApi().getAppExecutors().diskIO().execute(new Runnable() { + @Override + public void run() { + next(); + } + }); } else { savePartial = true; save(); @@ -353,8 +372,7 @@ public void onClick(View view) { view.getId() == com.vijay.jsonwizard.R.id.previous_icon) { assert getFragmentManager() != null; getJsonApi().setPreviousPressed(true); - getJsonApi().getStack().pop(); - getFragmentManager().popBackStack(getJsonApi().getStack().pop(), 0); + getFragmentManager().popBackStack(); } else if (view.getId() == R.id.refer) { displayReferralDialog(); } else if (view.getId() == R.id.proceed && getActivity() != null) { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactInteractor.java index 7e26aca81..d9f6fa3af 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactInteractor.java @@ -21,10 +21,10 @@ import org.smartregister.anc.library.repository.PartialContactRepository; import org.smartregister.anc.library.repository.PreviousContactRepository; import org.smartregister.anc.library.rule.ContactRule; +import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.AppExecutors; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; -import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.clientandeventmodel.Event; import org.smartregister.repository.DetailsRepository; @@ -129,9 +129,9 @@ public HashMap finalizeContactForm(final Map det addReferralGa(baseEntityId, details); } - Pair eventPair = ANCJsonFormUtils.createContactVisitEvent(formSubmissionIDs, details); + Pair eventPair = ANCJsonFormUtils.createVisitAndUpdateEvent(formSubmissionIDs, details); if (eventPair != null) { - createEvent(baseEntityId, new JSONObject(facts.asMap()).toString(), eventPair, referral); + createEvent(baseEntityId, new JSONObject(facts.asMap()).toString(), eventPair, referral, getCurrentContactState(baseEntityId)); JSONObject updateClientEventJson = new JSONObject(ANCJsonFormUtils.gson.toJson(eventPair.second)); AncLibrary.getInstance().getEcSyncHelper().addEvent(baseEntityId, updateClientEventJson); } @@ -211,14 +211,9 @@ private void addReferralGa(String baseEntityId, Map details) { } private void createEvent(String baseEntityId, String attentionFlagsString, Pair eventPair, - String referral) + String referral, String currentContactState) throws JSONException { - Event event = eventPair.first; - event.addDetails(ConstantsUtils.DetailsKeyUtils.ATTENTION_FLAG_FACTS, attentionFlagsString); - String currentContactState = getCurrentContactState(baseEntityId); - if (currentContactState != null && referral == null) { - event.addDetails(ConstantsUtils.DetailsKeyUtils.PREVIOUS_CONTACTS, currentContactState); - } + Event event = Utils.addContactVisitDetails(attentionFlagsString, eventPair.first, referral, currentContactState); JSONObject eventJson = new JSONObject(ANCJsonFormUtils.gson.toJson(event)); AncLibrary.getInstance().getEcSyncHelper().addEvent(baseEntityId, eventJson); } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java index ef85b82c0..6b3197fca 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java @@ -6,16 +6,17 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Triple; +import org.json.JSONException; import org.json.JSONObject; import org.smartregister.anc.library.AncLibrary; import org.smartregister.anc.library.contract.RegisterContract; import org.smartregister.anc.library.event.PatientRemovedEvent; import org.smartregister.anc.library.helper.ECSyncHelper; import org.smartregister.anc.library.sync.BaseAncClientProcessorForJava; +import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.AppExecutors; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; -import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.clientandeventmodel.Client; import org.smartregister.clientandeventmodel.Event; @@ -23,10 +24,10 @@ import org.smartregister.domain.UniqueId; import org.smartregister.job.PullUniqueIdsServiceJob; import org.smartregister.repository.AllSharedPreferences; -import org.smartregister.repository.BaseRepository; import org.smartregister.repository.UniqueIdRepository; import org.smartregister.sync.ClientProcessorForJava; +import java.util.Collections; import java.util.Date; import timber.log.Timber; @@ -79,8 +80,15 @@ public void getNextUniqueId(final Triple triple, public void saveRegistration(final Pair pair, final String jsonString, final boolean isEditMode, final RegisterContract.InteractorCallBack callBack) { Runnable runnable = () -> { + saveRegistration(pair, jsonString, isEditMode); + String baseEntityId = getBaseEntityId(pair); + + if (!isEditMode && ConstantsUtils.DueCheckStrategy.CHECK_FOR_FIRST_CONTACT.equals(Utils.getDueCheckStrategy())) { + createPartialPreviousEvent(pair, baseEntityId); + } + appExecutors.mainThread().execute(() -> { callBack.setBaseEntityRegister(baseEntityId); callBack.onRegistrationSaved(isEditMode); @@ -90,6 +98,20 @@ public void saveRegistration(final Pair pair, final String jsonSt appExecutors.diskIO().execute(runnable); } + //this creates partial previous visit events + private void createPartialPreviousEvent(Pair pair, String baseEntityId) { + appExecutors.diskIO().execute(() -> { + try { + String strPreviousVisitsMap = pair.second.getIdentifiers().get(ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS_MAP); + if (StringUtils.isNotBlank(strPreviousVisitsMap)) { + Utils.createPreviousVisitFromGroup(strPreviousVisitsMap, baseEntityId); + } + } catch (JSONException e) { + Timber.e(e); + } + }); + } + @Override public void removeWomanFromANCRegister(final String closeFormJsonString, final String providerId) { Runnable runnable = () -> { @@ -205,10 +227,7 @@ private void saveRegistration(Pair pair, String jsonString, boole long lastSyncTimeStamp = getAllSharedPreferences().fetchLastUpdatedAtDate(0); Date lastSyncDate = new Date(lastSyncTimeStamp); - - - // Todo: Use the event clients from above here - getClientProcessorForJava().processClient(getSyncHelper().getEvents(lastSyncDate, BaseRepository.TYPE_Unprocessed)); + getClientProcessorForJava().processClient(getSyncHelper().getEvents(Collections.singletonList(baseEvent.getFormSubmissionId()))); getAllSharedPreferences().saveLastUpdatedAtDate(lastSyncDate.getTime()); } catch (Exception e) { Timber.e(e, " --> saveRegistration"); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactPresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactPresenter.java index d127c48cb..b0e8478ea 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactPresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactPresenter.java @@ -1,7 +1,6 @@ package org.smartregister.anc.library.presenter; import android.content.Context; -import android.util.Log; import com.vijay.jsonwizard.constants.JsonFormConstants; @@ -19,6 +18,8 @@ import java.lang.ref.WeakReference; import java.util.Map; +import timber.log.Timber; + public class ContactPresenter implements ContactContract.Presenter, ContactContract.InteractorCallback { public static final String TAG = ContactPresenter.class.getName(); @@ -136,10 +137,10 @@ public void startForm(Object tag) { getView().startFormActivity(form, contact); } } catch (JSONException e) { - Log.e(TAG, Log.getStackTraceString(e)); + Timber.e(e); } } catch (Exception e) { - Log.e(TAG, Log.getStackTraceString(e)); + Timber.e(e); getView().displayToast(R.string.error_unable_to_start_form); } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java index 9357b164e..9b80a5fff 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java @@ -8,6 +8,7 @@ import com.vijay.jsonwizard.fragments.JsonFormFragment; import com.vijay.jsonwizard.interactors.JsonFormInteractor; import com.vijay.jsonwizard.presenters.JsonWizardFormFragmentPresenter; +import com.vijay.jsonwizard.views.JsonFormFragmentView; import com.vijay.jsonwizard.widgets.NativeRadioButtonFactory; import org.apache.commons.lang3.StringUtils; @@ -37,8 +38,11 @@ protected boolean moveToNextWizardStep() { String nextStep = getFormFragment().getJsonApi().nextStep(); if (StringUtils.isNotBlank(nextStep)) { JsonFormFragment next = ContactWizardJsonFormFragment.getFormFragment(nextStep); - getView().hideKeyBoard(); - getView().transactThis(next); + JsonFormFragmentView jsonFormFragmentView = getView(); + if (jsonFormFragmentView != null) { + jsonFormFragmentView.hideKeyBoard(); + jsonFormFragmentView.transactThis(next); + } return true; } return false; @@ -64,7 +68,6 @@ public void onClick(View view) { } } - @Override protected void nativeRadioButtonClickActions(View view) { String type = (String) view.getTag(com.vijay.jsonwizard.R.id.specify_type); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java index 87a51b561..d7f62006f 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java @@ -1,6 +1,7 @@ package org.smartregister.anc.library.repository; import android.content.ContentValues; +import android.support.annotation.NonNull; import net.sqlcipher.Cursor; import net.sqlcipher.database.SQLiteDatabase; @@ -63,6 +64,19 @@ public static Map getWomanProfileDetails(String baseEntityId) { return null; } + public static boolean isFirstVisit(@NonNull String baseEntityId) { + SQLiteDatabase sqLiteDatabase = getMasterRepository().getReadableDatabase(); + Cursor cursor = sqLiteDatabase.query(getRegisterQueryProvider().getDetailsTable(), + new String[]{DBConstantsUtils.KeyUtils.EDD}, + DBConstantsUtils.KeyUtils.BASE_ENTITY_ID + " = ? ", + new String[]{baseEntityId}, null, null, null, "1"); + String isFirstVisit = null; + if (cursor != null && cursor.moveToFirst()) { + isFirstVisit = cursor.getString(cursor.getColumnIndex(DBConstantsUtils.KeyUtils.EDD)); + } + return StringUtils.isBlank(isFirstVisit); + } + protected static Repository getMasterRepository() { return DrishtiApplication.getInstance().getRepository(); } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java index 838ce1acf..18781f978 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java @@ -33,7 +33,6 @@ import org.smartregister.anc.library.domain.YamlConfigWrapper; import org.smartregister.anc.library.model.ContactSummaryModel; import org.smartregister.anc.library.model.Task; -import org.smartregister.anc.library.repository.PatientRepository; import org.smartregister.clientandeventmodel.Client; import org.smartregister.clientandeventmodel.Event; import org.smartregister.clientandeventmodel.FormEntityConstants; @@ -65,8 +64,10 @@ import java.util.Date; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import timber.log.Timber; @@ -223,15 +224,18 @@ public static Pair processRegistrationForm(AllSharedPreferences a JSONObject metadata = ANCJsonFormUtils.getJSONObject(jsonForm, METADATA); addLastInteractedWith(fields); getDobStrings(fields); - initializeFirstContactValues(fields); + String previousVisitsMap = initializeFirstContactValues(fields); processLocationFields(fields); - FormTag formTag = getFormTag(allSharedPreferences); + FormTag formTag = getFormTag(allSharedPreferences); Client baseClient = org.smartregister.util.JsonFormUtils.createBaseClient(fields, formTag, entityId); Event baseEvent = org.smartregister.util.JsonFormUtils .createEvent(fields, metadata, formTag, entityId, encounterType, DBConstantsUtils.DEMOGRAPHIC_TABLE_NAME); + if (previousVisitsMap != null) { + baseEvent.addIdentifier(ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS_MAP, previousVisitsMap); + } tagSyncMetadata(allSharedPreferences, baseEvent);// tag docs return Pair.create(baseClient, baseEvent); @@ -298,23 +302,52 @@ private static void getDobStrings(JSONArray fields) throws JSONException { } } - private static void initializeFirstContactValues(JSONArray fields) throws JSONException { + private static String initializeFirstContactValues(JSONArray fields) throws JSONException { //initialize first contact values + String strGroup = null; + + int nextContact = 1; + + String nextContactDate = Utils.convertDateFormat(Calendar.getInstance().getTime(), Utils.DB_DF); + + if (ConstantsUtils.DueCheckStrategy.CHECK_FOR_FIRST_CONTACT.equals(Utils.getDueCheckStrategy())) { + HashMap> previousVisitsMap = Utils.buildRepeatingGroupValues(fields, ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS); + if (!previousVisitsMap.isEmpty()) { + + nextContact = previousVisitsMap.size() + 1; + + strGroup = ANCJsonFormUtils.gson.toJson(previousVisitsMap); + + Set>> set = previousVisitsMap.entrySet(); + + HashMap hashMap = new LinkedHashMap<>(); + + for (Map.Entry> entry : set) { + hashMap = entry.getValue(); + } + + JSONObject lastContactDateJSONObject = getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE); + lastContactDateJSONObject.put(ANCJsonFormUtils.VALUE, hashMap.get(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE)); + } + } JSONObject nextContactJSONObject = getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT); if (nextContactJSONObject.has(JsonFormConstants.VALUE) && "".equals(nextContactJSONObject.getString(JsonFormConstants.VALUE))) { - nextContactJSONObject.put(ANCJsonFormUtils.VALUE, 1); + nextContactJSONObject.put(ANCJsonFormUtils.VALUE, nextContact); } JSONObject nextContactDateJSONObject = getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT_DATE); if (nextContactDateJSONObject.has(JsonFormConstants.VALUE) && "".equals(nextContactDateJSONObject.getString(JsonFormConstants.VALUE))) { - nextContactDateJSONObject.put(ANCJsonFormUtils.VALUE, Utils.convertDateFormat(Calendar.getInstance().getTime(), Utils.DB_DF)); + nextContactDateJSONObject.put(ANCJsonFormUtils.VALUE, nextContactDate); } + + return strGroup; } + @NotNull - private static FormTag getFormTag(AllSharedPreferences allSharedPreferences) { + public static FormTag getFormTag(AllSharedPreferences allSharedPreferences) { FormTag formTag = new FormTag(); formTag.providerId = allSharedPreferences.fetchRegisteredANM(); formTag.appVersion = BuildConfig.VERSION_CODE; @@ -322,7 +355,7 @@ private static FormTag getFormTag(AllSharedPreferences allSharedPreferences) { return formTag; } - private static void tagSyncMetadata(AllSharedPreferences allSharedPreferences, Event event) { + public static void tagSyncMetadata(AllSharedPreferences allSharedPreferences, Event event) { String providerId = allSharedPreferences.fetchRegisteredANM(); event.setProviderId(providerId); event.setLocationId(allSharedPreferences.fetchDefaultLocalityId(providerId)); @@ -760,45 +793,24 @@ public static String getAutoPopulatedSiteCharacteristicsEditFormString(Context c return ""; } - public static Pair createContactVisitEvent(List formSubmissionIDs, - Map womanDetails) { + public static Pair createVisitAndUpdateEvent(List formSubmissionIDs, + Map womanDetails) { if (formSubmissionIDs.size() < 1 && womanDetails.get(ConstantsUtils.REFERRAL) == null) { return null; } try { - - String contactNo = womanDetails.get(DBConstantsUtils.KeyUtils.NEXT_CONTACT); - String contactStartDate = womanDetails.get(DBConstantsUtils.KeyUtils.VISIT_START_DATE); String baseEntityId = womanDetails.get(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID); - Event contactVisitEvent = (Event) new Event().withBaseEntityId(baseEntityId).withEventDate(new Date()) - .withEventType(ConstantsUtils.EventTypeUtils.CONTACT_VISIT).withEntityType(DBConstantsUtils.CONTACT_ENTITY_TYPE) - .withFormSubmissionId(ANCJsonFormUtils.generateRandomUUIDString()) - .withDateCreated(getContactStartDate(contactStartDate)); - - String currentContactNo; - if (womanDetails.get(ConstantsUtils.REFERRAL) == null) { - currentContactNo = ConstantsUtils.CONTACT + " " + contactNo; - } else { - currentContactNo = ConstantsUtils.CONTACT + " " + womanDetails.get(ConstantsUtils.REFERRAL); - } - contactVisitEvent.addDetails(ConstantsUtils.CONTACT, currentContactNo); - contactVisitEvent.addDetails(ConstantsUtils.FORM_SUBMISSION_IDS, formSubmissionIDs.toString()); - contactVisitEvent.addDetails(ConstantsUtils.OPEN_TEST_TASKS, String.valueOf(getOpenTasks(baseEntityId))); - - tagSyncMetadata(AncLibrary.getInstance().getContext().userService().getAllSharedPreferences(), - contactVisitEvent); - - PatientRepository.updateContactVisitStartDate(baseEntityId, null);//reset contact visit date - + Event contactVisitEvent = Utils.createContactVisitEvent(formSubmissionIDs, womanDetails, String.valueOf(getOpenTasks(baseEntityId))); //Update client EventClientRepository db = AncLibrary.getInstance().getEventClientRepository(); + JSONObject clientForm = db.getClientByBaseEntityId(baseEntityId); JSONObject attributes = clientForm.getJSONObject(ConstantsUtils.JsonFormKeyUtils.ATTRIBUTES); - attributes.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT, contactNo); + attributes.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT, contactVisitEvent.getDetails().get(ConstantsUtils.CONTACT)); attributes.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT_DATE, womanDetails.get(DBConstantsUtils.KeyUtils.NEXT_CONTACT_DATE)); attributes.put(DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE, womanDetails.get(DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE)); @@ -808,13 +820,10 @@ public static Pair createContactVisitEvent(List formSubmis attributes.put(DBConstantsUtils.KeyUtils.EDD, womanDetails.get(DBConstantsUtils.KeyUtils.EDD)); clientForm.put(ConstantsUtils.JsonFormKeyUtils.ATTRIBUTES, attributes); - FormTag formTag = getFormTag(AncLibrary.getInstance().getContext().allSharedPreferences()); - formTag.childLocationId = LocationHelper.getInstance().getChildLocationId(); - formTag.locationId = LocationHelper.getInstance().getParentLocationId(); - db.addorUpdateClient(baseEntityId, clientForm); Event updateClientEvent = createUpdateClientDetailsEvent(baseEntityId); + return Pair.create(contactVisitEvent, updateClientEvent); } catch (Exception e) { @@ -824,7 +833,7 @@ public static Pair createContactVisitEvent(List formSubmis } - private static Date getContactStartDate(String contactStartDate) { + public static Date getContactStartDate(String contactStartDate) { try { return new LocalDate(contactStartDate).toDate(); } catch (Exception e) { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java index 26e2286af..b75f3e3de 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java @@ -67,10 +67,16 @@ public abstract class ConstantsUtils { public static final String DUE = "Due"; public static final String OPEN_TEST_TASKS = "open_test_tasks"; public static final String ANDROID_SWITCHER = "android:switcher:"; + public static final String IS_FIRST_CONTACT = "is_first_contact"; public interface Properties { String CAN_SAVE_SITE_INITIAL_SETTING = "CAN_SAVE_INITIAL_SITE_SETTING"; String MAX_CONTACT_SCHEDULE_DISPLAYED = "MAX_CONTACT_SCHEDULE_DISPLAYED"; + String DUE_CHECK_STRATEGY = "DUE_CHECK_STRATEGY"; + } + + public interface DueCheckStrategy { + String CHECK_FOR_FIRST_CONTACT = "check_for_first_contact"; } public interface TemplateUtils { @@ -142,6 +148,9 @@ public static class JsonFormKeyUtils { public static final String STEP1 = "step1"; public static final String FIELDS = "fields"; public static final String VILLAGE = "village"; + public static final String PREVIOUS_VISITS = "previous_visits"; + public static final String VISIT_DATE = "visit_date"; + public static final String PREVIOUS_VISITS_MAP = "previous_visits_map"; } public static class JsonFormExtraUtils { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/DBConstantsUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/DBConstantsUtils.java index cac4d827f..f4807e0d3 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/DBConstantsUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/DBConstantsUtils.java @@ -43,5 +43,6 @@ public static final class KeyUtils { public static final String LAST_CONTACT_RECORD_DATE = "last_contact_record_date"; public static final String RELATIONAL_ID = "relationalid"; public static final String VISIT_START_DATE = "visit_start_date"; + public static final String IS_FIRST_VISIT = "is_first_visit"; } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index bd91eb018..33981a43b 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -50,8 +50,11 @@ import org.smartregister.anc.library.model.PartialContact; import org.smartregister.anc.library.model.Task; import org.smartregister.anc.library.repository.ContactTasksRepository; +import org.smartregister.anc.library.repository.PatientRepository; import org.smartregister.anc.library.rule.AlertRule; +import org.smartregister.clientandeventmodel.Event; import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.util.JsonFormUtils; import org.smartregister.view.activity.DrishtiApplication; import java.io.IOException; @@ -64,6 +67,7 @@ import java.util.Date; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -714,4 +718,136 @@ private void createAndPersistPartialContact(String baseEntityId, int contactNo, public ContactTasksRepository getContactTasksRepositoryHelper() { return AncLibrary.getInstance().getContactTasksRepository(); } + + public static String getDueCheckStrategy() { + return getProperties(AncLibrary.getInstance().getApplicationContext()).getProperty(ConstantsUtils.Properties.DUE_CHECK_STRATEGY, ""); + } + + public static HashMap> buildRepeatingGroupValues(@NonNull JSONArray fields, String fieldName) throws JSONException { + ArrayList keysArrayList = new ArrayList<>(); + JSONObject jsonObject = JsonFormUtils.getFieldJSONObject(fields, fieldName); + HashMap> repeatingGroupMap = new LinkedHashMap<>(); + if (jsonObject != null) { + JSONArray jsonArray = jsonObject.optJSONArray(JsonFormConstants.VALUE); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject valueField = jsonArray.optJSONObject(i); + String fieldKey = valueField.optString(JsonFormConstants.KEY); + keysArrayList.add(fieldKey); + } + + for (int k = 0; k < fields.length(); k++) { + JSONObject valueField = fields.optJSONObject(k); + String fieldKey = valueField.optString(JsonFormConstants.KEY); + String fieldValue = valueField.optString(JsonFormConstants.VALUE); + + if (fieldKey.contains("_")) { + fieldKey = fieldKey.substring(0, fieldKey.lastIndexOf("_")); + if (keysArrayList.contains(fieldKey) && StringUtils.isNotBlank(fieldValue)) { + String fieldKeyId = valueField.optString(JsonFormConstants.KEY).substring(fieldKey.length() + 1); + valueField.put(JsonFormConstants.KEY, fieldKey); + HashMap hashMap = repeatingGroupMap.get(fieldKeyId) == null ? new HashMap<>() : repeatingGroupMap.get(fieldKeyId); + hashMap.put(fieldKey, fieldValue); + repeatingGroupMap.put(fieldKeyId, hashMap); + } + } + } + } + return repeatingGroupMap; + } + + public static Event createContactVisitEvent(@NonNull List formSubmissionIDs, + @NonNull Map womanDetails, + @Nullable String openTasks) { + + try { + String contactNo = womanDetails.get(DBConstantsUtils.KeyUtils.NEXT_CONTACT); + String contactStartDate = womanDetails.get(DBConstantsUtils.KeyUtils.VISIT_START_DATE); + String baseEntityId = womanDetails.get(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID); + + Event contactVisitEvent = (Event) new Event().withBaseEntityId(baseEntityId).withEventDate(new Date()) + .withEventType(ConstantsUtils.EventTypeUtils.CONTACT_VISIT).withEntityType(DBConstantsUtils.CONTACT_ENTITY_TYPE) + .withFormSubmissionId(ANCJsonFormUtils.generateRandomUUIDString()) + .withDateCreated(ANCJsonFormUtils.getContactStartDate(contactStartDate)); + + String currentContactNo; + + if (womanDetails.get(ConstantsUtils.REFERRAL) == null) { + currentContactNo = ConstantsUtils.CONTACT + " " + contactNo; + } else { + currentContactNo = ConstantsUtils.CONTACT + " " + womanDetails.get(ConstantsUtils.REFERRAL); + } + + contactVisitEvent.addDetails(ConstantsUtils.CONTACT, currentContactNo); + contactVisitEvent.addDetails(ConstantsUtils.FORM_SUBMISSION_IDS, formSubmissionIDs.toString()); + contactVisitEvent.addDetails(ConstantsUtils.OPEN_TEST_TASKS, openTasks); + + ANCJsonFormUtils.tagSyncMetadata(AncLibrary.getInstance().getContext().userService().getAllSharedPreferences(), + contactVisitEvent); + + PatientRepository.updateContactVisitStartDate(baseEntityId, null);//reset contact visit date + + return contactVisitEvent; + + } catch (NullPointerException e) { + Timber.e(e, " --> createContactVisitEvent"); + return null; + } + + } + + public static void createPreviousVisitFromGroup(@NonNull String strGroup, @NonNull String baseEntityId) throws JSONException { + JSONObject jsonObject = new JSONObject(strGroup); + Iterator repeatingGroupKeys = jsonObject.keys(); + List currentFormSubmissionIds = new ArrayList<>(); + + int count = 0; + + while (repeatingGroupKeys.hasNext()) { + + ++count; + + JSONObject jsonSingleVisitObject = jsonObject.optJSONObject(repeatingGroupKeys.next()); + + String contactDate = jsonSingleVisitObject.optString(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE); + + Facts entries = new Facts(); + + entries.put(ConstantsUtils.CONTACT_DATE, contactDate); + + HashMap details = new HashMap<>(); + + details.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT, String.valueOf(count + 1)); + + details.put(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID, baseEntityId); + + Event contactVisitEvent = Utils.createContactVisitEvent(new ArrayList<>(), details, null); + + if (contactVisitEvent != null) { + JSONObject factsJsonObject = new JSONObject(ANCJsonFormUtils.gson.toJson(entries.asMap())); + Event event = Utils.addContactVisitDetails("", contactVisitEvent, null, factsJsonObject.toString()); + JSONObject eventJson = new JSONObject(ANCJsonFormUtils.gson.toJson(event)); + AncLibrary.getInstance().getEcSyncHelper().addEvent(baseEntityId, eventJson); + currentFormSubmissionIds.add(event.getFormSubmissionId()); + } + } + + long lastSyncTimeStamp = Utils.getAllSharedPreferences().fetchLastUpdatedAtDate(0); + Date lastSyncDate = new Date(lastSyncTimeStamp); + try { + AncLibrary.getInstance().getClientProcessorForJava().processClient(AncLibrary.getInstance().getEcSyncHelper().getEvents(currentFormSubmissionIds)); + Utils.getAllSharedPreferences().saveLastUpdatedAtDate(lastSyncDate.getTime()); + } catch (Exception e) { + Timber.e(e); + } + } + + + public static Event addContactVisitDetails(String attentionFlagsString, Event event, + String referral, String currentContactState) { + event.addDetails(ConstantsUtils.DetailsKeyUtils.ATTENTION_FLAG_FACTS, attentionFlagsString); + if (currentContactState != null && referral == null) { + event.addDetails(ConstantsUtils.DetailsKeyUtils.PREVIOUS_CONTACTS, currentContactState); + } + return event; + } } diff --git a/reference-app/src/main/assets/app.properties b/reference-app/src/main/assets/app.properties index 906e7afbc..7c8570781 100644 --- a/reference-app/src/main/assets/app.properties +++ b/reference-app/src/main/assets/app.properties @@ -3,4 +3,5 @@ PORT=-1 SHOULD_VERIFY_CERTIFICATE=false SYNC_DOWNLOAD_BATCH_SIZE=100 CAN_SAVE_INITIAL_SITE_SETTING=false -MAX_CONTACT_SCHEDULE_DISPLAYED=5 \ No newline at end of file +MAX_CONTACT_SCHEDULE_DISPLAYED=5 +DUE_CHECK_STRATEGY=check_for_first_contact \ No newline at end of file From bdc4954dedc4c00b86c4a451acba1924f0050020 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Wed, 24 Jun 2020 12:41:26 +0300 Subject: [PATCH 10/33] remove due check strategy config --- .../anc/library/util/ANCJsonFormUtils.java | 19 +++++++----- .../smartregister/anc/library/util/Utils.java | 30 +++++++++++++++---- reference-app/src/main/assets/app.properties | 3 +- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java index 18781f978..2a5030d65 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java @@ -302,8 +302,13 @@ private static void getDobStrings(JSONArray fields) throws JSONException { } } - private static String initializeFirstContactValues(JSONArray fields) throws JSONException { - //initialize first contact values + /*** + * Initializes the values in the mother details table used by contact containers + * @param fields {@link JSONArray} + * @return + * @throws JSONException + */ + private static String initializeFirstContactValues(@NonNull JSONArray fields) throws JSONException { String strGroup = null; int nextContact = 1; @@ -318,16 +323,16 @@ private static String initializeFirstContactValues(JSONArray fields) throws JSON strGroup = ANCJsonFormUtils.gson.toJson(previousVisitsMap); - Set>> set = previousVisitsMap.entrySet(); + Set>> previousVisitsMapSet = previousVisitsMap.entrySet(); - HashMap hashMap = new LinkedHashMap<>(); + HashMap previousVisitsMapItem = new LinkedHashMap<>(); - for (Map.Entry> entry : set) { - hashMap = entry.getValue(); + for (Map.Entry> entry : previousVisitsMapSet) { + previousVisitsMapItem = entry.getValue(); } JSONObject lastContactDateJSONObject = getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE); - lastContactDateJSONObject.put(ANCJsonFormUtils.VALUE, hashMap.get(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE)); + lastContactDateJSONObject.put(ANCJsonFormUtils.VALUE, previousVisitsMapItem.get(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE)); } } JSONObject nextContactJSONObject = getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index 33981a43b..3d0f4243b 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -723,7 +723,14 @@ public static String getDueCheckStrategy() { return getProperties(AncLibrary.getInstance().getApplicationContext()).getProperty(ConstantsUtils.Properties.DUE_CHECK_STRATEGY, ""); } - public static HashMap> buildRepeatingGroupValues(@NonNull JSONArray fields, String fieldName) throws JSONException { + /*** + * Creates a map for repeating group fields and values + * @param fields {@link JSONArray} + * @param fieldName {@link String} + * @return {@link HashMap} + * @throws JSONException + */ + public static HashMap> buildRepeatingGroupValues(@NonNull JSONArray fields, @NonNull String fieldName) throws JSONException { ArrayList keysArrayList = new ArrayList<>(); JSONObject jsonObject = JsonFormUtils.getFieldJSONObject(fields, fieldName); HashMap> repeatingGroupMap = new LinkedHashMap<>(); @@ -755,6 +762,13 @@ public static HashMap> buildRepeatingGroupValues return repeatingGroupMap; } + /*** + * Creates contact visit event after each visit + * @param formSubmissionIDs {@link List} + * @param womanDetails {@link Map} + * @param openTasks {@link String} + * @return {@link Event} + */ public static Event createContactVisitEvent(@NonNull List formSubmissionIDs, @NonNull Map womanDetails, @Nullable String openTasks) { @@ -795,6 +809,12 @@ public static Event createContactVisitEvent(@NonNull List formSubmission } + /*** + * Creates partial previous visit events for clients from the registration form + * @param strGroup {@link String} + * @param baseEntityId {@link String} + * @throws JSONException + */ public static void createPreviousVisitFromGroup(@NonNull String strGroup, @NonNull String baseEntityId) throws JSONException { JSONObject jsonObject = new JSONObject(strGroup); Iterator repeatingGroupKeys = jsonObject.keys(); @@ -814,13 +834,13 @@ public static void createPreviousVisitFromGroup(@NonNull String strGroup, @NonNu entries.put(ConstantsUtils.CONTACT_DATE, contactDate); - HashMap details = new HashMap<>(); + HashMap womanDetails = new HashMap<>(); - details.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT, String.valueOf(count + 1)); + womanDetails.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT, String.valueOf(count + 1)); - details.put(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID, baseEntityId); + womanDetails.put(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID, baseEntityId); - Event contactVisitEvent = Utils.createContactVisitEvent(new ArrayList<>(), details, null); + Event contactVisitEvent = Utils.createContactVisitEvent(new ArrayList<>(), womanDetails, null); if (contactVisitEvent != null) { JSONObject factsJsonObject = new JSONObject(ANCJsonFormUtils.gson.toJson(entries.asMap())); diff --git a/reference-app/src/main/assets/app.properties b/reference-app/src/main/assets/app.properties index 7c8570781..906e7afbc 100644 --- a/reference-app/src/main/assets/app.properties +++ b/reference-app/src/main/assets/app.properties @@ -3,5 +3,4 @@ PORT=-1 SHOULD_VERIFY_CERTIFICATE=false SYNC_DOWNLOAD_BATCH_SIZE=100 CAN_SAVE_INITIAL_SITE_SETTING=false -MAX_CONTACT_SCHEDULE_DISPLAYED=5 -DUE_CHECK_STRATEGY=check_for_first_contact \ No newline at end of file +MAX_CONTACT_SCHEDULE_DISPLAYED=5 \ No newline at end of file From b72675ead4fb399036f40ed86b3e785295c3c109 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Wed, 24 Jun 2020 17:21:41 +0300 Subject: [PATCH 11/33] make anc profile activity configurable --- .../anc/library/activity/ActivityConfiguration.java | 10 ++++++++++ .../java/org/smartregister/anc/library/util/Utils.java | 3 +-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ActivityConfiguration.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ActivityConfiguration.java index 553cff683..2e367dbb4 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ActivityConfiguration.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ActivityConfiguration.java @@ -12,12 +12,14 @@ public class ActivityConfiguration { private Class homeRegisterActivityClass; private Class landingPageActivityClass; private Class mainContactActivityClass; + private Class profileActivityClass; public ActivityConfiguration() { setHomeRegisterActivityClass(BaseHomeRegisterActivity.class); setLandingPageActivityClass(getHomeRegisterActivityClass()); setMainContactActivityClass(MainContactActivity.class); + setProfileActivityClass(ProfileActivity.class); } public Class getHomeRegisterActivityClass() { @@ -43,4 +45,12 @@ public Class getMainContactActivityClass() { public void setMainContactActivityClass(Class mainContactActivityClass) { this.mainContactActivityClass = mainContactActivityClass; } + + public Class getProfileActivityClass() { + return profileActivityClass; + } + + public void setProfileActivityClass(Class profileActivityClass) { + this.profileActivityClass = profileActivityClass; + } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index 3d0f4243b..067b03d36 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -42,7 +42,6 @@ import org.smartregister.anc.library.activity.BaseHomeRegisterActivity; import org.smartregister.anc.library.activity.ContactJsonFormActivity; import org.smartregister.anc.library.activity.ContactSummaryFinishActivity; -import org.smartregister.anc.library.activity.ProfileActivity; import org.smartregister.anc.library.domain.ButtonAlertStatus; import org.smartregister.anc.library.domain.Contact; import org.smartregister.anc.library.event.BaseEvent; @@ -387,7 +386,7 @@ public static void navigateToHomeRegister(Context context, boolean isRemote, Cla } public static void navigateToProfile(Context context, HashMap patient) { - Intent intent = new Intent(context, ProfileActivity.class); + Intent intent = new Intent(context, AncLibrary.getInstance().getActivityConfiguration().getProfileActivityClass()); intent.putExtra(ConstantsUtils.IntentKeyUtils.BASE_ENTITY_ID, patient.get(DBConstantsUtils.KeyUtils.ID_LOWER_CASE)); intent.putExtra(ConstantsUtils.IntentKeyUtils.CLIENT_MAP, patient); context.startActivity(intent); From 3f54903280c5f0bf83f3fc4dc1cb21aa4b5e22ac Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 25 Jun 2020 16:16:44 +0300 Subject: [PATCH 12/33] update snapshot version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index cfc79dc2a..289630a26 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.3.7-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.9-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library From aa26c4662df5fb174a32f44aebd65f57ec1a1ad0 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 25 Jun 2020 16:17:56 +0300 Subject: [PATCH 13/33] remove unneeded column --- .../main/assets/json.form/anc_register.json | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/opensrp-anc/src/main/assets/json.form/anc_register.json b/opensrp-anc/src/main/assets/json.form/anc_register.json index 3e614184d..5b49920f0 100644 --- a/opensrp-anc/src/main/assets/json.form/anc_register.json +++ b/opensrp-anc/src/main/assets/json.form/anc_register.json @@ -413,25 +413,6 @@ "openmrs_entity_id": "last_contact_record_date", "type": "hidden", "value": "" - }, - { - "key": "previous_visits", - "type": "repeating_group", - "reference_edit_text_hint": "# of visits", - "repeating_group_label": "", - "openmrs_entity_parent": "", - "openmrs_entity": "", - "openmrs_entity_id": "", - "value": [ - { - "key": "visit_date", - "openmrs_entity_parent": "", - "openmrs_entity": "", - "openmrs_entity_id": "", - "type": "date_picker", - "hint": "Visit date" - } - ] } ] } From 7e088f6699d521213fe624b26949dd2634ea57f4 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Fri, 26 Jun 2020 16:35:09 +0300 Subject: [PATCH 14/33] update null check for event details --- gradle.properties | 2 +- .../anc/library/interactor/RegisterInteractor.java | 14 ++++++++++---- .../anc/library/repository/PatientRepository.java | 2 ++ .../repository/PreviousContactRepository.java | 4 ++-- .../org/smartregister/anc/library/util/Utils.java | 8 +++++--- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/gradle.properties b/gradle.properties index 289630a26..efe63c14e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.3.9-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.11-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java index 6b3197fca..d93425a8d 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java @@ -98,13 +98,19 @@ public void saveRegistration(final Pair pair, final String jsonSt appExecutors.diskIO().execute(runnable); } - //this creates partial previous visit events + /*** + * creates partial previous visit events after creation of client + * @param pair {@link Pair} + * @param baseEntityId {@link String} + */ private void createPartialPreviousEvent(Pair pair, String baseEntityId) { appExecutors.diskIO().execute(() -> { try { - String strPreviousVisitsMap = pair.second.getIdentifiers().get(ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS_MAP); - if (StringUtils.isNotBlank(strPreviousVisitsMap)) { - Utils.createPreviousVisitFromGroup(strPreviousVisitsMap, baseEntityId); + if (pair.second != null && pair.second.getIdentifiers() != null) { + String strPreviousVisitsMap = pair.second.getIdentifiers().get(ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS_MAP); + if (StringUtils.isNotBlank(strPreviousVisitsMap)) { + Utils.createPreviousVisitFromGroup(strPreviousVisitsMap, baseEntityId); + } } } catch (JSONException e) { Timber.e(e); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java index 184334e77..8ab625c5f 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java @@ -73,7 +73,9 @@ public static boolean isFirstVisit(@NonNull String baseEntityId) { String isFirstVisit = null; if (cursor != null && cursor.moveToFirst()) { isFirstVisit = cursor.getString(cursor.getColumnIndex(DBConstantsUtils.KeyUtils.EDD)); + cursor.close(); } + return StringUtils.isBlank(isFirstVisit); } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java index eb6f4f9bd..08a025acc 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java @@ -11,8 +11,8 @@ import org.jeasy.rules.api.Facts; import org.smartregister.anc.library.model.PreviousContact; import org.smartregister.anc.library.model.PreviousContactsSummaryModel; -import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.ANCFormUtils; +import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.repository.BaseRepository; @@ -310,7 +310,7 @@ public Facts getPreviousContactFacts(String baseEntityId, String contactNo, bool String[] selectionArgs = null; Facts previousContactFacts = new Facts(); try { - SQLiteDatabase db = getWritableDatabase(); + SQLiteDatabase db = getReadableDatabase(); if (StringUtils.isNotBlank(baseEntityId) && StringUtils.isNotBlank(contactNo)) { selection = BASE_ENTITY_ID + " = ? AND " + CONTACT_NO + " = ?"; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index 067b03d36..9184b13f5 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -227,9 +227,11 @@ public static void proceedToContact(String baseEntityId, HashMap ContactModel baseContactModel = new ContactModel(); JSONObject form = baseContactModel.getFormAsJson(quickCheck.getFormName(), baseEntityId, locationId); - JSONObject globals = new JSONObject(); - globals.put(ConstantsUtils.CONTACT_NO, personObjectClient.get(DBConstantsUtils.KeyUtils.NEXT_CONTACT)); - form.put(ConstantsUtils.GLOBAL, globals); + if (ConstantsUtils.DueCheckStrategy.CHECK_FOR_FIRST_CONTACT.equals(Utils.getDueCheckStrategy())) { + JSONObject globals = new JSONObject(); + globals.put(ConstantsUtils.IS_FIRST_CONTACT, PatientRepository.isFirstVisit(personObjectClient.get(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID))); + form.put(ConstantsUtils.GLOBAL, globals); + } String processedForm = ANCFormUtils.getFormJsonCore(partialContactRequest, form).toString(); From 1055065f0a3c605cc98dec70e7fbef8363218656 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Mon, 29 Jun 2020 09:40:54 +0300 Subject: [PATCH 15/33] fix next contact update --- gradle.properties | 2 +- .../org/smartregister/anc/library/util/ANCJsonFormUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index efe63c14e..bcac6f87f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.3.11-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.12-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java index a694f9de9..7f845e91d 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java @@ -815,7 +815,7 @@ public static Pair createVisitAndUpdateEvent(List formSubm JSONObject clientForm = db.getClientByBaseEntityId(baseEntityId); JSONObject attributes = clientForm.getJSONObject(ConstantsUtils.JsonFormKeyUtils.ATTRIBUTES); - attributes.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT, contactVisitEvent.getDetails().get(ConstantsUtils.CONTACT)); + attributes.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT, womanDetails.get(DBConstantsUtils.KeyUtils.NEXT_CONTACT)); attributes.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT_DATE, womanDetails.get(DBConstantsUtils.KeyUtils.NEXT_CONTACT_DATE)); attributes.put(DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE, womanDetails.get(DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE)); From d37270c85db5b96b77ceadddb7351a9f1ef94c9a Mon Sep 17 00:00:00 2001 From: bennsimon Date: Mon, 29 Jun 2020 11:20:30 +0300 Subject: [PATCH 16/33] update/fix tests --- .../interactor/RegisterInteractor.java | 4 ++-- .../task/LoadContactSummaryDataTask.java | 2 +- .../anc/library/util/ANCJsonFormUtils.java | 9 ++++++--- .../activity/BaseActivityUnitTest.java | 20 +++++++++++++++---- .../BaseHomeRegisterActivityTest.java | 2 ++ .../interactor/RegisterInteractorTest.java | 17 ++++++++++++++-- .../library/util/ANCJsonFormUtilsTest.java | 6 +++++- 7 files changed, 47 insertions(+), 13 deletions(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java index d93425a8d..767b0fab1 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java @@ -106,8 +106,8 @@ public void saveRegistration(final Pair pair, final String jsonSt private void createPartialPreviousEvent(Pair pair, String baseEntityId) { appExecutors.diskIO().execute(() -> { try { - if (pair.second != null && pair.second.getIdentifiers() != null) { - String strPreviousVisitsMap = pair.second.getIdentifiers().get(ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS_MAP); + if (pair.second != null && pair.second.getDetails() != null) { + String strPreviousVisitsMap = pair.second.getDetails().get(ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS_MAP); if (StringUtils.isNotBlank(strPreviousVisitsMap)) { Utils.createPreviousVisitFromGroup(strPreviousVisitsMap, baseEntityId); } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java index bdb7e3191..3d6b263bb 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java @@ -64,7 +64,7 @@ protected void onPostExecute(Void result) { } catch (NullPointerException e) { clientDetails = new HashMap<>(); } - String edd = StringUtils.isNotBlank(facts.get(DBConstantsUtils.KeyUtils.EDD)) ? facts.get(DBConstantsUtils.KeyUtils.EDD) : Utils.reverseHyphenSeperatedValues(clientDetails.get(ConstantsUtils.EDD), "-"); + String edd = StringUtils.isNotBlank(facts.get(DBConstantsUtils.KeyUtils.EDD)) ? facts.get(DBConstantsUtils.KeyUtils.EDD) : clientDetails != null ? Utils.reverseHyphenSeperatedValues(clientDetails.get(ConstantsUtils.EDD), "-") : ""; String contactNo = String.valueOf(intent.getExtras().getInt(ConstantsUtils.IntentKeyUtils.CONTACT_NO)); if (edd != null && ((ContactSummaryFinishActivity) context).saveFinishMenuItem != null) { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java index 7f845e91d..4e09524a9 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java @@ -234,7 +234,7 @@ public static Pair processRegistrationForm(AllSharedPreferences a .createEvent(fields, metadata, formTag, entityId, encounterType, DBConstantsUtils.DEMOGRAPHIC_TABLE_NAME); if (previousVisitsMap != null) { - baseEvent.addIdentifier(ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS_MAP, previousVisitsMap); + baseEvent.addDetails(ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS_MAP, previousVisitsMap); } tagSyncMetadata(allSharedPreferences, baseEvent);// tag docs @@ -528,6 +528,8 @@ private static LocationPickerView createLocationPickerView(Context context) { protected static void processPopulatableFields(Map womanClient, JSONObject jsonObject) throws JSONException { + AncMetadata ancMetadata = AncLibrary.getInstance().getAncMetadata(); + if (jsonObject.getString(ANCJsonFormUtils.KEY).equalsIgnoreCase(ConstantsUtils.JsonFormKeyUtils.DOB_ENTERED)) { getDobUsingEdd(womanClient, jsonObject, DBConstantsUtils.KeyUtils.DOB); @@ -547,8 +549,9 @@ protected static void processPopulatableFields(Map womanClient, if (StringUtils.isNotBlank(womanClient.get(DBConstantsUtils.KeyUtils.DOB))) { jsonObject.put(ANCJsonFormUtils.VALUE, Utils.getAgeFromDate(womanClient.get(DBConstantsUtils.KeyUtils.DOB))); } - } else if (jsonObject.getString(ANCJsonFormUtils.KEY).equalsIgnoreCase(ConstantsUtils.JsonFormKeyUtils.VILLAGE)) { - reverseLocationTree(jsonObject, womanClient.get(ConstantsUtils.JsonFormKeyUtils.VILLAGE)); + } else if (ancMetadata != null && ancMetadata.getFieldsWithLocationHierarchy() != null && + ancMetadata.getFieldsWithLocationHierarchy().contains(jsonObject.optString(ANCJsonFormUtils.KEY))) { + reverseLocationTree(jsonObject, womanClient.get(jsonObject.optString(ANCJsonFormUtils.KEY))); } else if (jsonObject.getString(ANCJsonFormUtils.KEY).equalsIgnoreCase(DBConstantsUtils.KeyUtils.EDD)) { formatEdd(womanClient, jsonObject, DBConstantsUtils.KeyUtils.EDD); diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseActivityUnitTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseActivityUnitTest.java index f6b35a210..84cee149b 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseActivityUnitTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseActivityUnitTest.java @@ -12,6 +12,8 @@ import org.smartregister.CoreLibrary; import org.smartregister.anc.library.AncLibrary; import org.smartregister.anc.library.util.Utils; +import org.smartregister.configurableviews.ConfigurableViewsLibrary; +import org.smartregister.configurableviews.helper.ConfigurableViewsHelper; import org.smartregister.location.helper.LocationHelper; import org.smartregister.repository.AllSharedPreferences; import org.smartregister.repository.FormDataRepository; @@ -24,13 +26,19 @@ public abstract class BaseActivityUnitTest extends BaseUnitTest { public Context context; + @Mock private Repository repository; + @Mock private FormDataRepository formDataRepository; + @Mock private CoreLibrary coreLibrary; + @Mock + private ConfigurableViewsLibrary configurableViewsLibrary; + public void setUp() { MockitoAnnotations.initMocks(this); @@ -54,6 +62,10 @@ public void setUp() { context.configuration().getDrishtiApplication().setPassword(password); context.session().setPassword(password); + ReflectionHelpers.setStaticField(ConfigurableViewsLibrary.class, "instance", configurableViewsLibrary); + ConfigurableViewsHelper configurableViewsHelper = Mockito.mock(ConfigurableViewsHelper.class); + Mockito.when(configurableViewsLibrary.getConfigurableViewsHelper()).thenReturn(configurableViewsHelper); + DrishtiApplication drishtiApplication = Mockito.mock(DrishtiApplication.class); ReflectionHelpers.setStaticField(DrishtiApplication.class, "mInstance", drishtiApplication); @@ -63,13 +75,13 @@ public void setUp() { protected void destroyController() { try { - getActivity().finish(); - getActivityController().pause().stop().destroy(); //destroy controller if we can - + if (getActivity() != null) { + getActivity().finish(); + getActivityController().pause().stop().destroy(); //destroy controller if we can + } } catch (Exception e) { e.printStackTrace(); } - System.gc(); } diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java index 2e2992015..6fad7becf 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java @@ -18,6 +18,7 @@ import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.android.controller.ActivityController; +import org.robolectric.util.ReflectionHelpers; import org.smartregister.anc.library.R; import org.smartregister.anc.library.contract.RegisterContract; import org.smartregister.anc.library.domain.AttentionFlag; @@ -32,6 +33,7 @@ import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.configurableviews.ConfigurableViewsLibrary; import org.smartregister.configurableviews.model.Field; import org.smartregister.domain.FetchStatus; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java index 802b660bc..451cc4360 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java @@ -12,17 +12,21 @@ import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatchers; import org.mockito.Captor; +import org.mockito.Mock; import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import org.robolectric.util.ReflectionHelpers; +import org.smartregister.anc.library.AncLibrary; import org.smartregister.anc.library.activity.BaseUnitTest; import org.smartregister.anc.library.contract.RegisterContract; import org.smartregister.anc.library.helper.ECSyncHelper; import org.smartregister.anc.library.sync.BaseAncClientProcessorForJava; +import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.AppExecutors; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; -import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.clientandeventmodel.Client; import org.smartregister.clientandeventmodel.Event; import org.smartregister.domain.UniqueId; @@ -32,6 +36,7 @@ import org.smartregister.repository.UniqueIdRepository; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -62,8 +67,12 @@ public class RegisterInteractorTest extends BaseUnitTest { @Captor private ArgumentCaptor longArgumentCaptor; + @Mock + AncLibrary ancLibrary; + @Before public void setUp() { + MockitoAnnotations.initMocks(this); interactor = new RegisterInteractor(new AppExecutors(Executors.newSingleThreadExecutor(), Executors.newSingleThreadExecutor(), Executors.newSingleThreadExecutor())); } @@ -136,6 +145,7 @@ public void testSaveNewRegistration() throws Exception { String baseEntityId = "112123"; String ancId = "1324354"; + String formSubmissionId = "132vb-sdsd-we"; Client client = new Client(baseEntityId); Map identifiers = new HashMap<>(); @@ -144,6 +154,7 @@ public void testSaveNewRegistration() throws Exception { Event event = new Event(); event.setBaseEntityId(baseEntityId); + event.setFormSubmissionId(formSubmissionId); Pair pair = Pair.create(client, event); @@ -160,7 +171,9 @@ public void testSaveNewRegistration() throws Exception { eventClients.add(eventClient); Mockito.doReturn(timestamp).when(allSharedPreferences).fetchLastUpdatedAtDate(0); - Mockito.doReturn(eventClients).when(syncHelper).getEvents(new Date(timestamp), BaseRepository.TYPE_Unprocessed); + Mockito.doReturn(eventClients).when(syncHelper).getEvents(Arrays.asList(formSubmissionId)); + + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", ancLibrary); registerInteractor.saveRegistration(pair, jsonString, false, callBack); diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java index 9ca04a354..27c1be6e2 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java @@ -371,6 +371,11 @@ public void testGetAutoPopulatedJsonEditFormStringInjectsValuesCorrectlyInForm() PowerMockito.mockStatic(LocationHelper.class); PowerMockito.when(LocationHelper.getInstance()).thenReturn(locationHelper); + AncMetadata ancMetadata = new AncMetadata(); + ancMetadata.setFieldsWithLocationHierarchy(new HashSet<>(Arrays.asList("village"))); + Mockito.when(ancLibrary.getAncMetadata()).thenReturn(ancMetadata); + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", ancLibrary); + ArrayList allLevels = new ArrayList<>(); allLevels.add("Country"); allLevels.add("Province"); @@ -388,7 +393,6 @@ public void testGetAutoPopulatedJsonEditFormStringInjectsValuesCorrectlyInForm() formLocation.name = details.get(DBConstantsUtils.KeyUtils.HOME_ADDRESS); formLocations.add(formLocation); - List locations = new ArrayList<>(); locations.add(details.get(Utils.HOME_ADDRESS)); PowerMockito.when(locationHelper.generateDefaultLocationHierarchy(ArgumentMatchers.eq(healthFacilities))).thenReturn(locations); From 1f300bf0c5903d6c56ce17ccb4da9bba0c277b54 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Mon, 29 Jun 2020 15:27:46 +0300 Subject: [PATCH 17/33] added tests --- gradle.properties | 2 +- .../smartregister/anc/library/util/Utils.java | 7 +- .../library/util/ANCJsonFormUtilsTest.java | 49 +++++++++ .../anc/library/util/UtilsTest.java | 103 +++++++++++++++++- 4 files changed, 155 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index bcac6f87f..3b5bec98d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.3.12-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.13-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index 9184b13f5..4168a3946 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -796,8 +796,7 @@ public static Event createContactVisitEvent(@NonNull List formSubmission contactVisitEvent.addDetails(ConstantsUtils.FORM_SUBMISSION_IDS, formSubmissionIDs.toString()); contactVisitEvent.addDetails(ConstantsUtils.OPEN_TEST_TASKS, openTasks); - ANCJsonFormUtils.tagSyncMetadata(AncLibrary.getInstance().getContext().userService().getAllSharedPreferences(), - contactVisitEvent); + ANCJsonFormUtils.tagSyncMetadata(getAllSharedPreferences(), contactVisitEvent); PatientRepository.updateContactVisitStartDate(baseEntityId, null);//reset contact visit date @@ -852,11 +851,11 @@ public static void createPreviousVisitFromGroup(@NonNull String strGroup, @NonNu } } - long lastSyncTimeStamp = Utils.getAllSharedPreferences().fetchLastUpdatedAtDate(0); + long lastSyncTimeStamp = getAllSharedPreferences().fetchLastUpdatedAtDate(0); Date lastSyncDate = new Date(lastSyncTimeStamp); try { AncLibrary.getInstance().getClientProcessorForJava().processClient(AncLibrary.getInstance().getEcSyncHelper().getEvents(currentFormSubmissionIds)); - Utils.getAllSharedPreferences().saveLastUpdatedAtDate(lastSyncDate.getTime()); + getAllSharedPreferences().saveLastUpdatedAtDate(lastSyncDate.getTime()); } catch (Exception e) { Timber.e(e); } diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java index 27c1be6e2..2f9f3fbcb 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java @@ -20,6 +20,7 @@ import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.reflect.Whitebox; import org.powermock.reflect.internal.WhiteboxImpl; import org.robolectric.util.ReflectionHelpers; import org.skyscreamer.jsonassert.Customization; @@ -51,6 +52,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -653,4 +655,51 @@ public void testProcessContactFormEventShouldPopulateEventObjectAccordingly() th Assert.assertEquals(coJsonObject.optString(JsonFormConstants.ENCOUNTER_TYPE), resultEvent.getEventType()); Assert.assertEquals("demo", resultEvent.getProviderId()); } + + @Test + @PrepareForTest(Utils.class) + public void testInitializeFirstContactValuesForDefaultStrategy() throws Exception { + PowerMockito.mockStatic(Utils.class); + PowerMockito.when(Utils.class, "getDueCheckStrategy").thenReturn(""); + JSONArray fields = new JSONObject(registerFormJsonString).optJSONObject(JsonFormConstants.STEP1) + .optJSONArray(JsonFormConstants.FIELDS); + String result = Whitebox.invokeMethod(ANCJsonFormUtils.class, "initializeFirstContactValues", fields); + JSONObject nextContactJsonObject = ANCJsonFormUtils.getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT); + JSONObject nextContactDateJsonObject = ANCJsonFormUtils.getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT_DATE); + Assert.assertEquals(String.valueOf(1), nextContactJsonObject.optString(JsonFormConstants.VALUE)); + Assert.assertTrue(nextContactDateJsonObject.optString(JsonFormConstants.VALUE).isEmpty()); + Assert.assertNull(result); + } + + @Test + @PrepareForTest(Utils.class) + public void testInitializeFirstContactValuesForIsFirstContactStrategy() throws Exception { + PowerMockito.mockStatic(Utils.class); + PowerMockito.when(Utils.class, "getDueCheckStrategy").thenReturn(ConstantsUtils.DueCheckStrategy.CHECK_FOR_FIRST_CONTACT); + + JSONArray fields = new JSONObject(registerFormJsonString).optJSONObject(JsonFormConstants.STEP1) + .optJSONArray(JsonFormConstants.FIELDS); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put(JsonFormConstants.KEY, DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE); + fields.put(jsonObject); + + HashMap groupItem = new LinkedHashMap<>(); + groupItem.put("visit_date", "2020-04-04"); + HashMap> groupMap = new HashMap<>(); + groupMap.put("324-w3424", groupItem); + + PowerMockito.when(Utils.class, "buildRepeatingGroupValues", Mockito.any(JSONArray.class), Mockito.anyString()).thenReturn(groupMap); + + String result = Whitebox.invokeMethod(ANCJsonFormUtils.class, "initializeFirstContactValues", fields); + JSONObject nextContactJsonObject = ANCJsonFormUtils.getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT); + JSONObject nextContactDateJsonObject = ANCJsonFormUtils.getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT_DATE); + JSONObject lastContactDateJsonObject = ANCJsonFormUtils.getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE); + + Assert.assertEquals(String.valueOf(2), nextContactJsonObject.optString(JsonFormConstants.VALUE)); + Assert.assertTrue(nextContactDateJsonObject.optString(JsonFormConstants.VALUE).isEmpty()); + Assert.assertEquals("2020-04-04", lastContactDateJsonObject.optString(JsonFormConstants.VALUE)); + Assert.assertNotNull(result); + } + } diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/UtilsTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/UtilsTest.java index 8d8a56e8c..aa5142293 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/UtilsTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/UtilsTest.java @@ -4,15 +4,20 @@ import android.widget.Button; import android.widget.TextView; +import com.vijay.jsonwizard.constants.JsonFormConstants; + import org.apache.commons.lang3.StringUtils; import org.hamcrest.Matchers; import org.joda.time.DateTime; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.powermock.api.mockito.PowerMockito; @@ -23,15 +28,23 @@ import org.powermock.reflect.Whitebox; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.util.ReflectionHelpers; import org.smartregister.Context; import org.smartregister.CoreLibrary; +import org.smartregister.anc.library.AncLibrary; import org.smartregister.anc.library.R; import org.smartregister.anc.library.activity.BaseUnitTest; import org.smartregister.anc.library.domain.ButtonAlertStatus; +import org.smartregister.anc.library.helper.ECSyncHelper; +import org.smartregister.anc.library.repository.PatientRepository; +import org.smartregister.anc.library.repository.RegisterQueryProvider; +import org.smartregister.clientandeventmodel.Event; import org.smartregister.repository.AllSharedPreferences; -import org.smartregister.util.Utils; +import org.smartregister.sync.ClientProcessorForJava; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -39,6 +52,9 @@ import edu.emory.mathcs.backport.java.util.Collections; import timber.log.Timber; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.smartregister.anc.library.util.Utils.getKeyByValue; import static org.smartregister.anc.library.util.Utils.getTodayContact; import static org.smartregister.anc.library.util.Utils.hasPendingRequiredFields; @@ -59,6 +75,18 @@ public class UtilsTest extends BaseUnitTest { @Rule public PowerMockRule rule = new PowerMockRule(); + @Mock + private CoreLibrary coreLibrary; + + @Mock + private Context opensrpContext; + + @Mock + private AllSharedPreferences allSharedPreferences; + + @Mock + private AncLibrary ancLibrary; + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -424,4 +452,77 @@ public void testGetDefaultDisplayTemplateOnProfile() { Timber.e(e, " --> testGetDisplayTemplate"); } } + + @Test + public void testBuildRepeatingGroupValuesShouldReturnCorrectGroupNo() throws JSONException { + String strStep1JsonObject = "{\"fields\":[{\"key\":\"previous_visits\",\"type\":\"repeating_group\",\"value\"" + + ":[{\"key\":\"visit_date\"}]}," + + "{\"key\":\"visit_date_128040f1b4034311b34b6ea65a81d3aa\",\"value\":\"2020-09-09\"}]}"; + JSONObject step1JsonObject = new JSONObject(strStep1JsonObject); + HashMap> repeatingGroupNum = Utils.buildRepeatingGroupValues(step1JsonObject.optJSONArray(JsonFormConstants.FIELDS), ConstantsUtils.JsonFormKeyUtils.PREVIOUS_VISITS); + assertEquals(1, repeatingGroupNum.size()); + } + + @Test + @PrepareForTest(PatientRepository.class) + public void testCreateContactVisitEventShouldCreateEvent() throws Exception { + Map womanDetails = new HashMap<>(); + womanDetails.put(DBConstantsUtils.KeyUtils.NEXT_CONTACT, "2"); + womanDetails.put(DBConstantsUtils.KeyUtils.VISIT_START_DATE, "2020-09-08"); + womanDetails.put(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID, "232-sds-34"); + ReflectionHelpers.setStaticField(CoreLibrary.class, "instance", coreLibrary); + Mockito.when(coreLibrary.context()).thenReturn(opensrpContext); + Mockito.when(opensrpContext.allSharedPreferences()).thenReturn(allSharedPreferences); + + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", ancLibrary); + Mockito.doReturn(new RegisterQueryProvider()).when(ancLibrary).getRegisterQueryProvider(); + PowerMockito.mockStatic(PatientRepository.class); + PowerMockito.doNothing().when(PatientRepository.class, "updateContactVisitStartDate", + Mockito.anyString(), Mockito.anyString()); + Event contactVisitEvent = Utils.createContactVisitEvent(new ArrayList<>(), womanDetails, null); + assertNotNull(contactVisitEvent); + assertNotNull(contactVisitEvent.getFormSubmissionId()); + assertEquals(womanDetails.get(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID), contactVisitEvent.getBaseEntityId()); + assertEquals(ConstantsUtils.EventTypeUtils.CONTACT_VISIT, contactVisitEvent.getEventType()); + assertFalse(contactVisitEvent.getDetails().isEmpty()); + assertEquals("Contact 2", contactVisitEvent.getDetails().get(ConstantsUtils.CONTACT)); + } + + @Test + @PrepareForTest(PatientRepository.class) + public void testCreatePreviousVisitFromGroupShouldPassCorrectArgs() throws Exception { + String baseEntityId = "089sd-342"; + String previous_visits_map = "{\"269b6b6d1ece4781b58bf91eb05a740e\":{\"visit_date\":\"26-10-2019\"},\"1cd33bfbf4594e619841472933e34c3f\":{\"visit_date\":\"26-02-2020\"}}"; + + ReflectionHelpers.setStaticField(CoreLibrary.class, "instance", coreLibrary); + Mockito.when(coreLibrary.context()).thenReturn(opensrpContext); + Mockito.when(opensrpContext.allSharedPreferences()).thenReturn(allSharedPreferences); + Date date = new Date(); + Mockito.when(allSharedPreferences.fetchLastUpdatedAtDate(0)).thenReturn(date.getTime()); + + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", ancLibrary); + Mockito.doReturn(new RegisterQueryProvider()).when(ancLibrary).getRegisterQueryProvider(); + + ECSyncHelper ecSyncHelper = Mockito.mock(ECSyncHelper.class); + Mockito.doNothing().when(ecSyncHelper).addEvent(Mockito.anyString(), Mockito.any(JSONObject.class)); + + ClientProcessorForJava clientProcessorForJava = Mockito.mock(ClientProcessorForJava.class); + Mockito.when(ancLibrary.getClientProcessorForJava()).thenReturn(clientProcessorForJava); + + Mockito.doReturn(ecSyncHelper).when(ancLibrary).getEcSyncHelper(); + PowerMockito.mockStatic(PatientRepository.class); + PowerMockito.doNothing().when(PatientRepository.class, "updateContactVisitStartDate", + Mockito.anyString(), Mockito.anyString()); + Utils.createPreviousVisitFromGroup(previous_visits_map, baseEntityId); + + ArgumentCaptor> listArgumentCaptor = ArgumentCaptor.forClass(List.class); + Mockito.verify(ecSyncHelper, Mockito.times(1)).getEvents(listArgumentCaptor.capture()); + assertNotNull(listArgumentCaptor.getValue()); + assertEquals(2, listArgumentCaptor.getValue().size()); + + Mockito.verify(clientProcessorForJava, Mockito.times(1)).processClient(Mockito.anyList()); + Mockito.verify(allSharedPreferences).saveLastUpdatedAtDate(Mockito.eq(date.getTime())); + + } + } From 30c223bd12b59ead345a19ad451f201e91dc298b Mon Sep 17 00:00:00 2001 From: bennsimon Date: Wed, 1 Jul 2020 09:12:12 +0300 Subject: [PATCH 18/33] fix tests --- opensrp-anc/build.gradle | 2 +- .../anc/library/activity/BaseHomeRegisterActivityTest.java | 3 +-- .../anc/library/interactor/RegisterInteractorTest.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index 605c6ac77..aa6b62d6d 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -143,7 +143,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.9.2-r116-OPTIMIZED-LOCAL-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.9.2-r117-OPTIMIZED-LOCAL-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java index 6fad7becf..109f211eb 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java @@ -18,7 +18,6 @@ import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.android.controller.ActivityController; -import org.robolectric.util.ReflectionHelpers; import org.smartregister.anc.library.R; import org.smartregister.anc.library.contract.RegisterContract; import org.smartregister.anc.library.domain.AttentionFlag; @@ -33,7 +32,6 @@ import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; import org.smartregister.commonregistry.CommonPersonObjectClient; -import org.smartregister.configurableviews.ConfigurableViewsLibrary; import org.smartregister.configurableviews.model.Field; import org.smartregister.domain.FetchStatus; @@ -58,6 +56,7 @@ public class BaseHomeRegisterActivityTest extends BaseActivityUnitTest { @Mock private List filterList; + @Mock private Field sortField; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java index 451cc4360..8ff42200a 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java @@ -68,7 +68,7 @@ public class RegisterInteractorTest extends BaseUnitTest { private ArgumentCaptor longArgumentCaptor; @Mock - AncLibrary ancLibrary; + private AncLibrary ancLibrary; @Before public void setUp() { From 5932f3dd9b96d55d482061a9ee40f633bbfe4a0f Mon Sep 17 00:00:00 2001 From: bennsimon Date: Tue, 14 Jul 2020 09:50:45 +0300 Subject: [PATCH 19/33] update opensrp url to anc add check got contact summar model to avoid duplicates --- .../anc/library/model/ContactSummaryModel.java | 11 +++++++++++ .../library/presenter/ContactSummaryPresenter.java | 7 ++++++- reference-app/build.gradle | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/model/ContactSummaryModel.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/model/ContactSummaryModel.java index de5561635..b77174a97 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/model/ContactSummaryModel.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/model/ContactSummaryModel.java @@ -1,5 +1,7 @@ package org.smartregister.anc.library.model; +import android.support.annotation.Nullable; + import org.json.JSONObject; import java.util.Date; @@ -68,4 +70,13 @@ public Date getLocalDate() { public void setLocalDate(Date localDate) { this.localDate = localDate; } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj == null) { + return false; + } + String key = ((ContactSummaryModel) obj).getContactName(); + return this.getContactName().equals(key); + } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactSummaryPresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactSummaryPresenter.java index b45c7512c..38b981f48 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactSummaryPresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactSummaryPresenter.java @@ -78,7 +78,12 @@ public void onUpcomingContactsFetched(List upcomingContacts if ((upcomingContacts == null || upcomingContacts.isEmpty()) && lastContact >= 0) { return; } - this.upcomingContacts.addAll(upcomingContacts); + this.upcomingContacts.clear(); + for (ContactSummaryModel contactSummaryModel : upcomingContacts) { + if (!this.upcomingContacts.contains(contactSummaryModel)) { + this.upcomingContacts.add(contactSummaryModel); + } + } addUpcomingContactsToView(); getView().updateRecordedContact(lastContact); } diff --git a/reference-app/build.gradle b/reference-app/build.gradle index 83a7e5ef3..1330a5c54 100644 --- a/reference-app/build.gradle +++ b/reference-app/build.gradle @@ -130,7 +130,7 @@ android { } debug { - resValue "string", 'opensrp_url', '"https://opensrp-jembi-eregister.smartregister.org/opensrp/"' //TODO should be changed to anc staging url + resValue "string", 'opensrp_url', '"https://anc-stage.smartregister.org/opensrp/"' buildConfigField "int", "OPENMRS_UNIQUE_ID_INITIAL_BATCH_SIZE", '250' buildConfigField "int", "OPENMRS_UNIQUE_ID_BATCH_SIZE", '100' buildConfigField "int", "OPENMRS_UNIQUE_ID_SOURCE", '2' From 645a680922dbb6d2ac4bc5443a12bdb8cb99ad5b Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 23 Jul 2020 10:23:59 +0300 Subject: [PATCH 20/33] add anc maternity transfer logic --- gradle.properties | 2 +- opensrp-anc/build.gradle | 2 +- .../anc/library/activity/BaseActivity.java | 3 +- .../activity/BaseHomeRegisterActivity.java | 4 +- .../anc/library/activity/ProfileActivity.java | 3 +- .../library/adapter/LastContactAdapter.java | 28 ++- .../AncMaternityTransferProcessor.java | 171 ++++++++++++++++++ .../library/event/PatientRemovedEvent.java | 9 + .../library/helper/AncRulesEngineFactory.java | 16 +- .../interactor/ClientTransferProcessor.java | 19 ++ .../interactor/RegisterInteractor.java | 104 +++++++---- .../library/presenter/ProfilePresenter.java | 3 +- .../library/presenter/RegisterPresenter.java | 1 - .../repository/PreviousContactRepository.java | 17 +- .../anc/library/task/FinalizeContactTask.java | 22 ++- .../anc/library/util/ANCJsonFormUtils.java | 10 +- .../anc/library/util/AncMetadata.java | 15 ++ .../anc/library/util/ConstantsUtils.java | 5 + .../smartregister/anc/library/util/Utils.java | 150 ++++++++------- 19 files changed, 438 insertions(+), 146 deletions(-) create mode 100644 opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java create mode 100644 opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ClientTransferProcessor.java diff --git a/gradle.properties b/gradle.properties index 3b5bec98d..3af924ab9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.3.13-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.26-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index aa6b62d6d..7ce350748 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -143,7 +143,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.9.2-r117-OPTIMIZED-LOCAL-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:1.9.2-r140-OPTIMIZED-LOCAL-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseActivity.java index c45df3737..08dff3aa4 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseActivity.java @@ -8,8 +8,8 @@ import org.smartregister.anc.library.AncLibrary; import org.smartregister.anc.library.R; import org.smartregister.anc.library.contract.SiteCharacteristicsContract; -import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.ANCJsonFormUtils; +import org.smartregister.anc.library.util.ConstantsUtils; import java.util.Map; @@ -33,7 +33,6 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ANCJsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == RESULT_OK) { try { String jsonString = data.getStringExtra("json"); - Timber.d("JSONResult %s", jsonString); presenter.saveSiteCharacteristics(jsonString); } catch (Exception e) { Timber.e(e); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivity.java index 393fff3b2..86ed8e3e4 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivity.java @@ -38,9 +38,9 @@ import org.smartregister.anc.library.fragment.SortFilterFragment; import org.smartregister.anc.library.presenter.RegisterPresenter; import org.smartregister.anc.library.repository.PatientRepository; +import org.smartregister.anc.library.util.ANCFormUtils; import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; -import org.smartregister.anc.library.util.ANCFormUtils; import org.smartregister.anc.library.util.DBConstantsUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.commonregistry.CommonPersonObjectClient; @@ -227,7 +227,7 @@ protected void onActivityResultExtended(int requestCode, int resultCode, Intent if (requestCode == ANCJsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == Activity.RESULT_OK) { try { String jsonString = data.getStringExtra(ConstantsUtils.JsonFormExtraUtils.JSON); - Timber.d(jsonString); + //Timber.d(jsonString); if (StringUtils.isNotBlank(jsonString)) { JSONObject form = new JSONObject(jsonString); switch (form.getString(ANCJsonFormUtils.ENCOUNTER_TYPE)) { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ProfileActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ProfileActivity.java index c148f5d02..9306cb12d 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ProfileActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ProfileActivity.java @@ -36,9 +36,9 @@ import org.smartregister.anc.library.fragment.ProfileOverviewFragment; import org.smartregister.anc.library.fragment.ProfileTasksFragment; import org.smartregister.anc.library.presenter.ProfilePresenter; +import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; -import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.anc.library.view.CopyToClipboardDialog; import org.smartregister.repository.AllSharedPreferences; @@ -148,6 +148,7 @@ public void onClick(View view) { if (StringUtils.isNotBlank(baseEntityId)) { Utils.proceedToContact(baseEntityId, detailMap, getActivity()); + finish(); } } else { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java index 4dc45d19b..f25b8854d 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java @@ -2,6 +2,7 @@ import android.content.Context; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.constraint.ConstraintLayout; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; @@ -13,11 +14,14 @@ import org.apache.commons.lang3.StringUtils; import org.jeasy.rules.api.Facts; +import org.joda.time.LocalDate; +import org.joda.time.Weeks; import org.smartregister.anc.library.R; import org.smartregister.anc.library.domain.LastContactDetailsWrapper; import org.smartregister.anc.library.domain.YamlConfigWrapper; -import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.ANCJsonFormUtils; +import org.smartregister.anc.library.util.ConstantsUtils; +import org.smartregister.anc.library.util.Utils; import java.util.List; @@ -56,6 +60,8 @@ public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) { contactNo = lastContactDetails.getContactNo(); } + gestAge = updateGABasedOnDueStrategy(gestAge, contactNo, lastContactDetails); + if (!StringUtils.isEmpty(gestAge)) { viewHolder.contactTextView.setText( !StringUtils.isEmpty(contactNo) ? String @@ -78,6 +84,26 @@ public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) { } } + private String updateGABasedOnDueStrategy(@Nullable String gestAge, @NonNull String contactNo, @NonNull LastContactDetailsWrapper lastContactDetails) { + if (ConstantsUtils.DueCheckStrategy.CHECK_FOR_FIRST_CONTACT.equals(Utils.getDueCheckStrategy())) { + Facts facts = lastContactDetails.getFacts(); + + if (StringUtils.isBlank(gestAge)) { + if ("1".equals(contactNo.trim())) + gestAge = "-"; + else if (lastContactDetailsList.size() > 1) { + LastContactDetailsWrapper firstLastContactDetailsWrapper = lastContactDetailsList.get(0); + Facts firstFacts = firstLastContactDetailsWrapper.getFacts(); + String edd = Utils.reverseHyphenSeperatedValues(firstFacts.get(ConstantsUtils.EDD), "-"); + String contactDate = facts.get(ConstantsUtils.CONTACT_DATE); + int diffWeeks = ConstantsUtils.DELIVERY_DATE_WEEKS - Math.abs(Weeks.weeksBetween(LocalDate.parse(edd), LocalDate.parse(contactDate)).getWeeks()); + gestAge = String.valueOf(diffWeeks); + } + } + } + return gestAge; + } + private void createContactDetailsView(List data, Facts facts, ViewHolder viewHolder) { if (data != null && data.size() > 0) { for (int position = 0; position < data.size(); position++) { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java new file mode 100644 index 000000000..f55acce8d --- /dev/null +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java @@ -0,0 +1,171 @@ +package org.smartregister.anc.library.configuration; + + +import android.support.annotation.NonNull; + +import com.vijay.jsonwizard.constants.JsonFormConstants; + +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.smartregister.anc.library.AncLibrary; +import org.smartregister.anc.library.interactor.ClientTransferProcessor; +import org.smartregister.anc.library.model.PreviousContact; +import org.smartregister.anc.library.util.ANCJsonFormUtils; +import org.smartregister.anc.library.util.Utils; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.domain.tag.FormTag; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import timber.log.Timber; + +import static org.smartregister.anc.library.util.ANCJsonFormUtils.METADATA; +import static org.smartregister.util.JsonFormUtils.ENTITY_ID; + +public class AncMaternityTransferProcessor implements ClientTransferProcessor { + + private String baseEntityId = null; + + @Override + public void startTransferProcessing(@NonNull JSONObject closeForm) throws Exception { + setBaseEntityId(closeForm.optString(ENTITY_ID)); + + //create transfer event + Event transferEvent = createAncMaternityTransferEvent(closeForm); + saveEvent(transferEvent, transferEvent.getBaseEntityId()); + + //create anc close event + Event closeEvent = createAncCloseEvent(closeForm); + saveEvent(closeEvent, transferEvent.getBaseEntityId()); + + long lastSyncTimeStamp = Utils.getAllSharedPreferences().fetchLastUpdatedAtDate(0); + Date lastSyncDate = new Date(lastSyncTimeStamp); + AncLibrary.getInstance().getClientProcessorForJava() + .processClient( + AncLibrary.getInstance() + .getEcSyncHelper() + .getEvents(Arrays.asList(transferEvent.getFormSubmissionId(), closeEvent.getFormSubmissionId()))); + Utils.getAllSharedPreferences().saveLastUpdatedAtDate(lastSyncDate.getTime()); + } + + private void saveEvent(@NonNull Event event, @NonNull String baseEntityId) throws JSONException { + JSONObject eventJson = new JSONObject(ANCJsonFormUtils.gson.toJson(event)); + AncLibrary.getInstance().getEcSyncHelper().addEvent(baseEntityId, eventJson); + } + + protected Event createAncMaternityTransferEvent(@NonNull JSONObject closeForm) { + JSONObject jsonFormObject = populateTransferForm(closeForm); + FormTag formTag = ANCJsonFormUtils.getFormTag(Utils.getAllSharedPreferences()); + Event event = ANCJsonFormUtils.createEvent(com.vijay.jsonwizard.utils.FormUtils.getMultiStepFormFields(jsonFormObject), + jsonFormObject.optJSONObject(METADATA), formTag, getBaseEntityId(), jsonFormObject.optString(JsonFormConstants.ENCOUNTER_TYPE), ""); + ANCJsonFormUtils.tagSyncMetadata(Utils.getAllSharedPreferences(), event); + return event; + } + + protected Event createAncCloseEvent(@NonNull JSONObject closeFormObject) { + FormTag formTag = ANCJsonFormUtils.getFormTag(Utils.getAllSharedPreferences()); + Event event = ANCJsonFormUtils.createEvent(com.vijay.jsonwizard.utils.FormUtils.getMultiStepFormFields(closeFormObject), + closeFormObject.optJSONObject(METADATA), formTag, closeFormObject.optString(ENTITY_ID), closeFormObject.optString(JsonFormConstants.ENCOUNTER_TYPE), ""); + ANCJsonFormUtils.tagSyncMetadata(Utils.getAllSharedPreferences(), event); + return event; + } + + + @Override + public String transferForm() { + return ""; + } + + @Override + public Map columnMap() { + return new HashMap<>(); + } + + @Override + public Map details() { + String[] keyStrings = previousContactKeys(); + HashMap transferDetails = new HashMap<>(); + List previousContacts = AncLibrary.getInstance() + .getPreviousContactRepository() + .getPreviousContacts(getBaseEntityId(), keyStrings); + for (PreviousContact previousContact : previousContacts) { + transferDetails.put(previousContact.getKey(), previousContact.getValue()); + } + return transferDetails; + } + + @NotNull + protected String[] previousContactKeys() { + return new String[]{"gravida", "prev_preg_comps", + "prev_preg_comps_other", "miscarriages_abortions", "occupation", "occupation_other", + "religion_other", "religion", "marital_status", "educ_level"}; + } + + @Override + public JSONObject populateTransferForm(@NonNull JSONObject closeForm) { + JSONObject jsonForm = null; + try { + if (StringUtils.isNotBlank(transferForm())) { + jsonForm = Utils.getFormUtils().getFormJson(transferForm()); + if (jsonForm != null) { + Map clientDetails = details(); + Map columnMap = columnMap(); + JSONArray fields = jsonForm.optJSONObject(JsonFormConstants.STEP1) + .optJSONArray(JsonFormConstants.FIELDS); + + for (int i = 0; i < fields.length(); i++) { + JSONObject object = fields.optJSONObject(i); + String key = object.optString(JsonFormConstants.KEY); + + if (clientDetails.get(key) != null) { + object.put(JsonFormConstants.VALUE, updateValue(key, clientDetails.get(key))); + } + + if (columnMap.get(key) != null) { + object.put(JsonFormConstants.KEY, columnMap.get(key)); + } + } + + JSONArray closeFormFields = com.vijay.jsonwizard.utils.FormUtils.getMultiStepFormFields(closeForm); + List closeFormFieldsList = getCloseFormFieldsList(); + for (int i = 0; i < closeFormFields.length() && !closeFormFieldsList.isEmpty(); i++) { + JSONObject object = closeFormFields.optJSONObject(i); + String key = object.optString(JsonFormConstants.KEY); + if (closeFormFieldsList.contains(key)) { + fields.put(object); + closeFormFieldsList.remove(key); + } + } + } + } + } catch (JSONException e) { + Timber.e(e); + } + return jsonForm; + } + + protected String updateValue(@NonNull String key, @NonNull String value) { + Timber.i("key %s", key); + return value; + } + + protected List getCloseFormFieldsList() { + return new ArrayList<>(Arrays.asList("onset_labour_date", "onset_labour_time")); + } + + public String getBaseEntityId() { + return baseEntityId; + } + + public void setBaseEntityId(String baseEntityId) { + this.baseEntityId = baseEntityId; + } +} diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/event/PatientRemovedEvent.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/event/PatientRemovedEvent.java index b6dc727b6..5cce2d4a9 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/event/PatientRemovedEvent.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/event/PatientRemovedEvent.java @@ -5,4 +5,13 @@ */ public class PatientRemovedEvent extends BaseEvent { + private String closedNature; + + public String getClosedNature() { + return closedNature; + } + + public void setClosedNature(String closedNature) { + this.closedNature = closedNature; + } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/helper/AncRulesEngineFactory.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/helper/AncRulesEngineFactory.java index 704c55a5f..aea7f5a60 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/helper/AncRulesEngineFactory.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/helper/AncRulesEngineFactory.java @@ -15,6 +15,7 @@ public class AncRulesEngineFactory extends RulesEngineFactory { private Map globalValues; private AncRulesEngineHelper ancRulesEngineHelper; private String selectedRuleName; + private Facts globalFacts; public AncRulesEngineFactory(Context context, Map globalValues, JSONObject mJSONObject) { @@ -23,20 +24,21 @@ public AncRulesEngineFactory(Context context, Map globalValues, this.ancRulesEngineHelper.setJsonObject(mJSONObject); this.globalValues = globalValues; - } - @Override - protected Facts initializeFacts(Facts facts) { if (globalValues != null) { + globalFacts = new Facts(); for (Map.Entry entry : globalValues.entrySet()) { - facts.put(RuleConstant.PREFIX.GLOBAL + entry.getKey(), getValue(entry.getValue())); + globalFacts.put(RuleConstant.PREFIX.GLOBAL + entry.getKey(), getValue(entry.getValue())); } - - facts.asMap().putAll(globalValues); } + } + @Override + protected Facts initializeFacts(Facts facts) { + if (globalFacts != null) { + facts.asMap().putAll(globalFacts.asMap()); + } selectedRuleName = facts.get(RuleConstant.SELECTED_RULE); - facts.put("helper", ancRulesEngineHelper); return facts; } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ClientTransferProcessor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ClientTransferProcessor.java new file mode 100644 index 000000000..b3dbf5165 --- /dev/null +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ClientTransferProcessor.java @@ -0,0 +1,19 @@ +package org.smartregister.anc.library.interactor; + +import android.support.annotation.NonNull; + +import org.json.JSONObject; + +import java.util.Map; + +public interface ClientTransferProcessor { + void startTransferProcessing(@NonNull JSONObject closeForm) throws Exception; + + String transferForm(); + + Map columnMap(); + + Map details(); + + JSONObject populateTransferForm(JSONObject closeForm); +} diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java index 767b0fab1..f733a9d6f 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java @@ -1,11 +1,16 @@ package org.smartregister.anc.library.interactor; import android.content.ContentValues; +import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; import android.support.v4.util.Pair; +import com.vijay.jsonwizard.constants.JsonFormConstants; +import com.vijay.jsonwizard.utils.FormUtils; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Triple; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.smartregister.anc.library.AncLibrary; @@ -121,58 +126,85 @@ private void createPartialPreviousEvent(Pair pair, String baseEnt @Override public void removeWomanFromANCRegister(final String closeFormJsonString, final String providerId) { Runnable runnable = () -> { + PatientRemovedEvent patientRemovedEvent = new PatientRemovedEvent(); try { - Triple triple = ANCJsonFormUtils - .saveRemovedFromANCRegister(getAllSharedPreferences(), closeFormJsonString, providerId); + boolean isClientToBeTransferred = processTransfer(closeFormJsonString, patientRemovedEvent); - if (triple == null) { - return; - } + if (!isClientToBeTransferred) { + Triple triple = ANCJsonFormUtils + .saveRemovedFromANCRegister(getAllSharedPreferences(), closeFormJsonString, providerId); + + if (triple == null) { + return; + } - boolean isDeath = triple.getLeft(); - Event event = triple.getMiddle(); - Event updateChildDetailsEvent = triple.getRight(); + boolean isDeath = triple.getLeft(); + Event event = triple.getMiddle(); + Event updateChildDetailsEvent = triple.getRight(); - String baseEntityId = event.getBaseEntityId(); + String baseEntityId = event.getBaseEntityId(); - //Update client to deceased - JSONObject client = getSyncHelper().getClient(baseEntityId); - if (isDeath) { - client.put(ConstantsUtils.JsonFormKeyUtils.DEATH_DATE, Utils.getTodaysDate()); - client.put(ConstantsUtils.JsonFormKeyUtils.DEATH_DATE_APPROX, false); - } - JSONObject attributes = client.getJSONObject(ConstantsUtils.JsonFormKeyUtils.ATTRIBUTES); - attributes.put(DBConstantsUtils.KeyUtils.DATE_REMOVED, Utils.getTodaysDate()); - client.put(ConstantsUtils.JsonFormKeyUtils.ATTRIBUTES, attributes); - getSyncHelper().addClient(baseEntityId, client); - - //Add Remove Event for child to flag for Server delete - JSONObject eventJson = new JSONObject(ANCJsonFormUtils.gson.toJson(event)); - getSyncHelper().addEvent(event.getBaseEntityId(), eventJson); - - //Update Child Entity to include death date - JSONObject eventJsonUpdateChildEvent = - new JSONObject(ANCJsonFormUtils.gson.toJson(updateChildDetailsEvent)); - getSyncHelper().addEvent(baseEntityId, eventJsonUpdateChildEvent); //Add event to flag server update - - //Update REGISTER and FTS Tables - if (getAllCommonsRepository() != null) { - ContentValues values = new ContentValues(); - values.put(DBConstantsUtils.KeyUtils.DATE_REMOVED, Utils.getTodaysDate()); - getAllCommonsRepository().update(DBConstantsUtils.DEMOGRAPHIC_TABLE_NAME, values, baseEntityId); - getAllCommonsRepository().updateSearch(baseEntityId); + //Update client to deceased + JSONObject client = getSyncHelper().getClient(baseEntityId); + if (isDeath) { + client.put(ConstantsUtils.JsonFormKeyUtils.DEATH_DATE, Utils.getTodaysDate()); + client.put(ConstantsUtils.JsonFormKeyUtils.DEATH_DATE_APPROX, false); + } + JSONObject attributes = client.getJSONObject(ConstantsUtils.JsonFormKeyUtils.ATTRIBUTES); + attributes.put(DBConstantsUtils.KeyUtils.DATE_REMOVED, Utils.getTodaysDate()); + client.put(ConstantsUtils.JsonFormKeyUtils.ATTRIBUTES, attributes); + getSyncHelper().addClient(baseEntityId, client); + + //Add Remove Event for child to flag for Server delete + JSONObject eventJson = new JSONObject(ANCJsonFormUtils.gson.toJson(event)); + getSyncHelper().addEvent(event.getBaseEntityId(), eventJson); + + //Update Child Entity to include death date + JSONObject eventJsonUpdateChildEvent = + new JSONObject(ANCJsonFormUtils.gson.toJson(updateChildDetailsEvent)); + getSyncHelper().addEvent(baseEntityId, eventJsonUpdateChildEvent); //Add event to flag server update + + //Update REGISTER and FTS Tables + if (getAllCommonsRepository() != null) { + ContentValues values = new ContentValues(); + values.put(DBConstantsUtils.KeyUtils.DATE_REMOVED, Utils.getTodaysDate()); + getAllCommonsRepository().update(DBConstantsUtils.DEMOGRAPHIC_TABLE_NAME, values, baseEntityId); + getAllCommonsRepository().updateSearch(baseEntityId); + } } } catch (Exception e) { Timber.e(e, " --> removeWomanFromANCRegister"); } finally { - Utils.postStickyEvent(new PatientRemovedEvent()); + Utils.postStickyEvent(patientRemovedEvent); } }; appExecutors.diskIO().execute(runnable); } + protected boolean processTransfer(@NonNull String closeFormJsonString, @NonNull PatientRemovedEvent patientRemovedEvent) throws Exception { + JSONObject closeForm = new JSONObject(closeFormJsonString); + JSONArray fields = FormUtils.getMultiStepFormFields(closeForm); + for (int i = 0; i < fields.length(); i++) { + JSONObject object = fields.optJSONObject(i); + String key = object.optString(JsonFormConstants.KEY); + if ("anc_close_reason".equals(key)) { + String value = object.optString(JsonFormConstants.VALUE); + if (StringUtils.isNotBlank(value) && value.contains("labour")) { + patientRemovedEvent.setClosedNature(ConstantsUtils.ClosedNature.TRANSFERRED); + AncLibrary.getInstance() + .getAncMetadata() + .getTransferProcessorByEventType(ConstantsUtils.EventTypeUtils.ANC_MATERNITY_TRANSFER) + .startTransferProcessing(closeForm); + return true; + } + break; + } + } + return false; + } + public AllCommonsRepository getAllCommonsRepository() { if (allCommonsRepository == null) { allCommonsRepository = diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ProfilePresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ProfilePresenter.java index 1588dbfcf..729eb1877 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ProfilePresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ProfilePresenter.java @@ -12,9 +12,9 @@ import org.smartregister.anc.library.interactor.ContactInteractor; import org.smartregister.anc.library.interactor.ProfileInteractor; import org.smartregister.anc.library.interactor.RegisterInteractor; +import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; -import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.clientandeventmodel.Client; import org.smartregister.clientandeventmodel.Event; @@ -112,7 +112,6 @@ public void refreshProfileView(String baseEntityId) { public void processFormDetailsSave(Intent data, AllSharedPreferences allSharedPreferences) { try { String jsonString = data.getStringExtra(ConstantsUtils.IntentKeyUtils.JSON); - Timber.d(jsonString); if (jsonString != null) { JSONObject form = new JSONObject(jsonString); getProfileView().showProgressDialog( diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/RegisterPresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/RegisterPresenter.java index e9507dc5e..47f252b98 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/RegisterPresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/RegisterPresenter.java @@ -136,7 +136,6 @@ public void closeAncRecord(String jsonString) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getView().getContext()); AllSharedPreferences allSharedPreferences = new AllSharedPreferences(preferences); - Timber.d(jsonString); getView().showProgressDialog(jsonString.contains(ConstantsUtils.EventTypeUtils.CLOSE) ? R.string.removing_dialog_title : R.string.saving_dialog_title); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java index 08a025acc..cc5d261b3 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java @@ -1,6 +1,8 @@ package org.smartregister.anc.library.repository; import android.content.ContentValues; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; @@ -11,7 +13,6 @@ import org.jeasy.rules.api.Facts; import org.smartregister.anc.library.model.PreviousContact; import org.smartregister.anc.library.model.PreviousContactsSummaryModel; -import org.smartregister.anc.library.util.ANCFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.repository.BaseRepository; @@ -126,21 +127,21 @@ private PreviousContact getContactResult(Cursor cursor) { /** * @param baseEntityId is the Base entity Id No to filter by - * @param keysList an optional list of keys to query null otherwise to get all keys for that base entity id + * @param keysArr an optional list of keys to query null otherwise to get all keys for that base entity id */ - public List getPreviousContacts(String baseEntityId, List keysList) { + public List getPreviousContacts(@NonNull String baseEntityId, @Nullable String[] keysArr) { String orderBy = ID + " DESC "; Cursor mCursor = null; String selection = ""; String[] selectionArgs = null; List previousContacts = new ArrayList<>(); try { - SQLiteDatabase db = getWritableDatabase(); + SQLiteDatabase db = getReadableDatabase(); if (StringUtils.isNotBlank(baseEntityId)) { - if (keysList != null) { - selection = BASE_ENTITY_ID + " = ? " + BaseRepository.COLLATE_NOCASE + " AND " + KEY + " IN (?) " + BaseRepository.COLLATE_NOCASE; - selectionArgs = new String[]{baseEntityId, ANCFormUtils.getListValuesAsString(keysList)}; + if (keysArr != null) { + selection = BASE_ENTITY_ID + " = ? " + BaseRepository.COLLATE_NOCASE + " AND " + KEY + " IN ( '" + StringUtils.join(keysArr, "','") + "') "; + selectionArgs = new String[]{baseEntityId}; } else { selection = BASE_ENTITY_ID + " = ? " + BaseRepository.COLLATE_NOCASE; selectionArgs = new String[]{baseEntityId}; @@ -155,7 +156,7 @@ public List getPreviousContacts(String baseEntityId, List { private HashMap newWomanProfileDetails; - private Context context; + private WeakReference contextWeakReference; private ProfileContract.Presenter mProfilePresenter; private Intent intent; public FinalizeContactTask(Context context, ProfileContract.Presenter mProfilePresenter, Intent intent) { - this.context = context; + this.contextWeakReference = new WeakReference<>(context); this.mProfilePresenter = mProfilePresenter; this.intent = intent; } @@ -36,7 +37,7 @@ protected Void doInBackground(Void... nada) { if (contactNo < 0) { womanProfileDetails.put(ConstantsUtils.REFERRAL, String.valueOf(contactNo)); } - newWomanProfileDetails = mProfilePresenter.saveFinishForm(womanProfileDetails, context); + newWomanProfileDetails = mProfilePresenter.saveFinishForm(womanProfileDetails, contextWeakReference.get()); } catch (Exception e) { Timber.e(e); } @@ -47,22 +48,23 @@ protected Void doInBackground(Void... nada) { @Override protected void onPreExecute() { - ((ContactSummaryFinishActivity) context).showProgressDialog(R.string.please_wait_message); - ((ContactSummaryFinishActivity) context).getProgressDialog().setMessage( - String.format(context.getString(R.string.finalizing_contact), + ((ContactSummaryFinishActivity) contextWeakReference.get()).showProgressDialog(R.string.please_wait_message); + ((ContactSummaryFinishActivity) contextWeakReference.get()).getProgressDialog().setMessage( + String.format(contextWeakReference.get().getString(R.string.finalizing_contact), intent.getExtras().getInt(ConstantsUtils.IntentKeyUtils.CONTACT_NO)) + " data"); - ((ContactSummaryFinishActivity) context).getProgressDialog().show(); + ((ContactSummaryFinishActivity) contextWeakReference.get()).getProgressDialog().show(); } @Override protected void onPostExecute(Void result) { - ((ContactSummaryFinishActivity) context).hideProgressDialog(); + ((ContactSummaryFinishActivity) contextWeakReference.get()).hideProgressDialog(); Intent contactSummaryIntent = - new Intent(context, ContactSummarySendActivity.class); + new Intent(contextWeakReference.get(), ContactSummarySendActivity.class); contactSummaryIntent.putExtra(ConstantsUtils.IntentKeyUtils.BASE_ENTITY_ID, intent.getExtras().getString(ConstantsUtils.IntentKeyUtils.BASE_ENTITY_ID)); contactSummaryIntent.putExtra(ConstantsUtils.IntentKeyUtils.CLIENT_MAP, newWomanProfileDetails); + contextWeakReference.get().startActivity(contactSummaryIntent); - context.startActivity(contactSummaryIntent); + ((ContactSummaryFinishActivity) contextWeakReference.get()).finish(); } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java index 4e09524a9..1da23f9d6 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java @@ -131,7 +131,7 @@ public static JSONObject getFormAsJson(JSONObject form, String formName, String } else { Timber.tag(TAG).w("Unsupported form requested for launch %s", formName); } - Timber.d("form is %s", form.toString()); + //Timber.d("form is %s", form.toString()); return form; } @@ -332,7 +332,7 @@ private static String initializeFirstContactValues(@NonNull JSONArray fields) th } JSONObject lastContactDateJSONObject = getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE); - lastContactDateJSONObject.put(ANCJsonFormUtils.VALUE, previousVisitsMapItem.get(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE)); + lastContactDateJSONObject.put(ANCJsonFormUtils.VALUE, Utils.reverseHyphenSeperatedValues(previousVisitsMapItem.get(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE), "-")); } } JSONObject nextContactJSONObject = getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT); @@ -483,7 +483,7 @@ public static String getAutoPopulatedJsonEditRegisterFormString(Context context, lpv.init(); } - Timber.d("Form is %s", form.toString()); + //Timber.d("Form is %s", form.toString()); if (form != null) { form.put(ANCJsonFormUtils.ENTITY_ID, womanClient.get(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID)); @@ -624,7 +624,7 @@ private static void formatEdd(Map womanClient, JSONObject jsonOb public static void startFormForEdit(Activity context, int jsonFormActivityRequestCode, String metaData) { Intent intent = new Intent(context, EditJsonFormActivity.class); intent.putExtra(ConstantsUtils.IntentKeyUtils.JSON, metaData); - Timber.d("form is %s", metaData); + //Timber.d("form is %s", metaData); context.startActivityForResult(intent, jsonFormActivityRequestCode); } @@ -776,7 +776,7 @@ public static String getAutoPopulatedSiteCharacteristicsEditFormString(Context c Map characteristics) { try { JSONObject form = FormUtils.getInstance(context).getFormJson(ConstantsUtils.JsonFormUtils.ANC_SITE_CHARACTERISTICS); - Timber.d("Form is " + form.toString()); + //Timber.d("Form is " + form.toString()); if (form != null) { form.put(ANCJsonFormUtils.ENCOUNTER_TYPE, ConstantsUtils.EventTypeUtils.SITE_CHARACTERISTICS); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/AncMetadata.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/AncMetadata.java index 96f18c309..3de33a089 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/AncMetadata.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/AncMetadata.java @@ -1,9 +1,11 @@ package org.smartregister.anc.library.util; import org.smartregister.anc.library.BuildConfig; +import org.smartregister.anc.library.interactor.ClientTransferProcessor; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Set; @@ -14,6 +16,7 @@ public class AncMetadata { private ArrayList locationLevels; private ArrayList healthFacilityLevels; private Set fieldsWithLocationHierarchy; + private HashMap transferProcessorHashMap = new HashMap<>(); public AncMetadata() { locationLevels = new ArrayList<>(Arrays.asList(BuildConfig.LOCATION_LEVELS)); @@ -58,4 +61,16 @@ public Set getFieldsWithLocationHierarchy() { public void setFieldsWithLocationHierarchy(Set fieldsWithLocationHierarchy) { this.fieldsWithLocationHierarchy = fieldsWithLocationHierarchy; } + + public ClientTransferProcessor getTransferProcessorByEventType(String eventType) { + return transferProcessorHashMap.get(eventType); + } + + public void addTransferProcessorToHashMap(String evenType, ClientTransferProcessor clientTransferProcessor) { + this.transferProcessorHashMap.put(evenType, clientTransferProcessor); + } + + public HashMap getTransferProcessorHashMap() { + return transferProcessorHashMap; + } } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java index b75f3e3de..737cf82a9 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ConstantsUtils.java @@ -88,6 +88,10 @@ interface SiteCharacteristics { } } + public interface ClosedNature { + String TRANSFERRED = "transferred"; + } + public static class AncRadioButtonOptionTypesUtils { public static final String DONE_TODAY = "done_today"; public static final String DONE_EARLIER = "done_earlier"; @@ -112,6 +116,7 @@ public static final class EventTypeUtils { public static final String CLOSE = "ANC Close"; public static final String SITE_CHARACTERISTICS = "Site Characteristics"; public static final String CONTACT_VISIT = "Contact Visit"; + public static final String ANC_MATERNITY_TRANSFER = "anc_maternity_transfer"; } public static class JsonFormUtils { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index 4168a3946..6ac625b32 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -53,6 +53,7 @@ import org.smartregister.anc.library.rule.AlertRule; import org.smartregister.clientandeventmodel.Event; import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.util.FormUtils; import org.smartregister.util.JsonFormUtils; import org.smartregister.view.activity.DrishtiApplication; @@ -227,11 +228,12 @@ public static void proceedToContact(String baseEntityId, HashMap ContactModel baseContactModel = new ContactModel(); JSONObject form = baseContactModel.getFormAsJson(quickCheck.getFormName(), baseEntityId, locationId); + JSONObject globals = new JSONObject(); + globals.put(ConstantsUtils.CONTACT_NO, personObjectClient.get(DBConstantsUtils.KeyUtils.NEXT_CONTACT)); if (ConstantsUtils.DueCheckStrategy.CHECK_FOR_FIRST_CONTACT.equals(Utils.getDueCheckStrategy())) { - JSONObject globals = new JSONObject(); globals.put(ConstantsUtils.IS_FIRST_CONTACT, PatientRepository.isFirstVisit(personObjectClient.get(DBConstantsUtils.KeyUtils.BASE_ENTITY_ID))); - form.put(ConstantsUtils.GLOBAL, globals); } + form.put(ConstantsUtils.GLOBAL, globals); String processedForm = ANCFormUtils.getFormJsonCore(partialContactRequest, form).toString(); @@ -655,71 +657,6 @@ public static boolean isTableExists(@NonNull SQLiteDatabase sqliteDatabase, @Non return false; } - /** - * Loads yaml files that contain rules for the profile displays - * - * @param filename {@link String} - * @return - * @throws IOException - */ - public Iterable loadRulesFiles(String filename) throws IOException { - return AncLibrary.getInstance().readYaml(filename); - } - - /** - * Creates the {@link Task} partial contact form. This is done any time we update tasks. - * - * @param baseEntityId {@link String} - The patient base entity id - * @param context {@link Context} - application context - * @param contactNo {@link Integer} - the contact that the partial contact belongs in. - * @param doneTasks {@link List} - A list of all the done/completed tasks. - */ - public void createTasksPartialContainer(String baseEntityId, Context context, int contactNo, List doneTasks) { - try { - if (contactNo > 0 && doneTasks != null && doneTasks.size() > 0) { - JSONArray fields = createFieldsArray(doneTasks); - - ANCFormUtils ANCFormUtils = new ANCFormUtils(); - JSONObject jsonForm = ANCFormUtils.loadTasksForm(context); - if (jsonForm != null) { - ANCFormUtils.updateFormFields(jsonForm, fields); - } - - createAndPersistPartialContact(baseEntityId, contactNo, jsonForm); - } - } catch (JSONException e) { - Timber.e(e, " --> createTasksPartialContainer"); - } - } - - @NotNull - private JSONArray createFieldsArray(List doneTasks) throws JSONException { - JSONArray fields = new JSONArray(); - for (Task task : doneTasks) { - JSONObject field = new JSONObject(task.getValue()); - fields.put(field); - } - return fields; - } - - private void createAndPersistPartialContact(String baseEntityId, int contactNo, JSONObject jsonForm) { - Contact contact = new Contact(); - contact.setJsonForm(String.valueOf(jsonForm)); - contact.setContactNumber(contactNo); - contact.setFormName(ConstantsUtils.JsonFormUtils.ANC_TEST_TASKS); - - ANCFormUtils.persistPartial(baseEntityId, contact); - } - - /** - * Returns the Contact Tasks Repository {@link ContactTasksRepository} - * - * @return contactTasksRepository - */ - public ContactTasksRepository getContactTasksRepositoryHelper() { - return AncLibrary.getInstance().getContactTasksRepository(); - } - public static String getDueCheckStrategy() { return getProperties(AncLibrary.getInstance().getApplicationContext()).getProperty(ConstantsUtils.Properties.DUE_CHECK_STRATEGY, ""); } @@ -828,7 +765,7 @@ public static void createPreviousVisitFromGroup(@NonNull String strGroup, @NonNu JSONObject jsonSingleVisitObject = jsonObject.optJSONObject(repeatingGroupKeys.next()); - String contactDate = jsonSingleVisitObject.optString(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE); + String contactDate = Utils.reverseHyphenSeperatedValues(jsonSingleVisitObject.optString(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE), "-"); Facts entries = new Facts(); @@ -861,7 +798,6 @@ public static void createPreviousVisitFromGroup(@NonNull String strGroup, @NonNu } } - public static Event addContactVisitDetails(String attentionFlagsString, Event event, String referral, String currentContactState) { event.addDetails(ConstantsUtils.DetailsKeyUtils.ATTENTION_FLAG_FACTS, attentionFlagsString); @@ -870,4 +806,80 @@ public static Event addContactVisitDetails(String attentionFlagsString, Event ev } return event; } + + public static FormUtils getFormUtils() { + FormUtils formUtils = null; + try { + formUtils = FormUtils.getInstance(AncLibrary.getInstance().getApplicationContext()); + } catch (Exception e) { + Timber.e(e); + } + return formUtils; + } + + /** + * Loads yaml files that contain rules for the profile displays + * + * @param filename {@link String} + * @return + * @throws IOException + */ + public Iterable loadRulesFiles(String filename) throws IOException { + return AncLibrary.getInstance().readYaml(filename); + } + + /** + * Creates the {@link Task} partial contact form. This is done any time we update tasks. + * + * @param baseEntityId {@link String} - The patient base entity id + * @param context {@link Context} - application context + * @param contactNo {@link Integer} - the contact that the partial contact belongs in. + * @param doneTasks {@link List} - A list of all the done/completed tasks. + */ + public void createTasksPartialContainer(String baseEntityId, Context context, int contactNo, List doneTasks) { + try { + if (contactNo > 0 && doneTasks != null && doneTasks.size() > 0) { + JSONArray fields = createFieldsArray(doneTasks); + + ANCFormUtils ANCFormUtils = new ANCFormUtils(); + JSONObject jsonForm = ANCFormUtils.loadTasksForm(context); + if (jsonForm != null) { + ANCFormUtils.updateFormFields(jsonForm, fields); + } + + createAndPersistPartialContact(baseEntityId, contactNo, jsonForm); + } + } catch (JSONException e) { + Timber.e(e, " --> createTasksPartialContainer"); + } + } + + @NotNull + private JSONArray createFieldsArray(List doneTasks) throws JSONException { + JSONArray fields = new JSONArray(); + for (Task task : doneTasks) { + JSONObject field = new JSONObject(task.getValue()); + fields.put(field); + } + return fields; + } + + private void createAndPersistPartialContact(String baseEntityId, int contactNo, JSONObject jsonForm) { + Contact contact = new Contact(); + contact.setJsonForm(String.valueOf(jsonForm)); + contact.setContactNumber(contactNo); + contact.setFormName(ConstantsUtils.JsonFormUtils.ANC_TEST_TASKS); + + ANCFormUtils.persistPartial(baseEntityId, contact); + } + + /** + * Returns the Contact Tasks Repository {@link ContactTasksRepository} + * + * @return contactTasksRepository + */ + public ContactTasksRepository getContactTasksRepositoryHelper() { + return AncLibrary.getInstance().getContactTasksRepository(); + } + } From af330b4a3a35b0771b4c81bae27e9c3b25d64d2a Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 23 Jul 2020 10:24:33 +0300 Subject: [PATCH 21/33] update anc maternity transfer logic --- .../configuration/AncMaternityTransferProcessor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java index f55acce8d..2025749b0 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java @@ -126,7 +126,7 @@ public JSONObject populateTransferForm(@NonNull JSONObject closeForm) { String key = object.optString(JsonFormConstants.KEY); if (clientDetails.get(key) != null) { - object.put(JsonFormConstants.VALUE, updateValue(key, clientDetails.get(key))); + object.put(JsonFormConstants.VALUE, updateValue(object, clientDetails.get(key))); } if (columnMap.get(key) != null) { @@ -152,8 +152,8 @@ public JSONObject populateTransferForm(@NonNull JSONObject closeForm) { return jsonForm; } - protected String updateValue(@NonNull String key, @NonNull String value) { - Timber.i("key %s", key); + protected String updateValue(@NonNull JSONObject object, @NonNull String value) { + Timber.i("key %s", object.optString(JsonFormConstants.KEY)); return value; } From b6ef73dddfa8eb07f3ee9e1b416c30363a6b6780 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 23 Jul 2020 15:46:28 +0300 Subject: [PATCH 22/33] update logic sor AncMaternityTransferProcessor --- .../configuration/AncMaternityTransferProcessor.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java index 2025749b0..2a6da3fbd 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java @@ -126,7 +126,7 @@ public JSONObject populateTransferForm(@NonNull JSONObject closeForm) { String key = object.optString(JsonFormConstants.KEY); if (clientDetails.get(key) != null) { - object.put(JsonFormConstants.VALUE, updateValue(object, clientDetails.get(key))); + updateValue(object, clientDetails.get(key)); } if (columnMap.get(key) != null) { @@ -152,9 +152,13 @@ public JSONObject populateTransferForm(@NonNull JSONObject closeForm) { return jsonForm; } - protected String updateValue(@NonNull JSONObject object, @NonNull String value) { + protected void updateValue(@NonNull JSONObject object, @NonNull String value) { Timber.i("key %s", object.optString(JsonFormConstants.KEY)); - return value; + try { + object.put(JsonFormConstants.VALUE, value); + } catch (JSONException e) { + e.printStackTrace(); + } } protected List getCloseFormFieldsList() { From 4c5b1529b13b8540956241c45df6176c636f7e49 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 20 Aug 2020 14:58:52 +0300 Subject: [PATCH 23/33] update anc death processing & transfer processor --- .../AncMaternityTransferProcessor.java | 20 ++++-- .../interactor/RegisterInteractor.java | 68 +++++++------------ .../library/model/RegisterFragmentModel.java | 4 +- .../repository/RegisterQueryProvider.java | 2 +- .../sync/BaseAncClientProcessorForJava.java | 2 + .../anc/library/util/ANCJsonFormUtils.java | 18 +---- .../smartregister/anc/library/util/Utils.java | 38 ++++++----- 7 files changed, 67 insertions(+), 85 deletions(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java index 2a6da3fbd..3cd453152 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java @@ -4,6 +4,7 @@ import android.support.annotation.NonNull; import com.vijay.jsonwizard.constants.JsonFormConstants; +import com.vijay.jsonwizard.utils.FormUtils; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; @@ -14,6 +15,7 @@ import org.smartregister.anc.library.interactor.ClientTransferProcessor; import org.smartregister.anc.library.model.PreviousContact; import org.smartregister.anc.library.util.ANCJsonFormUtils; +import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.Utils; import org.smartregister.clientandeventmodel.Event; import org.smartregister.domain.tag.FormTag; @@ -37,14 +39,23 @@ public class AncMaternityTransferProcessor implements ClientTransferProcessor { @Override public void startTransferProcessing(@NonNull JSONObject closeForm) throws Exception { setBaseEntityId(closeForm.optString(ENTITY_ID)); + String closeReason = FormUtils.getFieldFromForm(closeForm, ConstantsUtils.JsonFormKeyUtils.ANC_CLOSE_REASON).optString(JsonFormConstants.VALUE); + List formSubmissionIds = new ArrayList<>(); //create transfer event - Event transferEvent = createAncMaternityTransferEvent(closeForm); - saveEvent(transferEvent, transferEvent.getBaseEntityId()); + if (closeReason.equalsIgnoreCase("in_labour")) { + Event transferEvent = createAncMaternityTransferEvent(closeForm); + saveEvent(transferEvent, transferEvent.getBaseEntityId()); + formSubmissionIds.add(transferEvent.getFormSubmissionId()); + } //create anc close event Event closeEvent = createAncCloseEvent(closeForm); - saveEvent(closeEvent, transferEvent.getBaseEntityId()); + if (closeReason.equalsIgnoreCase("woman_died")) { + closeEvent.setEventType("Death"); + } + saveEvent(closeEvent, getBaseEntityId()); + formSubmissionIds.add(closeEvent.getFormSubmissionId()); long lastSyncTimeStamp = Utils.getAllSharedPreferences().fetchLastUpdatedAtDate(0); Date lastSyncDate = new Date(lastSyncTimeStamp); @@ -52,7 +63,8 @@ public void startTransferProcessing(@NonNull JSONObject closeForm) throws Except .processClient( AncLibrary.getInstance() .getEcSyncHelper() - .getEvents(Arrays.asList(transferEvent.getFormSubmissionId(), closeEvent.getFormSubmissionId()))); + .getEvents(formSubmissionIds)); + Utils.getAllSharedPreferences().saveLastUpdatedAtDate(lastSyncDate.getTime()); } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java index f733a9d6f..9276b45a0 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java @@ -1,6 +1,5 @@ package org.smartregister.anc.library.interactor; -import android.content.ContentValues; import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; import android.support.v4.util.Pair; @@ -10,7 +9,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Triple; -import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.smartregister.anc.library.AncLibrary; @@ -128,51 +126,47 @@ public void removeWomanFromANCRegister(final String closeFormJsonString, final S Runnable runnable = () -> { PatientRemovedEvent patientRemovedEvent = new PatientRemovedEvent(); try { - boolean isClientToBeTransferred = processTransfer(closeFormJsonString, patientRemovedEvent); + JSONObject jsonCloseForm = new JSONObject(closeFormJsonString); + String closeReason = FormUtils.getFieldFromForm(jsonCloseForm, ConstantsUtils.JsonFormKeyUtils.ANC_CLOSE_REASON).optString(JsonFormConstants.VALUE); + boolean isDeath = "woman_died".equalsIgnoreCase(closeReason); - if (!isClientToBeTransferred) { - Triple triple = ANCJsonFormUtils + if (isDeath) { + Pair triple = ANCJsonFormUtils .saveRemovedFromANCRegister(getAllSharedPreferences(), closeFormJsonString, providerId); if (triple == null) { return; } - boolean isDeath = triple.getLeft(); - Event event = triple.getMiddle(); - Event updateChildDetailsEvent = triple.getRight(); + Event updateChildDetailsEvent = triple.second; - String baseEntityId = event.getBaseEntityId(); + String baseEntityId = updateChildDetailsEvent.getBaseEntityId(); //Update client to deceased + String dateOfDeath = FormUtils.getFieldFromForm(jsonCloseForm, "date_of_death").optString(JsonFormConstants.VALUE); JSONObject client = getSyncHelper().getClient(baseEntityId); - if (isDeath) { - client.put(ConstantsUtils.JsonFormKeyUtils.DEATH_DATE, Utils.getTodaysDate()); - client.put(ConstantsUtils.JsonFormKeyUtils.DEATH_DATE_APPROX, false); - } + client.put(ConstantsUtils.JsonFormKeyUtils.DEATH_DATE, StringUtils.isNotBlank(dateOfDeath) ? Utils.reverseHyphenSeperatedValues(dateOfDeath, "-") : Utils.getTodaysDate()); + client.put(ConstantsUtils.JsonFormKeyUtils.DEATH_DATE_APPROX, false); + JSONObject attributes = client.getJSONObject(ConstantsUtils.JsonFormKeyUtils.ATTRIBUTES); attributes.put(DBConstantsUtils.KeyUtils.DATE_REMOVED, Utils.getTodaysDate()); client.put(ConstantsUtils.JsonFormKeyUtils.ATTRIBUTES, attributes); getSyncHelper().addClient(baseEntityId, client); - //Add Remove Event for child to flag for Server delete - JSONObject eventJson = new JSONObject(ANCJsonFormUtils.gson.toJson(event)); - getSyncHelper().addEvent(event.getBaseEntityId(), eventJson); - //Update Child Entity to include death date JSONObject eventJsonUpdateChildEvent = new JSONObject(ANCJsonFormUtils.gson.toJson(updateChildDetailsEvent)); getSyncHelper().addEvent(baseEntityId, eventJsonUpdateChildEvent); //Add event to flag server update + } - //Update REGISTER and FTS Tables - if (getAllCommonsRepository() != null) { - ContentValues values = new ContentValues(); - values.put(DBConstantsUtils.KeyUtils.DATE_REMOVED, Utils.getTodaysDate()); - getAllCommonsRepository().update(DBConstantsUtils.DEMOGRAPHIC_TABLE_NAME, values, baseEntityId); - getAllCommonsRepository().updateSearch(baseEntityId); - } + if (closeReason.equalsIgnoreCase("in_labour")) { + patientRemovedEvent.setClosedNature(ConstantsUtils.ClosedNature.TRANSFERRED); } + + + processTransfer(jsonCloseForm); + } catch (Exception e) { Timber.e(e, " --> removeWomanFromANCRegister"); } finally { @@ -183,28 +177,14 @@ public void removeWomanFromANCRegister(final String closeFormJsonString, final S appExecutors.diskIO().execute(runnable); } - protected boolean processTransfer(@NonNull String closeFormJsonString, @NonNull PatientRemovedEvent patientRemovedEvent) throws Exception { - JSONObject closeForm = new JSONObject(closeFormJsonString); - JSONArray fields = FormUtils.getMultiStepFormFields(closeForm); - for (int i = 0; i < fields.length(); i++) { - JSONObject object = fields.optJSONObject(i); - String key = object.optString(JsonFormConstants.KEY); - if ("anc_close_reason".equals(key)) { - String value = object.optString(JsonFormConstants.VALUE); - if (StringUtils.isNotBlank(value) && value.contains("labour")) { - patientRemovedEvent.setClosedNature(ConstantsUtils.ClosedNature.TRANSFERRED); - AncLibrary.getInstance() - .getAncMetadata() - .getTransferProcessorByEventType(ConstantsUtils.EventTypeUtils.ANC_MATERNITY_TRANSFER) - .startTransferProcessing(closeForm); - return true; - } - break; - } - } - return false; + protected void processTransfer(@NonNull JSONObject closeForm) throws Exception { + AncLibrary.getInstance() + .getAncMetadata() + .getTransferProcessorByEventType(ConstantsUtils.EventTypeUtils.ANC_MATERNITY_TRANSFER) + .startTransferProcessing(closeForm); } + public AllCommonsRepository getAllCommonsRepository() { if (allCommonsRepository == null) { allCommonsRepository = diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/model/RegisterFragmentModel.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/model/RegisterFragmentModel.java index 9aa594217..8b131bba5 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/model/RegisterFragmentModel.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/model/RegisterFragmentModel.java @@ -57,7 +57,7 @@ public Set getRegisterActiveColumns(String viewConfigurationIdentifier) { @Override public String countSelect(String tableName, String mainCondition) { SmartRegisterQueryBuilder countQueryBuilder = new SmartRegisterQueryBuilder(); - countQueryBuilder.SelectInitiateMainTableCounts(tableName); + countQueryBuilder.selectInitiateMainTableCounts(tableName); return countQueryBuilder.mainCondition(mainCondition); } @@ -73,7 +73,7 @@ public String mainSelect(String tableName, String mainCondition) { getRegisterQueryProvider().getDetailsTable() + "." + DBConstantsUtils.KeyUtils.YELLOW_FLAG_COUNT, getRegisterQueryProvider().getDetailsTable() + "." + DBConstantsUtils.KeyUtils.CONTACT_STATUS, getRegisterQueryProvider().getDetailsTable() + "." + DBConstantsUtils.KeyUtils.NEXT_CONTACT, getRegisterQueryProvider().getDetailsTable() + "." + DBConstantsUtils.KeyUtils.NEXT_CONTACT_DATE, getRegisterQueryProvider().getDetailsTable() + "." + DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE}; - queryBuilder.SelectInitiateMainTable(tableName, columns); + queryBuilder.selectInitiateMainTable(tableName, columns); queryBuilder.customJoin(" join " + getRegisterQueryProvider().getDetailsTable() + " on " + getRegisterQueryProvider().getDemographicTable() + "." + DBConstantsUtils.KeyUtils.BASE_ENTITY_ID + "= " + getRegisterQueryProvider().getDetailsTable() + "." + DBConstantsUtils.KeyUtils.BASE_ENTITY_ID); return queryBuilder.mainCondition(mainCondition); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/RegisterQueryProvider.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/RegisterQueryProvider.java index 1ac6e89a9..cf9aae94f 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/RegisterQueryProvider.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/RegisterQueryProvider.java @@ -64,7 +64,7 @@ DBConstantsUtils.KeyUtils.DOB_UNKNOWN, getDetailsTable() + "." + DBConstantsUtil public String mainRegisterQuery() { SmartRegisterQueryBuilder queryBuilder = new SmartRegisterQueryBuilder(); - queryBuilder.SelectInitiateMainTable(getDemographicTable(), mainColumns()); + queryBuilder.selectInitiateMainTable(getDemographicTable(), mainColumns()); queryBuilder.customJoin(" join " + getDetailsTable() + " on " + getDemographicTable() + "." + DBConstantsUtils.KeyUtils.BASE_ENTITY_ID + "= " + getDetailsTable() + "." + DBConstantsUtils.KeyUtils.BASE_ENTITY_ID + " "); return queryBuilder.getSelectquery(); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java index deb1c7ba0..cfd694760 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java @@ -25,9 +25,11 @@ import org.smartregister.anc.library.util.DBConstantsUtils; import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.commonregistry.AllCommonsRepository; + import org.smartregister.domain.db.Client; import org.smartregister.domain.db.Event; import org.smartregister.domain.db.EventClient; +import org.smartregister.domain.db.Obs;; import org.smartregister.domain.jsonmapping.ClientClassification; import org.smartregister.domain.jsonmapping.ClientField; import org.smartregister.domain.jsonmapping.Table; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java index 1da23f9d6..124b1b19e 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java @@ -629,9 +629,8 @@ public static void startFormForEdit(Activity context, int jsonFormActivityReques } - public static Triple saveRemovedFromANCRegister(AllSharedPreferences allSharedPreferences, String jsonString, String providerId) { + public static Pair< Event, Event> saveRemovedFromANCRegister(AllSharedPreferences allSharedPreferences, String jsonString, String providerId) { try { - boolean isDeath = false; Triple registrationFormParams = validateParameters(jsonString); if (!registrationFormParams.getLeft()) { @@ -639,7 +638,6 @@ public static Triple saveRemovedFromANCRegister(AllShared } JSONObject jsonForm = registrationFormParams.getMiddle(); - JSONArray fields = registrationFormParams.getRight(); String encounterType = ANCJsonFormUtils.getString(jsonForm, ENCOUNTER_TYPE); JSONObject metadata = ANCJsonFormUtils.getJSONObject(jsonForm, METADATA); @@ -661,18 +659,6 @@ public static Triple saveRemovedFromANCRegister(AllShared .withFormSubmissionId(ANCJsonFormUtils.generateRandomUUIDString()).withDateCreated(new Date()); tagSyncMetadata(allSharedPreferences, event); - for (int i = 0; i < fields.length(); i++) { - JSONObject jsonObject = ANCJsonFormUtils.getJSONObject(fields, i); - - String value = ANCJsonFormUtils.getString(jsonObject, ANCJsonFormUtils.VALUE); - if (StringUtils.isNotBlank(value)) { - ANCJsonFormUtils.addObservation(event, jsonObject); - if (jsonObject.get(ANCJsonFormUtils.KEY).equals(ConstantsUtils.JsonFormKeyUtils.ANC_CLOSE_REASON)) { - isDeath = "Woman Died".equalsIgnoreCase(value); - } - } - } - Iterator keys = metadata.keys(); while (keys.hasNext()) { @@ -708,7 +694,7 @@ public static Triple saveRemovedFromANCRegister(AllShared .withDateCreated(new Date()); tagSyncMetadata(allSharedPreferences, updateChildDetailsEvent); - return Triple.of(isDeath, event, updateChildDetailsEvent); + return Pair.create(event, updateChildDetailsEvent); } catch (Exception e) { Timber.e(e, "JsonFormUtils --> saveRemovedFromANCRegister"); } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index 6ac625b32..83850efe0 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -674,25 +674,27 @@ public static HashMap> buildRepeatingGroupValues HashMap> repeatingGroupMap = new LinkedHashMap<>(); if (jsonObject != null) { JSONArray jsonArray = jsonObject.optJSONArray(JsonFormConstants.VALUE); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject valueField = jsonArray.optJSONObject(i); - String fieldKey = valueField.optString(JsonFormConstants.KEY); - keysArrayList.add(fieldKey); - } + if (jsonArray != null) { + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject valueField = jsonArray.optJSONObject(i); + String fieldKey = valueField.optString(JsonFormConstants.KEY); + keysArrayList.add(fieldKey); + } - for (int k = 0; k < fields.length(); k++) { - JSONObject valueField = fields.optJSONObject(k); - String fieldKey = valueField.optString(JsonFormConstants.KEY); - String fieldValue = valueField.optString(JsonFormConstants.VALUE); - - if (fieldKey.contains("_")) { - fieldKey = fieldKey.substring(0, fieldKey.lastIndexOf("_")); - if (keysArrayList.contains(fieldKey) && StringUtils.isNotBlank(fieldValue)) { - String fieldKeyId = valueField.optString(JsonFormConstants.KEY).substring(fieldKey.length() + 1); - valueField.put(JsonFormConstants.KEY, fieldKey); - HashMap hashMap = repeatingGroupMap.get(fieldKeyId) == null ? new HashMap<>() : repeatingGroupMap.get(fieldKeyId); - hashMap.put(fieldKey, fieldValue); - repeatingGroupMap.put(fieldKeyId, hashMap); + for (int k = 0; k < fields.length(); k++) { + JSONObject valueField = fields.optJSONObject(k); + String fieldKey = valueField.optString(JsonFormConstants.KEY); + String fieldValue = valueField.optString(JsonFormConstants.VALUE); + + if (fieldKey.contains("_")) { + fieldKey = fieldKey.substring(0, fieldKey.lastIndexOf("_")); + if (keysArrayList.contains(fieldKey) && StringUtils.isNotBlank(fieldValue)) { + String fieldKeyId = valueField.optString(JsonFormConstants.KEY).substring(fieldKey.length() + 1); + valueField.put(JsonFormConstants.KEY, fieldKey); + HashMap hashMap = repeatingGroupMap.get(fieldKeyId) == null ? new HashMap<>() : repeatingGroupMap.get(fieldKeyId); + hashMap.put(fieldKey, fieldValue); + repeatingGroupMap.put(fieldKeyId, hashMap); + } } } } From 918e77a2cefe5fe75682c403db7bdfebdfdb5a1e Mon Sep 17 00:00:00 2001 From: bennsimon Date: Wed, 2 Sep 2020 16:52:03 +0300 Subject: [PATCH 24/33] code cleanup --- opensrp-anc/build.gradle | 30 +++---------------- .../library/adapter/LastContactAdapter.java | 30 +++++++++++++------ .../AncMaternityTransferProcessor.java | 6 ++-- .../sync/BaseAncClientProcessorForJava.java | 6 ++-- reference-app/build.gradle | 30 +++---------------- 5 files changed, 35 insertions(+), 67 deletions(-) diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index 7ce350748..6bd38493d 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -66,6 +66,7 @@ android { javaCompileOptions { annotationProcessorOptions { + includeCompileClasspath = true arguments = [eventBusIndex: 'org.smartregister.anc.library.ANCEventBusIndex'] } } @@ -95,31 +96,8 @@ android { } packagingOptions { - exclude 'META-INF/DEPENDENCIES.txt' - exclude 'META-INF/LICENSE.txt' - exclude 'META-INF/NOTICE.txt' - exclude 'META-INF/NOTICE' - exclude 'META-INF/LICENSE' - exclude 'META-INF/DEPENDENCIES' - exclude 'META-INF/notice.txt' - exclude 'META-INF/license.txt' - exclude 'META-INF/dependencies.txt' - exclude 'META-INF/LGPL2.1' - exclude 'LICENSE.txt' - - } - packagingOptions { - exclude 'META-INF/DEPENDENCIES.txt' - exclude 'META-INF/LICENSE.txt' - exclude 'META-INF/NOTICE.txt' - exclude 'META-INF/NOTICE' - exclude 'META-INF/LICENSE' - exclude 'META-INF/DEPENDENCIES' - exclude 'META-INF/notice.txt' - exclude 'META-INF/license.txt' - exclude 'META-INF/dependencies.txt' - exclude 'META-INF/LGPL2.1' - exclude 'LICENSE.txt' + exclude 'META-INF/LICENSE.md' + exclude 'META-INF/NOTICE.md' } testOptions { @@ -154,7 +132,7 @@ dependencies { exclude group: 'org.yaml', module: 'snakeyaml' exclude group: 'io.ona.rdt-capture', module: 'lib' } - implementation('org.smartregister:opensrp-client-core:1.9.4-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-core:1.12.0-SNAPSHOT@aar') { transitive = true exclude group: 'com.github.bmelnychuk', module: 'atv' exclude group: 'com.google.guava', module: 'guava' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java index f25b8854d..20aa19eed 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java @@ -25,6 +25,8 @@ import java.util.List; +import timber.log.Timber; + public class LastContactAdapter extends RecyclerView.Adapter { private List lastContactDetailsList; private LayoutInflater inflater; @@ -85,23 +87,33 @@ public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) { } private String updateGABasedOnDueStrategy(@Nullable String gestAge, @NonNull String contactNo, @NonNull LastContactDetailsWrapper lastContactDetails) { + String tempGestAge = gestAge; if (ConstantsUtils.DueCheckStrategy.CHECK_FOR_FIRST_CONTACT.equals(Utils.getDueCheckStrategy())) { Facts facts = lastContactDetails.getFacts(); - if (StringUtils.isBlank(gestAge)) { + if (StringUtils.isBlank(tempGestAge)) { if ("1".equals(contactNo.trim())) - gestAge = "-"; + tempGestAge = "-"; else if (lastContactDetailsList.size() > 1) { - LastContactDetailsWrapper firstLastContactDetailsWrapper = lastContactDetailsList.get(0); - Facts firstFacts = firstLastContactDetailsWrapper.getFacts(); - String edd = Utils.reverseHyphenSeperatedValues(firstFacts.get(ConstantsUtils.EDD), "-"); - String contactDate = facts.get(ConstantsUtils.CONTACT_DATE); - int diffWeeks = ConstantsUtils.DELIVERY_DATE_WEEKS - Math.abs(Weeks.weeksBetween(LocalDate.parse(edd), LocalDate.parse(contactDate)).getWeeks()); - gestAge = String.valueOf(diffWeeks); + try { + LastContactDetailsWrapper firstLastContactDetailsWrapper = lastContactDetailsList.get(0); + Facts firstFacts = firstLastContactDetailsWrapper.getFacts(); + String edd = Utils.reverseHyphenSeperatedValues(firstFacts.get(ConstantsUtils.EDD), "-"); + String contactDate = facts.get(ConstantsUtils.CONTACT_DATE); + if (firstFacts.get(ConstantsUtils.GEST_AGE_OPENMRS) == null) { + int diffWeeks = ConstantsUtils.DELIVERY_DATE_WEEKS - Math.abs(Weeks.weeksBetween(LocalDate.parse(edd), LocalDate.parse(contactDate)).getWeeks()); + tempGestAge = String.valueOf(diffWeeks); + } else { + tempGestAge = firstFacts.get(ConstantsUtils.GEST_AGE_OPENMRS); + } + } catch (IllegalArgumentException e) { + tempGestAge = "-"; + Timber.e(e); + } } } } - return gestAge; + return tempGestAge; } private void createContactDetailsView(List data, Facts facts, ViewHolder viewHolder) { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java index 3cd453152..d5a6939b4 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java @@ -76,7 +76,7 @@ private void saveEvent(@NonNull Event event, @NonNull String baseEntityId) throw protected Event createAncMaternityTransferEvent(@NonNull JSONObject closeForm) { JSONObject jsonFormObject = populateTransferForm(closeForm); FormTag formTag = ANCJsonFormUtils.getFormTag(Utils.getAllSharedPreferences()); - Event event = ANCJsonFormUtils.createEvent(com.vijay.jsonwizard.utils.FormUtils.getMultiStepFormFields(jsonFormObject), + Event event = ANCJsonFormUtils.createEvent(FormUtils.getMultiStepFormFields(jsonFormObject), jsonFormObject.optJSONObject(METADATA), formTag, getBaseEntityId(), jsonFormObject.optString(JsonFormConstants.ENCOUNTER_TYPE), ""); ANCJsonFormUtils.tagSyncMetadata(Utils.getAllSharedPreferences(), event); return event; @@ -84,7 +84,7 @@ protected Event createAncMaternityTransferEvent(@NonNull JSONObject closeForm) { protected Event createAncCloseEvent(@NonNull JSONObject closeFormObject) { FormTag formTag = ANCJsonFormUtils.getFormTag(Utils.getAllSharedPreferences()); - Event event = ANCJsonFormUtils.createEvent(com.vijay.jsonwizard.utils.FormUtils.getMultiStepFormFields(closeFormObject), + Event event = ANCJsonFormUtils.createEvent(FormUtils.getMultiStepFormFields(closeFormObject), closeFormObject.optJSONObject(METADATA), formTag, closeFormObject.optString(ENTITY_ID), closeFormObject.optString(JsonFormConstants.ENCOUNTER_TYPE), ""); ANCJsonFormUtils.tagSyncMetadata(Utils.getAllSharedPreferences(), event); return event; @@ -146,7 +146,7 @@ public JSONObject populateTransferForm(@NonNull JSONObject closeForm) { } } - JSONArray closeFormFields = com.vijay.jsonwizard.utils.FormUtils.getMultiStepFormFields(closeForm); + JSONArray closeFormFields = FormUtils.getMultiStepFormFields(closeForm); List closeFormFieldsList = getCloseFormFieldsList(); for (int i = 0; i < closeFormFields.length() && !closeFormFieldsList.isEmpty(); i++) { JSONObject object = closeFormFields.optJSONObject(i); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java index cfd694760..5f467b249 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java @@ -21,15 +21,13 @@ import org.smartregister.anc.library.model.PreviousContact; import org.smartregister.anc.library.model.Task; import org.smartregister.anc.library.repository.ContactTasksRepository; +import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; -import org.smartregister.anc.library.util.ANCJsonFormUtils; import org.smartregister.commonregistry.AllCommonsRepository; - import org.smartregister.domain.db.Client; import org.smartregister.domain.db.Event; import org.smartregister.domain.db.EventClient; -import org.smartregister.domain.db.Obs;; import org.smartregister.domain.jsonmapping.ClientClassification; import org.smartregister.domain.jsonmapping.ClientField; import org.smartregister.domain.jsonmapping.Table; @@ -46,6 +44,8 @@ import timber.log.Timber; +; + /** * Created by ndegwamartin on 15/03/2018. */ diff --git a/reference-app/build.gradle b/reference-app/build.gradle index 1330a5c54..e8517e5e6 100644 --- a/reference-app/build.gradle +++ b/reference-app/build.gradle @@ -82,6 +82,7 @@ android { javaCompileOptions { annotationProcessorOptions { + includeCompileClasspath = true arguments = [eventBusIndex: 'org.smartregister.anc.ANCEventBusIndex'] } } @@ -148,31 +149,8 @@ android { } packagingOptions { - exclude 'META-INF/DEPENDENCIES.txt' - exclude 'META-INF/LICENSE.txt' - exclude 'META-INF/NOTICE.txt' - exclude 'META-INF/NOTICE' - exclude 'META-INF/LICENSE' - exclude 'META-INF/DEPENDENCIES' - exclude 'META-INF/notice.txt' - exclude 'META-INF/license.txt' - exclude 'META-INF/dependencies.txt' - exclude 'META-INF/LGPL2.1' - exclude 'LICENSE.txt' - - } - packagingOptions { - exclude 'META-INF/DEPENDENCIES.txt' - exclude 'META-INF/LICENSE.txt' - exclude 'META-INF/NOTICE.txt' - exclude 'META-INF/NOTICE' - exclude 'META-INF/LICENSE' - exclude 'META-INF/DEPENDENCIES' - exclude 'META-INF/notice.txt' - exclude 'META-INF/license.txt' - exclude 'META-INF/dependencies.txt' - exclude 'META-INF/LGPL2.1' - exclude 'LICENSE.txt' + exclude 'META-INF/LICENSE.md' + exclude 'META-INF/NOTICE.md' } testOptions { @@ -232,7 +210,7 @@ dependencies { // exclude group: 'org.yaml', module: 'snakeyaml' // exclude group: 'io.ona.rdt-capture', module: 'lib' // } - implementation('org.smartregister:opensrp-client-core:1.9.4-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-core:1.12.0-SNAPSHOT@aar') { transitive = true exclude group: 'com.github.bmelnychuk', module: 'atv' exclude group: 'com.google.guava', module: 'guava' From c1b7010808efce531148bcca93e508cbe39c1b0b Mon Sep 17 00:00:00 2001 From: bennsimon Date: Wed, 2 Sep 2020 17:28:56 +0300 Subject: [PATCH 25/33] fix tests --- .../library/helper/AncRulesEngineFactory.java | 3 --- .../anc/library/util/ANCJsonFormUtils.java | 7 +++++-- .../helper/AncRulesEngineFactoryTest.java | 7 ++++--- .../RegisterFragmentPresenterTest.java | 4 ++-- .../anc/library/util/ANCJsonFormUtilsTest.java | 17 +++++++++-------- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/helper/AncRulesEngineFactory.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/helper/AncRulesEngineFactory.java index aea7f5a60..bd79b8e70 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/helper/AncRulesEngineFactory.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/helper/AncRulesEngineFactory.java @@ -12,7 +12,6 @@ import java.util.Map; public class AncRulesEngineFactory extends RulesEngineFactory { - private Map globalValues; private AncRulesEngineHelper ancRulesEngineHelper; private String selectedRuleName; private Facts globalFacts; @@ -22,8 +21,6 @@ public AncRulesEngineFactory(Context context, Map globalValues, super(context, globalValues); this.ancRulesEngineHelper = new AncRulesEngineHelper(context); this.ancRulesEngineHelper.setJsonObject(mJSONObject); - this.globalValues = globalValues; - if (globalValues != null) { globalFacts = new Facts(); diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java index 124b1b19e..9e03d1329 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java @@ -332,7 +332,10 @@ private static String initializeFirstContactValues(@NonNull JSONArray fields) th } JSONObject lastContactDateJSONObject = getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.LAST_CONTACT_RECORD_DATE); - lastContactDateJSONObject.put(ANCJsonFormUtils.VALUE, Utils.reverseHyphenSeperatedValues(previousVisitsMapItem.get(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE), "-")); + + String visitDate = previousVisitsMapItem.get(ConstantsUtils.JsonFormKeyUtils.VISIT_DATE); + String reverseVisitDate = Utils.reverseHyphenSeperatedValues(visitDate, "-"); + lastContactDateJSONObject.put(ANCJsonFormUtils.VALUE, reverseVisitDate); } } JSONObject nextContactJSONObject = getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT); @@ -629,7 +632,7 @@ public static void startFormForEdit(Activity context, int jsonFormActivityReques } - public static Pair< Event, Event> saveRemovedFromANCRegister(AllSharedPreferences allSharedPreferences, String jsonString, String providerId) { + public static Pair saveRemovedFromANCRegister(AllSharedPreferences allSharedPreferences, String jsonString, String providerId) { try { Triple registrationFormParams = validateParameters(jsonString); diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/AncRulesEngineFactoryTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/AncRulesEngineFactoryTest.java index 15d2a38f2..0634bd52e 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/AncRulesEngineFactoryTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/AncRulesEngineFactoryTest.java @@ -52,13 +52,14 @@ public void testBeforeEvaluateWithEmptyRuleAndFacts() { } @Test - public void testInitializeFacts() { + public void testInitializeFacts() throws JSONException { globalValues.put("pallor", "yes"); globalValues.put("select-rule", "step2_accordion_hiv"); - Whitebox.setInternalState(ancRulesEngineFactory, "globalValues", globalValues); Whitebox.setInternalState(ancRulesEngineFactory, "selectedRuleName", "Test"); + + AncRulesEngineFactory ancRulesEngineFactory = new AncRulesEngineFactory(RuntimeEnvironment.application, globalValues, new JSONObject(DUMMY_JSON_OBJECT)); Facts facts = ancRulesEngineFactory.initializeFacts(new Facts()); - Assert.assertEquals(5, facts.asMap().size()); + Assert.assertEquals(3, facts.asMap().size()); Assert.assertTrue(facts.asMap().containsKey("global_pallor")); Assert.assertEquals("yes", facts.asMap().get("global_pallor")); } diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/presenter/RegisterFragmentPresenterTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/presenter/RegisterFragmentPresenterTest.java index 57927aa43..b775b4bf2 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/presenter/RegisterFragmentPresenterTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/presenter/RegisterFragmentPresenterTest.java @@ -89,7 +89,7 @@ public void testInitializeQueries() { private String countSelect(String tableName, String mainCondition) { SmartRegisterQueryBuilder countQueryBuilder = new SmartRegisterQueryBuilder(); - countQueryBuilder.SelectInitiateMainTableCounts(tableName); + countQueryBuilder.selectInitiateMainTableCounts(tableName); return countQueryBuilder.mainCondition(mainCondition); } @@ -104,7 +104,7 @@ private String mainSelect(String tableName, String mainCondition) { tableName + "." + DBConstantsUtils.KeyUtils.ANC_ID, tableName + "." + DBConstantsUtils.KeyUtils.DOB, tableName + "." + DBConstantsUtils.KeyUtils.DATE_REMOVED}; - queryBUilder.SelectInitiateMainTable(tableName, columns); + queryBUilder.selectInitiateMainTable(tableName, columns); return queryBUilder.mainCondition(mainCondition); } diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java index 2f9f3fbcb..e95c09346 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java @@ -1,6 +1,7 @@ package org.smartregister.anc.library.util; import android.graphics.Bitmap; +import android.support.v4.util.Pair; import com.vijay.jsonwizard.constants.JsonFormConstants; @@ -545,14 +546,13 @@ public void testSaveRemovedFromANCRegister() { Mockito.when(allSharedPreferences.fetchDefaultTeam(providerId)).thenReturn("bukesa"); Mockito.when(allSharedPreferences.fetchDefaultTeamId(providerId)).thenReturn("39305854-5db8-4538-a367-8d4b7118f9af"); - Triple eventEventTriple = ANCJsonFormUtils.saveRemovedFromANCRegister(allSharedPreferences, closeAnc, providerId); - Assert.assertNotNull(eventEventTriple); - Assert.assertFalse(eventEventTriple.getLeft()); - Assert.assertNotNull(eventEventTriple.getMiddle()); - Assert.assertEquals("ANC Close", eventEventTriple.getMiddle().getEventType()); + Pair eventEventPair = ANCJsonFormUtils.saveRemovedFromANCRegister(allSharedPreferences, closeAnc, providerId); + Assert.assertNotNull(eventEventPair); + Assert.assertNotNull(eventEventPair.first); + Assert.assertEquals("ANC Close", eventEventPair.first.getEventType()); - Assert.assertNotNull(eventEventTriple.getRight()); - Assert.assertEquals("Update ANC Registration", eventEventTriple.getRight().getEventType()); + Assert.assertNotNull(eventEventPair.second); + Assert.assertEquals("Update ANC Registration", eventEventPair.second.getEventType()); } @Test @@ -685,12 +685,13 @@ public void testInitializeFirstContactValuesForIsFirstContactStrategy() throws E fields.put(jsonObject); HashMap groupItem = new LinkedHashMap<>(); - groupItem.put("visit_date", "2020-04-04"); + groupItem.put("visit_date", "04-04-2020"); HashMap> groupMap = new HashMap<>(); groupMap.put("324-w3424", groupItem); PowerMockito.when(Utils.class, "buildRepeatingGroupValues", Mockito.any(JSONArray.class), Mockito.anyString()).thenReturn(groupMap); + PowerMockito.when(Utils.class, "reverseHyphenSeperatedValues", Mockito.anyString(), Mockito.anyString()).thenCallRealMethod(); String result = Whitebox.invokeMethod(ANCJsonFormUtils.class, "initializeFirstContactValues", fields); JSONObject nextContactJsonObject = ANCJsonFormUtils.getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT); JSONObject nextContactDateJsonObject = ANCJsonFormUtils.getFieldJSONObject(fields, DBConstantsUtils.KeyUtils.NEXT_CONTACT_DATE); From 0c2fb1b027f5a753f04a906c971d348f77c805d0 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Wed, 2 Sep 2020 18:19:35 +0300 Subject: [PATCH 26/33] add tests --- opensrp-anc/build.gradle | 2 +- .../library/adapter/LastContactAdapter.java | 2 +- opensrp-anc/src/test/assets/app.properties | 7 +++ .../adapter/LastContactAdapterTest.java | 45 +++++++++++++++++++ reference-app/build.gradle | 12 +---- 5 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 opensrp-anc/src/test/assets/app.properties diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index 6bd38493d..42b753c9e 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -121,7 +121,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:1.9.2-r140-OPTIMIZED-LOCAL-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:2.0.0-LOCAL-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java index 20aa19eed..412b18718 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java @@ -99,8 +99,8 @@ else if (lastContactDetailsList.size() > 1) { LastContactDetailsWrapper firstLastContactDetailsWrapper = lastContactDetailsList.get(0); Facts firstFacts = firstLastContactDetailsWrapper.getFacts(); String edd = Utils.reverseHyphenSeperatedValues(firstFacts.get(ConstantsUtils.EDD), "-"); - String contactDate = facts.get(ConstantsUtils.CONTACT_DATE); if (firstFacts.get(ConstantsUtils.GEST_AGE_OPENMRS) == null) { + String contactDate = facts.get(ConstantsUtils.CONTACT_DATE); int diffWeeks = ConstantsUtils.DELIVERY_DATE_WEEKS - Math.abs(Weeks.weeksBetween(LocalDate.parse(edd), LocalDate.parse(contactDate)).getWeeks()); tempGestAge = String.valueOf(diffWeeks); } else { diff --git a/opensrp-anc/src/test/assets/app.properties b/opensrp-anc/src/test/assets/app.properties new file mode 100644 index 000000000..7c8570781 --- /dev/null +++ b/opensrp-anc/src/test/assets/app.properties @@ -0,0 +1,7 @@ +DRISHTI_BASE_URL= +PORT=-1 +SHOULD_VERIFY_CERTIFICATE=false +SYNC_DOWNLOAD_BATCH_SIZE=100 +CAN_SAVE_INITIAL_SITE_SETTING=false +MAX_CONTACT_SCHEDULE_DISPLAYED=5 +DUE_CHECK_STRATEGY=check_for_first_contact \ No newline at end of file diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/LastContactAdapterTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/LastContactAdapterTest.java index 4a1ed309a..15a1d6c79 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/LastContactAdapterTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/LastContactAdapterTest.java @@ -3,10 +3,12 @@ import android.widget.LinearLayout; +import org.jeasy.rules.api.Facts; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.powermock.reflect.Whitebox; import org.robolectric.RuntimeEnvironment; @@ -14,14 +16,17 @@ import org.smartregister.anc.library.AncLibrary; import org.smartregister.anc.library.activity.BaseUnitTest; import org.smartregister.anc.library.domain.LastContactDetailsWrapper; +import org.smartregister.anc.library.util.ConstantsUtils; import java.util.ArrayList; import java.util.List; public class LastContactAdapterTest extends BaseUnitTest { private LastContactAdapter lastContactAdapter; + @Mock private List lastContactDetailsList; + @Mock private AncLibrary ancLibrary; @@ -50,4 +55,44 @@ public void testGetItemCountInvokesGetSizeMethodOfDataList() { Whitebox.setInternalState(lastContactAdapter, "lastContactDetailsList", new ArrayList<>()); Assert.assertEquals(0, lastContactAdapter.getItemCount()); } + + @Test + public void testIsFirstContactUpdateGABasedOnDueStrategyForContactOne() throws Exception { + Mockito.doReturn(RuntimeEnvironment.application).when(ancLibrary).getApplicationContext(); + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", ancLibrary); + LastContactDetailsWrapper lastContactDetailsWrapper = Mockito.mock(LastContactDetailsWrapper.class); + + String result = Whitebox.invokeMethod(lastContactAdapter, "updateGABasedOnDueStrategy", + "", "1", lastContactDetailsWrapper); + Assert.assertEquals("-", result); + } + + @Test + public void testIsFirstContactUpdateGABasedOnDueStrategyForContactGreaterThanOne() throws Exception { + Mockito.doReturn(RuntimeEnvironment.application).when(ancLibrary).getApplicationContext(); + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", ancLibrary); + Facts facts = new Facts(); + facts.put(ConstantsUtils.EDD, "06-06-2020"); + facts.put(ConstantsUtils.CONTACT_DATE, "2020-04-04"); + + LastContactDetailsWrapper lastContactDetailsWrapper = Mockito.mock(LastContactDetailsWrapper.class); + + Mockito.doReturn(facts).when(lastContactDetailsWrapper).getFacts(); + List lastContactDetailsList = new ArrayList<>(); + lastContactDetailsList.add(lastContactDetailsWrapper); + lastContactDetailsList.add(lastContactDetailsWrapper); + Whitebox.setInternalState(lastContactAdapter, "lastContactDetailsList", lastContactDetailsList); + + //when gest_age_openmrs is null + String resultOne = Whitebox.invokeMethod(lastContactAdapter, "updateGABasedOnDueStrategy", + "", "2", lastContactDetailsWrapper); + Assert.assertEquals("31", resultOne); + + facts.put(ConstantsUtils.GEST_AGE_OPENMRS, "32"); + + //when gest_age_openmrs is not null + String resultTwo = Whitebox.invokeMethod(lastContactAdapter, "updateGABasedOnDueStrategy", + "", "2", lastContactDetailsWrapper); + Assert.assertEquals("32", resultTwo); + } } diff --git a/reference-app/build.gradle b/reference-app/build.gradle index e8517e5e6..29cf1ae8b 100644 --- a/reference-app/build.gradle +++ b/reference-app/build.gradle @@ -199,17 +199,7 @@ tasks.withType(Test) { dependencies { def powerMockVersion = '2.0.4' implementation project(":opensrp-anc") -// implementation('org.smartregister:opensrp-client-native-form:1.7.30-OPTIMIZE_FORMS-SNAPSHOT@aar') { -// transitive = true -// exclude group: 'com.android.support', module: 'recyclerview-v7' -// exclude group: 'com.android.support', module: 'appcompat-v7' -// exclude group: 'com.android.support', module: 'cardview-v7' -// exclude group: 'com.android.support', module: 'support-media-compat' -// exclude group: 'com.android.support', module: 'support-v4' -// exclude group: 'com.android.support', module: 'design' -// exclude group: 'org.yaml', module: 'snakeyaml' -// exclude group: 'io.ona.rdt-capture', module: 'lib' -// } + implementation('org.smartregister:opensrp-client-core:1.12.0-SNAPSHOT@aar') { transitive = true exclude group: 'com.github.bmelnychuk', module: 'atv' From a6aac1db2111e589d4b2df67e52da1e4df581a2d Mon Sep 17 00:00:00 2001 From: bennsimon Date: Wed, 2 Sep 2020 18:28:02 +0300 Subject: [PATCH 27/33] fix codacy issue --- .../anc/library/sync/BaseAncClientProcessorForJava.java | 1 - 1 file changed, 1 deletion(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java index 5f467b249..5ab6f6212 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java @@ -44,7 +44,6 @@ import timber.log.Timber; -; /** * Created by ndegwamartin on 15/03/2018. From 806543fd5fe22283f34e59ecde88be341b4f72f7 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Thu, 3 Sep 2020 11:18:29 +0300 Subject: [PATCH 28/33] fix tests --- .../adapter/LastContactAdapterTest.java | 6 ++ .../library/util/ANCJsonFormUtilsTest.java | 5 ++ .../SiteCharacteristicsTemplateUtilsTest.java | 7 +- .../anc/library/util/UtilsTest.java | 5 ++ .../anc/presenter/LoginPresenterTest.java | 68 ------------------- 5 files changed, 22 insertions(+), 69 deletions(-) diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/LastContactAdapterTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/LastContactAdapterTest.java index 15a1d6c79..9ae7ebac3 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/LastContactAdapterTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/LastContactAdapterTest.java @@ -4,6 +4,7 @@ import android.widget.LinearLayout; import org.jeasy.rules.api.Facts; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -95,4 +96,9 @@ public void testIsFirstContactUpdateGABasedOnDueStrategyForContactGreaterThanOne "", "2", lastContactDetailsWrapper); Assert.assertEquals("32", resultTwo); } + + @After + public void teardown() { + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", null); + } } diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java index e95c09346..03f898f4c 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java @@ -9,6 +9,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -703,4 +704,8 @@ public void testInitializeFirstContactValuesForIsFirstContactStrategy() throws E Assert.assertNotNull(result); } + @After + public void teardown() { + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", null); + } } diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/SiteCharacteristicsTemplateUtilsTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/SiteCharacteristicsTemplateUtilsTest.java index 02b81bc58..3429d0575 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/SiteCharacteristicsTemplateUtilsTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/SiteCharacteristicsTemplateUtilsTest.java @@ -3,6 +3,7 @@ import android.content.Context; import org.json.JSONObject; +import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -61,8 +62,12 @@ public void testStructureFormForRequestWhenTemplateIsFound() throws Exception { PowerMockito.when(TemplateUtils.getTemplateAsJson(contextAndroid, ConstantsUtils.PrefKeyUtils.SITE_CHARACTERISTICS)).thenReturn(new JSONObject()); String expected = "{\"locationId\":\"locations\",\"providerId\":\"Some Provider\",\"teamId\":\"teamId\",\"team\":\"team\"}"; Assert.assertEquals(expected, SiteCharacteristicsFormUtils.structureFormForRequest(contextAndroid).toString()); - ReflectionHelpers.setStaticField(AncLibrary.class, "instance", null); + } + @After + public void teardown() { + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", null); } + } \ No newline at end of file diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/UtilsTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/UtilsTest.java index aa5142293..ae0166c1a 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/UtilsTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/UtilsTest.java @@ -12,6 +12,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; @@ -525,4 +526,8 @@ public void testCreatePreviousVisitFromGroupShouldPassCorrectArgs() throws Excep } + @After + public void teardown() { + ReflectionHelpers.setStaticField(AncLibrary.class, "instance", null); + } } diff --git a/reference-app/src/test/java/org/smartregister/anc/presenter/LoginPresenterTest.java b/reference-app/src/test/java/org/smartregister/anc/presenter/LoginPresenterTest.java index c04cc57d8..91e59294f 100644 --- a/reference-app/src/test/java/org/smartregister/anc/presenter/LoginPresenterTest.java +++ b/reference-app/src/test/java/org/smartregister/anc/presenter/LoginPresenterTest.java @@ -19,11 +19,8 @@ import org.robolectric.RuntimeEnvironment; import org.smartregister.anc.BaseUnitTest; import org.smartregister.anc.library.R; -import org.smartregister.login.model.BaseLoginModel; import org.smartregister.view.contract.BaseLoginContract; -import java.lang.ref.WeakReference; - /** * Created by ndegwamartin on 27/06/2018. @@ -79,71 +76,6 @@ public void testOnDestroyShouldCallInteractorOnDestroyWithCorrectParameter() { Mockito.verify(interactor).onDestroy(false); } - @Test - public void testAttemptLoginShouldValidateCredentialsCorrectly() { - - LoginPresenter presenter = new LoginPresenter(view); - presenter.setLoginModel(model);//set mocked model - presenter.setLoginInteractor(interactor); //set mocked interactor - - Mockito.doReturn(false).when(model).isEmptyUsername(ArgumentMatchers.anyString()); - Mockito.doReturn(true).when(model).isPasswordValid(ArgumentMatchers.anyString()); - presenter.attemptLogin(DUMMY_USERNAME, DUMMY_PASSWORD); - Mockito.verify(view).resetPaswordError(); - Mockito.verify(view).resetUsernameError(); - Mockito.verify(model).isEmptyUsername(DUMMY_USERNAME); - Mockito.verify(model).isPasswordValid(DUMMY_PASSWORD); - Mockito.verify(interactor).login(ArgumentMatchers.any(WeakReference.class), ArgumentMatchers.eq(DUMMY_USERNAME), ArgumentMatchers.eq - (DUMMY_PASSWORD)); - - } - - @Test - public void testAttemptLoginShouldCallLoginMethodWithCorrectParametersWhenValidationPasses() { - - LoginPresenter presenter = new LoginPresenter(view); - presenter.setLoginModel(model);//set mocked model - presenter.setLoginInteractor(interactor); //set mocked interactor - - Mockito.doReturn(false).when(model).isEmptyUsername(ArgumentMatchers.anyString()); - Mockito.doReturn(true).when(model).isPasswordValid(ArgumentMatchers.anyString()); - presenter.attemptLogin(DUMMY_USERNAME, DUMMY_PASSWORD); - Mockito.verify(interactor).login(ArgumentMatchers.any(WeakReference.class), ArgumentMatchers.eq(DUMMY_USERNAME), ArgumentMatchers.eq - (DUMMY_PASSWORD)); - - } - - @Test - public void testAttemptLoginShouldNotCallLoginMethodWithCorrectParametersWhenValidationFails() { - LoginPresenter presenter = new LoginPresenter(view); - presenter.setLoginModel(new BaseLoginModel());//create real model - presenter.setLoginInteractor(interactor); //set mocked interactor - - presenter.attemptLogin(null, DUMMY_PASSWORD); - String NULL_USERNAME = null; - Mockito.verify(view).setUsernameError(R.string.error_field_required); - Mockito.verify(view).enableLoginButton(true); - Mockito.verify(interactor, Mockito.times(0)).login(ArgumentMatchers.any(WeakReference.class), ArgumentMatchers.eq(NULL_USERNAME), - ArgumentMatchers.eq(DUMMY_PASSWORD)); - - - } - - @Test - public void testAttemptLoginShouldNotCallLoginMethodWhenValidationFails() { - - LoginPresenter presenter = new LoginPresenter(view); - presenter.setLoginModel(model);//set mocked model - presenter.setLoginInteractor(interactor); //set mocked interactor - - Mockito.doReturn(false).when(model).isPasswordValid(ArgumentMatchers.anyString()); - - presenter.attemptLogin(DUMMY_USERNAME, DUMMY_PASSWORD); - - Mockito.verify(interactor, Mockito.times(0)).login(ArgumentMatchers.any(WeakReference.class), ArgumentMatchers.eq(DUMMY_USERNAME), - ArgumentMatchers.eq(DUMMY_PASSWORD)); - - } @Test public void testCanvasGlobalLayoutListenerShouldInvokeCorrectProcessLayoutOperations() { From 749607424e0fefb47657ea29ecac15f4edf65b57 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Fri, 4 Sep 2020 18:28:57 +0300 Subject: [PATCH 29/33] remove update of key in repeating grp --- .../src/main/java/org/smartregister/anc/library/util/Utils.java | 1 - 1 file changed, 1 deletion(-) diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index 83850efe0..153118837 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -690,7 +690,6 @@ public static HashMap> buildRepeatingGroupValues fieldKey = fieldKey.substring(0, fieldKey.lastIndexOf("_")); if (keysArrayList.contains(fieldKey) && StringUtils.isNotBlank(fieldValue)) { String fieldKeyId = valueField.optString(JsonFormConstants.KEY).substring(fieldKey.length() + 1); - valueField.put(JsonFormConstants.KEY, fieldKey); HashMap hashMap = repeatingGroupMap.get(fieldKeyId) == null ? new HashMap<>() : repeatingGroupMap.get(fieldKeyId); hashMap.put(fieldKey, fieldValue); repeatingGroupMap.put(fieldKeyId, hashMap); From 0189abf866f14a922c8ed9e4b140cb863ee8cbea Mon Sep 17 00:00:00 2001 From: bennsimon Date: Tue, 8 Sep 2020 12:23:52 +0300 Subject: [PATCH 30/33] add test --- .../repository/PreviousContactRepository.java | 3 +- .../PreviousContactRepositoryTest.java | 91 +++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 opensrp-anc/src/test/java/org/smartregister/anc/library/repository/PreviousContactRepositoryTest.java diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java index cc5d261b3..ee9866136 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java @@ -141,11 +141,10 @@ public List getPreviousContacts(@NonNull String baseEntityId, @ if (StringUtils.isNotBlank(baseEntityId)) { if (keysArr != null) { selection = BASE_ENTITY_ID + " = ? " + BaseRepository.COLLATE_NOCASE + " AND " + KEY + " IN ( '" + StringUtils.join(keysArr, "','") + "') "; - selectionArgs = new String[]{baseEntityId}; } else { selection = BASE_ENTITY_ID + " = ? " + BaseRepository.COLLATE_NOCASE; - selectionArgs = new String[]{baseEntityId}; } + selectionArgs = new String[]{baseEntityId}; } mCursor = db.query(TABLE_NAME, projectionArgs, selection, selectionArgs, null, null, orderBy, null); diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/repository/PreviousContactRepositoryTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/repository/PreviousContactRepositoryTest.java new file mode 100644 index 000000000..5d432e9f3 --- /dev/null +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/repository/PreviousContactRepositoryTest.java @@ -0,0 +1,91 @@ +package org.smartregister.anc.library.repository; + + +import net.sqlcipher.Cursor; +import net.sqlcipher.database.SQLiteDatabase; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.smartregister.anc.library.activity.BaseUnitTest; +import org.smartregister.anc.library.model.PreviousContact; + +import java.util.List; + +public class PreviousContactRepositoryTest extends BaseUnitTest { + + @Mock + private SQLiteDatabase sqLiteDatabase; + + private PreviousContactRepository previousContactRepository; + + @Mock + private Cursor cursor; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + previousContactRepository = Mockito.spy(new PreviousContactRepository()); + } + + @Test + public void testGetPreviousContactsShouldReturnPreviousLists() { + String baseEntityId = "3243-4wew-323"; + String[] keysArr = new String[]{"contact_date"}; + + Mockito.doReturn(0).when(cursor) + .getColumnIndex(PreviousContactRepository.ID); + Mockito.doReturn(1).when(cursor) + .getColumnIndex(PreviousContactRepository.KEY); + Mockito.doReturn(2).when(cursor) + .getColumnIndex(PreviousContactRepository.VALUE); + Mockito.doReturn(3).when(cursor) + .getColumnIndex(PreviousContactRepository.BASE_ENTITY_ID); + + + Mockito.doReturn(1L).when(cursor) + .getLong(0); + Mockito.doReturn("contact_date").when(cursor) + .getString(1); + Mockito.doReturn("2020-08-08").when(cursor) + .getString(2); + Mockito.doReturn(baseEntityId).when(cursor) + .getString(3); + + Mockito.doAnswer(new Answer() { + int count = 0; + + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + if (count > 0) { + return false; + } + count++; + return true; + } + }).when(cursor).moveToNext(); + + Mockito.doReturn(sqLiteDatabase) + .when(previousContactRepository).getReadableDatabase(); + + Mockito.doReturn(cursor).when(sqLiteDatabase) + .query(Mockito.eq(PreviousContactRepository.TABLE_NAME), + Mockito.any(String[].class), + Mockito.anyString(), + Mockito.any(String[].class), + Mockito.eq(null), + Mockito.eq(null), + Mockito.anyString(), + Mockito.eq(null)); + + + List previousContactList = previousContactRepository.getPreviousContacts(baseEntityId, keysArr); + Assert.assertEquals(1, previousContactList.size()); + } + +} \ No newline at end of file From 48b73d026638dfc396ffd9233af5d4c283c53433 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Tue, 8 Sep 2020 13:29:43 +0300 Subject: [PATCH 31/33] migrate to latest core --- build.gradle | 9 ++-- gradle.properties | 8 ++-- gradle/wrapper/gradle-wrapper.properties | 4 +- opensrp-anc/build.gradle | 44 ++++++++++++------- .../smartregister/anc/library/AncLibrary.java | 4 +- .../activity/ActivityConfiguration.java | 2 +- .../anc/library/activity/BaseActivity.java | 2 +- .../activity/BaseCharacteristicsActivity.java | 10 ++--- .../library/activity/BaseContactActivity.java | 4 +- .../activity/BaseHomeRegisterActivity.java | 16 ++++--- .../library/activity/BaseProfileActivity.java | 8 ++-- .../activity/ContactJsonFormActivity.java | 4 +- .../activity/ContactSummarySendActivity.java | 8 ++-- .../activity/LibraryContentActivity.java | 4 +- .../PreviousContactsDetailsActivity.java | 10 ++--- .../PreviousContactsTestsActivity.java | 8 ++-- .../anc/library/activity/ProfileActivity.java | 8 ++-- .../adapter/CharacteristicsAdapter.java | 2 +- .../anc/library/adapter/ContactAdapter.java | 2 +- .../adapter/ContactScheduleAdapter.java | 6 +-- .../adapter/ContactSummaryAdapter.java | 4 +- .../adapter/ContactSummaryFinishAdapter.java | 2 +- .../adapter/ContactTasksDisplayAdapter.java | 4 +- .../library/adapter/LastContactAdapter.java | 8 ++-- .../LastContactAllTestsDialogAdapter.java | 6 +-- ...stContactAllTestsResultsDialogAdapter.java | 4 +- .../adapter/LibraryContentAdapter.java | 4 +- .../adapter/PreviousContactsAdapter.java | 6 +-- .../adapter/ProfileOverviewAdapter.java | 8 ++-- .../adapter/ProfileViewPagerAdapter.java | 6 +-- .../AncMaternityTransferProcessor.java | 2 +- .../library/contract/RegisterContract.java | 2 +- .../fragment/AdvancedSearchFragment.java | 4 +- .../ContactWizardJsonFormFragment.java | 4 +- .../fragment/HomeRegisterFragment.java | 12 ++--- .../anc/library/fragment/LibraryFragment.java | 10 ++--- .../anc/library/fragment/MeFragment.java | 4 +- .../fragment/NoMatchDialogFragment.java | 4 +- .../fragment/ProfileContactsFragment.java | 6 +-- .../fragment/ProfileOverviewFragment.java | 4 +- .../fragment/ProfileTasksFragment.java | 4 +- .../library/fragment/SortFilterFragment.java | 12 ++--- .../interactor/AdvancedSearchInteractor.java | 2 +- .../interactor/ClientTransferProcessor.java | 2 +- .../library/interactor/ContactInteractor.java | 4 +- .../interactor/ContactSummaryInteractor.java | 2 +- .../interactor/RegisterInteractor.java | 6 +-- .../library/model/ContactSummaryModel.java | 2 +- .../anc/library/model/RegisterModel.java | 2 +- .../library/presenter/ProfilePresenter.java | 2 +- .../library/presenter/RegisterPresenter.java | 2 +- .../provider/AdvancedSearchProvider.java | 2 +- .../library/provider/RegisterProvider.java | 2 +- .../library/repository/PatientRepository.java | 2 +- .../repository/PreviousContactRepository.java | 4 +- .../sync/BaseAncClientProcessorForJava.java | 8 ++-- .../task/LoadContactSummaryDataTask.java | 4 +- .../anc/library/util/ANCJsonFormUtils.java | 6 +-- .../anc/library/util/AppExecutors.java | 2 +- .../library/util/ImageLoaderRequestUtils.java | 2 +- .../util/SiteCharacteristicsFormUtils.java | 2 +- .../anc/library/util/TemplateUtils.java | 2 +- .../smartregister/anc/library/util/Utils.java | 4 +- .../library/view/CopyToClipboardDialog.java | 2 +- .../anc/library/view/RoundedImageView.java | 2 +- .../anc/library/view/SquareCardView.java | 2 +- .../viewholder/ContactTasksViewHolder.java | 4 +- .../viewholder/LibraryContentViewHolder.java | 4 +- .../main/res/layout/activity_base_profile.xml | 22 +++++----- .../res/layout/activity_characteristics.xml | 2 +- .../src/main/res/layout/activity_contact.xml | 4 +- .../res/layout/activity_contact_summary.xml | 4 +- .../activity_contact_summary_finish.xml | 18 ++++---- .../res/layout/activity_library_content.xml | 4 +- .../res/layout/activity_previous_contacts.xml | 20 ++++----- .../activity_previous_contacts_tests.xml | 6 +-- .../main/res/layout/advanced_search_form.xml | 4 +- .../main/res/layout/advanced_search_list.xml | 2 +- .../res/layout/all_tests_results_dialog.xml | 8 ++-- .../layout/all_tests_results_dialog_row.xml | 4 +- .../all_tests_results_dialog_title_row.xml | 4 +- .../res/layout/balance_nutrition_content.xml | 4 +- .../main/res/layout/contact_schedule_row.xml | 4 +- .../src/main/res/layout/content_contact.xml | 10 ++--- .../src/main/res/layout/fragment_library.xml | 6 +-- .../res/layout/fragment_profile_contacts.xml | 10 ++--- .../res/layout/fragment_profile_overview.xml | 6 +-- .../res/layout/fragment_profile_tasks.xml | 2 +- .../main/res/layout/fragment_quick_check.xml | 10 ++--- .../main/res/layout/fragment_sort_filter.xml | 4 +- .../src/main/res/layout/last_contact_row.xml | 4 +- .../src/main/res/layout/nav_view_base.xml | 4 +- .../res/layout/physical_activity_content.xml | 4 +- .../main/res/layout/previous_contact_row.xml | 6 +-- .../layout/previous_contacts_preview_row.xml | 4 +- .../main/res/layout/profile_overview_row.xml | 4 +- .../res/layout/register_home_list_row.xml | 4 +- .../src/main/res/layout/tasks_tab_title.xml | 4 +- .../res/layout/toolbar_advanced_search.xml | 8 ++-- .../res/layout/toolbar_characteristics.xml | 8 ++-- .../src/main/res/layout/toolbar_contact.xml | 8 ++-- .../res/layout/toolbar_container_form.xml | 8 ++-- .../src/main/res/layout/toolbar_library.xml | 8 ++-- .../res/layout/toolbar_library_activity.xml | 8 ++-- .../res/layout/toolbar_previous_contacts.xml | 8 ++-- .../main/res/layout/toolbar_quick_check.xml | 8 ++-- .../main/res/layout/toolbar_sort_filter.xml | 8 ++-- opensrp-anc/src/test/AndroidTestManifest.xml | 2 +- .../activity/BaseActivityUnitTest.java | 4 +- .../BaseHomeRegisterActivityTest.java | 4 +- .../ContactSummaryFinishActivityTest.java | 4 +- .../library/activity/ProfileActivityTest.java | 4 +- .../adapter/ProfileViewPagerAdapterTest.java | 4 +- .../adapter/ServiceLocationsAdapterTest.java | 3 +- .../ContactWizardJsonFormFragmentTest.java | 2 +- .../fragment/ProfileContactsFragmentTest.java | 6 +-- .../fragment/ProfileOverviewFragmentTest.java | 6 +-- .../fragment/ProfileTasksFragmentTest.java | 6 +-- ...mNavigationHelperDisableShiftModeTest.java | 2 +- .../library/helper/ImageRenderHelperTest.java | 2 +- .../interactor/RegisterInteractorTest.java | 10 ++--- .../anc/library/job/TestAncJobCreator.java | 4 +- .../anc/library/model/LoginModelTest.java | 14 ------ .../anc/library/model/RegisterModelTest.java | 2 +- .../presenter/RegisterPresenterTest.java | 2 +- .../BaseAncClientProcessorForJavaTest.java | 4 +- .../library/util/ANCJsonFormUtilsTest.java | 2 +- reference-app/build.gradle | 29 ++++++------ reference-app/src/main/AndroidManifest.xml | 2 +- .../anc/application/AncApplication.java | 23 +++++----- .../anc/application/AncSyncConfiguration.java | 17 +++++++ .../smartregister/anc/job/AncJobCreator.java | 4 +- .../anc/job/ViewConfigurationsServiceJob.java | 2 +- sample/build.gradle | 10 ++--- .../sample/anc/MainActivity.java | 2 +- sample/src/main/res/layout/activity_main.xml | 4 +- 136 files changed, 415 insertions(+), 390 deletions(-) diff --git a/build.gradle b/build.gradle index 621379c8a..24f24bb57 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:4.0.1' classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.8.2' classpath 'com.palantir:jacoco-coverage:0.4.0' classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.11.0" @@ -21,7 +21,6 @@ buildscript { } } -apply plugin: 'com.palantir.jacoco-full-report' apply plugin: 'com.github.kt3k.coveralls' configure(allprojects) { project -> @@ -85,9 +84,9 @@ task clean(type: Delete) { delete rootProject.buildDir } -jacocoFull { - excludeProject ":sample", ":opensrp-client-anc" -} +//jacocoFull { +// excludeProject ":sample", ":opensrp-client-anc" +//} coveralls { jacocoReportPath = "${buildDir}/reports/jacoco/jacocoFullReport/jacocoFullReport.xml" diff --git a/gradle.properties b/gradle.properties index 3af924ab9..0a93f3e90 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,6 +26,8 @@ POM_SETTING_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt POM_SETTING_LICENCE_DIST=repo POM_SETTING_DEVELOPER_ID=opensrp POM_SETTING_DEVELOPER_NAME=OpenSRP Onadev -android.enableUnitTestBinaryResources=true -android.enableSeparateAnnotationProcessing=true -android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true \ No newline at end of file +#android.enableUnitTestBinaryResources=true +#android.enableSeparateAnnotationProcessing=true +android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true +android.useAndroidX=true +android.enableJetifier=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 62a7cca6d..2f6d062aa 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Nov 21 15:37:28 EAT 2019 +#Tue Sep 08 12:33:01 EAT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index 42b753c9e..71f6e9981 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:4.0.1' classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.8.3' classpath 'com.google.gms:google-services:4.3.3' } @@ -58,7 +58,7 @@ android { versionCode 1 versionName "1.2.11" multiDexEnabled true - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' if (properties != null && properties.containsKey("store.file") && properties.containsKey("store.password") && properties.containsKey("key.password")) { signingConfig signingConfigs.release @@ -120,8 +120,8 @@ dependencies { def powerMockVersion = '2.0.4' implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation('org.smartregister:opensrp-client-native-form:2.0.0-LOCAL-SNAPSHOT@aar') { + implementation 'androidx.appcompat:appcompat:1.0.0' + implementation('org.smartregister:opensrp-client-native-form:2.0.0-PREVIEW-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'appcompat-v7' @@ -132,7 +132,7 @@ dependencies { exclude group: 'org.yaml', module: 'snakeyaml' exclude group: 'io.ona.rdt-capture', module: 'lib' } - implementation('org.smartregister:opensrp-client-core:1.12.0-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-core:2.0.8-SNAPSHOT@aar') { transitive = true exclude group: 'com.github.bmelnychuk', module: 'atv' exclude group: 'com.google.guava', module: 'guava' @@ -172,15 +172,15 @@ dependencies { implementation 'com.evernote:android-job:1.2.6' implementation 'com.github.lecho:hellocharts-android:v1.5.8' implementation 'id.zelory:compressor:2.1.0' - implementation('com.android.support:design:28.0.0') { + implementation('com.google.android.material:material:1.0.0') { exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'cardview-v7' } - implementation 'com.android.support:recyclerview-v7:28.0.0' - implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'androidx.cardview:cardview:1.0.0' implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation group: 'org.yaml', name: 'snakeyaml', version: '1.25' implementation 'de.hdodenhof:circleimageview:3.0.1' implementation 'org.jeasy:easy-rules-core:3.3.0' @@ -193,7 +193,7 @@ dependencies { } testImplementation 'org.robolectric:robolectric:4.3.1' testImplementation 'org.robolectric:shadows-multidex:4.3.1' - testImplementation 'org.robolectric:shadows-support-v4:3.4-rc2' + // testImplementation 'org.robolectric:shadows-support-v4:3.4-rc2' testImplementation "org.powermock:powermock-module-junit4:$powerMockVersion" testImplementation "org.powermock:powermock-module-junit4-rule:$powerMockVersion" testImplementation "org.powermock:powermock-api-mockito2:$powerMockVersion" @@ -202,13 +202,14 @@ dependencies { testImplementation 'org.apache.maven:maven-ant-tasks:2.1.3' testImplementation 'org.skyscreamer:jsonassert:1.5.0' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2') { + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0') { exclude group: 'com.google.code.findbugs' } } task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) { + reports { xml.enabled = true html.enabled = true @@ -218,14 +219,23 @@ task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'crea getReports().getHtml().setDestination(file("${buildDir}/reports/jacoco/jacocoRootReport/html")) def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*', '**/*$ViewBinder*.*'] - def debugTree = fileTree(dir: "$project.buildDir/intermediates/javac/debug/classes/", excludes: fileFilter) + def debugTree = fileTree(dir: "$project.buildDir/intermediates/javac/debug/classes", excludes: fileFilter) def mainSrc = "$project.projectDir/src/main/java" - sourceDirectories = files([mainSrc]) - classDirectories = files([debugTree]) - executionData = fileTree(dir: project.buildDir, includes: [ + sourceDirectories.setFrom(files([mainSrc])) + classDirectories.setFrom(([debugTree])) + executionData.setFrom(fileTree(dir: project.buildDir, includes: [ 'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec' - ]) + ])) +} + +//coveralls { +// jacocoReportPath = "${buildDir}/reports/jacoco/jacocoRootReport/merged.xml" +// sourceDirs = ["$project.projectDir/src/main/java"] +//} + +coveralls { + jacocoReportPath = "${buildDir}/reports/jacoco/jacocoRootReport/merged.xml" } task printTasks { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/AncLibrary.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/AncLibrary.java index fab935fe4..d0bb723c1 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/AncLibrary.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/AncLibrary.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.google.gson.Gson; import com.vijay.jsonwizard.constants.JsonFormConstants; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ActivityConfiguration.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ActivityConfiguration.java index 2e367dbb4..823464cdb 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ActivityConfiguration.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ActivityConfiguration.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.activity; import android.app.Activity; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; /** * Created by Ephraim Kigamba - ekigamba@ona.io on 2019-07-17 diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseActivity.java index 08dff3aa4..0290e9bbf 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseActivity.java @@ -3,7 +3,7 @@ import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import org.smartregister.anc.library.AncLibrary; import org.smartregister.anc.library.R; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseCharacteristicsActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseCharacteristicsActivity.java index 05119d58f..300cf4221 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseCharacteristicsActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseCharacteristicsActivity.java @@ -2,11 +2,11 @@ import android.os.Build; import android.os.Bundle; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; +import androidx.appcompat.app.AlertDialog; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.appcompat.widget.Toolbar; import android.util.TypedValue; import android.view.View; import android.widget.TextView; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseContactActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseContactActivity.java index aa4ebb80e..e3a81544d 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseContactActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseContactActivity.java @@ -4,8 +4,8 @@ import android.app.AlertDialog; import android.content.Intent; import android.os.Bundle; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivity.java index 86ed8e3e4..50c0744ec 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivity.java @@ -3,10 +3,10 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.design.bottomnavigation.LabelVisibilityMode; -import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; +import com.google.android.material.bottomnavigation.LabelVisibilityMode; +import androidx.fragment.app.Fragment; +import androidx.appcompat.app.AlertDialog; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; @@ -56,6 +56,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Map; import timber.log.Timber; @@ -177,6 +178,11 @@ protected Fragment[] getOtherFragments() { return fragments; } + @Override + public void startFormActivity(String s, String s1, Map map) { + //Do nothing + } + @Override public void startFormActivity(String formName, String entityId, String metaData) { try { @@ -469,7 +475,7 @@ public void removePatientHandler(PatientRemovedEvent event) { @Override public void startRegistration() { - startFormActivity(ConstantsUtils.JsonFormUtils.ANC_REGISTER, null, null); + startFormActivity(ConstantsUtils.JsonFormUtils.ANC_REGISTER, null, ""); } public void showRecordBirthPopUp(CommonPersonObjectClient client) { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseProfileActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseProfileActivity.java index 56194b95a..b4fa6de22 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseProfileActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/BaseProfileActivity.java @@ -4,10 +4,10 @@ import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; -import android.support.design.widget.AppBarLayout; -import android.support.design.widget.CollapsingToolbarLayout; -import android.support.v7.app.ActionBar; -import android.support.v7.widget.Toolbar; +import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.appbar.CollapsingToolbarLayout; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.Toolbar; import android.view.View; import org.greenrobot.eventbus.EventBus; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java index 0b163ce26..e3e06fa93 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactJsonFormActivity.java @@ -3,8 +3,8 @@ import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.content.LocalBroadcastManager; +import androidx.fragment.app.Fragment; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import android.text.TextUtils; import com.google.gson.Gson; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactSummarySendActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactSummarySendActivity.java index f40c95fe6..9d3c276b2 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactSummarySendActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ContactSummarySendActivity.java @@ -1,10 +1,10 @@ package org.smartregister.anc.library.activity; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.widget.Button; import android.widget.ImageView; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/LibraryContentActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/LibraryContentActivity.java index 2e7eba2f2..53810b812 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/LibraryContentActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/LibraryContentActivity.java @@ -1,8 +1,8 @@ package org.smartregister.anc.library.activity; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import android.view.View; import android.widget.TextView; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/PreviousContactsDetailsActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/PreviousContactsDetailsActivity.java index 65f9d42c8..ff9c4fa31 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/PreviousContactsDetailsActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/PreviousContactsDetailsActivity.java @@ -1,11 +1,11 @@ package org.smartregister.anc.library.activity; import android.os.Bundle; -import android.support.constraint.ConstraintLayout; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/PreviousContactsTestsActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/PreviousContactsTestsActivity.java index 58b62fb18..7047d8a5d 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/PreviousContactsTestsActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/PreviousContactsTestsActivity.java @@ -1,10 +1,10 @@ package org.smartregister.anc.library.activity; import android.os.Bundle; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ProfileActivity.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ProfileActivity.java index 9306cb12d..d9f0f47ed 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ProfileActivity.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/activity/ProfileActivity.java @@ -8,10 +8,10 @@ import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.net.Uri; -import android.support.annotation.NonNull; -import android.support.constraint.ConstraintLayout; -import android.support.v4.app.Fragment; -import android.support.v4.view.ViewPager; +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/CharacteristicsAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/CharacteristicsAdapter.java index 7a71ee7f9..d686e78cf 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/CharacteristicsAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/CharacteristicsAdapter.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.adapter; import android.content.Context; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactAdapter.java index 2878a46c4..c3202b9d7 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactAdapter.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.adapter; import android.content.Context; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactScheduleAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactScheduleAdapter.java index ea26fc760..deb19dd73 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactScheduleAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactScheduleAdapter.java @@ -1,9 +1,9 @@ package org.smartregister.anc.library.adapter; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.constraint.ConstraintLayout; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactSummaryAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactSummaryAdapter.java index 6db3c0395..d35298b78 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactSummaryAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactSummaryAdapter.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.adapter; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactSummaryFinishAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactSummaryFinishAdapter.java index 1c63371d2..ffc1505a9 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactSummaryFinishAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactSummaryFinishAdapter.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.adapter; import android.content.Context; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactTasksDisplayAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactTasksDisplayAdapter.java index b8189bea2..447a8f87f 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactTasksDisplayAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ContactTasksDisplayAdapter.java @@ -1,8 +1,8 @@ package org.smartregister.anc.library.adapter; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java index 412b18718..c41ce1c5d 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAdapter.java @@ -1,10 +1,10 @@ package org.smartregister.anc.library.adapter; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.constraint.ConstraintLayout; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAllTestsDialogAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAllTestsDialogAdapter.java index a02f464cb..a28dd7ddd 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAllTestsDialogAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAllTestsDialogAdapter.java @@ -1,9 +1,9 @@ package org.smartregister.anc.library.adapter; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAllTestsResultsDialogAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAllTestsResultsDialogAdapter.java index ff84d11a3..1a6e0ffa2 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAllTestsResultsDialogAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LastContactAllTestsResultsDialogAdapter.java @@ -2,8 +2,8 @@ import android.content.Context; import android.graphics.Typeface; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LibraryContentAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LibraryContentAdapter.java index 4228a2309..7fc5cd132 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LibraryContentAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/LibraryContentAdapter.java @@ -2,8 +2,8 @@ import android.app.Activity; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/PreviousContactsAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/PreviousContactsAdapter.java index 07682db11..69d6b3e67 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/PreviousContactsAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/PreviousContactsAdapter.java @@ -1,9 +1,9 @@ package org.smartregister.anc.library.adapter; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ProfileOverviewAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ProfileOverviewAdapter.java index b8d358a33..c27cb58b0 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ProfileOverviewAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ProfileOverviewAdapter.java @@ -2,10 +2,10 @@ import android.app.Activity; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.view.Gravity; import android.view.LayoutInflater; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ProfileViewPagerAdapter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ProfileViewPagerAdapter.java index 468c74d7a..0f4b020df 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ProfileViewPagerAdapter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/adapter/ProfileViewPagerAdapter.java @@ -1,8 +1,8 @@ package org.smartregister.anc.library.adapter; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; import java.util.ArrayList; import java.util.List; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java index d5a6939b4..03776573e 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/configuration/AncMaternityTransferProcessor.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.configuration; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.vijay.jsonwizard.constants.JsonFormConstants; import com.vijay.jsonwizard.utils.FormUtils; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/contract/RegisterContract.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/contract/RegisterContract.java index 6f534d460..8ee26b415 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/contract/RegisterContract.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/contract/RegisterContract.java @@ -1,6 +1,6 @@ package org.smartregister.anc.library.contract; -import android.support.v4.util.Pair; +import androidx.core.util.Pair; import org.apache.commons.lang3.tuple.Triple; import org.json.JSONObject; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/AdvancedSearchFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/AdvancedSearchFragment.java index 6812f10f4..8e4ee844b 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/AdvancedSearchFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/AdvancedSearchFragment.java @@ -7,8 +7,8 @@ import android.database.Cursor; import android.net.ConnectivityManager; import android.os.Bundle; -import android.support.v4.content.CursorLoader; -import android.support.v4.content.Loader; +import androidx.loader.content.CursorLoader; +import androidx.loader.content.Loader; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java index db6570cff..144181952 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragment.java @@ -3,8 +3,8 @@ import android.app.AlertDialog; import android.app.Dialog; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.ActionBar; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/HomeRegisterFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/HomeRegisterFragment.java index fe8182ac9..a4d604311 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/HomeRegisterFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/HomeRegisterFragment.java @@ -3,8 +3,10 @@ import android.annotation.SuppressLint; import android.database.Cursor; import android.os.Bundle; -import android.support.v4.content.CursorLoader; -import android.support.v4.content.Loader; + +import androidx.fragment.app.Fragment; +import androidx.loader.content.CursorLoader; +import androidx.loader.content.Loader; import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; @@ -65,7 +67,7 @@ protected void initializePresenter() { public void setUniqueID(String qrCode) { BaseRegisterActivity baseRegisterActivity = (BaseRegisterActivity) getActivity(); if (baseRegisterActivity != null) { - android.support.v4.app.Fragment currentFragment = + Fragment currentFragment = baseRegisterActivity.findFragmentByPosition(BaseRegisterActivity.ADVANCED_SEARCH_POSITION); if (currentFragment instanceof AdvancedSearchFragment) { ((AdvancedSearchFragment) currentFragment).getAncId().setText(qrCode); @@ -78,7 +80,7 @@ public void setUniqueID(String qrCode) { public void setAdvancedSearchFormData(HashMap formData) { BaseRegisterActivity baseRegisterActivity = (BaseRegisterActivity) getActivity(); if (baseRegisterActivity != null) { - android.support.v4.app.Fragment currentFragment = + Fragment currentFragment = baseRegisterActivity.findFragmentByPosition(BaseRegisterActivity.ADVANCED_SEARCH_POSITION); ((AdvancedSearchFragment) currentFragment).setSearchFormData(formData); } @@ -123,7 +125,7 @@ protected String getDefaultSortQuery() { @Override protected void startRegistration() { - ((BaseHomeRegisterActivity) getActivity()).startFormActivity(ConstantsUtils.JsonFormUtils.ANC_REGISTER, null, null); + ((BaseHomeRegisterActivity) getActivity()).startFormActivity(ConstantsUtils.JsonFormUtils.ANC_REGISTER, null, ""); } @Override diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/LibraryFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/LibraryFragment.java index fee74c143..f71ab08b2 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/LibraryFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/LibraryFragment.java @@ -1,11 +1,11 @@ package org.smartregister.anc.library.fragment; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.appcompat.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/MeFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/MeFragment.java index 7343aa30d..18ec8e150 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/MeFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/MeFragment.java @@ -2,8 +2,8 @@ import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/NoMatchDialogFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/NoMatchDialogFragment.java index 50ac67120..e88eb8ed7 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/NoMatchDialogFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/NoMatchDialogFragment.java @@ -6,7 +6,7 @@ import android.app.FragmentTransaction; import android.content.DialogInterface; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -92,7 +92,7 @@ public void onClick(View view) { private void goToAdvancedSearch(String whoAncId) { ((BaseHomeRegisterActivity) baseRegisterActivity).startAdvancedSearch(); - android.support.v4.app.Fragment currentFragment = + androidx.fragment.app.Fragment currentFragment = baseRegisterActivity.findFragmentByPosition(BaseRegisterActivity.ADVANCED_SEARCH_POSITION); ((AdvancedSearchFragment) currentFragment).getAncId().setText(whoAncId); } diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileContactsFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileContactsFragment.java index a6b44b4dc..b83723451 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileContactsFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileContactsFragment.java @@ -2,9 +2,9 @@ import android.content.Intent; import android.os.Bundle; -import android.support.constraint.ConstraintLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileOverviewFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileOverviewFragment.java index 42d4951e4..0b784e9dd 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileOverviewFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileOverviewFragment.java @@ -1,8 +1,8 @@ package org.smartregister.anc.library.fragment; import android.os.Bundle; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileTasksFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileTasksFragment.java index 9dcb17e6d..fc8a7a5eb 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileTasksFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/ProfileTasksFragment.java @@ -2,8 +2,8 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/SortFilterFragment.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/SortFilterFragment.java index 5c33c0a11..330fcf6b9 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/SortFilterFragment.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/SortFilterFragment.java @@ -4,12 +4,12 @@ import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.text.Html; import android.view.LayoutInflater; import android.view.View; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/AdvancedSearchInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/AdvancedSearchInteractor.java index 43b3dffc5..b5d71c6d9 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/AdvancedSearchInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/AdvancedSearchInteractor.java @@ -1,6 +1,6 @@ package org.smartregister.anc.library.interactor; -import android.support.annotation.VisibleForTesting; +import androidx.annotation.VisibleForTesting; import org.apache.commons.lang3.StringUtils; import org.smartregister.DristhiConfiguration; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ClientTransferProcessor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ClientTransferProcessor.java index b3dbf5165..d680d057e 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ClientTransferProcessor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ClientTransferProcessor.java @@ -1,6 +1,6 @@ package org.smartregister.anc.library.interactor; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.json.JSONObject; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactInteractor.java index d9f6fa3af..00c45ae5b 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactInteractor.java @@ -1,8 +1,8 @@ package org.smartregister.anc.library.interactor; import android.content.Context; -import android.support.annotation.VisibleForTesting; -import android.support.v4.util.Pair; +import androidx.annotation.VisibleForTesting; +import androidx.core.util.Pair; import android.text.TextUtils; import org.jeasy.rules.api.Facts; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactSummaryInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactSummaryInteractor.java index 4c8853cab..a321a1a69 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactSummaryInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ContactSummaryInteractor.java @@ -1,6 +1,6 @@ package org.smartregister.anc.library.interactor; -import android.support.annotation.VisibleForTesting; +import androidx.annotation.VisibleForTesting; import org.apache.commons.lang3.StringUtils; import org.jeasy.rules.api.Facts; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java index 9276b45a0..ccdf365b8 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/RegisterInteractor.java @@ -1,8 +1,8 @@ package org.smartregister.anc.library.interactor; -import android.support.annotation.NonNull; -import android.support.annotation.VisibleForTesting; -import android.support.v4.util.Pair; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import androidx.core.util.Pair; import com.vijay.jsonwizard.constants.JsonFormConstants; import com.vijay.jsonwizard.utils.FormUtils; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/model/ContactSummaryModel.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/model/ContactSummaryModel.java index b77174a97..9088378ab 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/model/ContactSummaryModel.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/model/ContactSummaryModel.java @@ -1,6 +1,6 @@ package org.smartregister.anc.library.model; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import org.json.JSONObject; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/model/RegisterModel.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/model/RegisterModel.java index 2d3b2d4fb..40b990293 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/model/RegisterModel.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/model/RegisterModel.java @@ -1,6 +1,6 @@ package org.smartregister.anc.library.model; -import android.support.v4.util.Pair; +import androidx.core.util.Pair; import android.util.Log; import org.json.JSONObject; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ProfilePresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ProfilePresenter.java index 729eb1877..a024837ca 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ProfilePresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ProfilePresenter.java @@ -2,7 +2,7 @@ import android.content.Context; import android.content.Intent; -import android.support.v4.util.Pair; +import androidx.core.util.Pair; import org.apache.commons.lang3.tuple.Triple; import org.json.JSONObject; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/RegisterPresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/RegisterPresenter.java index 47f252b98..afc77b06b 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/RegisterPresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/RegisterPresenter.java @@ -2,7 +2,7 @@ import android.content.SharedPreferences; import android.preference.PreferenceManager; -import android.support.v4.util.Pair; +import androidx.core.util.Pair; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Triple; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/provider/AdvancedSearchProvider.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/provider/AdvancedSearchProvider.java index 2d788b291..59382ad17 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/provider/AdvancedSearchProvider.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/provider/AdvancedSearchProvider.java @@ -2,7 +2,7 @@ import android.content.Context; import android.database.Cursor; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/provider/RegisterProvider.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/provider/RegisterProvider.java index 532384df6..d706c365e 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/provider/RegisterProvider.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/provider/RegisterProvider.java @@ -2,7 +2,7 @@ import android.content.Context; import android.database.Cursor; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java index 8ab625c5f..f5c7d3fda 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PatientRepository.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.repository; import android.content.ContentValues; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import net.sqlcipher.Cursor; import net.sqlcipher.database.SQLiteDatabase; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java index ee9866136..61c3cb299 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/repository/PreviousContactRepository.java @@ -1,8 +1,8 @@ package org.smartregister.anc.library.repository; import android.content.ContentValues; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.util.Log; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java index 5ab6f6212..0238b1027 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJava.java @@ -4,8 +4,8 @@ import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import com.google.gson.reflect.TypeToken; @@ -25,8 +25,8 @@ import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.anc.library.util.DBConstantsUtils; import org.smartregister.commonregistry.AllCommonsRepository; -import org.smartregister.domain.db.Client; -import org.smartregister.domain.db.Event; +import org.smartregister.domain.Client; +import org.smartregister.domain.Event; import org.smartregister.domain.db.EventClient; import org.smartregister.domain.jsonmapping.ClientClassification; import org.smartregister.domain.jsonmapping.ClientField; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java index 3d6b263bb..0b98b9770 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/task/LoadContactSummaryDataTask.java @@ -3,8 +3,8 @@ import android.content.Context; import android.content.Intent; import android.os.AsyncTask; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import org.apache.commons.lang3.StringUtils; import org.jeasy.rules.api.Facts; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java index 9e03d1329..599f0353f 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; -import android.support.annotation.NonNull; -import android.support.constraint.ConstraintLayout; -import android.support.v4.util.Pair; +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.util.Pair; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/AppExecutors.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/AppExecutors.java index 1ea275070..73c3eee95 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/AppExecutors.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/AppExecutors.java @@ -6,7 +6,7 @@ import android.os.Handler; import android.os.Looper; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.util.concurrent.Executor; import java.util.concurrent.Executors; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ImageLoaderRequestUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ImageLoaderRequestUtils.java index e2ad14189..f28ab4a31 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ImageLoaderRequestUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ImageLoaderRequestUtils.java @@ -2,7 +2,7 @@ import android.content.Context; import android.graphics.Bitmap; -import android.support.v4.util.LruCache; +import androidx.collection.LruCache; import com.android.volley.Cache; import com.android.volley.Network; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/SiteCharacteristicsFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/SiteCharacteristicsFormUtils.java index 452b6de74..31236f759 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/SiteCharacteristicsFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/SiteCharacteristicsFormUtils.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.util; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.json.JSONObject; import org.smartregister.anc.library.AncLibrary; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/TemplateUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/TemplateUtils.java index 805ac47ae..c17965a13 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/TemplateUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/TemplateUtils.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.util; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.json.JSONException; import org.json.JSONObject; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java index 153118837..95cdd3403 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/Utils.java @@ -9,8 +9,8 @@ import android.database.Cursor; import android.os.Build; import android.preference.PreferenceManager; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.text.format.DateUtils; import android.util.DisplayMetrics; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/view/CopyToClipboardDialog.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/view/CopyToClipboardDialog.java index 531c99868..27b3aa653 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/view/CopyToClipboardDialog.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/view/CopyToClipboardDialog.java @@ -5,7 +5,7 @@ import android.content.ClipboardManager; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import android.view.View; import android.view.Window; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/view/RoundedImageView.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/view/RoundedImageView.java index 69443beab..edb25d49d 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/view/RoundedImageView.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/view/RoundedImageView.java @@ -10,7 +10,7 @@ import android.graphics.PorterDuffXfermode; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; -import android.support.v7.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatImageView; import android.util.AttributeSet; import android.view.ViewGroup; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/view/SquareCardView.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/view/SquareCardView.java index 8aa94121f..5eec56c88 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/view/SquareCardView.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/view/SquareCardView.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.view; import android.content.Context; -import android.support.v7.widget.CardView; +import androidx.cardview.widget.CardView; import android.util.AttributeSet; public class SquareCardView extends CardView { diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/viewholder/ContactTasksViewHolder.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/viewholder/ContactTasksViewHolder.java index 384927df2..dae420f5b 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/viewholder/ContactTasksViewHolder.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/viewholder/ContactTasksViewHolder.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.viewholder; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.widget.Button; import android.widget.ImageView; diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/viewholder/LibraryContentViewHolder.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/viewholder/LibraryContentViewHolder.java index 12578d0cd..0e9d41188 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/viewholder/LibraryContentViewHolder.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/viewholder/LibraryContentViewHolder.java @@ -1,8 +1,8 @@ package org.smartregister.anc.library.viewholder; import android.app.Activity; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; diff --git a/opensrp-anc/src/main/res/layout/activity_base_profile.xml b/opensrp-anc/src/main/res/layout/activity_base_profile.xml index 88df3ff80..8b70a5c93 100644 --- a/opensrp-anc/src/main/res/layout/activity_base_profile.xml +++ b/opensrp-anc/src/main/res/layout/activity_base_profile.xml @@ -1,11 +1,11 @@ - - - - - - + - - + - - + - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/activity_characteristics.xml b/opensrp-anc/src/main/res/layout/activity_characteristics.xml index 3727a0b2d..c68d4ce05 100644 --- a/opensrp-anc/src/main/res/layout/activity_characteristics.xml +++ b/opensrp-anc/src/main/res/layout/activity_characteristics.xml @@ -6,7 +6,7 @@ - diff --git a/opensrp-anc/src/main/res/layout/activity_contact.xml b/opensrp-anc/src/main/res/layout/activity_contact.xml index 5ad18ba4b..aa9ebfde8 100644 --- a/opensrp-anc/src/main/res/layout/activity_contact.xml +++ b/opensrp-anc/src/main/res/layout/activity_contact.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/activity_contact_summary.xml b/opensrp-anc/src/main/res/layout/activity_contact_summary.xml index 890840891..7c6046b4b 100644 --- a/opensrp-anc/src/main/res/layout/activity_contact_summary.xml +++ b/opensrp-anc/src/main/res/layout/activity_contact_summary.xml @@ -62,7 +62,7 @@ android:textColor="@color/text_color" android:textSize="16sp" /> - - + diff --git a/opensrp-anc/src/main/res/layout/activity_contact_summary_finish.xml b/opensrp-anc/src/main/res/layout/activity_contact_summary_finish.xml index d85082d0d..52110e0cd 100644 --- a/opensrp-anc/src/main/res/layout/activity_contact_summary_finish.xml +++ b/opensrp-anc/src/main/res/layout/activity_contact_summary_finish.xml @@ -1,18 +1,18 @@ - - - - - + - - + - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/activity_library_content.xml b/opensrp-anc/src/main/res/layout/activity_library_content.xml index 82bf708f4..40a97efb7 100644 --- a/opensrp-anc/src/main/res/layout/activity_library_content.xml +++ b/opensrp-anc/src/main/res/layout/activity_library_content.xml @@ -1,5 +1,5 @@ - @@ -61,4 +61,4 @@ app:layout_constraintTop_toTopOf="parent" /> - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/activity_previous_contacts.xml b/opensrp-anc/src/main/res/layout/activity_previous_contacts.xml index 1c646d3a7..6b2911e4f 100644 --- a/opensrp-anc/src/main/res/layout/activity_previous_contacts.xml +++ b/opensrp-anc/src/main/res/layout/activity_previous_contacts.xml @@ -7,13 +7,13 @@ android:fillViewport="true" android:scrollbars="none"> - - - - + - - - + - - - + + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/activity_previous_contacts_tests.xml b/opensrp-anc/src/main/res/layout/activity_previous_contacts_tests.xml index 874500dc1..ef1a3b6a2 100644 --- a/opensrp-anc/src/main/res/layout/activity_previous_contacts_tests.xml +++ b/opensrp-anc/src/main/res/layout/activity_previous_contacts_tests.xml @@ -1,11 +1,11 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/advanced_search_form.xml b/opensrp-anc/src/main/res/layout/advanced_search_form.xml index bb57bc528..c53e4c5ff 100644 --- a/opensrp-anc/src/main/res/layout/advanced_search_form.xml +++ b/opensrp-anc/src/main/res/layout/advanced_search_form.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:orientation="vertical"> - - + diff --git a/opensrp-anc/src/main/res/layout/advanced_search_list.xml b/opensrp-anc/src/main/res/layout/advanced_search_list.xml index 7d588f654..5f5f6dd85 100644 --- a/opensrp-anc/src/main/res/layout/advanced_search_list.xml +++ b/opensrp-anc/src/main/res/layout/advanced_search_list.xml @@ -52,7 +52,7 @@ android:layout_height="match_parent" android:background="@drawable/listview_background_rounded"> - - @@ -38,7 +38,7 @@ app:layout_constraintLeft_toRightOf="@+id/txt_title_label" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> - + - - + diff --git a/opensrp-anc/src/main/res/layout/all_tests_results_dialog_row.xml b/opensrp-anc/src/main/res/layout/all_tests_results_dialog_row.xml index a4bce91cc..55ac013a3 100644 --- a/opensrp-anc/src/main/res/layout/all_tests_results_dialog_row.xml +++ b/opensrp-anc/src/main/res/layout/all_tests_results_dialog_row.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/all_tests_results_dialog_title_row.xml b/opensrp-anc/src/main/res/layout/all_tests_results_dialog_title_row.xml index 9bd7821b9..5d06b2a2b 100644 --- a/opensrp-anc/src/main/res/layout/all_tests_results_dialog_title_row.xml +++ b/opensrp-anc/src/main/res/layout/all_tests_results_dialog_title_row.xml @@ -17,13 +17,13 @@ android:textSize="@dimen/referral_dialog_title_text_size" android:textStyle="bold" /> - - + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/balance_nutrition_content.xml b/opensrp-anc/src/main/res/layout/balance_nutrition_content.xml index 8a0723223..aeff2f0a6 100644 --- a/opensrp-anc/src/main/res/layout/balance_nutrition_content.xml +++ b/opensrp-anc/src/main/res/layout/balance_nutrition_content.xml @@ -1,5 +1,5 @@ - - + diff --git a/opensrp-anc/src/main/res/layout/contact_schedule_row.xml b/opensrp-anc/src/main/res/layout/contact_schedule_row.xml index c04cc5291..0c6eedb2a 100644 --- a/opensrp-anc/src/main/res/layout/contact_schedule_row.xml +++ b/opensrp-anc/src/main/res/layout/contact_schedule_row.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/content_contact.xml b/opensrp-anc/src/main/res/layout/content_contact.xml index c5c3f637d..e3e157e1a 100644 --- a/opensrp-anc/src/main/res/layout/content_contact.xml +++ b/opensrp-anc/src/main/res/layout/content_contact.xml @@ -1,5 +1,5 @@ - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/fragment_library.xml b/opensrp-anc/src/main/res/layout/fragment_library.xml index 266b92aa3..d0bb54bfb 100644 --- a/opensrp-anc/src/main/res/layout/fragment_library.xml +++ b/opensrp-anc/src/main/res/layout/fragment_library.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/fragment_profile_contacts.xml b/opensrp-anc/src/main/res/layout/fragment_profile_contacts.xml index c2f518852..bc5cc5053 100644 --- a/opensrp-anc/src/main/res/layout/fragment_profile_contacts.xml +++ b/opensrp-anc/src/main/res/layout/fragment_profile_contacts.xml @@ -1,5 +1,5 @@ - - @@ -49,7 +49,7 @@ android:textColor="@color/white" app:layout_constraintTop_toTopOf="parent" /> - - + - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/fragment_profile_overview.xml b/opensrp-anc/src/main/res/layout/fragment_profile_overview.xml index c82573ba4..8ce0d25df 100644 --- a/opensrp-anc/src/main/res/layout/fragment_profile_overview.xml +++ b/opensrp-anc/src/main/res/layout/fragment_profile_overview.xml @@ -1,5 +1,5 @@ - @@ -8,7 +8,7 @@ android:id="@+id/no_health_data_recorded_profile_overview_layout" layout="@layout/no_health_data_record" /> - - + diff --git a/opensrp-anc/src/main/res/layout/fragment_profile_tasks.xml b/opensrp-anc/src/main/res/layout/fragment_profile_tasks.xml index df2d88033..3e29f6c34 100644 --- a/opensrp-anc/src/main/res/layout/fragment_profile_tasks.xml +++ b/opensrp-anc/src/main/res/layout/fragment_profile_tasks.xml @@ -28,7 +28,7 @@ android:textColor="@color/dark_grey" android:visibility="visible" /> - - @@ -27,7 +27,7 @@ android:textSize="@dimen/quick_check_text_size" android:textStyle="bold" /> - - - - + - - + - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/nav_view_base.xml b/opensrp-anc/src/main/res/layout/nav_view_base.xml index 8e5b585d9..3396de7d2 100644 --- a/opensrp-anc/src/main/res/layout/nav_view_base.xml +++ b/opensrp-anc/src/main/res/layout/nav_view_base.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/physical_activity_content.xml b/opensrp-anc/src/main/res/layout/physical_activity_content.xml index c79347044..ca7a4a5a3 100644 --- a/opensrp-anc/src/main/res/layout/physical_activity_content.xml +++ b/opensrp-anc/src/main/res/layout/physical_activity_content.xml @@ -1,5 +1,5 @@ - - + diff --git a/opensrp-anc/src/main/res/layout/previous_contact_row.xml b/opensrp-anc/src/main/res/layout/previous_contact_row.xml index 90debe5f2..2ed82b001 100644 --- a/opensrp-anc/src/main/res/layout/previous_contact_row.xml +++ b/opensrp-anc/src/main/res/layout/previous_contact_row.xml @@ -1,10 +1,10 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/previous_contacts_preview_row.xml b/opensrp-anc/src/main/res/layout/previous_contacts_preview_row.xml index 7b0843061..fa5246e7d 100644 --- a/opensrp-anc/src/main/res/layout/previous_contacts_preview_row.xml +++ b/opensrp-anc/src/main/res/layout/previous_contacts_preview_row.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/profile_overview_row.xml b/opensrp-anc/src/main/res/layout/profile_overview_row.xml index 412e5d1b4..15fe1d6e4 100644 --- a/opensrp-anc/src/main/res/layout/profile_overview_row.xml +++ b/opensrp-anc/src/main/res/layout/profile_overview_row.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/register_home_list_row.xml b/opensrp-anc/src/main/res/layout/register_home_list_row.xml index 3a67470bd..094cc41f4 100644 --- a/opensrp-anc/src/main/res/layout/register_home_list_row.xml +++ b/opensrp-anc/src/main/res/layout/register_home_list_row.xml @@ -10,7 +10,7 @@ android:paddingStart="@dimen/main_register_padding_start" android:paddingEnd="@dimen/main_register_padding_end"> - - + - - \ No newline at end of file + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/toolbar_advanced_search.xml b/opensrp-anc/src/main/res/layout/toolbar_advanced_search.xml index 063c001e3..637053cac 100644 --- a/opensrp-anc/src/main/res/layout/toolbar_advanced_search.xml +++ b/opensrp-anc/src/main/res/layout/toolbar_advanced_search.xml @@ -6,12 +6,12 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - - - + - + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/toolbar_characteristics.xml b/opensrp-anc/src/main/res/layout/toolbar_characteristics.xml index b7853f7f0..7fcb8d3be 100644 --- a/opensrp-anc/src/main/res/layout/toolbar_characteristics.xml +++ b/opensrp-anc/src/main/res/layout/toolbar_characteristics.xml @@ -6,12 +6,12 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - - - + - + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/toolbar_contact.xml b/opensrp-anc/src/main/res/layout/toolbar_contact.xml index 1458bacea..f51c89b69 100644 --- a/opensrp-anc/src/main/res/layout/toolbar_contact.xml +++ b/opensrp-anc/src/main/res/layout/toolbar_contact.xml @@ -1,11 +1,11 @@ - - - + - + diff --git a/opensrp-anc/src/main/res/layout/toolbar_container_form.xml b/opensrp-anc/src/main/res/layout/toolbar_container_form.xml index cc403a905..ce4719298 100644 --- a/opensrp-anc/src/main/res/layout/toolbar_container_form.xml +++ b/opensrp-anc/src/main/res/layout/toolbar_container_form.xml @@ -1,11 +1,11 @@ - - - + - + diff --git a/opensrp-anc/src/main/res/layout/toolbar_library.xml b/opensrp-anc/src/main/res/layout/toolbar_library.xml index 42987b148..f8a8c205b 100644 --- a/opensrp-anc/src/main/res/layout/toolbar_library.xml +++ b/opensrp-anc/src/main/res/layout/toolbar_library.xml @@ -6,12 +6,12 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - - - - + + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/toolbar_library_activity.xml b/opensrp-anc/src/main/res/layout/toolbar_library_activity.xml index a3231d796..43c8647f3 100644 --- a/opensrp-anc/src/main/res/layout/toolbar_library_activity.xml +++ b/opensrp-anc/src/main/res/layout/toolbar_library_activity.xml @@ -6,12 +6,12 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - - - - + + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/toolbar_previous_contacts.xml b/opensrp-anc/src/main/res/layout/toolbar_previous_contacts.xml index 40ba335d1..ce1ccf903 100644 --- a/opensrp-anc/src/main/res/layout/toolbar_previous_contacts.xml +++ b/opensrp-anc/src/main/res/layout/toolbar_previous_contacts.xml @@ -6,12 +6,12 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - - - + - + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/toolbar_quick_check.xml b/opensrp-anc/src/main/res/layout/toolbar_quick_check.xml index 0b8c08073..befbb8019 100644 --- a/opensrp-anc/src/main/res/layout/toolbar_quick_check.xml +++ b/opensrp-anc/src/main/res/layout/toolbar_quick_check.xml @@ -6,12 +6,12 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - - - + - + \ No newline at end of file diff --git a/opensrp-anc/src/main/res/layout/toolbar_sort_filter.xml b/opensrp-anc/src/main/res/layout/toolbar_sort_filter.xml index 49f1e8a52..5764bafea 100644 --- a/opensrp-anc/src/main/res/layout/toolbar_sort_filter.xml +++ b/opensrp-anc/src/main/res/layout/toolbar_sort_filter.xml @@ -6,12 +6,12 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - - - + - + \ No newline at end of file diff --git a/opensrp-anc/src/test/AndroidTestManifest.xml b/opensrp-anc/src/test/AndroidTestManifest.xml index 01b8e0cb7..11abbba81 100644 --- a/opensrp-anc/src/test/AndroidTestManifest.xml +++ b/opensrp-anc/src/test/AndroidTestManifest.xml @@ -102,7 +102,7 @@ android:screenOrientation="portrait" /> diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseActivityUnitTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseActivityUnitTest.java index 84cee149b..4ef61d5d2 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseActivityUnitTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseActivityUnitTest.java @@ -59,8 +59,8 @@ public void setUp() { //Auto login by default String password = "pwd"; context.session().start(context.session().lengthInMilliseconds()); - context.configuration().getDrishtiApplication().setPassword(password); - context.session().setPassword(password); + context.configuration().getDrishtiApplication().setPassword(password.getBytes()); + context.session().setPassword(password.getBytes()); ReflectionHelpers.setStaticField(ConfigurableViewsLibrary.class, "instance", configurableViewsLibrary); ConfigurableViewsHelper configurableViewsHelper = Mockito.mock(ConfigurableViewsHelper.class); diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java index 109f211eb..6db56492f 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/BaseHomeRegisterActivityTest.java @@ -2,8 +2,8 @@ import android.app.Activity; import android.content.Context; -import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; +import androidx.fragment.app.Fragment; +import androidx.appcompat.app.AlertDialog; import com.google.common.collect.ImmutableMap; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/ContactSummaryFinishActivityTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/ContactSummaryFinishActivityTest.java index 57ca928d8..f2a894033 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/ContactSummaryFinishActivityTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/ContactSummaryFinishActivityTest.java @@ -2,8 +2,8 @@ import android.app.Activity; import android.content.Intent; -import android.support.design.widget.AppBarLayout; -import android.support.design.widget.CollapsingToolbarLayout; +import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.appbar.CollapsingToolbarLayout; import android.view.MenuItem; import android.widget.ImageView; import android.widget.TextView; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/ProfileActivityTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/ProfileActivityTest.java index 520f7b5cc..8a946bbf5 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/ProfileActivityTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/activity/ProfileActivityTest.java @@ -4,8 +4,8 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; -import android.support.design.widget.AppBarLayout; -import android.support.design.widget.CollapsingToolbarLayout; +import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.appbar.CollapsingToolbarLayout; import android.widget.ImageView; import android.widget.TextView; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/ProfileViewPagerAdapterTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/ProfileViewPagerAdapterTest.java index 221d374b3..857317891 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/ProfileViewPagerAdapterTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/ProfileViewPagerAdapterTest.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.adapter; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; import org.junit.Assert; import org.junit.Before; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/ServiceLocationsAdapterTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/ServiceLocationsAdapterTest.java index a9a0d97be..5755bd53d 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/ServiceLocationsAdapterTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/adapter/ServiceLocationsAdapterTest.java @@ -12,6 +12,7 @@ import org.smartregister.anc.library.activity.BaseUnitTest; import java.util.ArrayList; +import java.util.List; public class ServiceLocationsAdapterTest extends BaseUnitTest { private ServiceLocationsAdapter serviceLocationsAdapter; @@ -39,7 +40,7 @@ public void testGetLocationNames() { locationNames.addAll(ArgumentMatchers.anyList()); Assert.assertNotNull(locationNames); - ArrayList arrayList = serviceLocationsAdapter.getLocationNames(); + List arrayList = serviceLocationsAdapter.getLocationNames(); Assert.assertNotNull(arrayList); } diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragmentTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragmentTest.java index 6bbc8c157..6552cbbe9 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragmentTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ContactWizardJsonFormFragmentTest.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.fragment; import android.os.Bundle; -import android.support.v7.app.ActionBar; +import androidx.appcompat.app.ActionBar; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileContactsFragmentTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileContactsFragmentTest.java index d76d0d7f4..84f6ceb13 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileContactsFragmentTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileContactsFragmentTest.java @@ -2,9 +2,9 @@ import android.app.Activity; import android.content.Intent; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import org.junit.After; import org.junit.Assert; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileOverviewFragmentTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileOverviewFragmentTest.java index 734a77fe9..a082329ee 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileOverviewFragmentTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileOverviewFragmentTest.java @@ -2,9 +2,9 @@ import android.app.Activity; import android.content.Intent; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import org.junit.After; import org.junit.Assert; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileTasksFragmentTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileTasksFragmentTest.java index 69edda6d2..db98c0c2d 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileTasksFragmentTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/fragment/ProfileTasksFragmentTest.java @@ -3,9 +3,9 @@ import android.app.Activity; import android.content.Intent; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import com.vijay.jsonwizard.constants.JsonFormConstants; import com.vijay.jsonwizard.domain.Form; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/BottomNavigationHelperDisableShiftModeTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/BottomNavigationHelperDisableShiftModeTest.java index 26ea6e3f3..a7791ad00 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/BottomNavigationHelperDisableShiftModeTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/BottomNavigationHelperDisableShiftModeTest.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.helper; import android.app.Activity; -import android.support.design.widget.BottomNavigationView; +import com.google.android.material.bottomnavigation.BottomNavigationView; import org.junit.After; import org.junit.Assert; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/ImageRenderHelperTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/ImageRenderHelperTest.java index c2f68df88..4113569d4 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/ImageRenderHelperTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/helper/ImageRenderHelperTest.java @@ -4,7 +4,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.widget.ImageView; import org.junit.Assert; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java index 8ff42200a..9234457ad 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/interactor/RegisterInteractorTest.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.interactor; -import android.support.v4.util.Pair; +import androidx.core.util.Pair; import org.apache.commons.lang3.tuple.Triple; import org.json.JSONObject; @@ -166,8 +166,8 @@ public void testSaveNewRegistration() throws Exception { long timestamp = new Date().getTime(); List eventClients = new ArrayList<>(); - EventClient eventClient = new EventClient(ANCJsonFormUtils.gson.fromJson(eventObject.toString(), org.smartregister.domain.db.Event.class), - ANCJsonFormUtils.gson.fromJson(clientObject.toString(), org.smartregister.domain.db.Client.class)); + EventClient eventClient = new EventClient(ANCJsonFormUtils.gson.fromJson(eventObject.toString(), org.smartregister.domain.Event.class), + ANCJsonFormUtils.gson.fromJson(clientObject.toString(), org.smartregister.domain.Client.class)); eventClients.add(eventClient); Mockito.doReturn(timestamp).when(allSharedPreferences).fetchLastUpdatedAtDate(0); @@ -243,8 +243,8 @@ public void testSaveEditRegistration() throws Exception { long timestamp = new Date().getTime(); List eventClients = new ArrayList<>(); - EventClient eventClient = new EventClient(ANCJsonFormUtils.gson.fromJson(eventObject.toString(), org.smartregister.domain.db.Event.class), - ANCJsonFormUtils.gson.fromJson(clientObject.toString(), org.smartregister.domain.db.Client.class)); + EventClient eventClient = new EventClient(ANCJsonFormUtils.gson.fromJson(eventObject.toString(), org.smartregister.domain.Event.class), + ANCJsonFormUtils.gson.fromJson(clientObject.toString(), org.smartregister.domain.Client.class)); eventClients.add(eventClient); JSONObject orginalClientObject = clientObject; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/job/TestAncJobCreator.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/job/TestAncJobCreator.java index e08b65e28..4faca6fd3 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/job/TestAncJobCreator.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/job/TestAncJobCreator.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.job; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.Log; import com.evernote.android.job.Job; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/model/LoginModelTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/model/LoginModelTest.java index 8b4dcd029..9aa2394a3 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/model/LoginModelTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/model/LoginModelTest.java @@ -40,20 +40,6 @@ public void testGetOpenSRPContextShouldReturnValidValue() { Assert.assertNotNull(model.getOpenSRPContext()); } - @Test - public void testIsPasswordValidShouldTrueWhenPasswordValidatesCorrectly() { - boolean result = model.isPasswordValid(DUMMY_PASSWORD); - Assert.assertTrue(result); - } - - @Test - public void testIsPasswordValidShouldFalseWhenPasswordValidationFails() { - boolean result = model.isPasswordValid(""); - Assert.assertFalse(result); - result = model.isPasswordValid("A"); - Assert.assertFalse(result); - } - @Test public void testIsEmptyUsernameShouldTrueWhenIsEmpty() { boolean result = model.isEmptyUsername(""); diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/model/RegisterModelTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/model/RegisterModelTest.java index 97efc2aa6..039b5f2d1 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/model/RegisterModelTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/model/RegisterModelTest.java @@ -1,6 +1,6 @@ package org.smartregister.anc.library.model; -import android.support.v4.util.Pair; +import androidx.core.util.Pair; import org.apache.commons.lang3.time.DateUtils; import org.json.JSONArray; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/presenter/RegisterPresenterTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/presenter/RegisterPresenterTest.java index 5c78bcfce..3ef47c508 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/presenter/RegisterPresenterTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/presenter/RegisterPresenterTest.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.presenter; -import android.support.v4.util.Pair; +import androidx.core.util.Pair; import org.apache.commons.lang3.tuple.Triple; import org.json.JSONObject; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJavaTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJavaTest.java index 9124585af..acce66dc9 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJavaTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/sync/BaseAncClientProcessorForJavaTest.java @@ -17,8 +17,8 @@ import org.smartregister.anc.library.activity.BaseUnitTest; import org.smartregister.anc.library.repository.ContactTasksRepository; import org.smartregister.anc.library.util.ConstantsUtils; -import org.smartregister.domain.db.Client; -import org.smartregister.domain.db.Event; +import org.smartregister.domain.Client; +import org.smartregister.domain.Event; import org.smartregister.domain.db.EventClient; import org.smartregister.repository.DetailsRepository; diff --git a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java index 03f898f4c..876e51bae 100644 --- a/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java +++ b/opensrp-anc/src/test/java/org/smartregister/anc/library/util/ANCJsonFormUtilsTest.java @@ -1,7 +1,7 @@ package org.smartregister.anc.library.util; import android.graphics.Bitmap; -import android.support.v4.util.Pair; +import androidx.core.util.Pair; import com.vijay.jsonwizard.constants.JsonFormConstants; diff --git a/reference-app/build.gradle b/reference-app/build.gradle index 29cf1ae8b..67744a854 100644 --- a/reference-app/build.gradle +++ b/reference-app/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:4.0.1' classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.8.3' classpath 'com.google.gms:google-services:4.3.3' } @@ -73,7 +73,7 @@ android { buildConfigField "long", "BUILD_TIMESTAMP", System.currentTimeMillis() + "L" buildConfigField "boolean", "IS_SYNC_SETTINGS", "true" buildConfigField "long", "EVENT_VERSION", System.currentTimeMillis() + "L" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' multiDexEnabled true if (properties != null && properties.containsKey("store.file") && properties.containsKey("store.password") && properties.containsKey("key.password")) { @@ -131,7 +131,7 @@ android { } debug { - resValue "string", 'opensrp_url', '"https://anc-stage.smartregister.org/opensrp/"' + resValue "string", 'opensrp_url', '"https://jembi-staging.smartregister.org/opensrp/"' buildConfigField "int", "OPENMRS_UNIQUE_ID_INITIAL_BATCH_SIZE", '250' buildConfigField "int", "OPENMRS_UNIQUE_ID_BATCH_SIZE", '100' buildConfigField "int", "OPENMRS_UNIQUE_ID_SOURCE", '2' @@ -235,14 +235,14 @@ dependencies { implementation 'com.evernote:android-job:1.2.6' implementation 'com.github.lecho:hellocharts-android:v1.5.8' implementation 'id.zelory:compressor:2.1.0' - implementation('com.android.support:design:28.0.0') { + implementation('com.google.android.material:material:1.0.0') { exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'cardview-v7' } - implementation 'com.android.support:recyclerview-v7:28.0.0' - implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'androidx.cardview:cardview:1.0.0' implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation group: 'org.yaml', name: 'snakeyaml', version: '1.25' implementation 'de.hdodenhof:circleimageview:3.0.1' implementation 'org.jeasy:easy-rules-core:3.3.0' @@ -259,7 +259,7 @@ dependencies { transitive = true } implementation 'com.flurry.android:analytics:11.6.0@aar' - implementation 'com.android.support:multidex:1.0.3' + implementation 'androidx.multidex:multidex:2.0.0' testImplementation 'junit:junit:4.12' testImplementation 'org.apache.maven:maven-ant-tasks:2.1.3' @@ -279,6 +279,7 @@ dependencies { } task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) { + reports { xml.enabled = true html.enabled = true @@ -288,12 +289,12 @@ task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'crea getReports().getHtml().setDestination(file("${buildDir}/reports/jacoco/jacocoRootReport/html")) def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*', '**/*$ViewBinder*.*'] - def debugTree = fileTree(dir: "$project.buildDir/intermediates/javac/debug/classes/", excludes: fileFilter) + def debugTree = fileTree(dir: "$project.buildDir/intermediates/javac/debug/classes", excludes: fileFilter) def mainSrc = "$project.projectDir/src/main/java" - sourceDirectories = files([mainSrc]) - classDirectories = files([debugTree]) - executionData = fileTree(dir: project.buildDir, includes: [ + sourceDirectories.setFrom(files([mainSrc])) + classDirectories.setFrom(([debugTree])) + executionData.setFrom(fileTree(dir: project.buildDir, includes: [ 'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec' - ]) -} \ No newline at end of file + ])) +} diff --git a/reference-app/src/main/AndroidManifest.xml b/reference-app/src/main/AndroidManifest.xml index d49ab07b6..e5a15016e 100644 --- a/reference-app/src/main/AndroidManifest.xml +++ b/reference-app/src/main/AndroidManifest.xml @@ -124,7 +124,7 @@ android:screenOrientation="portrait" /> diff --git a/reference-app/src/main/java/org/smartregister/anc/application/AncApplication.java b/reference-app/src/main/java/org/smartregister/anc/application/AncApplication.java index b1115c993..074dc6857 100644 --- a/reference-app/src/main/java/org/smartregister/anc/application/AncApplication.java +++ b/reference-app/src/main/java/org/smartregister/anc/application/AncApplication.java @@ -1,7 +1,7 @@ package org.smartregister.anc.application; import android.content.Intent; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import com.crashlytics.android.Crashlytics; @@ -154,13 +154,13 @@ public Repository getRepository() { return repository; } - public String getPassword() { - if (password == null) { - String username = getContext().userService().getAllSharedPreferences().fetchRegisteredANM(); - password = getContext().userService().getGroupId(username); - } - return password; - } +// public String getPassword() { +// if (password == null) { +// String username = getContext().userService().getAllSharedPreferences().fetchRegisteredANM(); +// password = getContext().userService().getGroupId(username); +// } +// return password; +// } @NonNull @Override @@ -192,15 +192,16 @@ protected void cleanUpSyncState() { @Override public void onTimeChanged() { Utils.showToast(this, this.getString(org.smartregister.anc.library.R.string.device_time_changed)); - context.userService().forceRemoteLogin(); + String username = getContext().userService().getAllSharedPreferences().fetchRegisteredANM(); + context.userService().forceRemoteLogin(username); logoutCurrentUser(); } @Override public void onTimeZoneChanged() { Utils.showToast(this, this.getString(org.smartregister.anc.library.R.string.device_timezone_changed)); - context.userService().forceRemoteLogin(); - + String username = getContext().userService().getAllSharedPreferences().fetchRegisteredANM(); + context.userService().forceRemoteLogin(username); logoutCurrentUser(); } diff --git a/reference-app/src/main/java/org/smartregister/anc/application/AncSyncConfiguration.java b/reference-app/src/main/java/org/smartregister/anc/application/AncSyncConfiguration.java index d23dfc983..a95488cbf 100644 --- a/reference-app/src/main/java/org/smartregister/anc/application/AncSyncConfiguration.java +++ b/reference-app/src/main/java/org/smartregister/anc/application/AncSyncConfiguration.java @@ -3,8 +3,10 @@ import org.smartregister.SyncConfiguration; import org.smartregister.SyncFilter; import org.smartregister.anc.BuildConfig; +import org.smartregister.anc.activity.LoginActivity; import org.smartregister.anc.library.AncLibrary; import org.smartregister.repository.AllSharedPreferences; +import org.smartregister.view.activity.BaseLoginActivity; import java.util.List; @@ -68,4 +70,19 @@ public List getSynchronizedLocationTags() { public String getTopAllowedLocationLevel() { return null; } + + @Override + public String getOauthClientId() { + return "opensrp-trusted-client"; + } + + @Override + public String getOauthClientSecret() { + return "O@aTHS#cr3t"; + } + + @Override + public Class getAuthenticationActivity() { + return LoginActivity.class; + } } diff --git a/reference-app/src/main/java/org/smartregister/anc/job/AncJobCreator.java b/reference-app/src/main/java/org/smartregister/anc/job/AncJobCreator.java index 426413df3..a4c54ef54 100644 --- a/reference-app/src/main/java/org/smartregister/anc/job/AncJobCreator.java +++ b/reference-app/src/main/java/org/smartregister/anc/job/AncJobCreator.java @@ -1,7 +1,7 @@ package org.smartregister.anc.job; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.evernote.android.job.Job; import com.evernote.android.job.JobCreator; diff --git a/reference-app/src/main/java/org/smartregister/anc/job/ViewConfigurationsServiceJob.java b/reference-app/src/main/java/org/smartregister/anc/job/ViewConfigurationsServiceJob.java index 6d315442e..536c1c2f9 100644 --- a/reference-app/src/main/java/org/smartregister/anc/job/ViewConfigurationsServiceJob.java +++ b/reference-app/src/main/java/org/smartregister/anc/job/ViewConfigurationsServiceJob.java @@ -1,7 +1,7 @@ package org.smartregister.anc.job; import android.content.Intent; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.smartregister.anc.library.util.ConstantsUtils; import org.smartregister.configurableviews.service.PullConfigurableViewsIntentService; diff --git a/sample/build.gradle b/sample/build.gradle index ce84a2c97..03145647b 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -15,7 +15,7 @@ android { versionCode 1 versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } @@ -31,9 +31,9 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.0.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' } diff --git a/sample/src/main/java/org/smartregister/sample/anc/MainActivity.java b/sample/src/main/java/org/smartregister/sample/anc/MainActivity.java index 2efb3f8fa..587accc92 100644 --- a/sample/src/main/java/org/smartregister/sample/anc/MainActivity.java +++ b/sample/src/main/java/org/smartregister/sample/anc/MainActivity.java @@ -1,7 +1,7 @@ package org.smartregister.sample.anc; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 84f19512d..4fc244418 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file From 96ae2c51513d8973d80e0cfecce23b3448cea0a2 Mon Sep 17 00:00:00 2001 From: bennsimon Date: Fri, 11 Sep 2020 12:41:22 +0300 Subject: [PATCH 32/33] add 41 weeks limit --- gradle.properties | 2 +- .../anc/library/util/ANCJsonFormUtils.java | 37 ++++++++++++++----- .../main/res/layout/activity_base_profile.xml | 3 +- .../src/main/res/xml/authenticator.xml | 6 +++ 4 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 reference-app/src/main/res/xml/authenticator.xml diff --git a/gradle.properties b/gradle.properties index 0a93f3e90..db35bad9f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.3.26-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.29-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java index 599f0353f..0a8967ecf 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/util/ANCJsonFormUtils.java @@ -4,14 +4,15 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.core.util.Pair; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.util.Pair; + import com.google.common.reflect.TypeToken; import com.vijay.jsonwizard.activities.JsonFormActivity; import com.vijay.jsonwizard.constants.JsonFormConstants; @@ -934,12 +935,27 @@ public List generateNextContactSchedule(String edd, List generateNextContactSchedule(String edd, List data, Facts facts, int position, Context context) { + public ConstraintLayout createListViewItems(List data, Facts facts, + int position, Context context) { YamlConfigItem yamlConfigItem = data.get(position).getYamlConfigItem(); ANCJsonFormUtils.Template template = getTemplate(yamlConfigItem.getTemplate()); diff --git a/opensrp-anc/src/main/res/layout/activity_base_profile.xml b/opensrp-anc/src/main/res/layout/activity_base_profile.xml index 8b70a5c93..26978b453 100644 --- a/opensrp-anc/src/main/res/layout/activity_base_profile.xml +++ b/opensrp-anc/src/main/res/layout/activity_base_profile.xml @@ -1,5 +1,6 @@ - + \ No newline at end of file From aaf0e6561c7e5fe2169ea6cbcbed0b5bb5ce801f Mon Sep 17 00:00:00 2001 From: Ephraim Kigamba Date: Thu, 16 Mar 2023 17:53:40 +0300 Subject: [PATCH 33/33] Fix next page fragment being transacted from diskIO - Update dependencies to com.github.lecho:hellocharts-android:1.5.8 and id.zelory:compressor:2.1.1 - Update 2.0.3.40-LOCAL-SNAPSHOT --- gradle.properties | 2 +- opensrp-anc/build.gradle | 4 ++-- ...ontactWizardJsonFormFragmentPresenter.java | 20 +++++++++++++------ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/gradle.properties b/gradle.properties index db35bad9f..774ecd45f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m android.debug.obsoleteApi=true ## PUBLISHING VARS -VERSION_NAME=2.0.3.29-LOCAL-SNAPSHOT +VERSION_NAME=2.0.3.40-LOCAL-SNAPSHOT VERSION_CODE=1 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client ANC Library diff --git a/opensrp-anc/build.gradle b/opensrp-anc/build.gradle index 71f6e9981..db835d519 100644 --- a/opensrp-anc/build.gradle +++ b/opensrp-anc/build.gradle @@ -170,8 +170,8 @@ dependencies { // explicitly depend on RxJava's latest version for bug fixes and new features. implementation 'io.reactivex.rxjava2:rxjava:2.2.15' implementation 'com.evernote:android-job:1.2.6' - implementation 'com.github.lecho:hellocharts-android:v1.5.8' - implementation 'id.zelory:compressor:2.1.0' + implementation 'com.github.lecho:hellocharts-android:1.5.8' + implementation 'id.zelory:compressor:2.1.1' implementation('com.google.android.material:material:1.0.0') { exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'cardview-v7' diff --git a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java index 9b80a5fff..9946f15c9 100644 --- a/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java +++ b/opensrp-anc/src/main/java/org/smartregister/anc/library/presenter/ContactWizardJsonFormFragmentPresenter.java @@ -37,12 +37,20 @@ public void setUpToolBar() { protected boolean moveToNextWizardStep() { String nextStep = getFormFragment().getJsonApi().nextStep(); if (StringUtils.isNotBlank(nextStep)) { - JsonFormFragment next = ContactWizardJsonFormFragment.getFormFragment(nextStep); - JsonFormFragmentView jsonFormFragmentView = getView(); - if (jsonFormFragmentView != null) { - jsonFormFragmentView.hideKeyBoard(); - jsonFormFragmentView.transactThis(next); - } + + getFormFragment().getJsonApi().getAppExecutors().mainThread().execute(new Runnable() { + @Override + public void run() { + + JsonFormFragment next = ContactWizardJsonFormFragment.getFormFragment(nextStep); + JsonFormFragmentView jsonFormFragmentView = getView(); + if (jsonFormFragmentView != null) { + jsonFormFragmentView.hideKeyBoard(); + jsonFormFragmentView.transactThis(next); + } + } + }); + return true; } return false;