Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Isolate authentication overriding to where its used
  • Loading branch information
seadowg committed Nov 26, 2025
commit 36560a9143c5f61a23530c6bcc39faa8e0c9c351
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
import org.odk.collect.android.formmanagement.FormSourceExceptionMapper;
import org.odk.collect.android.formmanagement.FormsDataService;
import org.odk.collect.android.formmanagement.ServerFormDetails;
import org.odk.collect.android.formmanagement.ServerFormsDetailsFetcher;
import org.odk.collect.android.formmanagement.download.FormDownloadException;
import org.odk.collect.android.fragments.dialogs.FormsDownloadResultDialog;
import org.odk.collect.android.injection.DaggerUtils;
Expand Down Expand Up @@ -121,9 +120,6 @@ public class FormDownloadListActivity extends FormListActivity implements FormLi
@Inject
WebCredentialsUtils webCredentialsUtils;

@Inject
ServerFormsDetailsFetcher serverFormsDetailsFetcher;

@Inject
NetworkStateProvider connectivityProvider;

Expand Down Expand Up @@ -294,12 +290,12 @@ private void downloadFormList() {

if (viewModel.isDownloadOnlyMode()) {
// Handle external app download case with different server
downloadFormListTask = new DownloadFormListTask(serverFormsDetailsFetcher);
downloadFormListTask = new DownloadFormListTask();
downloadFormListTask.setAlternateCredentials(webCredentialsUtils, viewModel.getUrl(), viewModel.getUsername(), viewModel.getPassword());
downloadFormListTask.setDownloaderListener(this);
downloadFormListTask.execute();
} else {
downloadFormListTask = new DownloadFormListTask(serverFormsDetailsFetcher);
downloadFormListTask = new DownloadFormListTask();
downloadFormListTask.setDownloaderListener(this);
downloadFormListTask.execute();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import java.io.IOException

object ServerFormUseCases {

@JvmStatic
@Throws(FormSourceException::class)
fun fetchFormList(
formsRepository: FormsRepository,
formSource: FormSource
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,14 @@
*/
package org.odk.collect.android.formmanagement

import org.odk.collect.android.utilities.WebCredentialsUtils
import org.odk.collect.forms.FormSource
import org.odk.collect.forms.FormSourceException
import org.odk.collect.forms.FormsRepository
import org.odk.collect.openrosa.forms.OpenRosaClient

class ServerFormsDetailsFetcher(
private val formsRepository: FormsRepository,
private val formSource: FormSource
) {
fun updateUrl(url: String) {
(formSource as OpenRosaClient).updateUrl(url)
}

fun updateCredentials(webCredentialsUtils: WebCredentialsUtils) {
(formSource as OpenRosaClient).updateWebCredentialsUtils(webCredentialsUtils)
}

@Throws(FormSourceException::class)
fun fetchFormDetails(): List<ServerFormDetails> {
return ServerFormUseCases.fetchFormList(formsRepository, formSource)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
import org.odk.collect.android.formmanagement.CollectFormEntryControllerFactory;
import org.odk.collect.android.formmanagement.FormsDataService;
import org.odk.collect.android.formmanagement.OpenRosaClientProvider;
import org.odk.collect.android.formmanagement.ServerFormsDetailsFetcher;
import org.odk.collect.android.geo.MapConfiguratorProvider;
import org.odk.collect.android.geo.MapFragmentFactoryImpl;
import org.odk.collect.android.instancemanagement.InstancesDataService;
Expand Down Expand Up @@ -104,7 +103,6 @@
import org.odk.collect.audiorecorder.recording.AudioRecorder;
import org.odk.collect.audiorecorder.recording.AudioRecorderFactory;
import org.odk.collect.entities.storage.EntitiesRepository;
import org.odk.collect.forms.FormsRepository;
import org.odk.collect.imageloader.GlideImageLoader;
import org.odk.collect.imageloader.ImageLoader;
import org.odk.collect.location.GoogleFusedLocationClient;
Expand All @@ -125,7 +123,6 @@
import org.odk.collect.permissions.ContextCompatPermissionChecker;
import org.odk.collect.permissions.PermissionsChecker;
import org.odk.collect.permissions.PermissionsProvider;
import org.odk.collect.projects.Project;
import org.odk.collect.projects.ProjectCreator;
import org.odk.collect.projects.ProjectsRepository;
import org.odk.collect.projects.SettingsConnectionMatcher;
Expand Down Expand Up @@ -331,13 +328,6 @@ public QRCodeDecoder providesQRCodeDecoder() {
return new QRCodeDecoderImpl();
}

@Provides
public ServerFormsDetailsFetcher providesServerFormDetailsFetcher(FormsRepositoryProvider formsRepositoryProvider, OpenRosaClientProvider formSourceProvider, ProjectsDataService projectsDataService) {
Project.Saved currentProject = projectsDataService.requireCurrentProject();
FormsRepository formsRepository = formsRepositoryProvider.create(currentProject.getUuid());
return new ServerFormsDetailsFetcher(formsRepository, formSourceProvider.create(currentProject.getUuid()));
}

@Provides
public Notifier providesNotifier(Application application, SettingsProvider settingsProvider, ProjectsRepository projectsRepository, UniqueIdGenerator uniqueIdGenerator) {
return new NotificationManagerNotifier(application, settingsProvider, projectsRepository, uniqueIdGenerator);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,17 @@
import org.odk.collect.android.application.Collect;
import org.odk.collect.android.formmanagement.FormsDataService;
import org.odk.collect.android.formmanagement.ServerFormDetails;
import org.odk.collect.android.formmanagement.ServerFormsDetailsFetcher;
import org.odk.collect.android.formmanagement.ServerFormUseCases;
import org.odk.collect.android.injection.DaggerUtils;
import org.odk.collect.android.injection.config.ProjectDependencyModuleFactory;
import org.odk.collect.android.listeners.FormListDownloaderListener;
import org.odk.collect.android.projects.ProjectDependencyModule;
import org.odk.collect.android.projects.ProjectsDataService;
import org.odk.collect.android.utilities.WebCredentialsUtils;
import org.odk.collect.forms.FormSource;
import org.odk.collect.forms.FormSourceException;
import org.odk.collect.forms.FormsRepository;
import org.odk.collect.openrosa.forms.OpenRosaClient;

import java.util.HashMap;
import java.util.List;
Expand All @@ -47,7 +52,9 @@
@Deprecated
public class DownloadFormListTask extends AsyncTask<Void, String, Pair<List<ServerFormDetails>, FormSourceException>> {

private final ServerFormsDetailsFetcher serverFormsDetailsFetcher;
private final FormsRepository formsRepository;
private final FormSource formSource;
private final String projectId;

private FormListDownloaderListener stateListener;
private WebCredentialsUtils webCredentialsUtils;
Expand All @@ -61,14 +68,21 @@ public class DownloadFormListTask extends AsyncTask<Void, String, Pair<List<Serv
@Inject
ProjectsDataService projectsDataService;

public DownloadFormListTask(ServerFormsDetailsFetcher serverFormsDetailsFetcher) {
this.serverFormsDetailsFetcher = serverFormsDetailsFetcher;
@Inject
ProjectDependencyModuleFactory projectDependencyModuleFactory;

public DownloadFormListTask() {
DaggerUtils.getComponent(Collect.getInstance()).inject(this);

projectId = projectsDataService.requireCurrentProject().getUuid();
ProjectDependencyModule projectDependencyModule = projectDependencyModuleFactory.create(projectId);
formsRepository = projectDependencyModule.getFormsRepository();
formSource = projectDependencyModule.getFormSource();
}

@Override
protected Pair<List<ServerFormDetails>, FormSourceException> doInBackground(Void... values) {
formsDataService.refresh(projectsDataService.requireCurrentProject().getUuid());
formsDataService.refresh(projectId);

if (webCredentialsUtils != null) {
setTemporaryCredentials();
Expand All @@ -78,7 +92,7 @@ protected Pair<List<ServerFormDetails>, FormSourceException> doInBackground(Void
FormSourceException exception = null;

try {
formList = serverFormsDetailsFetcher.fetchFormDetails();
formList = ServerFormUseCases.fetchFormList(formsRepository, formSource);
} catch (FormSourceException e) {
exception = e;
} finally {
Expand Down Expand Up @@ -116,11 +130,12 @@ public void setDownloaderListener(FormListDownloaderListener sl) {

public void setAlternateCredentials(WebCredentialsUtils webCredentialsUtils, String url, String username, String password) {
this.webCredentialsUtils = webCredentialsUtils;
serverFormsDetailsFetcher.updateCredentials(webCredentialsUtils);
OpenRosaClient openRosaClient = (OpenRosaClient) formSource;
openRosaClient.updateWebCredentialsUtils(webCredentialsUtils);

this.url = url;
if (url != null && !url.isEmpty()) {
serverFormsDetailsFetcher.updateUrl(url);
openRosaClient.updateUrl(url);
}

this.username = username;
Expand Down