Search in sources :

Example 46 with Form

use of org.odk.collect.forms.Form in project collect by opendatakit.

the class InMemFormsRepository method save.

@Override
public Form save(@NotNull Form form) {
    Form.Builder builder = new Form.Builder(form);
    if (form.getFormMediaPath() == null) {
        builder.formMediaPath(TempFiles.getPathInTempDir());
    }
    if (form.getDbId() != null) {
        String formFilePath = form.getFormFilePath();
        String hash = Md5.getMd5Hash(new File(formFilePath));
        builder.md5Hash(hash);
        forms.removeIf(f -> f.getDbId().equals(form.getDbId()));
        forms.add(builder.build());
        return form;
    } else {
        builder.dbId(idCounter++).date(clock.get());
        // Allows tests to override hash
        String hash;
        if (form.getMD5Hash() == null) {
            String formFilePath = form.getFormFilePath();
            hash = Md5.getMd5Hash(new File(formFilePath));
            builder.md5Hash(hash);
        } else {
            hash = form.getMD5Hash();
        }
        if (form.getJrCacheFilePath() == null) {
            builder.jrCacheFilePath(TempFiles.getPathInTempDir(hash, ".formdef"));
        }
        Form formToSave = builder.build();
        forms.add(formToSave);
        return formToSave;
    }
}
Also used : Form(org.odk.collect.forms.Form) File(java.io.File)

Example 47 with Form

use of org.odk.collect.forms.Form in project collect by opendatakit.

the class FormEntryActivity method loadFromIntent.

