Skip to content

Commit

Permalink
Support different rdt capture strategies
Browse files Browse the repository at this point in the history
  • Loading branch information
vincent-karuri committed Jun 17, 2020
1 parent e284009 commit d9fd0a6
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,14 @@
import com.vijay.jsonwizard.widgets.NativeEditTextFactory;
import com.vijay.jsonwizard.widgets.NativeRadioButtonFactory;
import com.vijay.jsonwizard.widgets.NumberSelectorFactory;
import com.vijay.jsonwizard.widgets.RDTCaptureFactory;
import com.vijay.jsonwizard.widgets.RadioButtonFactory;
import com.vijay.jsonwizard.widgets.RepeatingGroupFactory;
import com.vijay.jsonwizard.widgets.SectionFactory;
import com.vijay.jsonwizard.widgets.SpinnerFactory;
import com.vijay.jsonwizard.widgets.TimePickerFactory;
import com.vijay.jsonwizard.widgets.ToasterNotesFactory;
import com.vijay.jsonwizard.widgets.TreeViewFactory;
import com.vijay.jsonwizard.widgets.BasicRDTCaptureFactory;

import org.json.JSONArray;
import org.json.JSONException;
Expand Down Expand Up @@ -133,7 +133,7 @@ protected void registerWidgets() {
map.put(JsonFormConstants.NATIVE_EDIT_TEXT, new NativeEditTextFactory());
map.put(JsonFormConstants.TIME_PICKER, new TimePickerFactory());
map.put(JsonFormConstants.REPEATING_GROUP, new RepeatingGroupFactory());
map.put(JsonFormConstants.RDT_CAPTURE, new RDTCaptureFactory());
map.put(JsonFormConstants.RDT_CAPTURE, new BasicRDTCaptureFactory());
map.put(JsonFormConstants.COUNTDOWN_TIMER, new CountDownTimerFactory());
map.put(JsonFormConstants.IMAGE_VIEW, new ImageViewFactory());
map.put(JsonFormConstants.EXTENDED_RADIO_BUTTON, new ExtendedRadioButtonWidgetFactory());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.vijay.jsonwizard.widgets;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.support.v4.content.ContextCompat;
import android.util.Log;

import com.vijay.jsonwizard.R;
import com.vijay.jsonwizard.constants.JsonFormConstants;
import com.vijay.jsonwizard.interfaces.JsonApi;

import org.json.JSONException;

import edu.washington.cs.ubicomplab.rdt_reader.activity.RDTCaptureActivity;

import static android.app.Activity.RESULT_CANCELED;
import static android.app.Activity.RESULT_OK;
import static com.vijay.jsonwizard.constants.JsonFormConstants.VALUE;
import static com.vijay.jsonwizard.utils.Utils.hideProgressDialog;
import static com.vijay.jsonwizard.utils.Utils.showProgressDialog;
import static edu.washington.cs.ubicomplab.rdt_reader.core.Constants.SAVED_IMAGE_FILE_PATH;

/**
* Created by Vincent Karuri on 17/06/2020
*/
public class BasicRDTCaptureFactory extends RDTCaptureFactory {

private static final String TAG = BasicRDTCaptureFactory.class.getName();

private class LaunchRDTCameraTask extends AsyncTask<Void, Void, Void> {

@Override
protected Void doInBackground(Void... voids) {
Activity activity = (Activity) widgetArgs.getContext();
Intent intent = new Intent(activity, RDTCaptureActivity.class);
activity.startActivityForResult(intent, JsonFormConstants.RDT_CAPTURE_CODE);
return null;
}

@Override
protected void onPreExecute() {
showProgressDialog(R.string.please_wait_title, R.string.launching_rdt_capture_message, widgetArgs.getContext());
}
}

protected void launchRDTCaptureActivity() {
if (ContextCompat.checkSelfPermission(widgetArgs.getContext(), Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
new LaunchRDTCameraTask().execute();
}
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
hideProgressDialog();
final JsonApi jsonApi = (JsonApi) widgetArgs.getContext();
if (requestCode == JsonFormConstants.RDT_CAPTURE_CODE && resultCode == RESULT_OK) {
if (data != null) {
try {
String imageFilePath = data.getExtras().getString(SAVED_IMAGE_FILE_PATH);
widgetArgs.getJsonObject().put(VALUE, imageFilePath);
// write image path as widget value
String key = (String) rootLayout.getTag(R.id.key);
String openMrsEntityParent = (String) rootLayout.getTag(R.id.openmrs_entity_parent);
String openMrsEntity = (String) rootLayout.getTag(R.id.openmrs_entity);
String openMrsEntityId = (String) rootLayout.getTag(R.id.openmrs_entity_id);
jsonApi.writeValue(widgetArgs.getStepName(), key, imageFilePath, openMrsEntityParent,
openMrsEntity, openMrsEntityId, widgetArgs.isPopup());
} catch (JSONException e) {
Log.e(TAG, e.getStackTrace().toString());
}
} else {
Log.i(TAG, "No result data for RDT capture!");
}
if (!widgetArgs.getFormFragment().next()) {
widgetArgs.getFormFragment().save(true);
}
} else if (resultCode == RESULT_CANCELED) {
((Activity) widgetArgs.getContext()).finish();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
package com.vijay.jsonwizard.widgets;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;

Expand All @@ -28,39 +21,15 @@
import java.util.List;
import java.util.Set;

import edu.washington.cs.ubicomplab.rdt_reader.activity.RDTCaptureActivity;

import static android.app.Activity.RESULT_CANCELED;
import static android.app.Activity.RESULT_OK;
import static com.vijay.jsonwizard.constants.JsonFormConstants.VALUE;
import static com.vijay.jsonwizard.utils.Utils.hideProgressDialog;
import static com.vijay.jsonwizard.utils.Utils.showProgressDialog;
import static edu.washington.cs.ubicomplab.rdt_reader.core.Constants.SAVED_IMAGE_FILE_PATH;

/**
* Created by Vincent Karuri on 24/05/2019
*/
public class RDTCaptureFactory implements FormWidgetFactory {

private static final String TAG = RDTCaptureFactory.class.getName();
private WidgetArgs widgetArgs;
private View rootLayout;
public abstract class RDTCaptureFactory implements FormWidgetFactory, OnActivityResultListener {

private class LaunchRDTCameraTask extends AsyncTask<Void, Void, Void> {

@Override
protected Void doInBackground(Void... voids) {
Activity activity = (Activity) widgetArgs.getContext();
Intent intent = new Intent(activity, RDTCaptureActivity.class);
activity.startActivityForResult(intent,JsonFormConstants.RDT_CAPTURE_CODE);
return null;
}
protected WidgetArgs widgetArgs;
protected View rootLayout;

@Override
protected void onPreExecute() {
showProgressDialog(R.string.please_wait_title, R.string.launching_rdt_capture_message, widgetArgs.getContext());
}
} @Override
@Override
public List<View> getViewsFromJson(String stepName, Context context, JsonFormFragment formFragment, JSONObject jsonObject, CommonListener listener, boolean popup) throws Exception {
widgetArgs = new WidgetArgs();
widgetArgs.withStepName(stepName).withContext(context).withFormFragment(formFragment).withJsonObject(jsonObject).withListener(listener).withPopup(popup);
Expand Down Expand Up @@ -93,63 +62,20 @@ private void addWidgetTags(JSONObject jsonObject) throws JSONException {
rootLayout.setTag(R.id.openmrs_entity_id, openMrsEntityId);
}

protected abstract void launchRDTCaptureActivity();

private OnActivityResultListener createOnActivityResultListener() {

return new OnActivityResultListener() {

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
hideProgressDialog();
final JsonApi jsonApi = (JsonApi) widgetArgs.getContext();
if (requestCode == JsonFormConstants.RDT_CAPTURE_CODE && resultCode == RESULT_OK) {
if (data != null) {
try {
String imageFilePath = data.getExtras().getString(SAVED_IMAGE_FILE_PATH);
widgetArgs.getJsonObject().put(VALUE, imageFilePath);
// write image path as widget value
String key = (String) rootLayout.getTag(R.id.key);
String openMrsEntityParent = (String) rootLayout.getTag(R.id.openmrs_entity_parent);
String openMrsEntity = (String) rootLayout.getTag(R.id.openmrs_entity);
String openMrsEntityId = (String) rootLayout.getTag(R.id.openmrs_entity_id);
jsonApi.writeValue(widgetArgs.getStepName(), key, imageFilePath, openMrsEntityParent,
openMrsEntity, openMrsEntityId, widgetArgs.isPopup());
} catch (JSONException e) {
Log.e(TAG, e.getStackTrace().toString());
}
} else {
Log.i(TAG, "No result data for RDT capture!");
}
if (!widgetArgs.getFormFragment().next()) {
widgetArgs.getFormFragment().save(true);
}
} else if (resultCode == RESULT_CANCELED) {
((Activity) widgetArgs.getContext()).finish();
}
}
};
protected int getLayout() {
return R.layout.native_form_rdt_capture;
}

public void setUpRDTCaptureActivity() {
Context context = widgetArgs.getContext();
if (context instanceof JsonApi) {
final JsonApi jsonApi = (JsonApi) context;
jsonApi.addOnActivityResultListener(JsonFormConstants.RDT_CAPTURE_CODE , createOnActivityResultListener());
jsonApi.addOnActivityResultListener(JsonFormConstants.RDT_CAPTURE_CODE , this);
}
}



protected void launchRDTCaptureActivity() {
if (ContextCompat.checkSelfPermission(widgetArgs.getContext(), Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
new LaunchRDTCameraTask().execute();
}
}

protected int getLayout() {
return R.layout.native_form_rdt_capture;
}

@Override
public Set<String> getCustomTranslatableWidgetFields() {
return new HashSet<>();
Expand Down

0 comments on commit d9fd0a6

Please sign in to comment.