├── app
├── buildNumber
├── versionName
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── drawable
│ │ │ │ ├── ic_down_arrow.xml
│ │ │ │ ├── ic_tick.png
│ │ │ │ ├── settings_option_background.xml
│ │ │ │ ├── divider_binary_radio_group.xml
│ │ │ │ ├── ic_onboarding_circle.xml
│ │ │ │ ├── error_background.xml
│ │ │ │ ├── ic_circle_red.xml
│ │ │ │ ├── new_label_background.xml
│ │ │ │ ├── status_option_background.xml
│ │ │ │ ├── question_not_selected_background.xml
│ │ │ │ ├── view_cornered_background.xml
│ │ │ │ ├── black_border_background.xml
│ │ │ │ ├── ic_stroked_circle_red.xml
│ │ │ │ ├── status_option_icon_background.xml
│ │ │ │ ├── area_risk_red_background.xml
│ │ │ │ ├── ic_bullet_point.xml
│ │ │ │ ├── ic_circle_green.xml
│ │ │ │ ├── question_selected_background.xml
│ │ │ │ ├── area_risk_amber_background.xml
│ │ │ │ ├── area_risk_green_background.xml
│ │ │ │ ├── area_risk_neutral_background.xml
│ │ │ │ ├── area_risk_yellow_background.xml
│ │ │ │ ├── splash_screen.xml
│ │ │ │ ├── area_risk_black_background.xml
│ │ │ │ ├── area_risk_maroon_background.xml
│ │ │ │ ├── ic_bullet_point_primary_grey.xml
│ │ │ │ ├── ic_red_circle.xml
│ │ │ │ ├── ic_blue_circle.xml
│ │ │ │ ├── ic_circle_green_with_border.xml
│ │ │ │ ├── ic_tick_light.xml
│ │ │ │ ├── ic_arrow_back_primary.xml
│ │ │ │ ├── ic_positive_symptom.xml
│ │ │ │ ├── ic_more_vert.xml
│ │ │ │ ├── ic_arrow_back_white.xml
│ │ │ │ ├── ic_tick_green.xml
│ │ │ │ ├── ic_numbered_bullet_point.xml
│ │ │ │ ├── user_data_item_background.xml
│ │ │ │ ├── ic_close_white.xml
│ │ │ │ ├── ic_close_primary.xml
│ │ │ │ ├── view_area_risk_indicator.xml
│ │ │ │ ├── ic_manufacturer.xml
│ │ │ │ ├── ic_accordion_collapse.xml
│ │ │ │ ├── ic_alert.xml
│ │ │ │ ├── ic_delete_venue_visit.xml
│ │ │ │ ├── ic_exclamation.xml
│ │ │ │ ├── initial_card_background.xml
│ │ │ │ ├── ic_isolation_hub.xml
│ │ │ │ ├── radio_selected_background.xml
│ │ │ │ ├── radio_not_selected_background.xml
│ │ │ │ ├── ic_negative_symptom.xml
│ │ │ │ └── ic_policy_international_travel.xml
│ │ │ ├── raw
│ │ │ │ └── success.mp3
│ │ │ ├── drawable-night
│ │ │ │ └── ic_tick.png
│ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_notification.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-ldpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_notification.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ ├── ic_notification.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_notification.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_notification.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable-nodpi
│ │ │ │ ├── tick_final_2004.png
│ │ │ │ ├── tick_final_2005.png
│ │ │ │ ├── tick_final_2006.png
│ │ │ │ ├── tick_final_2007.png
│ │ │ │ ├── tick_final_2008.png
│ │ │ │ ├── tick_final_2009.png
│ │ │ │ ├── tick_final_2010.png
│ │ │ │ ├── tick_final_2011.png
│ │ │ │ ├── tick_final_2012.png
│ │ │ │ ├── tick_final_2013.png
│ │ │ │ ├── tick_final_2014.png
│ │ │ │ ├── tick_final_2015.png
│ │ │ │ ├── tick_final_2016.png
│ │ │ │ ├── tick_final_2017.png
│ │ │ │ ├── tick_final_2018.png
│ │ │ │ ├── tick_final_2019.png
│ │ │ │ ├── tick_final_2020.png
│ │ │ │ ├── tick_final_2021.png
│ │ │ │ ├── tick_final_2022.png
│ │ │ │ ├── tick_final_2023.png
│ │ │ │ ├── tick_final_2024.png
│ │ │ │ ├── tick_final_2025.png
│ │ │ │ ├── tick_final_2026.png
│ │ │ │ ├── tick_final_2027.png
│ │ │ │ ├── tick_final_2028.png
│ │ │ │ ├── tick_final_2029.png
│ │ │ │ ├── tick_final_2030.png
│ │ │ │ ├── tick_final_2031.png
│ │ │ │ ├── tick_final_2032.png
│ │ │ │ ├── tick_final_2033.png
│ │ │ │ ├── tick_final_2034.png
│ │ │ │ ├── tick_final_2035.png
│ │ │ │ ├── tick_final_2036.png
│ │ │ │ ├── tick_final_2037.png
│ │ │ │ ├── tick_final_2038.png
│ │ │ │ ├── tick_final_2039.png
│ │ │ │ ├── tick_final_2040.png
│ │ │ │ ├── tick_final_2041.png
│ │ │ │ ├── tick_final_2042.png
│ │ │ │ ├── tick_final_2043.png
│ │ │ │ ├── tick_final_2044.png
│ │ │ │ ├── tick_final_2045.png
│ │ │ │ ├── tick_final_2046.png
│ │ │ │ ├── tick_final_2047.png
│ │ │ │ ├── tick_final_2048.png
│ │ │ │ ├── tick_final_2049.png
│ │ │ │ ├── tick_final_2050.png
│ │ │ │ ├── tick_final_2051.png
│ │ │ │ ├── tick_final_2052.png
│ │ │ │ ├── tick_final_2053.png
│ │ │ │ ├── tick_final_2054.png
│ │ │ │ ├── tick_final_2055.png
│ │ │ │ ├── tick_final_2056.png
│ │ │ │ ├── tick_final_2057.png
│ │ │ │ ├── tick_final_2058.png
│ │ │ │ ├── tick_final_2059.png
│ │ │ │ ├── tick_final_2060.png
│ │ │ │ ├── tick_final_2061.png
│ │ │ │ ├── tick_final_2062.png
│ │ │ │ ├── tick_final_2063.png
│ │ │ │ ├── tick_final_2064.png
│ │ │ │ ├── tick_final_2065.png
│ │ │ │ ├── tick_final_2066.png
│ │ │ │ ├── tick_final_2067.png
│ │ │ │ ├── tick_final_2068.png
│ │ │ │ ├── tick_final_2069.png
│ │ │ │ ├── tick_final_2070.png
│ │ │ │ ├── tick_final_2071.png
│ │ │ │ ├── tick_final_2072.png
│ │ │ │ ├── tick_final_2073.png
│ │ │ │ ├── tick_final_2074.png
│ │ │ │ ├── tick_final_2075.png
│ │ │ │ ├── tick_final_2076.png
│ │ │ │ ├── tick_final_2077.png
│ │ │ │ ├── tick_final_2078.png
│ │ │ │ ├── tick_final_2079.png
│ │ │ │ ├── tick_final_2080.png
│ │ │ │ ├── tick_final_2081.png
│ │ │ │ ├── tick_final_2082.png
│ │ │ │ ├── tick_final_2083.png
│ │ │ │ ├── qr_code_help_poster.png
│ │ │ │ ├── qr_code_help_poster_welsh.png
│ │ │ │ ├── qr_code_help_poster_hospitality.png
│ │ │ │ └── qr_code_help_poster_hospitality_welsh.png
│ │ │ ├── drawable-night-nodpi
│ │ │ │ ├── tick_final_2004.png
│ │ │ │ ├── tick_final_2005.png
│ │ │ │ ├── tick_final_2006.png
│ │ │ │ ├── tick_final_2007.png
│ │ │ │ ├── tick_final_2008.png
│ │ │ │ ├── tick_final_2009.png
│ │ │ │ ├── tick_final_2010.png
│ │ │ │ ├── tick_final_2011.png
│ │ │ │ ├── tick_final_2012.png
│ │ │ │ ├── tick_final_2013.png
│ │ │ │ ├── tick_final_2014.png
│ │ │ │ ├── tick_final_2015.png
│ │ │ │ ├── tick_final_2016.png
│ │ │ │ ├── tick_final_2017.png
│ │ │ │ ├── tick_final_2018.png
│ │ │ │ ├── tick_final_2019.png
│ │ │ │ ├── tick_final_2020.png
│ │ │ │ ├── tick_final_2021.png
│ │ │ │ ├── tick_final_2022.png
│ │ │ │ ├── tick_final_2023.png
│ │ │ │ ├── tick_final_2024.png
│ │ │ │ ├── tick_final_2025.png
│ │ │ │ ├── tick_final_2026.png
│ │ │ │ ├── tick_final_2027.png
│ │ │ │ ├── tick_final_2028.png
│ │ │ │ ├── tick_final_2029.png
│ │ │ │ ├── tick_final_2030.png
│ │ │ │ ├── tick_final_2031.png
│ │ │ │ ├── tick_final_2032.png
│ │ │ │ ├── tick_final_2033.png
│ │ │ │ ├── tick_final_2034.png
│ │ │ │ ├── tick_final_2035.png
│ │ │ │ ├── tick_final_2036.png
│ │ │ │ ├── tick_final_2037.png
│ │ │ │ ├── tick_final_2038.png
│ │ │ │ ├── tick_final_2039.png
│ │ │ │ ├── tick_final_2040.png
│ │ │ │ ├── tick_final_2041.png
│ │ │ │ ├── tick_final_2042.png
│ │ │ │ ├── tick_final_2043.png
│ │ │ │ ├── tick_final_2044.png
│ │ │ │ ├── tick_final_2045.png
│ │ │ │ ├── tick_final_2046.png
│ │ │ │ ├── tick_final_2047.png
│ │ │ │ ├── tick_final_2048.png
│ │ │ │ ├── tick_final_2049.png
│ │ │ │ ├── tick_final_2050.png
│ │ │ │ ├── tick_final_2051.png
│ │ │ │ ├── tick_final_2052.png
│ │ │ │ ├── tick_final_2053.png
│ │ │ │ ├── tick_final_2054.png
│ │ │ │ ├── tick_final_2055.png
│ │ │ │ ├── tick_final_2056.png
│ │ │ │ ├── tick_final_2057.png
│ │ │ │ ├── tick_final_2058.png
│ │ │ │ ├── tick_final_2059.png
│ │ │ │ ├── tick_final_2060.png
│ │ │ │ ├── tick_final_2061.png
│ │ │ │ ├── tick_final_2062.png
│ │ │ │ ├── tick_final_2063.png
│ │ │ │ ├── tick_final_2064.png
│ │ │ │ ├── tick_final_2065.png
│ │ │ │ ├── tick_final_2066.png
│ │ │ │ ├── tick_final_2067.png
│ │ │ │ ├── tick_final_2068.png
│ │ │ │ ├── tick_final_2069.png
│ │ │ │ ├── tick_final_2070.png
│ │ │ │ ├── tick_final_2071.png
│ │ │ │ ├── tick_final_2072.png
│ │ │ │ ├── tick_final_2073.png
│ │ │ │ ├── tick_final_2074.png
│ │ │ │ ├── tick_final_2075.png
│ │ │ │ ├── tick_final_2076.png
│ │ │ │ ├── tick_final_2077.png
│ │ │ │ ├── tick_final_2078.png
│ │ │ │ ├── tick_final_2079.png
│ │ │ │ ├── tick_final_2080.png
│ │ │ │ ├── tick_final_2081.png
│ │ │ │ ├── tick_final_2082.png
│ │ │ │ └── tick_final_2083.png
│ │ │ ├── values-sw600dp
│ │ │ │ └── styles.xml
│ │ │ ├── layout
│ │ │ │ ├── view_divider.xml
│ │ │ │ ├── fragment_submit_selected_symptoms.xml
│ │ │ │ ├── view_toolbar_primary.xml
│ │ │ │ ├── view_toolbar_background.xml
│ │ │ │ ├── view_logo.xml
│ │ │ │ ├── accordion_how_we_calculate_close_contact.xml
│ │ │ │ ├── accordion_how_we_calculate_close_contact_wales.xml
│ │ │ │ ├── accordion_how_we_calculate_close_contact_england.xml
│ │ │ │ ├── include_onboarding_toolbar.xml
│ │ │ │ ├── view_paragraph.xml
│ │ │ │ ├── item_venue_visit_header.xml
│ │ │ │ └── dialog_multiline_title.xml
│ │ │ ├── drawable-ldrtl
│ │ │ │ └── status_option_icon_background.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── xml
│ │ │ │ └── network_config.xml
│ │ │ ├── menu
│ │ │ │ └── menu_edit.xml
│ │ │ └── values-land
│ │ │ │ └── dimens.xml
│ │ ├── resources
│ │ │ └── jacoco-agent.properties
│ │ └── java
│ │ │ └── uk
│ │ │ └── nhs
│ │ │ └── nhsx
│ │ │ └── covid19
│ │ │ └── android
│ │ │ └── app
│ │ │ ├── receiver
│ │ │ ├── AvailabilityState.kt
│ │ │ └── AvailabilityStateProvider.kt
│ │ │ ├── analytics
│ │ │ ├── TestOrderType.kt
│ │ │ ├── AnalyticsAggregatorReceiver.kt
│ │ │ ├── UpdateStatusStorage.kt
│ │ │ ├── SubmittedOnboardingAnalyticsProvider.kt
│ │ │ └── NetworkStatsInterceptor.kt
│ │ │ ├── util
│ │ │ ├── Base64Encoder.kt
│ │ │ ├── UUIDGenerator.kt
│ │ │ ├── ListUtils.kt
│ │ │ ├── BooleanUtils.kt
│ │ │ ├── AndroidUUIDGenerator.kt
│ │ │ ├── Base64Decoder.kt
│ │ │ ├── ViewModelUtils.kt
│ │ │ ├── AndroidBase64Encoder.kt
│ │ │ ├── viewutils
│ │ │ │ ├── AreSystemLevelAnimationsEnabled.kt
│ │ │ │ ├── ViewGroupUtils.kt
│ │ │ │ └── ThemeUtils.kt
│ │ │ ├── adapters
│ │ │ │ ├── BigDecimalAdapter.kt
│ │ │ │ ├── PolicyIconAdapter.kt
│ │ │ │ ├── TranslatableStringAdapter.kt
│ │ │ │ ├── ColorSchemeAdapter.kt
│ │ │ │ ├── LocalDateAdapter.kt
│ │ │ │ ├── ContentBlockTypeAdapter.kt
│ │ │ │ └── LocalMessageTypeAdapter.kt
│ │ │ ├── FileUtils.kt
│ │ │ ├── crashreporting
│ │ │ │ ├── SetDefaultUncaughtExceptionHandler.kt
│ │ │ │ └── RemoteServiceExceptionReportRateLimiter.kt
│ │ │ ├── BroadcastProvider.kt
│ │ │ └── WorkerUtils.kt
│ │ │ ├── battery
│ │ │ ├── BatteryOptimizationChecker.kt
│ │ │ ├── AndroidBatteryOptimizationChecker.kt
│ │ │ └── BatteryOptimizationAcknowledgementProvider.kt
│ │ │ ├── remote
│ │ │ ├── data
│ │ │ │ ├── VirologyTestKitType.kt
│ │ │ │ ├── HashResponse.kt
│ │ │ │ ├── ListOfFilesResponse.kt
│ │ │ │ ├── SupportedCountry.kt
│ │ │ │ ├── IsolationPaymentCreateTokenRequest.kt
│ │ │ │ ├── VirologyCtaExchangeRequest.kt
│ │ │ │ ├── VirologyTestResultRequestBody.kt
│ │ │ │ ├── IsolationPaymentUrlRequest.kt
│ │ │ │ ├── RiskyPostCodeDistributionResponse.kt
│ │ │ │ ├── VirologyTestOrderResponse.kt
│ │ │ │ ├── IsolationPaymentResponse.kt
│ │ │ │ ├── RiskyVenueConfigurationResponse.kt
│ │ │ │ ├── RiskyVenuesCircuitBreakerDto.kt
│ │ │ │ ├── VirologyCtaExchangeResponse.kt
│ │ │ │ ├── VirologyTestResultResponse.kt
│ │ │ │ └── QuestionnaireResponse.kt
│ │ │ ├── EmptyApi.kt
│ │ │ ├── RiskyVenuesApi.kt
│ │ │ ├── LocalStatsApi.kt
│ │ │ ├── LocalMessagesApi.kt
│ │ │ ├── QuestionnaireApi.kt
│ │ │ ├── AppAvailabilityApi.kt
│ │ │ ├── ExposureConfigurationApi.kt
│ │ │ ├── IsolationConfigurationApi.kt
│ │ │ ├── RiskyPostDistrictsApi.kt
│ │ │ ├── RiskyVenueConfigurationApi.kt
│ │ │ ├── KeysSubmissionApi.kt
│ │ │ ├── RemoteServiceExceptionCrashReportSubmissionApi.kt
│ │ │ ├── AnalyticsApi.kt
│ │ │ ├── EpidemiologyDataApi.kt
│ │ │ └── KeysDistributionApi.kt
│ │ │ ├── exposure
│ │ │ ├── encounter
│ │ │ │ ├── RandomNonRiskyExposureWindowsLimiter.kt
│ │ │ │ ├── calculation
│ │ │ │ │ ├── DayRisk.kt
│ │ │ │ │ └── RiskScoreCalculatorProvider.kt
│ │ │ │ ├── GetRiskyContactEncounterDate.kt
│ │ │ │ ├── AndroidRandomNonRiskyExposureWindowsLimiter.kt
│ │ │ │ └── HasSuccessfullyProcessedNewExposureProvider.kt
│ │ │ ├── questionnaire
│ │ │ │ ├── review
│ │ │ │ │ ├── ReviewData.kt
│ │ │ │ │ └── QuestionnaireOutcome.kt
│ │ │ │ └── GetLastDoseDateLimit.kt
│ │ │ ├── ExposureNotificationActivationResult.kt
│ │ │ └── sharekeys
│ │ │ │ ├── SubmitObfuscationData.kt
│ │ │ │ └── ShareKeysNavigation.kt
│ │ │ ├── common
│ │ │ ├── BuildVersionProvider.kt
│ │ │ ├── CircuitBreakerResult.kt
│ │ │ ├── RandomObfuscationRateLimiter.kt
│ │ │ ├── AppInfo.kt
│ │ │ ├── bluetooth
│ │ │ │ └── EnableBluetoothViewModel.kt
│ │ │ ├── postcode
│ │ │ │ ├── GetLocalAuthorityName.kt
│ │ │ │ ├── PostCodeValidator.kt
│ │ │ │ ├── PostCodeProvider.kt
│ │ │ │ └── LocalAuthorityProvider.kt
│ │ │ └── Lce.kt
│ │ │ ├── DecommissioningClosureScreenActivity.kt
│ │ │ ├── edgecases
│ │ │ └── DeviceNotSupportedActivity.kt
│ │ │ ├── qrcode
│ │ │ ├── BarcodeDetectorBuilder.kt
│ │ │ ├── AndroidBarcodeDetectorBuilder.kt
│ │ │ ├── riskyvenues
│ │ │ │ └── FilterOutdatedVisits.kt
│ │ │ └── QrCodeScanResult.kt
│ │ │ ├── payment
│ │ │ └── IsolationPaymentTokenState.kt
│ │ │ ├── packagemanager
│ │ │ ├── PackageManager.kt
│ │ │ └── AndroidPackageManager.kt
│ │ │ ├── permissions
│ │ │ ├── PermissionsManager.kt
│ │ │ └── AndroidPermissionsManager.kt
│ │ │ ├── onboarding
│ │ │ ├── DataAndPrivacyViewModel.kt
│ │ │ ├── PolicyUpdateViewModel.kt
│ │ │ └── OnboardingCompletedProvider.kt
│ │ │ ├── localstats
│ │ │ └── FetchLocalStats.kt
│ │ │ ├── testordering
│ │ │ ├── unknownresult
│ │ │ │ ├── UnknownTestResultViewModel.kt
│ │ │ │ └── ReceivedUnknownTestResultProvider.kt
│ │ │ ├── SubmitFakeExposureWindows.kt
│ │ │ └── GetEmptyExposureWindowSubmissionCount.kt
│ │ │ ├── state
│ │ │ ├── CalculateContactExpiryDate.kt
│ │ │ ├── CalculateExpirationNotificationTime.kt
│ │ │ └── IsolationExpirationAlarmProvider.kt
│ │ │ ├── widgets
│ │ │ ├── HeadingTextView.kt
│ │ │ └── UnderlinedButton.kt
│ │ │ ├── status
│ │ │ └── LastAppRatingStartedDateProvider.kt
│ │ │ ├── availability
│ │ │ └── AppStoreUtils.kt
│ │ │ ├── DecommissioningNotificationSentProvider.kt
│ │ │ └── questionnaire
│ │ │ └── review
│ │ │ └── RiskCalculator.kt
│ ├── scenarios
│ │ ├── res
│ │ │ ├── xml
│ │ │ │ └── filepaths.xml
│ │ │ ├── layout
│ │ │ │ ├── include_test_plain_text.xml
│ │ │ │ ├── main_activity.xml
│ │ │ │ ├── include_test_no_bullet_paragraph.xml
│ │ │ │ ├── include_test_bullet_paragraph.xml
│ │ │ │ ├── item_language.xml
│ │ │ │ └── activity_test_settings.xml
│ │ │ ├── drawable
│ │ │ │ └── rounded_corner.xml
│ │ │ └── menu
│ │ │ │ └── menu_debug.xml
│ │ └── java
│ │ │ └── uk
│ │ │ └── nhs
│ │ │ └── nhsx
│ │ │ └── covid19
│ │ │ └── android
│ │ │ └── app
│ │ │ ├── util
│ │ │ ├── Constants.kt
│ │ │ └── MockUUIDGenerator.kt
│ │ │ ├── remote
│ │ │ ├── MockEmptyApi.kt
│ │ │ ├── Interceptors.kt
│ │ │ ├── MockKeysSubmissionApi.kt
│ │ │ ├── MockRemoteServiceExceptionCrashReportSubmissionApi.kt
│ │ │ ├── MockEpidemiologyDataApi.kt
│ │ │ └── MockAnalyticsApi.kt
│ │ │ ├── status
│ │ │ └── ScenariosDateChangeBroadcastReceiver.kt
│ │ │ ├── exposure
│ │ │ └── encounter
│ │ │ │ └── MockRandomNonRiskyExposureWindowsLimiter.kt
│ │ │ ├── packagemanager
│ │ │ └── MockPackageManager.kt
│ │ │ └── di
│ │ │ └── MockApplicationComponent.kt
│ ├── production
│ │ └── java
│ │ │ └── uk
│ │ │ └── nhs
│ │ │ └── nhsx
│ │ │ └── covid19
│ │ │ └── android
│ │ │ └── app
│ │ │ ├── status
│ │ │ └── DebugFragment.kt
│ │ │ ├── AnalyticsReportActivity.kt
│ │ │ ├── scenariodialog
│ │ │ └── VirologyTestResultMockFragment.kt
│ │ │ └── di
│ │ │ └── module
│ │ │ └── QrScannerViewModelModule.kt
│ ├── productionRelease
│ │ └── java
│ │ │ └── uk
│ │ │ └── nhs
│ │ │ └── nhsx
│ │ │ └── covid19
│ │ │ └── android
│ │ │ └── app
│ │ │ └── remote
│ │ │ └── Interceptors.kt
│ ├── androidTestScenarios
│ │ └── java
│ │ │ └── uk
│ │ │ └── nhs
│ │ │ └── nhsx
│ │ │ └── covid19
│ │ │ └── android
│ │ │ └── app
│ │ │ ├── testhelpers
│ │ │ ├── retry
│ │ │ │ └── RetryFlakyTest.kt
│ │ │ ├── base
│ │ │ │ └── HasTestAppContext.kt
│ │ │ ├── robots
│ │ │ │ ├── QrCodeHelpRobot.kt
│ │ │ │ ├── QrScannerRobot.kt
│ │ │ │ ├── edgecases
│ │ │ │ │ ├── AgeRestrictionRobot.kt
│ │ │ │ │ └── EnableLocationRobot.kt
│ │ │ │ ├── HowAppWorksRobot.kt
│ │ │ │ └── interfaces
│ │ │ │ │ └── HasActivity.kt
│ │ │ ├── TestUpdateManager.kt
│ │ │ └── setup
│ │ │ │ └── LocalAuthoritySetupHelper.kt
│ │ │ ├── report
│ │ │ ├── Reported.kt
│ │ │ └── output
│ │ │ │ ├── Screenshot.kt
│ │ │ │ ├── Step.kt
│ │ │ │ └── Report.kt
│ │ │ ├── util
│ │ │ ├── ReflectUtils.kt
│ │ │ └── DoReToAwareAndroidJUnitRunner.kt
│ │ │ ├── AnalyticsReportActivityTest.kt
│ │ │ ├── payment
│ │ │ └── IsolationPaymentActivityTest.kt
│ │ │ ├── edgecases
│ │ │ ├── DeviceNotSupportedActivityTest.kt
│ │ │ └── AgeRestrictionActivityTest.kt
│ │ │ ├── qrcode
│ │ │ └── QrScannerActivityTest.kt
│ │ │ ├── onboarding
│ │ │ ├── PolicyUpdateActivityTest.kt
│ │ │ ├── postcode
│ │ │ │ └── PostCodeActivityTest.kt
│ │ │ └── DataAndPrivacyActivityTest.kt
│ │ │ ├── exposure
│ │ │ ├── AllowShareKeysActivityTest.kt
│ │ │ └── EnableExposureNotificationActivityTest.kt
│ │ │ ├── localstats
│ │ │ └── FetchLocalDataProgressActivityTest.kt
│ │ │ └── questionnaire
│ │ │ └── review
│ │ │ ├── NoSymptomsActivityTest.kt
│ │ │ └── ReviewSymptomsActivityTest.kt
│ ├── productionDebug
│ │ └── java
│ │ │ └── uk
│ │ │ └── nhs
│ │ │ └── nhsx
│ │ │ └── covid19
│ │ │ └── android
│ │ │ └── app
│ │ │ └── remote
│ │ │ └── Interceptors.kt
│ ├── scenariosDebug
│ │ └── AndroidManifest.xml
│ └── test
│ │ └── java
│ │ └── uk
│ │ └── nhs
│ │ └── nhsx
│ │ └── covid19
│ │ └── android
│ │ └── app
│ │ ├── utils
│ │ └── CoroutineTest.kt
│ │ └── testordering
│ │ └── unknownresult
│ │ └── UnknownTestResultViewModelTest.kt
├── .gitignore
├── dummy-keystore
└── libs
│ ├── riskscore-5.0.0.jar
│ └── play-services-nearby-exposurenotification-1.7.2-eap.aar
├── custom-a11y-rules
├── consumer-rules.pro
├── .gitignore
└── src
│ └── main
│ └── java
│ └── uk
│ └── nhs
│ └── nhsx
│ └── covid19
│ └── android
│ └── a11y
│ └── NhsIssueRegistry.kt
├── custom-ktlint-rules
├── consumer-rules.pro
├── .gitignore
└── src
│ └── main
│ ├── resources
│ └── META-INF
│ │ └── services
│ │ └── com.pinterest.ktlint.core.RuleSetProvider
│ └── java
│ └── uk
│ └── nhs
│ └── nhsx
│ └── covid19
│ └── android
│ └── ktlint
│ └── CustomRuleSetProvider.kt
├── .github
└── ISSUE_TEMPLATE
│ ├── config.yml
│ └── feature_request.md
├── scripts
├── uiTestCoverage.bat
├── unitTestCoverage.bat
├── .gitignore
├── uiTestCoverage
├── unitTestCoverage
└── publish.rb
├── screenshots.bat
├── docs
├── AppArchitecture.jpeg
├── DependencyInjectionGraph.jpeg
└── AppArchitectureTestingApproach.jpeg
├── settings.gradle
├── .editorconfig
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── screenshots
└── .gitignore
/app/buildNumber:
--------------------------------------------------------------------------------
1 | 358
--------------------------------------------------------------------------------
/app/versionName:
--------------------------------------------------------------------------------
1 | 6.0
--------------------------------------------------------------------------------
/custom-a11y-rules/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/custom-ktlint-rules/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_down_arrow.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/resources/jacoco-agent.properties:
--------------------------------------------------------------------------------
1 | output=none
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /src/scenarios/res/values-non/strings.xml
3 |
--------------------------------------------------------------------------------
/scripts/uiTestCoverage.bat:
--------------------------------------------------------------------------------
1 | gradlew -PjacocoEnabled=true uiTestCoverage
--------------------------------------------------------------------------------
/scripts/unitTestCoverage.bat:
--------------------------------------------------------------------------------
1 | gradlew -PjacocoEnabled=true unitTestCoverage
--------------------------------------------------------------------------------
/scripts/.gitignore:
--------------------------------------------------------------------------------
1 | .locale
2 | NHS_COVID-19-strings.zip
3 | StringSorter.jar
--------------------------------------------------------------------------------
/custom-a11y-rules/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | local.properties
4 | .idea
5 | build
--------------------------------------------------------------------------------
/custom-ktlint-rules/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | local.properties
4 | .idea
5 | build
6 |
--------------------------------------------------------------------------------
/scripts/uiTestCoverage:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ./gradlew -PjacocoEnabled=true uiTestCoverage
--------------------------------------------------------------------------------
/scripts/unitTestCoverage:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ./gradlew -PjacocoEnabled=true unitTestCoverage
--------------------------------------------------------------------------------
/app/dummy-keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/dummy-keystore
--------------------------------------------------------------------------------
/screenshots.bat:
--------------------------------------------------------------------------------
1 | gradlew -Pandroid.testInstrumentationRunnerArguments.takeScreenshots=true connectedScenariosDebugAndroidTest
2 |
--------------------------------------------------------------------------------
/docs/AppArchitecture.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/docs/AppArchitecture.jpeg
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':custom-a11y-rules'
2 | include ':custom-ktlint-rules'
3 | include ':app'
4 | rootProject.name = "NHS COVID-19"
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*.{kt,kts}]
2 | # possible values: number (e.g. 2), "unset" (makes ktlint ignore indentation completely)
3 | indent_size=unset
--------------------------------------------------------------------------------
/app/libs/riskscore-5.0.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/libs/riskscore-5.0.0.jar
--------------------------------------------------------------------------------
/app/src/main/res/raw/success.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/raw/success.mp3
--------------------------------------------------------------------------------
/app/src/scenarios/res/xml/filepaths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/custom-ktlint-rules/src/main/resources/META-INF/services/com.pinterest.ktlint.core.RuleSetProvider:
--------------------------------------------------------------------------------
1 | uk.nhs.nhsx.covid19.android.ktlint.CustomRuleSetProvider
--------------------------------------------------------------------------------
/docs/DependencyInjectionGraph.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/docs/DependencyInjectionGraph.jpeg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable/ic_tick.png
--------------------------------------------------------------------------------
/docs/AppArchitectureTestingApproach.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/docs/AppArchitectureTestingApproach.jpeg
--------------------------------------------------------------------------------
/screenshots:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ./gradlew --continue -Pandroid.testInstrumentationRunnerArguments.takeScreenshots=true connectedScenariosDebugAndroidTest
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night/ic_tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night/ic_tick.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-hdpi/ic_notification.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-mdpi/ic_notification.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/util/Constants.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | const val FAKE_LOCALE_NAME_FOR_STRING_IDS = "non"
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2004.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2004.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2005.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2005.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2006.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2006.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2007.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2007.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2008.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2008.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2009.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2009.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2010.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2010.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2011.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2011.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2012.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2012.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2013.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2013.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2014.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2014.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2015.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2015.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2016.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2016.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2017.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2017.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2018.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2018.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2019.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2019.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2020.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2020.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2021.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2021.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2022.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2022.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2023.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2023.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2024.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2025.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2025.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2026.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2026.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2027.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2027.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2028.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2028.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2029.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2029.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2030.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2030.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2031.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2031.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2032.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2032.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2033.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2033.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2034.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2034.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2035.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2035.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2036.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2036.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2037.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2037.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2038.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2038.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2039.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2039.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2040.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2040.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2041.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2041.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2042.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2042.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2043.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2043.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2044.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2044.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2045.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2045.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2046.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2046.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2047.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2047.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2048.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2049.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2049.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2050.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2050.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2051.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2051.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2052.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2052.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2053.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2053.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2054.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2054.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2055.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2055.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2056.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2056.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2057.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2057.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2058.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2058.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2059.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2059.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2060.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2060.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2061.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2061.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2062.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2062.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2063.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2063.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2064.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2064.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2065.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2065.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2066.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2066.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2067.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2067.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2068.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2068.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2069.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2069.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2070.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2070.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2071.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2071.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2072.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2072.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2073.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2073.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2074.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2074.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2075.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2075.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2076.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2076.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2077.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2077.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2078.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2078.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2079.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2079.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2080.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2080.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2081.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2081.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2082.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2082.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/tick_final_2083.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/tick_final_2083.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xhdpi/ic_notification.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxhdpi/ic_notification.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_notification.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/qr_code_help_poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/qr_code_help_poster.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2004.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2004.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2005.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2005.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2006.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2006.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2007.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2007.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2008.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2008.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2009.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2009.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2010.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2010.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2011.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2011.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2012.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2012.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2013.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2013.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2014.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2014.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2015.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2015.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2016.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2016.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2017.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2017.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2018.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2018.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2019.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2019.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2020.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2020.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2021.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2021.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2022.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2022.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2023.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2023.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2024.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2025.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2025.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2026.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2026.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2027.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2027.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2028.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2028.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2029.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2029.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2030.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2030.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2031.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2031.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2032.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2032.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2033.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2033.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2034.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2034.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2035.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2035.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2036.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2036.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2037.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2037.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2038.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2038.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2039.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2039.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2040.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2040.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2041.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2041.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2042.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2042.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2043.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2043.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2044.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2044.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2045.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2045.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2046.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2046.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2047.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2047.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2048.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2049.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2049.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2050.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2050.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2051.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2051.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2052.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2052.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2053.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2053.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2054.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2054.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2055.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2055.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2056.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2056.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2057.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2057.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2058.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2058.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2059.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2059.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2060.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2060.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2061.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2061.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2062.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2062.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2063.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2063.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2064.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2064.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2065.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2065.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2066.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2066.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2067.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2067.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2068.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2068.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2069.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2069.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2070.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2070.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2071.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2071.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2072.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2072.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2073.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2073.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2074.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2074.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2075.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2075.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2076.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2076.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2077.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2077.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2078.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2078.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2079.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2079.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2080.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2080.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2081.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2081.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2082.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2082.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-nodpi/tick_final_2083.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-night-nodpi/tick_final_2083.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/receiver/AvailabilityState.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.receiver
2 |
3 | enum class AvailabilityState {
4 | ENABLED, DISABLED
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/qr_code_help_poster_welsh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/qr_code_help_poster_welsh.png
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/analytics/TestOrderType.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.analytics
2 |
3 | enum class TestOrderType {
4 | INSIDE_APP,
5 | OUTSIDE_APP
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/Base64Encoder.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | interface Base64Encoder {
4 | fun encodeUrl(byteArray: ByteArray): String
5 | }
6 |
--------------------------------------------------------------------------------
/app/libs/play-services-nearby-exposurenotification-1.7.2-eap.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/libs/play-services-nearby-exposurenotification-1.7.2-eap.aar
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/remote/MockEmptyApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | class MockEmptyApi : EmptyApi {
4 | override suspend fun submit() {}
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/qr_code_help_poster_hospitality.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/qr_code_help_poster_hospitality.png
--------------------------------------------------------------------------------
/app/src/production/java/uk/nhs/nhsx/covid19/android/app/status/DebugFragment.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.status
2 |
3 | import androidx.fragment.app.Fragment
4 |
5 | class DebugFragment : Fragment()
6 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/UUIDGenerator.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import java.util.UUID
4 |
5 | interface UUIDGenerator {
6 |
7 | fun randomUUID(): UUID
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/ListUtils.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | fun List.shallowCopy(): List = mutableListOf().apply {
4 | addAll(this@shallowCopy)
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/qr_code_help_poster_hospitality_welsh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ukhsa-collaboration/covid-19-app-android-ag-public/HEAD/app/src/main/res/drawable-nodpi/qr_code_help_poster_hospitality_welsh.png
--------------------------------------------------------------------------------
/app/src/productionRelease/java/uk/nhs/nhsx/covid19/android/app/remote/Interceptors.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import okhttp3.Interceptor
4 |
5 | val additionalInterceptors = listOf()
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/settings_option_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/retry/RetryFlakyTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers.retry
2 |
3 | @Retention(AnnotationRetention.RUNTIME)
4 | annotation class RetryFlakyTest
5 |
--------------------------------------------------------------------------------
/app/src/production/java/uk/nhs/nhsx/covid19/android/app/AnalyticsReportActivity.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app
2 |
3 | import androidx.appcompat.app.AppCompatActivity
4 |
5 | class AnalyticsReportActivity : AppCompatActivity()
6 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/battery/BatteryOptimizationChecker.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.battery
2 |
3 | interface BatteryOptimizationChecker {
4 |
5 | fun isIgnoringBatteryOptimizations(): Boolean
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/VirologyTestKitType.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | enum class VirologyTestKitType {
4 | LAB_RESULT,
5 | RAPID_RESULT,
6 | RAPID_SELF_REPORTED
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/divider_binary_radio_group.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_onboarding_circle.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/EmptyApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 |
5 | interface EmptyApi {
6 | @GET("submission/empty-submission-v2")
7 | suspend fun submit()
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/HashResponse.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class HashResponse(val hash: String)
7 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/encounter/RandomNonRiskyExposureWindowsLimiter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.encounter
2 |
3 | interface RandomNonRiskyExposureWindowsLimiter {
4 |
5 | fun isAllowed(): Boolean
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/error_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_red.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/new_label_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/status_option_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sw600dp/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/question_not_selected_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/production/java/uk/nhs/nhsx/covid19/android/app/scenariodialog/VirologyTestResultMockFragment.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.scenariodialog
2 |
3 | import androidx.fragment.app.DialogFragment
4 |
5 | class VirologyTestResultMockFragment : DialogFragment()
6 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/ListOfFilesResponse.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class ListOfFilesResponse(val files: List)
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Jun 10 15:35:28 CEST 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
7 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/BooleanUtils.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | fun Boolean?.defaultFalse() =
4 | this ?: false
5 |
6 | fun Boolean?.defaultTrue() =
7 | this ?: true
8 |
9 | fun Boolean.toInt() = if (this) 1 else 0
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/view_cornered_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/AndroidUUIDGenerator.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import java.util.UUID
4 |
5 | class AndroidUUIDGenerator : UUIDGenerator {
6 |
7 | override fun randomUUID(): UUID =
8 | UUID.randomUUID()
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/view_divider.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | local.properties
4 | !.idea/
5 | .idea/*
6 | !.idea/codeStyles/
7 | .DS_Store
8 | build
9 | captures
10 | .externalNativeBuild
11 | .cxx
12 | jacoco.exec
13 | .envrc
14 | .tool-versions
15 |
16 | ## Pacts folder
17 | app/pacts
18 |
19 | /.pairs
20 | /.git-authors
21 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/BuildVersionProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common
2 |
3 | import android.os.Build.VERSION
4 | import javax.inject.Inject
5 |
6 | class BuildVersionProvider @Inject constructor() {
7 | fun version() = VERSION.SDK_INT
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/status/ScenariosDateChangeBroadcastReceiver.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.status
2 |
3 | class ScenariosDateChangeBroadcastReceiver : DateChangeBroadcastReceiver() {
4 | fun trigger() {
5 | callback?.invoke()
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/DecommissioningClosureScreenActivity.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app
2 |
3 | import uk.nhs.nhsx.covid19.android.app.common.BaseActivity
4 |
5 | class DecommissioningClosureScreenActivity : BaseActivity(R.layout.activity_decommissioning_closure_screen)
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/black_border_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_stroked_circle_red.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/status_option_icon_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-ldrtl/status_option_icon_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/report/Reported.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.report
2 |
3 | import kotlin.annotation.AnnotationRetention.RUNTIME
4 | import kotlin.annotation.AnnotationTarget.FUNCTION
5 |
6 | @Target(FUNCTION)
7 | @Retention(RUNTIME)
8 | annotation class Reported
9 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/SupportedCountry.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.Json
4 |
5 | enum class SupportedCountry {
6 | @Json(name = "England")
7 | ENGLAND,
8 |
9 | @Json(name = "Wales")
10 | WALES
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/exposure/encounter/MockRandomNonRiskyExposureWindowsLimiter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.encounter
2 |
3 | class MockRandomNonRiskyExposureWindowsLimiter : RandomNonRiskyExposureWindowsLimiter {
4 |
5 | override fun isAllowed(): Boolean = true
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/base/HasTestAppContext.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers.base
2 |
3 | import uk.nhs.nhsx.covid19.android.app.testhelpers.TestApplicationContext
4 |
5 | interface HasTestAppContext {
6 | val testAppContext: TestApplicationContext
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/IsolationPaymentCreateTokenRequest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class IsolationPaymentCreateTokenRequest(
7 | val country: SupportedCountry
8 | )
9 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/report/output/Screenshot.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.report.output
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class Screenshot(
7 | val fileName: String,
8 | val tags: List
9 | )
10 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/encounter/calculation/DayRisk.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.encounter.calculation
2 |
3 | data class DayRisk(
4 | val startOfDayMillis: Long,
5 | val calculatedRisk: Double,
6 | val riskCalculationVersion: Int,
7 | val matchedKeyCount: Int
8 | )
9 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/network_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | localhost
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/edgecases/DeviceNotSupportedActivity.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.edgecases
2 |
3 | import uk.nhs.nhsx.covid19.android.app.R
4 | import uk.nhs.nhsx.covid19.android.app.common.BaseActivity
5 |
6 | class DeviceNotSupportedActivity : BaseActivity(R.layout.activity_device_not_supported)
7 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/qrcode/BarcodeDetectorBuilder.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.qrcode
2 |
3 | import com.google.android.gms.vision.Detector
4 | import com.google.android.gms.vision.barcode.Barcode
5 |
6 | interface BarcodeDetectorBuilder {
7 |
8 | fun build(): Detector?
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/remote/Interceptors.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import okhttp3.logging.HttpLoggingInterceptor
4 |
5 | val additionalInterceptors = listOf(
6 | HttpLoggingInterceptor().apply {
7 | level = HttpLoggingInterceptor.Level.BODY
8 | }
9 | )
10 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Project Suggestions
4 | ---
5 |
6 | Thank you for your interest in this project
7 |
8 | We welcome feedback about the Test and Trace App, and this can be sent to us via the
9 | https://faq.covid19.nhs.uk/create-case/ page on the website.
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_edit.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/productionDebug/java/uk/nhs/nhsx/covid19/android/app/remote/Interceptors.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import okhttp3.logging.HttpLoggingInterceptor
4 |
5 | val additionalInterceptors = listOf(
6 | HttpLoggingInterceptor().apply {
7 | level = HttpLoggingInterceptor.Level.BODY
8 | }
9 | )
10 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/CircuitBreakerResult.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common
2 |
3 | import com.squareup.moshi.Json
4 |
5 | enum class CircuitBreakerResult {
6 | @Json(name = "yes")
7 | YES,
8 | @Json(name = "no")
9 | NO,
10 | @Json(name = "pending")
11 | PENDING
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/VirologyCtaExchangeRequest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class VirologyCtaExchangeRequest(
7 | val ctaToken: String,
8 | val country: SupportedCountry
9 | )
10 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/Base64Decoder.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | interface Base64Decoder {
4 | fun decode(string: String): String
5 | fun decodeToBytes(string: String): ByteArray
6 | fun decodeUrl(string: String): String
7 | fun decodeUrlToBytes(string: String): ByteArray
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/scenarios/res/layout/include_test_plain_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_submit_selected_symptoms.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/area_risk_red_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bullet_point.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_green.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/question_selected_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/report/output/Step.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.report.output
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class Step(
7 | val name: String,
8 | val description: String,
9 | val screenshots: MutableList
10 | )
11 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/payment/IsolationPaymentTokenState.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.payment
2 |
3 | sealed class IsolationPaymentTokenState {
4 | object Unresolved : IsolationPaymentTokenState()
5 | object Disabled : IsolationPaymentTokenState()
6 | data class Token(val token: String) : IsolationPaymentTokenState()
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/VirologyTestResultRequestBody.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class VirologyTestResultRequestBody(
7 | val testResultPollingToken: String,
8 | val country: SupportedCountry
9 | )
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/area_risk_amber_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/area_risk_green_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/area_risk_neutral_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/area_risk_yellow_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/splash_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/util/MockUUIDGenerator.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import java.util.UUID
4 |
5 | class MockUUIDGenerator : UUIDGenerator {
6 |
7 | var nextUUID = UUID.fromString("bf66c57e-5ae0-448e-94ec-52ae6947ac79")
8 |
9 | override fun randomUUID(): UUID =
10 | nextUUID
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/scenarios/res/layout/main_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/ViewModelUtils.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import androidx.lifecycle.ViewModel
4 | import androidx.lifecycle.viewModelScope
5 | import kotlinx.coroutines.CoroutineScope
6 |
7 | fun ViewModel.getViewModelScopeOrDefault(coroutineScope: CoroutineScope?) =
8 | coroutineScope ?: this.viewModelScope
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/area_risk_black_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/RiskyVenuesApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.RiskyVenuesResponse
5 |
6 | interface RiskyVenuesApi {
7 | @GET("distribution/risky-venues")
8 | suspend fun getListOfRiskyVenues(): RiskyVenuesResponse
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/AndroidBase64Encoder.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import android.util.Base64
4 |
5 | class AndroidBase64Encoder : Base64Encoder {
6 | override fun encodeUrl(byteArray: ByteArray): String {
7 | return Base64.encodeToString(byteArray, Base64.URL_SAFE or Base64.NO_WRAP)
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/area_risk_maroon_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bullet_point_primary_grey.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/LocalStatsApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.LocalStatsResponse
5 |
6 | interface LocalStatsApi {
7 | @GET("distribution/v1/local-covid-stats-daily")
8 | suspend fun fetchLocalStats(): LocalStatsResponse
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/viewutils/AreSystemLevelAnimationsEnabled.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.viewutils
2 |
3 | import android.content.Context
4 | import javax.inject.Inject
5 |
6 | class AreSystemLevelAnimationsEnabled @Inject constructor(private val context: Context) {
7 | operator fun invoke() = !animationsDisabled(context)
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/packagemanager/PackageManager.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.packagemanager
2 |
3 | import android.content.Context
4 | import android.content.Intent
5 | import android.content.pm.ResolveInfo
6 |
7 | interface PackageManager {
8 |
9 | fun resolveActivity(context: Context, intent: Intent, flags: Int): ResolveInfo?
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/LocalMessagesApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.LocalMessagesResponse
5 |
6 | interface LocalMessagesApi {
7 | @GET("distribution/local-messages")
8 | suspend fun fetchLocalMessages(): LocalMessagesResponse
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/RandomObfuscationRateLimiter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common
2 |
3 | import java.security.SecureRandom
4 | import javax.inject.Inject
5 |
6 | class RandomObfuscationRateLimiter @Inject constructor(private val random: SecureRandom) {
7 |
8 | val allow: Boolean
9 | get() = random.nextInt(10) == 0
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/QuestionnaireApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.QuestionnaireResponse
5 |
6 | interface QuestionnaireApi {
7 | @GET("distribution/symptomatic-questionnaire")
8 | suspend fun fetchQuestionnaire(): QuestionnaireResponse
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_red_circle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/view_toolbar_primary.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/AppAvailabilityApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.AppAvailabilityResponse
5 |
6 | interface AppAvailabilityApi {
7 |
8 | @GET("distribution/availability-android")
9 | suspend fun getAvailability(): AppAvailabilityResponse
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/view_toolbar_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/report/output/Report.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.report.output
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class Report(
7 | val description: String,
8 | val kind: String,
9 | val name: String,
10 | val scenario: String,
11 | val steps: List
12 | )
13 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/AppInfo.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common
2 |
3 | import android.os.Build
4 | import uk.nhs.nhsx.covid19.android.app.BuildConfig
5 |
6 | data class AppInfo(
7 | val osVersion: Int = Build.VERSION.SDK_INT,
8 | val buildNumber: Int = BuildConfig.VERSION_CODE,
9 | val shortVersionName: String = BuildConfig.VERSION_NAME_SHORT
10 | )
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_blue_circle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/IsolationPaymentUrlRequest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 | import java.time.Instant
5 |
6 | @JsonClass(generateAdapter = true)
7 | data class IsolationPaymentUrlRequest(
8 | val ipcToken: String,
9 | val riskyEncounterDate: Instant,
10 | val isolationPeriodEndDate: Instant
11 | )
12 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/ExposureConfigurationApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.ExposureConfigurationResponse
5 |
6 | interface ExposureConfigurationApi {
7 | @GET("distribution/exposure-configuration")
8 | suspend fun getExposureConfiguration(): ExposureConfigurationResponse
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/scenarios/res/layout/include_test_no_bullet_paragraph.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/robots/QrCodeHelpRobot.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers.robots
2 |
3 | import uk.nhs.nhsx.covid19.android.app.R
4 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
5 |
6 | class QrCodeHelpRobot : HasActivity {
7 |
8 | override val containerId: Int
9 | get() = R.id.qrCodeHelpTitle
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/permissions/PermissionsManager.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.permissions
2 |
3 | import android.app.Activity
4 | import android.content.Context
5 |
6 | interface PermissionsManager {
7 |
8 | fun requestPermissions(activity: Activity, permissions: Array, requestCode: Int)
9 |
10 | fun checkSelfPermission(context: Context, permission: String): Int
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/IsolationConfigurationApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.IsolationConfigurationResponse
5 |
6 | interface IsolationConfigurationApi {
7 |
8 | @GET("distribution/self-isolation")
9 | suspend fun getIsolationConfiguration(): IsolationConfigurationResponse
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/scenarios/res/layout/include_test_bullet_paragraph.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/RiskyPostDistrictsApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.RiskyPostCodeDistributionResponse
5 |
6 | interface RiskyPostDistrictsApi {
7 | @GET("distribution/risky-post-districts-v2")
8 | suspend fun fetchRiskyPostCodeDistribution(): RiskyPostCodeDistributionResponse
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_green_with_border.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/onboarding/DataAndPrivacyViewModel.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.onboarding
2 |
3 | import androidx.lifecycle.ViewModel
4 | import javax.inject.Inject
5 |
6 | class DataAndPrivacyViewModel @Inject constructor(
7 | private val provider: PolicyUpdateProvider
8 | ) : ViewModel() {
9 |
10 | fun markPolicyAccepted() {
11 | provider.markPolicyAccepted()
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/RiskyPostCodeDistributionResponse.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class RiskyPostCodeDistributionResponse(
7 | val postDistricts: Map,
8 | val localAuthorities: Map?,
9 | val riskLevels: Map
10 | )
11 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/RiskyVenueConfigurationApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.GET
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.RiskyVenueConfigurationResponse
5 |
6 | interface RiskyVenueConfigurationApi {
7 |
8 | @GET("distribution/risky-venue-configuration")
9 | suspend fun getRiskyVenueConfiguration(): RiskyVenueConfigurationResponse
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/adapters/BigDecimalAdapter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.adapters
2 |
3 | import com.squareup.moshi.FromJson
4 | import com.squareup.moshi.ToJson
5 | import java.math.BigDecimal
6 |
7 | object BigDecimalAdapter {
8 | @FromJson
9 | fun fromJson(string: String) = BigDecimal(string)
10 |
11 | @ToJson
12 | fun toJson(value: BigDecimal) = value.toString()
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/VirologyTestOrderResponse.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class VirologyTestOrderResponse(
7 | val websiteUrlWithQuery: String,
8 | val tokenParameterValue: String,
9 | val testResultPollingToken: String,
10 | val diagnosisKeySubmissionToken: String
11 | )
12 |
--------------------------------------------------------------------------------
/app/src/scenariosDebug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/onboarding/PolicyUpdateViewModel.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.onboarding
2 |
3 | import androidx.lifecycle.ViewModel
4 | import javax.inject.Inject
5 |
6 | class PolicyUpdateViewModel @Inject constructor(
7 | private val policyUpdateProvider: PolicyUpdateProvider
8 | ) : ViewModel() {
9 |
10 | fun markPolicyAccepted() {
11 | policyUpdateProvider.markPolicyAccepted()
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/KeysSubmissionApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.Body
4 | import retrofit2.http.POST
5 | import uk.nhs.nhsx.covid19.android.app.remote.data.TemporaryExposureKeysPayload
6 |
7 | interface KeysSubmissionApi {
8 | @POST("submission/diagnosis-keys")
9 | suspend fun submitGeneratedKeys(@Body temporaryExposureKeysPayload: TemporaryExposureKeysPayload)
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/questionnaire/review/ReviewData.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.questionnaire.review
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | data class ReviewData(
8 | val questionnaireOutcome: QuestionnaireOutcome,
9 | val ageResponse: OptOutResponseEntry,
10 | val vaccinationStatusResponses: List
11 | ) : Parcelable
12 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/FileUtils.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import timber.log.Timber
4 | import java.io.File
5 |
6 | object FileFactory {
7 | fun createFile(parent: File, child: String): File = File(parent, child)
8 | }
9 |
10 | fun File.tryDelete() {
11 | try {
12 | delete()
13 | } catch (exception: Exception) {
14 | Timber.d(exception, "Can't delete file: $this")
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/IsolationPaymentResponse.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class IsolationPaymentCreateTokenResponse(
7 | val isEnabled: Boolean,
8 | val ipcToken: String?
9 | )
10 |
11 | @JsonClass(generateAdapter = true)
12 | data class IsolationPaymentUrlResponse(
13 | val websiteUrlWithQuery: String
14 | )
15 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/viewutils/ViewGroupUtils.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.viewutils
2 |
3 | import android.content.Context
4 | import android.provider.Settings.Global
5 |
6 | fun animationsDisabled(context: Context): Boolean {
7 | val animationDurationScale = Global.getFloat(
8 | context.contentResolver,
9 | Global.ANIMATOR_DURATION_SCALE, 1f
10 | )
11 | return animationDurationScale == 0.0f
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/packagemanager/AndroidPackageManager.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.packagemanager
2 |
3 | import android.content.Context
4 | import android.content.Intent
5 | import android.content.pm.ResolveInfo
6 |
7 | class AndroidPackageManager : PackageManager {
8 |
9 | override fun resolveActivity(context: Context, intent: Intent, flags: Int): ResolveInfo? =
10 | context.packageManager.resolveActivity(intent, flags)
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_tick_light.xml:
--------------------------------------------------------------------------------
1 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/RiskyVenueConfigurationResponse.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 |
5 | @JsonClass(generateAdapter = true)
6 | data class RiskyVenueConfigurationResponse(
7 | val durationDays: RiskyVenueConfigurationDurationDays
8 | )
9 |
10 | @JsonClass(generateAdapter = true)
11 | data class RiskyVenueConfigurationDurationDays(
12 | val optionToBookATest: Int = 10
13 | )
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_back_primary.xml:
--------------------------------------------------------------------------------
1 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/RemoteServiceExceptionCrashReportSubmissionApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.Body
4 | import retrofit2.http.POST
5 | import uk.nhs.nhsx.covid19.android.app.util.crashreporting.CrashReport
6 |
7 | interface RemoteServiceExceptionCrashReportSubmissionApi {
8 | @POST("submission/crash-reports")
9 | suspend fun submitRemoteServiceExceptionCrashReport(@Body crashReport: CrashReport)
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/view_logo.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/AnalyticsApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.Body
4 | import retrofit2.http.POST
5 | import uk.nhs.nhsx.covid19.android.app.remote.data.AnalyticsPayload
6 |
7 | interface AnalyticsApi {
8 |
9 | @POST(PATH)
10 | suspend fun submitAnalytics(@Body analyticsPayload: AnalyticsPayload)
11 |
12 | companion object {
13 | const val PATH = "submission/mobile-analytics"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/crashreporting/SetDefaultUncaughtExceptionHandler.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.crashreporting
2 |
3 | import java.lang.Thread.UncaughtExceptionHandler
4 | import javax.inject.Inject
5 |
6 | class SetDefaultUncaughtExceptionHandler @Inject constructor() {
7 | operator fun invoke(uncaughtExceptionHandler: UncaughtExceptionHandler) {
8 | Thread.setDefaultUncaughtExceptionHandler(uncaughtExceptionHandler)
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/remote/MockKeysSubmissionApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import uk.nhs.nhsx.covid19.android.app.di.MockApiModule
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.TemporaryExposureKeysPayload
5 |
6 | class MockKeysSubmissionApi : KeysSubmissionApi {
7 | override suspend fun submitGeneratedKeys(temporaryExposureKeysPayload: TemporaryExposureKeysPayload) =
8 | MockApiModule.behaviour.invoke { }
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_positive_symptom.xml:
--------------------------------------------------------------------------------
1 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/localstats/FetchLocalStats.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.localstats
2 |
3 | import uk.nhs.nhsx.covid19.android.app.remote.LocalStatsApi
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.LocalStatsResponse
5 | import javax.inject.Inject
6 |
7 | class FetchLocalStats @Inject constructor(private val localStatsApi: LocalStatsApi) {
8 | suspend operator fun invoke(): LocalStatsResponse {
9 | return localStatsApi.fetchLocalStats()
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_more_vert.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/testordering/unknownresult/UnknownTestResultViewModel.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testordering.unknownresult
2 |
3 | import androidx.lifecycle.ViewModel
4 | import javax.inject.Inject
5 |
6 | class UnknownTestResultViewModel @Inject constructor(
7 | private val unknownTestResultProvider: ReceivedUnknownTestResultProvider
8 | ) : ViewModel() {
9 |
10 | fun acknowledgeUnknownTestResult() {
11 | unknownTestResultProvider.value = false
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_back_white.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_tick_green.xml:
--------------------------------------------------------------------------------
1 |
7 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/ExposureNotificationActivationResult.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure
2 |
3 | import com.google.android.gms.common.api.Status
4 |
5 | sealed class ExposureNotificationActivationResult {
6 |
7 | data class ResolutionRequired(val status: Status) : ExposureNotificationActivationResult()
8 |
9 | object Success : ExposureNotificationActivationResult()
10 |
11 | data class Error(val exception: Exception) : ExposureNotificationActivationResult()
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/encounter/GetRiskyContactEncounterDate.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.encounter
2 |
3 | import uk.nhs.nhsx.covid19.android.app.state.IsolationStateMachine
4 | import java.time.LocalDate
5 | import javax.inject.Inject
6 |
7 | class GetRiskyContactEncounterDate @Inject constructor(
8 | private val isolationStateMachine: IsolationStateMachine
9 | ) {
10 | operator fun invoke(): LocalDate? = isolationStateMachine.readState().contact?.exposureDate
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/receiver/AvailabilityStateProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.receiver
2 |
3 | import android.content.Context
4 | import androidx.lifecycle.LiveData
5 | import uk.nhs.nhsx.covid19.android.app.BuildConfig
6 |
7 | interface AvailabilityStateProvider {
8 | val availabilityState: LiveData
9 |
10 | fun start(context: Context)
11 | fun stop(context: Context)
12 | fun getState(isDebug: Boolean = BuildConfig.DEBUG): AvailabilityState
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_numbered_bullet_point.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/EpidemiologyDataApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import retrofit2.http.Body
4 | import retrofit2.http.POST
5 | import uk.nhs.nhsx.covid19.android.app.remote.data.EpidemiologyRequest
6 |
7 | interface EpidemiologyDataApi {
8 |
9 | @POST(PATH)
10 | suspend fun submitEpidemiologyData(@Body epidemiologyRequest: EpidemiologyRequest)
11 |
12 | companion object {
13 | const val PATH = "submission/mobile-analytics-events"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/user_data_item_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/production/java/uk/nhs/nhsx/covid19/android/app/di/module/QrScannerViewModelModule.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.di.module
2 |
3 | import dagger.Module
4 | import dagger.Provides
5 | import uk.nhs.nhsx.covid19.android.app.qrcode.BaseQrScannerViewModel
6 | import uk.nhs.nhsx.covid19.android.app.qrcode.QrScannerViewModel
7 |
8 | @Module
9 | class QrScannerViewModelModule {
10 | @Provides
11 | fun provideQrScannerViewModel(qrScannerViewModel: QrScannerViewModel): BaseQrScannerViewModel = qrScannerViewModel
12 | }
13 |
--------------------------------------------------------------------------------
/custom-a11y-rules/src/main/java/uk/nhs/nhsx/covid19/android/a11y/NhsIssueRegistry.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.a11y
2 |
3 | import com.android.tools.lint.client.api.IssueRegistry
4 | import com.android.tools.lint.detector.api.CURRENT_API
5 | import com.android.tools.lint.detector.api.Issue
6 |
7 | class NhsIssueRegistry : IssueRegistry() {
8 | override val issues: List
9 | get() = listOf(AccessibilityTitleDetector.ISSUE_MISSING_ACCESSIBILITY_LABEL)
10 |
11 | override val api: Int
12 | get() = CURRENT_API
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/encounter/calculation/RiskScoreCalculatorProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.encounter.calculation
2 |
3 | import uk.nhs.riskscore.RiskScoreCalculator
4 | import uk.nhs.riskscore.RiskScoreCalculatorConfiguration
5 | import javax.inject.Inject
6 |
7 | class RiskScoreCalculatorProvider @Inject constructor() {
8 | fun riskScoreCalculator(config: RiskScoreCalculatorConfiguration) = RiskScoreCalculator(config)
9 |
10 | fun getRiskCalculationVersion(): Int = 2
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/TestUpdateManager.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers
2 |
3 | import uk.nhs.nhsx.covid19.android.app.availability.UpdateManager
4 |
5 | class TestUpdateManager : UpdateManager {
6 |
7 | var availableUpdateStatus: UpdateManager.AvailableUpdateStatus =
8 | UpdateManager.AvailableUpdateStatus.NoUpdateAvailable
9 |
10 | override suspend fun getAvailableUpdateVersionCode(): UpdateManager.AvailableUpdateStatus =
11 | availableUpdateStatus
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/remote/MockRemoteServiceExceptionCrashReportSubmissionApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import uk.nhs.nhsx.covid19.android.app.di.MockApiModule
4 | import uk.nhs.nhsx.covid19.android.app.util.crashreporting.CrashReport
5 |
6 | class MockRemoteServiceExceptionCrashReportSubmissionApi : RemoteServiceExceptionCrashReportSubmissionApi {
7 | override suspend fun submitRemoteServiceExceptionCrashReport(crashReport: CrashReport) =
8 | MockApiModule.behaviour.invoke { }
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/scenarios/res/drawable/rounded_corner.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
10 |
11 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/analytics/AnalyticsAggregatorReceiver.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.analytics
2 |
3 | import android.content.BroadcastReceiver
4 | import android.content.Context
5 | import android.content.Intent
6 | import timber.log.Timber
7 |
8 | @Deprecated("Use SubmitAnalytics, this is only for migration")
9 | class AnalyticsAggregatorReceiver : BroadcastReceiver() {
10 |
11 | override fun onReceive(context: Context, intent: Intent) {
12 | Timber.d("analytics aggregator triggered")
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_close_white.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/scenarios/res/menu/menu_debug.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/crashreporting/RemoteServiceExceptionReportRateLimiter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.crashreporting
2 |
3 | import java.security.SecureRandom
4 | import javax.inject.Inject
5 |
6 | class RemoteServiceExceptionReportRateLimiter @Inject constructor(private val random: SecureRandom) {
7 |
8 | fun isAllowed(): Boolean =
9 | random.nextInt(TOTAL) < LIMIT
10 |
11 | companion object {
12 | private const val LIMIT = 5
13 | private const val TOTAL = 100
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_close_primary.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/accordion_how_we_calculate_close_contact.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/accordion_how_we_calculate_close_contact_wales.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/bluetooth/EnableBluetoothViewModel.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common.bluetooth
2 |
3 | import androidx.lifecycle.ViewModel
4 | import uk.nhs.nhsx.covid19.android.app.status.ShouldShowBluetoothSplashScreen
5 | import javax.inject.Inject
6 |
7 | class EnableBluetoothViewModel @Inject constructor(
8 | private val shouldShowBluetoothSplashScreen: ShouldShowBluetoothSplashScreen
9 | ) : ViewModel() {
10 |
11 | fun onScreenShown() {
12 | shouldShowBluetoothSplashScreen.setHasBeenShown(true)
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/RiskyVenuesCircuitBreakerDto.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 | import uk.nhs.nhsx.covid19.android.app.common.CircuitBreakerResult
5 |
6 | @JsonClass(generateAdapter = true)
7 | data class RiskyVenuesCircuitBreakerResponse(
8 | val approvalToken: String,
9 | val approval: CircuitBreakerResult
10 | )
11 |
12 | @JsonClass(generateAdapter = true)
13 | data class RiskyVenuesCircuitBreakerPollingResponse(
14 | val approval: CircuitBreakerResult
15 | )
16 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/accordion_how_we_calculate_close_contact_england.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/scripts/publish.rb:
--------------------------------------------------------------------------------
1 | if system("git describe --exact-match --tags HEAD")
2 | puts "Tag found, skipping version bump."
3 | elsif not ARGV.empty?
4 | puts "No tag found. Create tag and push."
5 | VERSION_NAME_PATH = "app/versionName"
6 | version_name = File.open(VERSION_NAME_PATH).read.strip
7 | BUILD_NUMBER_PATH = "app/buildNumber"
8 | build_number = File.open(BUILD_NUMBER_PATH).read.to_i
9 |
10 | system("git tag production-v#{version_name}-#{build_number}")
11 | system("git push origin #{ARGV[0]} --tags")
12 | else
13 | puts "No branch provided"
14 | end
15 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/state/CalculateContactExpiryDate.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.state
2 |
3 | import uk.nhs.nhsx.covid19.android.app.state.IsolationState.Contact
4 | import java.time.LocalDate
5 | import javax.inject.Inject
6 |
7 | class CalculateContactExpiryDate @Inject constructor() {
8 |
9 | operator fun invoke(contact: Contact, isolationConfiguration: IsolationConfiguration): LocalDate =
10 | contact.optOutOfContactIsolation?.date
11 | ?: contact.exposureDate.plusDays(isolationConfiguration.contactCase.toLong())
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/encounter/AndroidRandomNonRiskyExposureWindowsLimiter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.encounter
2 |
3 | import java.security.SecureRandom
4 |
5 | class AndroidRandomNonRiskyExposureWindowsLimiter(
6 | private val random: SecureRandom = SecureRandom()
7 | ) : RandomNonRiskyExposureWindowsLimiter {
8 |
9 | override fun isAllowed(): Boolean =
10 | random.nextInt(TOTAL) < LIMIT
11 |
12 | companion object {
13 | private const val LIMIT = 25
14 | private const val TOTAL = 1000
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/questionnaire/review/QuestionnaireOutcome.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.questionnaire.review
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | sealed class QuestionnaireOutcome : Parcelable {
7 | @Parcelize
8 | object Minor : QuestionnaireOutcome()
9 | @Parcelize
10 | object FullyVaccinated : QuestionnaireOutcome()
11 | @Parcelize
12 | object MedicallyExempt : QuestionnaireOutcome()
13 |
14 | @Parcelize
15 | object NotExempt : QuestionnaireOutcome()
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/qrcode/AndroidBarcodeDetectorBuilder.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.qrcode
2 |
3 | import android.content.Context
4 | import com.google.android.gms.vision.Detector
5 | import com.google.android.gms.vision.barcode.Barcode
6 | import com.google.android.gms.vision.barcode.BarcodeDetector.Builder
7 |
8 | class AndroidBarcodeDetectorBuilder(
9 | private val context: Context
10 | ) : BarcodeDetectorBuilder {
11 |
12 | override fun build(): Detector? =
13 | Builder(context).setBarcodeFormats(Barcode.QR_CODE).build()
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/util/ReflectUtils.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import android.util.Log
4 | import kotlin.reflect.full.memberProperties
5 | import kotlin.reflect.jvm.isAccessible
6 |
7 | inline fun T.getPrivateProperty(name: String): R? {
8 | val r = T::class
9 | .memberProperties
10 | .firstOrNull { it.name == name }
11 | ?.apply { isAccessible = true }
12 | ?.get(this) as? R
13 | Log.d("Reflection", "getPrivateProperty: ${T::class.memberProperties}")
14 | return r
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/battery/AndroidBatteryOptimizationChecker.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.battery
2 |
3 | import android.content.Context
4 | import android.os.PowerManager
5 |
6 | class AndroidBatteryOptimizationChecker constructor(
7 | private val context: Context
8 | ) : BatteryOptimizationChecker {
9 |
10 | override fun isIgnoringBatteryOptimizations(): Boolean {
11 | val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
12 | return powerManager.isIgnoringBatteryOptimizations(context.packageName)
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/KeysDistributionApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import okhttp3.ResponseBody
4 | import retrofit2.http.GET
5 | import retrofit2.http.Path
6 | import retrofit2.http.Streaming
7 |
8 | interface KeysDistributionApi {
9 | @Streaming
10 | @GET("distribution/daily/{timestamp}")
11 | suspend fun fetchDailyKeys(@Path("timestamp") timestamp: String): ResponseBody
12 |
13 | @Streaming
14 | @GET("distribution/two-hourly/{timestamp}")
15 | suspend fun fetchHourlyKeys(@Path("timestamp") timestamp: String): ResponseBody
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/state/CalculateExpirationNotificationTime.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.state
2 |
3 | import java.time.Clock
4 | import java.time.Instant
5 | import java.time.LocalDate
6 | import javax.inject.Inject
7 |
8 | class CalculateExpirationNotificationTime @Inject constructor(
9 | private val clock: Clock
10 | ) {
11 |
12 | operator fun invoke(
13 | expiryDate: LocalDate
14 | ): Instant =
15 | expiryDate
16 | .atStartOfDay()
17 | .atZone(clock.zone)
18 | .minusHours(3)
19 | .toInstant()
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/view_area_risk_indicator.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 | -
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/packagemanager/MockPackageManager.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.packagemanager
2 |
3 | import android.content.Context
4 | import android.content.Intent
5 | import android.content.pm.ResolveInfo
6 |
7 | class MockPackageManager : PackageManager {
8 |
9 | val resolutionsByAction = mutableMapOf()
10 |
11 | override fun resolveActivity(context: Context, intent: Intent, flags: Int): ResolveInfo? =
12 | resolutionsByAction[intent.action]
13 |
14 | fun clear() {
15 | resolutionsByAction.clear()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/di/MockApplicationComponent.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.di
2 |
3 | import dagger.Component
4 | import uk.nhs.nhsx.covid19.android.app.di.module.AppModule
5 | import uk.nhs.nhsx.covid19.android.app.di.module.NetworkModule
6 | import uk.nhs.nhsx.covid19.android.app.di.module.QrScannerViewModelModule
7 | import javax.inject.Singleton
8 |
9 | @Singleton
10 | @Component(modules = [AppModule::class, NetworkModule::class, MockApiModule::class, MockViewModelModule::class, QrScannerViewModelModule::class])
11 | interface MockApplicationComponent : ApplicationComponent
12 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/adapters/PolicyIconAdapter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.adapters
2 |
3 | import com.squareup.moshi.FromJson
4 | import com.squareup.moshi.ToJson
5 | import uk.nhs.nhsx.covid19.android.app.remote.data.PolicyIcon
6 |
7 | class PolicyIconAdapter {
8 | @ToJson
9 | fun toJson(policyIcon: PolicyIcon): String {
10 | return policyIcon.jsonName
11 | }
12 |
13 | @FromJson
14 | fun fromJson(policyIcon: String): PolicyIcon {
15 | return PolicyIcon.values().firstOrNull { it.jsonName == policyIcon } ?: PolicyIcon.DEFAULT
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/res/values-land/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 128dp
4 | 112dp
5 | 8dp
6 | 8dp
7 | 8dp
8 | 96dp
9 | 128dp
10 | 120dp
11 | 32dp
12 |
--------------------------------------------------------------------------------
/app/src/scenarios/res/layout/item_language.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/AnalyticsReportActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
6 |
7 | class AnalyticsReportActivityTest : EspressoTest(), HasActivity {
8 | override val containerId: Int
9 | get() = R.id.scenarios
10 |
11 | @Test
12 | fun isActivityDisplayed() {
13 | startTestActivity()
14 | checkActivityIsDisplayed()
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/analytics/UpdateStatusStorage.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.analytics
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 |
7 | class UpdateStatusStorage @Inject constructor(sharedPreferences: SharedPreferences) {
8 |
9 | private val updateStatusPrefs = sharedPreferences.with(UPDATE_STATUS_KEY)
10 |
11 | var value by updateStatusPrefs
12 |
13 | companion object {
14 | const val UPDATE_STATUS_KEY = "UPDATE_STATUS_KEY"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/postcode/GetLocalAuthorityName.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common.postcode
2 |
3 | import javax.inject.Inject
4 |
5 | class GetLocalAuthorityName @Inject constructor(
6 | private val localAuthorityProvider: LocalAuthorityProvider,
7 | private val localAuthorityPostCodesLoader: LocalAuthorityPostCodesLoader
8 | ) {
9 | suspend operator fun invoke(): String? {
10 | val localAuthorityId = localAuthorityProvider.value ?: return null
11 | return localAuthorityPostCodesLoader.load()?.localAuthorities?.get(localAuthorityId)?.name
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_manufacturer.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/robots/QrScannerRobot.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers.robots
2 |
3 | import androidx.test.espresso.Espresso.onView
4 | import androidx.test.espresso.assertion.ViewAssertions.matches
5 | import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
6 | import androidx.test.espresso.matcher.ViewMatchers.withId
7 | import uk.nhs.nhsx.covid19.android.app.R
8 |
9 | class QrScannerRobot {
10 |
11 | fun checkActivityIsDisplayed() {
12 | onView(withId(R.id.titleScanQRCode))
13 | .check(matches(isDisplayed()))
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/testordering/SubmitFakeExposureWindows.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testordering
2 |
3 | import uk.nhs.nhsx.covid19.android.app.common.SubmitEmptyData
4 | import javax.inject.Inject
5 |
6 | class SubmitFakeExposureWindows @Inject constructor(
7 | private val submitEmptyData: SubmitEmptyData,
8 | private val getEmptyExposureWindowSubmissionCount: GetEmptyExposureWindowSubmissionCount
9 | ) {
10 | operator fun invoke(numberOfExposureWindowsSent: Int = 0) {
11 | submitEmptyData(getEmptyExposureWindowSubmissionCount(numberOfExposureWindowsSent))
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_accordion_collapse.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/analytics/SubmittedOnboardingAnalyticsProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.analytics
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 |
7 | class SubmittedOnboardingAnalyticsProvider @Inject constructor(sharedPreferences: SharedPreferences) {
8 |
9 | private val prefs = sharedPreferences.with(VALUE_KEY)
10 |
11 | var value: Boolean? by prefs
12 |
13 | companion object {
14 | private const val VALUE_KEY = "SUBMITTED_ONBOARDING"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/postcode/PostCodeValidator.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common.postcode
2 |
3 | import javax.inject.Inject
4 | import javax.inject.Singleton
5 |
6 | @Singleton
7 | class PostCodeValidator @Inject constructor(
8 | private val postCodeLoader: PostCodeLoader
9 | ) {
10 | suspend fun validate(postCode: String): PostCodeDistrict? {
11 | val postCodeDistrict =
12 | postCodeLoader.loadPostCodes().toList()
13 | .firstOrNull { postCode.trim() in it.second }?.first
14 | return PostCodeDistrict.fromString(postCodeDistrict)
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/sharekeys/SubmitObfuscationData.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.sharekeys
2 |
3 | import uk.nhs.nhsx.covid19.android.app.common.SubmitEmptyData
4 | import uk.nhs.nhsx.covid19.android.app.testordering.SubmitFakeExposureWindows
5 | import javax.inject.Inject
6 |
7 | class SubmitObfuscationData @Inject constructor(
8 | private val submitEmptyData: SubmitEmptyData,
9 | private val submitFakeExposureWindows: SubmitFakeExposureWindows,
10 | ) {
11 |
12 | operator fun invoke() {
13 | submitEmptyData()
14 | submitFakeExposureWindows()
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/widgets/HeadingTextView.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.widgets
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 | import androidx.appcompat.widget.AppCompatTextView
6 | import uk.nhs.nhsx.covid19.android.app.util.viewutils.setUpAccessibilityHeading
7 |
8 | class HeadingTextView @JvmOverloads constructor(
9 | context: Context,
10 | attrs: AttributeSet? = null,
11 | defStyleAttr: Int = android.R.attr.textViewStyle
12 | ) : AppCompatTextView(context, attrs, defStyleAttr) {
13 |
14 | init {
15 | setUpAccessibilityHeading()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/scenarios/res/layout/activity_test_settings.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
15 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/widgets/UnderlinedButton.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.widgets
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 | import androidx.core.text.parseAsHtml
6 | import com.google.android.material.button.MaterialButton
7 | import uk.nhs.nhsx.covid19.android.app.R
8 |
9 | class UnderlinedButton @JvmOverloads constructor(
10 | context: Context,
11 | attrs: AttributeSet? = null,
12 | defStyleAttr: Int = R.style.LinkText
13 | ) : MaterialButton(context, attrs, defStyleAttr) {
14 |
15 | init {
16 | text = ("$text").parseAsHtml()
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_alert.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_delete_venue_visit.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/payment/IsolationPaymentActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.payment
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.IsolationPaymentRobot
6 |
7 | class IsolationPaymentActivityTest : EspressoTest() {
8 |
9 | private val isolationPaymentRobot = IsolationPaymentRobot()
10 |
11 | @Test
12 | fun showScreen() {
13 | startTestActivity()
14 |
15 | isolationPaymentRobot.checkActivityIsDisplayed()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/qrcode/riskyvenues/FilterOutdatedVisits.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.qrcode.riskyvenues
2 |
3 | import uk.nhs.nhsx.covid19.android.app.qrcode.VenueVisit
4 | import java.time.Clock
5 | import java.time.Instant
6 | import java.time.temporal.ChronoUnit
7 | import javax.inject.Inject
8 |
9 | class FilterOutdatedVisits @Inject constructor(private val clock: Clock) : (List) -> List {
10 |
11 | override fun invoke(p1: List): List =
12 | p1.filter {
13 | it.to.isAfter(Instant.now(clock).minus(21, ChronoUnit.DAYS))
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/util/DoReToAwareAndroidJUnitRunner.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import android.os.Bundle
4 | import androidx.test.runner.AndroidJUnitRunner
5 |
6 | class DoReToAwareAndroidJUnitRunner : AndroidJUnitRunner() {
7 | override fun onCreate(bundle: Bundle) {
8 | bundle.putString(FILTER_BUNDLE_KEY, ReportedTestsFilter::class.java.name)
9 | super.onCreate(bundle)
10 | }
11 |
12 | companion object {
13 | // androidx.test.internal.runner.RunnerArgs looks for this bundle key
14 | private const val FILTER_BUNDLE_KEY = "filter"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/postcode/PostCodeProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common.postcode
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 | import javax.inject.Singleton
7 |
8 | @Singleton
9 | class PostCodeProvider @Inject constructor(sharedPreferences: SharedPreferences) {
10 |
11 | private val prefs = sharedPreferences.with(VALUE_KEY)
12 |
13 | var value: String? by prefs
14 |
15 | companion object {
16 | private const val VALUE_KEY = "MAIN_POST_CODE"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/VirologyCtaExchangeResponse.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 | import java.time.Instant
5 |
6 | @JsonClass(generateAdapter = true)
7 | data class VirologyCtaExchangeResponse(
8 | val diagnosisKeySubmissionToken: String?,
9 | val testEndDate: Instant,
10 | val testResult: VirologyTestResult,
11 | val testKit: VirologyTestKitType,
12 | val diagnosisKeySubmissionSupported: Boolean,
13 | val requiresConfirmatoryTest: Boolean,
14 | val shouldOfferFollowUpTest: Boolean,
15 | val confirmatoryDayLimit: Int?
16 | )
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/qrcode/QrCodeScanResult.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.qrcode
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | sealed class QrCodeScanResult : Parcelable {
7 |
8 | @Parcelize
9 | object Scanning : QrCodeScanResult()
10 |
11 | @Parcelize
12 | data class Success(val venueName: String) : QrCodeScanResult()
13 |
14 | @Parcelize
15 | object CameraPermissionNotGranted : QrCodeScanResult()
16 |
17 | @Parcelize
18 | object InvalidContent : QrCodeScanResult()
19 |
20 | @Parcelize
21 | object ScanningNotSupported : QrCodeScanResult()
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/status/LastAppRatingStartedDateProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.status
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 |
7 | class LastAppRatingStartedDateProvider @Inject constructor(sharedPreferences: SharedPreferences) {
8 |
9 | private val prefs = sharedPreferences.with(LAST_APP_RATING_STARTED_DATE_KEY)
10 |
11 | var value by prefs
12 |
13 | companion object {
14 | const val LAST_APP_RATING_STARTED_DATE_KEY = "LAST_APP_RATING_STARTED_DATE_KEY"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/BroadcastProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import android.app.PendingIntent
4 | import android.content.Context
5 | import android.content.Intent
6 | import javax.inject.Inject
7 | import javax.inject.Singleton
8 |
9 | /**
10 | * That class is needed for unit testing, since PendingIntent.getBroadcast returns null in unit tests
11 | */
12 | @Singleton
13 | class BroadcastProvider @Inject constructor() {
14 | fun getBroadcast(context: Context, requestCode: Int, clazz: Class<*>, flags: Int) =
15 | PendingIntent.getBroadcast(context, requestCode, Intent(context, clazz), flags)
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/adapters/TranslatableStringAdapter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.adapters
2 |
3 | import com.squareup.moshi.FromJson
4 | import com.squareup.moshi.ToJson
5 | import uk.nhs.nhsx.covid19.android.app.common.TranslatableString
6 |
7 | class TranslatableStringAdapter {
8 |
9 | @ToJson
10 | fun toJson(translatableString: TranslatableString): Map {
11 | return translatableString.translations
12 | }
13 |
14 | @FromJson
15 | fun fromJson(translatableJson: Map): TranslatableString {
16 | return TranslatableString(translatableJson)
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/postcode/LocalAuthorityProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common.postcode
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 | import javax.inject.Singleton
7 |
8 | @Singleton
9 | class LocalAuthorityProvider @Inject constructor(sharedPreferences: SharedPreferences) {
10 |
11 | private val prefs = sharedPreferences.with(VALUE_KEY)
12 |
13 | var value: String? by prefs
14 |
15 | companion object {
16 | private const val VALUE_KEY = "LOCAL_AUTHORITY_ID"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/remote/MockEpidemiologyDataApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import uk.nhs.nhsx.covid19.android.app.di.MockApiModule
4 | import uk.nhs.nhsx.covid19.android.app.remote.data.EpidemiologyRequest
5 |
6 | class MockEpidemiologyDataApi : EpidemiologyDataApi {
7 |
8 | val requests = mutableListOf()
9 |
10 | override suspend fun submitEpidemiologyData(epidemiologyRequest: EpidemiologyRequest) =
11 | MockApiModule.behaviour.invoke {
12 | requests += epidemiologyRequest
13 | }
14 |
15 | fun clear() {
16 | requests.clear()
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/edgecases/DeviceNotSupportedActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.edgecases
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.edgecases.DeviceNotSupportedRobot
6 |
7 | class DeviceNotSupportedActivityTest : EspressoTest() {
8 |
9 | private val deviceNotSupportedRobot = DeviceNotSupportedRobot()
10 |
11 | @Test
12 | fun showScreen() {
13 | startTestActivity()
14 |
15 | deviceNotSupportedRobot.checkActivityIsDisplayed()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/qrcode/QrScannerActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.qrcode
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.R
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
7 |
8 | class QrScannerActivityTest : EspressoTest(), HasActivity {
9 | override val containerId: Int
10 | get() = R.id.container
11 |
12 | @Test
13 | fun canActivityLaunchSuccessfully() {
14 | startTestActivity()
15 | checkActivityIsDisplayed()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/availability/AppStoreUtils.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.availability
2 |
3 | import android.content.ActivityNotFoundException
4 | import android.content.Intent
5 | import android.net.Uri
6 | import androidx.appcompat.app.AppCompatActivity
7 |
8 | fun AppCompatActivity.openAppStore() {
9 | try {
10 | startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=uk.nhs.covid19.production")))
11 | } catch (exception: ActivityNotFoundException) {
12 | startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=uk.nhs.covid19.production")))
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/onboarding/OnboardingCompletedProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.onboarding
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 | import javax.inject.Singleton
7 |
8 | @Singleton
9 | class OnboardingCompletedProvider @Inject constructor(sharedPreferences: SharedPreferences) {
10 |
11 | private val prefs = sharedPreferences.with(VALUE_KEY)
12 |
13 | var value: Boolean? by prefs
14 |
15 | companion object {
16 | private const val VALUE_KEY = "ONBOARDING_COMPLETED"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/WorkerUtils.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util
2 |
3 | import androidx.work.ListenableWorker
4 | import timber.log.Timber
5 | import uk.nhs.nhsx.covid19.android.app.common.Result
6 | import uk.nhs.nhsx.covid19.android.app.common.Result.Failure
7 | import uk.nhs.nhsx.covid19.android.app.common.Result.Success
8 |
9 | fun Result.toWorkerResult(): ListenableWorker.Result =
10 | when (this) {
11 | is Success -> ListenableWorker.Result.success()
12 | is Failure -> {
13 | Timber.e(this.throwable, "WorkerResult")
14 | ListenableWorker.Result.failure()
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_exclamation.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/custom-ktlint-rules/src/main/java/uk/nhs/nhsx/covid19/android/ktlint/CustomRuleSetProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.ktlint
2 |
3 | import com.pinterest.ktlint.core.RuleSet
4 | import com.pinterest.ktlint.core.RuleSetProvider
5 | import uk.nhs.nhsx.covid19.android.ktlint.rule.NoSetOnClickListenerRule
6 | import uk.nhs.nhsx.covid19.android.ktlint.rule.ReportedTestRule
7 | import uk.nhs.nhsx.covid19.android.ktlint.rule.TestNameLengthRule
8 |
9 | class CustomRuleSetProvider : RuleSetProvider {
10 | override fun get() = RuleSet("custom-ktlint-rules",
11 | NoSetOnClickListenerRule(),
12 | ReportedTestRule(),
13 | TestNameLengthRule()
14 | )
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/analytics/NetworkStatsInterceptor.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.analytics
2 |
3 | import okhttp3.Interceptor
4 | import okhttp3.Interceptor.Chain
5 | import okhttp3.Response
6 | import javax.inject.Inject
7 |
8 | class NetworkStatsInterceptor @Inject constructor(
9 | private val analyticsEventProcessor: AnalyticsEventProcessor
10 | ) : Interceptor {
11 |
12 | override fun intercept(chain: Chain): Response {
13 | val request = chain.request()
14 | val response = chain.proceed(request)
15 | analyticsEventProcessor.track(AnalyticsEvent.UpdateNetworkStats)
16 | return response
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/initial_card_background.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
7 |
8 | -
9 |
10 |
11 |
12 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_onboarding_toolbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/robots/edgecases/AgeRestrictionRobot.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers.robots.edgecases
2 |
3 | import androidx.test.espresso.Espresso.onView
4 | import androidx.test.espresso.assertion.ViewAssertions.matches
5 | import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
6 | import androidx.test.espresso.matcher.ViewMatchers.withText
7 | import uk.nhs.nhsx.covid19.android.app.R
8 |
9 | class AgeRestrictionRobot {
10 |
11 | fun checkActivityIsDisplayed() {
12 | onView(withText(R.string.onboarding_age_restriction_title))
13 | .check(matches(isDisplayed()))
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/robots/edgecases/EnableLocationRobot.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers.robots.edgecases
2 |
3 | import androidx.test.espresso.Espresso.onView
4 | import androidx.test.espresso.assertion.ViewAssertions.matches
5 | import androidx.test.espresso.matcher.ViewMatchers.withId
6 | import androidx.test.espresso.matcher.ViewMatchers.withText
7 | import uk.nhs.nhsx.covid19.android.app.R
8 |
9 | class EnableLocationRobot {
10 | fun checkActivityIsDisplayed() {
11 | onView(withId(R.id.edgeCaseTitle))
12 | .check(matches(withText(R.string.enable_location_service_title)))
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/setup/LocalAuthoritySetupHelper.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers.setup
2 |
3 | import uk.nhs.nhsx.covid19.android.app.testhelpers.TestApplicationContext
4 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.HasTestAppContext
5 |
6 | interface LocalAuthoritySetupHelper : HasTestAppContext {
7 | fun givenLocalAuthorityIsInEngland() {
8 | testAppContext.setLocalAuthority(TestApplicationContext.ENGLISH_LOCAL_AUTHORITY)
9 | }
10 |
11 | fun givenLocalAuthorityIsInWales() {
12 | testAppContext.setLocalAuthority(TestApplicationContext.WELSH_LOCAL_AUTHORITY)
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/DecommissioningNotificationSentProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 | import javax.inject.Singleton
7 |
8 | @Singleton
9 | class DecommissioningNotificationSentProvider @Inject constructor(sharedPreferences: SharedPreferences) {
10 |
11 | private val prefs = sharedPreferences.with(VALUE_KEY)
12 |
13 | var value: Boolean? by prefs
14 |
15 | companion object {
16 | private const val VALUE_KEY = "DECOMMISSIONING_NOTIFICATION_SENT"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/state/IsolationExpirationAlarmProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.state
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 |
7 | class IsolationExpirationAlarmProvider @Inject constructor(
8 | sharedPreferences: SharedPreferences
9 | ) {
10 |
11 | private val prefs = sharedPreferences.with(ISOLATION_EXPIRATION_ALARM_TIME)
12 |
13 | var value: Long? by prefs
14 |
15 | companion object {
16 | private const val ISOLATION_EXPIRATION_ALARM_TIME = "ISOLATION_EXPIRATION_ALARM_TIME"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/onboarding/PolicyUpdateActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.onboarding
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.R
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
7 |
8 | class PolicyUpdateActivityTest : EspressoTest(), HasActivity {
9 | override val containerId: Int
10 | get() = R.id.scrollView
11 |
12 | @Test
13 | fun canActivityLaunchSuccessfully() {
14 | startTestActivity()
15 | checkActivityIsDisplayed()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/adapters/ColorSchemeAdapter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.adapters
2 |
3 | import com.squareup.moshi.FromJson
4 | import com.squareup.moshi.ToJson
5 | import uk.nhs.nhsx.covid19.android.app.remote.data.ColorScheme
6 | import uk.nhs.nhsx.covid19.android.app.remote.data.ColorScheme.NEUTRAL
7 |
8 | class ColorSchemeAdapter {
9 | @ToJson
10 | fun toJson(colorScheme: ColorScheme): String {
11 | return colorScheme.jsonName
12 | }
13 |
14 | @FromJson
15 | fun fromJson(colorScheme: String): ColorScheme {
16 | return ColorScheme.values().firstOrNull { it.jsonName == colorScheme } ?: NEUTRAL
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/view_paragraph.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
9 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/exposure/AllowShareKeysActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.R
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
7 |
8 | class AllowShareKeysActivityTest : EspressoTest(), HasActivity {
9 | override val containerId: Int
10 | get() = R.id.yesButton
11 |
12 | @Test
13 | fun canActivityBeLaunchedSuccessfully() {
14 | startTestActivity()
15 | checkActivityIsDisplayed()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/localstats/FetchLocalDataProgressActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.localstats
2 |
3 | import org.junit.Ignore
4 | import org.junit.Test
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.ProgressRobot
7 |
8 | class FetchLocalDataProgressActivityTest : EspressoTest() {
9 |
10 | private val progressRobot = ProgressRobot()
11 |
12 | @Test
13 | @Ignore
14 | fun canActivityLaunchSuccessfully() {
15 | startTestActivity()
16 | progressRobot.checkActivityIsDisplayed()
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/edgecases/AgeRestrictionActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.edgecases
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.R
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
7 |
8 | class AgeRestrictionActivityTest : EspressoTest(), HasActivity {
9 | override val containerId: Int
10 | get() = R.id.edgeCaseContainer
11 |
12 | @Test
13 | fun canActivityLaunchSuccessfully() {
14 | startTestActivity()
15 | checkActivityIsDisplayed()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/onboarding/postcode/PostCodeActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.onboarding.postcode
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.R
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
7 |
8 | class PostCodeActivityTest : EspressoTest(), HasActivity {
9 |
10 | override val containerId: Int
11 | get() = R.id.scrollView
12 |
13 | @Test
14 | fun canActivityLaunchSuccessfully() {
15 | startTestActivity()
16 | checkActivityIsDisplayed()
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/viewutils/ThemeUtils.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.viewutils
2 |
3 | import android.content.Context
4 | import android.util.TypedValue
5 | import androidx.annotation.AttrRes
6 | import androidx.annotation.ColorInt
7 |
8 | @ColorInt
9 | fun Context.getThemeColor(@AttrRes attribute: Int): Int {
10 | val typedValue = TypedValue()
11 | theme.resolveAttribute(attribute, typedValue, true)
12 | return typedValue.data
13 | }
14 |
15 | fun Context.getThemeDrawableResId(@AttrRes attribute: Int): Int {
16 | val typedValue = TypedValue()
17 | theme.resolveAttribute(attribute, typedValue, true)
18 | return typedValue.resourceId
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_isolation_hub.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/radio_selected_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/onboarding/DataAndPrivacyActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.onboarding
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.R
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
7 |
8 | class DataAndPrivacyActivityTest : EspressoTest(), HasActivity {
9 | override val containerId: Int
10 | get() = R.id.dateAndPrivacyContainer
11 |
12 | @Test
13 | fun canActivityLaunchSuccessfully() {
14 | startTestActivity()
15 | checkActivityIsDisplayed()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/VirologyTestResultResponse.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 | import java.time.Instant
5 |
6 | @JsonClass(generateAdapter = true)
7 | data class VirologyTestResultResponse(
8 | val testEndDate: Instant,
9 | val testResult: VirologyTestResult,
10 | val testKit: VirologyTestKitType,
11 | val diagnosisKeySubmissionSupported: Boolean,
12 | val requiresConfirmatoryTest: Boolean,
13 | val shouldOfferFollowUpTest: Boolean,
14 | val confirmatoryDayLimit: Int?
15 | )
16 |
17 | enum class VirologyTestResult {
18 | POSITIVE,
19 | NEGATIVE,
20 | VOID,
21 | PLOD
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/radio_not_selected_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/questionnaire/review/NoSymptomsActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.questionnaire.review
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.R
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
7 |
8 | class NoSymptomsActivityTest : EspressoTest(), HasActivity {
9 |
10 | override val containerId: Int
11 | get() = R.id.imageNoSymptom
12 |
13 | @Test
14 | fun canActivityLaunchSuccessfully() {
15 | startTestActivity()
16 | checkActivityIsDisplayed()
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/questionnaire/review/RiskCalculator.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.questionnaire.review
2 |
3 | import androidx.annotation.VisibleForTesting
4 | import uk.nhs.nhsx.covid19.android.app.questionnaire.selection.Symptom
5 | import javax.inject.Inject
6 |
7 | class RiskCalculator @Inject constructor() {
8 |
9 | fun isRiskAboveThreshold(checkedSymptoms: List, riskThreshold: Float): Boolean {
10 | return calculateRisk(checkedSymptoms) >= riskThreshold
11 | }
12 |
13 | @VisibleForTesting
14 | internal fun calculateRisk(checkedSymptoms: List): Double {
15 | return checkedSymptoms.sumByDouble { it.riskWeight }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_negative_symptom.xml:
--------------------------------------------------------------------------------
1 |
6 |
12 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_venue_visit_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
16 |
--------------------------------------------------------------------------------
/app/src/test/java/uk/nhs/nhsx/covid19/android/app/utils/CoroutineTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.utils
2 |
3 | import kotlinx.coroutines.test.TestCoroutineDispatcher
4 | import kotlinx.coroutines.test.TestCoroutineScope
5 | import kotlinx.coroutines.test.runBlockingTest
6 | import org.junit.After
7 |
8 | open class CoroutineTest {
9 |
10 | private val testDispatcher = TestCoroutineDispatcher()
11 | val testScope = TestCoroutineScope(testDispatcher)
12 |
13 | @After
14 | fun tearDown() {
15 | testScope.cleanupTestCoroutines()
16 | }
17 |
18 | fun runBlockingTest(function: suspend TestCoroutineScope.() -> Unit) {
19 | testDispatcher.runBlockingTest(function)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/testordering/unknownresult/ReceivedUnknownTestResultProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testordering.unknownresult
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 |
7 | class ReceivedUnknownTestResultProvider @Inject constructor(
8 | sharedPreferences: SharedPreferences
9 | ) {
10 |
11 | private val prefs = sharedPreferences.with(RECEIVED_UNKNOWN_TEST_RESULT)
12 |
13 | var value: Boolean? by prefs
14 |
15 | companion object {
16 | const val RECEIVED_UNKNOWN_TEST_RESULT = "RECEIVED_UNKNOWN_TEST_RESULT"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/battery/BatteryOptimizationAcknowledgementProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.battery
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 | import javax.inject.Singleton
7 |
8 | @Singleton
9 | class BatteryOptimizationAcknowledgementProvider @Inject constructor(
10 | sharedPreferences: SharedPreferences
11 | ) {
12 |
13 | private val prefs = sharedPreferences.with(VALUE_KEY)
14 |
15 | var value: Long? by prefs
16 |
17 | companion object {
18 | private const val VALUE_KEY = "BATTERY_OPTIMIZATION_ACKNOWLEDGEMENT_TIME"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/common/Lce.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.common
2 |
3 | sealed class Lce {
4 |
5 | open val data: T? = null
6 |
7 | abstract fun map(f: (T) -> R): Lce
8 |
9 | data class Success(override val data: T) : Lce() {
10 | override fun map(f: (T) -> R): Lce = Success(f(data))
11 | }
12 |
13 | data class Error(val message: String) : Lce() {
14 | constructor(t: Throwable) : this(t.message ?: "")
15 |
16 | override fun map(f: (Nothing) -> R): Lce = this
17 | }
18 |
19 | object Loading : Lce() {
20 | override fun map(f: (Nothing) -> R): Lce = this
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/encounter/HasSuccessfullyProcessedNewExposureProvider.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.encounter
2 |
3 | import android.content.SharedPreferences
4 | import uk.nhs.nhsx.covid19.android.app.util.SharedPrefsDelegate.Companion.with
5 | import javax.inject.Inject
6 | import javax.inject.Singleton
7 |
8 | @Singleton
9 | class HasSuccessfullyProcessedNewExposureProvider @Inject constructor(sharedPreferences: SharedPreferences) {
10 | private val prefs = sharedPreferences.with(VALUE_KEY)
11 |
12 | var value: Boolean? by prefs
13 |
14 | companion object {
15 | const val VALUE_KEY = "HAS_FAILED_PROCESSING_NEW_EXPOSURE_KEY"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/questionnaire/GetLastDoseDateLimit.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.questionnaire
2 |
3 | import uk.nhs.nhsx.covid19.android.app.exposure.encounter.GetRiskyContactEncounterDate
4 | import java.time.LocalDate
5 | import java.time.temporal.ChronoUnit
6 | import javax.inject.Inject
7 |
8 | class GetLastDoseDateLimit @Inject constructor(
9 | private val getRiskyContactEncounterDate: GetRiskyContactEncounterDate
10 | ) {
11 |
12 | operator fun invoke(): LocalDate? = getRiskyContactEncounterDate()?.minus(exposureDoseDateThreshold, ChronoUnit.DAYS)
13 |
14 | companion object {
15 | private const val exposureDoseDateThreshold = 15L
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/remote/data/QuestionnaireResponse.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote.data
2 |
3 | import com.squareup.moshi.JsonClass
4 | import uk.nhs.nhsx.covid19.android.app.questionnaire.selection.Cardinal
5 | import uk.nhs.nhsx.covid19.android.app.questionnaire.selection.NonCardinal
6 | import uk.nhs.nhsx.covid19.android.app.questionnaire.selection.Symptom
7 |
8 | @JsonClass(generateAdapter = true)
9 | data class QuestionnaireResponse(
10 | val symptoms: List,
11 | val cardinal: Cardinal,
12 | val noncardinal: NonCardinal,
13 | val riskThreshold: Float,
14 | val symptomsOnsetWindowDays: Int,
15 | val isSymptomaticSelfIsolationForWalesEnabled: Boolean
16 | )
17 |
--------------------------------------------------------------------------------
/app/src/test/java/uk/nhs/nhsx/covid19/android/app/testordering/unknownresult/UnknownTestResultViewModelTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testordering.unknownresult
2 |
3 | import io.mockk.mockk
4 | import io.mockk.verify
5 | import org.junit.Test
6 |
7 | class UnknownTestResultViewModelTest {
8 | private val receivedUnknownTestResultProvider = mockk(relaxUnitFun = true)
9 |
10 | val testSubject = UnknownTestResultViewModel(receivedUnknownTestResultProvider)
11 |
12 | @Test
13 | fun `acknowledging unknown test result resets flag`() {
14 | testSubject.acknowledgeUnknownTestResult()
15 | verify { receivedUnknownTestResultProvider.value = false }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/exposure/EnableExposureNotificationActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.R
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
7 |
8 | class EnableExposureNotificationActivityTest : EspressoTest(), HasActivity {
9 | override val containerId: Int
10 | get() = R.id.yesButton
11 |
12 | @Test
13 | fun canActivityBeLaunchedSuccessfully() {
14 | startTestActivity()
15 | checkActivityIsDisplayed()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/questionnaire/review/ReviewSymptomsActivityTest.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.questionnaire.review
2 |
3 | import org.junit.Test
4 | import uk.nhs.nhsx.covid19.android.app.R
5 | import uk.nhs.nhsx.covid19.android.app.testhelpers.base.EspressoTest
6 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
7 |
8 | class ReviewSymptomsActivityTest : EspressoTest(), HasActivity {
9 | override val containerId: Int
10 | get() = R.id.scrollViewReviewSymptoms
11 |
12 | @Test
13 | fun canActivityLaunchSuccessfully() {
14 | startTestActivity()
15 | checkActivityIsDisplayed()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/robots/HowAppWorksRobot.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers.robots
2 |
3 | import androidx.test.espresso.Espresso.onView
4 | import androidx.test.espresso.action.ViewActions.click
5 | import androidx.test.espresso.matcher.ViewMatchers.withId
6 | import uk.nhs.nhsx.covid19.android.app.R.id
7 | import uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces.HasActivity
8 |
9 | class HowAppWorksRobot : HasActivity {
10 | override val containerId: Int
11 | get() = id.howAppWorksContainer
12 |
13 | fun clickContinueOnboarding() {
14 | onView(withId(id.continueHowAppWorks))
15 | .perform(click())
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/adapters/LocalDateAdapter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.adapters
2 |
3 | import com.squareup.moshi.FromJson
4 | import com.squareup.moshi.JsonDataException
5 | import com.squareup.moshi.ToJson
6 | import java.time.LocalDate
7 |
8 | class LocalDateAdapter {
9 | @ToJson
10 | fun toJson(localDate: LocalDate): String {
11 | return localDate.toString()
12 | }
13 |
14 | @FromJson
15 | fun fromJson(localDate: String): LocalDate {
16 | return try {
17 | LocalDate.parse(localDate)
18 | } catch (exception: Exception) {
19 | throw JsonDataException("Wrong LocalDate format: $localDate")
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/scenarios/java/uk/nhs/nhsx/covid19/android/app/remote/MockAnalyticsApi.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.remote
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import uk.nhs.nhsx.covid19.android.app.di.MockApiModule
6 | import uk.nhs.nhsx.covid19.android.app.remote.data.AnalyticsPayload
7 |
8 | class MockAnalyticsApi : AnalyticsApi {
9 | private val lastRequestLiveData = MutableLiveData()
10 | fun lastRequest(): LiveData = lastRequestLiveData
11 |
12 | override suspend fun submitAnalytics(analyticsPayload: AnalyticsPayload) = MockApiModule.behaviour.invoke {
13 | lastRequestLiveData.postValue(analyticsPayload)
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/androidTestScenarios/java/uk/nhs/nhsx/covid19/android/app/testhelpers/robots/interfaces/HasActivity.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testhelpers.robots.interfaces
2 |
3 | import androidx.annotation.IdRes
4 | import androidx.test.espresso.Espresso.onView
5 | import androidx.test.espresso.assertion.ViewAssertions.matches
6 | import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
7 | import androidx.test.espresso.matcher.ViewMatchers.withId
8 | import uk.nhs.nhsx.covid19.android.app.testhelpers.waitFor
9 |
10 | interface HasActivity {
11 | @get:IdRes
12 | val containerId: Int
13 |
14 | fun checkActivityIsDisplayed() = waitFor {
15 | onView(withId(containerId)).check(matches(isDisplayed()))
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/permissions/AndroidPermissionsManager.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.permissions
2 |
3 | import android.app.Activity
4 | import android.content.Context
5 | import androidx.core.app.ActivityCompat
6 | import androidx.core.content.ContextCompat
7 |
8 | class AndroidPermissionsManager : PermissionsManager {
9 |
10 | override fun requestPermissions(activity: Activity, permissions: Array, requestCode: Int) {
11 | ActivityCompat.requestPermissions(activity, permissions, requestCode)
12 | }
13 |
14 | override fun checkSelfPermission(context: Context, permission: String): Int {
15 | return ContextCompat.checkSelfPermission(context, permission)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/testordering/GetEmptyExposureWindowSubmissionCount.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.testordering
2 |
3 | import java.security.SecureRandom
4 | import javax.inject.Inject
5 | import kotlin.math.max
6 |
7 | class GetEmptyExposureWindowSubmissionCount @Inject constructor(private val secureRandom: SecureRandom) {
8 |
9 | operator fun invoke(numberOfExposureWindowsSent: Int = 0): Int {
10 | val totalCallCount = secureRandom.nextInt(MAX_CALLS - MIN_CALLS) + MIN_CALLS
11 | return max(0, totalCallCount - numberOfExposureWindowsSent)
12 | }
13 |
14 | companion object {
15 | private const val MIN_CALLS = 2
16 | private const val MAX_CALLS = 16
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/exposure/sharekeys/ShareKeysNavigation.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.exposure.sharekeys
2 |
3 | import uk.nhs.nhsx.covid19.android.app.remote.data.NHSTemporaryExposureKey
4 |
5 | interface ShareKeysNavigationTarget
6 |
7 | sealed class ShareKeysNavigateTo : ShareKeysNavigationTarget {
8 | data class SubmitKeysProgressActivity(
9 | val temporaryExposureKeys: List,
10 | val diagnosisKeySubmissionToken: String
11 | ) : ShareKeysNavigateTo()
12 |
13 | data class ShareKeysResultActivity(val bookFollowUpTest: Boolean) : ShareKeysNavigateTo()
14 | object StatusActivity : ShareKeysNavigateTo()
15 | object Finish : ShareKeysNavigateTo()
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/adapters/ContentBlockTypeAdapter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.adapters
2 |
3 | import com.squareup.moshi.FromJson
4 | import com.squareup.moshi.ToJson
5 | import uk.nhs.nhsx.covid19.android.app.remote.data.ContentBlockType
6 | import uk.nhs.nhsx.covid19.android.app.remote.data.ContentBlockType.UNKNOWN
7 |
8 | class ContentBlockTypeAdapter {
9 | @ToJson
10 | fun toJson(contentBlockType: ContentBlockType): String {
11 | return contentBlockType.jsonName
12 | }
13 |
14 | @FromJson
15 | fun fromJson(contentBlockType: String): ContentBlockType {
16 | return ContentBlockType.values().firstOrNull { it.jsonName == contentBlockType } ?: UNKNOWN
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/uk/nhs/nhsx/covid19/android/app/util/adapters/LocalMessageTypeAdapter.kt:
--------------------------------------------------------------------------------
1 | package uk.nhs.nhsx.covid19.android.app.util.adapters
2 |
3 | import com.squareup.moshi.FromJson
4 | import com.squareup.moshi.ToJson
5 | import uk.nhs.nhsx.covid19.android.app.remote.data.LocalMessageType
6 | import uk.nhs.nhsx.covid19.android.app.remote.data.LocalMessageType.UNKNOWN
7 |
8 | class LocalMessageTypeAdapter {
9 | @ToJson
10 | fun toJson(localMessageType: LocalMessageType): String {
11 | return localMessageType.jsonName
12 | }
13 |
14 | @FromJson
15 | fun fromJson(localMessageType: String): LocalMessageType {
16 | return LocalMessageType.values().firstOrNull { it.jsonName == localMessageType } ?: UNKNOWN
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_policy_international_travel.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_multiline_title.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
--------------------------------------------------------------------------------