private void loadFromIntent(Intent intent) {
    Uri uri = intent.getData();
    String uriMimeType = null;
    if (uri != null) {
        uriMimeType = getContentResolver().getType(uri);
    }
    if (uriMimeType != null && uriMimeType.equals(InstancesContract.CONTENT_ITEM_TYPE)) {
        Instance instance = new InstancesRepositoryProvider(Collect.getInstance()).get().get(ContentUriHelper.getIdFromUri(uri));
        if (instance == null) {
            createErrorDialog(getString(R.string.bad_uri, uri), true);
            return;
        }
        instancePath = instance.getInstanceFilePath();
        if (!new File(instancePath).exists()) {
            analytics.logEvent(AnalyticsEvents.OPEN_DELETED_INSTANCE);
            new InstanceDeleter(new InstancesRepositoryProvider(Collect.getInstance()).get(), formsRepository).delete(instance.getDbId());
            createErrorDialog(getString(R.string.instance_deleted_message), true);
            return;
        }
        List<Form> candidateForms = formsRepository.getAllByFormIdAndVersion(instance.getFormId(), instance.getFormVersion());
        if (candidateForms.isEmpty()) {
            createErrorDialog(getString(R.string.parent_form_not_present, instance.getFormId()) + ((instance.getFormVersion() == null) ? "" : "\n" + getString(R.string.version) + " " + instance.getFormVersion()), true);
            return;
        } else if (candidateForms.stream().filter(f -> !f.isDeleted()).count() > 1) {
            createErrorDialog(getString(R.string.survey_multiple_forms_error), true);
            return;
        }
        formPath = candidateForms.get(0).getFormFilePath();
    } else if (uriMimeType != null && uriMimeType.equals(FormsContract.CONTENT_ITEM_TYPE)) {
        Form form = formsRepositoryProvider.get().get(ContentUriHelper.getIdFromUri(uri));
        if (form != null) {
            formPath = form.getFormFilePath();
        }
        if (formPath == null) {
            createErrorDialog(getString(R.string.bad_uri, uri), true);
            return;
        } else {
            /**
             * This is the fill-blank-form code path.See if there is a savepoint for this form
             * that has never been explicitly saved by the user. If there is, open this savepoint(resume this filled-in form).
             * Savepoints for forms that were explicitly saved will be recovered when that
             * explicitly saved instance is edited via edit-saved-form.
             */
            instancePath = loadSavePoint();
        }
    } else {
        Timber.i("Unrecognized URI: %s", uri);
        createErrorDialog(getString(R.string.unrecognized_uri, uri), true);
        return;
    }
    formLoaderTask = new FormLoaderTask(instancePath, null, null);
    showIfNotShowing(FormLoadingDialogFragment.class, getSupportFragmentManager());
    formLoaderTask.execute(formPath);
}
Also used : Analytics(org.odk.collect.analytics.Analytics) Bundle(android.os.Bundle) FormDef(org.javarosa.core.model.FormDef) FormEntryMenuDelegate(org.odk.collect.android.formentry.FormEntryMenuDelegate) NonNull(androidx.annotation.NonNull) Uri(android.net.Uri) FrameLayout(android.widget.FrameLayout) TreeElement(org.javarosa.core.model.instance.TreeElement) DeleteRepeatDialogFragment(org.odk.collect.android.formentry.repeats.DeleteRepeatDialogFragment) AuditUtils(org.odk.collect.android.formentry.audit.AuditUtils) SaveFormIndexTask(org.odk.collect.android.tasks.SaveFormIndexTask) ReadPhoneStatePermissionRxEvent(org.odk.collect.android.events.ReadPhoneStatePermissionRxEvent) EVENT_PROMPT_NEW_REPEAT(org.javarosa.form.api.FormEntryController.EVENT_PROMPT_NEW_REPEAT) SaveAnswerFileProgressDialogFragment(org.odk.collect.android.formentry.saving.SaveAnswerFileProgressDialogFragment) FORWARDS(org.odk.collect.android.formentry.FormIndexAnimationHandler.Direction.FORWARDS) DateTimeWidget(org.odk.collect.android.widgets.DateTimeWidget) AnalyticsUtils(org.odk.collect.android.analytics.AnalyticsUtils) RecordingWarningDialogFragment(org.odk.collect.android.formentry.RecordingWarningDialogFragment) MaterialProgressDialogFragment(org.odk.collect.material.MaterialProgressDialogFragment) Map(java.util.Map) AddRepeatDialog(org.odk.collect.android.formentry.repeats.AddRepeatDialog) ODKView(org.odk.collect.android.formentry.ODKView) QuitFormDialogFragment(org.odk.collect.android.formentry.QuitFormDialogFragment) RxEventBus(org.odk.collect.android.events.RxEventBus) StorageSubdirectory(org.odk.collect.android.storage.StorageSubdirectory) DialogFragmentUtils(org.odk.collect.androidshared.ui.DialogFragmentUtils) IntentFilter(android.content.IntentFilter) BackgroundAudioPermissionDialogFragment(org.odk.collect.android.formentry.BackgroundAudioPermissionDialogFragment) ExternalAppUtils(org.odk.collect.externalapp.ExternalAppUtils) AnalyticsEvents(org.odk.collect.android.analytics.AnalyticsEvents) FormLoaderTask(org.odk.collect.android.tasks.FormLoaderTask) PropertyManager(org.odk.collect.android.logic.PropertyManager) RankingWidgetDialog(org.odk.collect.android.fragments.dialogs.RankingWidgetDialog) Nullable(androidx.annotation.Nullable) FormInstanceFileCreator(org.odk.collect.android.formentry.loading.FormInstanceFileCreator) RangePickerDecimalWidget(org.odk.collect.android.widgets.RangePickerDecimalWidget) AdvanceToNextListener(org.odk.collect.android.listeners.AdvanceToNextListener) BackgroundLocationManager(org.odk.collect.android.formentry.backgroundlocation.BackgroundLocationManager) IntentLauncher(org.odk.collect.androidshared.system.IntentLauncher) AudioRecorder(org.odk.collect.audiorecorder.recording.AudioRecorder) StoragePathProvider(org.odk.collect.android.storage.StoragePathProvider) FormEndView(org.odk.collect.android.formentry.FormEndView) SaveAnswerFileErrorDialogFragment(org.odk.collect.android.formentry.saving.SaveAnswerFileErrorDialogFragment) ContextMenuInfo(android.view.ContextMenu.ContextMenuInfo) InstanceSubmitScheduler(org.odk.collect.android.backgroundwork.InstanceSubmitScheduler) ExternalAppRecordingRequester(org.odk.collect.android.widgets.utilities.ExternalAppRecordingRequester) FormIndex(org.javarosa.core.model.FormIndex) FormsRepository(org.odk.collect.forms.FormsRepository) SAVE_INCOMPLETE(org.odk.collect.android.analytics.AnalyticsEvents.SAVE_INCOMPLETE) ArrayList(java.util.ArrayList) BACKWARDS(org.odk.collect.android.formentry.FormIndexAnimationHandler.Direction.BACKWARDS) RepeatsInFieldListException(org.odk.collect.android.javarosawrapper.RepeatsInFieldListException) WaitingForDataRegistry(org.odk.collect.android.widgets.utilities.WaitingForDataRegistry) Toast(android.widget.Toast) CustomTimePickerDialog(org.odk.collect.android.fragments.dialogs.CustomTimePickerDialog) InternalRecordingRequester(org.odk.collect.android.widgets.utilities.InternalRecordingRequester) Menu(android.view.Menu) IdentityPromptViewModel(org.odk.collect.android.formentry.audit.IdentityPromptViewModel) AudioClipViewModel(org.odk.collect.audioclips.AudioClipViewModel) InstancesContract(org.odk.collect.android.external.InstancesContract) BUTTON_POSITIVE(android.content.DialogInterface.BUTTON_POSITIVE) Instance(org.odk.collect.forms.instances.Instance) ViewModelProvider(androidx.lifecycle.ViewModelProvider) PermissionsChecker(org.odk.collect.permissions.PermissionsChecker) DestroyableLifecyleOwner(org.odk.collect.android.utilities.DestroyableLifecyleOwner) FormLoaderListener(org.odk.collect.android.listeners.FormLoaderListener) LocalDateTime(org.joda.time.LocalDateTime) FormsContract(org.odk.collect.android.external.FormsContract) FormController(org.odk.collect.android.javarosawrapper.FormController) FormEntryCaption(org.javarosa.form.api.FormEntryCaption) File(java.io.File) ToastUtils.showLongToast(org.odk.collect.androidshared.ui.ToastUtils.showLongToast) JavaRosaException(org.odk.collect.android.exception.JavaRosaException) SnackbarUtils(org.odk.collect.android.utilities.SnackbarUtils) KEY_MOVING_BACKWARDS(org.odk.collect.settings.keys.ProtectedProjectKeys.KEY_MOVING_BACKWARDS) FormSaveViewModel(org.odk.collect.android.formentry.saving.FormSaveViewModel) MediaLoadingFragment(org.odk.collect.android.fragments.MediaLoadingFragment) Scheduler(org.odk.collect.async.Scheduler) SavePointTask(org.odk.collect.android.tasks.SavePointTask) InstancesDaoHelper(org.odk.collect.android.dao.helpers.InstancesDaoHelper) MaterialAlertDialogBuilder(com.google.android.material.dialog.MaterialAlertDialogBuilder) ChangesReasonPromptDialogFragment(org.odk.collect.android.formentry.audit.ChangesReasonPromptDialogFragment) SoftKeyboardController(org.odk.collect.android.utilities.SoftKeyboardController) ApplicationConstants(org.odk.collect.android.utilities.ApplicationConstants) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) PermissionListener(org.odk.collect.permissions.PermissionListener) CustomDatePickerDialog(org.odk.collect.android.fragments.dialogs.CustomDatePickerDialog) FormControllerWaitingForDataRegistry(org.odk.collect.android.widgets.utilities.FormControllerWaitingForDataRegistry) BackgroundAudioViewModel(org.odk.collect.android.formentry.BackgroundAudioViewModel) IdentifyUserPromptDialogFragment(org.odk.collect.android.formentry.audit.IdentifyUserPromptDialogFragment) ToastUtils(org.odk.collect.androidshared.ui.ToastUtils) IAnswerData(org.javarosa.core.model.data.IAnswerData) FormIndexAnimationHandler(org.odk.collect.android.formentry.FormIndexAnimationHandler) View(android.view.View) ViewModelProviders(androidx.lifecycle.ViewModelProviders) Schedulers(io.reactivex.schedulers.Schedulers) Animation(android.view.animation.Animation) WebView(android.webkit.WebView) SwipeHandler(org.odk.collect.android.listeners.SwipeHandler) DialogFragmentUtils.showIfNotShowing(org.odk.collect.androidshared.ui.DialogFragmentUtils.showIfNotShowing) AudioControllerView(org.odk.collect.android.audio.AudioControllerView) FormEntryPrompt(org.javarosa.form.api.FormEntryPrompt) AsyncTask(android.os.AsyncTask) Direction(org.odk.collect.android.formentry.FormIndexAnimationHandler.Direction) AnimationUtils.loadAnimation(android.view.animation.AnimationUtils.loadAnimation) ScreenContext(org.odk.collect.android.utilities.ScreenContext) BroadcastReceiver(android.content.BroadcastReceiver) PlayServicesChecker(org.odk.collect.android.utilities.PlayServicesChecker) Timber(timber.log.Timber) BackgroundLocationViewModel(org.odk.collect.android.formentry.backgroundlocation.BackgroundLocationViewModel) Objects(java.util.Objects) LayoutParams(android.view.ViewGroup.LayoutParams) NumberPickerDialog(org.odk.collect.android.fragments.dialogs.NumberPickerDialog) CurrentProjectProvider(org.odk.collect.android.projects.CurrentProjectProvider) FormsRepositoryProvider(org.odk.collect.android.utilities.FormsRepositoryProvider) List(java.util.List) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) OPEN_MAP_KIT_RESPONSE(org.odk.collect.android.analytics.AnalyticsEvents.OPEN_MAP_KIT_RESPONSE) KEY_COMPLETED_DEFAULT(org.odk.collect.settings.keys.ProjectKeys.KEY_COMPLETED_DEFAULT) TextView(android.widget.TextView) SaveFormProgressDialogFragment(org.odk.collect.android.formentry.saving.SaveFormProgressDialogFragment) ProtectedProjectKeys(org.odk.collect.settings.keys.ProtectedProjectKeys) RelativeLayout(android.widget.RelativeLayout) Toolbar(androidx.appcompat.widget.Toolbar) FormLoadingDialogFragment(org.odk.collect.android.formentry.FormLoadingDialogFragment) NotNull(org.jetbrains.annotations.NotNull) LocationManager(android.location.LocationManager) Context(android.content.Context) ContextMenu(android.view.ContextMenu) SelectMinimalDialog(org.odk.collect.android.fragments.dialogs.SelectMinimalDialog) KeyEvent(android.view.KeyEvent) AlertDialog(androidx.appcompat.app.AlertDialog) DialogUtils.getDialog(org.odk.collect.android.utilities.DialogUtils.getDialog) WidgetValueChangedListener(org.odk.collect.android.listeners.WidgetValueChangedListener) Intent(android.content.Intent) MediaPlayer(android.media.MediaPlayer) HashMap(java.util.HashMap) AMRAppender(org.odk.collect.android.audio.AMRAppender) InstancesRepositoryProvider(org.odk.collect.android.utilities.InstancesRepositoryProvider) MenuItem(android.view.MenuItem) FragmentActivity(androidx.fragment.app.FragmentActivity) Inject(javax.inject.Inject) SavePointListener(org.odk.collect.android.listeners.SavePointListener) Form(org.odk.collect.forms.Form) LifecycleOwner(androidx.lifecycle.LifecycleOwner) FormEntryController(org.javarosa.form.api.FormEntryController) RecordingHandler(org.odk.collect.android.formentry.RecordingHandler) MotionEvent(android.view.MotionEvent) AuditEvent(org.odk.collect.android.formentry.audit.AuditEvent) BUTTON_NEGATIVE(android.content.DialogInterface.BUTTON_NEGATIVE) R(org.odk.collect.android.R) M4AAppender(org.odk.collect.android.audio.M4AAppender) ExternalAppIntentProvider(org.odk.collect.android.utilities.ExternalAppIntentProvider) Build(android.os.Build) RequestCodes(org.odk.collect.android.utilities.ApplicationConstants.RequestCodes) DialogInterface(android.content.DialogInterface) ToastUtils.showShortToast(org.odk.collect.androidshared.ui.ToastUtils.showShortToast) ProjectKeys(org.odk.collect.settings.keys.ProjectKeys) SelectChoice(org.javarosa.core.model.SelectChoice) RangePickerIntegerWidget(org.odk.collect.android.widgets.RangePickerIntegerWidget) AnimationListener(android.view.animation.Animation.AnimationListener) AnimationUtils.areAnimationsEnabled(org.odk.collect.android.utilities.AnimationUtils.areAnimationsEnabled) DateTime(org.joda.time.DateTime) FailedConstraint(org.odk.collect.android.javarosawrapper.FormController.FailedConstraint) WidgetDataReceiver(org.odk.collect.android.widgets.interfaces.WidgetDataReceiver) KEY_NAVIGATION(org.odk.collect.settings.keys.ProjectKeys.KEY_NAVIGATION) LocationProvidersDisabledDialog(org.odk.collect.android.fragments.dialogs.LocationProvidersDisabledDialog) QuestionWidget(org.odk.collect.android.widgets.QuestionWidget) MultiClickGuard(org.odk.collect.androidshared.ui.multiclicksafe.MultiClickGuard) ImmutableDisplayableQuestion(org.odk.collect.android.logic.ImmutableDisplayableQuestion) ViewModelAudioPlayer(org.odk.collect.android.widgets.utilities.ViewModelAudioPlayer) InstanceDeleter(org.odk.collect.android.instancemanagement.InstanceDeleter) Collect(org.odk.collect.android.application.Collect) FormEntryViewModel(org.odk.collect.android.formentry.FormEntryViewModel) ContentUriHelper(org.odk.collect.android.utilities.ContentUriHelper) Selection(org.javarosa.core.model.data.helper.Selection) InstancesRepositoryProvider(org.odk.collect.android.utilities.InstancesRepositoryProvider) Instance(org.odk.collect.forms.instances.Instance) Form(org.odk.collect.forms.Form) Uri(android.net.Uri) File(java.io.File) InstanceDeleter(org.odk.collect.android.instancemanagement.InstanceDeleter) FormLoaderTask(org.odk.collect.android.tasks.FormLoaderTask)

