welthungerhilfe / cgm-scanner Goto Github PK
View Code? Open in Web Editor NEWChild Growth Monitor Scanner App
Home Page: https://childgrowthmonitor.org
License: GNU General Public License v3.0
Child Growth Monitor Scanner App
Home Page: https://childgrowthmonitor.org
License: GNU General Public License v3.0
captions of fields for measures should be the same during entering and presentation
List of measures should be sorted with latest on top, oldest on the bottom of the list
As a data scientist working with the database I want a simple way to determine what kind of data point I have when I see just the ID.
Therefore we already implemented the following schema:
UUID of App_object-type_epoch ms_random string
but for person it is the last name instead of "person"
and for measures it should be "manual" or "scan" instead of "measure"
sometimes the qrcode of a person is set to null. It looks like it happens sometimes when swiping down on the person list.
try {
methodThatThrows();
} catch (Exception e) {
Crashlytics.logException(e);
// handle your exception here
}
feed list of local files to upload service at startup?
How does Service maintain it's list of files for uploading? Through restarts?
see Crashlytics Issue and Stacktrace below
steps to reproduce:
as a user when i save a manual measurement i want the screen to change to the GROWTH tab to see the measurement on the chart
as a user i want to know where a child was scanned the last time.
currently lastLocation is not set in measures:
https://console.firebase.google.com/u/0/project/child-growth-monitor-dev/database/firestore/data~2Fpersons~2Fc99eac07f31db1e7_test10_1529077465187_J04sSXrt2CLyyIbs~2Fmeasures~2Fc99eac07f31db1e7_measure_1529077530408_bOedQdTFsxQBRQ7P
how to reproduce: set location in manual measurement - it is not saved
only write/overwrite lastLocation on person when location of measure is not null or ""
make manual measure
input easier
default values/input formats should be:
0.0 cm
0.0 kg
expandable to 12.595 kg
0.0 cm
0.0 cm
currently when entering manual measures floats are not exact
height: 95
headCircumference: 56.9
muac: 26.1
weight: 22.6
the backend saves:
height: 95
headCircumference: 56.90000152587891
muac: 26.10000038146973
weight: 22.60000038146973
All values must be saved exactly with the precision that they have been entered, minimum of one digit after the point:
height: 95.0
headCircumference: 56.9
muac: 26.1
weight: 22.6
for values above 120 and values with less then .1 precision a tooltip (similar to currently "please input height" etc. should appear:
- value in kilograms
- at least one digit after the decimal point
- i.e. 12.595
- value in centimeters
- use millimeter precision
- i.e. 95.6
include the following files as a static asset into the app:
for girls: http://www.who.int/childgrowth/standards/lhfa_girls_p_exp.txt
for boys: http://www.who.int/childgrowth/standards/lhfa_boys_p_exp.txt
It should look something like this for a child that is 5 years old. For younger children the chart is cut off.
http://www.who.int/childgrowth/standards/cht_lhfa_girls_p_0_5.pdf
do the same with
"Age / Weight" --> "Weight-for-age"
"Height / Weight --> "Weight-for-height"
new chart "Weight-for-length"
new chart "Head circumference-for-age"
new chart "Arm circumference-for-age"
add progress bar to RecorderActivity
100% probably will not be visible because the progressbar should be hidden again in the onboarding steps: BABY_FULL_BODY_FRONT_ONBOARDING, BABY_LEFT_RIGHT_ONBOARDING, BABY_FULL_BODY_BACK_ONBOARDING
i will use it to show progress in data collection instead of just using it through the FAB.
The Progress Bar should be visible on top of the camera picture, something like this:
As this problem is not easily reproducible, add some more information to the crashlytics reports:
https://firebase.google.com/docs/crashlytics/customize-crash-reports
As a User logged into the App i want to make sure that all scan artefacts are being uploaded and that data that is saved in the cloud will be automatically deleted from the device.
To upload all files the app should check the contents of the local storage and build a log table in the local Room database from it.
This log is then used to check if a file was successfully uploaded.
if the file gets set the "delete" flag it can be deleted from the local storage.
after fresh install measures are empty
looks like measures are only uploaded but not downloaded
all measures should be available from the start and be updated via LiveData
the current state should be
child name | manual measures | scan measures |
---|---|---|
offline child24 | 1 | 0 |
test1005 child | 2 | 4 |
test2 m | 0 | 1 |
test6 mo | 1 | 0 |
after a crash while scanning the app tries to restart into PersonalDataFragment and crashes again because context/person is missing.
As a user i want to see the growth for the next 100 days from now on so i can see how the child should be developing
as a user i want to update the scan location to my current location
same timestamp for scan and manual measures that belong together
As a nutritionist i need to know which user added which measurement in order to document the nutrition survey and do statistical analysis on accuracy of measurements.
save currentUser with each document (person/measurement)
every person document/dataset and every measures document/dataset should have the userID of the creator of the document/dataset
the UUIDs saved with each object in their ID can change. Also Users can switch phones. In any case we have no relation between UUIDs and logged in user, so we need additional createdBy
fields.
String createdBy = mAuth.getCurrentUser().getEmail();
in Room database Person
in Room database Measure
where is the mapping between Room database and Firestore?
as a user i want to know when i have filled out all fields in order to save current persons data.
as i user i want to know that the persons data has been saved so i can scan and measure the person.
the save button (btnNext in fragment_personal.xml) in the CreateDataActivity
also it should give positive affirmation
when person is saved blend in:
name | description |
---|---|
person | person or folder for persons subfolders |
measurement | |
measure | |
scan |
currently male/female/other
remove other
When trying to login while offline please add an error message/toast
"can not connect"
OverlaySurface
which has field mContext
pointing to Context
); this is a memory leak (and also breaks Instant Run)String.format
instead.String.format(Locale, ...)
insteadas a admin i want to delete persons and their measurements that have been created for test purposes.
the problem is to sync the deletion with the local Room databases of the clients
delete from local storage in FirebaseUploadService: // TODO deleteAfterUpload
remove google_maps_key from repository
When a new entry to the Room DB is saved and the device is online (WiFi or mobile-network) the app should immediately sync it to Firestore.
all files should be stored offline and the service #6 should be notified.
store sync timestamp in database instead of user preferences
see also #18
In Android Studio Menu:
Analyze --> Inspect code...
"Age / Weight" --> "Weight-for-age"
"Height / Weight --> "Weight-for-height"
new chart "Weight-for-length"
new chart "Head circumference-for-age"
new chart "Arm circumference-for-age"
Scanning process:
scan QR code, enter personal data, scan, manual measurement.
problem: location is not updated when phone has been moved
the app should work without internet connection and update immediately on database changes without user interaction
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.