Search in sources :

Example 1 with InstanceDeleter

use of org.odk.collect.android.instancemanagement.InstanceDeleter in project collect by opendatakit.

the class DeleteInstancesTask method doInBackground.

@Override
protected Integer doInBackground(Long... params) {
    int deleted = 0;
    if (params == null) {
        return deleted;
    }
    toDeleteCount = params.length;
    InstanceDeleter instanceDeleter = new InstanceDeleter(instancesRepository, formsRepository);
    // delete files from database and then from file system
    for (Long param : params) {
        if (isCancelled()) {
            break;
        }
        try {
            instanceDeleter.delete(param);
            deleted++;
            successCount++;
            publishProgress(successCount, toDeleteCount);
        } catch (Exception ex) {
            Timber.e("Exception during delete of: %s exception: %s", param.toString(), ex.toString());
        }
    }
    successCount = deleted;
    return deleted;
}
Also used : InstanceDeleter(org.odk.collect.android.instancemanagement.InstanceDeleter)

Example 2 with InstanceDeleter

use of org.odk.collect.android.instancemanagement.InstanceDeleter 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 3 with InstanceDeleter

use of org.odk.collect.android.instancemanagement.InstanceDeleter in project collect by opendatakit.

the class InstanceProvider method delete.

/**
 * This method removes the entry from the content provider, and also removes any associated
 * files.
 * files:  form.xml, [formmd5].formdef, formname-media {directory}
 */
@Override
public int delete(@NonNull Uri uri, String where, String[] whereArgs) {
    DaggerUtils.getComponent(getContext()).inject(this);
    String projectId = getProjectId(uri);
    logServerEvent(projectId, AnalyticsEvents.INSTANCE_PROVIDER_DELETE);
    int count;
    switch(URI_MATCHER.match(uri)) {
        case INSTANCES:
            try (Cursor cursor = dbQuery(projectId, new String[] { _ID }, where, whereArgs, null)) {
                while (cursor.moveToNext()) {
                    long id = cursor.getLong(cursor.getColumnIndex(_ID));
                    new InstanceDeleter(instancesRepositoryProvider.get(projectId), formsRepositoryProvider.get(projectId)).delete(id);
                }
                count = cursor.getCount();
            }
            break;
        case INSTANCE_ID:
            long id = ContentUriHelper.getIdFromUri(uri);
            if (where == null) {
                new InstanceDeleter(instancesRepositoryProvider.get(projectId), formsRepositoryProvider.get(projectId)).delete(id);
            } else {
                try (Cursor cursor = dbQuery(projectId, new String[] { _ID }, where, whereArgs, null)) {
                    while (cursor.moveToNext()) {
                        if (cursor.getLong(cursor.getColumnIndex(_ID)) == id) {
                            new InstanceDeleter(instancesRepositoryProvider.get(), formsRepositoryProvider.get()).delete(id);
                            break;
                        }
                    }
                }
            }
            count = 1;
            break;
        default:
            throw new IllegalArgumentException("Unknown URI " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return count;
}
Also used : Cursor(android.database.Cursor) InstanceDeleter(org.odk.collect.android.instancemanagement.InstanceDeleter)

Aggregations

InstanceDeleter (org.odk.collect.android.instancemanagement.InstanceDeleter)3 BroadcastReceiver (android.content.BroadcastReceiver)1 Context (android.content.Context)1 DialogInterface (android.content.DialogInterface)1 BUTTON_NEGATIVE (android.content.DialogInterface.BUTTON_NEGATIVE)1 BUTTON_POSITIVE (android.content.DialogInterface.BUTTON_POSITIVE)1 Intent (android.content.Intent)1 IntentFilter (android.content.IntentFilter)1 Cursor (android.database.Cursor)1 LocationManager (android.location.LocationManager)1 MediaPlayer (android.media.MediaPlayer)1 Uri (android.net.Uri)1 AsyncTask (android.os.AsyncTask)1 Build (android.os.Build)1 Bundle (android.os.Bundle)1 ContextMenu (android.view.ContextMenu)1 ContextMenuInfo (android.view.ContextMenu.ContextMenuInfo)1 KeyEvent (android.view.KeyEvent)1 Menu (android.view.Menu)1 MenuItem (android.view.MenuItem)1