Example 48 with Form

use of org.odk.collect.forms.Form in project collect by opendatakit.

the class FormEntryActivity method loadingComplete.

/**
 * Given a {@link FormLoaderTask} which has created a {@link FormController} for either a new or
 * existing instance, shows that instance to the user. Either launches {@link FormHierarchyActivity}
 * if an existing instance is being edited or builds the view for the current question(s) if a
 * new instance is being created.
 * <p>
 * May do some or all of these depending on current state:
 * - Ensures phone state permissions are given if this form needs them
 * - Cleans up {@link #formLoaderTask}
 * - Sets the global form controller and database manager for search()/pulldata()
 * - Restores the last-used language
 * - Handles activity results that may have come in while the form was loading
 * - Alerts the user of a recovery from savepoint
 * - Verifies whether an instance folder exists and creates one if not
 * - Initializes background location capture (only if the instance being loaded is a new one)
 */
@Override
public void loadingComplete(FormLoaderTask task, FormDef formDef, String warningMsg) {
    DialogFragmentUtils.dismissDialog(FormLoadingDialogFragment.class, getSupportFragmentManager());
    final FormController formController = task.getFormController();
    if (formController != null) {
        if (readPhoneStatePermissionRequestNeeded) {
            permissionsProvider.requestReadPhoneStatePermission(this, true, new PermissionListener() {

                @Override
                public void granted() {
                    readPhoneStatePermissionRequestNeeded = false;
                    loadForm();
                }

                @Override
                public void denied() {
                    finish();
                }
            });
        } else {
            formLoaderTask.setFormLoaderListener(null);
            FormLoaderTask t = formLoaderTask;
            formLoaderTask = null;
            t.cancel(true);
            t.destroy();
            Collect.getInstance().setFormController(formController);
            backgroundLocationViewModel.formFinishedLoading();
            Collect.getInstance().setExternalDataManager(task.getExternalDataManager());
            // Set the language if one has already been set in the past
            String[] languageTest = formController.getLanguages();
            if (languageTest != null) {
                String defaultLanguage = formController.getLanguage();
                Form form = formsRepository.getOneByPath(formPath);
                if (form != null) {
                    String newLanguage = form.getLanguage();
                    try {
                        formController.setLanguage(newLanguage);
                    } catch (Exception e) {
                        // if somehow we end up with a bad language, set it to the default
                        Timber.i("Ended up with a bad language. %s", newLanguage);
                        formController.setLanguage(defaultLanguage);
                    }
                }
            }
            boolean pendingActivityResult = task.hasPendingActivityResult();
            if (pendingActivityResult) {
                Timber.w("Calling onActivityResult from loadingComplete");
                formControllerAvailable(formController);
                onScreenRefresh();
                onActivityResult(task.getRequestCode(), task.getResultCode(), task.getIntent());
                return;
            }
            // it can be a normal flow for a pending activity result to restore from a savepoint
            // (the call flow handled by the above if statement). For all other use cases, the
            // user should be notified, as it means they wandered off doing other things then
            // returned to ODK Collect and chose Edit Saved Form, but that the savepoint for
            // that form is newer than the last saved version of their form data.
            boolean hasUsedSavepoint = task.hasUsedSavepoint();
            if (hasUsedSavepoint) {
                runOnUiThread(() -> showLongToast(this, R.string.savepoint_used));
            }
            if (formController.getInstanceFile() == null) {
                FormInstanceFileCreator formInstanceFileCreator = new FormInstanceFileCreator(storagePathProvider, System::currentTimeMillis);
                File instanceFile = formInstanceFileCreator.createInstanceFile(formPath);
                if (instanceFile != null) {
                    formController.setInstanceFile(instanceFile);
                } else {
                    showFormLoadErrorAndExit(getString(R.string.loading_form_failed));
                }
                formControllerAvailable(formController);
                identityPromptViewModel.requiresIdentityToContinue().observe(this, requiresIdentity -> {
                    if (!requiresIdentity) {
                        formController.getAuditEventLogger().logEvent(AuditEvent.AuditEventType.FORM_START, true, System.currentTimeMillis());
                        startFormEntry(formController, warningMsg);
                    }
                });
            } else {
                Intent reqIntent = getIntent();
                boolean showFirst = reqIntent.getBooleanExtra("start", false);
                if (!showFirst) {
                    // we've just loaded a saved form, so start in the hierarchy view
                    String formMode = reqIntent.getStringExtra(ApplicationConstants.BundleKeys.FORM_MODE);
                    if (formMode == null || ApplicationConstants.FormModes.EDIT_SAVED.equalsIgnoreCase(formMode)) {
                        formControllerAvailable(formController);
                        identityPromptViewModel.requiresIdentityToContinue().observe(this, requiresIdentity -> {
                            if (!requiresIdentity) {
                                if (!allowMovingBackwards) {
                                    // we aren't allowed to jump around the form so attempt to
                                    // go directly to the question we were on last time the
                                    // form was saved.
                                    // TODO: revisit the fallback. If for some reason the index
                                    // wasn't saved, we can now jump around which doesn't seem right.
                                    FormIndex formIndex = SaveFormIndexTask.loadFormIndexFromFile();
                                    if (formIndex != null) {
                                        formController.jumpToIndex(formIndex);
                                        onScreenRefresh();
                                        return;
                                    }
                                }
                                formController.getAuditEventLogger().logEvent(AuditEvent.AuditEventType.FORM_RESUME, true, System.currentTimeMillis());
                                formController.getAuditEventLogger().logEvent(AuditEvent.AuditEventType.HIERARCHY, true, System.currentTimeMillis());
                                startActivityForResult(new Intent(this, FormHierarchyActivity.class), RequestCodes.HIERARCHY_ACTIVITY);
                            }
                        });
                        formSaveViewModel.editingForm();
                    } else {
                        if (ApplicationConstants.FormModes.VIEW_SENT.equalsIgnoreCase(formMode)) {
                            startActivity(new Intent(this, ViewOnlyFormHierarchyActivity.class));
                        }
                        finish();
                    }
                } else {
                    formControllerAvailable(formController);
                    identityPromptViewModel.requiresIdentityToContinue().observe(this, requiresIdentity -> {
                        if (!requiresIdentity) {
                            formController.getAuditEventLogger().logEvent(AuditEvent.AuditEventType.FORM_RESUME, true, System.currentTimeMillis());
                            startFormEntry(formController, warningMsg);
                        }
                    });
                }
            }
        }
    } else {
        Timber.e("FormController is null");
        showLongToast(this, R.string.loading_form_failed);
        finish();
    }
}
Also used : FormController(org.odk.collect.android.javarosawrapper.FormController) PermissionListener(org.odk.collect.permissions.PermissionListener) FormInstanceFileCreator(org.odk.collect.android.formentry.loading.FormInstanceFileCreator) Form(org.odk.collect.forms.Form) Intent(android.content.Intent) RepeatsInFieldListException(org.odk.collect.android.javarosawrapper.RepeatsInFieldListException) JavaRosaException(org.odk.collect.android.exception.JavaRosaException) FormLoaderTask(org.odk.collect.android.tasks.FormLoaderTask) FormIndex(org.javarosa.core.model.FormIndex) File(java.io.File)

