Skip to content

Commit 0a51167

Browse files
authored
Merge pull request #333 from opensrp/fix-offline-search-results-count-v1.0
Fix Offline Search Results Count - v1.0
2 parents c32aa9d + 6b78367 commit 0a51167

File tree

11 files changed

+143
-20
lines changed

11 files changed

+143
-20
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
VERSION_NAME=1.0.0-SNAPSHOT
1+
VERSION_NAME=1.0.1-SNAPSHOT
22
VERSION_CODE=1
33
GROUP=org.smartregister
44
POM_SETTING_DESCRIPTION=OpenSRP Client Child Library

opensrp-child/build.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ dependencies {
120120

121121
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6'
122122

123-
api('org.smartregister:opensrp-client-core:6.0.0-SNAPSHOT@aar') {
123+
api('org.smartregister:opensrp-client-core:6.1.1-SNAPSHOT@aar') {
124124
transitive = true
125125
exclude group: 'com.github.bmelnychuk', module: 'atv'
126126
exclude group: 'com.google.guava', module: 'guava'
@@ -142,7 +142,7 @@ dependencies {
142142
exclude group: 'io.ona.rdt-capture', module: 'lib'
143143
exclude group: 'com.google.android.gms', module: 'play-services-vision'
144144
exclude group: 'com.google.code.gson', module: 'gson'
145-
exclude group: 'com.github.raihan-mpower', module:'FancyAlertDialog-Android'
145+
exclude group: 'com.github.raihan-mpower', module: 'FancyAlertDialog-Android'
146146
}
147147

148148
implementation 'com.google.code.gson:gson:2.9.0'
@@ -187,6 +187,7 @@ dependencies {
187187
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
188188

189189
testImplementation 'junit:junit:4.13.2'
190+
190191
def robolectricVersion = '4.1'
191192
testImplementation("org.robolectric:robolectric:$robolectricVersion") {
192193
exclude group: 'com.google.auto.service', module: 'auto-service'

opensrp-child/src/main/java/org/smartregister/child/activity/BaseChildImmunizationActivity.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,9 @@ protected void onCreate(Bundle savedInstanceState) {
227227

228228
// Get child details from bundled data
229229
Bundle extras = this.getIntent().getExtras();
230+
String caseId = "";
230231
if (extras != null) {
231-
String caseId = extras.getString(Constants.INTENT_KEY.BASE_ENTITY_ID);
232+
caseId = extras.getString(Constants.INTENT_KEY.BASE_ENTITY_ID);
232233
childDetails = getChildDetails(caseId);
233234

234235
CommonPersonObjectClient cardChildDetails = null;
@@ -270,6 +271,12 @@ protected void onCreate(Bundle savedInstanceState) {
270271

271272
setLastModified(false);
272273

274+
if (getChildDetails() == null) {
275+
Timber.e("Unable to fetch child details with case id: %s", caseId);
276+
Utils.showToast(this, getString(R.string.error_child_details));
277+
getActivity().finish();
278+
return;
279+
}
273280
setUpFloatingActionButton();
274281
Utils.refreshDataCaptureStrategyBanner(this, getOpenSRPContext().allSharedPreferences().fetchCurrentLocality());
275282
}
@@ -461,7 +468,6 @@ public void updateViews() {
461468
} else {
462469
Timber.e("fetchCommonPersonObjectClientByBaseEntityId is null, child record is not n the database.");
463470
}
464-
465471
}
466472

467473
isChildActive = isActiveStatus(childDetails);
@@ -479,6 +485,7 @@ public void updateViews() {
479485
updateNextAppointmentDateView();
480486

481487
startUpdateViewTask();
488+
updateFloatingActionButtonBasedOnChildStatus();
482489
}
483490

484491
@VisibleForTesting
@@ -2142,4 +2149,18 @@ protected void onPostExecute(List<VaccineWrapper> list) {
21422149
showVaccineNotifications(vaccineList, alertList);
21432150
}
21442151
}
2152+
2153+
protected void updateFloatingActionButtonBasedOnChildStatus() {
2154+
if (ChildLibrary.getInstance().getProperties().getPropertyBoolean(ChildAppProperties.KEY.FEATURE_NFC_CARD_ENABLED)) {
2155+
if (!Utils.hasCompassRelationshipId(childDetails.getColumnmaps())) {
2156+
configureFloatingActionBackground(R.drawable.pill_background_unregistered, getResources().getString(R.string.enroll_caregiver));
2157+
} else {
2158+
if (!Utils.isChildHasNFCCard(childDetails.getColumnmaps())) {
2159+
configureFloatingActionBackground(R.drawable.pill_background_unregistered, getResources().getString(R.string.activate_new_card));
2160+
} else {
2161+
configureFloatingActionBackground(getGenderButtonColor(childDetails.getColumnmaps().get(Constants.KEY.GENDER)), getResources().getString(R.string.write_to_card));
2162+
}
2163+
}
2164+
}
2165+
}
21452166
}

opensrp-child/src/main/java/org/smartregister/child/fragment/BaseAdvancedSearchFragment.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,8 @@ public void run() {
651651
public void run() {
652652
clientAdapter.setTotalcount(totalCount);
653653
Timber.i("Total Register Count %d", clientAdapter.getTotalcount());
654+
updateMatchingResults(totalCount);
655+
654656
clientAdapter.setCurrentlimit(getPageLimit());
655657
clientAdapter.setCurrentoffset(0);
656658
}
@@ -663,7 +665,6 @@ public void run() {
663665
Timber.e(e);
664666
}
665667

666-
updateMatchingResults(clientAdapter.getTotalcount());
667668
}
668669

669670
@Override

opensrp-child/src/main/java/org/smartregister/child/model/BaseChildAdvancedSearchModel.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ public String getMainConditionString(Map<String, String> editMap) {
5757
final String childDetailsTable = Utils.metadata().getRegisterQueryProvider().getChildDetailsTable();
5858

5959
final String motherFirstNameKey = Constants.KEY.MOTHER_FIRST_NAME;
60+
final String motherFirstNameSelect = Constants.KEY.MOTHER + "." + Constants.KEY.FIRST_NAME;
6061
final String motherLastNameKey = Constants.KEY.MOTHER_LAST_NAME;
62+
final String motherLastNameSelect = Constants.KEY.MOTHER + "." + Constants.KEY.LAST_NAME;
6163

6264
final String startDateKey = START_DATE;
6365
final String endDateKey = END_DATE;
@@ -105,28 +107,28 @@ public String getMainConditionString(Map<String, String> editMap) {
105107

106108
if (editMap.containsKey(motherFirstNameKey) && editMap.containsKey(motherLastNameKey)) {
107109
if (StringUtils.isBlank(mainConditionString)) {
108-
mainConditionString += motherFirstNameKey + " Like '%" + editMap
109-
.get(motherFirstNameKey) + "%' AND " + motherLastNameKey + " Like '%" + editMap
110+
mainConditionString += motherFirstNameSelect + " Like '%" + editMap
111+
.get(motherFirstNameKey) + "%' AND " + motherLastNameSelect + " Like '%" + editMap
110112
.get(motherLastNameKey) + "%'";
111113
} else {
112-
mainConditionString += " AND (" + motherFirstNameKey + " Like '%" + editMap
113-
.get(motherFirstNameKey) + "%' AND " + motherLastNameKey + " Like '%" + editMap
114+
mainConditionString += " AND (" + motherFirstNameSelect + " Like '%" + editMap
115+
.get(motherFirstNameKey) + "%' AND " + motherLastNameSelect + " Like '%" + editMap
114116
.get(motherLastNameKey) + "%' ) ";
115117
}
116118
} else if (editMap.containsKey(motherFirstNameKey) && !editMap.containsKey(motherLastNameKey)) {
117119
if (StringUtils.isBlank(mainConditionString)) {
118-
mainConditionString += " " + motherFirstNameKey + " Like '%" + editMap
120+
mainConditionString += " " + motherFirstNameSelect + " Like '%" + editMap
119121
.get(motherFirstNameKey) + "%'";
120122
} else {
121-
mainConditionString += " AND (" + motherFirstNameKey + " Like '%" + editMap
123+
mainConditionString += " AND (" + motherFirstNameSelect + " Like '%" + editMap
122124
.get(motherFirstNameKey) + "%') ";
123125
}
124126
} else if (!editMap.containsKey(motherFirstNameKey) && editMap.containsKey(motherLastNameKey)) {
125127
if (StringUtils.isBlank(mainConditionString)) {
126-
mainConditionString += " " + motherLastNameKey + " Like '%" + editMap
128+
mainConditionString += " " + motherLastNameSelect + " Like '%" + editMap
127129
.get(motherLastNameKey) + "%'";
128130
} else {
129-
mainConditionString += " AND (" + motherLastNameKey + " Like '%" + editMap
131+
mainConditionString += " AND (" + motherLastNameSelect + " Like '%" + editMap
130132
.get(motherLastNameKey) + "%' ) ";
131133
}
132134
}

opensrp-child/src/main/java/org/smartregister/child/util/DBConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public static final class KEY {
2424
public static final String LOST_TO_FOLLOW_UP = "lost_to_follow_up";
2525
public static final String MOTHER_FIRST_NAME = "mother_first_name";
2626
public static final String MOTHER_LAST_NAME = "mother_last_name";
27+
public static final String MOTHER_COMPASS_RELATIONSHIP_ID = "mother_compass_relationship_id";
2728
}
2829

2930
public interface RegisterTable {

opensrp-child/src/main/java/org/smartregister/child/util/Utils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,4 +779,8 @@ public static boolean isChildHasNFCCard(Map<String, String> detailsMap) {
779779
return StringUtils.isNotEmpty(detailsMap.get(Constants.KEY.NFC_CARD_IDENTIFIER))
780780
&& !Constants.TRUE.equalsIgnoreCase(detailsMap.getOrDefault(Constants.KEY.NFC_CARD_BLACKLISTED, Constants.FALSE));
781781
}
782+
783+
public static boolean hasCompassRelationshipId(Map<String, String> detailsMap) {
784+
return StringUtils.isNotBlank(detailsMap.get(DBConstants.KEY.MOTHER_COMPASS_RELATIONSHIP_ID));
785+
}
782786
}

opensrp-child/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,4 +391,5 @@
391391

392392
<string name="format_label_colon_text">%1$s: %2$s</string>
393393
<string name="format_label_space_text">%1$s %2$s</string>
394+
<string name="error_child_details">Error fetching child details</string>
394395
</resources>

opensrp-child/src/test/java/org/smartregister/child/activity/BaseChildImmunizationActivityTest.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package org.smartregister.child.activity;
22

3+
import static org.mockito.ArgumentMatchers.anyString;
4+
import static org.mockito.ArgumentMatchers.eq;
35
import static org.mockito.Mockito.times;
46

57
import android.content.Intent;
8+
import android.content.res.Resources;
69
import android.text.TextUtils;
710
import android.view.View;
811
import android.widget.ImageView;
@@ -345,4 +348,53 @@ public void testGetChildsThirdPersonPronounReturnsHerForFemaleGender() {
345348
ReflectionHelpers.ClassParameter.from(CommonPersonObjectClient.class, client));
346349
Assert.assertEquals("her", pronoun);
347350
}
351+
352+
@Test
353+
public void onBackActivityShouldReturnThisClass() {
354+
Class backActivity = baseChildImmunizationActivity.onBackActivity();
355+
Assert.assertEquals(BaseChildRegisterActivity.class, backActivity);
356+
}
357+
358+
@Test
359+
public void testUpdateFloatingActionButtonBasedOnChildStatusShouldUpdateCorrectValue(){
360+
CommonPersonObjectClient childDetails = getChildDetails();
361+
362+
ReflectionHelpers.setField(baseChildImmunizationActivity, "childDetails", childDetails);
363+
364+
Mockito.doReturn(true).when(appProperties).getPropertyBoolean(eq("feature.nfc.card.enabled"));
365+
TestChildImmunizationActivity activity = Mockito.spy(baseChildImmunizationActivity);
366+
Mockito.doReturn("Active").when(activity).getString(R.string.active);
367+
368+
LinearLayout fab = Mockito.mock(LinearLayout.class);
369+
Mockito.doReturn(0).when(fab).getPaddingBottom();
370+
Mockito.doReturn(0).when(fab).getPaddingLeft();
371+
Mockito.doReturn(0).when(fab).getPaddingRight();
372+
Mockito.doReturn(0).when(fab).getPaddingTop();
373+
374+
TextView fabText = Mockito.mock(TextView.class);
375+
ImageView fabImage = Mockito.mock(ImageView.class);
376+
Mockito.doReturn(fabText).when(fab).findViewById(R.id.fab_text);
377+
Mockito.doReturn(fabImage).when(fab).findViewById(R.id.fab_image);
378+
379+
Resources resources = Mockito.mock(Resources.class);
380+
Mockito.doReturn(resources).when(activity).getResources();
381+
Mockito.doReturn("enroll_caregiver").when(resources).getString(R.string.enroll_caregiver);
382+
Mockito.doReturn("activate_new_card").when(resources).getString(R.string.activate_new_card);
383+
Mockito.doReturn("write_to_card").when(resources).getString(R.string.write_to_card);
384+
385+
activity.floatingActionButton = fab;
386+
Mockito.doReturn(true).when(activity).isActiveStatus(anyString());
387+
activity.updateFloatingActionButtonBasedOnChildStatus();
388+
389+
Mockito.verify(activity, times(1)).configureFloatingActionBackground(2131231163, "enroll_caregiver");
390+
391+
childDetails.getColumnmaps().put("mother_compass_relationship_id", "123");
392+
activity.updateFloatingActionButtonBasedOnChildStatus();
393+
Mockito.verify(activity, times(1)).configureFloatingActionBackground(2131231163, "activate_new_card");
394+
395+
childDetails.getColumnmaps().put("nfc_card_blacklisted", "false");
396+
childDetails.getColumnmaps().put("nfc_card_identifier", "0099887711112222");
397+
activity.updateFloatingActionButtonBasedOnChildStatus();
398+
Mockito.verify(activity, times(1)).configureFloatingActionBackground(2131231161, "write_to_card");
399+
}
348400
}

opensrp-child/src/test/java/org/smartregister/child/model/BaseChildAdvancedSearchModelTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,37 +160,37 @@ public void testGetMainConditionStringMotherName() {
160160
editMap.put("start_date", "26-05-2020");
161161
editMap.put("end_date", "26-05-2020");
162162
mainConditionString = baseChildAdvancedSearchModel.getMainConditionString(editMap);
163-
Assert.assertEquals("ec_client.dob BETWEEN '2020-05-26' AND '2020-05-26' AND (mother_first_name Like '%Mary%' AND mother_last_name Like '%Doe%' ) AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
163+
Assert.assertEquals("ec_client.dob BETWEEN '2020-05-26' AND '2020-05-26' AND (mother.first_name Like '%Mary%' AND mother.last_name Like '%Doe%' ) AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
164164

165165
editMap = new HashMap<>();
166166
editMap.put(Constants.KEY.MOTHER_FIRST_NAME, "Mary");
167167
editMap.put(Constants.KEY.MOTHER_LAST_NAME, "Doe");
168168
mainConditionString = baseChildAdvancedSearchModel.getMainConditionString(editMap);
169-
Assert.assertEquals("mother_first_name Like '%Mary%' AND mother_last_name Like '%Doe%' AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
169+
Assert.assertEquals("mother.first_name Like '%Mary%' AND mother.last_name Like '%Doe%' AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
170170

171171
editMap = new HashMap<>();
172172
editMap.put(Constants.KEY.MOTHER_FIRST_NAME, "Mary");
173173
editMap.put("start_date", "26-05-2020");
174174
editMap.put("end_date", "26-05-2020");
175175
mainConditionString = baseChildAdvancedSearchModel.getMainConditionString(editMap);
176-
Assert.assertEquals("ec_client.dob BETWEEN '2020-05-26' AND '2020-05-26' AND (mother_first_name Like '%Mary%') AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
176+
Assert.assertEquals("ec_client.dob BETWEEN '2020-05-26' AND '2020-05-26' AND (mother.first_name Like '%Mary%') AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
177177

178178
editMap = new HashMap<>();
179179
editMap.put(Constants.KEY.MOTHER_FIRST_NAME, "Mary");
180180
mainConditionString = baseChildAdvancedSearchModel.getMainConditionString(editMap);
181-
Assert.assertEquals("mother_first_name Like '%Mary%' AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
181+
Assert.assertEquals("mother.first_name Like '%Mary%' AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
182182

183183
editMap = new HashMap<>();
184184
editMap.put(Constants.KEY.MOTHER_LAST_NAME, "Doe");
185185
editMap.put("start_date", "26-05-2020");
186186
editMap.put("end_date", "26-05-2020");
187187
mainConditionString = baseChildAdvancedSearchModel.getMainConditionString(editMap);
188-
Assert.assertEquals("ec_client.dob BETWEEN '2020-05-26' AND '2020-05-26' AND (mother_last_name Like '%Doe%' ) AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
188+
Assert.assertEquals("ec_client.dob BETWEEN '2020-05-26' AND '2020-05-26' AND (mother.last_name Like '%Doe%' ) AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
189189

190190
editMap = new HashMap<>();
191191
editMap.put(Constants.KEY.MOTHER_LAST_NAME, "Doe");
192192
mainConditionString = baseChildAdvancedSearchModel.getMainConditionString(editMap);
193-
Assert.assertEquals("mother_last_name Like '%Doe%' AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
193+
Assert.assertEquals("mother.last_name Like '%Doe%' AND (ec_client.date_removed is null AND ec_client.is_closed == '0')", mainConditionString.trim());
194194
}
195195

196196
@Test

0 commit comments

Comments
 (0)