The changes to ODK Collect have been pushed to Google Play.
*Beginning with Android 4.3, users of encrypted forms should test that
encryption is active on their device (this can be tested by filling in and
submitting a form to ODK Aggregate or attempting to decrypt and export a
submission via ODK Briefcase. If either step fails, the device may be
marking the form as finalized but not encrypting it. *This behavior is a
fail-safe fallback to ensure that no data is lost should a future Android
operating system update cause the known partial fix to issue
918http://code.google.com/p/opendatakit/issues/detail?id=918to no
longer work.
ODK Collect highlights:
- partial fix issue
918http://code.google.com/p/opendatakit/issues/detail?id=918- If
Android 4.3 and higher devices include the Bouncy Castle encryption
provider, then encrypted forms will be saved and encrypted. If the
Bouncy Castle provider is not available, then the forms will be saved
without encryption. This addresses encryption failures on Android 4.3.
It is unclear if Bouncy Castle will always be present on Android 4.3
systems (on the tested systems, it is present) or if it will ever become
unavailable in the future. Without this fix, data corruption will occur
on Android 4.3 and higher systems. Fix accomplished with significant
assistance by CTOSurvey. - fix silent failures when encrypted forms do not specify a server URL.
- new 'placement-map' appearance for geopoint widget. This presents a
map display where you can drag the geolocation marker on the map, and
save the new hand-placed geolocation back into the form (contributed by
Guillaume Salmon). Available only on Android 2.2 and higher devices. - On 3.x and 4.x, render using the newer 3.x and 4.x user interface
standard. Legacy 2.x devices should continue to work as before. Key changes
are to the menu (the icons are no longer shown) and while filling out a
form, the save and hierarchy menu items are reachable via the icons on the
'action bar' at the top of the app. - update icons to conform to pixel dimensions of their respective dpi
classes. This shrinks some icons for some displays, and enlarges others
for other displays. Add xhdpi icons. - supply 'largeHeap' attribute to enable ODK Collect to run with a
larger heap (including stack) on some devices (dependent upon hardware
manufacturer). Can enable more complex regex() functions. - indexed-repeat(repeatedfield, repeatgroup, index): References a field
or group that is inside a prior repeat group.* *The first parameter
specifies the prior field or group in which you are interested; the second
specifies the prior repeat group within which thefield or group of interest
is located; and the third specifies the instance number, within the prior
repeat group, to use. For example, the calculate expression
"indexed-repeat(${name}, ${names}, 1)" will return the first name
available when the "name" field is inside a prior repeat group named
"names". From inside a later repeat group, the calculate expression
"indexed-repeat(${name}, ${names}, position(..))" will pull the xth name
from the prior repeat group, where x is the instance number of the current
repeat group (e.g., if currently in the fourth instance of a repeat group,
it will return the fourth name from the earlier repeat group). See the
multiple-repeat sample form for a simple example. If you need to reference
a field or group within multiple nested repeat groups, you can supply
additional parameters to indicate the instance numbers to use for each
level of nesting. For example, the calculate expression
"indexed-repeat(${name}, ${families}, ${familynumber}, ${names},
${membernumber})" will pull a particular family member's name when family
member names are inside a repeat group that is itself inside a repeat group
of families. See the second multiple-repeat sample form for a much more
complex example that includes three levels of nested repeat groups.
(contributed by CTO Survey) - new functions to support date-time arithmetic (using a number of new
functions, you can gain access to the time-of-day and perform calculations
on it). - pow(a,b) -- raise a to the power b. Contributed by Nafundi.
- property('propertyName') -- return that property value (rather than
needing to create a field containing that property and then reference the
field). - ensure that uuid(), now(), today() and random() compute new values at
each use within a form (previously, if you had two calculate expressions of
'uuid()', they would both return the same UUID (or instant of time, or
random number).
Additional information at:
https://code.google.com/p/opendatakit/wiki/CollectReleaseNotes
ODK Briefcase highlights:
Beginning with 1.4, ODK Briefcase attempts to recover corrupted encrypted
XML files ( issue
918http://code.google.com/p/opendatakit/issues/detail?id=918). ODK
Briefcase is not able to recover corrupted media attachments.
Encrypted files can be corrupted when running on Android 4.3 systems and
using ODK Collect 1.2.x or 1.3.x. The corruption is due to the failure of
the Android 4.3 device to emit the final 1 -to- 15 bytes (characters) of
the file.
If the XML file corruption cannot be automatically corrected, you can
manually access the corrupted files by creating a 'debug' directory
underneath the ODK Briefcase Storage location. If that directory exists,
the corrupted XML files will be written to submission-nnnnn.xml files in
that directory.
This recovery feature is contributed by CTOSurvey.
Additional information at:
http://code.google.com/p/opendatakit/wiki/ODKBriefcase
ODK Validate highlights:
Improved reporting of the locations of various form definition errors;
fewer crashes and/or erroneous warnings when running on well-formed forms.
Contributed by CTOSurvey.