This proposal is a companion to OpenRosa spec proposal: add optional /client-settings endpoint.
I propose that we publish an official standard for client setting key/value pairs supported across the ecosystem. These would be used for both server- and QR code-based configuration. This would make it possible for various tools to generate configurations for ODK clients and for various ODK clients to ingest those same configurations.
I think it would make sense to use the keys and values that clients have already been using as much as possible. I propose we look at what Collect has, consider additions or modifications from what Enketo and iXForms do, see if there are any inconsistencies we want to right and then publish what we have as the standard. This might not be the standard we would come up with if we were starting from scratch but it’s a pragmatic road to greater interoperability between existing tools.
At the last TSC call, we talked about what settings exist in the ecosystem. @Martijnr described that Enketo does not currently have many client settings but that it could support some of the same ones Collect does (e.g. specifying a map basemap). Because Enketo doesn’t do multiple form management, several of Collect’s settings won’t apply to it. Enketo is a web app, so several of the kinds of things that are configured through settings in Collect are passed to Enketo through network requests.
I’ve summarized Collect’s settings below. It’s a lot. Some of these illustrate the broad range of workflows users leverage Collect within, others exist because Collect behavior changed but a setting was introduced to go back to older defaults if needed and yet others are probably no longer necessary. In going through this exercise, I identified that the documentation is incomplete and I’ll address that. I also plan to add some usage analytics in Collect.
@martijnr, @Xiphware, are there settings that Enketo or iXForms make available that should be added?
protocol
: {"odk_default", "google_sheets", "other"}
server_url
username
password
formlist_url
- The endpoint name to add to the base server URL. Defaults to /formList
.
submission_url
- The endpoint name to add to the base server URL. Defaults to /submission
.
selected_google_account
google_sheets_url
- Fallback Google Sheets submission URL if none is specified in a Google Sheets form def
appTheme
: {"light_theme", "dark_theme"}
app_language
: BCP 47 language codes. The ones supported by Collect are: {"af", "am", "ar", "bn", "ca", "cs", "de", "en", "es", "et", "fa", "fi", "fr", "hi", "in", "it", "ja", "ka", "km", "ln", "lo_LA", "lt", "mg", "ml", "mr", "ms", "my", "ne_NP", "nl", "no", "pl", "ps", "pt", "ro", "ru", "si", "sl", "so", "sq", "sr", "sv_SE", "sw", "sw_KE", "te", "th_TH", "ti", "tl", "tr", "uk", "ur", "ur_PK", "vi", "zh", "zu"}
font_size
: {13, 17, 21, 25, 29}
navigation
: {"swipe", "buttons", "swipe_buttons"}
showSplash
splashPath
- Absolute path to an image that will be shown at application launch.
basemap_source
- {"google", "mapbox", "osm", "usgs", "stamen", "carto"}
google_map_style
: {1, 2, 3, 4}
- Defaults to 1 (street). Other values are 2 (satellite), 3 (terrain), 4 (hybrid).
mapbox_map_style
: {"mapbox://styles/mapbox/light-v10", "mapbox://styles/mapbox/dark-v10", "mapbox://styles/mapbox/satellite-v9", "mapbox://styles/mapbox/satellite-streets-v11", "mapbox://styles/mapbox/outdoors-v11"}
usgs_map_style
: {"topographic", "hybrid", "satellite"}
carto
: {"positron", "dark_matter"}
reference_layer
: Absolute path to mbtiles file to be used as offline layer.
periodic_form_updates_check
: {"never", "every_fifteen_minutes", "every_one_hour", "every_six_hours", "every_24_hours"}
automatic_update
hide_old_form_versions
autosend
: {"off", "wifi_only", "cellular_only", "wifi_and_cellular"}
delete_send
default_completed
- Marks records as finalized by default at the end of a form-filling session.
constraint_behavior
: {"on_swipe", "on_finalize"}
high_resolution
image_size
: {"original_image_size", "very_small", "small", "medium", "large"}
guidance_hint
: {"no", "yes", "collapsed"}
instance_sync
analytics
metadata_username
metadata_phonenumber
metadata_email
Admin settings
admin_pw
- the admin password required to view or change admin settings
All other admin settings are boolean flags that toggle functionality on or off:
edit_saved
- disable editing saved forms
send_finalized
- disable manually sending finalized forms
view_sent
- disable viewing sent form
get_blank
- disable fetching form definitions manually
delete_saved
- disable manually deleting saved form definitions or records
qr_code_scanner
- disable QR code configuration
change_server
- disable server settings
change_app_theme
- disable changing the app theme
change_app_language
- disable changing the app language
change_font_size
- disable changing font size
change_navigation
- disable changing navigation strategy
show_splash_screen
- disable changing whether the splash screen is displayed
maps
- disable maps settings
periodic_form_updates_check
- disable changing form update frequency
automatic_update
- disable changing whether new form definitions are updated
hide_old_form_versions
- disable changing whether old form versions are displayed
change_autosend
- disable changing whether records autosend
delete_after_send
- disable changing whether records delete after send
default_to_finalized
- disable changing whether records default to finalized
change_constraint_behavior
- disable changing constraint behavior
high_resolution
- disable changing high resolution video setting
image_size
- disable changing image size setting
guidance_hint
- disable changing guidance hint setting
instance_form_sync
- disable changing whether records imported from disk default to finalized
change_form_metadata
- disable changing form metadata settings
analytics
- disable changing the analytics setting
moving_backwards
- disable any way to move back to questions that have already been visited
access_settings
- disable settings access from form entry screen
change_language
- disable changing form definition language
jump_to
- disable jumping between questions from form entry screen
save_mid
- disable manual saves from form entry screen
save_as
- disable naming records
mark_as_finalized
- disable selecting whether a specific record should be finalized on save