package org.witness.informacam.app.screens.forms; import info.guardianproject.odkparser.FormWrapper.ODKFormListener; import java.io.FileNotFoundException; import org.witness.informacam.InformaCam; import org.witness.informacam.app.EditorActivity; import org.witness.informacam.app.R; import org.witness.informacam.app.utils.Constants; import org.witness.informacam.app.utils.Constants.App.Editor; import org.witness.informacam.app.utils.Constants.App.Editor.Forms; import org.witness.informacam.app.utils.Constants.EditorActivityListener; import org.witness.informacam.models.forms.IForm; import org.witness.informacam.models.media.IRegion; import org.witness.informacam.storage.FormUtility; import org.witness.informacam.utils.Constants.App.Storage.Type; import org.witness.informacam.utils.Constants.Logger; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; public class TagFormFragment extends Fragment implements ODKFormListener { View rootView; LinearLayout tagFormRoot; Activity a; IForm form = null; IForm formNote = null; FormUtility formUtility; Handler h; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater li, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(li, container, savedInstanceState); rootView = li.inflate(R.layout.fragment_forms_fullscreen, null); tagFormRoot = (LinearLayout) rootView.findViewById(R.id.details_form_list); return rootView; } @Override public void onAttach(Activity a) { super.onAttach(a); this.a = a; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); h = new Handler(); } @Override public void onResume() { super.onResume(); if (this.a != null && this.a instanceof EditorActivity) { ((EditorActivity) a).onFragmentResumed(this); } } @Override public void onDetach() { super.onDetach(); } public boolean initTag(final IRegion region) throws java.lang.InstantiationException, IllegalAccessException { // Reset tagFormRoot.removeAllViews(); this.form = null; this.formNote = null; if (!region.associatedForms.isEmpty()) { for (IForm form : region.associatedForms) { if (form.namespace.equals(Forms.TagForm.TAG)) { this.form = IForm.Activate(form, a, InformaCam.getInstance().ioService.getBytes(form.answerPath, Type.IOCIPHER)); } else if (form.namespace.equals(Forms.FreeText.TAG)) { this.formNote = IForm.Activate(form, a, InformaCam.getInstance().ioService.getBytes(form.answerPath, Type.IOCIPHER)); } } } if (this.form == null || this.formNote == null) { for (IForm form : ((EditorActivity) a).availableForms) { if (this.form == null && form.namespace.equals(Forms.TagForm.TAG)) { this.form = IForm.Activate(form, a); this.form.answerPath = new info.guardianproject.iocipher.File(((EditorActivityListener) a).media().rootFolder, "form_" + System.currentTimeMillis()).getAbsolutePath(); region.addForm(this.form); } else if (this.formNote == null && form.namespace.equals(Forms.FreeText.TAG)) { this.formNote = IForm.Activate(form, a); this.formNote.answerPath = new info.guardianproject.iocipher.File(((EditorActivityListener) a).media().rootFolder, "form_t" + System.currentTimeMillis()).getAbsolutePath(); region.addForm(this.formNote); } } } h.post(new Runnable() { @Override public void run() { int[] inputTemplate = new int[] { R.layout.forms_odk_input_template, R.id.odk_question, R.id.odk_hint, R.id.odk_answer }; int[] selectOneTemplate = new int[] { R.layout.forms_odk_select_one_template, R.id.odk_question, R.id.odk_hint, R.id.odk_selection_holder }; int[] selectMultipleTemplate = new int[] { R.layout.forms_odk_select_multiple_template, R.id.odk_question, R.id.odk_hint, R.id.odk_selection_holder }; // UI for the note for (View v : TagFormFragment.this.formNote.buildUI(inputTemplate, selectOneTemplate, selectMultipleTemplate, null)) { tagFormRoot.addView(v); } LayoutInflater inflater = LayoutInflater.from(a); View divider = inflater.inflate(R.layout.extras_divider_blue, tagFormRoot, false); tagFormRoot.addView(divider); // UI for tag form for (View v : TagFormFragment.this.form.buildUI(inputTemplate, selectOneTemplate, selectMultipleTemplate, null)) { tagFormRoot.addView(v); } } }); return true; } public void saveTagFormData(final IRegion region) { new Thread(new Runnable() { @Override public void run() { try { formNote.answerAll(); formNote.save(new info.guardianproject.iocipher.FileOutputStream(formNote.answerPath)); form.answerAll(); form.save(new info.guardianproject.iocipher.FileOutputStream(form.answerPath)); ((EditorActivityListener) a).media().save(); } catch (Exception e) { Logger.e("error opening file for answer path", e); } } }).start(); } @Override public boolean saveForm() { return true; } }