Example 49 with Form

use of org.odk.collect.forms.Form in project collect by opendatakit.

the class FormMapActivity method onCreate.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    DaggerUtils.getComponent(this).inject(this);
    setContentView(R.layout.form_map_activity);
    Form form = loadForm();
    selectionMapViewModel = new ViewModelProvider(this).get(SelectionMapViewModel.class);
    selectionMapViewModel.setMapTitle(form.getDisplayName());
    FormNavigator formNavigator = new FormNavigator(currentProjectProvider, settingsProvider, instancesRepositoryProvider::get);
    getSupportFragmentManager().setFragmentResultListener(SelectionMapFragment.REQUEST_SELECT_ITEM, this, (requestKey, result) -> {
        if (result.containsKey(SelectionMapFragment.RESULT_SELECTED_ITEM)) {
            long instanceId = result.getLong(SelectionMapFragment.RESULT_SELECTED_ITEM);
            formNavigator.editInstance(this, instanceId);
        } else if (result.containsKey(SelectionMapFragment.RESULT_CREATE_NEW_ITEM)) {
            formNavigator.newInstance(this, form.getDbId());
        }
    });
}
Also used : SelectionMapViewModel(org.odk.collect.geo.SelectionMapViewModel) Form(org.odk.collect.forms.Form) FormNavigator(org.odk.collect.android.formmanagement.FormNavigator) ViewModelProvider(androidx.lifecycle.ViewModelProvider)

