DHIS2 data and tracker capture app for Android to support integration with SimprintsID.
Summary of changes comparing to upstream dhis2/dhis2-android-capture-app:
| Feature | File / line of code | Type of change | Description |
|---|---|---|---|
| Infra: fork sync from upstream | simcapture-sync-fork-upstream-main.yml | New file | GitHub Action to sync upstream's main to this repo's upstream-main nightly on Mon-Fri |
| Infra: automatic PR on upstream release | simcapture-upstream-release-pr.yml | New file | GitHub Action to open a PR when upstream-main has an upstream release newly merged into it |
| Infra: signed APK releases | simcapture-github-release-signed-apk.yml | New file | GitHub Action to create a GitHub Release on a merge to main |
| Infra: signed APK releases | app/build.gradle.kts#L85 | Code change | App's Package ID set to com.simprints.simcapture |
| Infra: GitHub Actions filtering | simcapture-disable-upstream-workflows.yml | New file | GitHub Action to limit allowed Actions to the ones starting with simcapture- or copilot- |
| Docs: fork-specific README | README.md#L1-L70 | Code change | This section in README |
| Enrolment+ Possible Duplicates | CustomIntentActivityResultContract.kt#L68 | Code addition | Treats non-identify Simprints callouts that return identification matches as PossibleDuplicates results |
| Enrolment+ Possible Duplicates | FormView.kt#L654 | Code addition | Stores the returned SID session and hands the enrolment form off to the possible duplicates search flow |
| Enrolment+ Possible Duplicates | EnrollmentActivity.kt#L281 | Code addition | Launches possible duplicates search from the enrolment form, carrying the biometric field and returned GUID matches |
| Enrolment+ Possible Duplicates | SimprintsLoadPossibleDuplicatesSearchResultsUseCase.kt | New file | Resolves returned GUIDs one by one into TEI search results for the possible duplicates review list |
| Enrolment+ Possible Duplicates | SearchTEIViewModel.kt#L554 | Code addition | Switches search loading into possible-duplicates mode and auto-falls back to Enrol Last when no matching TEIs exist in DHIS2 |
| Enrolment+ Possible Duplicates | SearchTEList.kt#L307 | Code addition | Replaces the default "+ New" action button with None of the above while reviewing possible duplicates |
| Enrolment+ Enrol Last | SearchTEIViewModel.kt#L502 | Code addition | Marks None of the above as a pending enrolment action and closes the possible duplicates search |
| Enrolment+ Enrol Last | SearchTEActivity.kt#L655 | Code addition | Returns possible duplicates search with an auto-enrol-last signal when the flow should continue to REGISTER_LAST_BIOMETRICS |
| Enrolment+ Enrol Last | EnrollmentActivity.kt#L145 | Code addition | Receives the possible duplicates return flow and launches save-time Enrol Last before enrolment finishes |
| Enrolment+ Enrol Last | SimprintsEnrollmentViewModel.kt#L41 | Code addition | Builds the auto-enrol-last intent from the stored session and restores pending actions across lifecycle interruptions |
| Enrolment+ Enrol Last | SimprintsSessionRepository.kt#L29 | Code addition | Keeps separate pending Enrol Last source state for possible-duplicates returns |
| Enrolment+ Enrol Last | SimprintsRememberCustomIntentFormPresenter.kt#L32 | Code change | Shows (Using last biometrics) when Enrol Last is resumed after returning from possible duplicates |
| Identification+ Enrol Last | EnrollmentActivity.kt#L83 | Code addition | Launches Enrol Last before completing a valid enrollment save and resumes finish after SID returns |
| Identification+ Enrol Last | EnrollmentPresenterImpl.kt#L163 | Code addition | Delegates save-time Enrol Last resolution and result handling |
| Identification+ Enrol Last | EnrollmentModule.kt#L182 | Code addition | DI for separate Simprints-specific components for Identification+ Enrol Last |
| Identification+ Enrol Last | SimprintsEnrollmentViewModelFactory.kt | New file | Creates activity-scoped Simprints Enrol Last ViewModel so pending save-time state survives configuration changes |
| Identification+ Enrol Last | SearchTEActivity.kt#L571 | Code change | Carries biometric search context into create/enroll actions via prepared enrollment query data |
| Identification+ Enrol Last | SimprintsSearchViewModel.kt#L96 | Code addition | Prepares Simprints enrollment query data and tracks whether the create action should use last biometrics |
| Identification+ Enrol Last | SearchTEIViewModel.kt#L1266 | Code change | Preserves existing search parameter values when fields reload so pending Enrol Last state survives configuration changes |
| Identification+ Enrol Last | SearchTEList.kt#L289 | Code addition | Observes the Simprints create-action label state for if the new TEI enrollment button in the result list should use Enrol Last |
| Identification+ Enrol Last | SearchTEUi.kt#L688 | Code change | Switches the new TEI enrollment button text to the last-biometrics label when a pending biometric session exists |
| Identification+ Enrol Last | FormRepositoryImpl.kt#L61 | Code change | Counts pending Enrol Last values as present for form completion, sections, and mandatory validation |
| Identification+ Enrol Last | Injector.kt#L268 | Code addition | DI for separate Simprints-specific components for Identification+ Enrol Last |
| Identification+ Enrol Last | CustomIntentProvider.kt#L75 | Code addition | Shows pending biometric placeholder state, clears it on user clear, and routes Simprints enrollment results |
| Identification+ Enrol Last | SimprintsCustomIntentResultMapper.kt | New file | Maps SID result intents through the existing custom-intent response contract |
| Identification+ Enrol Last | SimprintsEnrollmentViewModel.kt | New file | Coordinates pending Enrol Last launch, save-time result persistence, and session clearing |
| Identification+ Enrol Last | SimprintsD2Repository.kt | New file | Provides D2 access for enrollment context and TEA value reads/writes used by Simprints flows |
| Identification+ Enrol Last | SimprintsSessionRepository.kt | New file | Persists last identification session and pending Enrol Last state in shared preferences |
| Identification+ Enrol Last | SimprintsResolvePendingEnrollmentActionUseCase.kt | New file | Finds the configured register callout and prepares REGISTER_LAST_BIOMETRICS for the pending enrollment |
| Identification+ Enrol Last | SimprintsIntentUtils.kt | New file | Centralizes Simprints callout detection, request preparation, session extraction, and pending placeholder checks |
| Identification+ Enrol Last | SimprintsSearchUtils.kt | New file | Detects biometric identification queries and filters biometric GUIDs before carrying enrollment data |
| Identification+ Enrol Last | SimprintsCustomIntentFormPresenter.kt | New file | Handles Simprints form callout launch, session capture, placeholder display, and pending-state clearing |
| Identification+ Enrol Last | SimprintsRememberCustomIntentFormPresenter.kt | New file | Builds the Simprints form presenter from Compose field state and placeholder resources |
| Identification Confirm Identity | SearchTEActivity.kt#L128 | Code addition | Registers the confirm-identity SID launcher and waits for Simprints navigation before opening dashboards |
| Identification Confirm Identity | SearchTEIViewModel.kt#L824 | Code addition | Intercepts TEI openings from biometric search to launch Confirm Identity when required |
| Identification Confirm Identity | SearchTEModule.java#L358 | Code addition | DI for separate Simprints-specific components for Identification Confirm Identity |
| Identification Confirm Identity | SearchTeiViewModelFactory.kt#L46 | Code addition | Passes Simprints search state into SearchTEIViewModel |
| Identification Confirm Identity | SimprintsSearchViewModelFactory.kt | New file | Creates activity-scoped Simprints search ViewModel so Confirm Identity and Enrol Last state survives configuration changes |
| Identification Confirm Identity | SimprintsSearchViewModel.kt | New file | Coordinates biometric search handoff for Enrol Last labels and Confirm Identity navigation |
| Identification Confirm Identity | SimprintsResolveConfirmIdentityCalloutUseCase.kt | New file | Resolves the selected TEI's biometric GUID and prepares the CONFIRM_IDENTITY callout |
| ModuleID in Identification | CustomIntentRepositoryImpl.kt#L105 | Code addition | Overrides moduleId for Simprints identification intents with the current user's Org Unit value |
| Identification result ordering by score | SearchTEIViewModel.kt#L692 | Code addition | Routes biometric search loading through SID-order-aware lookup so results follow identification match score order |
| Identification result ordering by score | SearchTEModule.java#L350 | Code change | DI for separate Simprints-specific components for Identification result ordering by score |
| Identification result ordering by score | SearchTeiViewModelFactory.kt#L47 | Code addition | Passes the ordered-result use case into SearchTEIViewModel |
| Identification result ordering by score | SimprintsOrderSearchResultsByIdentifyResponseUseCase.kt | New file | Orders matching TEIs to follow the SID identification response order |
| Identification with less buttons | ParameterSelectorItemProvider.kt#L92 | Code addition | Starts Simprints identification callout immediately on biometric search field click instead of expanding the field |
| Identification with less buttons | SearchTEUi.kt#L211 | Code change | Keeps the Biometric search label read-only |
| Identification with less buttons | SearchParametersScreen.kt#L140 | Code addition | Treats a successful Simprints identification return as an immediate search command instead of waiting for a manual extra step |
| Identification with less buttons | SearchTEIViewModel.kt#L1231 | Code addition | Rehydrates carried query values and performs the search immediately when biometric query data is present |
| Identification with less buttons | SearchTEActivity.kt#L620 | Code addition | Skips the transient search editor and jumps straight to the biometric result list without backdrop animation |
| MFID Auto-Open Record | SearchParametersScreen.kt#L498 | Code addition | Detects credential-linked identification results that qualify for the MFID direct-open shortcut |
| MFID Auto-Open Record | SimprintsSearchViewModel.kt#L187 | Code addition | Consumes an eligible single MFID identification to open the matched record directly instead of showing the result list |
| MFID Auto-Open Record | SimprintsResolveSingleBiometricSearchNavigationUseCase.kt | New file | Resolves the biometric search to exactly one TEI before auto-opening the record |
SimCapture releases have the following naming
scheme: SimCapture-DHIS2-<upstream_DHIS2_version>-fork-<SimCapture_version>.
An example of a release APK name: SimCapture-DHIS2-v3.3.1-fork-1-signed-release.apk.
The workflows of this fork repo should start with simcapture-.
The upstream README is preserved below.
Check the Wiki for information about how to build the project and its architecture (WIP)
DHIS2 Android application.