Git Product home page Git Product logo

covidsafe / app-android Goto Github PK

View Code? Open in Web Editor NEW
65.0 65.0 20.0 6.54 MB

Doctors and researchers at the University of Washington with Microsoft volunteers have built a tool to alert you about highly relevant public health announcements, potential exposure to COVID-19, and to assist public health officials and contact tracing teams without compromising your personal privacy.

Home Page: http://covidsafe.cs.washington.edu/

License: MIT License

Java 100.00%

app-android's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

app-android's Issues

App Crash on LoggingService class while initiating the Service (Exception trace attached)

--------- beginning of crash
2020-04-18 01:22:08.927 12195-12195/edu.uw.covidsafe E/AndroidRuntime: FATAL EXCEPTION: main
Process: edu.uw.covidsafe, PID: 12195
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{17f93e5 u0 edu.uw.covidsafe/.LoggingService}
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1918)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7263)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

Block < 23 API phones from using it

If you use a lower API you will run into issues.
Have a check somewhere that blocks use of the app if API < 23 and shows an error message.
I thought min API in the Gradle does this blocking, but apparently not.

Static images of maps

Screen Shot 2020-04-27 at 7 16 57 AM

It would be really great if we could have a static image of a map next to:

  1. Each of the locations in the contact log
  2. Exposure notifications

EDIT: Not sure if the Google Maps API route is the only way, there might be other ways that don't require money.

We can use this cloud service, but the issue of course is money:
https://developers.google.com/maps/documentation/maps-static/usage-and-billing

However, given that there is a real potential for adoption, individual states could potentially be able to fund cloud services like this.

The ask in this issue is to be able to add in the static maps for development testing and have a flag to turn it on or off.

So if we decide we want it, we can turn it on, and add in the appropriate API key.

And if we decide a particular deployment doesn't need it. Then we can leave it off.

The API key for testing and development can be shared privately

FAQ refactor (crash recorded)

The way that the FAQ expandable list is implemented now is a bit strange as it's taking measurements of the screen and adjusting how things are rendered. This has caused a crash of IllegalStateException.

androidx.fragment.app.Fragment.requireContext Fragment.java:805
androidx.fragment.app.Fragment.getResources Fragment.java:869
edu.uw.covidsafe.ui.faq.FaqFragment.GetDipsFromPixel FaqFragment.java:152
edu.uw.covidsafe.ui.faq.FaqFragment$1.onGlobalLayout FaqFragment.java:140
android.view.ViewTreeObserver.dispatchOnGlobalLayout ViewTreeObserver.java:1070
android.view.ViewRootImpl.performTraversals ViewRootImpl.java:3158
android.view.ViewRootImpl.doTraversal ViewRootImpl.java:2169
android.view.ViewRootImpl$TraversalRunnable.run ViewRootImpl.java:8933
android.view.Choreographer$CallbackRecord.run Choreographer.java:996
android.view.Choreographer.doCallbacks Choreographer.java:794
android.view.Choreographer.doFrame Choreographer.java:729
android.view.Choreographer$FrameDisplayEventReceiver.run Choreographer.java:981
android.os.Handler.handleCallback Handler.java:883
android.os.Handler.dispatchMessage Handler.java:100
android.os.Looper.loop Looper.java:237
android.app.ActivityThread.main ActivityThread.java:7811
java.lang.reflect.Method.invoke Method.java
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run RuntimeInit.java:493
com.android.internal.os.ZygoteInit.main ZygoteInit.java:1076

Probably a better way to do this is something like having the question and answer in two different constraint layouts. And if you tap the question layout, it will toggle the visibility of the answer layout. Kind of like how we are doing it in the symptom tracker form.

Better reverse geocoding

Right now we are using the Geocoder API for Android to convert from GPS coordinates to real addresses. The Geocoder API isn't that great for resolving to real addresses.

It would be better to be able to use a cloud service like this for address resolution:
https://developers.google.com/maps/documentation/geocoding/usage-and-billing

The barrier of course is pricing.

However, given that there is a real potential for adoption, individual states could potentially be able to fund cloud services like this.

The ask in this issue is to be able to add in the feature for development testing and have a flag to turn it on or off.

So if we decide we want it, we can turn it on, and add in the appropriate API key.

And if we decide a particular deployment doesn't need it. Then we can leave it off.

The developers for this can share the API key privately for testing.

Lag when Google Maps is open

A user has reported that after Google Maps was opened, our app was very laggy and slow. And sometimes it would freeze. And this was for every single function.
But after shutting down Google Maps, our app performed as normal.

com.instacart.library.truetime.SntpClient.requestTime

