Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Local merge] Optbp compression merge for #666

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -372,41 +372,37 @@ public Pair<String[], JSONObject> getCalculationAddressAndValue(View view) throw

@Override
public void refreshCalculationLogic(String parentKey, String childKey, boolean popup, String stepName, boolean isForNextStep) {
appExecutors.diskIO().execute(() ->{
Set<String> viewsIds = calculationDependencyMap.get(stepName + "_" + parentKey);
if (parentKey == null || viewsIds == null)
viewsIds = calculationLogicViews.keySet();
for (String viewId : viewsIds) {
try {
View curView = calculationLogicViews.get(viewId);
if (curView == null) {
Timber.w("calculationLogicViews Missing %s", viewId);
continue;
Set<String> viewsIds = calculationDependencyMap.get(stepName + "_" + parentKey);
if (parentKey == null || viewsIds == null)
viewsIds = calculationLogicViews.keySet();
for (String viewId : viewsIds) {
try {
View curView = calculationLogicViews.get(viewId);
if (curView == null) {
Timber.w("calculationLogicViews Missing %s", viewId);
continue;
}
Pair<String[], JSONObject> addressAndValue = getCalculationAddressAndValue(curView);
if (addressAndValue != null && addressAndValue.first != null) {
String[] address = addressAndValue.first;
JSONObject valueSource = addressAndValue.second;
Facts curValueMap;
if (valueSource.length() > 0) {
curValueMap = getValueFromAddress(address, popup, valueSource);
} else {
curValueMap = getValueFromAddress(address, popup);
}
Pair<String[], JSONObject> addressAndValue = getCalculationAddressAndValue(curView);
if (addressAndValue != null && addressAndValue.first != null) {
String[] address = addressAndValue.first;
JSONObject valueSource = addressAndValue.second;
Facts curValueMap;
if (valueSource.length() > 0) {
curValueMap = getValueFromAddress(address, popup, valueSource);
} else {
curValueMap = getValueFromAddress(address, popup);
}
//update ui
appExecutors.mainThread().execute(() -> {
updateCalculation(curValueMap, curView, address, isForNextStep);
});
//update ui
updateCalculation(curValueMap, curView, address, isForNextStep);

}
}

} catch (Exception e) {
Timber.e(e, "%s refreshCalculationLogic()", this.getClass().getCanonicalName());
} catch (Exception e) {
Timber.e(e, "%s refreshCalculationLogic()", this.getClass().getCanonicalName());

}
}
}

});

}

Expand Down Expand Up @@ -629,26 +625,24 @@ public JSONObject getObjectUsingAddress(String[] address, boolean popup, JSONObj
*/
@Override
public void refreshConstraints(String parentKey, String childKey, boolean popup) {
appExecutors.diskIO().execute(()->{
initComparisons();
initComparisons();

// Priorities constraints on the view that has just been changed
String changedViewKey = parentKey;
if (changedViewKey != null && childKey != null) {
changedViewKey = changedViewKey + ":" + childKey;
}
// Priorities constraints on the view that has just been changed
String changedViewKey = parentKey;
if (changedViewKey != null && childKey != null) {
changedViewKey = changedViewKey + ":" + childKey;
}

if (changedViewKey != null && (constrainedViews != null && constrainedViews.containsKey(changedViewKey))) {
checkViewConstraints(constrainedViews.get(changedViewKey), popup);
}
if (changedViewKey != null && (constrainedViews != null && constrainedViews.containsKey(changedViewKey))) {
checkViewConstraints(constrainedViews.get(changedViewKey), popup);
}

for (View curView : constrainedViews.values()) {
String viewKey = getViewKey(curView);
if (changedViewKey == null || (!TextUtils.isEmpty(viewKey) && !viewKey.equals(changedViewKey))) {
checkViewConstraints(curView, popup);
}
for (View curView : constrainedViews.values()) {
String viewKey = getViewKey(curView);
if (changedViewKey == null || (!TextUtils.isEmpty(viewKey) && !viewKey.equals(changedViewKey))) {
checkViewConstraints(curView, popup);
}
});
}

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,10 @@ public void setmJSONObject(JSONObject mJSONObject) {

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Timber.e("JsonFromBaseActivity optib requestCode %s resultCode %s", requestCode, resultCode);
if(data != null)
Timber.e(" data %s",data.getStringExtra(Intent.EXTRA_TEXT));
else Timber.e("JsonFormBaseActivity data is null");
if (onActivityResultListeners.containsKey(requestCode)) {
onActivityResultListeners.get(requestCode).onActivityResult(requestCode, resultCode, data);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public class JsonFormConstants {
public static final String BEHAVIOUR = "behaviour";
public static final String RESULT = "result";
public static final String VALUE = "value";
public static final String V_EQUALS = "v_equals";
public static final String KEYS = "keys";
public static final String SECOND_VALUE = "second_value";
public static final String OPENMRS_ENTITY_PARENT = "openmrs_entity_parent";
Expand Down Expand Up @@ -148,6 +149,7 @@ public class JsonFormConstants {
public static final String EXPANDED = "expanded";
public static final String EXPAND_ON_TEXT_CHANGE = "expand_on_text_change";
public static final String NUMBER = "number";
public static final String PASSWORD = "password";
public static final String TOP_MARGIN = "top_margin";
public static final String BOTTOM_MARGIN = "bottom_margin";
public static final String LEFT_MARGIN = "left_margin";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,13 @@
import org.json.JSONObject;
import org.yaml.snakeyaml.Yaml;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLDecoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
Expand All @@ -75,6 +78,7 @@
import java.util.Scanner;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.zip.GZIPInputStream;

import timber.log.Timber;

Expand Down Expand Up @@ -1041,6 +1045,29 @@ public static String extractValueFromJson(String value)
return value;
}

public static String decompress(String str, String outEncoding) {
if (str == null || str.length() == 0) {
return str;
}

try {
String decode = URLDecoder.decode(str, "UTF-8");

ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(decode.getBytes("ISO-8859-1"));
GZIPInputStream gunzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
return out.toString(outEncoding);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

}


Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.vijay.jsonwizard.validators.edittext;

import androidx.annotation.NonNull;

import com.rengwuxian.materialedittext.MaterialEditText;
import com.rengwuxian.materialedittext.validation.METValidator;

import org.jetbrains.annotations.NotNull;

public class ReferenceFieldValidator extends METValidator {
MaterialEditText referenceField;
public ReferenceFieldValidator(@NonNull @NotNull String errorMessage,MaterialEditText referenceField) {
super(errorMessage);
this.referenceField = referenceField;
}

@Override
public boolean isValid(@NonNull @NotNull CharSequence charSequence, boolean isEmpty) {
if(!isEmpty) {
String referenceText = referenceField.getText().toString();
return referenceText.equals(charSequence.toString());
}
return true;
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,12 @@
package com.vijay.jsonwizard.widgets;

import static com.vijay.jsonwizard.constants.JsonFormConstants.DEFAULT_CUMULATIVE_VALIDATION_ERR;
import static com.vijay.jsonwizard.constants.JsonFormConstants.DEFAULT_RELATIVE_MAX_VALIDATION_ERR;
import static com.vijay.jsonwizard.constants.JsonFormConstants.DEFAULT_RELATIVE_MIN_VALIDATION_ERR;
import static com.vijay.jsonwizard.constants.JsonFormConstants.KEY;
import static com.vijay.jsonwizard.constants.JsonFormConstants.RELATED_FIELDS;
import static com.vijay.jsonwizard.constants.JsonFormConstants.RELATIVE_VALIDATION_EXCEPTION;
import static com.vijay.jsonwizard.constants.JsonFormConstants.STEP1;
import static com.vijay.jsonwizard.constants.JsonFormConstants.V_CUMULATIVE_TOTAL;
import static com.vijay.jsonwizard.constants.JsonFormConstants.V_RELATIVE_MAX;
import static com.vijay.jsonwizard.constants.JsonFormConstants.V_RELATIVE_MIN;
import static com.vijay.jsonwizard.utils.FormUtils.fields;
import static com.vijay.jsonwizard.utils.FormUtils.getFieldJSONObject;

import android.content.Context;
import android.text.Editable;
import android.text.InputFilter;
import android.text.InputType;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.PasswordTransformationMethod;
import android.util.Patterns;
import android.view.LayoutInflater;
import android.view.View;
Expand All @@ -43,6 +31,7 @@
import com.vijay.jsonwizard.validators.edittext.MaxNumericValidator;
import com.vijay.jsonwizard.validators.edittext.MinLengthValidator;
import com.vijay.jsonwizard.validators.edittext.MinNumericValidator;
import com.vijay.jsonwizard.validators.edittext.ReferenceFieldValidator;
import com.vijay.jsonwizard.validators.edittext.ReferenceValidator;
import com.vijay.jsonwizard.validators.edittext.RelativeNumericValidator;
import com.vijay.jsonwizard.validators.edittext.RequiredValidator;
Expand All @@ -60,6 +49,19 @@

import timber.log.Timber;

import static com.vijay.jsonwizard.constants.JsonFormConstants.DEFAULT_CUMULATIVE_VALIDATION_ERR;
import static com.vijay.jsonwizard.constants.JsonFormConstants.DEFAULT_RELATIVE_MAX_VALIDATION_ERR;
import static com.vijay.jsonwizard.constants.JsonFormConstants.DEFAULT_RELATIVE_MIN_VALIDATION_ERR;
import static com.vijay.jsonwizard.constants.JsonFormConstants.KEY;
import static com.vijay.jsonwizard.constants.JsonFormConstants.RELATED_FIELDS;
import static com.vijay.jsonwizard.constants.JsonFormConstants.RELATIVE_VALIDATION_EXCEPTION;
import static com.vijay.jsonwizard.constants.JsonFormConstants.STEP1;
import static com.vijay.jsonwizard.constants.JsonFormConstants.V_CUMULATIVE_TOTAL;
import static com.vijay.jsonwizard.constants.JsonFormConstants.V_RELATIVE_MAX;
import static com.vijay.jsonwizard.constants.JsonFormConstants.V_RELATIVE_MIN;
import static com.vijay.jsonwizard.utils.FormUtils.fields;
import static com.vijay.jsonwizard.utils.FormUtils.getFieldJSONObject;

public class EditTextFactory implements FormWidgetFactory {

public static final int MIN_LENGTH = 0;
Expand Down Expand Up @@ -117,7 +119,6 @@ protected List<View> attachJson(String stepName, Context context, JsonFormFragme
RelativeLayout editTextLayout = rootLayout.findViewById(R.id.edit_text_layout);
MaterialEditText editText = editTextLayout.findViewById(R.id.edit_text);
ImageView editButton = editTextLayout.findViewById(R.id.material_edit_text_edit_button);

FormUtils.setEditButtonAttributes(jsonObject, editText, editButton, listener);
attachLayout(stepName, context, formFragment, jsonObject, editText, editButton);

Expand Down Expand Up @@ -179,6 +180,7 @@ public void run() {
FormUtils.toggleEditTextVisibility(jsonObject, editText);

addRequiredValidator(jsonObject, editText);
addEqualsValidator(formFragment,jsonObject,editText);
addLengthValidator(jsonObject, editText);
addRegexValidator(jsonObject, editText);
addEmailValidator(jsonObject, editText);
Expand All @@ -190,15 +192,19 @@ public void run() {
addCumulativeTotalValidator(jsonObject, formFragment, editText, stepName, (JsonApi) context);
// edit type check
String editType = jsonObject.optString(JsonFormConstants.EDIT_TYPE);
editText.setSingleLine(false);
if (!TextUtils.isEmpty(editType)) {
if (JsonFormConstants.NUMBER.equals(editType)) {
editText.setRawInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
} else if (JsonFormConstants.NAME.equals(editType)) {
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
}
}
else if (JsonFormConstants.PASSWORD.equals(editType))
{
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
}

editText.setSingleLine(false);
}
editText.addTextChangedListener(new GenericTextWatcher(stepName, formFragment, editText));
attachRefreshLogic(context, jsonObject, editText);
}
Expand All @@ -212,6 +218,15 @@ private void attachInfoIcon(String stepName, JSONObject jsonObject, RelativeLayo

}

private void addEqualsValidator(JsonFormFragment formFragment,JSONObject jsonObject, MaterialEditText editText) throws JSONException {
JSONObject requiredObject = jsonObject.optJSONObject(JsonFormConstants.V_EQUALS);
if (requiredObject != null) {
String referencedValue = requiredObject.optString(JsonFormConstants.VALUE,"");
MaterialEditText referencedEditText = (MaterialEditText) formFragment.getJsonApi().getFormDataView(referencedValue);
editText.addValidator(new ReferenceFieldValidator(requiredObject.getString(JsonFormConstants.ERR),referencedEditText));
FormUtils.setRequiredOnHint(editText);
}
}
private void addRequiredValidator(JSONObject jsonObject, MaterialEditText editText) throws JSONException {
JSONObject requiredObject = jsonObject.optJSONObject(JsonFormConstants.V_REQUIRED);
if (requiredObject != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import android.os.Build;
import android.text.InputType;
import android.text.TextUtils;
import android.text.method.PasswordTransformationMethod;
import android.util.Patterns;
import android.view.LayoutInflater;
import android.view.View;
Expand Down Expand Up @@ -144,6 +145,10 @@ protected void makeFromJson(String stepName, Context context, JsonFormFragment f
} else if ("name".equals(editType)) {
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
}
else if ("password".equals(editType))
{
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
}

editText.addTextChangedListener(new GenericTextWatcher(stepName, formFragment, editText));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ private Button initLaunchButton(LinearLayout rootLayout, final WidgetArgs widget
Timber.w(" ONCLICK WITH JSON %s", jsonObject);
Intent intent = new Intent(OptibpConstants.OPTIBP_LAUNCH_INTENT);
intent.setType("text/json");
Timber.e("OptibpWidget factory sending request %s", getInputJsonString(context, jsonObject, widgetArgs));
intent.putExtra(Intent.EXTRA_TEXT, getInputJsonString(context, jsonObject, widgetArgs));
((Activity) context).startActivityForResult(Intent.createChooser(intent, ""), requestCode);
} catch (Exception e) {
Expand Down Expand Up @@ -182,9 +183,14 @@ private void formatButtonWidget(Button button, JSONObject jsonObject) throws JSO

public void setUpOptiBpActivityResultListener(final WidgetArgs widgetArgs, int requestCode, final LinearLayout rootLayout, EditText systolicEditText, final EditText diastolicEditText) {
final Context context = widgetArgs.getContext();

if (context instanceof JsonApi) {
final JsonApi jsonApi = (JsonApi) context;
jsonApi.addOnActivityResultListener(requestCode, (finalRequestCode, resultCode, data) -> {
Timber.e("OptibpWidgetFactory optib requestCode %s resultCode %s", requestCode, resultCode);
if(data != null)
Timber.e("OptibpWidgetFactory data %s",data.getStringExtra(Intent.EXTRA_TEXT));
else Timber.e("OptibpWidgetFactory data is null");
if (resultCode == Activity.RESULT_OK) {
if (finalRequestCode == OptibpConstants.OPTIBP_REQUEST_CODE ||
finalRequestCode == OptibpConstants.OPTIBP_REPEAT_REQUEST_CODE) {
Expand Down Expand Up @@ -333,7 +339,7 @@ protected String getInputJsonString(Context context, JSONObject jsonObject, Widg
* Adding new calibration data here
*/
appendHealthData(optiBPData, widgetArgs);
optiBPData.put(OptibpConstants.CALIBRATION, getCalibrationData(optiBPData.optString(OptibpConstants.CALIBRATION)));
optiBPData.put(OptibpConstants.CALIBRATION, getCalibrationData(Utils.decompress(optiBPData.optString(OptibpConstants.CALIBRATION),"UTF-8")));
return optiBPData.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -618,4 +618,9 @@ public void testGetViewKey() throws Exception {
assertEquals(key + ":" + childKey, returnKey);

}
}

@Test
public void testGetCOuntSHouldReturnTheCorrectCount() {
assertEquals("1", activity.getCount());
}
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
VERSION_NAME=3.1.2-SNAPSHOT
VERSION_NAME=3.1.7-DEV-SNAPSHOT
VERSION_CODE=1
GROUP=org.smartregister
POM_SETTING_DESCRIPTION=OpenSRP Client Native Form Json Wizard
Expand Down
Loading