Example 50 with Form

use of org.odk.collect.forms.Form in project collect by opendatakit.

the class FormMapActivity method loadForm.

@Nullable
private Form loadForm() {
    Form form = formsRepositoryProvider.get().get(getIntent().getLongExtra(EXTRA_FORM_ID, -1));
    FormMapViewModelFactory viewModelFactory = new FormMapViewModelFactory(form, instancesRepositoryProvider.get());
    formMapViewModel = new ViewModelProvider(this, viewModelFactory).get(FormMapViewModel.class);
    return form;
}
Also used : Form(org.odk.collect.forms.Form) FormMapViewModel(org.odk.collect.android.activities.viewmodels.FormMapViewModel) ViewModelProvider(androidx.lifecycle.ViewModelProvider) Nullable(androidx.annotation.Nullable)

Aggregations

Form (org.odk.collect.forms.Form)62 Test (org.junit.Test)35 File (java.io.File)22 FormsRepository (org.odk.collect.forms.FormsRepository)21 ByteArrayInputStream (java.io.ByteArrayInputStream)13 Analytics (org.odk.collect.analytics.Analytics)13 FormSource (org.odk.collect.forms.FormSource)12 FormUtils.buildForm (org.odk.collect.formstest.FormUtils.buildForm)12 MediaFile (org.odk.collect.forms.MediaFile)9 FormsRepositoryProvider (org.odk.collect.android.utilities.FormsRepositoryProvider)7 ManifestFile (org.odk.collect.forms.ManifestFile)7 Instance (org.odk.collect.forms.instances.Instance)7 LocalizedApplicationKt.getLocalizedString (org.odk.collect.strings.localization.LocalizedApplicationKt.getLocalizedString)7 ArrayList (java.util.ArrayList)5 FormController (org.odk.collect.android.javarosawrapper.FormController)4 ViewModelProvider (androidx.lifecycle.ViewModelProvider)3 DatabaseObjectMapper.getValuesFromForm (org.odk.collect.android.database.DatabaseObjectMapper.getValuesFromForm)3 Intent (android.content.Intent)2 View (android.view.View)2 TextView (android.widget.TextView)2