SntpClient.java, line 116
java.net.PlainDatagramSocketImpl.send PlainDatagramSocketImpl.java
java.net.DatagramSocket.send DatagramSocket.java:696
com.instacart.library.truetime.SntpClient.requestTime SntpClient.java:116
com.instacart.library.truetime.TrueTime.requestTime TrueTime.java:133
com.instacart.library.truetime.TrueTimeRx$4$1$2.subscribe TrueTimeRx.java:211
io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual FlowableCreate.java:72
io.reactivex.Flowable.subscribe Flowable.java:14349
io.reactivex.Flowable.subscribe Flowable.java:14295
io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run FlowableSubscribeOn.java:82
io.reactivex.internal.schedulers.ScheduledRunnable.run ScheduledRunnable.java:66
io.reactivex.internal.schedulers.ScheduledRunnable.call ScheduledRunnable.java:57
java.util.concurrent.FutureTask.run FutureTask.java:237

We are using TrueTime, an NTP library to get accurate times:
https://github.com/instacart/truetime-android

Check for instances of 'TrueTime' throughout the code.
This is an issue with their codebase.
Just swallow the exception as per here: instacart/truetime-android#101

We can use regular phone clock time if the NTP fails.

Broadcast button UI is confusing

If the user has GPS on, but Bluetooth off, the Broadcasting button on the home screen is on. A user has reported this to be confusing.

This is not a correctness bug, and it is intentional. Rather it is a UI bug.
Have engaged our designers so this state of GPS on and Bluetooth off is represented in a way that is less confusing to users.

Add multiple phone contacts at once

Currently you can only add phone contacts one at a time.

Allow user to add multiple contacts at once.

Best way to do this is to create an empty project of your own with code to do this.
Then integrate that code into this project.
Then make the pull request.

You should be able to log the contact's name, phone number, and URI to their avatar.

Display of usage statistics

It would be really useful to show usage statistics like how many people globally or locally are using the app.

Displaying these statistics in some visual or textual form will help immensely in conveying credibility and legitimacy of the app.

Otherwise the user could simply think no one else is using it and delete the app afterwards.

More details forthcoming on the requirements for this.

androidx.fragment.app.Fragment.instantiate

Fragment.java, line 548
java.lang.NoSuchMethodException: edu.uw.covidsafe.symptoms.SymptomConfirmFragment. []

java.lang.Class.getConstructor0 Class.java:2332
java.lang.Class.getConstructor Class.java:1728
androidx.fragment.app.Fragment.instantiate Fragment.java:548
androidx.fragment.app.FragmentContainer.instantiate FragmentContainer.java:57
androidx.fragment.app.FragmentManager$3.instantiate FragmentManager.java:390
androidx.fragment.app.FragmentStateManager. FragmentStateManager.java:74
androidx.fragment.app.FragmentManager.restoreSaveState FragmentManager.java:2452
androidx.fragment.app.FragmentController.restoreSaveState FragmentController.java:196
androidx.fragment.app.FragmentActivity.onCreate FragmentActivity.java:287
androidx.appcompat.app.AppCompatActivity.onCreate AppCompatActivity.java:106
edu.uw.covidsafe.ui.MainActivity.onCreate MainActivity.java:66
android.app.Activity.performCreate Activity.java:7955

This seems to suggest that something is trying to call the empty constructor for SymptomConfirmFragment (there is none defined). But it is unclear how this is being called as there is nowhere in the code where that fragment is called with no arguments.

To provide some context of where this comes in:
When you submit a symptom report, the data in the form is packaged up into a SymptomsRecord object which is passed by a one-argument constructor into SymptomConfirmFragment which just displays the information in a summary page.
For some reason something is expecting/calling an empty constructor for this class.

This is symptomatic of a deeper root cause.

Sending representative coarse location in infection report

In the infection report, we currently send the last logged GPS location with a precision of 4 (most precise).

Ideally what we want is to send a much more coarsened GPS location that geographically encompasses the full 2 weeks of GPS logs on the phone.

If you want to work on this issue, please discuss it with me as there some others we should discuss it with, that could help with how this should go about being implemented.

Phone authentication mechanism

It would be really great if we could have phone authentication.

The barrier though is pricing:
https://firebase.google.com/pricing/?gclid=CjwKCAjw-YT1BRAFEiwAd2WRtqv5Ps1opIYfvqQkJPPTdr7v5JxUZrIGcY3bmn75SzRISrGD0GNf7RoCb_oQAvD_BwE

However, given that there is a real potential for adoption, individual states could potentially be able to fund cloud services like this.

The ask in this issue is to be able to add in the Firebase auth for development testing and have a flag to turn it on or off.

So if we decide we want it, we can turn it on, and add in the appropriate API key.

And if we decide a particular deployment doesn't need it. Then we can leave it off.

A good place to have this is during the onboarding sequence between the "Get started" page and the "Permissions" page.

The developers for this can share the API key privately for testing.

Add phone contacts

Currently you can add phone contacts, but it is a bit hidden. You have to go to Health report > Diagnosis > Prepare for contact tracer interview > go to step 3

Can we also have this functionality as a separate tab under the Contact log fragment?

So if you click on Contact log, there is one tab showing GPS locations, and one tab allowing users to add / edit contacts.

This should only require replicating the existing code to do this + tabbing functionality.

This is related to issue #34

[Perf Refactor] Optimize the settings screen UI.

While trying to add an entry for the language selector in the app, found that this we are using multiple recycler views, we can achieve the same by using less or single recylcer, need to finish this before adding an entry for language settings. This will make it easy to support more entries in future.

MaterialCalendarView crash

API it occurred on: 6.0.1

Possibility related to low API.

com.prolificinteractive.materialcalendarview.CalendarDay.toString
CalendarDay.java, line 153

java.lang.IntegralToString.convertInt IntegralToString.java:216
java.lang.IntegralToString.appendInt IntegralToString.java:173
java.lang.StringBuilder.append StringBuilder.java:139
com.prolificinteractive.materialcalendarview.CalendarDay.toString CalendarDay.java:153
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:125
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127

com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127

com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setDateSelected CalendarPagerAdapter.java:307
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setDateSelected WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setDateSelected MaterialCalendarView.java:826
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setSelectedDate MaterialCalendarView.java:814
edu.uw.covidsafe.symptoms.SymptomTrackerFragment.updateFeaturedDate SymptomTrackerFragment.java:174
edu.uw.covidsafe.symptoms.SymptomTrackerFragment$2.onDateSelected SymptomTrackerFragment.java:127
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchOnDateSelected MaterialCalendarView.java:1364
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onDateUnselected MaterialCalendarView.java:1500
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.validateSelectedDates CalendarPagerAdapter.java:356
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.invalidateSelectedDates CalendarPagerAdapter.java:343
com.prolificinteractive.materialcalendarview.CalendarPagerAdapter.setRangeDates CalendarPagerAdapter.java:284
com.prolificinteractive.materialcalendarview.WeekPagerAdapter.setRangeDates WeekPagerAdapter.java:9
com.prolificinteractive.materialcalendarview.MaterialCalendarView.setRangeDates MaterialCalendarView.java:1135
com.prolificinteractive.materialcalendarview.MaterialCalendarView.commit MaterialCalendarView.java:1988
com.prolificinteractive.materialcalendarview.MaterialCalendarView.access$2200 MaterialCalendarView.java:69
com.prolificinteractive.materialcalendarview.MaterialCalendarView$StateBuilder.commit MaterialCalendarView.java:1922
com.prolificinteractive.materialcalendarview.MaterialCalendarView.onRestoreInstanceState MaterialCalendarView.java:1109
android.view.View.dispatchRestoreInstanceState View.java:14764
com.prolificinteractive.materialcalendarview.MaterialCalendarView.dispatchRestoreInstanceState MaterialCalendarView.java:1130
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:3178
androidx.fragment.app.Fragment.restoreViewState Fragment.java:573
androidx.fragment.app.FragmentStateManager.restoreViewState FragmentStateManager.java:346
androidx.fragment.app.FragmentManager.moveToState FragmentManager.java:1187
androidx.fragment.app.FragmentManager.moveToState FragmentManager.java:1354
androidx.fragment.app.FragmentManager.moveFragmentToExpectedState FragmentManager.java:1432
androidx.fragment.app.FragmentManager.moveToState FragmentManager.java:1495
androidx.fragment.app.BackStackRecord.executeOps BackStackRecord.java:447
androidx.fragment.app.FragmentManager.executeOps FragmentManager.java:2167
androidx.fragment.app.FragmentManager.executeOpsTogether FragmentManager.java:1990
androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute FragmentManager.java:1945
androidx.fragment.app.FragmentManager.execSingleAction FragmentManager.java:1816
androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss BackStackRecord.java:303
androidx.fragment.app.FragmentPagerAdapter.finishUpdate FragmentPagerAdapter.java:238
androidx.viewpager.widget.ViewPager.populate ViewPager.java:1244
androidx.viewpager.widget.ViewPager.populate ViewPager.java:1092
androidx.viewpager.widget.ViewPager.onMeasure ViewPager.java:1622
android.view.View.measure View.java:18805
androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren ConstraintLayout.java:1227
androidx.constraintlayout.widget.ConstraintLayout.onMeasure ConstraintLayout.java:1572
android.view.View.measure View.java:18805
androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren ConstraintLayout.java:1227
androidx.constraintlayout.widget.ConstraintLayout.onMeasure ConstraintLayout.java:1572
android.view.View.measure View.java:18805
androidx.appcompat.widget.ContentFrameLayout.onMeasure ContentFrameLayout.java:143
android.view.View.measure View.java:18805
androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure ActionBarOverlayLayout.java:403
android.view.View.measure View.java:18805

Allow user to import past location history from Google account

We want users to be able to import their GPS locations from the the location history in their Google account. There should be a button in the settings, where if you click on it, you will be prompted to enter your Google account credentials. You should then be able to follow the instructions to export your location history and download it to your phone. And our app should be able to just import it. This should closely mirror the flow in the MIT Private Kit app.

Is there a way to manually log contacts?

Hi, I installed the Android demo application today. Great work. I am really excited about this. I am very very happy with the communication of permission use especially. The button for broadcasting is very nicely designed and makes it clear when my information is being broadcasted.

I am just wondering if there is a way to manually log known contacts in addition to the broadcasted information. I couldn't see a way to do this. It could be useful while adoption of contact tracing applications is still relatively low, and to have a nice centralized location for that information for manual contact tracing efforts if I or someone I know gets sick later.

strings.xml for Spanish

  1. Make sure all strings throughout the code is merged into strings.xml.
  2. Organize strings.xml
  3. Translate into Spanish
  4. Have an option in the Settings to toggle between the languages

edu.uw.covidsafe.gps.GpsRecord.getLat

GpsRecord.java, line 111
java.lang.StringToReal.invalidReal StringToReal.java:63
java.lang.StringToReal.parseDouble StringToReal.java:267
java.lang.Double.parseDouble Double.java:301
edu.uw.covidsafe.gps.GpsRecord.getLat GpsRecord.java:111
edu.uw.covidsafe.comms.PullFromServerTask.intersect PullFromServerTask.java:385
edu.uw.covidsafe.comms.PullFromServerTask.getMessages PullFromServerTask.java:339
edu.uw.covidsafe.comms.PullFromServerTask.doInBackground PullFromServerTask.java:170
edu.uw.covidsafe.comms.PullFromServerTask.doInBackground PullFromServerTask.java:55
android.os.AsyncTask$2.call AsyncTask.java:292
java.util.concurrent.FutureTask.run FutureTask.java:237
android.os.AsyncTask$SerialExecutor$1.run AsyncTask.java:231
java.util.concurrent.ThreadPoolExecutor.runWorker ThreadPoolExecutor.java:1112
java.util.concurrent.ThreadPoolExecutor$Worker.run ThreadPoolExecutor.java:587
java.lang.Thread.run Thread.java:818

This is a tricky and potentially deeper issue that is hard to determine from the stacktrace alone. But basically the issue is that something went wrong when decrypting the GPS latitude, and the response to an error is to return an empty string. Most likely what happened is that something went wrong during the encryption process, where some unexpected value was passed in, and nothing was saved. And the decryption process may have been attempting to decrypt a null value.

Most likely some part is trying to create a GpsRecord but does not have a latitude and longitude. Maybe the phone was not able to get a Location, and so passed null/empty values to the GpsRecord which went undetected. Best solution is to figure out where is the part where we cannot log a latitude and longitude, and display message to the user that we cannot proceed because we are unable to find a location. And then don't add a GpsRecord at that point.

EDIT: I know the issue, the issue is that the user running into this was running an API which is too low 5.1. And we throw an error in this case.

Move bluetooth, gps and notifications preferences to one source of truth file

Currently the shared preferences are all over the code, initiative to move the preferences for bluetooth, gps and to move one source of truth/file. This will make it easy for us to work once the codebase grows and also figuring out bugs around this point.

This single PR will put all of them in one place.

android.app.ActivityThread$H.handleMessage

ActivityThread.java, line 1893
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{8ccfc69 u0 edu.uw.covidsafe/.LoggingService}

Thought this was fixed, but maybe it was not.

This happened on a phone with API 9.

If this issue is related to API version, then #50 will deal with this also.

Dot indicators in month view

For the symptom tracker and GPS log, you can navigate through the days using a month view and a week view.

In the week view, we have dots indicating days where a record exists. But these indicators do not exist in the month view.

I didn't have much time to dig into this, but I believe the current calendar object we are using doesn't support these indicators / doesn't have an obvious API to add them.

The todo is basically to have these indicators and it might mean having to use another calendar library.

Weird paging behavior

The paging behavior for the contact tracer interview log has a few bugs:
e.g. Click export to email, when you return to the activity, it doesn't return to the right page
e.g. When you click done with the interview prep, it goes to the 'Symptoms' tab instead of the 'Diagnosis' tab

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.