Advertisement
ervinne

DocumentActivity

Mar 6th, 2015
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 26.38 KB | None | 0 0
  1. package ph.com.gs3.formalistics.presenter;
  2.  
  3. import java.io.File;
  4. import java.text.SimpleDateFormat;
  5. import java.util.ArrayList;
  6. import java.util.Date;
  7. import java.util.List;
  8.  
  9. import jim.h.common.android.zxinglib.integrator.IntentIntegrator;
  10. import jim.h.common.android.zxinglib.integrator.IntentResult;
  11.  
  12. import org.json.JSONException;
  13. import org.json.JSONObject;
  14.  
  15. import ph.com.gs3.formalistics.R;
  16. import ph.com.gs3.formalistics.custom.interfaces.CustomDocumentActivity;
  17. import ph.com.gs3.formalistics.global.constants.ActivityRequestCodes;
  18. import ph.com.gs3.formalistics.global.constants.ActivityResultCodes;
  19. import ph.com.gs3.formalistics.global.constants.DateTimePickerType;
  20. import ph.com.gs3.formalistics.global.constants.DocumentType;
  21. import ph.com.gs3.formalistics.global.constants.StarMark;
  22. import ph.com.gs3.formalistics.global.interfaces.CallbackCommand;
  23. import ph.com.gs3.formalistics.global.utilities.DateUtilities;
  24. import ph.com.gs3.formalistics.global.utilities.ImageUtilities;
  25. import ph.com.gs3.formalistics.global.utilities.logging.FLLogger;
  26. import ph.com.gs3.formalistics.model.facades.DocumentsDataReader;
  27. import ph.com.gs3.formalistics.model.facades.FormsDataReader;
  28. import ph.com.gs3.formalistics.model.ldao.FilesLDAO;
  29. import ph.com.gs3.formalistics.model.vo.application.SearchCondition;
  30. import ph.com.gs3.formalistics.model.vo.business.User;
  31. import ph.com.gs3.formalistics.model.vo.business.document.Document;
  32. import ph.com.gs3.formalistics.model.vo.business.document.DocumentAction;
  33. import ph.com.gs3.formalistics.model.vo.business.document.OutgoingAction;
  34. import ph.com.gs3.formalistics.model.vo.business.document.SubmitReadyAction;
  35. import ph.com.gs3.formalistics.model.vo.business.form.Form;
  36. import ph.com.gs3.formalistics.model.vo.formcontent.EmbeddedViewData;
  37. import ph.com.gs3.formalistics.model.vo.formcontent.PickListData;
  38. import ph.com.gs3.formalistics.model.vo.parsers.json.PicklistDataJSONParser;
  39. import ph.com.gs3.formalistics.model.vo.view.ViewColumn;
  40. import ph.com.gs3.formalistics.presenter.fragements.workers.DocumentWorkerFragment;
  41. import ph.com.gs3.formalistics.presenter.fragments.views.DocumentViewFragment;
  42. import ph.com.gs3.formalistics.presenter.fragments.views.DocumentViewFragment.DocumentViewActionListener;
  43. import ph.com.gs3.formalistics.presenter.fragments.views.DocumentViewFragment.DocumentViewFragmentParameterBundle;
  44. import ph.com.gs3.formalistics.services.UploadService;
  45. import ph.com.gs3.formalistics.view.dialogs.ListSelectionDialogFragment;
  46. import ph.com.gs3.formalistics.view.document.DocumentDynamicViewContentsManager;
  47. import ph.com.gs3.formalistics.view.document.DocumentViewContentsManager;
  48. import ph.com.gs3.formalistics.view.document.specialfields.BarcodeScannerField;
  49. import ph.com.gs3.formalistics.view.document.specialfields.BarcodeScannerField.BarcodeScannerListener;
  50. import ph.com.gs3.formalistics.view.document.specialfields.DateTimePickerField;
  51. import ph.com.gs3.formalistics.view.document.specialfields.DateTimePickerField.DateTimePickerListener;
  52. import ph.com.gs3.formalistics.view.document.specialfields.DateTimePickerField.PickerType;
  53. import ph.com.gs3.formalistics.view.document.specialfields.DynamicImageField;
  54. import ph.com.gs3.formalistics.view.document.specialfields.DynamicImageField.DynamicImageFieldActionListener;
  55. import ph.com.gs3.formalistics.view.document.specialfields.PickListField;
  56. import ph.com.gs3.formalistics.view.document.specialfields.PickListField.PickListFieldListener;
  57. import ph.com.gs3.formalistics.view.document.views.EmbeddedView;
  58. import ph.com.gs3.formalistics.view.document.views.EmbeddedView.EmbeddedViewEventsListener;
  59. import android.app.Activity;
  60. import android.app.AlertDialog;
  61. import android.app.FragmentManager;
  62. import android.content.DialogInterface;
  63. import android.content.Intent;
  64. import android.graphics.Bitmap;
  65. import android.net.Uri;
  66. import android.os.Bundle;
  67. import android.os.Handler;
  68. import android.view.Menu;
  69. import android.view.MenuItem;
  70. import android.widget.Toast;
  71.  
  72. public class DocumentActivity extends Activity implements DocumentViewActionListener,
  73.         DateTimePickerListener, BarcodeScannerListener, PickListFieldListener,
  74.         EmbeddedViewEventsListener, DynamicImageFieldActionListener {
  75.  
  76.     // ========================================================================
  77.     // {{ Constants
  78.  
  79.     public static final String TAG = DocumentActivity.class.getSimpleName();
  80.  
  81.     public static final String EXTRA_CURRENT_USER = "current_user";
  82.     public static final String EXTRA_DOCUMENT_TYPE = "document_type";
  83.     public static final String EXTRA_FORM_ID = "form_id";
  84.     public static final String EXTRA_DOCUMENT_ID = "document_id";
  85.     public static final String EXTRA_OUTGOING_ACTION_ID = "outgoing_action_id";
  86.     public static final String EXTRA_PARENT_DOCUMENT_ID = "parent_document_id";
  87.  
  88.     public static final String EXTRA_ISSUED_ACTION = "issued_action";
  89.  
  90.     // }}
  91.  
  92.     // ========================================================================
  93.     // {{ Customization Interface
  94.  
  95.     public CustomDocumentActivity customDocumentActivity;
  96.  
  97.     // }}
  98.  
  99.     // ========================================================================
  100.     // {{ Local State Fields
  101.  
  102.     private User currentUser;
  103.     private int formId;
  104.     private int documentId;
  105.     private int parentDocumentId;
  106.     private DocumentType documentType;
  107.  
  108.     private StarMark originalStarMark;
  109.  
  110.     // ==================================
  111.     // Fields
  112.  
  113.     private String activeImageFieldId;
  114.     private String activeBarcodeScannerFieldId;
  115.  
  116.     // }}
  117.  
  118.     private DocumentViewContentsManager documentViewContentsManager;
  119.  
  120.     private DocumentWorkerFragment documentWorkerFragment;
  121.     private DocumentViewFragment documentViewFragment;
  122.  
  123.     @Override
  124.     protected void onCreate(Bundle savedInstanceState) {
  125.         super.onCreate(savedInstanceState);
  126.         setContentView(R.layout.activity_document);
  127.  
  128.         initializeData();
  129.         initializeWorkerFragment();
  130.  
  131.         // For custom implementations
  132.         customDocumentActivity = CustomImplementation.getInstance().getCustomDocumentActivity(this,
  133.                 currentUser);
  134.  
  135.         if (savedInstanceState == null) {
  136.  
  137.             Form form = documentWorkerFragment.getCurrentForm();
  138.             Document document = documentWorkerFragment.getCurrentDocument();
  139.             OutgoingAction outgoingAction = documentWorkerFragment.getOutgoingAction();
  140.  
  141.             DocumentViewFragmentParameterBundle bundle = new DocumentViewFragmentParameterBundle();
  142.  
  143.             bundle.currentUser = currentUser;
  144.             bundle.form = form;
  145.             bundle.document = document;
  146.             bundle.documentType = documentType;
  147.             bundle.outgoingAction = outgoingAction;
  148.  
  149.             if (customDocumentActivity != null) {
  150.                 documentViewContentsManager = customDocumentActivity
  151.                         .getDocumentViewContentsManager(this, currentUser, form);
  152.             }
  153.  
  154.             // In case the view is not supported but is set to be implemented, roll back
  155.             // to dynamic view contents manager
  156.             if (documentViewContentsManager == null) {
  157.                 documentViewContentsManager = new DocumentDynamicViewContentsManager(this,
  158.                         currentUser);
  159.             } else {
  160.                 FLLogger.w(TAG, "Unimplemented form view for form with web id " + form.getWebId());
  161.             }
  162.  
  163.             bundle.documentViewContentsManager = documentViewContentsManager;
  164.  
  165.             documentViewFragment = DocumentViewFragment.createInstance(bundle);
  166.  
  167.             getFragmentManager().beginTransaction().add(R.id.container, documentViewFragment)
  168.                     .commit();
  169.  
  170.             setTitle(form.getName());
  171.         }
  172.  
  173.         if (documentType == DocumentType.EXISTING_DOCUMENT) {
  174.             originalStarMark = documentWorkerFragment.getCurrentDocument().getStarMark();
  175.         }
  176.  
  177.     }
  178.  
  179.     @Override
  180.     public void onBackPressed() {
  181.  
  182.         // Block if there are child documents that will be orphaned
  183.  
  184.         boolean hasNewChildOutgoingActions = documentWorkerFragment.hasNewChildOutgoingActions();
  185.  
  186.         if (hasNewChildOutgoingActions && documentType != DocumentType.CHILD_DOCUMENT) {
  187.             showClearChildOutgoingActionsOnExitDialog();
  188.         } else {
  189.             addFinishResults();
  190.             super.onBackPressed();
  191.         }
  192.     }
  193.  
  194.     @Override
  195.     public boolean onOptionsItemSelected(MenuItem item) {
  196.         // Handle action bar item clicks here. The action bar will
  197.         // automatically handle clicks on the Home/Up button, so long
  198.         // as you specify a parent activity in AndroidManifest.xml.
  199.         int id = item.getItemId();
  200.         switch (id) {
  201.             case R.id.action_submit_action: {
  202.                 onSubmitActionCommand();
  203.  
  204.                 return true;
  205.             }
  206.         }
  207.  
  208.         return super.onOptionsItemSelected(item);
  209.     }
  210.  
  211.     @Override
  212.     public boolean onCreateOptionsMenu(Menu menu) {
  213.  
  214.         switch (documentType) {
  215.             case NEW_DOCUMENT:
  216.             case CHILD_DOCUMENT:
  217.                 getMenuInflater().inflate(R.menu.document, menu);
  218.                 break;
  219.             case EXISTING_DOCUMENT:
  220.                 Document document = documentWorkerFragment.getCurrentDocument();
  221.  
  222.                 if (document.getProcessorId() == currentUser.getId()) {
  223.                     getMenuInflater().inflate(R.menu.document_for_approval, menu);
  224.                 } else {
  225.                     FLLogger.d(TAG, "not displaying for approval");
  226.                 }
  227.                 break;
  228.             default:
  229.                 break;
  230.         }
  231.  
  232.         return true;
  233.     }
  234.  
  235.     @Override
  236.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  237.         super.onActivityResult(requestCode, resultCode, data);
  238.  
  239.         if (data != null) {
  240.             switch (requestCode) {
  241.                 case ActivityRequestCodes.PICK_DATE:
  242.                 case ActivityRequestCodes.PICK_TIME:
  243.                 case ActivityRequestCodes.PICK_DATE_TIME: {
  244.                     if (data.hasExtra(DateTimePickerActivity.EXTRA_RESULT_SELECTED_DATE)) {
  245.                         String fieldId = data
  246.                                 .getStringExtra(DateTimePickerActivity.EXTRA_DATE_TIME_PICKER_FIELD_ID);
  247.                         Date updatedDate = (Date) data
  248.                                 .getSerializableExtra(DateTimePickerActivity.EXTRA_RESULT_SELECTED_DATE);
  249.                         updateDateTimePickerView(requestCode, fieldId, updatedDate);
  250.                     }
  251.  
  252.                 }
  253.                     break;
  254.  
  255.                 case IntentIntegrator.REQUEST_CODE: { // Bar code scanner
  256.                     IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode,
  257.                             resultCode, data);
  258.                     if (scanResult == null) {
  259.                         return;
  260.                     }
  261.                     final String result = scanResult.getContents();
  262.                     if (result != null) {
  263.                         Handler handler = new Handler();
  264.                         handler.post(new Runnable() {
  265.                             @Override
  266.                             public void run() {
  267.                                 // custom events
  268.                                 if (customDocumentActivity != null) {
  269.                                     customDocumentActivity.onBarcodeScanned(
  270.                                             activeBarcodeScannerFieldId, result);
  271.                                 }
  272.  
  273.                                 documentViewFragment.getDocumentViewContentsManager()
  274.                                         .setFieldValue(activeBarcodeScannerFieldId, result);
  275.                             }
  276.                         });
  277.  
  278.                     }
  279.                 }
  280.                     break;
  281.                 case ActivityRequestCodes.PICKLIST: {
  282.  
  283.                     if (data.hasExtra(PicklistPickerActivity.EXTRA_PICKED_RESULT)) {
  284.                         String fieldId = data.getStringExtra(PicklistPickerActivity.EXTRA_FIELD_ID);
  285.                         String result = data
  286.                                 .getStringExtra(PicklistPickerActivity.EXTRA_PICKED_RESULT);
  287.                         documentViewFragment.getDocumentViewContentsManager().setFieldValue(
  288.                                 fieldId, result);
  289.                     }
  290.  
  291.                 }
  292.                     break;
  293.                 case ActivityRequestCodes.CAMERA_REQUEST: {
  294.  
  295.                     // FIXME: Refactor - test only
  296.                     Bitmap image = (Bitmap) data.getExtras().get("data");
  297.  
  298.                     FilesLDAO filesLDAO = new FilesLDAO(this);
  299.                     File storedFile = filesLDAO.storeImage(image);
  300.  
  301.                     uploadFile(storedFile.getAbsolutePath());
  302.  
  303.                     DynamicImageField dynamicImageField = (DynamicImageField) documentViewFragment
  304.                             .getDocumentViewContentsManager().findFieldView(activeImageFieldId);
  305.  
  306.                     dynamicImageField.setImage(image);
  307.  
  308.                 }
  309.                     break;
  310.                 case ActivityRequestCodes.PICK_IMAGE: {
  311.  
  312.                     // FIXME: Refactor - test only
  313.  
  314.                     Uri selectedImageUri = data.getData();
  315.                     String imagePath = ImageUtilities.getRealPathFromURI(selectedImageUri, this);
  316.                     FLLogger.d(TAG, "Selected file: " + imagePath);
  317.  
  318.                     uploadFile(imagePath);
  319.  
  320.                     DynamicImageField dynamicImageField = (DynamicImageField) documentViewFragment
  321.                             .getDocumentViewContentsManager().findFieldView(activeImageFieldId);
  322.  
  323.                     dynamicImageField.setImagePath(imagePath);
  324.                 }
  325.                     break;
  326.             }
  327.  
  328.         }
  329.  
  330.     }
  331.  
  332.     private void initializeData() {
  333.         Bundle extras = getIntent().getExtras();
  334.  
  335.         currentUser = (User) extras.getSerializable(EXTRA_CURRENT_USER);
  336.         documentType = (DocumentType) extras.get(EXTRA_DOCUMENT_TYPE);
  337.         formId = extras.getInt(EXTRA_FORM_ID);
  338.         documentId = extras.getInt(EXTRA_DOCUMENT_ID);
  339.  
  340.         if (extras.containsKey(EXTRA_PARENT_DOCUMENT_ID)) {
  341.             parentDocumentId = extras.getInt(EXTRA_PARENT_DOCUMENT_ID);
  342.         } else {
  343.             parentDocumentId = -1;
  344.         }
  345.  
  346.         FLLogger.d(TAG, "Parent document id: " + parentDocumentId);
  347.  
  348.     }
  349.  
  350.     private void initializeWorkerFragment() {
  351.  
  352.         FragmentManager fragmentMan = getFragmentManager();
  353.  
  354.         documentWorkerFragment = (DocumentWorkerFragment) fragmentMan
  355.                 .findFragmentByTag(DocumentWorkerFragment.TAG);
  356.  
  357.         if (documentWorkerFragment == null) {
  358.  
  359.             // Initialize worker fragment
  360.             documentWorkerFragment = DocumentWorkerFragment.createInstance(this, currentUser);
  361.             fragmentMan.beginTransaction().add(documentWorkerFragment, DocumentViewFragment.TAG)
  362.                     .commit();
  363.         }
  364.  
  365.         documentWorkerFragment.initialize(documentType, formId, documentId, parentDocumentId);
  366.  
  367.     }
  368.  
  369.     // ========================================================================
  370.     // {{ Functional Methods
  371.  
  372.     private void onSubmitActionCommand() {
  373.  
  374.         // Validate first if there are no
  375.         // Document updatedDocument = documentViewFragment.updateDocumentValuesFromView();
  376.         JSONObject updatedFieldValues = documentViewFragment.getUpdatedFieldValuesFromView();
  377.         List<String> fieldsThatFailedValidation = documentWorkerFragment
  378.                 .validateFields(updatedFieldValues);
  379.  
  380.         if (fieldsThatFailedValidation.isEmpty()) {
  381.             showActionsDialog();
  382.         } else {
  383.             documentViewContentsManager.notifyFieldsRequired(fieldsThatFailedValidation);
  384.             Toast.makeText(this, "Some fields have failed validation.", Toast.LENGTH_LONG).show();
  385.         }
  386.  
  387.     }
  388.  
  389.     public void submitDocumentAction(String action) {
  390.  
  391.         // Extract data from document view
  392.         // Document updatedDocument = documentViewFragment.updateDocumentValuesFromView();
  393.  
  394.         JSONObject updatedFieldValues = documentViewFragment.getUpdatedFieldValuesFromView();
  395.         documentWorkerFragment.saveDocumentAction(updatedFieldValues, action);
  396.  
  397.         if (documentType != DocumentType.CHILD_DOCUMENT) {
  398.             documentWorkerFragment.updateChildOutgoingActionsForSubmition();
  399.         }
  400.  
  401.         Toast.makeText(
  402.                 DocumentActivity.this,
  403.                 "Your document is being processed. You may continue processing/viewing other documents while its sending.",
  404.                 Toast.LENGTH_LONG).show();
  405.  
  406.         Intent resultIntent = new Intent();
  407.         setResult(ActivityResultCodes.DOCUMENT_ACTION_SUBMITTED, resultIntent);
  408.         finish();
  409.  
  410.     }
  411.  
  412.     private void updateDateTimePickerView(int sourceRequestCode, String fieldId, Date updatedDate) {
  413.  
  414.         if (updatedDate == null) {
  415.             FLLogger.w(TAG, "No date selected");
  416.         } else {
  417.             SimpleDateFormat dateFormat;
  418.  
  419.             switch (sourceRequestCode) {
  420.                 case ActivityRequestCodes.PICK_DATE:
  421.                     dateFormat = DateUtilities.DEFAULT_DISPLAY_DATE_ONLY_FORMAT;
  422.                     break;
  423.                 case ActivityRequestCodes.PICK_TIME:
  424.                     dateFormat = DateUtilities.DEFAULT_DISPLAY_TIME_ONLY_FORMAT;
  425.                     break;
  426.                 case ActivityRequestCodes.PICK_DATE_TIME:
  427.                     dateFormat = DateUtilities.DEFAULT_DISPLAY_DATE_TIME_FORMAT;
  428.                     break;
  429.                 default: {
  430.                     FLLogger.w(TAG, "Invalid request code, the update was ignored");
  431.                     return;
  432.                 }
  433.  
  434.             }
  435.  
  436.             String displayDate = dateFormat.format(updatedDate);
  437.             documentViewFragment.getDocumentViewContentsManager().setFieldValue(fieldId,
  438.                     displayDate);
  439.  
  440.         }
  441.  
  442.     }
  443.  
  444.     private void addFinishResults() {
  445.         Document document = documentWorkerFragment.getCurrentDocument();
  446.  
  447.         if (documentType == DocumentType.EXISTING_DOCUMENT
  448.                 && originalStarMark != document.getStarMark()) {
  449.             setResult(ActivityResultCodes.DOCUMENT_STAR_MARKED);
  450.         }
  451.     }
  452.  
  453.     // }}
  454.  
  455.     // ========================================================================
  456.     // {{ Dialog View Methods
  457.  
  458.     private void showActionsDialog() {
  459.  
  460.         String dialogHeader = "Actions";
  461.         String dialogEmptyListMessage = "No are actions available for this document";
  462.  
  463.         ListSelectionDialogFragment dialog = new ListSelectionDialogFragment(dialogHeader,
  464.                 dialogEmptyListMessage);
  465.         List<DocumentAction> actions;
  466.  
  467.         final Form currentForm = documentWorkerFragment.getCurrentForm();
  468.         final Document currentDocument = documentWorkerFragment.getCurrentDocument();
  469.  
  470.         actions = new ArrayList<DocumentAction>();
  471.         switch (documentType) {
  472.             case NEW_DOCUMENT:
  473.             case CHILD_DOCUMENT:
  474.                 actions = currentForm.getOnCreateActions();
  475.                 break;
  476.             case EXISTING_DOCUMENT:
  477.                 actions = currentDocument.getActions();
  478.                 break;
  479.             default:
  480.                 actions = new ArrayList<DocumentAction>();
  481.         }
  482.  
  483.         List<String> actionStringList = new ArrayList<String>();
  484.  
  485.         for (DocumentAction action : actions) {
  486.             actionStringList.add(action.getLabel());
  487.         }
  488.  
  489.         dialog.setSelection(actionStringList);
  490.         dialog.show(getFragmentManager(), ListSelectionDialogFragment.TAG);
  491.         dialog.setOnItemSelectedCallback(new CallbackCommand<String>() {
  492.  
  493.             @Override
  494.             public void execute(String result) {
  495.                 submitDocumentAction(result);
  496.             }
  497.         });
  498.     }
  499.  
  500.     private void showClearChildOutgoingActionsOnExitDialog() {
  501.  
  502.         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
  503.  
  504.         dialogBuilder.setIcon(android.R.drawable.ic_dialog_alert);
  505.         dialogBuilder.setTitle("Exit document?");
  506.         dialogBuilder
  507.                 .setMessage("You submitted new documents with this document as their parent, exiting now will delete all those documents. Are you sure you want to exit?");
  508.         dialogBuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
  509.  
  510.             @Override
  511.             public void onClick(DialogInterface dialog, int which) {
  512.                 documentWorkerFragment.clearOrphanedOutgoingActions();
  513.                 addFinishResults();
  514.                 finish();
  515.             }
  516.  
  517.         });
  518.         dialogBuilder.setNegativeButton("Cancel", null);
  519.         dialogBuilder.show();
  520.     }
  521.  
  522.     private void showDynamicImageOptionsDialog() {
  523.  
  524.         String dialogHeader = "Image";
  525.         String dialogEmptyListMessage = "";
  526.         List<String> selection = new ArrayList<>();
  527.  
  528.         selection.add("Take a Picture");
  529.         selection.add("Browse");
  530.  
  531.         ListSelectionDialogFragment dialog = new ListSelectionDialogFragment(dialogHeader,
  532.                 dialogEmptyListMessage);
  533.  
  534.         dialog.setSelection(selection);
  535.         dialog.show(getFragmentManager(), ListSelectionDialogFragment.TAG);
  536.         dialog.setOnItemSelectedCallback(new CallbackCommand<String>() {
  537.  
  538.             @Override
  539.             public void execute(String result) {
  540.  
  541.                 if ("Take a Picture".equals(result)) {
  542.                     Intent cameraIntent = new Intent(
  543.                             android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
  544.                     startActivityForResult(cameraIntent, ActivityRequestCodes.CAMERA_REQUEST);
  545.                 } else {
  546.                     Intent intent = new Intent();
  547.                     intent.setType("image/*");
  548.                     intent.setAction(Intent.ACTION_GET_CONTENT);
  549.                     startActivityForResult(Intent.createChooser(intent, "Select Picture"),
  550.                             ActivityRequestCodes.PICK_IMAGE);
  551.                 }
  552.  
  553.             }
  554.         });
  555.  
  556.     }
  557.  
  558.     // }}
  559.  
  560.     // ========================================================================
  561.     // {{ View Implementation
  562.  
  563.     @Override
  564.     public void onMarkDocumentStarCommand(StarMark star) {
  565.  
  566.         documentWorkerFragment.markDocumentStar(star);
  567.  
  568.         if (star == StarMark.STARRED) {
  569.             documentViewFragment.displayDocumentAsStarred();
  570.         } else {
  571.             documentViewFragment.displayDocumentAsUnstarred();
  572.         }
  573.  
  574.     }
  575.  
  576.     @Override
  577.     public void onOpenCommentsCommand() {
  578.  
  579.         Intent commentsActivity = new Intent(DocumentActivity.this, CommentsActivity.class);
  580.  
  581.         commentsActivity.putExtra(CommentsActivity.EXTRA_CURRENT_USER, currentUser);
  582.         commentsActivity.putExtra(CommentsActivity.EXTRA_CURRENT_DOCUMENT_ID, documentId);
  583.  
  584.         startActivity(commentsActivity);
  585.     }
  586.  
  587.     @Override
  588.     public void onScanCodeCommand(BarcodeScannerField source) {
  589.         activeBarcodeScannerFieldId = source.getFieldId();
  590.  
  591.         IntentIntegrator.initiateScan(DocumentActivity.this, R.layout.activity_zxing_capture,
  592.                 R.id.viewfinder_view, R.id.preview_view, true);
  593.     }
  594.  
  595.     @Override
  596.     public void onOpenPickerViewCommand(DateTimePickerField source, PickerType pickerType,
  597.             String currentFieldValue) {
  598.         DateTimePickerType viewPickerType = null;
  599.         int requestCode = 0;
  600.  
  601.         switch (pickerType) {
  602.             case DATE: {
  603.                 viewPickerType = DateTimePickerType.DATE_ONLY;
  604.                 requestCode = ActivityRequestCodes.PICK_DATE;
  605.             }
  606.                 break;
  607.             case TIME: {
  608.                 viewPickerType = DateTimePickerType.TIME_ONLY;
  609.                 requestCode = ActivityRequestCodes.PICK_TIME;
  610.             }
  611.                 break;
  612.             case DATETIME: {
  613.                 viewPickerType = DateTimePickerType.DATE_TIME;
  614.                 requestCode = ActivityRequestCodes.PICK_DATE_TIME;
  615.             }
  616.                 break;
  617.         }
  618.  
  619.         if (viewPickerType != null && requestCode != 0) {
  620.  
  621.             Intent dateTimePicker = new Intent(DocumentActivity.this, DateTimePickerActivity.class);
  622.  
  623.             dateTimePicker.putExtra(DateTimePickerActivity.EXTRA_DATE_TIME_PICKER_FIELD_ID,
  624.                     source.getFieldId());
  625.             dateTimePicker.putExtra(DateTimePickerActivity.EXTRA_DATE_TIME_PICKER_TYPE,
  626.                     viewPickerType);
  627.             dateTimePicker.putExtra(DateTimePickerActivity.EXTRA_PRE_SELECTED_DATE,
  628.                     currentFieldValue);
  629.  
  630.             startActivityForResult(dateTimePicker, requestCode);
  631.         }
  632.     }
  633.  
  634.     @Override
  635.     public void onOpenPicklistCommand(PickListField source) {
  636.         PickListData data;
  637.  
  638.         try {
  639.             data = PicklistDataJSONParser.parseJSON(source.getSourceFormField().getRawJSON());
  640.         } catch (JSONException e) {
  641.  
  642.             // TODO: add an error report here that can be sent to the administrator of the
  643.             // formalistics installation
  644.  
  645.             FLLogger.e(TAG, e.getMessage());
  646.             Toast.makeText(
  647.                     DocumentActivity.this,
  648.                     "Failed to open picklist, its search data might be corrupted or has an incorrect entry. Contact your administrator.",
  649.                     Toast.LENGTH_LONG).show();
  650.             return;
  651.         }
  652.  
  653.         Intent intent = new Intent(DocumentActivity.this, PicklistPickerActivity.class);
  654.         intent.putExtra(PicklistPickerActivity.EXTRA_FIELD_ID, source.getFieldId());
  655.         intent.putExtra(PicklistPickerActivity.EXTRA_CURRENT_USER, currentUser);
  656.         intent.putExtra(PicklistPickerActivity.EXTRA_PICKLIST_SEARCH_AND_RESULT_DATA, data);
  657.         startActivityForResult(intent, ActivityRequestCodes.PICKLIST);
  658.  
  659.     }
  660.  
  661.     @Override
  662.     public void onCreateChildDocument(int formId) {
  663.  
  664.         Document currentDocument = documentWorkerFragment.getCurrentDocument();
  665.  
  666.         Intent documentActivity = new Intent(DocumentActivity.this, DocumentActivity.class);
  667.  
  668.         documentActivity.putExtra(DocumentActivity.EXTRA_CURRENT_USER, currentUser);
  669.         documentActivity
  670.                 .putExtra(DocumentActivity.EXTRA_DOCUMENT_TYPE, DocumentType.CHILD_DOCUMENT);
  671.         documentActivity.putExtra(DocumentActivity.EXTRA_FORM_ID, formId);
  672.         documentActivity.putExtra(DocumentActivity.EXTRA_DOCUMENT_ID, 0);
  673.         documentActivity.putExtra(DocumentActivity.EXTRA_PARENT_DOCUMENT_ID,
  674.                 currentDocument.getId());
  675.  
  676.         startActivityForResult(documentActivity, ActivityRequestCodes.OPEN_DOCUMENT);
  677.     }
  678.  
  679.     @Override
  680.     public void onSearchForEmbeddedViewRequested(String searchCompareToFieldValue,
  681.             EmbeddedView source) {
  682.  
  683.         EmbeddedViewData embeddedViewData = source.getEmbeddedViewData();
  684.  
  685.         FormsDataReader formsDataReader = new FormsDataReader(DocumentActivity.this, currentUser);
  686.         DocumentsDataReader dataReader = new DocumentsDataReader(DocumentActivity.this);
  687.  
  688.         Form searchForm = formsDataReader.getForm(embeddedViewData.getSearchFormId());
  689.         String searchFieldName = embeddedViewData.getSearchFieldId();
  690.         String operator = embeddedViewData.getSearchConditionalOperator();
  691.         SearchCondition condition = new SearchCondition(searchFieldName, operator,
  692.                 searchCompareToFieldValue);
  693.  
  694.         List<SearchCondition> searchConditions = new ArrayList<>();
  695.         searchConditions.add(condition);
  696.  
  697.         List<ViewColumn> searchViewColumns = embeddedViewData.getViewColumns();
  698.         List<String> searchColumnNames = new ArrayList<>();
  699.  
  700.         for (ViewColumn column : searchViewColumns) {
  701.             searchColumnNames.add(column.getName());
  702.         }
  703.  
  704.         List<JSONObject> listData = dataReader.search(searchForm, searchColumnNames,
  705.                 currentUser.getId(), searchConditions);
  706.  
  707.         source.setData(listData);
  708.  
  709.     }
  710.  
  711.     @Override
  712.     public void onOpenDocumentCommand(int formId, int documentId) {
  713.         FLLogger.d(TAG, "onOpenDocumentCommand: " + formId + " " + documentId);
  714.  
  715.         Intent documentActivity = new Intent(DocumentActivity.this, DocumentActivity.class);
  716.  
  717.         documentActivity.putExtra(DocumentActivity.EXTRA_CURRENT_USER, currentUser);
  718.         documentActivity.putExtra(DocumentActivity.EXTRA_DOCUMENT_TYPE,
  719.                 DocumentType.EXISTING_DOCUMENT);
  720.         documentActivity.putExtra(DocumentActivity.EXTRA_FORM_ID, formId);
  721.         documentActivity.putExtra(DocumentActivity.EXTRA_DOCUMENT_ID, documentId);
  722.  
  723.         startActivityForResult(documentActivity, ActivityRequestCodes.OPEN_DOCUMENT);
  724.  
  725.     }
  726.  
  727.     // }}
  728.  
  729.     @Override
  730.     public void onOpenIssuedOutgoingActionCommand() {
  731.  
  732.         Intent documentActivity = new Intent(DocumentActivity.this, DocumentActivity.class);
  733.  
  734.         documentActivity.putExtra(DocumentActivity.EXTRA_CURRENT_USER, currentUser);
  735.         documentActivity.putExtra(DocumentActivity.EXTRA_DOCUMENT_TYPE,
  736.                 DocumentType.OUTGOING_DOCUMENT);
  737.         documentActivity.putExtra(DocumentActivity.EXTRA_FORM_ID, formId);
  738.         documentActivity.putExtra(DocumentActivity.EXTRA_DOCUMENT_ID, documentId);
  739.  
  740.         startActivity(documentActivity);
  741.     }
  742.  
  743.     @Override
  744.     public void onViewReady() {
  745.         OutgoingAction outgoingAction = documentWorkerFragment.getOutgoingAction();
  746.  
  747.         boolean showPrompt = outgoingAction != null
  748.                 && documentType == DocumentType.EXISTING_DOCUMENT
  749.                 && !outgoingAction.getAction().equals(
  750.                         SubmitReadyAction.ACTION_NO_DOCUMENT_SUBMISSION);
  751.  
  752.         documentViewFragment.showOutgoingActionsPropmt(showPrompt);
  753.  
  754.         // Invoke document view contents manager events
  755.         documentViewContentsManager.onLoad();
  756.  
  757.     }
  758.  
  759.     @Override
  760.     public void onSelectImage(DynamicImageField source) {
  761.  
  762.         activeImageFieldId = source.getFieldId();
  763.         showDynamicImageOptionsDialog();
  764.  
  765.     }
  766.  
  767.     // =========================================================================
  768.     // Test Only
  769.  
  770.     private void uploadFile(String fileURI) {
  771.  
  772.         Intent intent = new Intent(DocumentActivity.this, UploadService.class);
  773.         intent.addCategory(Intent.CATEGORY_DEFAULT);
  774.         intent.putExtra(UploadService.EXTRA_OWNER, currentUser);
  775.         intent.putExtra(UploadService.EXTRA_FILE_URI, fileURI);
  776.         startService(intent);
  777.  
  778.     }
  779.  
  780. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement