Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to ODK Collect v2024.2.4 release #13

Merged
merged 870 commits into from
Oct 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
870 commits
Select commit Hold shift + click to select a range
cee27e7
Convert custom matchers to Kotlin
seadowg Jun 6, 2024
8e6fe7a
Create custom matcher for question widgets
seadowg Jun 6, 2024
78a5f0a
Use clickOn interaction
seadowg Jun 6, 2024
b537b21
Merge pull request #6165 from seadowg/javarosa-setup
seadowg Jun 6, 2024
3cb4408
Naming improvements
grzesiek2010 Jun 6, 2024
5881d15
Ignore exceptions in the copyToFile method
grzesiek2010 Jun 6, 2024
cf8566a
Removed redundant iconTint
grzesiek2010 Jun 6, 2024
beda06b
Added more margin between the list of layers and the 'Add layer' button
grzesiek2010 Jun 6, 2024
4bf5660
Added a new line at the end of the file
grzesiek2010 Jun 6, 2024
f3b8bc4
Do not expose layer dirs in repository
grzesiek2010 Jun 6, 2024
6bfa2e1
Simplified DirectoryReferenceLayerRepositoryTest
grzesiek2010 Jun 6, 2024
ef62803
Removed TestReferenceLayersRepository used only in one class
grzesiek2010 Jun 6, 2024
63a7a4b
Improved UriExt and added tests
grzesiek2010 Jun 6, 2024
df496d4
Merge pull request #6169 from grzesiek2010/COLLECT-5846
grzesiek2010 Jun 7, 2024
d647df0
Added new icons
grzesiek2010 Jun 7, 2024
b24676c
Updated the layout
grzesiek2010 Jun 7, 2024
0e3ae3f
Isolate deprecated network info code
seadowg Apr 30, 2024
dde08ad
Make TestScheduler network aware to reveal failing autosend tests
seadowg Apr 30, 2024
f1bca3e
Fix form level auto send
seadowg May 1, 2024
8ae1ec2
Make sure form level auto send works for multiple forms
seadowg May 1, 2024
77b9edb
Simplify auto send logic
seadowg May 1, 2024
80a35a5
Remove extra send method
seadowg May 1, 2024
4cd6530
Use one task spec for sending forms
seadowg May 1, 2024
4889cd7
Support auto send forms in bulk finalization
seadowg May 1, 2024
7e90221
Rename method
seadowg May 1, 2024
c862c75
Simplify method signature
seadowg May 1, 2024
e2a81c6
Don't queue multiple form level auto send jobs
seadowg May 2, 2024
b4d5fde
Make sure form level auto send doesn't resend forms
seadowg May 2, 2024
6c8398a
Simplify TaskSpec and make sure jobs are rescheduled to account for n…
seadowg May 3, 2024
4d8c841
Simplify NetworkStateProvider API
seadowg May 3, 2024
1d88a3b
Retry cellular tasks if connected to a metered non-cellular connection
seadowg May 3, 2024
8b1f171
Rework test
seadowg May 3, 2024
8ca2b49
Remove test mirroring implementation
seadowg May 3, 2024
57c459c
Make sure network state provider is shared properly
seadowg May 7, 2024
78a1bda
Set user property when user runs into metered wifi
seadowg May 7, 2024
8dd91aa
Remove unneeded line from test
seadowg Jun 10, 2024
5a90099
Fix import
seadowg Jun 10, 2024
f08bf48
Update test names
seadowg Jun 10, 2024
52cc9b1
Remove impossible when clause
seadowg Jun 10, 2024
64355c8
Make test helper private
seadowg Jun 10, 2024
59ebae7
Implemented deleting layers
grzesiek2010 Jun 7, 2024
b3767d8
Converted DrawableMatcher to kotlin and moved to the androidtest module
grzesiek2010 May 27, 2024
9833a92
Merge pull request #6121 from seadowg/form-level-autosend
seadowg Jun 10, 2024
24be652
Improved DrawableMatcher to check real drawables not tags
grzesiek2010 May 27, 2024
580735c
Added new tests
grzesiek2010 Jun 7, 2024
05b672c
Fixed ids
grzesiek2010 Jun 7, 2024
2448586
Do not ignore the strings used in the layers picker
grzesiek2010 Jun 10, 2024
58ce8f8
Use highest surface container color for rank items
seadowg Jun 11, 2024
159a0c3
Merge pull request #6178 from seadowg/rank-colors
grzesiek2010 Jun 11, 2024
45fc8e0
Convert property to method
seadowg Jun 11, 2024
9c0407f
Keep different instance lists for different projects
seadowg Jun 11, 2024
ca3512c
Merge pull request #6182 from seadowg/delete-form-projects
grzesiek2010 Jun 11, 2024
bac2b71
Created a separate view model for layers data
grzesiek2010 Jun 11, 2024
340fa26
Added a failing test
grzesiek2010 Jun 12, 2024
5a49b44
Handle non-existing layers
grzesiek2010 Jun 12, 2024
4e91221
Use one const to refernce to saved offline layers
grzesiek2010 Jun 12, 2024
4560eaf
Removed redundant attribute
grzesiek2010 Jun 12, 2024
b121b70
Maintain ranking item color when dragging
seadowg Jun 12, 2024
03aa8ee
Moved reading the saved layer id from UI to viewmodel
grzesiek2010 Jun 12, 2024
0248104
Use setValue instead of postValue
grzesiek2010 Jun 12, 2024
89932b6
Moved deleting layer filas to viewmodel
grzesiek2010 Jun 12, 2024
73a642e
Added #delete method to ReferenceLayerRepository
grzesiek2010 Jun 12, 2024
a952ce9
Prevent double taps on multi select actions
seadowg Jun 12, 2024
f193cca
Merge pull request #6185 from seadowg/rank-colors
grzesiek2010 Jun 12, 2024
dc0f084
Do not support the masked appearance in numeric questions
grzesiek2010 Jun 12, 2024
453c9ce
Do not remove layerId from the list of expanded ids after removing th…
grzesiek2010 Jun 13, 2024
0e7ec68
Fixed method name
grzesiek2010 Jun 13, 2024
624e8c9
Fixed test name
grzesiek2010 Jun 13, 2024
515a8f9
Merge pull request #6175 from grzesiek2010/COLLECT-5850
grzesiek2010 Jun 13, 2024
81534ff
Fixed CollectGeoDependencyModule
grzesiek2010 Jun 13, 2024
756e802
Fixed CollectGoogleMapsDependencyModule
grzesiek2010 Jun 13, 2024
9c97a17
Fixed CollectOsmDroidDependencyModule
grzesiek2010 Jun 13, 2024
6b12afc
Fixed CollectProjectsDependencyModule
grzesiek2010 Jun 13, 2024
c5a3ec5
Fixed CollectSelfieCameraDependencyModule
grzesiek2010 Jun 13, 2024
c157b77
Simplified the implementation of DirectoryReferenceLayerRepository
grzesiek2010 Jun 13, 2024
42e5b67
Merge pull request #6191 from grzesiek2010/COLLECT-6177
seadowg Jun 13, 2024
93232c0
Merge pull request #6184 from grzesiek2010/COLLECT-6176
seadowg Jun 13, 2024
524a9eb
Added failing tests
grzesiek2010 Jun 13, 2024
05e7370
Reset to 'none' when selected layer does not exist anymore
grzesiek2010 Jun 13, 2024
e517efc
Merge pull request #6170 from seadowg/field-list-test
grzesiek2010 Jun 13, 2024
838e2cb
Merge pull request #6166 from seadowg/forms-anr
grzesiek2010 Jun 13, 2024
18bc9ac
Fixed updating index
grzesiek2010 Mar 25, 2024
bf2c44e
Merge pull request #6190 from grzesiek2010/COLLECT-6189
seadowg Jun 14, 2024
f9c0062
Moved checking if layer is supported from MapsPreferencesFragment to …
grzesiek2010 Jun 14, 2024
7751350
Added a failing test
grzesiek2010 Jun 14, 2024
feff333
Removed the redundant line
grzesiek2010 Jun 14, 2024
417055f
Removed #getSupported and let #get check if layer is supported to mat…
grzesiek2010 Jun 14, 2024
4f07033
Improved tests
grzesiek2010 Jun 14, 2024
94a1cf8
Added failing tests
grzesiek2010 Jun 14, 2024
c60e4e2
Fixed setting fragment factories
grzesiek2010 Jun 14, 2024
a738ce0
Merge pull request #6197 from grzesiek2010/COLLECT-6194
seadowg Jun 14, 2024
8543dd2
Merge pull request #6173 from grzesiek2010/COLLECT-5939_1
seadowg Jun 14, 2024
8d359e1
Sort displayed layers
grzesiek2010 Jun 13, 2024
f060192
Fixed strings
grzesiek2010 Jun 13, 2024
478a9d0
Improved the confirmation layout
grzesiek2010 Jun 13, 2024
8c17657
Removed redundant padding
grzesiek2010 Jun 13, 2024
a1b5a85
Fixed tests
grzesiek2010 Jun 13, 2024
0e133d9
Moved sorting layers to viewmodel
grzesiek2010 Jun 14, 2024
549563c
Added a new test
grzesiek2010 Jun 14, 2024
7c1082b
Merge pull request #6188 from grzesiek2010/COLLECT-6172
seadowg Jun 17, 2024
fb11c14
Merge pull request #6193 from grzesiek2010/COLLECT-6192
seadowg Jun 17, 2024
9f5e202
Merge pull request #6187 from grzesiek2010/COLLECT-6122
seadowg Jun 17, 2024
10dcf75
Block double clicks on multi select action instead of multi clicks
seadowg Jun 17, 2024
615e278
Fix rotation for readonly polygons in OSM
seadowg Jun 17, 2024
bfce1d4
Fix rotation for read only lines in all map engines
seadowg Jun 18, 2024
7abed2c
Remove @Ignore from test
seadowg Jun 18, 2024
bdb0d2c
Replace dangerous matcher in test
seadowg Jun 18, 2024
6a2ce0f
Pull out shared helper for getting question views
seadowg Jun 18, 2024
a925b68
Make type more specific
seadowg Jun 18, 2024
3683bbb
Merge pull request #6204 from seadowg/geo-read-only
seadowg Jun 18, 2024
f7eb09b
Merge pull request #6186 from seadowg/multi-select-double-tap
seadowg Jun 18, 2024
b40c160
Fix test question labels
seadowg Jun 18, 2024
6f26a9b
Rename reference to offline in strings
seadowg Jun 18, 2024
ccd0530
Rename string names
seadowg Jun 18, 2024
bb7e3f6
Merge pull request #6208 from seadowg/offline-layers-strings
seadowg Jun 18, 2024
6993f66
Merge pull request #6207 from seadowg/field-list-comments
seadowg Jun 19, 2024
60dffd9
Correct icon used in delete button
seadowg Jun 19, 2024
c2fbd01
Add enum for auto send modes
seadowg Jun 19, 2024
404a5ef
Use auto send enum everywhere
seadowg Jun 19, 2024
f5e835a
Make auto-send parsing more lenient
seadowg Jun 19, 2024
6f1875e
Specify root to make test more stable
seadowg Jun 19, 2024
baf4233
Merge pull request #6213 from seadowg/auto-send-truthy
seadowg Jun 20, 2024
204cf02
Make whole importer screen scrollable
seadowg Jun 20, 2024
3aed136
Add max height to prevent recyclerview from filling the whole screen
seadowg Jun 20, 2024
5bdc015
Don't hold bindings in a field
seadowg Jun 20, 2024
e3ddf29
Fix tests that need to scroll
seadowg Jun 20, 2024
d74bf38
Move Espresso helpers to test-shared
seadowg Jun 20, 2024
6c05ed7
Split assertions and interacitons for Espresso helpers
seadowg Jun 20, 2024
89a6674
Make Assertions and Interactions API more consistent
seadowg Jun 20, 2024
79b02d0
Merge pull request #6210 from seadowg/bin-icon
seadowg Jun 20, 2024
9bf9e60
Use scroll safe helpers
seadowg Jun 20, 2024
1c555e0
Remove tests already covered by parent implementation tests
seadowg Jun 20, 2024
686ab8f
Don't allow masked appearance for string number widget
seadowg Jun 20, 2024
d0434eb
Update STATE.md
seadowg Jun 20, 2024
8aa9951
Merge pull request #6215 from seadowg/layers-landscape
seadowg Jun 21, 2024
7d30e18
Merge pull request #6216 from seadowg/text-number-masked
seadowg Jun 21, 2024
2af2ea3
Remove video resolution analytics
seadowg Jun 21, 2024
2a78019
Remove OSM analytics event
seadowg Jun 21, 2024
e4dfeca
Remove shortcuts analytics event
seadowg Jun 21, 2024
b214c17
Remove import events
seadowg Jun 21, 2024
7cb5090
Remove partial form submission event
seadowg Jun 21, 2024
25668f8
Remove form level auto send event
seadowg Jun 21, 2024
12bedc4
Remove auto delete analytics event
seadowg Jun 21, 2024
34ba351
Remove ExPrinterWidget event
seadowg Jun 21, 2024
27bf5f4
Add events to track layers import usage
seadowg Jun 21, 2024
811ea06
Add analytics doc to track answered questions
seadowg Jun 21, 2024
64e0960
Make sure delete is mentioned in offline maps blurb
seadowg Jun 21, 2024
fa6c7c4
Rework release planning details
seadowg Jun 21, 2024
38639e6
Fix file type name
seadowg Jun 21, 2024
d1e05d3
Merge pull request #6222 from seadowg/offline-maps-delete
seadowg Jun 21, 2024
f8c48ba
Merge pull request #6220 from seadowg/analytics
seadowg Jun 21, 2024
7887637
Added a failing test
grzesiek2010 Jun 24, 2024
bdbef33
Always use map configurator that represents the current state
grzesiek2010 Jun 24, 2024
963ff01
Improved tests
grzesiek2010 Jun 24, 2024
e7e99cd
Merge pull request #6225 from grzesiek2010/COLLECT-6211
seadowg Jun 24, 2024
4597084
Change select item type to string
seadowg Jun 14, 2024
8a3684b
Rename package to get ready for single select code
seadowg Jun 14, 2024
07a0a97
Use multi select for expansion state
seadowg Jun 14, 2024
b0da644
Create generic single select view model
seadowg Jun 14, 2024
c41e31a
Move type conversion closer to generic code
seadowg Jun 17, 2024
a91a5c0
Remove unused field
seadowg Jun 17, 2024
48a4b12
Use helper factory for ViewModel
seadowg Jun 17, 2024
c46d42d
Clarify delete confirmation message translation text
lognaturel Jun 24, 2024
7a300f9
Merge pull request #6226 from lognaturel/translate-text
grzesiek2010 Jun 25, 2024
3ac2ce2
Fix typo
seadowg Jun 25, 2024
38a5c34
Correct typos
seadowg Jun 25, 2024
0445aef
Merge pull request #6223 from seadowg/release-plan
grzesiek2010 Jun 25, 2024
c209498
Merge pull request #6217 from seadowg/state
grzesiek2010 Jun 25, 2024
0e3b283
Removed redundant attributes
grzesiek2010 Jun 25, 2024
cd01acb
Make the icon invisible not gone if it is not needed
grzesiek2010 Jun 25, 2024
b7ccc88
Merge pull request #6202 from seadowg/selects
grzesiek2010 Jun 25, 2024
f63cda2
Merge pull request #6227 from grzesiek2010/COLLECT-6195
seadowg Jun 25, 2024
732d24e
Added new strings
grzesiek2010 Jun 25, 2024
50a495a
Display a warning when unsuported layers are selected
grzesiek2010 Jun 27, 2024
eccd18d
Added tests
grzesiek2010 Jun 27, 2024
e444bc8
Merge pull request #6230 from grzesiek2010/COLLECT-6199
seadowg Jun 27, 2024
f43ad69
Updated TrackableWorker to count jobs
grzesiek2010 Jun 27, 2024
94b2a7c
Added tests
grzesiek2010 Jun 27, 2024
fd6a5e3
Naming improvements
grzesiek2010 Jun 27, 2024
83335af
Use TrackableWorker in OfflineMapLayersViewModel
grzesiek2010 Jun 27, 2024
0317163
Added tests
grzesiek2010 Jun 27, 2024
7ecac32
Fixed displaying the number of unsupported layers
grzesiek2010 Jun 27, 2024
8d454c3
Merge pull request #6238 from grzesiek2010/COLLECT-6237
grzesiek2010 Jun 28, 2024
56ad6f0
Fixed SingleSelectViewModel
grzesiek2010 Jun 28, 2024
1b169ce
Added tests
grzesiek2010 Jun 28, 2024
a57bbbc
Merge pull request #6239 from grzesiek2010/COLLECT-6228
lognaturel Jun 28, 2024
0d31adc
Update translations for beta
lognaturel Jun 28, 2024
527f26f
Add Traditional Chinese
lognaturel Jun 28, 2024
9d767fa
Fix date time strings
lognaturel Jun 28, 2024
1729fa4
Merge pull request #6240 from lognaturel/update-translations
lognaturel Jun 28, 2024
aea1106
Merge pull request #6235 from grzesiek2010/COLLECT-6221
seadowg Jul 1, 2024
1dbe8ad
Dismiss the confirmation dialog on activity recreation
grzesiek2010 Jul 1, 2024
e06589f
Added a test
grzesiek2010 Jul 1, 2024
e990503
Added a failing test
grzesiek2010 Jul 3, 2024
bb6cec2
Fixed ExternalAppIntentProvider
grzesiek2010 Jul 3, 2024
695e32f
Merge pull request #6247 from grzesiek2010/COLLECT-6246
seadowg Jul 3, 2024
9922413
Upgrade to JavaRosa release
seadowg Jul 3, 2024
baaf0ed
Merge pull request #6250 from seadowg/javarosa-version
seadowg Jul 4, 2024
f2ce099
Merge pull request #6243 from grzesiek2010/COLLECT-6219
seadowg Jul 4, 2024
644a37d
Load existing layers on fragment attach
grzesiek2010 Jul 8, 2024
89aa66d
Fixed tests
grzesiek2010 Jul 8, 2024
8111e03
Improved listening setting changes in MapsPreferencesFragment
grzesiek2010 Jul 4, 2024
ab3cc06
Merge pull request #6251 from grzesiek2010/COLLECT-6248
grzesiek2010 Jul 8, 2024
a5bc2a9
Update translations for release
lognaturel Jul 8, 2024
7dfd986
Merge pull request #6258 from lognaturel/update-translations
lognaturel Jul 8, 2024
3dee292
Fixed applying the masked appearance
grzesiek2010 Jul 17, 2024
a994140
Fixed tests
grzesiek2010 Jul 17, 2024
3e86c79
Added new tests
grzesiek2010 Jul 18, 2024
5a83a15
Let Errors crash the app during form loading
seadowg Jul 18, 2024
5fb20f8
Added failing tests
grzesiek2010 Jul 18, 2024
6649c62
Fixed hiding error in external widgets
grzesiek2010 Jul 18, 2024
7c2ec09
Merge pull request #6272 from seadowg/ooms
seadowg Jul 18, 2024
184247b
Fixed passing the SavepointsRepositoryProvider to viewModelFactory
grzesiek2010 Jul 18, 2024
1dad86a
Fixed passing dependencies to BackgroundLocationHelper
grzesiek2010 Jul 18, 2024
a5dc0e2
Merge pull request #6271 from grzesiek2010/COLLECT-6270
grzesiek2010 Jul 19, 2024
8dcf4f9
Merge pull request #6275 from grzesiek2010/COLLECT-5976
seadowg Jul 22, 2024
b44e199
Merge pull request #6273 from grzesiek2010/COLLECT-6266
seadowg Jul 22, 2024
187d498
Added a failing test
grzesiek2010 Aug 12, 2024
5dc2baa
Sanitize media file names
grzesiek2010 Aug 12, 2024
bc6f019
Removed support for InstanceProvider#update
grzesiek2010 Aug 12, 2024
ab81aae
Fixed tests
grzesiek2010 Aug 12, 2024
553e46f
Improve sanitizing file names
grzesiek2010 Aug 13, 2024
af77951
Removed unused analytics event
grzesiek2010 Aug 13, 2024
c720c27
Merge pull request #6334 from grzesiek2010/ODK-01-00
seadowg Aug 13, 2024
77f7d88
Guard against incorrect paths
seadowg Aug 13, 2024
a3130e2
Don't allow inserting instances with custom submission URI
seadowg Aug 13, 2024
2ae728c
Update JavaRosa to 4.4.1 for CSV parse improvements
lognaturel Aug 13, 2024
3189971
Remove FormsProvider#update
seadowg Aug 14, 2024
5debc9a
Merge pull request #6340 from seadowg/path-utils
grzesiek2010 Aug 14, 2024
9f93bcb
Remove FormsProvider#insert
seadowg Aug 14, 2024
a59d338
Merge pull request #6342 from lognaturel/jr-csv-parse
seadowg Aug 14, 2024
37c9604
Add test for instance upload action
seadowg Aug 14, 2024
7b6984f
Add analytics for instance upload action
seadowg Aug 14, 2024
a7f9312
Make test name more specific
seadowg Aug 14, 2024
ba5ed93
Remove unneeded extra setup
seadowg Aug 15, 2024
669ccde
Merge pull request #6346 from seadowg/instance-upload-action
grzesiek2010 Aug 15, 2024
a6c9514
Merge pull request #6341 from seadowg/instance-provider
seadowg Aug 16, 2024
d414c0a
Add message to PathUtils security exception
seadowg Aug 20, 2024
b8609cd
Merge pull request #6355 from seadowg/path-error-message
grzesiek2010 Aug 20, 2024
8a9ccd7
Support non canonical directory paths for getAbsoluteFilePath
seadowg Aug 20, 2024
6482ae2
Improve PathUtils crash message
seadowg Aug 20, 2024
d1967a1
Merge pull request #6357 from seadowg/symlink-support
grzesiek2010 Aug 20, 2024
8f05e28
Moved getAbsoluteFilePath to androidshared
grzesiek2010 Aug 21, 2024
f9377c4
Log error instead of throwing exception
grzesiek2010 Aug 21, 2024
e3f3d60
Moved tests to the androidshared module
grzesiek2010 Aug 21, 2024
8a59270
Merge pull request #6363 from grzesiek2010/disable_security_exception
seadowg Aug 21, 2024
cfe45bd
Update to v2024.2.4
Oct 18, 2024
98ec822
Update KoboCollect to ODK Collect v2024.2.4
Oct 21, 2024
1f4da61
Delete package-lock.json
tiritea Oct 23, 2024
c668aeb
Delete node_modules directory
tiritea Oct 23, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 8 additions & 7 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ references:
android_config: &android_config
working_directory: ~/work
docker:
- image: cimg/android:2023.10.1
- image: cimg/android:2024.01
resource_class: medium+

jobs:
Expand All @@ -17,7 +17,7 @@ jobs:
- checkout
- run:
name: Generate combined build.gradle file for cache key
command: cat build.gradle */build.gradle .circleci/gradle.properties .circleci/config.yml buildSrc/src/main/java/dependencies/Dependencies.kt buildSrc/src/main/java/dependencies/Versions.kt > deps.txt
command: cat build.gradle */build.gradle */build.gradle.kts .circleci/gradle.properties .circleci/config.yml buildSrc/src/main/java/dependencies/Dependencies.kt buildSrc/src/main/java/dependencies/Versions.kt > deps.txt
- restore_cache:
keys:
- compile-deps-{{ checksum "deps.txt" }}
Expand Down Expand Up @@ -230,8 +230,8 @@ jobs:
command: ./gradlew assembleSelfSignedRelease

- run:
name: Check APK size isn't larger than 10.6MB
command: if [ $(ls -l collect_app/build/outputs/apk/selfSignedRelease/*.apk | awk '{print $5}') -gt 10600000 ]; then exit 1; fi
name: Check APK size isn't larger than 11.5MB
command: ./check-size.sh

- run:
name: Copy APK to predictable path for artifact storage
Expand Down Expand Up @@ -282,7 +282,7 @@ jobs:
--type instrumentation \
--app collect_app/build/outputs/apk/debug/*.apk \
--test collect_app/build/outputs/apk/androidTest/debug/*.apk \
--device model=MediumPhone.arm,version=30,locale=en,orientation=portrait \
--device model=MediumPhone.arm,version=34,locale=en,orientation=portrait \
--results-bucket opendatakit-collect-test-results \
--directories-to-pull /sdcard --timeout 20m \
--test-targets "package org.odk.collect.android.feature.smoke"
Expand Down Expand Up @@ -333,9 +333,10 @@ jobs:
--num-uniform-shards=25 \
--app collect_app/build/outputs/apk/debug/*.apk \
--test collect_app/build/outputs/apk/androidTest/debug/*.apk \
--device model=MediumPhone.arm,version=30,locale=en,orientation=portrait \
--device model=MediumPhone.arm,version=34,locale=en,orientation=portrait \
--results-bucket opendatakit-collect-test-results \
--directories-to-pull /sdcard --timeout 20m
--directories-to-pull /sdcard --timeout 20m \
--test-targets "notPackage org.odk.collect.android.regression"
fi
no_output_timeout: 25m

Expand Down
8 changes: 5 additions & 3 deletions .circleci/test_modules.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
shared
formstest
forms-test
androidshared
async
strings
audioclips
audiorecorder
audio-clips
audio-recorder
projects
location
geo
Expand All @@ -21,3 +21,5 @@ metadata
selfie-camera
draw
printer
lists
web-page
23 changes: 23 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
root = true

[*.{kt,kts}]
ktlint_standard_no-blank-lines-in-chained-method-calls = disabled
ktlint_standard_trailing-comma-on-call-site = disabled
ktlint_standard_trailing-comma-on-declaration-site = disabled
ktlint_standard_function-signature = disabled
ktlint_standard_no-empty-first-line-in-class-body = disabled
ktlint_standard_argument-list-wrapping = disabled
ktlint_standard_parameter-list-wrapping = disabled
ktlint_standard_multiline-expression-wrapping = disabled
ktlint_standard_max-line-length = disabled
ktlint_standard_string-template-indent = disabled
ktlint_standard_annotation = disabled
ktlint_standard_value-parameter-comment = disabled
ktlint_standard_property-naming = disabled
ktlint_standard_value-argument-comment = disabled
ktlint_standard_blank-line-before-declaration = disabled
ktlint_standard_no-consecutive-comments = disabled
ktlint_standard_enum-wrapping = disabled
ktlint_standard_statement-wrapping = disabled
ktlint_standard_try-catch-finally-spacing = disabled
ktlint_standard_wrapping = disabled
1 change: 1 addition & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,6 @@ https://github.com/getodk/collect/blob/master/docs/CONTRIBUTING.md
- [ ] added or modified tests for any new or changed behavior
- [ ] run `./gradlew connectedAndroidTest` (or `./gradlew testLab`) and confirmed all checks still pass
- [ ] added a comment above any new strings describing it for translators
- [ ] added any new strings with date formatting to `DateFormatsTest`
- [ ] verified that any code or assets from external sources are properly credited in comments and/or in the [about file](https://github.com/getodk/collect/blob/master/collect_app/src/main/assets/open_source_licenses.html).
- [ ] verified that any new UI elements use theme colors. [UI Components Style guidelines](https://github.com/getodk/collect/blob/master/docs/CODE-GUIDELINES.md#ui-components-style-guidelines)
4 changes: 1 addition & 3 deletions analytics/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,5 @@ dependencies {
implementation(Dependencies.kotlin_stdlib)
implementation(Dependencies.androidx_core_ktx)
implementation(Dependencies.firebase_crashlytics)
implementation(Dependencies.firebase_analytics) {
exclude(group = "com.google.guava")
}
implementation(Dependencies.firebase_analytics)
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,9 @@ interface Analytics {
fun setParam(key: String, value: String) {
params[key] = value
}

fun setUserProperty(name: String, value: String) {
instance.setUserProperty(name, value)
}
}
}
1 change: 1 addition & 0 deletions androidshared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ dependencies {
implementation(Dependencies.play_services_location)

testImplementation(project(":test-shared"))
testImplementation(project(":androidtest"))
testImplementation(Dependencies.junit)
testImplementation(Dependencies.androidx_test_ext_junit)
testImplementation(Dependencies.androidx_test_espresso_core)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,6 @@ class ImageCompressorTest {
ExifInterface.TAG_GPS_SATELLITES to "8",
ExifInterface.TAG_GPS_STATUS to "A",
ExifInterface.TAG_ORIENTATION to "1",

// unsupported exif tags
ExifInterface.TAG_THUMBNAIL_IMAGE_LENGTH to "5",
ExifInterface.TAG_DNG_VERSION to "100"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.odk.collect.androidshared.async
import org.odk.collect.androidshared.livedata.MutableNonNullLiveData
import org.odk.collect.androidshared.livedata.NonNullLiveData
import org.odk.collect.async.Scheduler
import java.util.concurrent.atomic.AtomicInteger
import java.util.function.Consumer
import java.util.function.Supplier

Expand All @@ -11,10 +12,15 @@ class TrackableWorker(private val scheduler: Scheduler) {
private val _isWorking = MutableNonNullLiveData(false)
val isWorking: NonNullLiveData<Boolean> = _isWorking

private var activeBackgroundJobsCounter = AtomicInteger(0)

fun <T> immediate(background: Supplier<T>, foreground: Consumer<T>) {
activeBackgroundJobsCounter.incrementAndGet()
_isWorking.value = true
scheduler.immediate(background) { result ->
_isWorking.value = false
if (activeBackgroundJobsCounter.decrementAndGet() == 0) {
_isWorking.value = false
}
foreground.accept(result)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,12 @@ object ImageFileUtils {
}
if (sourceFileExif == null ||
!EXIF_ORIENTATION_ROTATIONS.contains(
sourceFileExif
.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED
)
)
sourceFileExif
.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED
)
)
) {
// Source Image doesn't have any EXIF Rotations, so a normal file copy will suffice
sourceFile.copyTo(destFile, true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow

/**
* [AppState] can be used as a shared store of state that lives at an "app"/"in-memory" level
Expand Down Expand Up @@ -50,6 +52,10 @@ class AppState {
return get(key, MutableLiveData(default))
}

fun <T> getFlow(key: String, default: T): Flow<T> {
return get(key, MutableStateFlow(default))
}

fun set(key: String, value: Any?) {
map[key] = value
}
Expand All @@ -58,6 +64,16 @@ class AppState {
get(key, MutableLiveData<T>()).postValue(value)
}

fun <T> setFlow(key: String, value: T) {
get<MutableStateFlow<T>>(key).let {
if (it != null) {
it.value = value
} else {
map[key] = MutableStateFlow(value)
}
}
}

fun clear() {
map.clear()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package org.odk.collect.androidshared.data

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData

/**
* Useful for values that are read multiple times but only used
* once (like an error that shows a dialog once).
Expand All @@ -16,3 +19,12 @@ data class Consumable<T>(val value: T) {
consumed = true
}
}

fun <T> LiveData<Consumable<T>>.consume(lifecycleOwner: LifecycleOwner, consumer: (T) -> Unit) {
observe(lifecycleOwner) { consumable ->
if (!consumable.isConsumed()) {
consumable.consume()
consumer(consumable.value)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.util.function.Consumer;
import java.util.function.Function;

import kotlin.Pair;
import kotlin.Triple;

public class LiveDataUtils {
Expand Down Expand Up @@ -54,6 +55,13 @@ public static <T> LiveData<T> liveDataOf(T value) {
return new MutableLiveData<>(value);
}

public static <T, U> LiveData<Pair<T, U>> zip(LiveData<T> one, LiveData<U> two) {
return new ZippedLiveData<>(
new LiveData[]{one, two},
values -> new Pair<>((T) values[0], (U) values[1])
);
}

public static <T, U, V> LiveData<Triple<T, U, V>> zip3(LiveData<T> one, LiveData<U> two, LiveData<V> three) {
return new ZippedLiveData<>(
new LiveData[]{one, two, three},
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package org.odk.collect.androidshared.system

import android.content.ContentResolver
import android.content.Context
import android.net.Uri
import android.provider.OpenableColumns
import android.webkit.MimeTypeMap
import androidx.core.net.toFile
import java.io.File
import java.io.FileOutputStream

fun Uri.copyToFile(context: Context, dest: File) {
try {
context.contentResolver.openInputStream(this)?.use { inputStream ->
FileOutputStream(dest).use { outputStream ->
inputStream.copyTo(outputStream)
}
}
} catch (e: Exception) {
// ignore
}
}

fun Uri.getFileExtension(context: Context): String? {
var extension = getFileName(context)?.substringAfterLast(".", "")

if (extension.isNullOrEmpty()) {
val mimeType = context.contentResolver.getType(this)

extension = if (scheme == ContentResolver.SCHEME_CONTENT) {
MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType)
} else {
MimeTypeMap.getFileExtensionFromUrl(toString())
}

if (extension.isNullOrEmpty()) {
extension = mimeType?.substringAfterLast("/", "")
}
}

return if (extension.isNullOrEmpty()) {
null
} else {
".$extension"
}
}

fun Uri.getFileName(context: Context): String? {
var fileName: String? = null

try {
when (scheme) {
ContentResolver.SCHEME_FILE -> fileName = toFile().name
ContentResolver.SCHEME_CONTENT -> {
val cursor = context.contentResolver.query(this, null, null, null, null)
cursor?.use {
if (it.moveToFirst()) {
val fileNameColumnIndex = it.getColumnIndex(OpenableColumns.DISPLAY_NAME)
if (fileNameColumnIndex != -1) {
fileName = it.getString(fileNameColumnIndex)
}
}
}
}
ContentResolver.SCHEME_ANDROID_RESOURCE -> {
// for uris like [android.resource://com.example.app/1234567890]
val resourceId = lastPathSegment?.toIntOrNull()
if (resourceId != null) {
fileName = context.resources.getResourceName(resourceId)
} else {
// for uris like [android.resource://com.example.app/raw/sample]
val packageName = authority
if (pathSegments.size >= 2) {
val resourceType = pathSegments[0]
val resourceEntryName = pathSegments[1]
val resId = context.resources.getIdentifier(resourceEntryName, resourceType, packageName)
if (resId != 0) {
fileName = context.resources.getResourceName(resId)
}
}
}
}
}

if (fileName == null) {
fileName = path?.substringAfterLast("/")
}
} catch (e: Exception) {
// ignore
}

return fileName
}
Loading