Repository: admin-ch/CovidCertificate-App-Android
Branch: main
Commit: 2578da419092
Files: 643
Total size: 2.9 MB
Directory structure:
gitextract_e7z7c8gy/
├── .github/
│ ├── actions/
│ │ └── gradle_docker/
│ │ ├── action.yml
│ │ └── main.sh
│ └── workflows/
│ ├── appcenter_verifier_abn.yml
│ ├── appcenter_verifier_dev.yml
│ ├── appcenter_verifier_prod.yml
│ ├── appcenter_verifier_prodfdroid.yml
│ ├── appcenter_wallet_abn.yml
│ ├── appcenter_wallet_dev.yml
│ ├── appcenter_wallet_prod.yml
│ ├── appcenter_wallet_prodfdroid.yml
│ ├── browserstack_wallet_abn.yml
│ ├── build.yml
│ └── gradle-wrapper-validation.yml
├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── REPRODUCIBLE_BUILDS.md
├── apkdiff.py
├── build.gradle
├── buildAndCompare.sh
├── common/
│ ├── .gitignore
│ ├── build.gradle
│ ├── consumer-rules.pro
│ ├── proguard-rules.pro
│ └── src/
│ ├── abn/
│ │ └── java/
│ │ └── ch/
│ │ └── admin/
│ │ └── bag/
│ │ └── covidcertificate/
│ │ └── common/
│ │ └── debug/
│ │ └── DebugFragment.kt
│ ├── dev/
│ │ ├── java/
│ │ │ └── ch/
│ │ │ └── admin/
│ │ │ └── bag/
│ │ │ └── covidcertificate/
│ │ │ └── common/
│ │ │ └── debug/
│ │ │ ├── DebugFragment.kt
│ │ │ └── DebugSecureStorage.kt
│ │ └── res/
│ │ └── xml/
│ │ └── network_security_config.xml
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── assets/
│ │ │ └── impressum/
│ │ │ ├── de/
│ │ │ │ ├── impressum.html
│ │ │ │ └── licence.html
│ │ │ ├── en/
│ │ │ │ ├── impressum.html
│ │ │ │ └── licence.html
│ │ │ ├── fonts/
│ │ │ │ ├── Inter-Bold.otf
│ │ │ │ └── Inter-Light.otf
│ │ │ ├── fr/
│ │ │ │ ├── impressum.html
│ │ │ │ └── licence.html
│ │ │ ├── it/
│ │ │ │ ├── impressum.html
│ │ │ │ └── licence.html
│ │ │ └── rm/
│ │ │ ├── impressum.html
│ │ │ └── licence.html
│ │ ├── java/
│ │ │ └── ch/
│ │ │ └── admin/
│ │ │ └── bag/
│ │ │ └── covidcertificate/
│ │ │ └── common/
│ │ │ ├── BaseActivity.kt
│ │ │ ├── browserstack/
│ │ │ │ ├── AirplaneMode.kt
│ │ │ │ ├── BadNetwork.kt
│ │ │ │ ├── Normal.kt
│ │ │ │ └── Onboarding.kt
│ │ │ ├── config/
│ │ │ │ ├── CertificateRenewalInfoDetailModel.kt
│ │ │ │ ├── CertificateRenewalInfoModel.kt
│ │ │ │ ├── CertificateRenewalType.kt
│ │ │ │ ├── CheckModesInfosModel.kt
│ │ │ │ ├── ConfigModel.kt
│ │ │ │ ├── ConfigViewModel.kt
│ │ │ │ ├── CovidCertificateNewsItem.kt
│ │ │ │ ├── EolBannerInfoModel.kt
│ │ │ │ ├── FaqEntryModel.kt
│ │ │ │ ├── FaqIntroSection.kt
│ │ │ │ ├── FaqModel.kt
│ │ │ │ ├── ForeignRulesHintModel.kt
│ │ │ │ ├── InfoBoxModel.kt
│ │ │ │ ├── InfoCovidCertificateNews.kt
│ │ │ │ ├── RefreshButtonInfoModel.kt
│ │ │ │ ├── VaccinationBookingInfoModel.kt
│ │ │ │ └── VaccinationHintModel.kt
│ │ │ ├── data/
│ │ │ │ └── ConfigSecureStorage.kt
│ │ │ ├── dialog/
│ │ │ │ └── InfoDialogFragment.kt
│ │ │ ├── exception/
│ │ │ │ ├── HttpIOException.kt
│ │ │ │ └── TimeDeviationException.kt
│ │ │ ├── extensions/
│ │ │ │ ├── ContextExtensions.kt
│ │ │ │ ├── DccCertExtensions.kt
│ │ │ │ ├── LifecycleOwnerExtensions.kt
│ │ │ │ ├── OkHttpExtensions.kt
│ │ │ │ └── WindowExtensions.kt
│ │ │ ├── faq/
│ │ │ │ ├── FaqAdapter.kt
│ │ │ │ ├── FaqFragment.kt
│ │ │ │ ├── FaqItem.kt
│ │ │ │ ├── FaqViewHolder.kt
│ │ │ │ └── model/
│ │ │ │ └── Header.kt
│ │ │ ├── html/
│ │ │ │ ├── BuildInfo.kt
│ │ │ │ └── ImprintFragment.kt
│ │ │ ├── net/
│ │ │ │ ├── ConfigRepository.kt
│ │ │ │ └── ConfigService.kt
│ │ │ ├── onboarding/
│ │ │ │ ├── BaseOnboardingActivity.kt
│ │ │ │ └── SimpleOnboardingPagerAdapter.kt
│ │ │ ├── qr/
│ │ │ │ ├── CameraPermissionExplanationDialog.kt
│ │ │ │ ├── KittlerBinarizer.kt
│ │ │ │ ├── QRCodeReaderHelper.kt
│ │ │ │ ├── QrScanFragment.kt
│ │ │ │ └── QrScannerState.kt
│ │ │ ├── settings/
│ │ │ │ └── SettingsFragment.kt
│ │ │ ├── util/
│ │ │ │ ├── AssetUtil.kt
│ │ │ │ ├── CutOutEdgeTreatment.kt
│ │ │ │ ├── EnvironmentUtil.kt
│ │ │ │ ├── ErrorCodeUtil.kt
│ │ │ │ ├── ErrorHelper.kt
│ │ │ │ ├── ErrorState.kt
│ │ │ │ ├── HorizontalMarginItemDecoration.kt
│ │ │ │ ├── LocaleUtil.kt
│ │ │ │ ├── SingleLiveEvent.java
│ │ │ │ ├── StringUtil.kt
│ │ │ │ ├── UiUtil.kt
│ │ │ │ ├── UlTagHandler.java
│ │ │ │ └── UrlUtil.java
│ │ │ └── views/
│ │ │ ├── MarginItemDecoration.kt
│ │ │ ├── ViewExtensions.kt
│ │ │ └── WindowInsetsLayout.kt
│ │ └── res/
│ │ ├── anim/
│ │ │ ├── fragment_open_enter.xml
│ │ │ ├── fragment_open_exit.xml
│ │ │ ├── slide_enter.xml
│ │ │ ├── slide_exit.xml
│ │ │ ├── slide_pop_enter.xml
│ │ │ └── slide_pop_exit.xml
│ │ ├── color/
│ │ │ ├── selector_black_or_white.xml
│ │ │ ├── selector_blue_or_white.xml
│ │ │ ├── selector_grey_or_blue.xml
│ │ │ ├── selector_grey_or_white.xml
│ │ │ ├── selector_transparent_or_blue.xml
│ │ │ ├── selector_white_or_black.xml
│ │ │ ├── selector_white_or_blue.xml
│ │ │ └── text_radio_checkable.xml
│ │ ├── drawable/
│ │ │ ├── bg_button_default.xml
│ │ │ ├── bg_button_red.xml
│ │ │ ├── bg_button_white.xml
│ │ │ ├── bg_corners_top_left.xml
│ │ │ ├── bg_dialog.xml
│ │ │ ├── bg_pill.xml
│ │ │ ├── bg_rect_rounded_sheet.xml
│ │ │ ├── bg_rect_rounded_small.xml
│ │ │ ├── bg_rect_rounded_small_blue_ripple.xml
│ │ │ ├── bg_rect_rounded_small_checkable.xml
│ │ │ ├── bg_rect_rounded_small_red.xml
│ │ │ ├── btn_radio_checkable.xml
│ │ │ ├── dot_black.xml
│ │ │ ├── dot_grey.xml
│ │ │ ├── dot_white.xml
│ │ │ ├── header_bottom.xml
│ │ │ ├── header_collapsed_shadow.xml
│ │ │ ├── ic_1g.xml
│ │ │ ├── ic_2g.xml
│ │ │ ├── ic_2g_green.xml
│ │ │ ├── ic_2g_grey.xml
│ │ │ ├── ic_2g_plus.xml
│ │ │ ├── ic_3g.xml
│ │ │ ├── ic_arrow_contract.xml
│ │ │ ├── ic_arrow_expand.xml
│ │ │ ├── ic_arrow_forward.xml
│ │ │ ├── ic_bund_small.xml
│ │ │ ├── ic_bundwappen_big.xml
│ │ │ ├── ic_call.xml
│ │ │ ├── ic_cam_off.xml
│ │ │ ├── ic_camera_switch.xml
│ │ │ ├── ic_check_filled.xml
│ │ │ ├── ic_check_green.xml
│ │ │ ├── ic_check_grey.xml
│ │ │ ├── ic_check_large.xml
│ │ │ ├── ic_checkbox_empty.xml
│ │ │ ├── ic_checkbox_filled.xml
│ │ │ ├── ic_close.xml
│ │ │ ├── ic_close_red.xml
│ │ │ ├── ic_dot.xml
│ │ │ ├── ic_double_check.xml
│ │ │ ├── ic_error.xml
│ │ │ ├── ic_error_blue.xml
│ │ │ ├── ic_error_grey.xml
│ │ │ ├── ic_error_large.xml
│ │ │ ├── ic_error_orange.xml
│ │ │ ├── ic_error_triangle.xml
│ │ │ ├── ic_expire_i.xml
│ │ │ ├── ic_faq.xml
│ │ │ ├── ic_header_slim.xml
│ │ │ ├── ic_how_it_works_image.xml
│ │ │ ├── ic_info.xml
│ │ │ ├── ic_info_alert.xml
│ │ │ ├── ic_info_blue.xml
│ │ │ ├── ic_info_outline.xml
│ │ │ ├── ic_invalid_grey.xml
│ │ │ ├── ic_invalid_red.xml
│ │ │ ├── ic_light_off.xml
│ │ │ ├── ic_light_off_blue.xml
│ │ │ ├── ic_light_on.xml
│ │ │ ├── ic_light_on_black.xml
│ │ │ ├── ic_link_external.xml
│ │ │ ├── ic_load.xml
│ │ │ ├── ic_no1g.xml
│ │ │ ├── ic_no2g.xml
│ │ │ ├── ic_no3g.xml
│ │ │ ├── ic_no_2_g_plus_height.xml
│ │ │ ├── ic_no_connection.xml
│ │ │ ├── ic_no_connection_large.xml
│ │ │ ├── ic_notification.xml
│ │ │ ├── ic_notification_filled.xml
│ │ │ ├── ic_offline.xml
│ │ │ ├── ic_offline_large.xml
│ │ │ ├── ic_offline_orange.xml
│ │ │ ├── ic_one.xml
│ │ │ ├── ic_phone.xml
│ │ │ ├── ic_plus.xml
│ │ │ ├── ic_plus_green.xml
│ │ │ ├── ic_privacy.xml
│ │ │ ├── ic_privacy_grey.xml
│ │ │ ├── ic_process_error.xml
│ │ │ ├── ic_process_error_grey.xml
│ │ │ ├── ic_process_error_large.xml
│ │ │ ├── ic_qr_certificate_light.xml
│ │ │ ├── ic_qr_certificate_light_no.xml
│ │ │ ├── ic_question_outline.xml
│ │ │ ├── ic_retry.xml
│ │ │ ├── ic_scanner_alert.xml
│ │ │ ├── ic_scanner_alert_white.xml
│ │ │ ├── ic_settings.xml
│ │ │ ├── ic_t.xml
│ │ │ ├── ic_three.xml
│ │ │ ├── ic_timeerror.xml
│ │ │ ├── ic_timeerror_large.xml
│ │ │ ├── ic_timeerror_orange.xml
│ │ │ ├── ic_timelapse.xml
│ │ │ ├── ic_timelapse_blue.xml
│ │ │ ├── ic_timelapse_red.xml
│ │ │ ├── ic_travel.xml
│ │ │ ├── ic_two.xml
│ │ │ ├── ic_zoom_off.xml
│ │ │ ├── ic_zoom_off_white.xml
│ │ │ ├── ic_zoom_on.xml
│ │ │ ├── ic_zoom_on_black.xml
│ │ │ ├── illu_onboarding_data_protection.xml
│ │ │ ├── line_dashed_grey.xml
│ │ │ ├── qr_scanner_bottom_left.xml
│ │ │ ├── qr_scanner_bottom_right.xml
│ │ │ ├── qr_scanner_top_left.xml
│ │ │ ├── qr_scanner_top_right.xml
│ │ │ ├── ripple_rect.xml
│ │ │ ├── ripple_rounded.xml
│ │ │ ├── ripple_rounded_button.xml
│ │ │ ├── ripple_rounded_rect.xml
│ │ │ ├── ripple_rounded_rect_banner.xml
│ │ │ ├── ripple_rounded_rect_small.xml
│ │ │ ├── tab_selector.xml
│ │ │ └── tab_selector_white.xml
│ │ ├── font/
│ │ │ └── inter.xml
│ │ ├── layout/
│ │ │ ├── activity_onboarding.xml
│ │ │ ├── dialog_camera_permission_explanation.xml
│ │ │ ├── dialog_fragment_info_box.xml
│ │ │ ├── fragment_debug.xml
│ │ │ ├── fragment_faq.xml
│ │ │ ├── fragment_html.xml
│ │ │ ├── fragment_settings.xml
│ │ │ ├── item_error_status.xml
│ │ │ ├── item_faq_header.xml
│ │ │ ├── item_faq_intro_section.xml
│ │ │ ├── item_faq_question.xml
│ │ │ ├── item_header.xml
│ │ │ └── item_language_option.xml
│ │ ├── menu/
│ │ │ └── imprint.xml
│ │ ├── values/
│ │ │ ├── attrs.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── values-de/
│ │ │ └── strings.xml
│ │ ├── values-fr/
│ │ │ └── strings.xml
│ │ ├── values-it/
│ │ │ └── strings.xml
│ │ ├── values-rm/
│ │ │ └── strings.xml
│ │ └── xml/
│ │ └── network_security_config.xml
│ └── prod/
│ └── java/
│ └── ch/
│ └── admin/
│ └── bag/
│ └── covidcertificate/
│ └── common/
│ └── debug/
│ └── DebugFragment.kt
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── loadConfigs.sh
├── settings.gradle
├── verifier/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── src/
│ │ ├── abn/
│ │ │ └── assets/
│ │ │ └── faq/
│ │ │ └── config.json
│ │ ├── dev/
│ │ │ └── assets/
│ │ │ └── faq/
│ │ │ └── config.json
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── assets/
│ │ │ └── faq/
│ │ │ └── config.json
│ │ ├── java/
│ │ │ └── ch/
│ │ │ └── admin/
│ │ │ └── bag/
│ │ │ └── covidcertificate/
│ │ │ └── verifier/
│ │ │ ├── HomeFragment.kt
│ │ │ ├── MainActivity.kt
│ │ │ ├── MainApplication.kt
│ │ │ ├── data/
│ │ │ │ └── VerifierSecureStorage.kt
│ │ │ ├── extensions/
│ │ │ │ └── ContextExtensions.kt
│ │ │ ├── faq/
│ │ │ │ └── VerifierFaqFragment.kt
│ │ │ ├── modes/
│ │ │ │ ├── ChooseModeDialogFragment.kt
│ │ │ │ └── ModesAndConfigViewModel.kt
│ │ │ ├── news/
│ │ │ │ └── InfoCertificateNewsFragment.kt
│ │ │ ├── pager/
│ │ │ │ ├── HomescreenPageAdapter.kt
│ │ │ │ └── HomescreenPagerFragment.kt
│ │ │ ├── qr/
│ │ │ │ └── VerifierQrScanFragment.kt
│ │ │ ├── updateboarding/
│ │ │ │ ├── UpdateboardingActivity.kt
│ │ │ │ ├── UpdateboardingAgbFragment.kt
│ │ │ │ └── UpdateboardingCertificateLightFragment.kt
│ │ │ ├── verification/
│ │ │ │ ├── VerificationAdapter.kt
│ │ │ │ ├── VerificationFragment.kt
│ │ │ │ ├── VerificationItem.kt
│ │ │ │ ├── VerificationStateUtil.kt
│ │ │ │ ├── VerificationViewHolder.kt
│ │ │ │ └── VerificationViewModel.kt
│ │ │ └── zebra/
│ │ │ ├── ZebraActionBroadcastReceiver.kt
│ │ │ ├── ZebraDataWedgeApiUtil.kt
│ │ │ └── ZebraResultActionBroadcastReceiver.kt
│ │ ├── play/
│ │ │ ├── listings/
│ │ │ │ ├── de-DE/
│ │ │ │ │ ├── full-description.txt
│ │ │ │ │ ├── short-description.txt
│ │ │ │ │ └── title.txt
│ │ │ │ ├── en-US/
│ │ │ │ │ ├── full-description.txt
│ │ │ │ │ ├── short-description.txt
│ │ │ │ │ └── title.txt
│ │ │ │ ├── fr-FR/
│ │ │ │ │ ├── full-description.txt
│ │ │ │ │ ├── short-description.txt
│ │ │ │ │ └── title.txt
│ │ │ │ └── it-IT/
│ │ │ │ ├── full-description.txt
│ │ │ │ ├── short-description.txt
│ │ │ │ └── title.txt
│ │ │ └── release-notes/
│ │ │ └── en-US/
│ │ │ └── default.txt
│ │ └── res/
│ │ ├── drawable/
│ │ │ ├── bg_bubble_bottom_left.xml
│ │ │ ├── ic_faq_image.xml
│ │ │ ├── ic_header_2g_off.xml
│ │ │ ├── ic_header_2g_on.xml
│ │ │ ├── ic_header_plus_off.xml
│ │ │ ├── ic_header_plus_on.xml
│ │ │ ├── ic_illu_home_1.xml
│ │ │ ├── ic_illu_home_2.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_settings.xml
│ │ │ └── illu_updateboarding_certificate_light.xml
│ │ ├── layout/
│ │ │ ├── activity_main.xml
│ │ │ ├── dialog_fragment_choose_mode.xml
│ │ │ ├── dialog_fragment_info_certificate_news.xml
│ │ │ ├── fragment_home.xml
│ │ │ ├── fragment_home_screen_pager.xml
│ │ │ ├── fragment_qr_scan.xml
│ │ │ ├── fragment_updateboarding_agb.xml
│ │ │ ├── fragment_updateboarding_certificate_light.xml
│ │ │ ├── fragment_verification.xml
│ │ │ ├── item_certificate_news.xml
│ │ │ ├── item_mode_button.xml
│ │ │ ├── item_mode_info.xml
│ │ │ ├── item_progress_indicator.xml
│ │ │ ├── item_verification_header_icon.xml
│ │ │ ├── item_verification_status.xml
│ │ │ └── item_verification_status_info.xml
│ │ └── mipmap-anydpi-v26/
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ └── testKeystore
└── wallet/
├── .gitignore
├── build.gradle
├── proguard-rules.pro
├── src/
│ ├── abn/
│ │ ├── assets/
│ │ │ └── faq/
│ │ │ └── config.json
│ │ └── java/
│ │ └── ch/
│ │ └── admin/
│ │ └── bag/
│ │ └── covidcertificate/
│ │ └── wallet/
│ │ └── debug/
│ │ └── WalletDebugFragment.kt
│ ├── androidTest/
│ │ └── java/
│ │ └── ch/
│ │ └── admin/
│ │ └── bag/
│ │ └── covidcertificate/
│ │ └── wallet/
│ │ ├── EspressoUtil.kt
│ │ ├── LoadconfigTest.kt
│ │ ├── NestedScrollViewScrollTo.kt
│ │ ├── OnboardingTest.kt
│ │ ├── RecyclerViewNotEmptyAssertion.kt
│ │ ├── ScanCountTest.kt
│ │ ├── TransferCodeTest.kt
│ │ └── WaitUntilVisibleAction.kt
│ ├── dev/
│ │ ├── assets/
│ │ │ └── faq/
│ │ │ └── config.json
│ │ └── java/
│ │ └── ch/
│ │ └── admin/
│ │ └── bag/
│ │ └── covidcertificate/
│ │ └── wallet/
│ │ └── debug/
│ │ ├── DebugCertificateItem.kt
│ │ ├── DebugCertificatesListAdapter.kt
│ │ ├── DebugCertificatesListViewHolder.kt
│ │ └── WalletDebugFragment.kt
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── assets/
│ │ │ └── faq/
│ │ │ └── config.json
│ │ ├── java/
│ │ │ └── ch/
│ │ │ └── admin/
│ │ │ └── bag/
│ │ │ └── covidcertificate/
│ │ │ └── wallet/
│ │ │ ├── CertificatesAndConfigViewModel.kt
│ │ │ ├── DeeplinkViewModel.kt
│ │ │ ├── MainActivity.kt
│ │ │ ├── MainApplication.kt
│ │ │ ├── add/
│ │ │ │ └── CertificateAddFragment.kt
│ │ │ ├── data/
│ │ │ │ ├── CertificateStorage.kt
│ │ │ │ ├── WalletDataItem.kt
│ │ │ │ ├── WalletDataSecureStorage.kt
│ │ │ │ ├── WalletSecureStorage.kt
│ │ │ │ └── adapter/
│ │ │ │ └── InstantJsonAdapter.kt
│ │ │ ├── detail/
│ │ │ │ ├── CertificateDetailAdapter.kt
│ │ │ │ ├── CertificateDetailFragment.kt
│ │ │ │ ├── CertificateDetailItem.kt
│ │ │ │ ├── CertificateDetailItemListBuilder.kt
│ │ │ │ └── CertificateDetailViewHolder.kt
│ │ │ ├── dialog/
│ │ │ │ ├── CertificateBannerInfoDialogFragment.kt
│ │ │ │ ├── ModeInfoDialogFragment.kt
│ │ │ │ └── RefreshButtonInfoDialogFragment.kt
│ │ │ ├── faq/
│ │ │ │ └── WalletFaqFragment.kt
│ │ │ ├── homescreen/
│ │ │ │ ├── HomeFragment.kt
│ │ │ │ └── pager/
│ │ │ │ ├── CertificatePagerFragment.kt
│ │ │ │ ├── CertificatesPagerAdapter.kt
│ │ │ │ ├── PagerDiffUtil.kt
│ │ │ │ ├── StatefulWalletItem.kt
│ │ │ │ ├── TransferCodePagerFragment.kt
│ │ │ │ └── WalletItem.kt
│ │ │ ├── howto/
│ │ │ │ └── HowToScanFragment.kt
│ │ │ ├── light/
│ │ │ │ ├── CertificateLightConversionFragment.kt
│ │ │ │ ├── CertificateLightDetailFragment.kt
│ │ │ │ ├── CertificateLightErrorCodes.kt
│ │ │ │ ├── CertificateLightPagerFragment.kt
│ │ │ │ ├── CertificateLightViewModel.kt
│ │ │ │ ├── model/
│ │ │ │ │ ├── CertificateLightConversionResponse.kt
│ │ │ │ │ └── CertificateLightConversionState.kt
│ │ │ │ └── net/
│ │ │ │ ├── CertificateLightRepository.kt
│ │ │ │ ├── CertificateLightRequestBody.kt
│ │ │ │ ├── CertificateLightResponse.kt
│ │ │ │ └── CertificateLightService.kt
│ │ │ ├── list/
│ │ │ │ ├── CertificatesListFragment.kt
│ │ │ │ ├── CertificatesListTouchHelper.kt
│ │ │ │ ├── WalletDataListAdapter.kt
│ │ │ │ ├── WalletDataListItem.kt
│ │ │ │ └── WalletDataListViewHolder.kt
│ │ │ ├── networking/
│ │ │ │ └── interceptor/
│ │ │ │ └── AcceptLanguageHeaderInterceptor.kt
│ │ │ ├── onboarding/
│ │ │ │ ├── OnboardingActivity.kt
│ │ │ │ ├── OnboardingAgbFragment.kt
│ │ │ │ ├── OnboardingContentFragment.kt
│ │ │ │ ├── OnboardingIntroFragment.kt
│ │ │ │ ├── OnboardingPreInfoFragment.kt
│ │ │ │ ├── agbupdate/
│ │ │ │ │ └── UpdateboardingAgbFragment.kt
│ │ │ │ ├── certificatelight/
│ │ │ │ │ └── UpdateboardingCertificateLightFragment.kt
│ │ │ │ └── validity/
│ │ │ │ ├── UpdateboardingValidity1Fragment.kt
│ │ │ │ ├── UpdateboardingValidity2Fragment.kt
│ │ │ │ ├── UpdateboardingValidity3Fragment.kt
│ │ │ │ └── UpdateboardingValidity4Fragment.kt
│ │ │ ├── pdf/
│ │ │ │ ├── PdfViewModel.kt
│ │ │ │ ├── export/
│ │ │ │ │ ├── PdfExportFragment.kt
│ │ │ │ │ ├── PdfExportShareContract.kt
│ │ │ │ │ └── PdfExportState.kt
│ │ │ │ └── net/
│ │ │ │ ├── PdfExportRepository.kt
│ │ │ │ ├── PdfExportRequestBody.kt
│ │ │ │ ├── PdfExportResponse.kt
│ │ │ │ └── PdfExportService.kt
│ │ │ ├── qr/
│ │ │ │ ├── VerifierInfoDialogFragment.kt
│ │ │ │ └── WalletQrScanFragment.kt
│ │ │ ├── ratconversion/
│ │ │ │ └── RatConversionFragment.kt
│ │ │ ├── renewal/
│ │ │ │ ├── QrCodeRenewalErrorCodes.kt
│ │ │ │ ├── QrCodeRenewalFragment.kt
│ │ │ │ ├── QrCodeRenewalViewModel.kt
│ │ │ │ ├── model/
│ │ │ │ │ ├── QrCodeRenewalResponse.kt
│ │ │ │ │ └── QrCodeRenewalViewState.kt
│ │ │ │ └── net/
│ │ │ │ ├── QrCodeRenewalBody.kt
│ │ │ │ ├── QrCodeRenewalRepository.kt
│ │ │ │ └── QrCodeRenewalService.kt
│ │ │ ├── transfercode/
│ │ │ │ ├── TransferCodeCreationFragment.kt
│ │ │ │ ├── TransferCodeCreationViewModel.kt
│ │ │ │ ├── TransferCodeDetailFragment.kt
│ │ │ │ ├── TransferCodeErrorCodes.kt
│ │ │ │ ├── TransferCodeHowToFragment.kt
│ │ │ │ ├── TransferCodeIntroFragment.kt
│ │ │ │ ├── TransferCodeViewModel.kt
│ │ │ │ ├── logic/
│ │ │ │ │ ├── Luhn.kt
│ │ │ │ │ └── TransferCodeCrypto.kt
│ │ │ │ ├── model/
│ │ │ │ │ ├── ConvertedCertificate.kt
│ │ │ │ │ ├── TransferCodeConversionState.kt
│ │ │ │ │ ├── TransferCodeCreationResponse.kt
│ │ │ │ │ ├── TransferCodeCreationState.kt
│ │ │ │ │ └── TransferCodeModel.kt
│ │ │ │ ├── net/
│ │ │ │ │ ├── CovidCert.kt
│ │ │ │ │ ├── CovidCertDelivery.kt
│ │ │ │ │ ├── DeliveryRegistration.kt
│ │ │ │ │ ├── DeliveryRepository.kt
│ │ │ │ │ ├── DeliveryService.kt
│ │ │ │ │ └── RequestDeliveryPayload.kt
│ │ │ │ ├── view/
│ │ │ │ │ ├── TransferCodeBubbleView.kt
│ │ │ │ │ ├── TransferCodeView.kt
│ │ │ │ │ └── TransferCodeWaitingView.kt
│ │ │ │ └── worker/
│ │ │ │ └── TransferWorker.kt
│ │ │ ├── travel/
│ │ │ │ ├── ForeignValidityFragment.kt
│ │ │ │ ├── ForeignValidityViewModel.kt
│ │ │ │ └── ForeignValidityViewState.kt
│ │ │ ├── util/
│ │ │ │ ├── BitmapUtil.kt
│ │ │ │ ├── ModeValidityStateUtil.kt
│ │ │ │ ├── NotificationUtil.kt
│ │ │ │ ├── QrCode.kt
│ │ │ │ └── VerificationStateUtil.kt
│ │ │ └── vaccination/
│ │ │ ├── appointment/
│ │ │ │ └── VaccinationAppointmentFragment.kt
│ │ │ └── hint/
│ │ │ └── VaccinationHintViewModel.kt
│ │ ├── play/
│ │ │ ├── listings/
│ │ │ │ ├── de-DE/
│ │ │ │ │ ├── full-description.txt
│ │ │ │ │ ├── short-description.txt
│ │ │ │ │ └── title.txt
│ │ │ │ ├── en-US/
│ │ │ │ │ ├── full-description.txt
│ │ │ │ │ ├── short-description.txt
│ │ │ │ │ └── title.txt
│ │ │ │ ├── fr-FR/
│ │ │ │ │ ├── full-description.txt
│ │ │ │ │ ├── short-description.txt
│ │ │ │ │ └── title.txt
│ │ │ │ └── it-IT/
│ │ │ │ ├── full-description.txt
│ │ │ │ ├── short-description.txt
│ │ │ │ └── title.txt
│ │ │ └── release-notes/
│ │ │ └── en-US/
│ │ │ └── default.txt
│ │ └── res/
│ │ ├── color/
│ │ │ └── text_color_button.xml
│ │ ├── drawable/
│ │ │ ├── bg_add_certificate_option.xml
│ │ │ ├── bg_border.xml
│ │ │ ├── bg_bordered_button.xml
│ │ │ ├── bg_bubble_bottom_left.xml
│ │ │ ├── bg_certificate_bottom.xml
│ │ │ ├── bg_certificate_bubble.xml
│ │ │ ├── bg_certificate_bubble_bundesrot.xml
│ │ │ ├── bg_certificate_bubble_ripple.xml
│ │ │ ├── bg_certificate_detail_note.xml
│ │ │ ├── bg_certificate_top.xml
│ │ │ ├── bg_info_banner.xml
│ │ │ ├── bg_type_bubble_small.xml
│ │ │ ├── circle_white.xml
│ │ │ ├── cutout_left.xml
│ │ │ ├── cutout_right.xml
│ │ │ ├── ic_add_certificate.xml
│ │ │ ├── ic_arrow_right.xml
│ │ │ ├── ic_calendar.xml
│ │ │ ├── ic_certificate_light.xml
│ │ │ ├── ic_check_mark.xml
│ │ │ ├── ic_cloud.xml
│ │ │ ├── ic_corner_offline.xml
│ │ │ ├── ic_corner_process_error.xml
│ │ │ ├── ic_covid_check_app.xml
│ │ │ ├── ic_data_protection.xml
│ │ │ ├── ic_drag.xml
│ │ │ ├── ic_exchange.xml
│ │ │ ├── ic_expire_1.xml
│ │ │ ├── ic_expire_2.xml
│ │ │ ├── ic_expire_3.xml
│ │ │ ├── ic_expire_4.xml
│ │ │ ├── ic_expire_5.xml
│ │ │ ├── ic_expire_6.xml
│ │ │ ├── ic_expire_7.xml
│ │ │ ├── ic_faq_image.xml
│ │ │ ├── ic_flag_ch.xml
│ │ │ ├── ic_header_slim.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_launcher_foreground.xml
│ │ │ ├── ic_list.xml
│ │ │ ├── ic_online.xml
│ │ │ ├── ic_pdf.xml
│ │ │ ├── ic_pen_write.xml
│ │ │ ├── ic_qr_certificate.xml
│ │ │ ├── ic_qrcode.xml
│ │ │ ├── ic_qrcode_add.xml
│ │ │ ├── ic_qrcode_icon_placeholder.xml
│ │ │ ├── ic_qrcode_scan.xml
│ │ │ ├── ic_scan_code.xml
│ │ │ ├── ic_transfer_code_list_failed.xml
│ │ │ ├── ic_transfer_code_list_valid.xml
│ │ │ ├── ic_transfer_notification.xml
│ │ │ ├── ic_validation.xml
│ │ │ ├── icon_ag.xml
│ │ │ ├── icon_ai.xml
│ │ │ ├── icon_ar.xml
│ │ │ ├── icon_be.xml
│ │ │ ├── icon_bl.xml
│ │ │ ├── icon_bs.xml
│ │ │ ├── icon_fr.xml
│ │ │ ├── icon_ge.xml
│ │ │ ├── icon_gl.xml
│ │ │ ├── icon_gr.xml
│ │ │ ├── icon_ju.xml
│ │ │ ├── icon_lu.xml
│ │ │ ├── icon_ne.xml
│ │ │ ├── icon_nw.xml
│ │ │ ├── icon_ow.xml
│ │ │ ├── icon_sg.xml
│ │ │ ├── icon_sh.xml
│ │ │ ├── icon_so.xml
│ │ │ ├── icon_sz.xml
│ │ │ ├── icon_tg.xml
│ │ │ ├── icon_ti.xml
│ │ │ ├── icon_ur.xml
│ │ │ ├── icon_vd.xml
│ │ │ ├── icon_vs.xml
│ │ │ ├── icon_zg.xml
│ │ │ ├── icon_zh.xml
│ │ │ ├── illu_add_certificate.xml
│ │ │ ├── illu_faq_transfer_code.xml
│ │ │ ├── illu_home_empty_state.xml
│ │ │ ├── illu_how_it_works.xml
│ │ │ ├── illu_how_to_scan.xml
│ │ │ ├── illu_onboarding_covid_certificate.xml
│ │ │ ├── illu_onboarding_hero.xml
│ │ │ ├── illu_onboarding_privacy.xml
│ │ │ ├── illu_transfer_code_failed.xml
│ │ │ ├── illu_transfer_code_intro.xml
│ │ │ ├── illu_transfer_code_waiting_phone.xml
│ │ │ ├── illu_transfer_code_waiting_ripple.xml
│ │ │ ├── illu_transfer_code_waiting_shadow.xml
│ │ │ ├── illu_updateboarding_certificate_light.xml
│ │ │ └── oval_horizontal.xml
│ │ ├── drawable-v24/
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── layout/
│ │ │ ├── activity_main.xml
│ │ │ ├── dialog_fragment_certificate_banner_info.xml
│ │ │ ├── dialog_fragment_mode_info.xml
│ │ │ ├── dialog_fragment_refresh_button_info.xml
│ │ │ ├── fragment_certificate_add.xml
│ │ │ ├── fragment_certificate_detail.xml
│ │ │ ├── fragment_certificate_light_conversion.xml
│ │ │ ├── fragment_certificate_light_detail.xml
│ │ │ ├── fragment_certificate_light_pager.xml
│ │ │ ├── fragment_certificate_pager.xml
│ │ │ ├── fragment_certificates_list.xml
│ │ │ ├── fragment_foreign_validity.xml
│ │ │ ├── fragment_home.xml
│ │ │ ├── fragment_how_to_scan.xml
│ │ │ ├── fragment_onboarding_agb.xml
│ │ │ ├── fragment_onboarding_content.xml
│ │ │ ├── fragment_onboarding_intro.xml
│ │ │ ├── fragment_onboarding_pre_info.xml
│ │ │ ├── fragment_pdf_export.xml
│ │ │ ├── fragment_qr_code_renewal.xml
│ │ │ ├── fragment_qr_scan.xml
│ │ │ ├── fragment_rat_conversion.xml
│ │ │ ├── fragment_transfer_code_creation.xml
│ │ │ ├── fragment_transfer_code_detail.xml
│ │ │ ├── fragment_transfer_code_howto.xml
│ │ │ ├── fragment_transfer_code_intro.xml
│ │ │ ├── fragment_transfer_code_pager.xml
│ │ │ ├── fragment_updateboarding_agb.xml
│ │ │ ├── fragment_updateboarding_certificate_light.xml
│ │ │ ├── fragment_updateboarding_validity_1.xml
│ │ │ ├── fragment_updateboarding_validity_2.xml
│ │ │ ├── fragment_updateboarding_validity_3.xml
│ │ │ ├── fragment_updateboarding_validity_4.xml
│ │ │ ├── fragment_vaccination_appointment.xml
│ │ │ ├── item_certificate_list.xml
│ │ │ ├── item_debug_certificate_list.xml
│ │ │ ├── item_detail_divider.xml
│ │ │ ├── item_detail_mode.xml
│ │ │ ├── item_detail_mode_refresh.xml
│ │ │ ├── item_detail_modes_list.xml
│ │ │ ├── item_detail_title.xml
│ │ │ ├── item_detail_value.xml
│ │ │ ├── item_detail_value_without_label.xml
│ │ │ ├── item_foreign_rules_check_hint.xml
│ │ │ ├── item_header_not_empty.xml
│ │ │ ├── item_icon_text_info.xml
│ │ │ ├── item_mode_list_info.xml
│ │ │ ├── item_transfer_code_list.xml
│ │ │ ├── item_vaccination_appointment_canton.xml
│ │ │ ├── partial_certificate_detail_banners.xml
│ │ │ ├── partial_home_add_certificate_options.xml
│ │ │ ├── view_transfer_code.xml
│ │ │ ├── view_transfer_code_bubble.xml
│ │ │ └── view_transfer_code_waiting.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── xml/
│ │ └── filepaths.xml
│ ├── prod/
│ │ └── java/
│ │ └── ch/
│ │ └── admin/
│ │ └── bag/
│ │ └── covidcertificate/
│ │ └── wallet/
│ │ └── debug/
│ │ └── WalletDebugFragment.kt
│ └── test/
│ └── java/
│ └── ch/
│ └── admin/
│ └── bag/
│ └── covidcertificate/
│ └── wallet/
│ └── transfercode/
│ ├── LuhnTest.kt
│ └── LuhnTestWrongCodes.kt
└── testKeystore
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/actions/gradle_docker/action.yml
================================================
name: 'GradleDocker'
description: 'Run gradle inside Docker image'
inputs:
gradle-cmd: # id of input
description: 'gradleCmd to run'
required: true
runs:
using: 'docker'
image: '../../../Dockerfile'
entrypoint: '.github/actions/gradle_docker/main.sh'
args:
- ${{ inputs.gradle-cmd }}
================================================
FILE: .github/actions/gradle_docker/main.sh
================================================
#!/bin/sh
cd $GITHUB_WORKSPACE
gradle $1
================================================
FILE: .github/workflows/appcenter_verifier_abn.yml
================================================
name: Build Verifier ABN
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: verifier:assembleAbnRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}}
- name: upload artefact to App Center
uses: wzieba/AppCenter-Github-Action@8db6b765c4d7ce337bd783ea986f17ce0c9a9e85
with:
appName: ${{secrets.APPCENTER_ORGANIZATION}}/${{secrets.APPCENTER_VERIFIER_APP_ABN}}
token: ${{secrets.APPCENTER_API_TOKEN}}
group: public
file: verifier/build/outputs/apk/abn/release/verifier-abn-release.apk
================================================
FILE: .github/workflows/appcenter_verifier_dev.yml
================================================
name: Build Verifier DEV
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: verifier:assembleDevRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}}
- name: upload artefact to App Center
uses: wzieba/AppCenter-Github-Action@8db6b765c4d7ce337bd783ea986f17ce0c9a9e85
with:
appName: ${{secrets.APPCENTER_ORGANIZATION}}/${{secrets.APPCENTER_VERIFIER_APP_DEV}}
token: ${{secrets.APPCENTER_API_TOKEN}}
group: public
file: verifier/build/outputs/apk/dev/release/verifier-dev-release.apk
================================================
FILE: .github/workflows/appcenter_verifier_prod.yml
================================================
name: Build Verifier PROD
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: verifier:assembleProdRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}}
- name: upload artefact to App Center
uses: wzieba/AppCenter-Github-Action@8db6b765c4d7ce337bd783ea986f17ce0c9a9e85
with:
appName: ${{secrets.APPCENTER_ORGANIZATION}}/${{secrets.APPCENTER_VERIFIER_APP}}
token: ${{secrets.APPCENTER_API_TOKEN}}
group: public
file: verifier/build/outputs/apk/prod/release/verifier-prod-release.apk
- name: Upload APK
uses: actions/upload-artifact@v1.0.0
with:
name: verifier.apk
path: verifier/build/outputs/apk/prod/release/verifier-prod-release.apk
================================================
FILE: .github/workflows/appcenter_verifier_prodfdroid.yml
================================================
name: Build Verifier PRODFDROID
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: verifier:assembleProdRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}} -PminSdkVersion=24
- name: upload artefact to App Center
uses: wzieba/AppCenter-Github-Action@8db6b765c4d7ce337bd783ea986f17ce0c9a9e85
with:
appName: ${{secrets.APPCENTER_ORGANIZATION}}/${{secrets.APPCENTER_VERIFIER_APP}}
token: ${{secrets.APPCENTER_API_TOKEN}}
group: public
file: verifier/build/outputs/apk/prod/release/verifier-prod-release.apk
- name: Upload APK
uses: actions/upload-artifact@v1.0.0
with:
name: verifier.apk
path: verifier/build/outputs/apk/prod/release/verifier-prod-release.apk
================================================
FILE: .github/workflows/appcenter_wallet_abn.yml
================================================
name: Build Wallet ABN
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: wallet:assembleAbnRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}}
- name: upload artefact to App Center
uses: wzieba/AppCenter-Github-Action@8db6b765c4d7ce337bd783ea986f17ce0c9a9e85
with:
appName: ${{secrets.APPCENTER_ORGANIZATION}}/${{secrets.APPCENTER_WALLET_APP_ABN}}
token: ${{secrets.APPCENTER_API_TOKEN}}
group: public
file: wallet/build/outputs/apk/abn/release/wallet-abn-release.apk
================================================
FILE: .github/workflows/appcenter_wallet_dev.yml
================================================
name: Build Wallet DEV
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: wallet:assembleDevRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}}
- name: upload artefact to App Center
uses: wzieba/AppCenter-Github-Action@8db6b765c4d7ce337bd783ea986f17ce0c9a9e85
with:
appName: ${{secrets.APPCENTER_ORGANIZATION}}/${{secrets.APPCENTER_WALLET_APP_DEV}}
token: ${{secrets.APPCENTER_API_TOKEN}}
group: public
file: wallet/build/outputs/apk/dev/release/wallet-dev-release.apk
================================================
FILE: .github/workflows/appcenter_wallet_prod.yml
================================================
name: Build Wallet PROD
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: wallet:assembleProdRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}}
- name: upload artefact to App Center
uses: wzieba/AppCenter-Github-Action@8db6b765c4d7ce337bd783ea986f17ce0c9a9e85
with:
appName: ${{secrets.APPCENTER_ORGANIZATION}}/${{secrets.APPCENTER_WALLET_APP}}
token: ${{secrets.APPCENTER_API_TOKEN}}
group: public
file: wallet/build/outputs/apk/prod/release/wallet-prod-release.apk
- name: Upload APK
uses: actions/upload-artifact@v1.0.0
with:
name: wallet.apk
path: wallet/build/outputs/apk/prod/release/wallet-prod-release.apk
================================================
FILE: .github/workflows/appcenter_wallet_prodfdroid.yml
================================================
name: Build Wallet PRODFDROID
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: wallet:assembleProdRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}} -PminSdkVersion=24
- name: upload artefact to App Center
uses: wzieba/AppCenter-Github-Action@8db6b765c4d7ce337bd783ea986f17ce0c9a9e85
with:
appName: ${{secrets.APPCENTER_ORGANIZATION}}/${{secrets.APPCENTER_WALLET_APP}}
token: ${{secrets.APPCENTER_API_TOKEN}}
group: public
file: wallet/build/outputs/apk/prod/release/wallet-prod-release.apk
- name: Upload APK
uses: actions/upload-artifact@v1.0.0
with:
name: wallet.apk
path: wallet/build/outputs/apk/prod/release/wallet-prod-release.apk
================================================
FILE: .github/workflows/browserstack_wallet_abn.yml
================================================
name: Build Browserstack UI-Test Wallet
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
jobs:
build-app-and-upload:
runs-on: ubuntu-latest
outputs:
app-url: ${{ steps.upload-app.outputs.app-url }}
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: wallet:assembleAbnRelease -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}}
- name: upload artefact to Browserstack
run: curl -u ${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESSKEY }} -X Post "https://api-cloud.browserstack.com/app-automate/espresso/v2/app" -F "file=@wallet/build/outputs/apk/abn/release/wallet-abn-release.apk" >> appResponse.json
- id: upload-app
run: echo ::set-output name=app-url::$(jq -r '.app_url' appResponse.json)
build-test-suite-and-upload:
runs-on: ubuntu-latest
outputs:
test-url: ${{ steps.upload-test-suite.outputs.test-url }}
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build with Gradle
uses: ./.github/actions/gradle_docker
with:
gradle-cmd: wallet:assembleAbnDebugAndroidTest -PkeystorePassword=${{secrets.KEYSTORE_PASSWORD}} -PkeyAliasPassword=${{secrets.KEY_ALIAS_PASSWORD}}
- name: upload artefact to Browserstack
run: curl -u ${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESSKEY }} -X Post "https://api-cloud.browserstack.com/app-automate/espresso/v2/test-suite" -F "file=@wallet/build/outputs/apk/androidTest/abn/debug/wallet-abn-debug-androidTest.apk" >> testSuiteResponse.json
- id: upload-test-suite
run: echo ::set-output name=test-url::$(jq -r '.test_suite_url' testSuiteResponse.json)
run-tests:
runs-on: ubuntu-latest
needs: [build-app-and-upload, build-test-suite-and-upload]
steps:
- name: run normal tests
run: curl -u ${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESSKEY }} -X Post "https://api-cloud.browserstack.com/app-automate/espresso/v2/build" -d '{"app":"${{ needs.build-app-and-upload.outputs.app-url }}", "testSuite":"${{ needs.build-test-suite-and-upload.outputs.test-url }}", "devices":["Samsung Galaxy S10e-9.0"] , "language":"de", "annotation":["ch.admin.bag.covidcertificate.common.browserstack.Normal"] }' -H "Content-Type:application/json"
- name: run airplane tests
run: curl -u ${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESSKEY }} -X Post "https://api-cloud.browserstack.com/app-automate/espresso/v2/build" -d '{"app":"${{ needs.build-app-and-upload.outputs.app-url }}", "testSuite":"${{ needs.build-test-suite-and-upload.outputs.test-url }}", "devices":["Samsung Galaxy S10e-9.0"] , "networkProfile":"airplane-mode", "annotation":["ch.admin.bag.covidcertificate.common.browserstack.AirplaneMode"] }' -H "Content-Type:application/json"
- name: run bad network tests
run: curl -u ${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESSKEY }} -X Post "https://api-cloud.browserstack.com/app-automate/espresso/v2/build" -d '{"app":"${{ needs.build-app-and-upload.outputs.app-url }}", "testSuite":"${{ needs.build-test-suite-and-upload.outputs.test-url }}", "devices":["Samsung Galaxy S10e-9.0"] , "networkProfile":"2g-gprs-lossy", "annotation":["ch.admin.bag.covidcertificate.common.browserstack.BadNetwork"] }' -H "Content-Type:application/json"
- name: run onboarding test
run: curl -u ${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESSKEY }} -X Post "https://api-cloud.browserstack.com/app-automate/espresso/v2/build" -d '{"app":"${{ needs.build-app-and-upload.outputs.app-url }}", "testSuite":"${{ needs.build-test-suite-and-upload.outputs.test-url }}", "devices":["Samsung Galaxy S10e-9.0"] , "language":"de", "annotation":["ch.admin.bag.covidcertificate.common.browserstack.Onboarding"] }' -H "Content-Type:application/json"
- name: run onboarding test offline
run: curl -u ${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESSKEY }} -X Post "https://api-cloud.browserstack.com/app-automate/espresso/v2/build" -d '{"app":"${{ needs.build-app-and-upload.outputs.app-url }}", "testSuite":"${{ needs.build-test-suite-and-upload.outputs.test-url }}", "devices":["Samsung Galaxy S10e-9.0"] , "language":"de", "networkProfile":"airplane-mode", "annotation":["ch.admin.bag.covidcertificate.common.browserstack.Onboarding"] }' -H "Content-Type:application/json"
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on:
push:
branches:
- main
- 'release/**'
pull_request:
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache SonarCloud packages
uses: actions/cache@v1
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Cache Gradle packages
uses: actions/cache@v1
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
- name: Build and analyze
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ./gradlew sonarqube
================================================
FILE: .github/workflows/gradle-wrapper-validation.yml
================================================
name: Validate Gradle Wrapper
on: [push, pull_request]
jobs:
validation:
name: Validation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- uses: gradle/wrapper-validation-action@84d7e182ae7c7a37f200c184f64038fb0e62dd7d
================================================
FILE: .gitignore
================================================
# Built application files
*.apk
*.aar
*.ap_
*.aab
# Files for the ART/Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/
# Uncomment the following line in case you need and you don't have the release build type files in your app
# release/
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
# IntelliJ
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
# Android Studio 3 in .gitignore file.
.idea/caches
.idea/modules.xml
# Comment next line if keeping position of elements in Navigation Editor is relevant for you
.idea/navEditor.xml
# Keystore files
# Uncomment the following lines if you do not want to check your keystore files in.
#*.jks
#*.keystore
# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
.cxx/
# Google Services (e.g. APIs or Firebase)
# google-services.json
# Freeline
freeline.py
freeline/
freeline_project_description.json
# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md
# Version control
vcs.xml
# lint
lint/intermediates/
lint/generated/
lint/outputs/
lint/tmp/
# lint/reports/
.idea/misc.xml
.idea/
.DS_Store
================================================
FILE: Dockerfile
================================================
FROM gradle:7.2-jdk11
ENV ANDROID_SDK_URL https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip
ENV ANDROID_BUILD_TOOLS_VERSION 30.0.1
ENV ANDROID_HOME /usr/local/android-sdk-linux
ENV ANDROID_VERSION 30
ENV PATH ${PATH}:${ANDROID_HOME}/cmdline-tools/bin:${ANDROID_HOME}/platform-tools
RUN mkdir "$ANDROID_HOME" .android && \
cd "$ANDROID_HOME" && \
curl -o sdk.zip $ANDROID_SDK_URL && \
unzip sdk.zip && \
rm sdk.zip
RUN yes | ${ANDROID_HOME}/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME --licenses
RUN $ANDROID_HOME/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME --update
RUN $ANDROID_HOME/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platforms;android-${ANDROID_VERSION}" \
"platform-tools"
RUN apt-get update
RUN apt-get install -y imagemagick
RUN convert -version
================================================
FILE: LICENSE
================================================
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.
================================================
FILE: README.md
================================================
# COVID Certificate Apps - Android
[](https://github.com/admin-ch/CovidCertificate-App-Android/blob/main/LICENSE)


This project is released by the the [Federal Office of Information Technology, Systems and Telecommunication FOITT](https://www.bit.admin.ch/)
on behalf of the [Federal Office of Public Health FOPH](https://www.bag.admin.ch/).
The app design, UX and implementation was done by [Ubique](https://www.ubique.ch?app=github).
## COVID Certificate App
COVID Certificate is the official app for storing and presenting COVID certificates issued in Switzerland.
The certificates are kept and checked locally on the user's phone.
## COVID Certificate Check App
COVID Certificate Check is the official app for checking COVID certificates in Switzerland.
The validation is executed locally on the phone and no information of the scanned certificates is saved.
## Contribution Guide
This project is truly open-source and we welcome any feedback on the code regarding both the implementation and security aspects.
Bugs or potential problems should be reported using Github issues.
We welcome all pull requests that improve the quality of the source code.
Please note that the app will be available with approved translations in English, German, French, Italian, Rumantsch.
## Repositories
* Android App: [CovidCertificate-App-Android](https://github.com/admin-ch/CovidCertificate-App-Android)
* Android SDK: [CovidCertificate-SDK-Android](https://github.com/admin-ch/CovidCertificate-SDK-Android)
* iOS App: [CovidCertificate-App-iOS](https://github.com/admin-ch/CovidCertificate-App-iOS)
* For all others, see the [Github organisation](https://github.com/admin-ch/)
## Installation and Building
The apps require at least Android 6 (Marshmallow).
To build the project you need at least Java 11 and Android Studio 2020.3.1.
You can also build the apps directly:
```sh
$ ./gradlew verifier:assembleProdRelease
$ ./gradlew wallet:assembleProdRelease
```
Note that in order for that to work, you must have set up your own keystore.
The APK is generated under `app/build/outputs/apk/prod/release/app-prod-release.apk` where `app` is one of: `verifier`, `wallet`.
## Reproducible builds
To verify that the app distributed on the Play Store was built by the source code published here, please see the instructions
in [REPRODUCIBLE_BUILDS.md](REPRODUCIBLE_BUILDS.md).
## License
This project is licensed under the terms of the MPL 2 license. See the [LICENSE](LICENSE) file for details.
================================================
FILE: REPRODUCIBLE_BUILDS.md
================================================
# Reproducible Builds
This document outlines how you can reproduce the Android app.
The instructions below are for the wallet app.
To reproduce the verifier app, change **all** occurences of `wallet` to `verifier`.
## Prerequisites
1. Make sure you have both [Docker](https://www.docker.com/) and `git` installed.
2. Clone the repository
3. Checkout the tag (or branch or commit) that corresponds to the version of your app (e.g., 1.0.0)
```shell
git clone https://github.com/admin-ch/CovidCertificate-App-Android.git ~/CovidCertificate-App-Android
cd ~/CovidCertificate-App-Android
git tag # List all available tags
git checkout v2.7.0-2700-wallet
```
## Verifying the app
### Step 1: Check your app version and build timestamp
1. Open the app
2. Click on the `i` button in the top-right corner
3. Check the app version in the top right corner
4. Check the build timestamp in the bottom right corner, which is the number before the slash (e.g., 1622186583268), and record its value to be used later
### Step 2: Extract the APK from your device
1. Make sure you have `adb` installed
2. Connect your phone to your computer
3. Extract the APK from the phone:
```shell
adb pull `adb shell pm path ch.admin.bag.covidcertificate.wallet | cut -d':' -f2` wallet-store.apk
```
If you want to check the version of the APK you are pulling from your device:
```shell
adb shell dumpsys package ch.admin.bag.covidcertificate.wallet | grep versionName=| cut -d '=' -f 2
```
### Step 3: Reproduce it
TLDR: Run the script and follow its instructions:
```shell
./buildAndCompare.sh wallet-store.apk
```
The script will do the following:
1. Build a Docker image with the required Android tools
2. (Optionally) Generate a dummy key store for signing
3. Build the app from source in the Docker container
4. Compare the APK pulled from your phone with the APK built from source
To manually compare to files you can run:
```shell
python3 apkdiff.py wallet-built.apk wallet-store.apk
```
================================================
FILE: apkdiff.py
================================================
# Taken from https://github.com/DrKLO/Telegram/blob/master/apkdiff.py on June 4th, 2020
import sys
from zipfile import ZipFile
def compareFiles(first, second):
while True:
firstBytes = first.read(4096);
secondBytes = second.read(4096);
if firstBytes != secondBytes:
return False
if firstBytes == b"":
break
return True
def compare(first, second):
FILES_TO_IGNORE = ["META-INF/MANIFEST.MF", "META-INF/CERT.RSA", "META-INF/CERT.SF"]
firstZip = ZipFile(first, 'r')
secondZip = ZipFile(second, 'r')
firstList = list(filter(lambda firstInfo: firstInfo.filename not in FILES_TO_IGNORE, firstZip.infolist()))
secondList = list(filter(lambda secondInfo: secondInfo.filename not in FILES_TO_IGNORE, secondZip.infolist()))
apksAreTheSame = True
if len(firstList) != len(secondList):
print("APKs has different amount of files (%d != %d)" % (len(firstList), len(secondList)))
apksAreTheSame = False
for firstInfo in firstList:
found = False
for secondInfo in secondList:
if firstInfo.filename == secondInfo.filename:
found = True
firstFile = firstZip.open(firstInfo, 'r')
secondFile = secondZip.open(secondInfo, 'r')
if compareFiles(firstFile, secondFile) != True:
print("APK file %s does not match" % firstInfo.filename)
apksAreTheSame = False
secondList.remove(secondInfo)
break
if found == False:
print("file %s not found in second APK" % firstInfo.filename)
apksAreTheSame = False
if len(secondList) != 0:
for secondInfo in secondList:
print("file %s not found in first APK" % secondInfo.filename)
apksAreTheSame = False
return apksAreTheSame
if __name__ == '__main__':
if len(sys.argv) != 3:
print("Usage: apkdiff ")
sys.exit(1)
if sys.argv[1] == sys.argv[2] or compare(sys.argv[1], sys.argv[2]) == True:
print("APKs are the same!")
else:
print("APKs are different!")
================================================
FILE: build.gradle
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = "1.6.10"
repositories {
google()
mavenCentral()
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'com.android.tools:r8:3.0.73'
classpath 'com.android.tools.build:gradle:7.0.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
classpath 'ch.ubique.gradle:ubdiag-android:7.0.2'
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
================================================
FILE: buildAndCompare.sh
================================================
#!/bin/bash
# Script to automate the building and comparing of the CovidCertificate apps
#
# The first and only argument should be the path to the APK to be compared.
set -eu
if [[ $# -ne 1 ]]; then
echo "Pass the path/to/store.apk as an argument!"
exit 1
fi
referenceApk=$1
echo "Which app would you like to build ('wallet' or 'verifier')?"
read appName
echo "Do you want to provide a keystore [Yn]?"
read willProvideKeystore
case "$willProvideKeystore" in
# Case 1: Autogenerate a dummy keystore
[nN][oO]|[nN])
echo "[WARNING] Auto-generating a dummy keystore with default credentials. Do NOT use the resulting APK!"
rm -f "$appName"/insecure.keystore
# Generate a keystore with default credentials that is only valid 1 day
keytool -genkeypair -storepass password -keypass password -alias keyAlias -keyalg RSA -keystore "$appName"/insecure.keystore -dname 'CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown' -validity 1
keystoreFile="$appName"/insecure.keystore
keystorePassword=password
keyAlias=keyAlias
keyAliasPassword=password
;;
# Case 2: Let the user choose a keystore
*)
echo "Please enter the keystore filename (e.g. wallet/build.keystore):"
read keystoreFile
echo "Please enter the keystore password:"
read -s keystorePassword
echo "Please enter the keyAlias:"
read keyAlias
echo "Please enter the keyAlias password:"
read -s keyAliasPassword
;;
esac
echo "Please enter the build timestamp (e.g. 1622186583268):"
read buildTimestamp
# This is necessary because Ubique's gradle plugin will automatically set the branch.
# Here we want to override it in order to reproduce the build.
echo "Please enter the branch off which the release was build (e.g. release/version-1.0.0):"
read buildBranch
echo "Please enter the git tag (e.g. v2.7.0-2700-wallet) or branch (e.g. release/version-1.0.0) to be reproduced."
echo "This is what will be checked out and reproduced."
read tree
echo "Do you want to build the F-Droid version [yN]?"
read fdroid
# Set gradle task to be run
case "$fdroid" in
[yY][eE][sS]|[yY])
overrideMinSdk="-PminSdkVersion=24"
;;
*)
overrideMinSdk=""
;;
esac
echo "Building apk from source..."
# Clean up any existing images
docker images -a | grep "covidcertificate-builder" | awk '{print $3}' | xargs -r docker rmi
# Build a fresh container image
docker build -t covidcertificate-builder .
# Prepare the build command (for readability)
currentPath=`pwd`
buildCommand=$(cat <
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'com.google.devtools.ksp' version '1.6.10-1.0.4'
}
ext.readPropertyWithDefault = { paramName, defaultValue ->
if (project.hasProperty(paramName)) {
return project.getProperties().get(paramName)
} else {
Properties properties = new Properties()
if (project.rootProject.file('local.properties').exists()) {
properties.load(project.rootProject.file('local.properties').newDataInputStream())
}
if (properties.getProperty(paramName) != null) {
return properties.getProperty(paramName)
} else {
return defaultValue
}
}
}
android {
compileSdkVersion 31
defaultConfig {
minSdkVersion readPropertyWithDefault('minSdkVersion', '23').toInteger()
targetSdkVersion 31
// Stops the Gradle plugin’s automatic rasterization of vectors
generatedDensities = []
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
productFlavors {
dev {}
abn {}
prod {}
}
flavorDimensions "version"
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
viewBinding true
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
api 'ch.admin.bag.covidcertificate:sdk-android:2.3.3'
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
api 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'
implementation 'androidx.fragment:fragment-ktx:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.security:security-crypto:1.0.0'
ksp 'com.squareup.moshi:moshi-kotlin-codegen:1.13.0'
// ZXing base QR code scanner
api 'ch.ubique.android:qrscanner-zxing:1.0.0-dev-6'
api 'com.augustcellars.cose:cose-java:1.1.0'
api 'org.bouncycastle:bcprov-jdk15on:1.69'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
================================================
FILE: common/consumer-rules.pro
================================================
================================================
FILE: common/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
================================================
FILE: common/src/abn/java/ch/admin/bag/covidcertificate/common/debug/DebugFragment.kt
================================================
package ch.admin.bag.covidcertificate.common.debug
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
import android.content.Context
import androidx.fragment.app.Fragment
open class DebugFragment : Fragment() {
companion object {
fun newInstance(): DebugFragment = DebugFragment()
const val EXISTS = false
fun initDebug(context: Context) {}
}
}
================================================
FILE: common/src/dev/java/ch/admin/bag/covidcertificate/common/debug/DebugFragment.kt
================================================
package ch.admin.bag.covidcertificate.common.debug
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import ch.admin.bag.covidcertificate.common.databinding.FragmentDebugBinding
import ch.admin.bag.covidcertificate.sdk.android.net.CertificatePinning
open class DebugFragment : Fragment() {
companion object {
fun newInstance(): DebugFragment = DebugFragment()
const val EXISTS = true
fun initDebug(context: Context) {
CertificatePinning.enabled = DebugSecureStorage.getInstance(context).isCertPinningEnabled
}
}
private var _binding: FragmentDebugBinding? = null
protected val binding get() = _binding!!
private lateinit var debugSecureStorage: DebugSecureStorage
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
debugSecureStorage = DebugSecureStorage.getInstance(requireContext())
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentDebugBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.toolbar.setNavigationOnClickListener {
parentFragmentManager.popBackStack()
}
binding.buttonToggleCertificatePinning.apply {
isChecked = debugSecureStorage.isCertPinningEnabled
setOnCheckedChangeListener { _, isChecked ->
debugSecureStorage.isCertPinningEnabled = isChecked
CertificatePinning.enabled = isChecked
}
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
================================================
FILE: common/src/dev/java/ch/admin/bag/covidcertificate/common/debug/DebugSecureStorage.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.debug
import android.content.Context
import ch.admin.bag.covidcertificate.sdk.android.net.CertificatePinning
import ch.admin.bag.covidcertificate.sdk.android.utils.EncryptedSharedPreferencesUtil
import ch.admin.bag.covidcertificate.sdk.android.utils.SingletonHolder
class DebugSecureStorage private constructor(context: Context) {
companion object : SingletonHolder(::DebugSecureStorage) {
private const val PREFERENCES = "DebugSecureStorage"
private const val KEY_CERT_PINNING_ENABLED = "KEY_CERT_PINNING_ENABLED"
}
private val prefs = EncryptedSharedPreferencesUtil.initializeSharedPreferences(context, PREFERENCES)
var isCertPinningEnabled: Boolean
get() = prefs.getBoolean(KEY_CERT_PINNING_ENABLED, CertificatePinning.enabled)
set(value) = prefs.edit().putBoolean(KEY_CERT_PINNING_ENABLED, value).apply()
}
================================================
FILE: common/src/dev/res/xml/network_security_config.xml
================================================
================================================
FILE: common/src/main/AndroidManifest.xml
================================================
================================================
FILE: common/src/main/assets/impressum/de/impressum.html
================================================
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/BaseActivity.kt
================================================
package ch.admin.bag.covidcertificate.common
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import ch.admin.bag.covidcertificate.common.data.ConfigSecureStorage
import ch.admin.bag.covidcertificate.common.util.LocaleUtil
open class BaseActivity : AppCompatActivity() {
override fun attachBaseContext(newBase: Context) {
val language = ConfigSecureStorage.getInstance(newBase).getUserLanguage()
super.attachBaseContext(LocaleUtil.updateLanguage(newBase, language))
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/browserstack/AirplaneMode.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.browserstack
annotation class AirplaneMode
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/browserstack/BadNetwork.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.browserstack
annotation class BadNetwork
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/browserstack/Normal.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.browserstack
annotation class Normal
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/browserstack/Onboarding.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.browserstack
annotation class Onboarding
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/CertificateRenewalInfoDetailModel.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class CertificateRenewalInfoDetailModel(
val iconAndroid: String,
val text: String
)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/CertificateRenewalInfoModel.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class CertificateRenewalInfoModel(
val heading: String,
val infos: List,
val faqLinkText: String,
val faqLinkUrl: String,
)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/CertificateRenewalType.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = false)
enum class CertificateRenewalType {
INFO, EXPIRED, RENEWED
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/CheckModesInfosModel.kt
================================================
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
//for verifier
@JsonClass(generateAdapter = true)
data class CheckModesInfosModel(
val infos: Map?,
val unselected: VerifierInfos?
)
@JsonClass(generateAdapter = true)
data class VerifierInfos(
val infos: List?
)
@JsonClass(generateAdapter = true)
data class VerifierInfoDetails(
val iconAndroid: String,
val iconIos: String,
val text: String
)
//for wallet
@JsonClass(generateAdapter = true)
data class CheckModesInfoModel(
val title: String?,
val modes: Map?,
)
@JsonClass(generateAdapter = true)
data class WalletModeModel(
val ok: WalletModeDetails,
val notOk: WalletModeDetails
)
@JsonClass(generateAdapter = true)
data class WalletModeDetails(
val iconAndroid: String,
val iconIos: String,
val text: String
)
@JsonClass(generateAdapter = true)
data class CheckModeInfoModel(
val title: String,
val hexColor: String,
val infos: List
)
data class CheckModeInfoModelWithId(
val id: String,
val title: String,
val hexColor: String,
val infos: List
)
@JsonClass(generateAdapter = true)
data class CheckModeInfoEntry(
val iconAndroid: String,
val text: String
)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/ConfigModel.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import ch.admin.bag.covidcertificate.common.faq.model.Faq
import ch.admin.bag.covidcertificate.common.faq.model.Header
import ch.admin.bag.covidcertificate.common.faq.model.Question
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class ConfigModel(
val forceUpdate: Boolean,
val infoBox: Map?,
val questions: Map?,
val works: Map?,
val transferQuestions: Map?,
val transferWorks: Map?,
val androidTransferCheckIntervalMs: Long?,
val androidTransferCheckBackoffMs: Long?,
val lightCertificateActive: Boolean?,
val pdfGenerationActive: Boolean?,
val vaccinationHints: Map>?,
val vaccinationBookingInfo: Map?,
val showVaccinationHintHomescreen: Boolean?,
val showVaccinationHintDetail: Boolean?,
val showVaccinationHintTransfer: Boolean?,
val timeshiftDetectionEnabled: Boolean?,
val checkModesInfos: Map?,
val checkModesInfo: Map?,
val checkModeReselectAfterHours: Int?,
val lightCertDurationInHours: Int?,
val refreshButtonDisabled: Boolean?,
val refreshButtonInfo: Map?,
val eolBannerInfo: Map>?,
val foreignRulesCheckEnabled: Boolean?,
val foreignRulesLinkText: Map?,
val foreignRulesLinkUrl: Map?,
val foreignRulesHints: Map>?,
val showRatConversionForm: Boolean?,
val ratConversionFormUrl: String?,
val certRenewalInfo: Map>?,
val showValidityState: Boolean?,
val covidCertificateNewsText: Map?,
val infoCovidCertificateNews: Map?,
) {
fun getInfoBox(languageKey: String?): InfoBoxModel? = infoBox?.get(languageKey)
fun getQuestionsFaqs(languageKey: String): FaqModel? = questions?.get(languageKey)
fun getWorksFaqs(languageKey: String): FaqModel? = works?.get(languageKey)
fun getTransferQuestionsFaqs(languageKey: String): FaqModel? = transferQuestions?.get(languageKey)
fun getTransferWorksFaqs(languageKey: String): FaqModel? = transferWorks?.get(languageKey)
fun getVaccinationHints(languageKey: String): List? = vaccinationHints?.get(languageKey)
fun getCheckModesInfos(languageKey: String): Map? = checkModesInfos?.get(languageKey)?.infos
fun getUnselectedModesInfos(languageKey: String): VerifierInfos? = checkModesInfos?.get(languageKey)?.unselected
fun getRefreshButtonInfo(languageKey: String): RefreshButtonInfoModel? = refreshButtonInfo?.get(languageKey)
fun getEolBannerInfo(languageKey: String): Map? = eolBannerInfo?.get(languageKey)
fun getForeignRulesLinkText(languageKey: String): String? = foreignRulesLinkText?.get(languageKey)
fun getForeignRulesLinkUrl(languageKey: String): String? = foreignRulesLinkUrl?.get(languageKey)
fun getForeignRulesHints(languageKey: String): List? = foreignRulesHints?.get(languageKey)
fun getCertRenewalInfo(languageKey: String): Map? =
certRenewalInfo?.get(languageKey)
fun getCheckModes(languageKey: String): Map? = checkModesInfo?.get(languageKey)?.modes
fun getInfoModeTitle(languageKey: String): String? = checkModesInfo?.get(languageKey)?.title
fun getVaccinationBookingInfo(languageKey: String): VaccinationBookingInfoModel? = vaccinationBookingInfo?.get(languageKey)
fun getCovidCertificateNewsText(languageKey: String): String? = covidCertificateNewsText?.get(languageKey)
fun getInfoCovidCertificateNews(languageKey: String): InfoCovidCertificateNews? = infoCovidCertificateNews?.get(languageKey)
fun generateFaqItems(languageKey: String): List {
val itemsList = mutableListOf()
getQuestionsFaqs(languageKey)?.let { questionModel ->
val questionItems = questionModel.faqEntries
itemsList.add(Header(questionModel.faqIconAndroid, questionModel.faqTitle, questionModel.faqSubTitle))
questionItems?.let {
itemsList.addAll(it.map { faqEntry ->
Question(
faqEntry.title,
faqEntry.text,
linkTitle = faqEntry.linkTitle,
linkUrl = faqEntry.linkUrl
)
})
}
}
getWorksFaqs(languageKey)?.let { worksModel ->
val questionItems = worksModel.faqEntries
itemsList.add(Header(worksModel.faqIconAndroid, worksModel.faqTitle, worksModel.faqSubTitle))
questionItems?.let {
itemsList.addAll(it.map { faqEntry ->
Question(
faqEntry.title,
faqEntry.text,
linkTitle = faqEntry.linkTitle,
linkUrl = faqEntry.linkUrl
)
})
}
}
return itemsList
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/ConfigViewModel.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import ch.admin.bag.covidcertificate.common.config.ConfigModel
import ch.admin.bag.covidcertificate.common.net.ConfigRepository
import ch.admin.bag.covidcertificate.common.net.ConfigSpec
import kotlinx.coroutines.launch
abstract class ConfigViewModel(application: Application) : AndroidViewModel(application) {
private val configMutableLiveData = MutableLiveData(ConfigRepository.getCurrentConfig(application))
val configLiveData: LiveData = configMutableLiveData
fun loadConfig(baseUrl: String, versionName: String, buildTime: String) {
val configSpec = ConfigSpec(getApplication(), baseUrl, versionName, buildTime)
val configRepository = ConfigRepository.getInstance(configSpec)
viewModelScope.launch {
configRepository.loadConfig(getApplication())?.let { config ->
configMutableLiveData.postValue(config) }
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/CovidCertificateNewsItem.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
import java.io.Serializable
@JsonClass(generateAdapter = true)
data class CovidCertificateNewsItem(
val iconAndroid: String?,
val text: String?,
) : Serializable
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/EolBannerInfoModel.kt
================================================
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
import java.io.Serializable
@JsonClass(generateAdapter = true)
data class EolBannerInfoModel(
val homescreenHexColor: String,
val homescreenTitle: String,
val detailHexColor: String,
val detailTitle: String,
val detailText: String?,
val detailMoreInfo: String,
val popupTitle: String,
val popupText1: String?,
val popupBoldText: String?,
val popupText2: String?,
val popupLinkText: String,
val popupLinkUrl: String,
) : Serializable
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/FaqEntryModel.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class FaqEntryModel(
val title: String,
val text: String,
val iconAndroid: String?,
val linkTitle: String?,
val linkUrl: String?
)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/FaqIntroSection.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class FaqIntroSection(
val iconAndroid: String,
val text: String
)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/FaqModel.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class FaqModel(
val faqTitle: String,
val faqSubTitle: String?,
val faqIntroSections: List?,
val faqIconAndroid: String?,
val faqEntries: List?
)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/ForeignRulesHintModel.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class ForeignRulesHintModel(
val iconAndroid: String,
val text: String,
)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/InfoBoxModel.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import android.os.Parcel
import android.os.Parcelable
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class InfoBoxModel(
val title: String,
val msg: String,
val url: String?,
val urlTitle: String?,
val isDismissible: Boolean,
val infoId: Long
) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString() ?: throw IllegalArgumentException("No title specified for InfoDialog"),
parcel.readString() ?: throw IllegalArgumentException("No message specified for InfoDialog"),
parcel.readString(),
parcel.readString(),
parcel.readByte() != 0.toByte(),
parcel.readLong()
) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(title)
parcel.writeString(msg)
parcel.writeString(url)
parcel.writeString(urlTitle)
parcel.writeByte(if (isDismissible) 1 else 0)
parcel.writeLong(infoId)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator {
override fun createFromParcel(parcel: Parcel): InfoBoxModel {
return InfoBoxModel(parcel)
}
override fun newArray(size: Int): Array {
return arrayOfNulls(size)
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/InfoCovidCertificateNews.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
import java.io.Serializable
@JsonClass(generateAdapter = true)
data class InfoCovidCertificateNews(
val title: String?,
val newsItems: List,
) : Serializable
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/RefreshButtonInfoModel.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
import java.io.Serializable
@JsonClass(generateAdapter = true)
data class RefreshButtonInfoModel(
val title: String,
val text1: String,
val text2: String,
val fatTitle: String,
val text3: String,
val linkText: String,
val linkUrl: String,
) : Serializable
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/VaccinationBookingInfoModel.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class VaccinationBookingInfoModel(
val title: String,
val text: String,
val info: String,
val impfcheckTitle: String?,
val impfcheckText: String?,
val impfcheckButton: String?,
val impfcheckUrl: String?
)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/config/VaccinationHintModel.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.config
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class VaccinationHintModel(
val title: String,
val text: String,
)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/data/ConfigSecureStorage.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.data
import android.content.Context
import androidx.core.content.edit
import ch.admin.bag.covidcertificate.common.config.ConfigModel
import ch.admin.bag.covidcertificate.sdk.android.utils.EncryptedSharedPreferencesUtil
import ch.admin.bag.covidcertificate.sdk.android.utils.SingletonHolder
import com.squareup.moshi.Moshi
class ConfigSecureStorage private constructor(context: Context) {
companion object : SingletonHolder(::ConfigSecureStorage) {
private const val PREFERENCES = "ConfigSecureStorage"
private const val KEY_CONFIG = "ConfigKey"
private const val KEY_CONFIG_LAST_SUCCESS = "LastSuccessTimestampKey"
private const val KEY_CONFIG_LAST_SUCCESS_APP_AND_OS_VERSION = "LastSuccessVersionKey"
private const val KEY_CONFIG_SHOWN_INFO_BOX_ID = "LastShownInfoBoxId"
private const val KEY_USER_LANGUAGE = "UserLanguage"
private const val KEY_ZOOM_ACTIVE = "KEY_ZOOM_ACTIVE"
private const val KEY_REFRESH_BUTTON_DISABLED_TIMESTAMP = "KEY_REFRESH_BUTTON_DISABLED_TIMESTAMP"
private val moshi = Moshi.Builder().build()
private val configModelAdapter = moshi.adapter(ConfigModel::class.java)
}
private val prefs = EncryptedSharedPreferencesUtil.initializeSharedPreferences(context, PREFERENCES)
fun updateConfigData(config: ConfigModel, timestamp: Long, appVersion: String) {
val editor = prefs.edit()
editor.putLong(KEY_CONFIG_LAST_SUCCESS, timestamp)
editor.putString(KEY_CONFIG_LAST_SUCCESS_APP_AND_OS_VERSION, appVersion)
editor.putString(KEY_CONFIG, configModelAdapter.toJson(config))
editor.apply()
}
fun getConfig(): ConfigModel? =
prefs.getString(KEY_CONFIG, null)
?.let { configModelAdapter.fromJson(it) }
fun getConfigLastSuccessTimestamp(): Long =
prefs.getLong(KEY_CONFIG_LAST_SUCCESS, 0)
fun getConfigLastSuccessAppAndOSVersion(): String? =
prefs.getString(KEY_CONFIG_LAST_SUCCESS_APP_AND_OS_VERSION, null)
fun setLastShownInfoBoxId(infoBoxId: Long) = prefs.edit().putLong(KEY_CONFIG_SHOWN_INFO_BOX_ID, infoBoxId).apply()
fun getLastShownInfoBoxId(): Long = prefs.getLong(KEY_CONFIG_SHOWN_INFO_BOX_ID, 0L)
fun setUserLanguage(language: String?) = prefs.edit { putString(KEY_USER_LANGUAGE, language) }
fun getUserLanguage(): String? = prefs.getString(KEY_USER_LANGUAGE, null)
fun getZoomOn(): Boolean = prefs.getBoolean(KEY_ZOOM_ACTIVE, false)
fun setZoomOn(isZoomActive: Boolean) = prefs.edit().putBoolean(KEY_ZOOM_ACTIVE, isZoomActive).apply()
fun getRefreshButtonDisabledTimestamp(): Long = prefs.getLong(KEY_REFRESH_BUTTON_DISABLED_TIMESTAMP, -1L)
fun setRefreshButtonDisabledTimestamp(timestamp: Long) = prefs.edit { putLong(KEY_REFRESH_BUTTON_DISABLED_TIMESTAMP, timestamp) }
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/dialog/InfoDialogFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.fragment.app.DialogFragment
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.config.InfoBoxModel
import ch.admin.bag.covidcertificate.common.databinding.DialogFragmentInfoBoxBinding
import ch.admin.bag.covidcertificate.common.util.UrlUtil
class InfoDialogFragment : DialogFragment() {
companion object {
private const val ARG_INFO_BOX_MODEL = "ARG_INFO_BOX_MODEL"
fun newInstance(infoBoxModel: InfoBoxModel): InfoDialogFragment = InfoDialogFragment().apply {
arguments = bundleOf(ARG_INFO_BOX_MODEL to infoBoxModel)
}
}
private lateinit var infoBoxModel: InfoBoxModel
private var _binding: DialogFragmentInfoBoxBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.CovidCertificate_InfoDialog)
infoBoxModel = requireArguments().getParcelable(ARG_INFO_BOX_MODEL)
?: throw IllegalStateException("No infoBox information supplied to DialogFragment!")
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = DialogFragmentInfoBoxBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
setupInfo()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun setupInfo() {
binding.infoDialogTitle.text = infoBoxModel.title
binding.infoDialogText.text = infoBoxModel.msg
val hasCustomButton = !infoBoxModel.urlTitle.isNullOrEmpty()
binding.infoDialogUrlButton.apply {
text = infoBoxModel.urlTitle
isVisible = hasCustomButton
infoBoxModel.url?.let { url ->
setOnClickListener { UrlUtil.openUrl(context, url) }
}
}
binding.infoDialogCloseButton.apply {
text = getString(if (hasCustomButton) R.string.accessibility_close_button else R.string.ok_button)
setOnClickListener { if (this@InfoDialogFragment.isVisible) dismiss() }
}
}
fun getInfoId(): Long = infoBoxModel.infoId
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/exception/HttpIOException.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.exception
import retrofit2.Response
import java.io.IOException
/**
* A replacement for the retrofit2.HttpException that inherits from IOException instead of RuntimeException.
* Since other request related exceptions (e.g. UnknownHost or SocketTimeout) extend IOException, this makes it easier to catch all
* networking related exceptions in a single catch-clause.
*/
class HttpIOException(val response: Response<*>) : IOException(response.message()) {
val code = response.code()
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/exception/TimeDeviationException.kt
================================================
package ch.admin.bag.covidcertificate.common.exception
class TimeDeviationException : IllegalStateException()
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/extensions/ContextExtensions.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.extensions
import android.content.Context
import android.content.res.Configuration
import java.util.*
fun Context.getDrawableIdentifier(drawableName: String) = resources.getIdentifier(drawableName, "drawable", packageName)
fun Context.updateLocale(languageKey: String? = null): Context {
val config = Configuration()
val locale = languageKey?.let {
Locale(languageKey, "CH")
} ?: Locale.getDefault()
config.setLocale(locale)
return createConfigurationContext(config)
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/extensions/DccCertExtensions.kt
================================================
package ch.admin.bag.covidcertificate.common.extensions
import ch.admin.bag.covidcertificate.sdk.core.extensions.firstPositiveResult
import ch.admin.bag.covidcertificate.sdk.core.extensions.vaccineDate
import ch.admin.bag.covidcertificate.sdk.core.extensions.validFromDate
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.eu.DccCert
import java.time.LocalDateTime
fun DccCert.getDate(): LocalDateTime? {
var date = this.vaccinations?.firstOrNull()?.vaccineDate()
if (date == null) {
date = this.pastInfections?.firstOrNull()?.firstPositiveResult()
}
if (date == null) {
date = this.tests?.firstOrNull()?.validFromDate()
}
return date
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/extensions/LifecycleOwnerExtensions.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.extensions
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
/**
* Collect a flow, starting and cancelling the collection automatically when the lifecycle changes from or to STARTED
*/
fun LifecycleOwner.collectWhenStarted(flow: Flow, block: suspend (T) -> Unit) {
lifecycleScope.launch {
flow.flowWithLifecycle(lifecycle).collect {
block(it)
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/extensions/OkHttpExtensions.kt
================================================
package ch.admin.bag.covidcertificate.common.extensions
import okhttp3.OkHttpClient
import java.util.concurrent.TimeUnit
fun OkHttpClient.Builder.setTimeouts(seconds: Long = 10): OkHttpClient.Builder {
connectTimeout(seconds, TimeUnit.SECONDS)
writeTimeout(seconds, TimeUnit.SECONDS)
readTimeout(seconds, TimeUnit.SECONDS)
return this
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/extensions/WindowExtensions.kt
================================================
package ch.admin.bag.covidcertificate.common.extensions
import android.view.Window
import android.view.WindowManager
fun Window.overrideScreenBrightness(override: Boolean) {
if (override) {
addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} else {
clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
val layoutParams: WindowManager.LayoutParams = attributes
layoutParams.screenBrightness = if (override) 1f else -1f
attributes = layoutParams
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/faq/FaqAdapter.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.faq
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import ch.admin.bag.covidcertificate.common.faq.model.Faq
import ch.admin.bag.covidcertificate.common.faq.model.Header
import ch.admin.bag.covidcertificate.common.faq.model.IntroSection
import ch.admin.bag.covidcertificate.common.faq.model.Question
class FaqAdapter(val onLinkClickListener: ((String) -> Unit)? = null) : RecyclerView.Adapter() {
private val items = mutableListOf()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FaqViewHolder {
val inflater = LayoutInflater.from(parent.context)
return when (viewType) {
0 -> FaqViewHolder(inflater.inflate(HeaderItem.layoutResource, parent, false))
1 -> FaqViewHolder(inflater.inflate(QuestionItem.layoutResource, parent, false))
2 -> FaqViewHolder(inflater.inflate(IntroSectionItem.layoutResource, parent, false))
else -> throw IllegalStateException("Unknown viewType $viewType in FaqAdapter")
}
}
override fun onBindViewHolder(holder: FaqViewHolder, position: Int) {
holder.bindItem(items[position]) { notifyItemChanged(position) }
}
override fun getItemCount(): Int = items.size
override fun getItemViewType(position: Int): Int {
return when (items[position]) {
is HeaderItem -> 0
is QuestionItem -> 1
is IntroSectionItem -> 2
}
}
fun setItems(items: List) {
this.items.clear()
val newItems = items.mapNotNull {
when (it) {
is Header -> HeaderItem(it)
is Question -> QuestionItem(it, onLinkClickListener)
is IntroSection -> IntroSectionItem(it)
else -> null
}
}
this.items.addAll(newItems)
notifyDataSetChanged()
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/faq/FaqFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.faq
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
import ch.admin.bag.covidcertificate.common.databinding.FragmentFaqBinding
import ch.admin.bag.covidcertificate.common.faq.model.Faq
import ch.admin.bag.covidcertificate.common.util.UrlUtil
import ch.admin.bag.covidcertificate.common.views.hideAnimated
abstract class FaqFragment : Fragment() {
private var _binding: FragmentFaqBinding? = null
private val binding get() = _binding!!
lateinit var toolbar: Toolbar
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FragmentFaqBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
toolbar = binding.certificatesOverviewToolbar
toolbar.setNavigationOnClickListener {
parentFragmentManager.popBackStack()
}
setupFaqProvider()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
protected abstract fun setupFaqProvider()
protected fun setupFaqList(items: List) {
binding.faqLoadingView.hideAnimated()
val recyclerView = binding.faqRecyclerView
(recyclerView.itemAnimator as SimpleItemAnimator?)?.supportsChangeAnimations = false
val layoutManager = LinearLayoutManager(recyclerView.context, LinearLayoutManager.VERTICAL, false)
recyclerView.layoutManager = layoutManager
val adapter = FaqAdapter { url: String ->
context?.let { UrlUtil.openUrl(it, url) }
}
recyclerView.adapter = adapter
adapter.setItems(items)
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/faq/FaqItem.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.faq
import android.view.View
import androidx.core.view.doOnPreDraw
import androidx.core.view.isVisible
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.databinding.ItemFaqHeaderBinding
import ch.admin.bag.covidcertificate.common.databinding.ItemFaqIntroSectionBinding
import ch.admin.bag.covidcertificate.common.databinding.ItemFaqQuestionBinding
import ch.admin.bag.covidcertificate.common.extensions.getDrawableIdentifier
import ch.admin.bag.covidcertificate.common.faq.model.Header
import ch.admin.bag.covidcertificate.common.faq.model.IntroSection
import ch.admin.bag.covidcertificate.common.faq.model.Question
sealed class FaqItem {
abstract fun bindView(view: View, onItemClickListener: (() -> Unit)? = null)
}
data class HeaderItem(val header: Header) : FaqItem() {
companion object {
val layoutResource = R.layout.item_faq_header
}
override fun bindView(view: View, onItemClickListener: (() -> Unit)?) {
val binding = ItemFaqHeaderBinding.bind(view)
binding.itemFaqHeaderTitle.text = header.title
binding.itemFaqHeaderText.apply {
text = header.subtitle
isVisible = header.subtitle != null
}
val drawableId = header.iconName?.let { iconName ->
view.context.getDrawableIdentifier(iconName)
} ?: 0
binding.itemFaqHeaderIllu.apply {
setImageResource(drawableId)
isVisible = drawableId != 0
}
}
}
data class QuestionItem(
val question: Question,
val onLinkClickListener: ((String) -> Unit)? = null,
) : FaqItem() {
companion object {
val layoutResource = R.layout.item_faq_question
}
override fun bindView(view: View, onItemClickListener: (() -> Unit)?) {
val binding = ItemFaqQuestionBinding.bind(view)
binding.root.setOnClickListener {
question.isSelected = !question.isSelected
view.doOnPreDraw { onItemClickListener?.invoke() }
}
binding.itemFaqQuestionTitle.text = question.question
binding.itemFaqQuestionAnswer.apply {
text = question.answer
isVisible = question.isSelected
}
val hasLink = !question.linkTitle.isNullOrEmpty() && !question.linkUrl.isNullOrEmpty()
(hasLink && question.isSelected).let { visible ->
binding.itemFaqQuestionLinkLabel.isVisible = visible
binding.itemFaqQuestionLink.isVisible = visible
}
if (hasLink) {
binding.itemFaqQuestionLinkLabel.text = question.linkTitle
binding.itemFaqQuestionLink.setOnClickListener { onLinkClickListener?.invoke(question.linkUrl!!) }
} else {
binding.itemFaqQuestionLink.setOnClickListener(null)
}
binding.itemFaqQuestionChevron.setImageResource(if (question.isSelected) R.drawable.ic_arrow_contract else R.drawable.ic_arrow_expand)
}
}
data class IntroSectionItem(val introSection: IntroSection) : FaqItem() {
companion object {
val layoutResource = R.layout.item_faq_intro_section
}
override fun bindView(view: View, onItemClickListener: (() -> Unit)?) {
val binding = ItemFaqIntroSectionBinding.bind(view)
val drawableId = view.context.getDrawableIdentifier(introSection.iconName)
binding.faqIntroSectionIcon.setImageResource(drawableId)
binding.faqIntroSectionText.text = introSection.text
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/faq/FaqViewHolder.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.faq
import android.view.View
import androidx.recyclerview.widget.RecyclerView
class FaqViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindItem(item: FaqItem, onItemClickListener: (() -> Unit)? = null) = item.bindView(itemView, onItemClickListener)
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/faq/model/Header.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.faq.model
import java.io.Serializable
interface Faq
data class Header(val iconName: String?, val title: String, val subtitle: String?) : Faq, Serializable
data class Question(
val question: String,
val answer: String,
var isSelected: Boolean = false,
val linkTitle: String? = null,
val linkUrl: String? = null,
) : Faq, Serializable
data class IntroSection(val iconName: String, val text: String) : Faq, Serializable
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/html/BuildInfo.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.html
import java.io.Serializable
data class BuildInfo(
val appName: String,
val versionName: String,
val buildTime: Long,
val flavor: String,
val agbUrl: String,
val appIdentifier: String,
) : Serializable
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/html/ImprintFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.html
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.annotation.StringRes
import androidx.fragment.app.Fragment
import androidx.fragment.app.commit
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.databinding.FragmentHtmlBinding
import ch.admin.bag.covidcertificate.common.settings.SettingsFragment
import ch.admin.bag.covidcertificate.common.util.AssetUtil
import ch.admin.bag.covidcertificate.common.util.UrlUtil
import ch.admin.bag.covidcertificate.common.views.hideAnimated
import java.util.*
class ImprintFragment : Fragment() {
companion object {
private const val COVID_CERT_IMPRESSUM_PREFIX = "ccert://"
private const val ARG_BASE_URL = "ARG_BASE_URL"
private const val ARG_BUILD_INFO = "ARG_BUILD_INFO"
private const val ARG_DATA = "ARG_DATA"
private const val ARG_TITLE = "ARG_TITLE"
private const val ARG_SETTINGS = "ARG_SETTINGS"
fun newInstance(
titleRes: Int,
buildInfo: BuildInfo,
baseUrl: String? = null,
data: String? = null,
showSettings: Boolean = true
): ImprintFragment {
val fragment = ImprintFragment()
fragment.arguments = Bundle().apply {
putString(ARG_BASE_URL, baseUrl)
putSerializable(ARG_BUILD_INFO, buildInfo)
putString(ARG_DATA, data)
putInt(ARG_TITLE, titleRes)
putBoolean(ARG_SETTINGS, showSettings)
}
return fragment
}
}
private var _binding: FragmentHtmlBinding? = null
private val binding get() = _binding!!
private lateinit var baseUrl: String
private var data: String? = null
private var buildInfo: BuildInfo? = null
@StringRes
private var titleRes = 0
private var showSettings = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requireArguments().apply {
baseUrl = getString(ARG_BASE_URL) ?: AssetUtil.getImpressumBaseUrl(requireContext())
buildInfo = getSerializable(ARG_BUILD_INFO) as? BuildInfo?
data = getString(ARG_DATA) ?: buildInfo?.let { AssetUtil.getImpressumHtml(requireContext(), it) }
titleRes = getInt(ARG_TITLE)
showSettings = getBoolean(ARG_SETTINGS)
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FragmentHtmlBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val toolbar = binding.htmlToolbar
toolbar.setTitle(titleRes)
toolbar.setNavigationOnClickListener { parentFragmentManager.popBackStack() }
if (showSettings) {
toolbar.inflateMenu(R.menu.imprint)
toolbar.setOnMenuItemClickListener { item ->
when (item.itemId) {
R.id.menu_settings -> parentFragmentManager.commit {
setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit)
replace(id, SettingsFragment.newInstance())
addToBackStack(SettingsFragment::class.java.canonicalName)
}
else -> throw UnsupportedOperationException()
}
true
}
}
val web = binding.htmlWebview
val loadingSpinner = binding.loadingSpinner
web.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
loadingSpinner.hideAnimated()
super.onPageFinished(view, url)
}
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
if (baseUrl == url) return true
if (url.toLowerCase(Locale.ENGLISH).startsWith(COVID_CERT_IMPRESSUM_PREFIX)) {
val buildInfo = buildInfo ?: throw IllegalStateException("No BuildInfo supplied for imprint")
val strippedUrl = url.substring(COVID_CERT_IMPRESSUM_PREFIX.length)
val htmlFragment = newInstance(
R.string.impressum_title,
buildInfo,
baseUrl,
AssetUtil.loadImpressumHtmlFile(view.context, strippedUrl, buildInfo),
false
)
parentFragmentManager.beginTransaction()
.setCustomAnimations(
R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter,
R.anim.slide_pop_exit
)
.replace(id, htmlFragment)
.addToBackStack(ImprintFragment::class.java.canonicalName)
.commit()
return true
}
UrlUtil.openUrl(context, url)
return true
}
}
if (data != null) {
data?.let { web.loadDataWithBaseURL(baseUrl, it, "text/html", "UTF-8", null) }
} else {
web.loadUrl(baseUrl)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/net/ConfigRepository.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.net
import android.content.Context
import android.os.Build
import ch.admin.bag.covidcertificate.common.BuildConfig
import ch.admin.bag.covidcertificate.common.config.ConfigModel
import ch.admin.bag.covidcertificate.common.data.ConfigSecureStorage
import ch.admin.bag.covidcertificate.common.extensions.setTimeouts
import ch.admin.bag.covidcertificate.common.util.AssetUtil
import ch.admin.bag.covidcertificate.sdk.android.CovidCertificateSdk
import ch.admin.bag.covidcertificate.sdk.android.data.Config
import ch.admin.bag.covidcertificate.sdk.android.net.CertificatePinning
import ch.admin.bag.covidcertificate.sdk.android.net.interceptor.JwsInterceptor
import ch.admin.bag.covidcertificate.sdk.android.net.interceptor.UserAgentInterceptor
import ch.admin.bag.covidcertificate.sdk.android.utils.SingletonHolder
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.Cache
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.HttpException
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
class ConfigRepository private constructor(private val configSpec: ConfigSpec) {
companion object : SingletonHolder(::ConfigRepository) {
private const val APP_VERSION_PREFIX_ANDROID = "android-"
private const val OS_VERSION_PREFIX_ANDROID = "android"
private const val MIN_LOAD_WAIT_TIME = 60 * 60 * 1000L // 1h
private const val MAX_AGE_STATUS_VALID_CACHED_CONFIG = 48 * 60 * 60 * 1000L // 48h
fun getCurrentConfig(context: Context) =
ConfigSecureStorage.getInstance(context).getConfig() ?: AssetUtil.loadDefaultConfig(context)
}
private val configService: ConfigService
private val storage = ConfigSecureStorage.getInstance(configSpec.context)
init {
val rootCa = CovidCertificateSdk.getRootCa(configSpec.context)
val expectedCommonName = CovidCertificateSdk.getExpectedCommonName()
val okHttpBuilder = OkHttpClient.Builder()
.certificatePinner(CertificatePinning.pinner)
.addInterceptor(JwsInterceptor(rootCa, expectedCommonName))
.addInterceptor(UserAgentInterceptor(Config.userAgent))
.setTimeouts()
val cacheSize = 5 * 1024 * 1024 // 5 MB
val cache = Cache(configSpec.context.cacheDir, cacheSize.toLong())
okHttpBuilder.cache(cache)
if (BuildConfig.DEBUG) {
val httpInterceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
okHttpBuilder.addInterceptor(httpInterceptor)
}
configService = Retrofit.Builder()
.baseUrl(configSpec.baseUrl)
.client(okHttpBuilder.build())
.addConverterFactory(MoshiConverterFactory.create())
.build()
.create(ConfigService::class.java)
}
suspend fun loadConfig(context: Context): ConfigModel? {
val requestTimeStamp = System.currentTimeMillis()
val appVersion = APP_VERSION_PREFIX_ANDROID + configSpec.versionName
val osVersion = OS_VERSION_PREFIX_ANDROID + Build.VERSION.SDK_INT
val buildNumber = configSpec.buildTime
val versionString = "appversion=$appVersion&osversion=$osVersion&buildnr=$buildNumber"
var config =
if (storage.getConfigLastSuccessTimestamp() + MIN_LOAD_WAIT_TIME <= System.currentTimeMillis() || versionString != storage.getConfigLastSuccessAppAndOSVersion()) {
try {
val response = withContext(Dispatchers.IO) { configService.getConfig(appVersion, osVersion, buildNumber) }
if (!response.isSuccessful) throw HttpException(response)
response.body()?.let { storage.updateConfigData(it, requestTimeStamp, versionString) }
response.body()
} catch (e: Exception) {
e.printStackTrace()
null
}
} else null
if (config == null) config = storage.getConfig()
if (config == null) config = AssetUtil.loadDefaultConfig(context)
// If the config has disabled the refresh button check if it's the first time and if so, store the timestamp
if (config?.refreshButtonDisabled == true) {
if (storage.getRefreshButtonDisabledTimestamp() < 0L) {
storage.setRefreshButtonDisabledTimestamp(System.currentTimeMillis())
}
} else {
storage.setRefreshButtonDisabledTimestamp(-1L)
}
return config
}
}
class ConfigSpec(val context: Context, val baseUrl: String, val versionName: String, val buildTime: String)
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/net/ConfigService.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.net
import ch.admin.bag.covidcertificate.common.config.ConfigModel
import retrofit2.Response
import retrofit2.http.GET
import retrofit2.http.Headers
import retrofit2.http.Query
interface ConfigService {
@Headers("Accept: application/json+jws")
@GET("config")
suspend fun getConfig(
@Query("appversion") appVersion: String,
@Query("osversion") osVersion: String,
@Query("buildnr") buildNumber: String
): Response
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/onboarding/BaseOnboardingActivity.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.onboarding
import android.os.Bundle
import androidx.viewpager2.adapter.FragmentStateAdapter
import ch.admin.bag.covidcertificate.common.BaseActivity
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.databinding.ActivityOnboardingBinding
abstract class BaseOnboardingActivity : BaseActivity() {
companion object {
const val EXTRA_ONBOARDING_TYPE = "EXTRA_ONBOARDING_TYPE"
}
private lateinit var binding: ActivityOnboardingBinding
private lateinit var pagerAdapter: FragmentStateAdapter
protected abstract fun getPagerAdapter(): FragmentStateAdapter?
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val pagerAdapter = getPagerAdapter()
if (pagerAdapter == null) {
finish()
return
}
binding = ActivityOnboardingBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.viewPager.isUserInputEnabled = false
this.pagerAdapter = pagerAdapter
binding.viewPager.adapter = pagerAdapter
}
fun continueToNextPage() {
val currentItem: Int = binding.viewPager.currentItem
if (currentItem < pagerAdapter.itemCount - 1) {
binding.viewPager.setCurrentItem(currentItem + 1, true)
} else {
setResult(RESULT_OK)
finish()
overridePendingTransition(R.anim.fragment_open_enter, R.anim.fragment_open_exit)
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/onboarding/SimpleOnboardingPagerAdapter.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.onboarding
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
class SimpleOnboardingPagerAdapter(
fragmentActivity: FragmentActivity,
private vararg val fragmentProviders: FragmentProvider
) : FragmentStateAdapter(fragmentActivity) {
override fun createFragment(position: Int) = fragmentProviders[position].provide()
override fun getItemCount() = fragmentProviders.size
fun interface FragmentProvider {
fun provide(): Fragment
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/qr/CameraPermissionExplanationDialog.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.qr
import android.content.Context
import android.graphics.Paint
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import ch.admin.bag.covidcertificate.common.R
class CameraPermissionExplanationDialog(context: Context) : AlertDialog(context) {
private var grantCameraAccessClickListener: View.OnClickListener? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.dialog_camera_permission_explanation)
window?.apply {
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
setBackgroundDrawableResource(R.drawable.bg_dialog)
}
findViewById(R.id.camera_permission_dialog_ok_button)?.apply {
paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
setOnClickListener { v: View? ->
dismiss()
grantCameraAccessClickListener?.onClick(v)
}
}
findViewById(R.id.camera_permission_dialog_close_button)?.setOnClickListener { _ -> cancel() }
}
fun setGrantCameraAccessClickListener(listener: View.OnClickListener?) {
grantCameraAccessClickListener = listener
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/qr/KittlerBinarizer.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.qr
import com.google.zxing.LuminanceSource
import com.google.zxing.common.BitMatrix
import com.google.zxing.common.GlobalHistogramBinarizer
import okhttp3.internal.and
import kotlin.math.abs
/*
*Use a Kittler Binarizer described here //http://www.iztok-jr-fister.eu/static/publications/39.pdf
*
* */
class KittlerBinarizer(luminanceSource: LuminanceSource) : GlobalHistogramBinarizer(luminanceSource) {
override fun getBlackMatrix(): BitMatrix {
val source = luminanceSource
val width = source.width
val height = source.height
var count = 0
var totalcount = 0
val matrix = BitMatrix(width, height)
val localLuminanceSource = source.matrix
val threshold = estimateThreshold(localLuminanceSource, width, height)
(0 until height).forEach { y ->
val offset = y * width
(0 until width).forEach { x ->
totalcount++
val pixel = localLuminanceSource[offset + x] and 0xFF
if (pixel < threshold) {
count++
matrix.set(x, y)
}
}
}
return matrix
}
private fun estimateThreshold(localLuminanceSource: ByteArray, width: Int, height: Int): Int {
var E = 0L
var EF = 0L
(1 until height - 1).forEach { y ->
val offset = y * width
(1 until width - 1).forEach { x ->
val grey = localLuminanceSource[offset + x] and 0xFF
val grey1 = localLuminanceSource[offset + x - 1] and 0xFF
val grey2 = localLuminanceSource[offset + x + 1] and 0xFF
val grey3 = localLuminanceSource[offset + x - width] and 0xFF
val grey4 = localLuminanceSource[offset + x + width] and 0xFF
val Ex = abs(grey1 - grey2)
val Ey = abs(grey3 - grey4)
val exy = Math.max(Ex, Ey)
E += exy
EF += exy * grey
}
}
if (E == 0L) {
return 128
}
return ((EF / E) - 1L).toInt()
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/qr/QRCodeReaderHelper.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.qr
import android.app.ActivityManager
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Color
import android.graphics.pdf.PdfRenderer
import android.os.ParcelFileDescriptor
import com.google.zxing.*
import com.google.zxing.common.GlobalHistogramBinarizer
import com.google.zxing.common.HybridBinarizer
import java.io.File
import java.lang.Integer.min
import kotlin.math.roundToInt
object QRCodeReaderHelper {
private val hints = mapOf(
DecodeHintType.POSSIBLE_FORMATS to arrayListOf(BarcodeFormat.QR_CODE),
DecodeHintType.TRY_HARDER to true,
)
private const val PDF_PAGE_LIMIT = 5
private val reader = MultiFormatReader().apply { setHints(hints) }
fun decodeQrCode(bitmap: Bitmap): String? {
val intArray = IntArray(bitmap.width * bitmap.height)
bitmap.getPixels(intArray, 0, bitmap.width, 0, 0, bitmap.width, bitmap.height)
val source: LuminanceSource = RGBLuminanceSource(bitmap.width, bitmap.height, intArray)
// First try with hybrid binarizer, then with global histogram binarizer. Same as in the camera scanner
return decodeQrCodeWithBinarizer(HybridBinarizer(source))
?: decodeQrCodeWithBinarizer(GlobalHistogramBinarizer(source))
}
fun pdfToBitmaps(context: Context, pdfFile: File): Sequence = sequence {
try {
PdfRenderer(ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY)).use { renderer ->
val pageCount = renderer.pageCount
val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val memoryInfo = ActivityManager.MemoryInfo().also { activityManager.getMemoryInfo(it) }
for (scale in listOf(1f, context.resources.displayMetrics.densityDpi / 72f, 3f, 5f, 7f, 9f)) {
for (i in 0 until min(pageCount, PDF_PAGE_LIMIT)) {
renderer.openPage(i).use { page ->
// PDF width/height are given in "points pt" such that 1 pt = 1/72 inch
// => 72 "dots-per-inch dpi" <==> scale = 1
val pixelWidth = (scale * page.width).roundToInt()
val pixelHeight = (scale * page.height).roundToInt()
if (scale == 1f || !memoryInfo.lowMemory) {
// Only yield the scaled bitmap if the system is not considered to be in low memory mode
// On some devices, this bitmap can get up to 50MB due to the large scale factor
page.renderToBitmap(pixelWidth, pixelHeight).use {
yield(it)
}
}
}
}
}
}
} catch (ex: Exception) {
ex.printStackTrace()
}
}
private fun decodeQrCodeWithBinarizer(binarizer: Binarizer): String? {
val binaryBitmap = BinaryBitmap(binarizer)
try {
val result: Result = reader.decodeWithState(binaryBitmap)
return result.text
} catch (e: NotFoundException) {
e.printStackTrace()
} catch (e: ChecksumException) {
e.printStackTrace()
} catch (e: FormatException) {
e.printStackTrace()
}
return null
}
private fun PdfRenderer.Page.renderToBitmap(pixelWidth: Int, pixelHeight: Int): Bitmap {
val bitmap = Bitmap.createBitmap(pixelWidth, pixelHeight, Bitmap.Config.ARGB_8888)
// Make sure the bitmap's background is not transparent (which can cause issues for QR code detection)
bitmap.eraseColor(Color.WHITE)
// Draw the page onto the bitmap. Internally, this will scale the page to fit the bitmap (unless transform != null).
this.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_PRINT)
// reduce pixel size to avoid memory issues down the line
val bitmapR = bitmap.copy(Bitmap.Config.RGB_565, false)
bitmap.recycle()
return bitmapR
}
private inline fun Bitmap.use(block: (Bitmap) -> Unit) {
try {
block(this)
} finally {
this.recycle()
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/qr/QrScanFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.qr
import android.Manifest
import android.annotation.SuppressLint
import android.content.pm.PackageManager
import android.graphics.drawable.GradientDrawable
import android.graphics.drawable.LayerDrawable
import android.os.Bundle
import android.view.View
import android.widget.ImageButton
import android.widget.TextView
import androidx.annotation.ColorRes
import androidx.appcompat.widget.Toolbar
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.lifecycle.liveData
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.data.ConfigSecureStorage
import ch.admin.bag.covidcertificate.common.util.ErrorHelper
import ch.admin.bag.covidcertificate.common.util.ErrorState
import ch.admin.bag.covidcertificate.sdk.core.models.state.StateError
import ch.ubique.qrscanner.scanner.ErrorCodes
import ch.ubique.qrscanner.scanner.ScanningMode
import ch.ubique.qrscanner.state.DecodingState
import ch.ubique.qrscanner.util.CameraUtil
import ch.ubique.qrscanner.view.QrScannerView
import ch.ubique.qrscanner.zxing.decoder.GlobalHistogramImageDecoder
import ch.ubique.qrscanner.zxing.decoder.HybridImageDecoder
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
abstract class QrScanFragment : Fragment() {
companion object {
private const val STATE_IS_TORCH_ON = "STATE_IS_TORCH_ON"
private const val PERMISSION_REQUEST_CAMERA = 13
private const val MIN_ERROR_VISIBILITY = 1000L
private const val QR_CODE_ERROR_WRONG_FORMAT = "Q|YWF"
private const val QR_CODE_ERROR_READ_FAILED = "Q|IRF"
}
// These need to be set by implementing classes during onCreateView. That's why they are not private.
protected lateinit var toolbar: Toolbar
protected lateinit var flashButton: ImageButton
protected lateinit var errorView: View
protected lateinit var errorCodeView: TextView
protected lateinit var zoomButton: ImageButton
protected lateinit var invalidCodeText: TextView
protected lateinit var viewFinderTopLeftIndicator: View
protected lateinit var viewFinderTopRightIndicator: View
protected lateinit var viewFinderBottomLeftIndicator: View
protected lateinit var viewFinderBottomRightIndicator: View
protected lateinit var qrCodeScanner: QrScannerView
protected lateinit var cutOut: View
abstract val viewFinderColor: Int
abstract val viewFinderErrorColor: Int
abstract val torchOnDrawable: Int
abstract val torchOffDrawable: Int
abstract val zoomOnDrawable: Int
abstract val zoomOffDrawable: Int
private var lastUIErrorUpdate = 0L
private var cameraPermissionState = CameraPermissionState.REQUESTING
private val secureStorage by lazy { ConfigSecureStorage.getInstance(requireContext()) }
private var cameraPermissionExplanationDialog: CameraPermissionExplanationDialog? = null
private var isTorchOn: Boolean = false
private val autoFocusClockLiveData = liveData(Dispatchers.IO) {
while (currentCoroutineContext().isActive) {
emit(Unit)
delay(3 * 1000L)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
isTorchOn = savedInstanceState?.getBoolean(STATE_IS_TORCH_ON, isTorchOn) ?: isTorchOn
toolbar.setNavigationOnClickListener { parentFragmentManager.popBackStack() }
// Wait for the views to be properly laid out
qrCodeScanner.post {
initializeCamera()
}
}
override fun onResume() {
super.onResume()
// Check permission in onResume to automatically handle the user returning from the system settings.
// Be careful to avoid popup loops, since our fragment is resumed whenever the user returns from the dialog!
checkCameraPermission()
setFlashAndButtonStyle()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putBoolean(STATE_IS_TORCH_ON, isTorchOn)
}
abstract fun decodeQrCodeData(qrCodeData: String, onDecodeSuccess: () -> Unit, onDecodeError: (StateError) -> Unit)
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
if (requestCode == PERMISSION_REQUEST_CAMERA) {
val isGranted = grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED
cameraPermissionState = if (isGranted) CameraPermissionState.GRANTED else CameraPermissionState.DENIED
refreshView()
}
}
protected fun activateCamera() {
if (!isAdded || !qrCodeScanner.isAttachedToWindow) return
autoFocusClockLiveData.observe(viewLifecycleOwner) {
autoFocus()
}
qrCodeScanner.activateCamera()
}
protected fun deactivateCamera() {
if (!isAdded || !qrCodeScanner.isAttachedToWindow) return
autoFocusClockLiveData.removeObservers(viewLifecycleOwner)
qrCodeScanner.deactivateCamera()
}
@SuppressLint("ClickableViewAccessibility")
private fun initializeCamera() {
if (!isAdded || !qrCodeScanner.isAttachedToWindow) return
setScannerCallback()
qrCodeScanner.setImageDecoders(GlobalHistogramImageDecoder(), HybridImageDecoder())
qrCodeScanner.setScanningMode(ScanningMode.PARALLEL)
qrCodeScanner.setFocusOnTap(true)
qrCodeScanner.setCameraStateCallback { isActive ->
if (isActive) {
qrCodeScanner.isVisible = true
setupZoomButton()
setupFlashButton()
} else {
qrCodeScanner.isVisible = false
}
}
}
protected fun setScannerCallback() {
qrCodeScanner.setScannerCallback { state ->
when (state) {
is DecodingState.NotFound -> view?.post { updateQrCodeScannerState(QrScannerState.NO_CODE_FOUND) }
is DecodingState.Decoded -> {
val qrCodeData = state.content
decodeQrCodeData(
qrCodeData,
onDecodeSuccess = {
// Once successfully decoded, clear the analyzer from stopping more frames being
// analyzed and possibly decoded successfully
qrCodeScanner.setScannerCallback(null)
view?.post { updateQrCodeScannerState(QrScannerState.VALID) }
},
onDecodeError = { error ->
view?.post { handleInvalidQRCodeExceptions(error) }
}
)
}
is DecodingState.Error -> {
val stateError = if (state.errorCode == ErrorCodes.INPUT_WRONG_FORMAT) {
StateError(QR_CODE_ERROR_WRONG_FORMAT)
} else {
StateError(QR_CODE_ERROR_READ_FAILED)
}
handleInvalidQRCodeExceptions(stateError)
}
}
}
}
private fun setZoom() {
if (secureStorage.getZoomOn()) {
qrCodeScanner.setLinearZoom(1f)
} else {
qrCodeScanner.setLinearZoom(0f)
}
}
private fun autoFocus() {
val centerX = cutOut.left + cutOut.width / 2.0f
val centerY = cutOut.top + cutOut.height / 2.0f
qrCodeScanner.startAutofocus(centerX, centerY)
}
private fun checkCameraPermission() {
val isGranted = CameraUtil.hasCameraPermission(requireContext())
if (isGranted) {
cameraPermissionState = CameraPermissionState.GRANTED
}
// Do not request the permission again if the last time we tried the user denied it.
// I.e. don't show the popup but the error view
else if (cameraPermissionState != CameraPermissionState.DENIED) {
cameraPermissionState = CameraPermissionState.REQUESTING
}
refreshView()
}
private fun refreshView() {
when (cameraPermissionState) {
CameraPermissionState.GRANTED -> {
errorView.isVisible = false
}
CameraPermissionState.REQUESTING -> {
errorView.isVisible = false
showCameraPermissionExplanationDialog()
}
CameraPermissionState.CANCELLED, CameraPermissionState.DENIED -> {
errorView.isVisible = true
ErrorHelper.updateErrorView(errorView, ErrorState.CAMERA_ACCESS_DENIED, null, context)
}
}
updateQrCodeScannerState(QrScannerState.NO_CODE_FOUND)
}
private fun showCameraPermissionExplanationDialog() {
if (cameraPermissionExplanationDialog?.isShowing == true) {
return
}
cameraPermissionExplanationDialog = CameraPermissionExplanationDialog(requireContext()).apply {
setOnCancelListener {
cameraPermissionState = CameraPermissionState.CANCELLED
refreshView()
}
setGrantCameraAccessClickListener {
requestPermissions(arrayOf(Manifest.permission.CAMERA), PERMISSION_REQUEST_CAMERA)
}
setOnDismissListener {
cameraPermissionExplanationDialog = null
}
show()
}
}
private fun setupFlashButton() {
val cameraInfo = qrCodeScanner.getCameraInfo() ?: return
if (cameraInfo.hasFlashUnit()) {
flashButton.isVisible = true
setFlashAndButtonStyle()
} else {
flashButton.isVisible = false
}
flashButton.setOnClickListener {
isTorchOn = !flashButton.isSelected
setFlashAndButtonStyle()
}
zoomButton.setOnClickListener {
secureStorage.setZoomOn(!secureStorage.getZoomOn())
setupZoomButton()
}
}
private fun setFlashAndButtonStyle() {
qrCodeScanner.setFlash(isTorchOn)
val drawableId = if (isTorchOn) torchOnDrawable else torchOffDrawable
flashButton.isSelected = isTorchOn
flashButton.setImageResource(drawableId)
}
private fun setupZoomButton() {
if (requireContext().packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)) {
zoomButton.isVisible = false
} else {
val isZoomOn = secureStorage.getZoomOn()
zoomButton.isVisible = true
val drawableId = if (isZoomOn) zoomOnDrawable else zoomOffDrawable
zoomButton.isSelected = isZoomOn
zoomButton.setImageResource(drawableId)
setZoom()
}
}
private fun handleInvalidQRCodeExceptions(error: StateError?) {
updateQrCodeScannerState(QrScannerState.INVALID_FORMAT, error?.code)
}
private fun updateQrCodeScannerState(qrScannerState: QrScannerState, errorCode: String? = null) {
if (!isAdded) return
val currentTime = System.currentTimeMillis()
if (lastUIErrorUpdate > currentTime - MIN_ERROR_VISIBILITY && qrScannerState == QrScannerState.NO_CODE_FOUND) {
return
}
lastUIErrorUpdate = currentTime
var color: Int = viewFinderColor
when (qrScannerState) {
QrScannerState.VALID, QrScannerState.NO_CODE_FOUND -> {
invalidCodeText.isVisible = false
errorCodeView.isVisible = false
}
QrScannerState.INVALID_FORMAT -> {
invalidCodeText.isVisible = true
errorCodeView.isVisible = errorCode != null
errorCodeView.text = errorCode
color = viewFinderErrorColor
}
}
setIndicatorColor(viewFinderTopLeftIndicator, color)
setIndicatorColor(viewFinderTopRightIndicator, color)
setIndicatorColor(viewFinderBottomLeftIndicator, color)
setIndicatorColor(viewFinderBottomRightIndicator, color)
}
private fun setIndicatorColor(indicator: View, @ColorRes color: Int) {
val drawable = indicator.background as LayerDrawable
val stroke = drawable.findDrawableByLayerId(R.id.indicator) as GradientDrawable
stroke.setStroke(
resources.getDimensionPixelSize(R.dimen.qr_scanner_indicator_stroke_width),
resources.getColor(color, null)
)
}
enum class CameraPermissionState {
GRANTED,
REQUESTING,
CANCELLED,
DENIED,
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/qr/QrScannerState.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.qr
enum class QrScannerState {
NO_CODE_FOUND,
VALID,
INVALID_FORMAT,
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/settings/SettingsFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.settings
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.data.ConfigSecureStorage
import ch.admin.bag.covidcertificate.common.databinding.FragmentSettingsBinding
import ch.admin.bag.covidcertificate.common.databinding.ItemLanguageOptionBinding
import ch.admin.bag.covidcertificate.common.util.LocaleUtil.DEFAULT_COUNTRY
import java.util.*
class SettingsFragment : Fragment() {
companion object {
fun newInstance(): SettingsFragment {
return SettingsFragment()
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return FragmentSettingsBinding.inflate(inflater, container, false).apply {
settingsToolbar.setNavigationOnClickListener { parentFragmentManager.popBackStack() }
val currentLanguage = getString(R.string.language_key)
listOf("de", "fr", "it", "rm", "en").forEach { language ->
ItemLanguageOptionBinding.inflate(inflater, languageList, true).apply {
val locale = Locale(language, DEFAULT_COUNTRY)
radiobutton.text = locale.getDisplayLanguage(locale).capitalize(locale)
radiobutton.isChecked = locale.language == currentLanguage
radiobutton.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
updateLanguage(language)
}
}
}
}
}.root
}
private fun updateLanguage(language: String) {
ConfigSecureStorage.getInstance(requireContext()).setUserLanguage(language)
requireActivity().recreate()
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/AssetUtil.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util
import android.content.Context
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.config.ConfigModel
import ch.admin.bag.covidcertificate.common.html.BuildInfo
import com.squareup.moshi.Moshi
import java.io.BufferedReader
import java.io.IOException
import java.io.InputStreamReader
import java.text.SimpleDateFormat
import java.util.*
object AssetUtil {
private const val PREFIX_ASSET_FILE = "file:///android_asset/"
private const val FOLDER_NAME_IMPRESSUM = "impressum/"
private const val FILE_NAME_IMPRESSUM = "impressum.html"
private const val FOLDER_NAME_DISCLAIMER = "disclaimer/"
private const val DISCLAIMER_FALLBACK_LANGUAGE = "de"
private const val FILE_NAME_DATA_PROTECTION_STATEMENT = "data_protection_statement.html"
private const val FILE_NAME_TERMS_OF_USE = "terms_of_use.html"
private const val REPLACE_STRING_APP_NAME = "{APP_NAME}"
private const val REPLACE_STRING_VERSION = "{VERSION}"
private const val REPLACE_STRING_APPVERSION = "{APPVERSION}"
private const val REPLACE_STRING_RELEASEDATE = "{RELEASEDATE}"
private const val REPLACE_STRING_BUILDNR = "{BUILD}"
private const val REPLACE_STRING_LAW_LINK = "{LAW_LINK}"
private const val REPLACE_STRING_APP_IDENTIFIER = "{PARAM_APP_IDENTIFIER}"
private val RELEASE_DATE_FORMAT = SimpleDateFormat("dd.MM.yyyy").apply { timeZone = TimeZone.getTimeZone("Europe/Zurich") }
private const val ASSET_FILENAME_DEFAULT_CONFIG = "faq/config.json"
private fun loadAssetJson(context: Context, filename: String): String? {
return try {
val inputStream = context.assets.open(filename)
val json = inputStream.bufferedReader().use { it.readText() }
inputStream.close()
json
} catch (ex: IOException) {
ex.printStackTrace()
null
}
}
fun loadDefaultConfig(context: Context): ConfigModel? = loadAssetJson(context, ASSET_FILENAME_DEFAULT_CONFIG)?.let {
Moshi.Builder().build().adapter(ConfigModel::class.java).fromJson(it)
}
fun getImpressumBaseUrl(context: Context): String {
return PREFIX_ASSET_FILE + getFolderNameImpressum(context)
}
private fun getFolderNameImpressum(context: Context): String {
return FOLDER_NAME_IMPRESSUM + context.getString(R.string.language_key) + "/"
}
fun getImpressumHtml(context: Context, buildInfo: BuildInfo): String? {
return loadImpressumHtmlFile(context, FILE_NAME_IMPRESSUM, buildInfo)
}
fun loadImpressumHtmlFile(
context: Context,
filename: String,
buildInfo: BuildInfo,
): String? {
return try {
val html = StringBuilder()
BufferedReader(InputStreamReader(context.assets.open(getFolderNameImpressum(context) + filename))).use { reader ->
var line: String?
while (reader.readLine().also { line = it } != null) {
html.append(line)
}
}
var impressum = html.toString()
val buildString = "${buildInfo.buildTime} / ${buildInfo.flavor}"
impressum = impressum.replace(REPLACE_STRING_VERSION, buildInfo.versionName)
impressum = impressum.replace(REPLACE_STRING_APPVERSION, buildInfo.versionName)
impressum = impressum.replace(REPLACE_STRING_RELEASEDATE, RELEASE_DATE_FORMAT.format(buildInfo.buildTime))
impressum = impressum.replace(REPLACE_STRING_BUILDNR, buildString)
impressum = impressum.replace(REPLACE_STRING_APP_NAME, buildInfo.appName)
impressum = impressum.replace(REPLACE_STRING_LAW_LINK, buildInfo.agbUrl)
impressum = impressum.replace(REPLACE_STRING_APP_IDENTIFIER, buildInfo.appIdentifier)
impressum
} catch (e: IOException) {
e.printStackTrace()
""
}
}
private fun getFolderNameDisclaimer(context: Context): String {
return FOLDER_NAME_DISCLAIMER + context.getString(R.string.language_key) + "/"
}
private fun getDefaultLanguageFolderNameDisclaimer(): String {
return "$FOLDER_NAME_DISCLAIMER$DISCLAIMER_FALLBACK_LANGUAGE/"
}
fun getTermsOfUse(context: Context): String {
var htmlString = loadHtml(
context,
getFolderNameDisclaimer(context) + FILE_NAME_TERMS_OF_USE
)
if (htmlString == null) htmlString = loadHtml(
context,
getDefaultLanguageFolderNameDisclaimer() + FILE_NAME_TERMS_OF_USE
)
if (htmlString == null) htmlString = ""
return replaceUlTags(htmlString)
}
fun getDataProtection(context: Context): String {
var htmlString = loadHtml(
context,
getFolderNameDisclaimer(context) + FILE_NAME_DATA_PROTECTION_STATEMENT
)
if (htmlString == null) htmlString = loadHtml(
context,
getDefaultLanguageFolderNameDisclaimer() + FILE_NAME_DATA_PROTECTION_STATEMENT
)
if (htmlString == null) htmlString = ""
return replaceUlTags(htmlString)
}
private fun replaceUlTags(htmlString: String): String {
return htmlString.replace("
", "").replace("
", "").replace("
", "")
.replace("
", "")
}
private fun loadHtml(context: Context, path: String): String? {
return try {
val html = StringBuilder()
BufferedReader(InputStreamReader(context.assets.open(path))).use { reader ->
var line: String?
while (reader.readLine().also { line = it } != null) {
html.append(line)
}
}
html.toString()
} catch (e: IOException) {
e.printStackTrace()
null
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/CutOutEdgeTreatment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util
import com.google.android.material.shape.EdgeTreatment
import com.google.android.material.shape.ShapePath
import kotlin.math.atan
import kotlin.math.sqrt
class CutOutEdgeTreatment(
private val radius: Float,
private val positionPercentage: Float
) : EdgeTreatment() {
override fun getEdgePath(length: Float, center: Float, interpolation: Float, shapePath: ShapePath) {
val cutOutCenter = length * positionPercentage
// Calculate the vertical offset of the cut out. When interpolating the edge, the offset is the perpendicular distance
// from the cut out center to the edge. When fully interpolated (1.0), the offset will be zero, while at zero interpolation
// the offset will be equal to the radius
val verticalOffset = (1.0f - interpolation) * radius
val verticalOffsetRatio = verticalOffset / radius
if (verticalOffsetRatio >= 1.0f) {
// The vertical offset is so high that there would be no cut out drawn in the edge, so just draw a straight line along the edge
shapePath.lineTo(length, 0.0f)
return
}
// Calculate the X distance between the center and edge of the cut out, taking the interpolation value into consideration
// When fully interpolated (1.0) the radiusX is the same as the radius
val squaredRadius = radius * radius
val verticalOffsetSquared = verticalOffset * verticalOffset
val radiusX = sqrt((squaredRadius - verticalOffsetSquared).toDouble()).toFloat()
// Draw a line from the start of the edge to the start of the cut out
val cutOutStartX = cutOutCenter - radiusX
shapePath.lineTo(cutOutStartX, 0.0f)
// Calculate the arc of the cut out
val cornerRadiusArcLength = Math.toDegrees(atan((radiusX / verticalOffset).toDouble())).toFloat()
val cutoutArcOffset = 90.0f - cornerRadiusArcLength
// Draw the cut out arc
shapePath.addArc(
cutOutCenter - radius,
-radius - verticalOffset,
cutOutCenter + radius,
radius - verticalOffset,
180.0f - cutoutArcOffset,
cutoutArcOffset * 2.0f - 180.0f
)
// Draw a line from the end of the cut out to the end of the edge
shapePath.lineTo(length, 0.0f)
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/EnvironmentUtil.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util
import ch.admin.bag.covidcertificate.common.BuildConfig
import ch.admin.bag.covidcertificate.sdk.android.SdkEnvironment
object EnvironmentUtil {
fun getSdkEnvironment(flavor: String = BuildConfig.FLAVOR) = when (flavor) {
"dev" -> SdkEnvironment.DEV
"abn" -> SdkEnvironment.ABN
"prod" -> SdkEnvironment.PROD
else -> throw IllegalArgumentException("Unknown environment $flavor")
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/ErrorCodeUtil.kt
================================================
package ch.admin.bag.covidcertificate.common.util
import ch.admin.bag.covidcertificate.sdk.core.models.state.CheckNationalRulesState
import ch.admin.bag.covidcertificate.sdk.core.models.state.CheckRevocationState
import ch.admin.bag.covidcertificate.sdk.core.models.state.CheckSignatureState
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState
fun VerificationState.getInvalidErrorCode(errorDelimiter: String = ", ", showNationalErrors: Boolean = false): String {
val errorCodes = mutableListOf()
if (this !is VerificationState.INVALID) return ""
val signatureState = signatureState
if (signatureState is CheckSignatureState.INVALID) {
errorCodes.add(signatureState.signatureErrorCode)
}
val revocationState = revocationState
if (revocationState is CheckRevocationState.INVALID) {
errorCodes.add(revocationState.revocationErrorCode)
}
val nationalRulesState = nationalRulesState
if (showNationalErrors && nationalRulesState is CheckNationalRulesState.INVALID) {
nationalRulesState.nationalRulesError?.errorCode?.let { errorCodes.add(it) }
}
return errorCodes.joinToString(errorDelimiter)
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/ErrorHelper.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.graphics.Paint
import android.net.Uri
import android.provider.Settings
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.core.content.ContextCompat
import ch.admin.bag.covidcertificate.common.R
object ErrorHelper {
@JvmOverloads
fun updateErrorView(
errorView: View,
errorState: ErrorState,
customButtonClickAction: Runnable?,
context: Context?,
showButton: Boolean = true
) {
errorView.findViewById(R.id.error_status_title).setText(errorState.titleResId)
errorView.findViewById(R.id.error_status_text).setText(errorState.textResId)
errorView.findViewById(R.id.error_status_image)
.setImageDrawable(ContextCompat.getDrawable(errorView.context, errorState.imageResId))
val buttonView = errorView.findViewById(R.id.error_status_button)
if (showButton) {
buttonView.visibility = View.VISIBLE
buttonView.setText(errorState.actionResId)
buttonView.paintFlags = buttonView.paintFlags or Paint.UNDERLINE_TEXT_FLAG
buttonView.setOnClickListener { executeErrorAction(errorState, customButtonClickAction, context) }
} else {
buttonView.visibility = View.GONE
}
}
private fun executeErrorAction(errorState: ErrorState, customButtonClickAction: Runnable?, context: Context?) {
customButtonClickAction?.run()
when (errorState) {
ErrorState.CAMERA_ACCESS_DENIED -> openApplicationSettings(context)
else -> {}
}
}
private fun openApplicationSettings(context: Context?) {
val context = context ?: return
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", context.packageName, null)
intent.data = uri
try {
context.startActivity(intent)
} catch (e: ActivityNotFoundException) {
Toast.makeText(context, "Could not open settings", Toast.LENGTH_LONG).show()
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/ErrorState.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import ch.admin.bag.covidcertificate.common.R
enum class ErrorState(
@field:StringRes @param:StringRes val titleResId: Int,
@field:StringRes @param:StringRes val textResId: Int,
@field:StringRes @param:StringRes val actionResId: Int,
@field:DrawableRes @param:DrawableRes val imageResId: Int
) {
NETWORK(
R.string.error_network_title,
R.string.error_network_text,
R.string.error_action_retry,
R.drawable.ic_error_triangle
),
CAMERA_ACCESS_DENIED(
R.string.error_camera_permission_title,
R.string.error_camera_permission_text,
R.string.error_action_change_settings,
R.drawable.ic_cam_off
),
NO_VALID_QR_CODE(
R.string.error_title,
R.string.qr_scanner_error,
R.string.ok_button,
R.drawable.ic_error_triangle
);
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/HorizontalMarginItemDecoration.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util
import android.content.Context
import android.graphics.Rect
import android.view.View
import androidx.recyclerview.widget.RecyclerView
class HorizontalMarginItemDecoration(context: Context, val horizontalMarginInPx: Int) :
RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State
) {
outRect.right = horizontalMarginInPx
outRect.left = horizontalMarginInPx
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/LocaleUtil.kt
================================================
package ch.admin.bag.covidcertificate.common.util
import android.content.Context
import android.content.res.Configuration
import ch.admin.bag.covidcertificate.common.R
import java.util.*
object LocaleUtil {
const val DEFAULT_COUNTRY = "CH"
fun isSystemLangNotEnglish(context: Context): Boolean {
return context.getString(R.string.language_key) != "en"
}
fun updateLanguage(context: Context, language: String?): Context {
if (!language.isNullOrEmpty()) {
val config = Configuration()
config.setLocale(Locale(language, DEFAULT_COUNTRY))
return context.createConfigurationContext(config)
}
return context
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/SingleLiveEvent.java
================================================
/*
* Copyright 2017 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ch.admin.bag.covidcertificate.common.util;
import android.util.Log;
import androidx.annotation.MainThread;
import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* A lifecycle-aware observable that sends only new updates after subscription, used for events like
* navigation and Snackbar messages.
*
* This avoids a common problem with events: on configuration change (like rotation) an update
* can be emitted if the observer is active. This LiveData only calls the observable if there's an
* explicit call to setValue() or call().
*
* Note that only one observer is going to be notified of changes.
*/
public class SingleLiveEvent extends MutableLiveData {
private static final String TAG = "SingleLiveEvent";
private final AtomicBoolean mPending = new AtomicBoolean(false);
@MainThread
public void observe(LifecycleOwner owner, final Observer super T> observer) {
if (hasActiveObservers()) {
Log.w(TAG, "Multiple observers registered but only one will be notified of changes.");
}
// Observe the internal MutableLiveData
super.observe(owner, new Observer() {
@Override
public void onChanged(@Nullable T t) {
if (mPending.compareAndSet(true, false)) {
observer.onChanged(t);
}
}
});
}
@MainThread
public void setValue(@Nullable T t) {
mPending.set(true);
super.setValue(t);
}
/**
* Used for cases where T is Void, to make calls cleaner.
*/
@MainThread
public void call() {
setValue(null);
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/StringUtil.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util
import android.graphics.Typeface
import android.text.SpannableString
import android.text.style.StyleSpan
import ch.admin.bag.covidcertificate.sdk.android.extensions.DEFAULT_DISPLAY_DATE_FORMATTER
import ch.admin.bag.covidcertificate.sdk.android.extensions.DEFAULT_DISPLAY_DATE_TIME_FORMATTER
import java.time.LocalDateTime
fun String.makeBold(): SpannableString = SpannableString(this).apply {
setSpan(StyleSpan(Typeface.BOLD), 0, this@makeBold.length, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE)
}
fun String.makeSubStringBold(
subString: String,
startIndex: Int = 0,
ignoreCase: Boolean = true
): SpannableString =
SpannableString(this).apply {
val indexSubString = this@makeSubStringBold.indexOf(subString, startIndex, ignoreCase)
if (indexSubString >= 0) {
setSpan(
StyleSpan(Typeface.BOLD),
indexSubString,
indexSubString + subString.length,
SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
)
}
}
fun String.makeSubStringsBold(
subStrings: List,
startIndex: Int = 0,
ignoreCase: Boolean = true
): SpannableString = SpannableString(this).apply {
subStrings.forEach {
val indexSubString = this@makeSubStringsBold.indexOf(it, startIndex, ignoreCase)
if (indexSubString >= 0) {
setSpan(
StyleSpan(Typeface.BOLD),
indexSubString,
indexSubString + it.length,
SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
)
}
}
}
fun String.addBoldDate(dateReplacementString: String, date: LocalDateTime): SpannableString {
val dateString = date.format(DEFAULT_DISPLAY_DATE_FORMATTER)
return SpannableString(this.replace(dateReplacementString, dateString)).apply {
val indexSubString = this.indexOf(dateString)
if (indexSubString >= 0) {
setSpan(
StyleSpan(Typeface.BOLD),
indexSubString,
indexSubString + dateString.length,
SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
)
}
}
}
fun String.addBoldDateTime(dateTimeReplacementString: String, dateTime: LocalDateTime): SpannableString {
val dateTimeString = dateTime.format(DEFAULT_DISPLAY_DATE_TIME_FORMATTER)
return SpannableString(this.replace(dateTimeReplacementString, dateTimeString)).apply {
val indexSubString = this.indexOf(dateTimeString)
if (indexSubString >= 0) {
setSpan(
StyleSpan(Typeface.BOLD),
indexSubString,
indexSubString + dateTimeString.length,
SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
)
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/UiUtil.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util
import android.view.Window
import android.view.WindowManager
private val allowlistedFlavours = listOf("abn", "dev")
fun Window.setSecureFlagToBlockScreenshots(flavor: String) {
if (!allowlistedFlavours.contains(flavor)) {
setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/UlTagHandler.java
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util;
import android.text.Editable;
import android.text.Html;
import android.text.Spanned;
import android.text.style.BulletSpan;
import org.xml.sax.XMLReader;
public class UlTagHandler implements Html.TagHandler {
private static final int indent = 30;
public static String LI = "myli";
@Override
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
if (tag.equals(LI)) {
if (opening) {
if (output.length() > 0 && output.charAt(output.length() - 1) != '\n') {
output.append("\n");
}
start(output, new Ul());
} else {
if (output.charAt(output.length() - 1) != '\n') {
output.append("\n");
}
BulletSpan newBullet = new BulletSpan(indent);
end(output, Ul.class, newBullet);
}
}
}
private static void start(Editable text, Object mark) {
int len = text.length();
text.setSpan(mark, len, len, Spanned.SPAN_MARK_MARK);
}
private static void end(Editable text, Class> kind, Object... replaces) {
int len = text.length();
Object obj = getLast(text, kind);
int where = text.getSpanStart(obj);
text.removeSpan(obj);
if (where != len) {
for (Object replace : replaces) {
text.setSpan(replace, where, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
private static Object getLast(Spanned text, Class> kind) {
Object[] objs = text.getSpans(0, text.length(), kind);
if (objs.length == 0) {
return null;
}
return objs[objs.length - 1];
}
private static class Ul { }
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/util/UrlUtil.java
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.util;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.Toast;
public class UrlUtil {
public static void openUrl(Context context, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
try {
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(context, "No browser installed", Toast.LENGTH_LONG).show();
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/views/MarginItemDecoration.kt
================================================
package ch.admin.bag.covidcertificate.common.views
import android.content.Context
import android.graphics.Rect
import android.view.View
import androidx.annotation.DimenRes
import androidx.recyclerview.widget.RecyclerView
class VerticalMarginItemDecoration(context: Context, @DimenRes marginRes: Int) : RecyclerView.ItemDecoration() {
private val marginPx = context.resources.getDimensionPixelSize(marginRes)
override fun getItemOffsets(
outRect: Rect, view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
with(outRect) {
if (parent.getChildAdapterPosition(view) != 0) {
top = marginPx
}
}
}
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/views/ViewExtensions.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.views
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator
import android.content.res.ColorStateList
import android.view.View
import android.view.animation.AccelerateDecelerateInterpolator
import android.view.animation.AccelerateInterpolator
import android.view.animation.DecelerateInterpolator
import androidx.annotation.ColorInt
import androidx.core.content.ContextCompat
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.util.CutOutEdgeTreatment
import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.shape.ShapeAppearanceModel
fun View.showAnimated(
duration: Long = resources.getInteger(android.R.integer.config_shortAnimTime).toLong(),
fade: Boolean = true
) {
animation?.cancel()
if (visibility == View.VISIBLE) return
visibility = View.VISIBLE
alpha = if (fade) 0f else 1f
animate()
.setDuration(duration)
.alpha(1f)
.setInterpolator(DecelerateInterpolator())
.setListener(null)
}
fun View.hideAnimated(
duration: Long = resources.getInteger(android.R.integer.config_shortAnimTime).toLong(),
fade: Boolean = true
) {
animation?.cancel()
animate()
.setDuration((duration * alpha).toLong())
.alpha(if (fade) 0f else 1f)
.setInterpolator(AccelerateInterpolator())
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
visibility = View.GONE
}
})
}
fun View.rotate(
toDegrees: Float,
duration: Long = resources.getInteger(android.R.integer.config_shortAnimTime).toLong(),
resetToDegrees: Float? = null
) {
animation?.cancel()
animate()
.setDuration(duration)
.rotation(toDegrees)
.setInterpolator(AccelerateDecelerateInterpolator())
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
resetToDegrees?.let { rotation = it }
}
})
}
fun List.animateBackgroundTintColor(
@ColorInt targetColor: Int,
duration: Long = get(0).resources.getInteger(android.R.integer.config_shortAnimTime).toLong()
) {
val startColor = get(0).backgroundTintList?.defaultColor ?: 0
val colorAnim = ValueAnimator.ofArgb(startColor, targetColor).apply {
this.duration = duration
addUpdateListener { animator ->
val backgroundTintList = ColorStateList.valueOf(animator.animatedValue as Int)
this@animateBackgroundTintColor.forEach { it.backgroundTintList = backgroundTintList }
}
}
colorAnim.start()
}
fun View.animateBackgroundTintColor(
@ColorInt targetColor: Int,
duration: Long = resources.getInteger(android.R.integer.config_shortAnimTime).toLong()
) {
val startColor = backgroundTintList?.defaultColor ?: 0
val colorAnim = ValueAnimator.ofArgb(startColor, targetColor).apply {
this.duration = duration
addUpdateListener { animator ->
backgroundTintList = ColorStateList.valueOf(animator.animatedValue as Int)
}
}
colorAnim.start()
}
fun View.setCutOutCardBackground() {
val cutOutPositionPercentage = 0.6f
val cutOutRadius = context.resources.getDimension(R.dimen.card_cutout_radius)
// The left edge measures from the top to the bottom while the right edge measures from the bottom to the top
val backgroundShape = ShapeAppearanceModel.builder()
.setAllCornerSizes(context.resources.getDimension(R.dimen.corner_radius_sheet))
.setLeftEdge(CutOutEdgeTreatment(cutOutRadius, 1 - cutOutPositionPercentage))
.setRightEdge(CutOutEdgeTreatment(cutOutRadius, cutOutPositionPercentage))
.build()
val backgroundDrawable = MaterialShapeDrawable(backgroundShape).apply {
fillColor = ContextCompat.getColorStateList(context, R.color.white)
elevation = context.resources.getDimension(R.dimen.certificates_elevation)
shadowCompatibilityMode = MaterialShapeDrawable.SHADOW_COMPAT_MODE_ALWAYS
}
background = backgroundDrawable
}
================================================
FILE: common/src/main/java/ch/admin/bag/covidcertificate/common/views/WindowInsetsLayout.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.common.views
import android.content.Context
import android.graphics.Rect
import android.util.AttributeSet
import android.view.WindowInsets
import android.widget.FrameLayout
import androidx.core.view.children
import ch.admin.bag.covidcertificate.common.R
/**
* A FrameLayout that selectively applies the system window insets to itself.
*
* `applyWindowInsets` defines on which edges the insets are applied to this layout.
* Can be one or more of `left`, `top`, `right` or `bottom`,
* or `all` to include all four edges; default is `none`.
*
* Insets that have not been consumed are passed down to all child views
* (independent of each other, not just the first one that consumes it,
* compared to the standard behaviour of `fitsSystemWindows`).
*/
class WindowInsetsLayout @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
private var applyInsetEdges: Int
init {
val typedArray = context.theme.obtainStyledAttributes(attrs, R.styleable.WindowInsetsLayout, 0, 0)
applyInsetEdges = typedArray.getInteger(R.styleable.WindowInsetsLayout_applyWindowInsets, INSETS_NOWHERE)
typedArray.recycle()
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
requestApplyInsets()
}
override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
val appliedInset = Rect(
if (applyInsetEdges and INSETS_LEFT != 0) insets.systemWindowInsetLeft else 0,
if (applyInsetEdges and INSETS_TOP != 0) insets.systemWindowInsetTop else 0,
if (applyInsetEdges and INSETS_RIGHT != 0) insets.systemWindowInsetRight else 0,
if (applyInsetEdges and INSETS_BOTTOM != 0) insets.systemWindowInsetBottom else 0
)
setPadding(appliedInset.left, appliedInset.top, appliedInset.right, appliedInset.bottom)
if (applyInsetEdges == INSETS_EVERYWHERE) {
return insets
}
val remainingInsets = insets.replaceSystemWindowInsets(
Rect(
insets.systemWindowInsetLeft - appliedInset.left,
insets.systemWindowInsetTop - appliedInset.top,
insets.systemWindowInsetRight - appliedInset.right,
insets.systemWindowInsetBottom - appliedInset.bottom
)
)
children.forEach {
it.dispatchApplyWindowInsets(remainingInsets)
}
return insets
}
fun setInsets(insetEdges: Int) {
applyInsetEdges = insetEdges
requestApplyInsets()
}
companion object {
const val INSETS_NOWHERE = 0x0
const val INSETS_EVERYWHERE = 0xF
const val INSETS_LEFT = 0x1
const val INSETS_TOP = 0x2
const val INSETS_RIGHT = 0x4
const val INSETS_BOTTOM = 0x8
}
}
================================================
FILE: common/src/main/res/anim/fragment_open_enter.xml
================================================
================================================
FILE: common/src/main/res/anim/fragment_open_exit.xml
================================================
================================================
FILE: common/src/main/res/anim/slide_enter.xml
================================================
================================================
FILE: common/src/main/res/anim/slide_exit.xml
================================================
================================================
FILE: common/src/main/res/anim/slide_pop_enter.xml
================================================
================================================
FILE: common/src/main/res/anim/slide_pop_exit.xml
================================================
================================================
FILE: common/src/main/res/color/selector_black_or_white.xml
================================================
================================================
FILE: common/src/main/res/color/selector_blue_or_white.xml
================================================
================================================
FILE: common/src/main/res/color/selector_grey_or_blue.xml
================================================
================================================
FILE: common/src/main/res/color/selector_grey_or_white.xml
================================================
================================================
FILE: common/src/main/res/color/selector_transparent_or_blue.xml
================================================
================================================
FILE: common/src/main/res/color/selector_white_or_black.xml
================================================
================================================
FILE: common/src/main/res/color/selector_white_or_blue.xml
================================================
================================================
FILE: common/src/main/res/color/text_radio_checkable.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_button_default.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_button_red.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_button_white.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_corners_top_left.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_dialog.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_pill.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_rect_rounded_sheet.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_rect_rounded_small.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_rect_rounded_small_blue_ripple.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_rect_rounded_small_checkable.xml
================================================
================================================
FILE: common/src/main/res/drawable/bg_rect_rounded_small_red.xml
================================================
================================================
FILE: common/src/main/res/drawable/btn_radio_checkable.xml
================================================
================================================
FILE: common/src/main/res/drawable/dot_black.xml
================================================
================================================
FILE: common/src/main/res/drawable/dot_grey.xml
================================================
================================================
FILE: common/src/main/res/drawable/dot_white.xml
================================================
================================================
FILE: common/src/main/res/drawable/header_bottom.xml
================================================
================================================
FILE: common/src/main/res/drawable/header_collapsed_shadow.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_1g.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_2g.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_2g_green.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_2g_grey.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_2g_plus.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_3g.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_arrow_contract.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_arrow_expand.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_arrow_forward.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_bund_small.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_bundwappen_big.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_call.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_cam_off.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_camera_switch.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_check_filled.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_check_green.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_check_grey.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_check_large.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_checkbox_empty.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_checkbox_filled.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_close.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_close_red.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_dot.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_double_check.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_error.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_error_blue.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_error_grey.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_error_large.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_error_orange.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_error_triangle.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_expire_i.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_faq.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_header_slim.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_how_it_works_image.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_info.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_info_alert.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_info_blue.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_info_outline.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_invalid_grey.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_invalid_red.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_light_off.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_light_off_blue.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_light_on.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_light_on_black.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_link_external.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_load.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_no1g.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_no2g.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_no3g.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_no_2_g_plus_height.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_no_connection.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_no_connection_large.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_notification.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_notification_filled.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_offline.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_offline_large.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_offline_orange.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_one.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_phone.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_plus.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_plus_green.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_privacy.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_privacy_grey.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_process_error.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_process_error_grey.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_process_error_large.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_qr_certificate_light.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_qr_certificate_light_no.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_question_outline.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_retry.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_scanner_alert.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_scanner_alert_white.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_settings.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_t.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_three.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_timeerror.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_timeerror_large.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_timeerror_orange.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_timelapse.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_timelapse_blue.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_timelapse_red.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_travel.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_two.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_zoom_off.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_zoom_off_white.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_zoom_on.xml
================================================
================================================
FILE: common/src/main/res/drawable/ic_zoom_on_black.xml
================================================
================================================
FILE: common/src/main/res/drawable/illu_onboarding_data_protection.xml
================================================
================================================
FILE: common/src/main/res/drawable/line_dashed_grey.xml
================================================
================================================
FILE: common/src/main/res/drawable/qr_scanner_bottom_left.xml
================================================
================================================
FILE: common/src/main/res/drawable/qr_scanner_bottom_right.xml
================================================
================================================
FILE: common/src/main/res/drawable/qr_scanner_top_left.xml
================================================
================================================
FILE: common/src/main/res/drawable/qr_scanner_top_right.xml
================================================
================================================
FILE: common/src/main/res/drawable/ripple_rect.xml
================================================
================================================
FILE: common/src/main/res/drawable/ripple_rounded.xml
================================================
================================================
FILE: common/src/main/res/drawable/ripple_rounded_button.xml
================================================
================================================
FILE: common/src/main/res/drawable/ripple_rounded_rect.xml
================================================
================================================
FILE: common/src/main/res/drawable/ripple_rounded_rect_banner.xml
================================================
================================================
FILE: common/src/main/res/drawable/ripple_rounded_rect_small.xml
================================================
================================================
FILE: common/src/main/res/drawable/tab_selector.xml
================================================
================================================
FILE: common/src/main/res/drawable/tab_selector_white.xml
================================================
================================================
FILE: common/src/main/res/font/inter.xml
================================================
================================================
FILE: common/src/main/res/layout/activity_onboarding.xml
================================================
================================================
FILE: common/src/main/res/layout/dialog_camera_permission_explanation.xml
================================================
================================================
FILE: common/src/main/res/layout/dialog_fragment_info_box.xml
================================================
================================================
FILE: common/src/main/res/layout/fragment_debug.xml
================================================
================================================
FILE: common/src/main/res/layout/fragment_faq.xml
================================================
================================================
FILE: common/src/main/res/layout/fragment_html.xml
================================================
================================================
FILE: common/src/main/res/layout/fragment_settings.xml
================================================
================================================
FILE: common/src/main/res/layout/item_error_status.xml
================================================
================================================
FILE: common/src/main/res/layout/item_faq_header.xml
================================================
================================================
FILE: common/src/main/res/layout/item_faq_intro_section.xml
================================================
================================================
FILE: common/src/main/res/layout/item_faq_question.xml
================================================
================================================
FILE: common/src/main/res/layout/item_header.xml
================================================
================================================
FILE: common/src/main/res/layout/item_language_option.xml
================================================
================================================
FILE: common/src/main/res/menu/imprint.xml
================================================
================================================
FILE: common/src/main/res/values/attrs.xml
================================================
================================================
FILE: common/src/main/res/values/colors.xml
================================================
#ff0000#000000#99000000#80000000#1A000000#757575#DBDBDB#FFFFFFFF#80FFFFFF#e20008#ff448d#ff0000#243784#273277#009e89#ed6100#d81f5b#ffde27#ececec#eff5f9#def3f0#fdebde#fae2ea#f4f5f9
================================================
FILE: common/src/main/res/values/dimens.xml
================================================
2dp5dp8dp10dp12dp15dp20dp25dp30dp35dp40dp50dp100dp12sp13sp16sp19sp26sp32sp18sp22sp28sp3dp10dp50dp40dp10dp56dp28dp4dp9dp20dp11dp10dp10dp24dp72dp50dp5dp-6dp54dp130dp5dp8dp30dp250dp3dp
================================================
FILE: common/src/main/res/values/strings.xml
================================================
"Covid Check""Verify""COVID certificate""Check""Scan presented certificate""Certificates are verified automatically""Verify""How it works""Network error""Check your internet connection.""Try again""No access to camera""The app requires access to the camera to be able to scan the QR code.""Change settings""Error""Invalid code""OK""The app requires access to the camera to be able to scan the QR code.""Allow access to camera""Scan QR code
to verify""COVID certificate""Last name""Date of birth""Add""COVID certificate""Scan the QR code on the COVID certificate to add it to the app.""Add""Verification successful""Only valid in combination with
an identity document""Certificate is being verified""COVID Certificate invalid""Does not meet the validity criteria for Switzerland or for the selected verification mode ({MODUS})""The COVID certificate does not have a valid signature""The COVID certificate was revoked""Verification failed""An unexpected error has occurred""Scan the QR code on the COVID certificate.""How it works""Scan again""Add""Certificates""Delete""Covid Cert""The app""COVID Certificate""The app lets you store COVID certificates securely on your smartphone and present them easily.""Next""Data protection""Your data remains
in the app""The certificates are only saved locally on your smartphone. The data is not stored centrally.""Present certificates simply""The data in the COVID certificate is also contained in the QR code.""On presentation, the QR code is scanned using a verifier app. The authenticity and validity of the data are automatically checked.""Privacy policy""Terms of use""Accept""en""How it works""Add COVID certificates""To be able to add a COVID certificate to the app, you need the original certificate on paper or as a PDF.""Tap 'Add' in the app to add a new certificate.""Hold your smartphone camera over the QR code on the original certificate to scan it.""A preview of the COVID certificate will appear. Tap 'Add' to securely add the certificate to the app.""When and where can I get a COVID certificate?""FAQs""What are COVID certificates?""The COVID certificate makes it possible to document a COVID-19 vaccination, recovery from the virus or a negative test result in a forgery-proof manner.""When and where can I get a COVID certificate?""How can I present a COVID certificate?""Where is my data stored?""How are misuse and forgery prevented?""What happens if I lose my COVID certificate?""How can I add a COVID certificate to the app?""Can several COVID certificates be added?""Where can I see if my COVID certificate is valid?""How is my data protected?""What data is contained in the QR code?""What do I need to do if I delete the COVID certificate or the app?""You can get a COVID certificate after a COVID-19 vaccination, after you have recovered from the virus, or after you have tested negative. The certificate is generally issued upon request by health care professionals on site.""You can present your COVID certificate in paper form, or you can use the COVID Certificate app to save certificates in the dedicated app and present them directly from the app.
Please note that you will also need to show an identification document (passport or ID card) in either case. A number of countries require a printed version of the certificate and will not accept the electronic certificate. You should therefore always take the printed version with you when travelling.""Your certificate data is not stored in a central government system, but only locally on your mobile device or on the paper COVID certificate.""The COVID certificate QR code contains an electronic signature. This is an important security feature and makes the COVID certificate forgery-proof. Moreover, the COVID certificate is valid only in combination with an identification document (passport or ID card).""Your COVID certificate is not stored in any central government system. Therefore, keep your paper and/or PDF COVID certificate in a safe place. If you lose your certificate and need to replace it, a fee may be charged for its reissue by a health care facility (e.g. the test or vaccination centre).""To add a COVID certificate to the app, you need the original certificate issued to you on paper or as a PDF document. You can use the COVID certificate app to scan the QR code on the original and add it to the app. The COVID certificate will then appear directly in the app.""Yes, that is possible. For example, you can save the COVID certificates of all family members in your app. Also in this case, each COVID certificate is valid only in combination with an identification document (passport or ID card) of the certificate holder.""In Switzerland, the requirement for a certificate was lifted in February 2022. Since then, the Swiss validity periods have existed only in formal terms and no longer have any significance in practice in Switzerland. The “Validity in Switzerland” section is thus no longer displayed in the app. Instead, the time of the vaccination or test is shown.
The number of days that have elapsed since a vaccination or test is also shown. This makes it easier for you to determine whether your certificate complies with the validity rules of your destination country (if the country in question still requires a COVID certificate). When abroad, it is always the rules of the country in question that apply.""Your personal data is not stored in a central system; instead, it can be found solely locally on the mobile device or in the QR code in the case of the paper COVID certificate.""The QR code contains all the information that is found in plain text on your paper COVID certificate. The QR code also contains an electronic signature that can be used to check the authenticity of the COVID certificate. This makes the COVID certificate forgery-proof.""You can easily restore your COVID certificate on your mobile device. To do so, download the app again and then scan the QR code on your paper or PDF COVID certificate.""How the app works""With the COVID Certificate app, you can easily and securely store and present COVID certificates on your mobile device.""You can get a COVID certificate after a complete COVID-19 vaccination, after you have recovered from the virus or after you have tested negative. The certificate is generally issued upon request by health care professionals on site.""First name""Update required""Download the latest version of the app.""Update""Valid in Switzerland from:
{DATE}""Vaccination""Recovered""Test""Advantages""Store COVID certificates digitally""COVID certificates can be simply added to the app and stored digitally. ""The app checks the validity of certificates in Switzerland. This way, you can be sure that your certificates are valid.""Advantages""Publication details""FAQs""List of certificates""Add a certificate""Close""Turn on torch""Turn off torch""Publication details""An unknown error has occurred""Does not meet Switzerland's validity criteria.
The certificate is no longer valid.""Does not meet Switzerland's validity criteria.
The certificate is not yet valid""A network error has occurred""Your device is in flight mode""Valid in Switzerland from:
{DATE}""Contains data that do not comply with international standards.""Period of validity for Switzerland exceeded""Certificate has been
revoked""Certificate with
invalid signature""invalid signature""revoked""This certificate is already saved in the app""Validity in
Switzerland""until""The certificate is being verified""Verification successful""Information""Close""Dose""COVID-19""Disease or agent targeted""Product""Manufacturer""Date of vaccination""Country of vaccination""Issuer""Recovery""Date of first positive test result""Valid from""Valid until""Country of test""Test""Result""Not detected (Negative)""Detected (Positive)""Type""Name""Manufacturer""Date of sample collection""Result date""How it works""Are you sure you want to delete the certificate?""Cancel""Vaccination""http://itunes.apple.com/app/id1565917320""http://itunes.apple.com/app/id1565917510""UVCI""Certificate generated on
{DATE}""Vaccine type""Test centre""The app needs access to your camera to be able to scan the QR code.""How COVID certificates are checked""The COVID Certificate Check app can be used to scan the QR codes on COVID certificates and check the certificates for authenticity and validity.""How can COVID certificates be checked?""To check a COVID certificate, use the dedicated COVID Certificate Check app to scan the QR code on the paper certificate or in the COVID Certificate app presented.""What exactly is checked?""Three aspects are checked when scanning:
– Does the certificate contain a valid electronic signature?
– Is the certificate unrevoked?
– Does the certificate meet Switzerland's validity criteria?
If the answer to all three questions is affirmative, the COVID certificate is shown as valid.""Which identification documents are valid? Why do personal details have to be checked?""Aside from passports or ID cards, other photo identification documents that prove the identity of the person in question (e.g. driving licence) are also accepted. Although the COVID certificate is forgery-proof, the only way to ensure that the certificate shown was issued to the person presenting it is to check the personal details.""Can foreign certificates also be checked?""Yes, COVID certificates that are compatible with the EU digital COVID certificate can be checked according to Switzerland's validity criteria using the COVID Certificate check app.""What data do I see during the verification process?""During the verification process, you see only the certificate holder's name and date of birth, and whether the COVID certificate is valid.""Is any data stored in the COVID Certificate Check app or in a central system during the verification process?""No, no data is stored during the verification process, be it in the COVID Certificate Check app or in a central system. Therefore, it is not possible to trace which COVID certificate was checked by whom, when and where.""Settings""Privacy policy & Terms of use""This certificate is not a travel document.
<br /><br />
The scientific evidence on COVID-19 vaccination, testing, and recovery continues to evolve, including with regard to new virus variants of concern.
<br /><br />
Please check the restrictions and rules on validity that apply at your destination before you travel. When you’re abroad, the validity of your certificate is calculated based on the rules in the destination country.""https://www.bit.admin.ch/bit/en/home/documentation/covid-certificate-app.html""https://www.bit.admin.ch/bit/en/home/documentation/covid-certificate-check-app.html""COVID Certificate Check""How do I get a COVID certificate after I have recovered from COVID-19?""Depending on the canton, the COVID certificate will, in some cases, be sent to you directly by the test centre or by the laboratory that determined your positive test result. If this is not the case, you can subsequently apply online for a COVID certificate via the “National COVID certificate application platform”. The application will be processed there by the competent cantonal authority. You will find the “National COVID certificate application platform” here:""Select next step""Add certificate""You have a COVID certificate in paper form or as a PDF and would like to add it to the app.""Generate transfer code""Transfer codes""You can use transfer codes whenever you have a COVID test or a COVID-19 vaccination. Your COVID certificate will then be delivered straight to the app.""Generate code""This is how it works""Receive COVID certificates directly in the app""Transfer codes allow COVID certificates to be transmitted quickly and securely. In this way, you’ll receive your certificate directly in the app after a COVID test or a COVID-19 vaccination.""Who offers the transmission of the COVID certificate by transfer code?""Can the transfer codes also be used for the transmission of vaccination certificates?""How does the transmission of the certificate by transfer code work?""Can I use the same transfer code more than once?""If you undergo a COVID test (PCR test or rapid antigen test) or receive a COVID-19 vaccination, a transfer code can be used to quickly transmit the corresponding COVID certificate.
Ask your test or vaccination centre, pharmacy or doctor if they offer this transfer code option.""Currently, the transmission of the certificate by transfer code is reserved for COVID tests. To find out how to obtain a COVID certificate after vaccination, click here:""If your test or vaccination centre offers to transmit your COVID certificate to you by transfer code, you can give them your transfer code when you register, when taking the test or before receiving your vaccination.
You can generate a transfer code in the COVID Certificate app at any time. Just click on \"Add\" on the home screen or the \"More\" symbol at the bottom right, and then click on \"Create a transfer code\". The app will then show you the nine-character code.""No, a transfer code can only be used once. If you wish to obtain several certificates (e.g. for your relatives), please create a new code for each certificate.""How does the transfer work?""How is my data secured during the transfer?""What if my certificate does not arrive in the application?""What happens if I test positive?""For the transfer, your COVID certificate is delivered in encrypted form. The transfer code ensures that only your application can receive the certificate. The data is deleted from the server immediately after the transfer.""Once the certificate has been generated by the laboratory or test centre, it is available for transfer. Make sure that your smartphone is connected to the Internet to receive certificates.
If you still do not receive your certificate, contact the place where you performed the test (centre, pharmacy, doctor's practice).""In case of a positive rapid antigen test, you will not receive a COVID certificate from the laboratory.
In case of a positive PCR test, you will receive a COVID certificate for cured persons, valid from the 11th day after the test.""Your transfer code has been generated""Transfer code""Generated on {DATE}""Next steps""Provide the pharmacy, test centre, or doctor with your code when you get tested.""If you have multiple certificates, e.g. for other family members, generate a new code for each certificate.""Done""Transfer""Wait for transfer""Only valid for 1 more day""Valid for a further {DAYS} days""Transfer failed""Code expired""Last updated
{DATE}""It is no longer possible to receive a certificate using this transfer.""Certificate format
invalid""invalid""COVID certificate format invalid.""Offline mode""In order to show the certificate's validity, the app must be online regularly.""Verification not possible offline""Verification not possible at this time""Please try again later""Offline verification not possible""An internet connection is required to update the checklists""Verification failed""An unexpected error has occurred""Validity could not be determined""The application regularly checks whether a COVID certificate is available for your transfer code.""As soon as the COVID certificate is available, it appears in the application. If you have activated notifications, you will receive a message from the application.""The transfer code expires after {TRANSFER_CODE_VALIDITY} days. After this period, the application waits for any further transfers for 72 hours. After that, the transfer code is no longer valid.""Allow notifications""The app can notify you when your certificate is ready. Allow the app to send you notifications.""Continue""https://foph-coronavirus.ch/certificate/how-do-i-get-a-covid-certificate-and-how-do-i-use-it/""Further information""Generate code""1 more day""{DAYS} days""Not revoked""Signature valid""Does not meet Switzerland's validity criteria.""Unable to generate transfer code""No Internet connection""An unexpected error has occurred.""Update not possible at this time""The app must be online to receive the transfer.""An unexpected error has occurred. Please try again later.""Please try again later.""The app must be online to generate a transfer code.""Update""Are you sure you want to delete the transfer?""Transfer successful""The COVID certificate has been delivered""How long is the COVID certificate valid?""In Switzerland, the requirement for a certificate was lifted in February 2022. Since then, the Swiss validity periods have existed only in formal terms and no longer have any significance in practice in Switzerland. Abroad, the validity rules of the country in question apply. Shortly before departing you should check the authorities’ website for your transit or destination country to see whether certificate-based measures are still in force and, if so, which validity periods apply for your destination country. Helpful website for travel abroad:""Re-open EU (europa.eu)""https://reopen.europa.eu/en/""Can I use the app offline?""You can use the app without an internet connection, so you can still call up your certificates and present them for scanning and verification.""What are the current validity criteria in Switzerland?""The current validity period of COVID certificates can be found here:""Further information""https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624""Is it possible to verify the certificates offline?""In principle, COVID certificates can also be verified without an Internet connection. For this purpose, regularly updated checklists are downloaded from a central server. These locally stored checklists must not be older than 48 hours.
In order to update the checklists, the app must be open and connected to the Internet. Updating occurs immediately and automatically.""Scan QR code""Import PDF""Tip: Activate notifications""Activate""Evidence""Vaccination incomplete""Evidence created on
{DATE}""Further information""https://foph-coronavirus.ch/certificate/how-do-i-get-a-covid-certificate-and-how-do-i-use-it/""Certificate light""Export""What is the 'certificate light'?""Certificate light""Can only be used within Switzerland""Only contains last name, first name, date of birth and electronic signature""Only valid for a max of {LIGHT_CERT_VALIDITY_IN_H} hours""Your COVID certificate is converted to the 'light' version online.""You can deactivate the 'light' version of the certificate and revert to the normal COVID certificate at any time.""Deactivate""Activate""'Certificate light' could not be activated""The app must be online to activate the 'certificate light'.""Only valid within Switzerland
and in combination with an identity document""Export COVID certificate""A PDF is generated using the data from your COVID certificate that you can print or share.""The PDF document is generated online.""Export""PDF could not be generated""The app must be online to generate a PDF.""QR code""No Internet connection""Please try again later.""An unexpected error has occurred.""Certificate light""Export""A PDF is generated using the data from your COVID certificate that you can print or share.""The PDF document is generated online.""Export""No Internet connection""An unexpected error has occurred""An unexpected error has occurred. Please try again later.""When you activate the 'light' version of the certificate, a new QR code is generated using data from your COVID certificate that does not contain any health-related information.""While the regular COVID certificate can be used without restriction both in Switzerland and in the EU/EFTA during its period of validity, the 'light' version can only be used in Switzerland. For data protection reasons, the 'light' version has to be reactivated after {LIGHT_CERT_VALIDITY_IN_H} hours. It does not afford any additional rights to the normal COVID certificate.""only has to does not""reduced""expanded""Update""Certificate light""This update allows you to generate a copy of the certificate without health-related data for use in Switzerland. The privacy policy and terms of use have been updated accordingly. These are deemed to have been accepted if you continue to use the app.""Update""Certificate light""This update allows you to check certificate copies without health-related data in the app. The privacy policy and terms of use have been updated accordingly. These are deemed to have been accepted if you continue to use the app.""Certificate validity
expired""Light""What is the 'certificate light'""The COVID Certificate app offers holders of COVID certificates the possibility of generating a copy of the certificate with minimised data. The 'certificate light' confirms that the holder has a valid COVID certificate but does not itself contain any health-related data.
This alternative to the COVID certificate which contains minimised data was developed at the wish of the Federal Data Protection and Information Commissioner (FDPIC) as COVID certificates contain certain health-related data such as the vaccine administered or the date of vaccination, which can also be seen. The 'certificate light' prevents this.
The 'certificate light' is only available electronically in the app and is only recognised in Switzerland. For data protection reasons, the 'certificate light' is only valid for {LIGHT_CERT_VALIDITY_IN_H} hours and must then be reactivated. If you need to use the normal certificate before the end of the {LIGHT_CERT_VALIDITY_IN_H}-hour period, you can simply deactivate the 'certificate light'.""What is the 'certificate light'""The COVID Certificate app offers holders of COVID certificates the possibility of generating a copy of the certificate with minimised data. This 'certificate light' merely shows that the holder has a valid COVID certificate but does not contain any health-related data.
The alternative to the COVID certificate containing minimised data was developed at the wish of the Federal Data Protection and Information Commissioner (FDPIC) as third parties using apps they have developed themselves could be able to see health-related data such as the vaccine administered or date of vaccination when checking the certificate. The 'certificate light' prevents this.
The 'Certificate light' is only available electronically in the app and is only recognised in Switzerland. For data protection reasons the 'certificate light' is only valid for {LIGHT_CERT_VALIDITY_IN_H} hours and must then be reactivated. If you need to use the normal certificate before the end of the {LIGHT_CERT_VALIDITY_IN_H}-hour period, you can simply deactivate the 'certificate light'.""How can a 'certificate light' be converted back into an EU/EFTA-compliant COVID certificate?""The holder can deactivate a 'certificate light' any time in their COVID Certificate app. After that their normal COVID certificate is available again.""Valid for {TIMESPAN}""Transfer code copied""What is a transfer code?""Transfer codes allow COVID certificates to be transmitted quickly and securely. In this way, you’ll receive your certificate directly in the app after a COVID test or a COVID-19 vaccination.""I only have my COVID certificate electronically in the app. How can I get the certificate as a PDF or on paper?""In the detailed view of the electronic COVID certificate in the COVID Certificate app you’ll find the Export function. You can use this to generate, save and print a PDF""market://details?id=ch.admin.bag.covidcertificate.wallet""market://details?id=ch.admin.bag.covidcertificate.verifier""24h-limit reached""The 'certificate light' has been activated too often within the last 24 hours.""Import unsuccessful""The file contains either an invalid QR code or the QR code was not able to be recognised.""Unexpected error""Please contact support""+41 58 466 07 99""Decryption error""One of the app's data storage areas could not be decrypted. To continue using the app, the storage area will have to be deleted and recreated. Data will be lost in the process.""Settings""Language""Date format used: dd.mm.yyyy""Manufacturer and Name""Time error""The time must be set correctly for transfer codes to work. Adjust the time and try again.""UVCI copied""Aargau""https://www.ag.ch/coronavirus-impfung""Appenzell Ausserrhoden""https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/""Appenzell Innerrhoden""https://www.ai.ch/coronavirus-impfung""Basel-Country""https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/amt-fur-gesundheit/medizinische-dienste/kantonsarztlicher-dienst/aktuelles/corona-impfung/englisch-english""Basel-City""http://www.coronaimpfzentrumbasel.ch""Berne""http://www.be.ch/corona-impfung""Fribourg""https://www.fr.ch/sante/covid-19/covid-19-vaccination""Geneva""https://www.ge.ch/en/getting-vaccinated-against-covid-19""Glarus""https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung""Graubünden""https://www.gr.ch/DE/institutionen/verwaltung/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx""Jura""https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html""Lucerne""http://www.lu.ch/covid_impfung""Neuchâtel""https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx""Nidwalden""https://www.nw.ch/gesundheitsamtdienste/6044#Impfung""Obwalden""https://www.ow.ch/dienstleistungen/7129""St. Gallen""https://www.sg.ch/coronavirus/impfen""Schaffhausen""https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html""Schwyz""https://www.sz.ch/corona-impfen""Solothurn""https://so.ch/coronaimpfung""Thurgovia""https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590""Ticino""http://www.ti.ch/vaccinazione""Uri""https://www.ur.ch/themen/3673""Valais""https://www.vs.ch/de/web/coronavirus#ancre_vaccination""Vaud""https://vd.ch/coronavirus-vaccins""Zug""https://www.corona-impfung-zug.ch/en/""Zürich""http://www.zh.ch/coronaimpfung""Get vaccinated today!""Being vaccinated against COVID-19 means hassle-free travel to most countries. ""Get vaccinated today!""Being vaccinated against COVID-19 means protection from infection and severe disease. ""Get vaccinated today!""Being vaccinated against COVID-19 means immunity the safe way.""Get vaccinated today!""Being vaccinated against COVID-19 means helping to reduce the disease burden. ""Get vaccinated today!""Being vaccinated against COVID-19 means helping to control the impact of the pandemic. ""Get vaccinated today!""Being vaccinated against COVID-19 means preventing long COVID.""Get vaccinated today!""Being vaccinated against COVID-19 means helping to relieve the pressure on the health system.""Book a vaccination appointment near you""Vaccination may be performed at the following locations near you:
- at specific vaccination centres
- in hospitals
- at your general practitioner's surgery
- at a vaccination pharmacy
Many places also offer walk-in vaccinations without an appointment.""The COVID-19 vaccination is recommended for those over 5. ""Vaccination appointment""Book a vaccination appointment""Select your canton""More information about the COVID-19 vaccination""Information on vaccination ""https://foph-coronavirus.ch/vaccination/""External hardware scanner detected""Reset""Certificates could not be loaded
Code: {ERROR_CODE}""Recovery (Antibody)""Checking not possible""Date, time or time zone on the device are set incorrectly.""Do you want to check certificates?""For quicker checking that is data privacy compliant, use the COVID Certificate Check app""To the Check-App""Understood""«COVID Certificate Check»-App.""Not valid outside Switzerland""Finding""Sufficient""Start of validity""Issuing office""Exemption certificate""New version available""Download the latest version of the app.""Update""The COVID-19 Vaccination Check provides information on initial and booster vaccinations and guides you to the relevant point of contact in your canton.""To the Vaccination Check""https://covid19.impf-check.ch/""Book an appointment now""Explanatory video""https://youtu.be/spfVPMqukjM""Select""Verify ({MODE})""Your selected verification mode no longer exists.""Info""Access to organisations and events permitted for people who have been vaccinated or who have recovered.""Access not permitted.""3G""2G""For organisations and events applying the 3G rule.""In this mode, COVID certificates are accepted for people who have been vaccinated, or who have recovered or tested negative.""It is possible to verify a \"light\" certificate in this mode.""For organisations and events applying the 2G rule.""In this mode, COVID certificates are accepted for people who have been vaccinated or who have recovered.""It is not possible to verify a \"light\" certificate in this mode.""Verification mode""Access to organisations and events permitted for people who have been vaccinated, or who have recovered or tested negative.""Access not permitted.""The COVID certificate being verified is a \"light\" certificate. This cannot be verified in {MODUS} verification mode.""In this case, the certificate can be verified only if the conversion to a \"light\" certificate is reversed.""Select the verification mode that you want to use for verifying COVID certificates.""The verification mode can be changed at any time.""2G+""For organisations and events applying the 2G+ rule.""In addition to a COVID certificate for people who have been vaccinated or who have recovered, a valid test certificate is required. This must be verified separately.""Exceptions: People who have been fully vaccinated, received a booster vaccination or recovered (based on a PCR test) no longer than 120 days ago""It is not possible to verify \"light\" certificates in this mode.""Valid COVID certificate under the 2G rule""Valid COVID certificate for people who have been tested.""Permitted for 2G+ only when combined with a valid test certificate.""Permitted for 2G+ only when combined with verification of a COVID certificate for people who have been vaccinated or have recovered.""To verify this type of COVID certificate, you must have the latest version of the app. Please update your app and repeat the verification process.""To the App Store""Test certificate""For areas in which a valid test certificate is required.""In this mode, COVID certificates are accepted for people who have tested negative based on a PCR or rapid antigen test.""It is not possible to verify \"light\" certificates in this mode.""The \"Refresh button\" has been removed.""If your COVID certificate has expired or is technically invalid, this is indicated directly on the certificate.""COVID certificates are to be verified with the \"COVID Certificate Check\" app.""For verifiers""To find out more""https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1851413288""Access to organisations and events permitted for people who have been fully vaccinated, have received a booster jab or have recovered (based on PCR test results) in the preceding 120 days; an additional test certificate is not required.""To gain access to organisations and events, a negative test result is required in addition to the COVID certificate for people who have been vaccinated or have recovered.""Info""Medical certificate issued in""This certificate is not a travel document.
<br /><br />
This certificate is only valid for a limited period of time. You can check the current duration of validity in Switzerland at any time using the COVID Certificate app.""Exception""Recovery (Antigen Rapid Test)""Date of first positive test result""This certificate is not a travel document.
<br /><br />
This certificate is only valid for a limited period of time. You can check the current duration of validity in Switzerland at any time using the COVID Certificate app.""Imminent expiry""Info""This certificate will soon expire.""More information?""Info""This COVID certificate is valid for only a few more days. Please note the expiry date shown on the certificate.""And now?""https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/what-should-i-do-if-my-covid-certificate-about-expire-under-swiss-rules-validity""Shortened period of validity""Shortened period of validity""This certificate will soon expire.""More information""Info""As of 31 Jan 2022 a shortened period of validity of 270 instead of 365 days applies to COVID vaccination or recovery certificates in Switzerland. This certificate is directly affected by the shortened period of validity:""This COVID certificate can no longer be used after 31 Jan 2022 as the period of validity will already have expired.""More information""https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-period-validity-certificates-vaccination-or-recovery-being-shortened-365-270""Back up your certificate!""If you uninstall the app or change or lose your smartphone, you will also lose your COVID certificates.
This means you should also keep a copy of your certificates outside the app by exporting them as PDFs.""Find out more""https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/i-only-have-my-covid-certificate-electronically-covid-certificate-app-how-can-i""https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/i-only-have-my-covid-certificate-electronically-covid-certificate-app-how-can-i""First""Second""Third""Validity abroad""Validity for travel abroad""Before you travel abroad, find out whether your COVID certificate will be valid at the moment you enter your destination country.""Check for:""Country:""Select""Entering on:""Time entered is in the past""Please note""You’ll find further information at""Please select a country and date of entry.""Select country""Valid for entry to:""Not valid for entry to:""{COUNTRY}, {DATE}""Error while loading available countries""To check certificate validity your smartphone must be connected to the internet.""Entry rules can change. So check the validity shortly before you depart, and go online to make sure of the latest entry rules for your destination country.""The above information relates only to the rules for entering your destination country. Different rules may apply to settings where a certificate is required within the country.""The federal government assumes no liability for the up-to-dateness or completeness of the information provided.""Couldn’t find the country you were looking for? Not all countries accept COVID certificates; it might also be that no entry rules have been made available.""reopen.europa.eu""https://reopen.europa.eu/""New: EU-compatible version""You can request an EU-compatible version of this COVID certificate.""Find out more""Apply for a COVID certificate (EU-compatible)""COVID recovery certificates issued on the basis of rapid antigen tests are now also accepted in the EU.
You have the option of requesting an EU-compatible version of this certificate via the National Application Office.""To the National Application Office's online form""I give my consent for the data in this COVID certificate to be transferred to the form of the National Application Office (a website of the Swiss federal government).""To the form""National Application Office website (no data transferred)""If your application is successful, the new EU-compatible COVID certificate will be sent to you by post and can then be transferred by you to the app. It is not possible for the certificate to be sent direct to the app.""Transferring the certificate data to the National Application Office’s online form makes it easier to validate your application.""https://covidcertificate-form.admin.ch/immunityrequest""Further information""What does this mean?""The QR codes used for COVID certificates have limited technical validity""To enable this certificate to continue to be checked (e.g. when you’re travelling), you must renew the QR code.""You can do this directly here in the app (provided you have an internet connection). The data in your current certificate will be encrypted and sent to the federal government’s COVID certificate issuing system for a new QR code to be issued. This QR code is then sent back to the app. Once the new QR code has been issued and the data sent, the data on the government system are deleted.""Check out this FAQ to find out why you should also renew the QR code if your vaccination or recovery certificate is about to expire or has already expired under the Swiss validity rules.""What does this mean?""The QR codes used for COVID certificates have limited technical validity.""To enable this certificate to continue to be checked (e.g. when you’re travelling), you must renew the QR code.""You can do this directly here in the app (provided you have an internet connection). The data in your current certificate will be encrypted and sent to the federal government’s COVID certificate issuing system for a new QR code to be issued. This QR code is then sent back to the app. Once the new QR code has been issued and the data sent, the data on the government system are deleted.""Check out this FAQ to find out why you should also renew the QR code if your vaccination or recovery certificate is about to expire or has already expired under the Swiss validity rules.""Important!""Also replace certificates you have previously printed out or stored with this renewed version.""The length of time for which a vaccination is recognised in a particular country is not specified in the certificate. Instead, it is calculated in accordance with the specific rules of the country each time the certificate is checked. Renewing the QR code merely ensures that the QR code can be used from a technical point of view.""QR code expiration date (technical)
{DATE}""Renew QR code!""To continue using this certificate you must renew the QR code.""Find out more""Renew QR code""QR code expiration date""The technical expiration date for this QR code has elapsed (or will elapse soon).""The QR code is being updated""The QR code has been successfully renewed""No Internet connection""The app must be online for the QR code to be renewed.""An unexpected error has occurred""Please try again later""Successfully renewed""Also replace certificates that have been printed out or stored with this renewed version.""More information""The technical expiration date for this QR code has elapsed.""24h-limit reached""QR code updated too often. Update temporarily blocked.""To the FAQ""https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-should-i-renew-qr-code-my-covid-certificate-even-though-certificate-about""Update""Certain points of the terms of use and privacy statement for the app have been updated and adapted in line with the relevant legal bases.""Vaccinated on""Tested negative on"" ""1 hour ago""{HOURS} hours ago""1 Day ago""{DAYS} Days ago""What’s new?""The COVID certificate now no longer displays the Validity in Switzerland field. Instead, the app shows the time of your vaccination or test. Why?""COVID certificates in Switzerland""The certificate requirement in Switzerland was lifted in February 2022.""Since then, the Swiss validity periods have only existed formally and no longer have any practical significance in this country.""The Swiss validity period also has no meaning abroad.""COVID certificates abroad""Abroad the rules of the country in question apply.""The app now shows how many days ago you had the vaccination or a test.""This makes it easier to work out whether your certificate complies with the rules of your destination country (if the country still requires a Covid certificate).""Current situation in Switzerland and worldwide""Most countries in Europe have now lifted the certificate requirement for entry.""The Validity abroad function has therefore also been removed from the app.""You can find out whether a certificate requirement still applies in a country on these websites:""reopen.europa.eu""https://reopen.europa.eu""iatatravelcentre.com""https://www.iatatravelcentre.com""exceeding""Tested positive on""Certificate requirement lifted""Certificate requirement lifted""The certificate requirement in Switzerland was lifted in February 2022.""Since then, the Swiss validity periods have only existed formally and no longer have any practical significance in this country.""This Swiss certificate check app verifies COVID certificates based on Swiss validity rules. The result of the check is not relevant for use of the certificate abroad.""If a country still requires a COVID certificate, the rules of the country in question apply.""National COVID certificate application platform""https://covidcertificate-form.admin.ch/immunityrequest""I am travelling abroad and need a COVID certificate to enter the country. What must I bear in mind?""When abroad, it is the validity rules of the country in question that apply, both for entering the country and within the country itself. The rules applicable to the use of the certificate within the destination country may differ from those that apply upon entry. These rules can change at short notice. Shortly before departing you should therefore check the authorities’ website for your transit or destination country to see whether rules relating to COVID-19 are still in force and, if so, which ones. ""Vaccination series incomplete by international standards."
================================================
FILE: common/src/main/res/values/styles.xml
================================================
================================================
FILE: common/src/main/res/values-de/strings.xml
================================================
"Covid Check""Prüfen""Covid Certificate""Check""Vorgewiesenes Zertifikat scannen""Zertifikate werden automatisch geprüft""Prüfen""So funktioniert's""Netzwerkfehler""Überprüfen Sie Ihre Internet Verbindung.""Erneut versuchen""Kein Zugriff auf Kamera""Die App benötigt Zugriff auf die Kamera, um den QR-Code scannen zu können.""Einstellungen ändern""Fehler""Kein gültiger Code""OK""Die App benötigt Zugriff auf die Kamera, um den QR-Code scannen zu können.""Zugriff auf Kamera erlauben""QR-Code scannen
zum Prüfen""Covid-Zertifikat""Nachname""Geburtsdatum""Hinzufügen""Covid-Zertifikat""Scannen Sie den QR-Code auf dem Covid-Zertifikat, um es zur App hinzuzufügen.""Hinzufügen""Prüfung erfolgreich""Nur mit einem
Ausweisdokument gültig""Zertifikat wird geprüft""Covid-Zertifikat ungültig""Entspricht nicht den Gültigkeitskriterien der Schweiz oder des Prüfmodus ({MODUS})""Das Covid-Zertifikat hat keine gültige Signatur""Das Covid-Zertifikat wurde widerrufen""Prüfung fehlgeschlagen""Ein unerwarteter Fehler ist aufgetreten.""Scannen Sie den QR-Code auf dem Covid-Zertifikat.""So funktioniert's""Erneut scannen""Hinzufügen""Zertifikate""Löschen""Covid Cert""Die App""COVID Certificate""Mit der App können Sie Covid-Zertifikate sicher auf dem Smartphone aufbewahren und einfach vorweisen.""Weiter""Datenschutz""Ihre Daten bleiben
in der App""Die Zertifikate sind nur lokal auf Ihrem Smartphone hinterlegt. Die Daten werden nicht in einem zentralen System gespeichert.""Zertifikate einfach vorweisen""Die auf dem Covid-Zertifikat dargestellten Daten sind auch im QR-Code enthalten.""Beim Vorweisen wird der QR-Code mit einer Prüf-App gescannt. Die enthaltenen Daten werden dabei automatisch auf Echtheit und Gültigkeit überprüft.""Datenschutzerklärung""Nutzungsbedingungen""Akzeptieren""de""So funktioniert's""Covid-Zertifikate
hinzufügen""Um ein Covid-Zertifikat zur App hinzufügen zu können, benötigen Sie das Originalzertifikat auf Papier oder als PDF.""Tippen Sie in der App auf «Hinzufügen», um ein neues Zertifikat zur App hinzuzufügen.""Halten Sie nun die Kamera des Smartphones über den QR-Code auf dem Originalzertifikat, um den Code einzuscannen.""Es erscheint eine Vorschau des Covid-Zertifikats. Tippen Sie auf «Hinzufügen» um das Zertifikat sicher in der App zu speichern.""Wann und wo kann ich ein Covid-Zertifikat erhalten?""Häufige Fragen""Was sind Covid-Zertifikate?""Das Covid-Zertifikat bietet die Möglichkeit, eine Covid-19-Impfung, eine durchgemachte Erkrankung oder ein negatives Testergebnis fälschungssicher zu dokumentieren.""Wann und wo kann ich ein Covid-Zertifikat erhalten?""Wie kann ich ein Covid-Zertifikat vorweisen?""Wo sind meine Daten gespeichert?""Wie werden Missbrauch und Fälschung verhindert?""Was passiert, wenn ich mein Covid-Zertifikat verliere?""Wie kann ich ein Covid-Zertifikat zur App hinzufügen?""Können auch mehrere Covid-Zertifikate hinzugefügt werden?""Wo sehe ich, ob mein Covid-Zertifikat gültig ist?""Wie sind meine Daten geschützt?""Welche Daten sind im QR-Code enthalten?""Was muss ich tun, wenn ich das Covid-Zertifikat oder die App lösche?""Ein Covid-Zertifikat können Sie nach einer Covid-19-Impfung, nach einer durchgemachten Erkrankung oder nach einem negativen Testergebnis erhalten. Das Zertifikat stellt Ihnen in der Regel das Gesundheitsfachpersonal vor Ort auf Anfrage aus.""Sie können Ihr Covid-Zertifikat in Papierform vorweisen oder Sie benutzen die «COVID Certificate»-App, um Zertifikate in der App zu speichern und direkt aus der App vorzuweisen.
Beachten Sie, dass Sie in jedem Fall auch noch ein Ausweisdokument vorweisen müssen.
In einigen Ländern wird eine ausgedruckte Version des Zertifikats verlangt und das elektronische Zertifikat nicht akzeptiert. Führen Sie auf Reisen daher stets auch die ausgedruckte Version mit.""Ihre Zertifikatsdaten werden nicht in einem zentralen System des Bundes gespeichert, sondern befinden sich nur lokal auf Ihrem Mobilgerät, respektive auf dem Covid-Zertifikat in Papierform.""Der QR-Code auf dem Covid-Zertifikat enthält eine elektronische Signatur. Die Signatur ist ein wichtiges Sicherheitsmerkmal und macht das Covid-Zertifikat fälschungssicher. Das Covid-Zertifikat ist zudem nur in Kombination mit einem Ausweisdokument gültig.""Ihr Covid-Zertifikat wird in keinem zentralen System des Bundes gespeichert. Bewahren Sie das Covid-Zertifikat auf Papier und/oder als PDF deshalb sorgfältig auf. Bei Verlust und Bedarf nach einem Einsatz kann für die Neuausstellung durch die Gesundheitseinrichtungen (z. B. der Test- oder Impfstelle) eine Gebühr erhoben werden.""Um ein Covid-Zertifikat zur App hinzuzufügen, benötigen Sie das Ihnen ausgestellte Originalzertifikat auf Papier oder als PDF-Dokument. Den darauf abgebildeten QR-Code können Sie mit der COVID Certificate App scannen und hinzufügen. Anschliessend erscheint das Covid-Zertifikat direkt in der App.""Ja das ist möglich. So können Sie z. B. alle Covid-Zertifikate von Familienangehörigen in Ihrer App speichern. Auch in diesem Fall gilt: Das Covid-Zertifikat ist nur in Kombination mit einem Ausweisdokument des Zertifikatsinhabers / der Zertifikatsinhaberin gültig.""Die Zertifikatspflicht in der Schweiz wurde im Februar 2022 aufgehoben. Die Schweizer Gültigkeitsdauern bestehen seitdem nur noch formal und haben praktisch im Inland keine Bedeutung mehr. Deshalb wird in der App das Feld «Gültigkeit in der Schweiz» nicht mehr dargestellt. Stattdessen zeigt sie den Zeitpunkt der Impfung bzw. des Tests an.
Es wird auch angezeigt, wie viele Tage eine Impfung bzw. ein Test her ist. So können Sie einfacher feststellen, ob Ihr Zertifikat den Gültigkeitsregeln Ihres Ziellandes entspricht (falls das Land noch ein Covid-Zertifikat voraussetzt). Im Ausland gelten immer die Regeln des entsprechenden Landes.""Ihre persönlichen Daten werden in keinem zentralen System gespeichert, sondern befinden sich ausschliesslich bei Ihnen lokal auf dem Mobilgerät, respektive im QR-Code auf dem Covid-Zertifikat in Papierform.""Der QR-Code enthält alle Informationen, die Sie auf Ihrem Covid-Zertifikat in Papierform im Klartext finden. Weiter befindet sich im QR-Code eine elektronische Signatur, mit der sich die Echtheit des Covid-Zertifikats überprüfen lässt. Dadurch wird das Covid-Zertifikat fälschungssicher.""Sie können Ihr Covid-Zertifikat einfach wieder auf Ihrem Mobilgerät speichern. Laden Sie dazu die App erneut herunter und scannen Sie anschliessend den QR-Code auf Ihrem Covid-Zertifikat auf Papier oder als PDF.""Wie funktioniert
die App?""Mit der COVID Certificate App können Sie Covid-Zertifikate einfach und sicher auf Ihrem Mobilgerät abspeichern und vorweisen.""Ein Covid-Zertifikat können Sie nach einer vollständigen Covid-19-Impfung, nach einer durchgemachten Erkrankung oder nach einem negativen Testergebnis erhalten. Das Zertifikat stellt Ihnen in der Regel das Gesundheitsfachpersonal vor Ort auf Anfrage aus.""Vorname""Update benötigt""Laden Sie die neue Version der App.""Aktualisieren""In der Schweiz gültig ab:
{DATE}""Impfung""Genesen""Test""Vorteile""Covid-Zertifikate digital aufbewahren""Covid-Zertifikate können einfach zur App hinzugefügt und digital aufbewahrt werden.""Die App prüft die Zertifikate auf ihre Gültigkeit in der Schweiz. So können Sie sich versichern, dass Ihre Zertifikate gültig sind.""Vorteile""Impressum""Häufige Fragen""Zertifikate Liste""Zertifikat hinzufügen""Schliessen""Taschenlampe einschalten""Taschenlampe ausschalten""Impressum""Ein unbekannter Fehler ist aufgetreten.""Entspricht nicht den Gültigkeitskriterien der Schweiz.
Die Gültigkeit des Zertifikat ist abgelaufen.""Entspricht nicht den Gültigkeitskriterien der Schweiz.
Das Zertifikat ist noch nicht gültig.""Ein Netzwerkfehler ist aufgetreten.""Das Gerät befindet sich im Flugmodus.""In der Schweiz gültig ab:
{DATE}""Enthält Daten, die nicht den internationalen Standards entsprechen.""Gültigkeitsdauer für die Schweiz überschritten""Zertifikat wurde
widerrufen""Zertifikat mit
ungültiger Signatur""ungültiger Signatur""widerrufen""Dieses Zertifikat ist bereits in der App gespeichert""Gültigkeit in der
Schweiz""bis""Das Zertifikat wird geprüft""Prüfung erfolgreich""Information""Schliessen""Impfdosis""Covid-19""Krankheit oder Erreger""Produkt""Hersteller""Impfdatum""Land der Impfung""Herausgeber""Genesung""Datum des ersten positiven Resultats""Gültig ab""Gültig bis""Land des Tests""Test""Ergebnis""Nicht erkannt (Negativ)""Erkannt (Positiv)""Typ""Name""Hersteller""Datum der Probenentnahme""Datum Resultat""So funktioniert's""Wollen Sie das Zertifikat wirklich löschen?""Abbrechen""Impfung""http://itunes.apple.com/app/id1565917320""http://itunes.apple.com/app/id1565917510""UVCI""Zertifikat erstellt am
{DATE}""Art des Impfstoffs""Testcenter""Die App benötigt Zugriff auf die Kamera, um den QR-Code scannen zu können.""So werden Covid-Zertifikate geprüft""Mit der COVID Certificate Check App können QR-Codes auf Covid-Zertifikaten gescannt und die Zertifikate auf Echtheit und Gültigkeit überprüft werden.""Wie können Covid-Zertifikate geprüft werden?""Um ein Covid-Zertifikat zu prüfen, scannen Sie den QR-Code auf dem Papierzertifikat oder in der vorgewiesenen COVID Certificate App mit der dafür vorgesehenen COVID Certificate Check App.""Was wird genau geprüft?""Beim Scannen werden drei Aspekte geprüft:
– Enthält das Zertifikat eine gültige elektronische Signatur?
– Ist das Zertifikat nicht widerrufen worden?
– Entspricht das Zertifikat den Gültigkeitskriterien der Schweiz?
Wenn alle drei Aspekte positiv bewertet werden, wird das Covid-Zertifikat als gültig ausgewiesen.""Welche Ausweisdokumente sind gültig? Weshalb müssen die Personalien überprüft werden?""Neben Pass oder ID werden auch andere Ausweisdokumente akzeptiert, die die Identität der betreffenden Person mit einem Foto belegen (z.B. Führerausweis). Das Covid-Zertifikat ist zwar fälschungssicher, mit der Überprüfung der Personalien wird aber erst sichergestellt, dass das vorgezeigte Zertifikat auch auf den Vorweisenden ausgestellt wurde.""Können auch ausländische Zertifikate geprüft werden?""Ja, Covid-Zertifikate, die mit dem digitalen COVID-Zertifikat der EU kompatibel sind, können mit der COVID Certificate Check App gegen die Gültigkeitskriterien der Schweiz geprüft werden.""Welche Daten sehe ich beim Prüfvorgang?""Beim Prüfvorgang sehen Sie nur den Namen und das Geburtsdatum der Zertifikatsinhaberin oder des Zertifikatsinhabers und ob das Covid-Zertifikat gültig ist.""Werden beim Prüfvorgang in der COVID Certificate Check App oder in einem zentralen System Daten gespeichert?""Nein, beim Prüfvorgang werden keine Daten gespeichert - weder in der COVID Certificate Check App noch in einem zentralen System. Es ist somit nicht möglich nachzuvollziehen, welches Covid-Zertifikat von wem, wann und wo überprüft wurde.""Einstellungen""Datenschutzerklärung &
Nutzungsbedingungen""Dieses Zertifikat ist kein Reisedokument.
<br /><br />
Die wissenschaftlichen Erkenntnisse über Covid-19-Impfungen und -Tests sowie über die Genesung von einer Covid-19-Infektion entwickeln sich ständig weiter, auch im Hinblick auf neue besorgniserregende Virusvarianten.
<br /><br />
Bitte informieren Sie sich vor einer Reise über die am Zielort geltenden Beschränkungen und Gültigkeitsregeln. Die Gültigkeit Ihres Zertifikats wird im Ausland anhand der Regeln des Ziellandes berechnet.""https://www.bit.admin.ch/bit/de/home/dokumentation/covid-certificate-app.html""https://www.bit.admin.ch/bit/de/home/dokumentation/covid-certificate-check-app.html""COVID Certificate Check""Wie erhalte ich nach einer durchgemachten Covid-19-Erkrankung ein Covid-Zertifikat?""Je nach Kanton wird Ihnen das Covid-Zertifikat teilweise direkt von der Teststelle oder dem Labor ausgestellt, in dem Ihr positives Testresultat festgestellt wurde. Falls dies nicht der Fall ist, können Sie nachträglich online über die Webseite der «Nationale Antragsstelle Covid-Zertifikat» ein Covid-Zertifikat beantragen. Der Antrag wird dort von der zuständigen kantonalen Behörde bearbeitet. Die Webseite der «Nationale Antragsstelle Covid-Zertifikat» finden Sie hier:""Nächsten Schritt wählen""Zertifikat hinzufügen""Sie haben ein Covid-Zertifikat auf Papier oder als PDF und möchten es zur App hinzufügen.""Transfer-Code erstellen""Transfer-Code""Sie können Transfer-Codes bei Covid-Tests oder Covid-19-Impfungen angeben. Sie erhalten darauf das Covid-Zertifikat direkt in die App geliefert.""Code erstellen""So funktioniert's""Covid-Zertifikate direkt in die App geliefert""Mit Transfer-Codes können Covid-Zertifikate schnell und sicher übermittelt werden. Auf diesem Weg erhalten Sie das Covid-Zertifikat nach einem Covid-Test oder einer Covid-19-Impfung direkt in die App geliefert.""Wer bietet die Übermittlung per Transfer-Code an?""Können Transfer-Codes auch zur Übermittlung von Impfzertifikaten verwendet werden?""Wie funktioniert die Übermittlung per Transfer-Code?""Kann ich den Transfer-Code mehrmals benutzen?""Wenn Sie einen Covid-Test (PCR-Test oder Antigen-Schnelltest) machen oder eine Covid-19-Impfung bekommen, kann der Transfer-Code zur schnellen Übermittlung von Covid-Zertifikaten zum Einsatz kommen.
Informieren Sie sich bei Ihrem Testcenter, bei der Impfstelle, in der Apotheke oder bei Ihrem Arzt, ob die Übermittlung per Transfer-Code angeboten wird.""Aktuell ist die Übermittlung per Transfer-Code auf Covid-Tests ausgelegt. Wie Sie ein Covid-Zertifikat nach einer Impfung erhalten erfahren Sie hier:""Falls die Stelle, die den Covid-Test durchführt oder die Covid-19-Impfung verabreicht, die Übermittlung per Transfer-Code anbietet, können Sie bereits bei der Anmeldung, der Testentnahme oder vor Erhalt der Impfung Ihren Transfer-Code angeben.
Einen Transfer-Code erstellen Sie jederzeit in der «COVID Certificate»-App. Tippen Sie dazu auf dem Startbildschirm auf «Hinzufügen» resp. auf das «Plus»-Symbol unten rechts. Danach tippen Sie auf «Transfer-Code erstellen». Die App zeigt Ihnen dann den 9-stelligen Code an.""Nein, ein Transfer-Code kann nur einmal verwendet werden. Falls Sie mehrere Zertifikate z. B. von Familienangehörigen empfangen möchten, erstellen Sie bitte für jedes Zertifikat einen neuen Code.""So funktioniert der Transfer""Wie sind meine Daten beim Transfer geschützt?""Was kann ich tun, wenn das Zertifikat nicht ankommt?""Was passiert bei einem positiven Testresultat?""Für den Transfer wird Ihr Covid-Zertifikat verschlüsselt bereitgestellt. Der Transfer-Code stellt sicher, dass nur Ihre App das Covid-Zertifikat empfangen kann. Unmittelbar nach dem Transfer werden die Daten wieder vom Server gelöscht.""Sobald das Zertifikat vom Labor oder Testcenter generiert wurde, steht es zum Transfer zur Verfügung. Stellen Sie sicher, dass Ihr Smartphone mit dem Internet verbunden ist, um Zertifikate empfangen zu können.
Sollte ihr Covid-Zertifikat dennoch nicht eintreffen, fragen Sie bei der Stelle nach, die den Test durchgeführt hat (Testcenter, Apotheke, Ärztin / Arzt).""Bei einem positiven Antigen-Schnelltest erhalten Sie vom Labor kein Covid-Zertifikat.
Bei einem positiven PCR-Test erhalten Sie ein Covid-Zertifikat für Genesene. Es ist ab dem 11. Tag nach der Testentnahme gültig.""Ihr Transfer-Code wurde erstellt""Transfer-Code""Erstellt am {DATE}""Nächste Schritte""Übergeben Sie den Code bei der Testentnahme der Apotheke, dem Testcenter oder der Ärztin / dem Arzt.""Falls Sie mehrere Zertifikate z. B. von Familienangehörigen empfangen möchten, erstellen Sie für jedes Zertifikat einen neuen Code.""Fertig""Transfer""Warten auf Transfer""Noch 1 Tag gültig""Noch {DAYS} Tage gültig""Transfer fehlgeschlagen""Code abgelaufen""Zuletzt aktualisiert
{DATE}""Mit diesem Transfer kann kein Zertifikat mehr empfangen werden.""Format des Zertifikat
ungültig""ungültig""Das Format des Covid-Zertifikats ist ungültig.""Offline Modus""Um die aktuelle Gültigkeit anzeigen zu können, muss die App regelmässig online sein.""Prüfung offline nicht möglich""Prüfung zur Zeit nicht möglich""Versuchen Sie es später erneut.""Offline-Prüfung nicht möglich""Eine Internetverbindung wird benötigt, um die Prüflisten zu aktualisieren""Prüfung fehlgeschlagen""Ein unerwarteter Fehler ist aufgetreten.""Gültigkeit konnte nicht ermittelt werden""Die App prüft regelmässig, ob ein Covid-Zertifikat für Ihren Transfer-Code verfügbar ist.""Sobald das Covid-Zertifikat verfügbar ist, erscheint es in der App. Wenn Sie Mitteilungen aktiviert haben, werden Sie von der App benachrichtigt.""Nach {TRANSFER_CODE_VALIDITY} Tagen läuft der Transfer-Code ab. Danach wartet die App noch für weitere 72h auf einen möglichen Transfer, bevor der Transfer-Code ungültig wird.""Mitteilungen erlauben""Die App kann Sie informieren, sobald das Zertifikat eingetroffen ist. Erlauben Sie dazu der App, Ihnen Mitteilungen zu senden.""Weiter""https://bag-coronavirus.ch/zertifikat/wie-erhalte-ich-ein-covid-zertifikat-und-wie-verwende-ich-es/""Weitere Informationen""Code erstellen""1 Tag""{DAYS} Tage""Nicht widerrufen""Signatur gültig""Entspricht nicht den Gültigkeitskriterien der Schweiz.""Transfer-Code konnte nicht erstellt werden""Keine Verbindung zum Internet""Ein unerwarteter Fehler ist aufgetreten.""Aktualisierung zur Zeit nicht möglich""Um den Transfer empfangen zu können, muss die App online sein.""Es ist ein unerwarteter Fehler aufgetreten. Versuchen Sie es später erneut.""Versuchen Sie es später erneut.""Um einen Transfer-Code erstellen zu können, muss die App online sein.""Aktualisieren""Wollen Sie den Transfer-Code wirklich löschen?""Transfer erfolgreich""Das Covid-Zertifikat ist eingetroffen""Wie lange ist das Covid-Zertifikat gültig?""In der Schweiz wurde die Zertifikatspflicht im Februar 2022 aufgehoben. Die Schweizer Gültigkeitsdauern bestehen seitdem nur noch formal und haben praktisch im Inland keine Bedeutung mehr. Im Ausland gelten jeweils die Gültigkeitsregeln des entsprechenden Landes. Informieren Sie sich kurz vor Ihrer Abreise auf der Webseite der Behörden Ihres Transit- oder Ziellandes, ob das Land noch zertifikatsbasierte Massnahmen hat und welche falls ja, welche Gültigkeitsdauern für Ihr Zielland festgelegt sind. Hilfreiche Webseite bei Auslandsreisen:""Re-open EU (europa.eu)""https://reopen.europa.eu/de""Kann ich die App auch offline verwenden?""Sie können die App ohne eine Internetverbindung verwenden. Auch im Offline-Modus können Zertifikate vorgewiesen und von den Prüfern gescannt und verifiziert werden.""Was sind die aktuellen Gültigkeitskriterien der Schweiz?""Die aktuell geltende Gültigkeitsdauer von Covid-Zertifikaten finden Sie hier:""Weitere Informationen""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624""Können Zertifikate auch offline geprüft werden?""Grundsätzlich können Covid-Zertifikate auch ohne eine Internetverbindung geprüft werden. Dazu werden regelmässig aktualisierte Prüflisten von einem zentralen Server heruntergeladen. Diese lokal gespeicherten Prüflisten dürfen nicht älter als 48h sein.
Um die Prüflisten zu aktualisieren muss die App mit dem Internet verbunden sein und geöffnet werden. Die Aktualisierung erfolgt unmittelbar und automatisch.""QR-Code scannen""PDF importieren""Tipp: Mitteilungen aktivieren""Aktivieren""Nachweis""Unvollständige Impfung""Nachweis erstellt am
{DATE}""Weitere Informationen""https://bag-coronavirus.ch/zertifikat/wie-erhalte-ich-ein-covid-zertifikat-und-wie-verwende-ich-es/""Zertifikat Light""Exportieren""Was ist ein
Zertifikat Light?""Zertifikat Light""Kann nur innerhalb der Schweiz verwendet werden""Enthält nur Namen, Vornamen, Geburtsdatum und eine elektronische Signatur""Gültig für max. {LIGHT_CERT_VALIDITY_IN_H} Stunden""Die Konvertierung des Covid-Zertifikats in ein Zertifikat Light erfolgt online.""Sie können das Zertifikat Light jederzeit deaktivieren, um wieder zum normalen Covid-Zertifikat zu wechseln.""Deaktivieren""Aktivieren""Zertifikat Light
konnte nicht aktiviert werden""Um das Zertifikat Light aktivieren zu können, muss die App online sein.""Nur mit einem Ausweisdokument
& innerhalb der Schweiz gültig""Covid-Zertifikat exportieren""Aus den Daten Ihres Covid-Zertifikats wird ein PDF erstellt, das Sie drucken oder teilen können.""Die Erstellung des PDF-Dokuments erfolgt online.""Exportieren""PDF konnte nicht
erstellt werden""Um das PDF erstellen zu können, muss die App online sein.""QR-Code""Keine Verbindung zum Internet""Versuchen Sie es später erneut.""Ein unerwarteter Fehler ist aufgetreten.""Zertifikat Light""Exportieren""Aus den Daten Ihres Covid-Zertifikats wird ein PDF erstellt, das Sie drucken oder teilen können.""Die Erstellung des PDF-Dokuments erfolgt online.""Exportieren""Keine Verbindung zum Internet""Ein unerwarteter Fehler ist aufgetreten.""Es ist ein unerwarteter Fehler aufgetreten. Versuchen Sie es später erneut.""Wenn Sie das Zertifikat Light aktivieren, wird aus den Daten Ihres Covid-Zertifikats ein neuer QR-Code erstellt, der keine Gesundheitsdaten enthält.""Während das normale Covid-Zertifikat im Rahmen seiner Gültigkeit ohne Einschränkungen sowohl in der Schweiz als auch in der EU/EFTA verwendet werden kann, ist der Einsatz des Zertifikats Light nur in der Schweiz möglich. Aus Datenschutzgründen muss das Zertifikat Light nach {LIGHT_CERT_VALIDITY_IN_H} Stunden erneut aktiviert werden. Es bringt keine zusätzlichen Rechte gegenüber dem normalen Covid-Zertifikat.""nur muss keine""reduziert""erweitert""Update""Zertifikat Light""Mit diesem Update können Sie in der App eine Zertifikatskopie ohne Gesundheitsdaten für die Verwendung in der Schweiz generieren lassen. Dazu wurden die Nutzungsbedingungen sowie die Datenschutzerklärung aktualisiert, welche bei Weiternutzung der App als genehmigt gelten.""Update""Zertifikat Light""Mit diesem Update können Sie in der App auch die Zertifikatskopie ohne Gesundheitsdaten prüfen. Dazu wurden die Nutzungsbedingungen sowie die Datenschutzerklärung aktualisiert, welche bei Weiternutzung der App als genehmigt gelten.""Gültigkeit des Zertifikats
abgelaufen""Light""Was ist das Zertifikat Light?""Die «COVID Certificate»-App bietet Inhaberinnen und Inhabern von Covid-Zertifikaten die Möglichkeit, eine datenminimierte Zertifikatskopie zur Nutzung in der Schweiz zu generieren. Das «Zertifikat Light» bestätigt das Vorliegen eines gültigen Covid-Zertifikats, ohne selbst Gesundheitsdaten zu enthalten.
Diese datenminimierte Alternative zum Covid-Zertifikat wurde auf Wunsch des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (EDÖB) entwickelt, da Covid-Zertifikate gewisse Gesundheitsdaten wie beispielsweise Impfstoff oder Datum der Impfung enthalten, die auch ausgelesen werden können. Mittels dem «Zertifikat Light» wird dies verhindert.
Das «Zertifikat Light» ist lediglich elektronisch innerhalb der App verfügbar und wird nur in der Schweiz anerkannt. Aus Datenschutzgründen hat das «Zertifikat Light» eine maximale Gültigkeitsdauer von {LIGHT_CERT_VALIDITY_IN_H} Stunden und muss danach erneut aktiviert werden. Wird das normale Zertifikat vor Ablauf der {LIGHT_CERT_VALIDITY_IN_H} Stunden benötigt, kann das «Zertifikat Light» einfach deaktiviert werden.""Was ist das Zertifikat Light?""Die «COVID Certificate»-App bietet Inhaberinnen und Inhabern von Covid-Zertifikaten die Möglichkeit, eine datenminimierte Zertifikatskopie zu generieren. Dieses «Zertifikat Light» zeigt lediglich das Vorliegen eines gültigen Covid-Zertifikats an, jedoch ohne Gesundheitsdaten zu enthalten.
Die datenminimierte Alternative zum Covid-Zertifikat wurde auf Wunsch des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (EDÖB) entwickelt, da Dritte mit selbstentwickelten Apps bei der Prüfung von Covid-Zertifikaten Gesundheitsdaten wie beispielsweise Impfstoff oder Datum der Impfung einsehen könnten. Mittels dem «Zertifikat Light» wird dies verhindert.
Das «Zertifikat Light» ist lediglich elektronisch innerhalb der App verfügbar und wird nur in der Schweiz anerkannt. Aus Datenschutzgründen hat das «Zertifikat Light» eine maximale Gültigkeitsdauer von {LIGHT_CERT_VALIDITY_IN_H} Stunden und muss danach erneut aktiviert werden. Wird das normale Zertifikat vor Ablauf der {LIGHT_CERT_VALIDITY_IN_H} Stunden benötigt, kann das Zertifikat Light einfach deaktiviert werden.""Wie kann ein Zertifikat Light wieder in ein EU/EFTA-konformes Covid-Zertifikat umgewandelt werden?""Das Zertifikat Light kann durch die Halterin / den Halter jederzeit in der «COVID Certificate»-App deaktiviert werden. Danach steht das normale Covid-Zertifikat wieder zur Verfügung.""Noch {TIMESPAN} gültig""Transfer Code kopiert""Was ist ein Transfer-Code?""Mit Transfer-Codes können Covid-Zertifikate schnell und sicher übermittelt werden. Auf diesem Weg erhalten Sie das Covid-Zertifikat nach einem Covid-Test oder einer Covid-19-Impfung direkt in die App geliefert.""Ich habe das Covid-Zertifikat ausschliesslich elektronisch in der App. Wie komme ich zum Zertifikat als PDF oder auf Papier?""In der «COVID Certificate»-App finden Sie in der Detailansicht des elektronischen Covid-Zertifikats die Funktion «Exportieren». Damit können Sie ein PDF erstellen, dieses speichern und ausdrucken.""market://details?id=ch.admin.bag.covidcertificate.wallet""market://details?id=ch.admin.bag.covidcertificate.verifier""24h-Limite erreicht""Das Zertifikat Light wurde in den letzten 24h bereits zu oft aktiviert.""Import fehlgeschlagen""Die Datei enthält entweder keinen gültigen QR-Code oder der QR-Code konnte nicht erkannt werden.""Unerwarteter Fehler""Kontaktieren Sie den Support""+41 58 466 07 99""Entschlüsselungsfehler""Ein Speicher der App konnte nicht entschlüsselt werden. Um die App weiter zu benutzen muss der Speicher gelöscht und neu erstellt werden. Dabei gehen Daten verloren.""Einstellungen""Sprache""Date format used: dd.mm.yyyy""Hersteller und Name""Uhrzeit Fehler""Die Uhrzeit muss richtig eingestellt sein, damit Transfer-Codes funktionieren. Passen Sie Ihre Uhrzeit an und versuchen sie es erneut.""UVCI kopiert""Aargau""https://www.ag.ch/coronavirus-impfung""Appenzell Ausserrhoden""https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/""Appenzell Innerrhoden""https://www.ai.ch/coronavirus-impfung""Basel-Landschaft""https://www.bl.ch/impfen""Basel-Stadt""http://www.coronaimpfzentrumbasel.ch""Bern""http://www.be.ch/corona-impfung""Freiburg""https://www.fr.ch/de/gesundheit/covid-19/covid-19-impfung-in-ihrer-naehe-durch-impfteams-in-den-impfzentren-in-der-apotheke-oder-bei-ihrem-arzt""Genf""https://www.ge.ch/se-faire-vacciner-contre-covid-19""Glarus""https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung""Graubünden""https://www.gr.ch/DE/institutionen/verwaltung/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx""Jura""https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html""Luzern""http://www.lu.ch/covid_impfung""Neuenburg""https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx""Nidwalden""https://www.nw.ch/gesundheitsamtdienste/6044#Impfung""Obwalden""https://www.ow.ch/dienstleistungen/7129""St. Gallen""https://www.sg.ch/coronavirus/impfen""Schaffhausen""https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html""Schwyz""https://www.sz.ch/corona-impfen""Solothurn""https://so.ch/coronaimpfung""Thurgau""https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590""Tessin""http://www.ti.ch/vaccinazione""Uri""https://www.ur.ch/themen/3673""Wallis""https://www.vs.ch/de/web/coronavirus#ancre_vaccination""Waadt""https://vd.ch/coronavirus-vaccins""Zug""https://www.corona-impfung-zug.ch/""Zürich""http://www.zh.ch/coronaimpfung""Jetzt impfen lassen!""Mit der Covid-19-Impfung können Sie unbeschwert in die meisten Länder reisen.""Jetzt impfen lassen!""Mit der Covid-19-Impfung können Sie sich vor Erkrankung und einem allfälligen schweren Verlauf schützen.""Jetzt impfen lassen!""Mit der Covid-19-Impfung können Sie auf sichere Art immun werden.""Jetzt impfen lassen!""Mit der Covid-19-Impfung können Sie mithelfen, die Krankheitslast zu reduzieren.""Jetzt impfen lassen!""Mit der Covid-19-Impfung können Sie helfen, die Auswirkungen der Pandemie zu bekämpfen.""Jetzt impfen lassen!""Mit der Covid-19-Impfung können Sie die Langzeitfolgen einer Covid-19-Erkrankung vermeiden.""Jetzt impfen lassen!""Mit der Covid-19-Impfung können Sie dazu beitragen, das Gesundheitswesen zu entlasten.""Impftermin in Ihrer Nähe buchen""Eine Impfung könnte zum Beispiel an diesen Orten in Ihrer Nähe stattfinden:
- in spezifischen Impfzentren
- in Spitälern
- bei Ihrem Hausarzt oder Ihrer Hausärztin
- in Impfapotheken
Viele Orte bieten auch Walk-in-Impfungen ohne Termine an.""Die Covid-19-Impfung ist für Personen ab 5 Jahren empfohlen.""Impftermin""Impftermin buchen""Wählen Sie Ihren Kanton""Weitere Informationen rund um die Covid-19-Impfung""Informationen zur Impfung""https://bag-coronavirus.ch/impfung/""Externer Hardwarescanner erkannt""Zurücksetzen""Zertifikate konnten nicht geladen werden
Code: {ERROR_CODE}""Genesung (Antikörper)""Prüfung nicht möglich""Datum, Uhrzeit oder Zeitzone auf dem Gerät sind falsch eingestellt.""Wollen Sie Zertifikate überprüfen?""Für eine Datenschutzkonforme und schnellere Prüfung nutzen Sie die \"COVID Certificate Check\"-App.""Zur Check-App""Verstanden""«COVID Certificate Check»-App.""Ausserhalb der Schweiz nicht gültig""Befund""Genügend""Beginn der Gültigkeit""Für die Ausstellung verantwortliche Stelle""Ausnahmezertifikat""Neue Version verfügbar""Laden Sie die neue Version der App.""Aktualisieren""Der Covid-19 Impf-Check gibt Auskunft über Erst- sowie Auffrischimpfungen und führt Sie zur entsprechenden Anlaufstelle in Ihrem Kanton.""Zum Impf-Check""https://covid19.impf-check.ch/""Jetzt Termin buchen""Erklärvideo""https://youtu.be/DClLZIUjr3w""wählen""Prüfen ({MODE})""Ihr gewählter Prüfmodus existiert nicht mehr.""Info""Zutritt zu Betrieben und Veranstaltungen für geimpfte oder genesene Personen.""Kein Zutritt.""3G""2G""Für Betriebe und Veranstaltungen, in welchen mit einer 3G-Regelung geprüft wird.""In diesem Modus werden Covid-Zertifikate für Geimpfte, Genesene oder negativ Getestete akzeptiert.""Die Prüfung von einem Zertifikat Light ist in diesem Modus möglich.""Für Betriebe und Veranstaltungen, in welchen mit einer 2G-Regelung geprüft wird.""In diesem Modus werden Covid-Zertifikate für Geimpfte oder Genesene akzeptiert.""Die Prüfung von einem Zertifikat Light ist in diesem Modus nicht möglich.""Prüfmodus""Zutritt zu Betrieben und Veranstaltungen für geimpfte, genesene oder negativ getestete Personen.""Kein Zutritt.""Beim zu prüfenden Covid-Zertifikat handelt es sich um ein Zertifikat Light. Dies kann im {MODUS}-Prüfmodus nicht geprüft werden.""Die Prüfung kann in diesem Fall nur erfolgen, wenn die Umwandlung in ein Zertifikat Light rückgängig gemacht wird.""Wählen Sie den Prüfmodus, in welchem Sie Covid-Zertifikate prüfen möchten.""Der Prüfmodus kann jederzeit geändert werden.""2G+""Für Betriebe und Veranstaltungen, in welchen mit einer Regelung nach 2G+ geprüft wird.""Zusätzlich zu einem Covid-Zertifikat für Geimpfte oder Genesene wird ein gültiges Testzertifikat benötigt, welches separat geprüft werden muss.""Ausnahmen: Personen, deren vollständige Impfung, Auffrischimpfung oder Genesung nicht länger als 120 Tage zurückliegt.""Die Prüfung von Zertifikate Light ist in diesem Modus nicht möglich.""Gültiges Covid-Zertifikat nach 2G-Regelung""Gültiges Covid-Zertifikat für Getestete""Für 2G+ nur in Kombination mit der Prüfung eines gültigen Testzertifikats zugelassen.""Für 2G+ nur in Kombination mit der Prüfung eines Covid-Zertifikats für Geimpfte oder Genesene zugelassen.""Die Prüfung dieser Art des Covid-Zertifikats bedingt die neuste Version der Check-App. Bitte aktualisieren Sie Ihre App und wiederholen Sie den Prüfvorgang.""Zum App Store""Testzertifikat""Für Bereiche, bei denen ein gültiges Testzertifikat notwendig ist.""In diesem Modus werden Covid-Zertifikate für negativ Getestete basierend auf einem PCR- oder Antigen-Schnelltest akzeptiert.""Die Prüfung von Zertifikate Light ist in diesem Modus nicht möglich.""Der «Refresh-Button» wurde entfernt.""Sollte Ihr Covid-Zertifikat abgelaufen oder technisch ungültig sein, wird Ihnen dies direkt auf dem Zertifikat angezeigt.""Die Prüfung von Covid-Zertifikaten ist mit der App «COVID Certificate Check» vorzunehmen.""Für Prüfende""Mehr erfahren""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1070048217""Zutritt zu Betrieben und Veranstaltungen für Personen, deren vollständige Impfung, Auffrischimpfung oder Genesung (basierend auf PCR-Test) nicht länger als 120 Tage zurückliegt. Sie benötigen kein zusätzliches Testzertifikat.""Für den Zutritt zu Betrieben und Veranstaltungen wird zusätzlich zum Covid-Zertifikat für geimpfte oder genesene Personen ein negatives Testresultat benötigt.""Info""Medizinisches Attest ausgestellt in""Dieses Zertifikat ist kein Reisedokument.
<br /><br />
Dieses Zertifikat ist zeitlich nur begrenzt gültig. Die aktuell in der Schweiz massgebliche Gültigkeitsdauer können Sie jederzeit mit der Covid-Certificate App überprüfen.""Ausnahme""Genesung (Antigen-Schnelltest)""Datum des ersten positiven Resultats""Dieses Zertifikat ist kein Reisedokument.
<br /><br />
Dieses Zertifikat ist zeitlich nur begrenzt gültig. Die aktuell in der Schweiz massgebliche Gültigkeitsdauer können Sie jederzeit mit der Covid-Certificate App überprüfen.""Bald abgelaufen""Info""Dieses Zertifikat läuft bald ab.""Mehr erfahren?""Info""Dieses Covid-Zertifikat ist nur noch wenige Tage gültig. Bitte beachten Sie das auf dem Zertifikat ausgewiesene Ablaufdatum.""Und nun?""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/was-soll-ich-tun-wenn-mein-covid-zertifikat-nach-schweizer-gueltigkeitsregeln-bald""Verkürzte Gültigkeitsdauer""Verkürzte Gültigkeitsdauer""Dieses Zertifikat wird bald ablaufen.""Mehr erfahren""Info""Per 31. Jan. 2022 gelten in der Schweiz reduzierte Gültigkeitsdauern von 270 statt 365 Tagen für Covid-Zertifikate für Geimpfte oder Genesene. Dieses Zertifikat ist von der verkürzten Gültigkeitsdauer unmittelbar betroffen:""Dieses Covid-Zertifikat kann ab dem 31. Jan. 2022 nicht mehr verwendet werden, da die Gültigkeitsdauer dann bereits abgelaufen sein wird.""Mehr erfahren""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/warum-wird-die-gueltigkeitsdauer-der-zertifikate-fuer-eine-impfung-oder-eine""Zertifikat sichern!""Wenn Sie die App löschen, Ihr Smartphone wechseln oder verlieren, gehen auch Ihre Covid-Zertifikate verloren.
Bewahren Sie Ihre Zertifikate daher auch ausserhalb der App auf, indem Sie diese als PDF exportieren.""Mehr erfahren""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/ich-habe-das-covid-zertifikat-ausschliesslich-elektronisch-der-covid-certificate""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/ich-habe-das-covid-zertifikat-ausschliesslich-elektronisch-der-covid-certificate""Erstens""Zweitens""Drittens""Gültigkeit im Ausland""Gültigkeit für Reisen ins Ausland""Finden Sie vor einer Auslandreise heraus, ob Ihr Covid-Zertifikat zum Zeitpunkt der Einreise ins Zielland gültig ist.""Prüfen für:""Land:""Wählen""Einreise am:""Die angegebene Uhrzeit liegt in der Vergangenheit""Hinweise""Mehr Informationen finden Sie unter""Bitte wählen Sie ein Land und den Einreisezeitpunkt aus.""Land auswählen""Gültig für die Einreise nach:""Ungültig für die Einreise nach:""{COUNTRY}, {DATE}""Fehler beim Laden der verfügbaren Länder""Um die Gültigkeit zu überprüfen, muss Ihr Smartphone mit dem Internet verbunden sein.""Die Einreiseregeln können sich ändern. Prüfen Sie daher die Gültigkeit kurz vor der Abreise und informieren Sie sich zusätzlich online über die aktuellen Einreiseregeln des Ziellandes.""Die oben genannten Angaben beziehen sich nur auf die Einreiseregeln des Ziellandes. Für allfällige zertifikatspflichtige Bereiche innerhalb des Landes können andere Regeln gelten.""Für die Aktualität und Vollständigkeit der gegebenen Informationen übernimmt der Bund keine Haftung.""Land nicht gefunden? Nicht alle Länder akzeptieren Covid-Zertifikate oder es wurden keine Einreiseregeln verfügbar gemacht.""reopen.europa.eu""https://reopen.europa.eu/""Neu: EU-kompatible Version""Für dieses Covid-Zertifikat kann eine EU-kompatible Version beantragt werden.""Mehr erfahren""Covid-Zertifikat beantragen (EU-kompatibel)""Neu werden Covid-Zertifikate für Genesene auf Basis von Antigen-Schnelltests auch in der EU akzeptiert.
Sie haben die Möglichkeit, eine EU-kompatible Version dieses Zertifikats bei der Nationalen Antragsstelle zu beantragen.""Zum Online-Formular der Nationalen Antragsstelle""Ich bin einverstanden, dass die Daten dieses Covid-Zertifikats in das Formular der Nationalen Antragsstelle (eine Website des Bundes) übertragen werden.""Zum Formular""Website der Nationalen Antragsstelle (ohne Datenübernahme)""Ist die Beantragung erfolgreich, wird Ihnen das neue EU-kompatible Covid-Zertifikat per Post zugestellt und kann von Ihnen in die App übernommen werden. Eine direkte Zustellung in die App ist nicht möglich.""Durch die Übernahme der Daten des Zertifikats in das Online-Formular kann Ihr Antrag einfacher verarbeitet werden.""https://covidcertificate-form.admin.ch/immunityrequest""Weitere Informationen""Was bedeutet das?""Die QR-Codes der Covid-Zertifikate sind technisch nur begrenzt gültig.""Damit dieses Zertifikat (z. B. auf Reisen) weiterhin geprüft werden kann, muss der QR-Code erneuert werden.""Die Erneuerung können Sie hier in der App selbst durchführen (Internetverbindung nötig). Die Daten des aktuellen Zertifikats werden dazu verschlüsselt von der App an das System des Bundes zur Ausstellung von Covid-Zertifikaten übermittelt. Danach wird ein neuer QR-Code zurück an die App gesendet. Anschliessend werden die Daten gelöscht.""Wieso Sie den QR-Code auch dann erneuern sollten, wenn Ihr Impf- oder Genesungszertifikat nach den Schweizer Gültigkeitsregeln bald abläuft oder bereits abgelaufen ist, lesen Sie in dieser FAQ.""Was bedeutet das?""Die QR-Codes der Covid-Zertifikate sind technisch nur begrenzt gültig.""Damit dieses Zertifikat (z. B. auf Reisen) weiterhin geprüft werden kann, muss der QR-Code erneuert werden.""Die Erneuerung können Sie hier in der App selbst durchführen (Internetverbindung nötig). Die Daten des aktuellen Zertifikats werden dazu verschlüsselt von der App an das System des Bundes zur Ausstellung von Covid-Zertifikaten übermittelt. Danach wird ein neuer QR-Code zurück an die App gesendet. Anschliessend werden die Daten gelöscht.""Erneuern Sie den QR-Code auch dann, wenn die Gültigkeit in der Schweiz bald abläuft oder bereits abgelaufen ist.""Wichtig!""Ersetzen Sie auch zuvor ausgedruckte oder gespeicherte Zertifikate durch diese erneuerte Version.""Wie lange ein Covid-Zertifikat gültig ist wird in jedem Land gemäss den aktuell geltenden Regeln berechnet. Die Erneuerung des QR-Codes hat darauf keinen Einfluss.""QR code expiration date (technical)
{DATE}""QR-Code erneuern""Um dieses Zertifikat weiterhin verwenden zu können, muss der QR-Code erneuert werden.""Mehr erfahren""QR-Code erneuern""Ablaufdatum QR Code""Das technische Ablaufdatum für diesen QR-Code ist (bald) erreicht. ""QR-Code wird erneuert""Der QR-Code wurde erfolgreich erneuert""Keine Verbindung zum Internet""Um den QR-Code erneuern zu können, muss die App online sein.""Ein unerwarteter Fehler ist aufgetreten.""Versuchen Sie es später erneut.""Erfolgreich erneuert""Ersetzen Sie auch ausgedruckte oder gespeicherte Versionen dieses Zertifikats durch diese erneuerte Version.""Mehr erfahren""Das technische Ablaufdatum für diesen QR-Code ist erreicht.""24h-Limite erreicht""QR-Code zu oft erneuert. Erneuerung temporär gesperrt.""Zur FAQ""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat""Aktualisierung""Die Nutzungsbedingungen und die Datenschutzerklärung der App wurden punktuell aktualisiert und an die rechtlichen Grundlagen angepasst.""Impfdatum""Negativ getestet""vor""1 Stunde""{HOURS} Stunden""1 Tag""{DAYS} Tagen""Was ist neu?""Neu wird auf dem Covid-Zertifikat das Feld «Gültigkeit in der Schweiz» nicht mehr dargestellt. Stattdessen zeigt die App den Zeitpunkt der Impfung bzw. des Tests an. Warum?""Covid-Zertifikate in der Schweiz""Die Zertifikatspflicht in der Schweiz wurde im Februar 2022 aufgehoben.""Die Schweizer Gültigkeitsdauern bestehen seitdem nur noch formal und haben im Inland keine praktische Bedeutung mehr.""Die Schweizer Gültigkeitsdauer hat auch im Ausland keine Bedeutung.""Covid-Zertifikate im Ausland""Im Ausland gelten die Regeln des entsprechenden Landes.""Neu zeigt die App an, wie viele Tage eine Impfung bzw. ein Test her ist.""So können Sie einfacher feststellen, ob Ihr Zertifikat den Regeln Ihres Ziellandes entspricht (falls das Land noch ein Covid-Zertifikat voraussetzt).""Aktuelle Situation in Europa und weltweit""Die meisten Länder in Europa haben die Zertifikatspflicht für die Einreise inzwischen aufgehoben.""Die Funktion «Gültigkeit im Ausland» wurde daher ebenfalls entfernt.""Ob in einem Land noch eine Zertifikatspflicht gilt, erfahren Sie auf diesen Webseiten:""reopen.europa.eu""https://reopen.europa.eu""iatatravelcentre.com""https://www.iatatravelcentre.com""vor mehr als""Positiv getestet""Zertifikatspflicht aufgehoben""Zertifikatspflicht aufgehoben""Die Zertifikatspflicht in der Schweiz wurde im Februar 2022 aufgehoben.""Die Schweizer Gültigkeitsdauern bestehen seitdem nur noch formal und haben im Inland keine praktische Bedeutung mehr.""Diese Schweizer Prüf-App prüft Covid-Zertifikate nach den Schweizer Gültigkeitsregeln. Das Prüfergebnis ist für einen Einsatz im Ausland nicht massgeblich.""Falls ein Land noch ein Covid-Zertifikat voraussetzt, gelten jeweils die Regeln des entsprechenden Landes.""Nationale Antragsstelle Covid-Zertifikat (admin.ch)""https://covidcertificate-form.admin.ch/immunityrequest""Ich verreise ins Ausland und brauche für die Einreise ein Covid-Zertifikat. Was muss ich beachten?""Im Ausland gelten jeweils die Gültigkeitsregeln des entsprechenden Landes, sowohl für die Einreise wie auch innerhalb des Ziellandes. Für die Verwendung des Zertifikats innerhalb des Ziellandes können andere Regeln als bei der Einreise gelten. Diese Regeln können kurzfristig ändern. Informieren Sie sich daher kurz vor Ihrer Abreise auf der Webseite der Behörden Ihres Transit- oder Ziellandes, ob dort noch Regeln im Zusammenhang mit Covid-19 gelten und wenn ja, welche.""Unvollständige Impfserie gemäss internationalen Standards."
================================================
FILE: common/src/main/res/values-fr/strings.xml
================================================
"Covid Check""Vérifier""Covid Certificate""Check""Scanner le certificat présenté""Les certificats sont vérifiés automatiquement""Vérifier""Comment ça fonctionne""Problème de réseau""Vérifiez votre connexion Internet.""Réessayer""Accès à l'appareil photo refusé""L'application doit accéder à l'appareil photo pour pouvoir scanner le code QR.""Modifier les paramètres""Erreur""Code invalide""OK""L'application doit accéder à l'appareil photo pour pouvoir scanner le code QR.""Donner accès à l'appareil photo""Scanner le code QR
pour vérifier""Certificat COVID""Nom""Date de naissance""Ajouter""Certificat COVID""Scannez le code QR situé sur le certificat COVID pour l'ajouter à l'application.""Ajouter""Vérification réussie""Valable uniquement avec
une pièce d'identité""Vérification en cours""Certificat COVID invalide""Ne répond pas aux critères de validité applicables en Suisse ou à ceux du mode de contrôle ({MODUS})""Le certificat COVID n'a pas de signature valide""Le certificat COVID a été révoqué""La vérification a échoué""Une erreur inattendue est survenue""Scannez le code QR placé sur le certificat COVID.""Comment ça fonctionne""Scanner à nouveau""Ajouter""Certificats""Effacer""Covid Cert""L'application""COVID Certificate""L'application vous permet de conserver en toute sécurité des certificats COVID sur votre téléphone et de les présenter facilement.""Continuer""Protection des données""Vos données restent
dans l'application""Les certificats sont uniquement stockés localement sur votre téléphone. Les données ne sont pas enregistrées dans un système central.""Présenter facilement vos certificats""Les données contenue dans le certificat COVID sont également dans le code QR.""Lorsque vous le présentez, le code QR sera lu avec une application qui vérifiera automatiquement l'exactitude et la validité des données.""Déclaration de confidentialité""Conditions d'utilisation""Accepter""fr""Comment ça fonctionne""Ajouter des
certificats COVID""Pour ajouter un certificat COVID dans l'application, vous avez besoin de l'original en papier ou en PDF.""Cliquez sur \"Ajouter\" dans l'application pour ajouter un nouveau certificat dans l'application.""Maintenez l'appareil photo du téléphone sur le code QR du certificat original pour le scanner.""Un aperçu du certificat COVID apparaît. Cliquer sur \"Ajouter\" pour sauvegarder en toute sécurité le certificat dans l'application.""Quand et où puis-je obtenir un certificat COVID ?""Questions fréquentes""Le certificat COVID en bref""Le certificat COVID atteste de manière infalsifiable une vaccination contre le COVID-19, une guérison ou un résultat de test négatif.""Quand et où puis-je obtenir un certificat COVID?""Par quel moyen puis-je présenter un certificat COVID?""Où mes données sont-elles stockées?""Comment prévient-on les abus et les falsifications?""Et si je perds mon certificat COVID?""Comment ajouter un certificat COVID à l'app?""Puis-je ajouter plusieurs certificats COVID?""Où voir si mon certificat COVID est valable ?""Comment mes données sont-elles protégées?""Que contient le code QR?""Et si je supprime le certificat COVID ou l'app?""Vous pouvez obtenir le certificat COVID si vous êtes vaccinés contre le COVID-19, si vous avez guéri de la maladie ou si vous présentez un résultat de test négatif. En général, le certificat est délivré sur demande, par les professionnels de la santé présents sur le site.""Vous pouvez présenter votre certificat COVID sur papier ou au moyen de l’app de stockage créée à cet effet. Vous êtes libre de choisir l’une ou l’autre solution.
Dans tous les cas, vous devez aussi présenter une pièce d’identité sur demande. Dans certains pays, une version imprimée du certificat est exigée, et le certificat électronique n’est pas accepté. Nous vous conseillons donc de vous munir de la version imprimée lorsque vous voyagez.""Les données de votre certificat ne sont pas stockées dans un système central de la Confédération, mais sont sauvegardées localement, sur votre appareil mobile ou sur le certificat papier.""Le code QR figurant sur le certificat COVID contient une signature électronique. Celle-ci est une caractéristique de sécurité importante qui rend le certificat infalsifiable. En outre, le certificat COVID n'est valable que sur présentation d'une pièce d'identité.""Votre certificat COVID n'est pas stocké dans un système central de la Confédération. Par conséquent, nous vous recommandons de le conserver sur papier ou au format PDF dans un endroit sûr. En cas de perte ou de remplacement, le paiement d’un émolument peut être exigé pour l’établissement d’un nouveau document par les institutions sanitaires (lieu de test ou de vaccination).""Pour ajouter un certificat COVID à l'app, vous avez besoin du certificat original qui vous a été délivré sur papier ou par voie électronique, au format PDF. Au moyen de l'app, vous pouvez scanner le code QR figurant sur ce document. Ensuite, le certificat COVID apparaît directement dans l'app.""Oui. Vous pouvez par exemple stocker dans l'app les certificats COVID de tous les membres de votre famille. À noter également dans ce cas qu'un certificat COVID n'est valable que si son détenteur présente une pièce d'identité.""En Suisse, l’obligation de présenter un certificat a été levée en février 2022. Les durées de validité suisses sont donc devenues uniquement formelles et n’ont pratiquement plus aucune pertinence dans notre pays. C’est pourquoi le champ « Validité en Suisse » n’est plus représenté dans l’application, qui indique par contre le nombre de jours écoulés depuis une vaccination ou un test.
L’application indique aussi le nombre de jours écoulés depuis une vaccination ou un test. Vous pouvez ainsi vérifier plus facilement si votre certificat correspond aux règles de validité de votre pays de destination (au cas où ce pays exige encore un certificat COVID). À l’étranger, les règles en vigueur varient d’un pays à l’autre.""Vos données personnelles ne sont pas stockées dans un système central, mais ne sont sauvegardées que localement, sur votre appareil mobile ou dans le code QR figurant sur le certificat papier.""Le code QR contient toutes les informations qui apparaissent en clair sur le certificat papier. En outre, il renferme une signature électronique qui permet de vérifier l'authenticité du certificat COVID. Par conséquent, le certificat COVID est infalsifiable.""Vous pouvez réenregistrer facilement votre certificat COVID sur votre appareil mobile. Il vous suffit de télécharger de nouveau l'app, puis de scanner le code QR figurant sur le certificat original, établi sur papier ou au format PDF.""Comment l'app
fonctionne-t-elle?""L'app vous permet de stocker des certificats COVID de manière simple et sûre sur votre appareil mobile et de les présenter au moyen de ce dernier.""Vous pouvez obtenir le certificat COVID si vous êtes entièrement vacciné contre le COVID-19, si vous avez guéri de la maladie ou si vous présentez un résultat de test négatif. En général, le certificat est délivré sur demande, par les professionnels de la santé présents sur le site.""Prénom""Mise à jour nécessaire""Téléchargez la nouvelle version de l'application.""Mettre à jour""Valable en Suisse à partir du :
{DATE}""Vaccination""Guérison""Test""Avantages""Conserver numériquement les certificats COVID""Les certificats COVID peuvent facilement être ajoutés dans l'application et conservés numériquement.""L'application vérifie la validité des certificats en Suisse. Vous avez donc la certitude qu'ils sont valides.""Avantages""Impressum""Questions fréquentes""Liste des certificats""Ajouter un certificat""Fermer""Allumer la lampe de poche""Éteindre la lampe de poche""Impressum""Une erreur inconnue est survenue.""Ne remplit pas les critères de validité de la Suisse.
La durée de validité du certificat a expiré.""Ne remplit pas les critères de validité de la Suisse.
Le certificat n'est pas encore valable.""Une erreur de réseau est survenue.""L'appareil est en mode avion.""Valable en Suisse à partir du :
{DATE}""Contient des données qui ne satisfont pas aux normes internationales.""Durée de validité dépassée pour la Suisse""Certificat révoqué""Signature non valable""Signature non valable""Certificat révoqué""Le certificat est déjà enregistré dans l'application.""Validité en
Suisse""jusqu'au""Certificat en cours de vérification""Vérification réussie""Information""Fermer""Dose""COVID-19""Maladie ou agent pathogène""Produit""Fabricant""Date de vaccination""Pays de vaccination""Délivré par""Guérison""Date du premier résultat positif""Valable à partir du""Valable jusqu'au""Pays de test""Test""Résultat""Non détecté (Négatif)""Détecté (Positif)""Type""Nom""Fabricant""Date du prélèvement de l'échantillon""Date du résultat""Comment ça fonctionne""Voulez-vous vraiment supprimer le certificat ?""Interrompre""Vaccination""http://itunes.apple.com/app/id1565917320""http://itunes.apple.com/app/id1565917510""UVCI""Certificat établi le
{DATE}""Type de vaccin""Centre de test""L'application doit accéder à l'appareil photo pour pouvoir scanner le code QR.""Contrôle de certificats COVID""L'app de contrôle permet de scanner le code QR figurant sur un certificat COVID et de vérifier l'authenticité et la validité de ce dernier.""Comment contrôler un certificat COVID?""Pour contrôler un certificat COVID, il vous suffit de scanner le code QR figurant sur le document papier ou dans l'app «COVID Certificate» au moyen de l'app de contrôle prévue à cet effet.""Sur quoi porte le contrôle au juste?""Le scan du code QR permet de répondre aux trois questions suivantes:
– Le certificat contient-il une signature électronique valable?
– Le certificat a-t-il été révoqué?
– Le certificat remplit-il les critères de validité fixés par la Suisse?
Si vous pouvez répondre oui à la 1re et à la 3e question et non à la 2e, la validité du certificat COVID est attestée.""Quelles pièces d'identité sont valables? Pourquoi faut-il vérifier les données personnelles?""Outre le passeport et la carte d'identité, les pièces d'identité réputées valables sont celles qui attestent l'identité de la personne concernée au moyen d'une photo (par ex. permis de conduire). Le certificat COVID est certes infalsifiable, mais le contrôle des données personnelles est le seul moyen de vérifier que le certificat a été établi au nom de la personne qui le présente.""Peut-on aussi contrôler des certificats étrangers?""Oui. L'app de contrôle permet de vérifier si les certificats COVID compatibles avec le certificat COVID numérique de l'UE remplissent les critères de validité fixés par la Suisse.""À quelles données ai-je accès lors du contrôle?""Lors du contrôle, vous n'avez accès qu'au nom et à la date de naissance du détenteur du certificat et voyez seulement si le certificat COVID est valable.""Quid du stockage des données lors du contrôle?""Aucune des données auxquelles vous avez accès lors du contrôle n'est stockée dans l'app ou dans un système central. Il est par conséquent impossible de savoir quel certificat COVID a été vérifié par qui, quand et où.""Réglages""Déclaration de confidentialité & condition d'utilisation""Le présent certificat n'est pas un document de voyage.
<br /><br />
Les preuves scientifiques relatives à la vaccination, aux tests et au rétablissement liés à la COVID-19 continuent d'évoluer, notamment en ce qui concerne de nouveau variants préoccupants du virus.
<br /><br />
Avant de voyager, veuillez-vous renseigner sur les restrictions et les règles de validité en vigueur à votre lieu de destination. La validité de votre certificat à l’étranger dépend des règles du pays de destination.""https://www.bit.admin.ch/bit/fr/home/documentation/covid-certificate-app.html""https://www.bit.admin.ch/bit/fr/home/documentation/covid-certificate-check-app.html""COVID Certificate Check""Comment puis-je obtenir un certificat COVID après avoir guéri?""En fonction de votre canton, le certificat COVID vous sera délivré soit directement par le lieu de test soit par le laboratoire qui a confirmé votre résultat de test positif. Si tel n’est pas le cas, vous pouvez demander votre certificat après coup, en ligne via la « Plateforme nationale des demandes pour le certificat COVID ». Votre demande y sera traitée par les autorités cantonales compétentes. Lien :""Passer à l’étape suivante""Ajouter le certificat""Vous disposez d’un certificat COVID sur papier ou au format PDF et souhaitez l’ajouter à l’application.""Créer un code transfert""Codes transfert""Vous pouvez utiliser votre code transfert lors d’un test ou d’une vaccination pour recevoir le certificat COVID directement dans votre application.""Créer un code""Comment ça fonctionne""Recevez les certificats COVID directement dans l'application""Les codes de transfert permettent de transmettre les certificats COVID rapidement et en toute sécurité. De cette façon, vous recevez votre certificat après un test ou une vaccination directement dans l’application.""Qui propose la transmission du certificat COVID par code de transfert ?""Les codes de transfert peuvent-ils aussi être utilisés pour la transmission de certificats de vaccination ?""Comment fonctionne la transmission du certificat par code de transfert ?""Puis-je utiliser plusieurs fois le même code de transfert ?""Si vous effectuez un test COVID (test PCR ou test rapide antigénique) ou recevez un vaccin contre le COVID-19, le code de transfert peut être utilisé pour transmettre rapidement le certificat COVID.
Renseignez-vous auprès de votre centre de test ou de vaccination, de votre pharmacie ou de votre médecin pour savoir si cette option est proposée.""Actuellement, la transmission du certificat par code de transfert est réservée aux tests COVID. Pour savoir comment obtenir un certificat COVID après une vaccination, cliquez ici :""Si le centre qui effectue le test ou administre le vaccin propose de transmettre le certificat par code de transfert, vous pouvez communiquer votre code au moment de l’inscription, du test ou avant de recevoir le vaccin.
Vous pouvez créer à tout moment un code de transfert dans l’application « COVID Certificate » : appuyez sur « Ajouter » sur l’écran d’accueil ou sur le symbole « Plus » en bas à droite, puis sur « Créer un code de transfert ». L’application vous montre le code à 9 caractères.""Non, un code de transfert ne peut être utilisé qu’une seule fois. Si vous souhaitez obtenir plusieurs certificats (p. ex. pour vos proches), veuillez créer un nouveau code pour chaque certificat.""Comment fonctionne le transfert ?""Comment mes données sont-elles sécurisées lors du transfert ?""Que faire si mon certificat n’arrive pas dans l’application ?""Que se passe-t-il en cas de test positif ?""Pour le transfert, votre certificat COVID est fourni sous forme cryptée. Le code de transfert garantit que seule votre application peut recevoir le certificat. Les données sont supprimées du serveur immédiatement après le transfert.""Dès que le certificat a été généré par le laboratoire ou le centre de test, il est disponible pour le transfert. Vérifiez que votre smartphone est connecté à Internet pour recevoir des certificats.
Si malgré tout vous ne recevez pas votre certificat, adressez-vous au lieu où vous avez effectué le test (centre, pharmacie, cabinet médical).""En cas de test rapide antigénique positif, vous ne recevrez pas de certificat COVID du laboratoire.
En cas de test PCR positif, vous recevrez un certificat COVID pour personnes guéries, valable à partir du 11e jour suivant le test.""Votre code transfert a été créé.""Codes transfert""Créé le {DATE}""Étapes suivantes""Remettez votre code à la personne prélevant l’échantillon à la pharmacie, au centre de test ou au cabinet médical.""Si vous souhaitez recevoir plusieurs certificats, p. ex. pour d’autres membres de votre famille, créez un nouveau code pour chaque certificat.""Fin""Transfert""Attendre le transfert""Valable encore un jour""Valable encore {DAYS} jours""Échec du transfert""Code expiré""Dernière mise à jour le
{DATE}""Ce code transfert ne permet plus de recevoir de certificat.""Format de certificat
non valide""non valide""Le format du certificat COVID n’est pas valide.""Mode hors ligne""Pour pouvoir afficher la validité actuelle, l’application requiert une connexion Internet régulière.""Vérification impossible en mode hors ligne""Vérification impossible pour le moment""Veuillez réessayer plus tard.""Vérification impossible en mode hors ligne""Une connexion Internet est requise pour actualiser les listes de vérification.""La vérification a échoué""Une erreur inattendue est survenue""La validité n’a pas pu être vérifiée""L’application vérifie régulièrement si un certificat COVID est disponible pour votre code de transfert.""Dès que le certificat COVID est disponible, il apparaît dans l’application. Si vous avez activé les notifications, vous recevrez un message de l’application.""Le code de transfert expire après {TRANSFER_CODE_VALIDITY} jours. Une fois ce délai passé, l’application attend tout autre transfert pendant 72 h. Ensuite, le code de transfert n’est plus valable.""Autoriser les messages""L’application peut vous informer de l’émission du certificat. Pour cela, autorisez votre application à vous envoyer des messages.""Suite""https://ofsp-coronavirus.ch/certificat/comment-obtenir-le-certificat-covid-et-comment-men-servir/""Informations supplémentaires""Créer un code""un jour""{DAYS} jours""Non révoqué""Signature valide""Ne remplit pas les critères de validité de la Suisse.""Le code transfert n’a pas pu être créé""Pas de connexion Internet""Une erreur inattendue est survenue.""Pas de mise à jour possible pour l’instant""Pour recevoir le transfert, l'application doit être en ligne.""Une erreur inattendue est survenue. Veuillez réessayer plus tard.""Veuillez réessayer plus tard.""Pour créer un code transfert, l’application doit être en ligne.""Mettre à jour""Voulez-vous vraiment supprimer le transfer ?""Transfert réussi""Le certificat COVID est arrivé""Quelle est la durée de validité du certificat COVID ?""En Suisse, l’obligation de présenter un certificat a été levée en février 2022. Les durées de validité suisses sont donc devenues uniquement formelles et n’ont pratiquement plus aucune pertinence dans notre pays. À l’étranger, les règles de validité du pays concerné s’appliquent. Vérifiez peu avant votre départ sur le site Internet des autorités de votre pays de transit ou de destination si des mesures impliquant l’utilisation d’un certificat y sont appliquées et si c’est le cas, quelles règles de validité y sont appliquées. Site Internet utile pour les voyages à l’étranger :""Re-open EU (europa.eu)""https://reopen.europa.eu/fr/""Puis-je également utiliser l’application hors ligne ?""Oui, vous pouvez utiliser l’application sans connexion Internet. Les certificats peuvent aussi être présentés, scannés et vérifiés en mode hors ligne.""Quels sont les critères de validité actuels de la Suisse ?""Vous trouverez des informations sur la durée de validité actuelle du certificat COVID à l’adresse suivante :""Informations supplémentaires""https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624""La vérification des certificats est-elle possible hors ligne ?""En principe, il est aussi possible de vérifier les certificats COVID sans connexion Internet. À cette fin, des listes de contrôle régulièrement mises à jour sont téléchargées à partir d’un serveur central. Elles sont enregistrées localement et ne doivent pas remonter à plus de 48 h.
Pour actualiser les listes de contrôle, l’application doit être ouverte et connectée à Internet. La mise à jour s’effectue immédiatement et automatiquement.""Scanner le code QR""Importer le PDF""Astuce: Activer les messages""Activer""Justificatif""Vaccination incomplète""Justificatif établi le
{DATE}""Informations supplémentaires""https://ofsp-coronavirus.ch/certificat/comment-obtenir-le-certificat-covid-et-comment-men-servir/""Certificat light""Exporter""Qu’est-ce qu’un certificat light ?""Certificat light""Utilisable uniquement en Suisse""Ne contient que le nom, le prénom, la date de naissance et une signature électronique""Valide pour {LIGHT_CERT_VALIDITY_IN_H} h au maximum""Le certificat COVID est converti en certificat light en ligne.""Vous pouvez désactiver le certificat light à tout moment pour repasser au certificat COVID normal.""Désactiver""Activer""Impossible d’activer le certificat light""Le certificat light ne peut être activé que si l’application est connectée.""Valide uniquement en Suisse
et avec un document d’identité""Exporter le certificat COVID""Un fichier PDF sera établi avec les données de votre certificat COVID ; vous pourrez l’imprimer ou le partager.""Le fichier PDF est établi en ligne.""Exporter""Impossible d’établir le fichier PDF""Le fichier PDF ne peut être établi que si l’application est connectée.""code QR""Pas de connexion Internet""Veuillez réessayer plus tard.""Une erreur inattendue est survenue.""Certificat light""Exporter""Un fichier PDF sera établi avec les données de votre certificat COVID ; vous pourrez l’imprimer ou le partager.""Le fichier PDF est établi en ligne.""Exporter""Pas de connexion Internet""Une erreur inattendue est survenue.""Une erreur inattendue est survenue. Veuillez réessayer plus tard.""Quand vous activez le certificat light, un nouveau code QR est créé à partir des données de votre certificat COVID. Ce nouveau code ne contient pas de données sur la santé.""Tant qu’il est valide, le certificat COVID normal est utilisable sans limitation en Suisse et dans l’UE/l’AELE. Par contre, le certificat light n’est utilisable qu’en Suisse. Pour des raisons de protection des données, le certificat light doit être réactivé après {LIGHT_CERT_VALIDITY_IN_H} heures. Il n’apporte aucun droit supplémentaire par rapport au certificat COVID normal.""n’est utilisable qu’en doit être aucun""réduit""étendu""Mise à jour""Certificat light""Cette mise à jour vous permet de générer une copie du certificat sans données sur la santé pour l’utiliser en Suisse. Les conditions d’utilisation et la déclaration sur la protection des données ont été actualisées et seront considérées comme acceptées si vous continuez à utiliser l’application.""Mise à jour""Certificat light""Cette mise à jour vous permet aussi de vérifier les copies de certificat sans données sur la santé. Les conditions d’utilisation et la déclaration sur la protection des données ont été actualisées et seront considérées comme acceptées si vous continuez à utiliser l’application.""Durée de validité du
certificat expirée""Light""Qu’est-ce que le certificat light ?""L’application « COVID Certificate » propose aux titulaires de certificats COVID la possibilité de générer une copie du certificat ne contenant que les données strictement nécessaires. Le certificat « light » confirme que le certificat présenté est valide, sans contenir lui-même des données sur la santé.
Cette alternative permettant de limiter les données du certificat COVID au strict minimum a été suggérée par le Préposé fédéral à la protection des données et à la transparence (PFPDT) ; en effet, les certificats COVID contiennent certaines données sur la santé (p. ex. le type de vaccin et la date de la vaccination) qui peuvent être lues par des tiers. Le certificat « light » empêche tout abus de ce genre.
Le certificat light, reconnu uniquement en Suisse, n’est disponible que sous forme électronique. Pour des raisons de protection des données, il n’est valide que pendant {LIGHT_CERT_VALIDITY_IN_H} heures et doit ensuite être réactivé. Si le certificat normal est à nouveau nécessaire avant la fin de ce délai, il suffit de désactiver le certificat light.""Qu’est-ce que le certificat light ?""L’application « COVID Certificate » propose aux titulaires de certificats COVID la possibilité de générer une copie du certificat ne contenant que les données strictement nécessaires. Ce certificat « light » indique uniquement si le certificat présenté est valide, sans fournir de données sur la santé.
L’alternative permettant de limiter les données du certificat COVID au strict minimum a été suggérée par le Préposé fédéral à la protection des données et à la transparence (PFPDT) ; en effet, des personnes tierces pourraient développer des applications leur donnant la possibilité de lire, lors de la vérification d’un certificat, les données sur la santé (p. ex. le type de vaccin et la date de la vaccination). Le certificat light empêche tout abus de ce genre.
Le certificat light, reconnu uniquement en Suisse, n’est disponible que sous forme électronique. Pour des raisons de protection des données, il n’est valide que pendant {LIGHT_CERT_VALIDITY_IN_H} heures et doit ensuite être réactivé. Si le certificat normal est à nouveau nécessaire avant la fin de ce délai, il suffit de désactiver le certificat light.""Comment reconvertir un certificat light en certificat COVID conforme aux normes UE/AELE ?""Le détenteur peut en tout temps désactiver le certificat light dans l’application «COVID Certificate». Le certificat COVID standard est alors à nouveau disponible.""Valable encore {TIMESPAN}""Code de transfert copié""Qu'est-ce qu'un code de transfert ?""Les codes de transfert permettent de transmettre les certificats COVID rapidement et en toute sécurité. De cette façon, vous recevez votre certificat après un test ou une vaccination directement dans l’application.""Mon certificat COVID n’est disponible qu’au format électronique dans l’application. Comment puis-je obtenir mon certificat en PDF ou sur papier ?""Dans l’application « COVID Certificate », vous trouvez la fonction « Exporter » dans la vue détaillée du certificat. Vous pouvez ainsi générer un PDF afin de le sauvegarder et de l’imprimer.""market://details?id=ch.admin.bag.covidcertificate.wallet""market://details?id=ch.admin.bag.covidcertificate.verifier""Limite des 24 heures atteinte""Le certificat light a été activé trop souvent au cours des dernières 24 heures.""L'importation a échoué.""Le fichier ne contient pas de code QR valide ou le code QR n'a pas pu être lu.""Erreur inattendue""Veuillez contacter le service d’assistance""+41 58 466 07 99""Erreur de déchiffrement""Un espace de stockage de l'application n'a pas pu être déchiffré. Il doit être effacé et recréé pour que vous puissiez continuer à utiliser l'application. Des données seront perdues.""Réglages""Langue""Date format used: dd.mm.yyyy""Fabricant et Nom""Heure incorrecte""L’heure doit être réglée correctement pour que les codes de transfert fonctionnent. Adaptez votre heure et essayez de nouveau.""UVCI copié""Argovie""https://www.ag.ch/coronavirus-impfung""Appenzell Rhodes-Extérieures""https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/""Appenzell Rhodes-Intérieures""https://www.ai.ch/coronavirus-impfung""Bâle-Campagne""https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/amt-fur-gesundheit/medizinische-dienste/kantonsarztlicher-dienst/aktuelles/corona-impfung/franzoesisch-francais""Bâle-Ville""http://www.coronaimpfzentrumbasel.ch""Berne""https://www.gsi.be.ch/fr/start/themen/coronavirus/impfen.html""Fribourg""https://www.fr.ch/sante/covid-19/covid-19-vaccination""Genève""https://www.ge.ch/se-faire-vacciner-contre-covid-19""Glaris""https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung""Grisons""https://www.gr.ch/DE/institutionen/verwaltung/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx""Jura""https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html""Lucerne""http://www.lu.ch/covid_impfung""Neuchâtel""https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx""Nidwald""https://www.nw.ch/gesundheitsamtdienste/6044#Impfung""Obwald""https://www.ow.ch/dienstleistungen/7129""Saint-Gall""https://www.sg.ch/coronavirus/impfen""Schaffhouse""https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html""Schwyz""https://www.sz.ch/corona-impfen""Soleure""https://so.ch/coronaimpfung""Thurgovie""https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590""Tessin""http://www.ti.ch/vaccinazione""Uri""https://www.ur.ch/themen/3673""Valais""https://www.vs.ch/web/coronavirus/#ancre_vaccination""Vaud""https://vd.ch/coronavirus-vaccins""Zoug""https://www.corona-impfung-zug.ch/""Zurich""http://www.zh.ch/coronaimpfung""Faites-vous vacciner sans plus attendre !""La vaccination contre le COVID-19 vous permet de voyager sereinement dans la plupart des pays.""Faites-vous vacciner sans plus attendre !""La vaccination vous protège contre le COVID-19 et, le cas échéant, contre une évolution grave de la maladie.""Faites-vous vacciner sans plus attendre !""La vaccination contre le COVID-19 vous permet de vous immuniser en toute sécurité.""Faites-vous vacciner sans plus attendre !""Grâce à la vaccination contre le COVID-19, vous pouvez contribuer à réduire la charge de morbidité.""Faites-vous vacciner sans plus attendre !""Grâce à la vaccination contre le COVID-19, vous contribuez à la lutte contre les conséquences de la pandémie.""Faites-vous vacciner sans plus attendre !""La vaccination contre le COVID-19 vous permet d’éviter les effets à long terme de la maladie.""Faites-vous vacciner sans plus attendre !""Grâce à la vaccination contre le COVID-19, vous pouvez contribuer à décharger le système de santé.""Prendre un rendez-vous de vaccination près de chez vous""La vaccination pourrait, par exemple, être proposée dans les lieux suivants situés à proximité de chez vous :
- dans des centres de vaccination désignés
- dans les hôpitaux
- chez votre médecin de famille
- dans les pharmacies
Il est aussi possible de se faire vacciner sans rendez-vous dans de nombreux endroits.""La vaccination contre le COVID-19 est recommandée pour les personnes dès 5 ans.""Rendez-vous de vaccination""Prendre un rendez-vous de vaccination""Sélectionnez votre canton""Plus d’informations sur la vaccination contre le COVID-19""Informations sur la vaccination""https://ofsp-coronavirus.ch/vaccination/""Scanner matériel externe détecté""Réinitialiser""Les certificats n'ont pas pu être chargés
Code: {ERROR_CODE}""Guérison (Anticorps)""Contrôle impossible""La date, l’heure ou le fuseau horaire ne sont pas correctement paramétrés sur l’appareil.""Voulez-vous contrôler des certificats?""Pour un contrôle rapide respectant la protection des données, utilisez l’application «COVID Certificate Check».""Vers Check-App""Compris""«COVID Certificate Check»-App.""N’est pas valable hors de Suisse""Résultat""Suffisant""Début de la validité""Service responsable de l'établissement""Certificat de dérogation""Nouvelle version disponible""Téléchargez la nouvelle version de l'application.""Mettre à jour""COVID-19 Vac-check fournit des renseignements sur la première vaccination ainsi que sur la vaccination de rappel et vous guide vers le service compétent de votre canton.""Vers COVID-19 Vac-check""https://covid19-vac-check.ch/""Prendre un rendez-vous maintenant""Vidéo explicative""https://youtu.be/O-9YhJDI3ZI""Choisir""Vérifier ({MODE})""Le mode de contrôle choisi n’existe plus.""Info""Accès aux établissements et aux manifestations réservé aux personnes vaccinées ou guéries.""Accès refusé.""3G""2G""Pour les entreprises et les manifestations où les contrôles se fondent sur la règle des «3G».""Ce mode de contrôle permet de vérifier les certificats COVID des personnes vaccinées, guéries ou testées négatives.""Il peut être également utilisé pour vérifier un «certificat light».""Pour les entreprises et les manifestations où les contrôles se fondent sur la règle des «2G».""Ce mode de contrôle permet de vérifier les certificats COVID des personnes vaccinées ou guéries.""La vérification d’un «certificat light» n'est pas possible dans ce mode.""Mode de contrôle""Accès aux établissements et aux manifestations réservé aux personnes vaccinées, guéries ou testées négatives.""Accès refusé.""Le certificat COVID à vérifier est un «certificat light». Il ne peut pas être vérifié sous le mode de contrôle «{MODUS}».""La vérification ne peut avoir lieu que si la conversion du certificat en un «certificat light» est annulée.""Choisissez le mode de contrôle correspondant aux certificats COVID à vérifier.""Le mode de contrôle peut être changé en tout temps.""2G+""Pour les entreprises et les manifestations qui appliquent la règle des 2G+.""En plus d'un certificat COVID de vaccination ou de guérison, il faut présenter un certificat de test valable, qui doit être vérifié séparément.""Exceptions: les personnes dont la vaccination, la vaccination de rappel ou la guérison datent de moins de 120 jours""Ce mode ne permet pas de vérifier les «certificats light».""Certificat COVID valable selon la règle des 2G""Certificat COVID de test valable""Pour répondre aux critères de validité du mode 2G+, doit être accompagné d'un certificat de test valable.""Pour répondre aux critères de validité du mode 2G+, doit être accompagné d'un certificat de vaccination ou de guérison.""La vérification de ce type de certificat nécessite la version la plus récente de l'application «COVID Certificate Check». Actualisez l'application, puis procédez à la vérification.""Ouvrir l'App Store""Certificat de test""Destiné aux domaines qui nécessitent un certificat de test valable.""Ce mode permet de vérifier les certificats des personnes qui disposent d'un résultat négatif à un test PCR ou à un test rapide antigénique.""Ce mode ne permet pas de vérifier les «certificats light».""Le bouton «rafraîchir» a été supprimé.""Si votre certificat COVID a expiré ou s'il n'est techniquement pas valable, cette information apparaît automatiquement sur le certificat.""La vérification des certificats COVID doit s'effectuer au moyen de l'application «COVID Certificate Check».""Pour les personnes chargées du contrôle""Pour en savoir plus""https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#-1006172949""Accès aux établissements et aux manifestations réservé aux personnes dont la vaccination complète, la vaccination de rappel ou la guérison (confirmée par un test PCR) ne date pas de plus de 120 jours. Vous n'avez pas besoin de présenter un certificat de test supplémentaire.""Accès aux établissements et aux manifestations réservé aux personnes vaccinées ou guéries qui présentent, en plus d'un certificat COVID, un résultat de test négatif.""Information""Attestation médicale délivrée en""Le présent certificat n'est pas un document de voyage.
<br /><br />
Ce certificat n'a qu'une durée de validité limitée. L'application «COVID Certificate» vous permet en tout temps de vérifier la durée de validité actuellement déterminante en Suisse.""Exception""Guérison (Test Rapide Antigénique)""Date du premier résultat positif""Le présent certificat n'est pas un document de voyage.
<br /><br />
Ce certificat n'a qu'une durée de validité limitée. L'application «COVID Certificate» vous permet en tout temps de vérifier la durée de validité actuellement déterminante en Suisse.""Expiration imminente""Info""Ce certificat expirera bientôt.""En savoir plus?""Info""Ce certificat COVID expirera dans quelques jours. Nous attirons votre attention sur la date de fin de validité affichée.""Et maintenant ?""https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/que-dois-je-faire-si-mon-certificat-covid-est-sur-le-point-dexpirer-en-suisse""Durée de validité réduite""Durée de validité réduite""Ce certificat expirera bientôt.""En savoir plus""Info""À partir du 31 janvier 2022, la durée de validité en Suisse des certificats COVID pour les personnes vaccinées ou guéries est réduite de 365 à 270 jours. Ce certificat est directement concerné:""Ce certificat COVID ne peut plus être utilisé à partir du 31 janvier 2022.""En savoir plus""https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-la-duree-de-validite-des-certificats-de-vaccination-ou-de-guerison-t-elle""Sauvegardez vos certificats!""Si vous supprimez l’application, changez de smartphone ou le perdez, vos certificats COVID seront également perdus.
Conservez donc vos certificats en dehors de l’application en les exportant au format PDF.""Plus d’informations""https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/mon-certificat-covid-nest-disponible-quau-format-electronique-dans-lapplication""https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/mon-certificat-covid-nest-disponible-quau-format-electronique-dans-lapplication""Première""Deuxième""Deuxième""Validité à l'étranger""Validité pour les voyages à l’étranger""Renseignez-vous avant de voyager pour savoir si votre certificat COVID sera valable à votre arrivée dans le pays de destination.""Vérifier pour :""Pays :""Sélectionner""Date d’arrivée :""L’heure indiquée est déjà passée.""Informations""Vous trouverez de plus amples informations sur le site""Veuillez sélectionner un pays et la date d’arrivée.""Sélectionner le pays""Valide pour entrer dans le pays suivant :""Non valide pour entrer dans le pays suivant :""{COUNTRY}, {DATE}""Erreur lors du chargement des pays disponible""Pour vérifier la validité, votre smartphone doit être connecté à Internet.""Les dispositions d’entrée peuvent changer. Vérifiez donc la validité de votre certificat avant votre départ et renseignez-vous également en ligne sur les dispositions d’entrée en vigueur dans votre pays de destination.""Les informations ci-dessus ne concernent que les dispositions d’entrée du pays de destination. Dans le pays, d’autres règles peuvent s’appliquer aux éventuels domaines soumis à l’obligation de présenter un certificat.""La Confédération décline toute responsabilité en ce qui concerne l’actualité et l’exhaustivité des informations fournies.""Vous n’avez pas trouvé votre pays de destination ? Il se peut que certains pays ne reconnaissent pas le certificat COVID ou qu’aucune disposition d’entrée ne soit disponible.""reopen.europa.eu""https://reopen.europa.eu/""Nouveau : version compatible avec l’UE""Pour ce certificat COVID, il est possible de demander une version compatible avec l’UE.""En savoir plus""Demander un certificat COVID (compatible avec l’UE)""Nouveau : les certificats COVID pour personnes guéries établis sur la base de tests rapides antigéniques sont aussi acceptés dans l’UE.
Vous avez la possibilité de demander une version de ce certificat compatible avec l’UE sur la plateforme nationale de demandes.""Vers le formulaire en ligne de la plateforme nationale de demandes""J’accepte que les données de ce certificat COVID soient transférées dans le formulaire de la plateforme nationale de demandes (site de la Confédération).""Vers le formulaire""Site de la plateforme nationale de demandes (sans transfert de données)""Si votre demande est acceptée, le nouveau certificat COVID compatible avec l’UE vous sera envoyé par la poste. Vous pourrez ensuite le transférer dans l’application. Il n’est pas possible de recevoir le document directement dans l’application.""Le transfert des données du certificat dans le formulaire en ligne permet de faciliter le traitement de votre demande.""https://covidcertificate-form.admin.ch/immunityrequest""Informations complémentaires""Qu’est-ce que cela signifie ?""Les codes QR des certificats COVID ont une validité technique limitée""Pour qu’il soit toujours possible de contrôler ce certificat (par exemple en voyage), le code QR doit être renouvelé.""Le renouvellement nécessaire peut être effectué ici directement dans l’application (connexion Internet requise). Les données du certificat actuel sont transmises sous forme cryptée depuis l’application vers le système de la Confédération établissant les certificats COVID. Ensuite, un nouveau code QR est ainsi établi, qui est renvoyé à l’application de stockage. Une fois établies et transmises. Enfin, les données sont effacées du système""Cette FAQ vous explique pourquoi vous devriez renouveler le code QR même si votre certificat de vaccination ou de guérison est sur le point d’expirer ou a déjà expiré selon les règles de validité suisses.""Qu’est-ce que cela signifie ?""Les codes QR des certificats COVID ont une validité technique limitée.""Pour qu’il soit toujours possible de contrôler ce certificat (par exemple en voyage), le code QR doit être renouvelé.""Le renouvellement nécessaire peut être effectué ici directement dans l’application (connexion Internet requise). Les données du certificat actuel sont transmises sous forme cryptée depuis l’application vers le système de la Confédération établissant les certificats COVID. Ensuite, un nouveau code QR est ainsi établi, qui est renvoyé à l’application de stockage. Une fois établies et transmises. Enfin, les données sont effacées du système""Cette FAQ vous explique pourquoi vous devriez renouveler le code QR même si votre certificat de vaccination ou de guérison est sur le point d’expirer ou a déjà expiré selon les règles de validité suisses.""À noter:""Remplacez également les certificats précédemment imprimés ou enregistrés par cette nouvelle version""La durée pendant laquelle une vaccination est reconnue dans un pays n’est pas définie dans le certificat, mais calculée au moment du contrôle selon les règles du pays examinateur. Le renouvellement du code QR garantit uniquement que celui-ci puisse être utilisé d’un point de vue technique. ""QR code expiration date (technical)
{DATE}""Renouveler le code QR!""Pour pouvoir continuer à utiliser ce certificat, le code QR doit être renouvelé.""En savoir plus""Renouveler le code QR""Date d’expiration du code QR""La date d’expiration technique de ce code QR est (bientôt) atteinte.""Le code QR est en cours de renouvellement""Le code QR a été renouvelé avec succès.""Pas de connexion Internet""Pour pouvoir renouveler le code QR, l’application doit être connectée à Internet.""Une erreur inattendue est survenue""Veuillez réessayer plus tard.""Renouvellement réussi""Remplacez également les versions imprimées ou enregistrées de ce certificat par cette nouvelle version.""En savoir plus""La date d’expiration technique de ce code QR est atteinte.""Limite des 24 heures atteinte""Le code QR a été renouvelé trop souvent. Le renouvellement est temporairement bloqué.""Vers la FAQ""https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-dois-je-renouveler-le-code-qr-de-mon-certificat-covid-alors-que-selon-les""Mise à jour""Les conditions d’utilisation et la politique de confidentialité de l’application ont été ponctuellement mises à jour et adaptées aux bases légales.""Date de vaccination""Test négatif ""il y a""1 heure""{HOURS} heures""1 jour""{DAYS} jours""Nouveautés""Désormais, le certificat COVID n’affichera plus l’encadré «Validité en Suisse». Celui-ci sera remplacé par la date de la vaccination ou du test. Pourquoi?""Certificats COVID en Suisse""L’obligation de présenter un certificat en Suisse a été levée en février 2022.""Depuis lors, les durées de validité pour la Suisse sont purement formelles et n’ont plus de pertinence pratique dans le pays.""La durée de validité pour la Suisse n’a pas non plus de pertinence à l’étranger.""Certificats COVID à l’étranger""À l’étranger, les règles en vigueur dépendent de chaque pays.""Désormais, l’application indique le nombre de jours écoulés depuis une vaccination ou un test.""Vous pourrez ainsi déterminer plus facilement si votre certificat est conforme aux règles en vigueur dans votre pays de destination (si celui-ci exige encore un certificat COVID).""Situation actuelle en Europe et dans le monde""Dans l’intervalle, la plupart des pays d’Europe ont levé l’obligation de présenter un certificat pour entrer sur leur territoire.""La fonction «Validité à l’étranger» a donc également été supprimée.""Pour savoir quels pays exigent encore un certificat, vous pouvez consulter les sites suivants:""reopen.europa.eu""https://reopen.europa.eu""iatatravelcentre.com""https://www.iatatravelcentre.com""il y a plus de""Test positif""Levée de l’obligation de présenter un certificat.""Levée de l’obligation de présenter un certificat.""L’obligation de présenter un certificat en Suisse a été levée en février 2022.""Depuis lors, les durées de validité pour la Suisse sont purement formelles et n’ont plus de pertinence pratique dans le pays.""Cette application de vérification suisse contrôle les certificats COVID en fonction des règles de validité suisses. Le résultat du contrôle n’est pas déterminant pour utiliser l’étranger.""Lorsqu’un pays exige encore un certificat COVID, les règles du pays en question s’appliquent.""Plateforme nationale de demandes pour le certificat COVID""https://covidcertificate-form.admin.ch/immunityrequest""Je pars à l’étranger et j’ai besoin d’un certificat COVID pour entrer dans le pays de destination. À quoi dois-je faire attention ?""À l’étranger, les règles de validité du pays concerné s’appliquent, aussi bien à l’entrée qu’à l’intérieur du territoire. L’utilisation du certificat à l’intérieur du pays de destination peut être soumise à d’autres règles que celles fixées pour l’entrée. Ces règles peuvent changer à très court terme. Vérifiez donc peu avant votre départ sur le site Internet des autorités de votre pays de transit ou de destination si des règles en rapport avec le COVID-19 sont toujours appliquées, et si oui, lesquelles. ""Schéma vaccinal incomplet selon les normes internationales."
================================================
FILE: common/src/main/res/values-it/strings.xml
================================================
"Covid Check""Verificare""Certificato COVID""Check""Scansionare il certificato esibito""I certificati vengono verificati automaticamente""Verifica""Funziona così""Errore di rete""Controllare la connessione Internet.""Riprovare""Nessun accesso alla fotocamera""L'app necessita dell'accesso alla fotocamera per scansionare il codice QR.""Cambiare impostazioni""Errore""Codice non valido""OK""L'app necessita dell'accesso alla fotocamera per scansionare il codice QR.""Consentire l'accesso alla fotocamera""Inquadrare il codice QR
per verificare""Certificato COVID""Cognome""Data di nascita""Aggiungere""Certificato COVID""Inquadrare il codice QR apposto sul certificato COVID per aggiungerlo all'app.""Aggiungere""Verifica riuscita""Valido solo con un documento
di legittimazione""Verifica del certificato in corso""Certificato non valido""Non conforme ai criteri di validità applicati in Svizzera o della modalità di verifica ({MODUS})""Il certificato COVID non dispone di una firma valida""Il certificato COVID è stato revocato""Verifica non riuscita""Si è verificato un errore imprevisto.""Inquadrare il codice QR apposto sul certificato COVID.""Funziona così""Scansionare di nuovo""Aggiungi""Certificati""Elimina""Covid Cert""L'app""COVID Certificate""Con l'app può conservare in sicurezza i certificati COVID sullo smartphone e mostrarli facilmente.""Avanti""Protezione dei dati""I dati rimangono
nell'app""I certificati sono salvati solo localmente sullo smartphone. I dati non sono salvati in un sistema centralizzato.""Esibire facilmente i certificati""I dati visualizzati sul certificato COVID sono contenuti anche nel codice QR.""Alla presentazione, il codice QR è scansionato con un'app di verifica. L'autenticità e la validità dei dati ivi contenuti sono verificate automaticamente.""Dichiarazione sulla protezione dei dati""Condizioni d'uso""Accetta""it""Funziona così""Aggiungere
certificati Covid""Per aggiungere un certificato COVID a un'app è necessario il certificato originale cartaceo o in formato PDF.""Prema su «aggiungi» per aggiungere un nuovo certificato allʼapp.""Tenga la fotocamera dello smartphone sopra il codice QR apposto sul certificato originale per scansionarlo.""Apparirà un'anteprima del certificato COVID. Prema su «aggiungi» per salvare il certificato nellʼapp.""Quando e dove posso ricevere un certificato COVID?""Domande frequenti""Cos'è il certificato COVID?""Il certificato COVID offre la possibilità di provare in modo non falsificabile l'avvenuta vaccinazione, la guarigione o un risultato negativo al test.""Quando e dove posso ottenere un certificato COVID?""Come posso mostrare il certificato COVID?""Dove vengono salvati i miei dati?""Come vengono impediti l'uso improprio e le falsificazioni?""Cosa succede se perdo il mio certificato COVID su carta?""Come posso inserire un certificato COVID sulla app?""È possibile aggiungere più certificati COVID?""Dove posso verificare se il mio certificato COVID è valido?""Come sono protetti i miei dati?""Quali dati contiene il codice QR?""Cosa devo fare se elimino il file contenente il certificato COVID o l'app?""Può ricevere un certificato COVID in seguito alla vaccinazione anti-COVID-19, all'avvenuta guarigione o a un risultato negativo al test. Normalmente, il certificato è rilasciato su richiesta dal personale medico specializzato presso le strutture sanitarie.""Può mostrare il Suo certificato COVID in formato cartaceo oppure salvarlo e presentarlo utilizzando l’app «COVID Certificate».
In entrambi i casi, dovrà mostrare anche un documento di legittimazione.
In alcuni Paesi si richiede la versione cartacea del certificato e non si accetta quello elettronico. Porti quindi sempre con sé anche la versione cartacea quando viaggia.""I dati del Suo certificato non vengono salvati in un sistema centrale della Confederazione, ma si trovano solo localmente sul Suo dispositivo mobile, rispettivamente sul certificato COVID in formato cartaceo.""Il codice QR sul certificato COVID contiene una firma elettronica. Questa firma è un elemento di sicurezza importante e garantisce che il certificato non possa essere falsificato. Inoltre, il certificato COVID è valido solo con un documento di legittimazione.""Il Suo certificato COVID non è salvato su un sistema centrale della Confederazione Conservi quindi con cura il certificato COVID su carta e/o in formato PDF. In caso di smarrimento e sostituzione, per il nuovo rilascio da parte delle strutture sanitarie (p. es. la struttura in cui è stato effettuato il test o è stata somministrata la vaccinazione) potrà essere riscosso un emolumento.""Per inserire sull'app un certificato COVID serve il certificato originale rilasciatole su carta o in formato PDF. Utilizzando l'app COVID Certificate può aggiungere il certificato inquadrando il codice QR raffigurato sul certificato. In questo modo, il certificato COVID appare direttamente sull'app.""Sì, è possibile. Ad esempio, può salvare nella Sua app i certificati COVID dei suoi familiari. Anche in questo caso, il certificato COVID è valido solo con un documento di legittimazione del titolare.""In Svizzera l’obbligo di certificato è stato revocato nel febbraio 2022. Da allora, la durata di validità svizzera esiste solo formalmente e non ha più alcun valore pratico nel nostro Paese. Pertanto il campo «Validità in Svizzera» non è più visualizzato nell’app. Al suo posto si trova la data della vaccinazione o del test.
Viene anche visualizzato quanti giorni sono trascorsi da una vaccinazione o da un test. In tal modo può determinare più facilmente se il Suo certificato è conforme alle regole di validità del Paese di destinazione (qualora il Paese richiedesse ancora un certificato COVID). All’estero si applicano sempre le regole di validità del rispettivo Paese.""I Suoi dati personali non sono salvati in un sistema centrale ma unicamente sul Suo dispositivo mobile oppure nel codice QR indicato sul certificato COVID in formato cartaceo.""Il codice QR contiene tutte le informazioni che trova nel testo del Suo certificato COVID in formato cartaceo. Nel codice QR si trova anche una firma elettronica che consente di verificare la validità del certificato COVID. La firma elettronica impedisce la falsificazione del certificato COVID.""Può semplicemente risalvare il certificato COVID sul Suo dispositivo mobile. Per farlo, scarichi nuovamente l'app e poi scansioni il codice QR che trova sul Suo certificato COVID in formato cartaceo o PDF.""Come funziona
l'app?""Con l'app COVID Certificate può salvare e mostrare i certificati COVID in modo semplice e sicuro sul Suo dispositivo mobile.""Può ricevere un certificato COVID in seguito alla completa vaccinazione COVID-19, all'avvenuta guarigione o a un risultato negativo al test. Il certificato è rilasciato su richiesta dal personale medico specializzato presso le strutture sanitarie.""Nome""Aggiornamento necessario""Caricare la nuova versione dellʼapp.""Aggiorna""Valido in Svizzera dal:
{DATE}""Vaccinazione""Guarigione""Test""Vantaggi""Conservare i certificati COVID in formato digitalizzato""I certificati COVID possono essere aggiunti facilmente all'app e conservati in formato digitalizzato.""Lʼapp verifica la validità dei certificati in Svizzera. In questo puoi assicurarti che i tuoi certificati siano validi.""Vantaggi""Impressum""Domande frequenti""Elenco dei certificati""Aggiungi certificato""Chiudi""Attiva la torcia""Disattiva la torcia""Impressum""Si è verificato un errore sconosciuto.""Non conforme ai criteri di validità svizzeri.
La validità del certificato è scaduta.""Non conforme ai criteri di validità svizzeri.
Il certificato non è ancora valido.""Si è verificato un errore di rete.""Il dispositivo è in modalità aereo""Valido in Svizzera dal:
{DATE}""Contiene dati non conformi agli standard internazionali.""La durata di validità in Svizzera è stata superata ""Il certificato è stato
revocato""Certificato con
firma non valida""firma non valida""revocato""Questo certificato è già salvato nell'app""Validità in
Svizzera""fino al""Verifica del certificato in corso""Verifica effettuata con successo""Informazione""Chiudi""Dose""COVID-19""Malattia o agente patogeno""Prodotto""Fabbricante""Data di vaccinazione""Paese della vaccinazione""Emittente""Guarigione""Data del primo risultato positivo""Valido da""Valido fino a""Paese del test""Test""Risultato""Non rilevato (Negativo)""Rilevato (Positivo)""Tipo""Nome""Fabbricante""Data del prelievo del campione""Data del risultato""Funziona così""Eliminare il certificato?""Annulla""Vaccinazione""http://itunes.apple.com/app/id1565917320""http://itunes.apple.com/app/id1565917510""UVCI""Certificato emesso il
{DATE}""Tipo di vaccino""Centro di test""Per poter inquadrare il codice QR l'app deve accedere alla fotocamera.""Come avviene la verifica dei certificati COVID?""Con l'app COVID Certificate Check è possibile scansionare i relativi codici QR e verificare l'autenticità e la validità dei certificati COVID.""Come posso verificare i certificati COVID?""Per verificare un certificato COVID tramite l'app COVID Certificate Check, può scansionare il codice QR che trova sulla copia cartacea del certificato oppure sull’app che le viene mostrata.""Cosa viene verificato esattamente?""Scansionando il codice QR vengono verificati i seguenti tre aspetti.
– Il certificato contiene una firma elettronica valida?
– Il certificato è ancora valido?
– Il certificato rispetta i criteri di validità previsti dalla normativa svizzera?
Se tutti i tre aspetti sono valutati positivamente, il certificato COVID è considerato valido.
""Quali documenti di legittimazione sono accettati o validi? Perché devono essere verificati i dati personali?""Oltre al passaporto o alla carta d'identità sono accettati altri documenti che provano l'identità della persona in questione tramite una foto (ad es. licenza di condurre). Il certificato COVID non è falsificabile, tuttavia solo verificando i dati personali si garantisce che il certificato sia stato effettivamente rilasciato alla persona che lo sta mostrando.""Possono essere verificati anche certificati esteri?""Sì, con l'app COVID Certificate Check è possibile verificare il rispetto dei criteri di validità previsti dalla normativa svizzera dei certificati COVID compatibili con il certificato COVID digitale UE.""Quali dati posso visualizzare durante il processo di verifica?""Durante il processo di verifica visualizzerà solo nome e cognome nonché la data di nascita del titolare del certificato e l'indicazione della validità del certificato.""Durante il processo di verifica vengono salvati dati nell'app COVID Certificate Check o in un sistema centrale?""No, durante il processo di verifica non vengono salvati dati nell'app COVID Certificate Check né in un sistema centrale. In questo modo, non è possibile risalire a quali certificati sono stati verificati, da chi, quando e dove.""Impostazioni""Informativa sulla privacy e condizioni d'uso""Il presente certificato non costituisce un documento di viaggio.
<br /><br />
Si acquisiscono sempre più conoscenze scientifiche sulla vaccinazione COVID-19, sulla guarigione dalla COVID-19 e sui test COVID-19, così come sulle nuove varianti problematiche del virus.
<br /><br />
Prima di un viaggio, informatevi sulle restrizioni e sulle regole di validità vigenti nella località di destinazione. All’estero la validità del certificato è calcolata secondo le regole del Paese di destinazione.""https://www.bit.admin.ch/bit/it/home/documentazione/covid-certificate-app.html""https://www.bit.admin.ch/bit/it/home/documentazione/covid-certificate-check-app.html""COVID Certificate Check""Come posso ottenere un certificato COVID dopo essere guarito?""A seconda del Cantone, il certificato COVID viene rilasciato in parte direttamente dalla struttura che ha effettuato il test o dal laboratorio in cui è stato accertato il risultato positivo al test. Qualora così non fosse, può richiedere a posteriori online un certificato COVID tramite il sito web dell’«organo nazionale per la richiesta di certificati COVID». La richiesta sarà evasa in tale sede dall’autorità cantonale competente. Il sito web dell’«organo nazionale per la richiesta di certificati COVID» si trova qui:""Vai al passaggio successivo""Aggiungi certificato""Possiedi un certificato COVID in formato cartaceo o in PDF e desideri aggiungerlo nell'app.""Crea codice di trasferimento""Codici di trasferimento""Puoi fornire i codici di trasferimento in occasione di un test COVID o una vaccinazione anti-COVID-19. Il tuo certificato COVID sarà poi trasmesso direttamente all'app.""Crea codice""Ecco come funziona""Ricevere i certificati COVID direttamente nell’app""Con i codici di trasferimento i certificati COVID possono essere trasmessi in modo rapido e sicuro. Tramite questo canale puoi ricevere il certificato COVID direttamente nell’app dopo un test COVID o una vaccinazione anti-COVID-19.""Chi offre la trasmissione mediante codice di trasferimento?""I codici di trasferimento possono essere impiegati anche per trasmettere i certificati di vaccinazione?""Come funziona la trasmissione mediante codice di trasferimento?""Posso utilizzare lo stesso codice di trasferimento più volte?""Quando fai un test COVID (test PCR o test antigenico rapido) o ricevi una vaccinazione anti-COVID-19, è possibile impiegare il codice di trasferimento per la trasmissione rapida dei certificati COVID.
Chiedi al centro di test, al centro di vaccinazione, alla farmacia o al medico se offrono la trasmissione mediante codice di trasferimento.
""Attualmente la trasmissione mediante codice di trasferimento funziona solo per i test COVID. Qui trovi maggiori informazioni su come ottenere un certificato COVID dopo una vaccinazione:""Se il servizio che effettua il test COVID o somministra la vaccinazione anti-COVID-19 offre la trasmissione mediante codice di trasferimento, puoi indicare il tuo già al momento della prenotazione del prelievo per il test o prima di ricevere la vaccinazione.
Puoi creare un codice di trasferimento in qualsiasi momento nell’app «COVID Certificate» toccando il pulsante «Aggiungi» nella schermata iniziale o il simbolo «Più» in basso a destra. Poi tocca «Crea codice di trasferimento». L’app visualizza il codice a 9 cifre.""No, un codice di trasferimento può essere utilizzato una volta sola. Se desideri ricevere più di un certificato, per esempio i certificati dei tuoi familiari, crea un nuovo codice per ciascun certificato.""Il trasferimento funziona così""Come sono protetti i miei dati durante il trasferimento?""Cosa posso fare se il certificato non arriva?""Cosa accade in caso di risultato positivo del test?""Il tuo certificato COVID è messo a disposizione per il trasferimento in forma criptata. Il codice di trasferimento assicura che soltanto la tua app sia in grado di riceverlo. I dati sono eliminati dal server immediatamente dopo il trasferimento.""Non appena il certificato è stato generato dal laboratorio o dal centro di test, è disponibile per il trasferimento. Accertati che il tuo smartphone sia connesso a Internet per poter ricevere i certificati.
Se comunque non dovessi ricevere il tuo certificato COVID, rivolgiti al servizio che ha effettuato il test (centro di test, farmacia, medico).""In caso di test antigenico positivo, non ricevi alcun certificato di test dal laboratorio.
In caso di test PCR positivo, ricevi un certificato COVID per persone guarite, valido a partire dall’undicesimo giorno dopo l’esecuzione del test.""Il tuo codice di trasferimento è stato creato""Codice di trasferimento""Creato il {DATE}""Passaggi successivi""Al momento dell'esecuzione del test comunica il codice alla farmacia, al centro di test o al medico.""Se desideri ricevere più di un certificato, per esempio i certificati dei tuoi familiari, crea un nuovo codice per ciascun certificato.""Fatto""Trasferimento""In attesa del trasferimento""Valido ancora 1 giorno""Valido ancora {DAYS} giorni""Trasferimento non riuscito""Codice scaduto""Ultimo aggiornamento
{DATE}""Con questo trasferimento non è più possibile ricevere alcun certificato.""Formato del certificato
non valido""non valido""Il formato del certificato COVID non è valido""Modalità offline""Per poter visualizzare l'effettiva validità, l'app deve essere regolarmente online""Impossibile verificare il certificato offline""Impossibile verificare il certificato""Riprova più tardi""Impossibile verificare il certificato offline""Per aggiornare gli elenchi di verifica è necessaria una connessione a Internet""Verifica non riuscita""Si è verificato un errore imprevisto""Impossibile determinare la validità""L’app verifica periodicamente se è disponibile un certificato COVID per il tuo codice di trasferimento.""Non appena il certificato COVID è disponibile, viene visualizzato nell’app. Se hai attivato le notifiche, ne riceverai una dall’app.""Il codice di trasferimento scade dopo {TRANSFER_CODE_VALIDITY} giorni. Poi l’app attende un eventuale trasferimento per altre 72 ore prima di considerare scaduto il codice.""Consenti notifiche""L'app ti può informare non appena il certificato è pervenuto. Consenti all'app di inviarti le notifiche.""Avanti""https://ufsp-coronavirus.ch/certificato/come-si-ottiene-il-certificato-covid-e-come-si-impiega/""Ulteriori informazioni""Crea codice""1 giorno""{DAYS} giorni""Non revocato""Firma valida""Non conforme ai criteri di validità svizzeri.""Non è stato possibile creare il codice di trasferimento.""Nessuna connessione a Internet""Si è verificato un errore imprevisto.""Aggiornamento al momento non disponibile""Per effettuare il trasferimento l'app deve essere on-line.""Si è verificato un errore imprevisto. Riprova più tardi""Riprova più tardi.""Per creare un codice di trasferimento l'app deve essere on-line.""Aggiorna""Eliminare il trasferimento?""Trasferimento riuscito""Il certificato COVID è pervenuto""Fino a quando è valido il certificato COVID?""In Svizzera l’obbligo di certificato è stato revocato nel febbraio 2022. Da allora, la durata di validità svizzera esiste solo formalmente e non ha più alcun valore pratico nel nostro Paese. All’estero si applicano le regole di validità del rispettivo Paese. Pertanto, prima di partire, si informi consultando il sito web delle autorità del Paese di transito o di destinazione se nel Paese vigono ancora misure relative al certificato e, in caso affermativo, qual è la loro durata di validità. Sito web utile per viaggi all’estero:""Re-open EU (europa.eu)""https://reopen.europa.eu/it/""Posso utilizzare l’app anche offline?""È possibile utilizzare l’app senza connessione Internet. I certificati possono essere presentati, nonché scansionati e verificati dagli addetti anche in modalità offline.""Quali sono attualmente i criteri di validità in Svizzera?""L’attuale durata di validità dei certificati COVID è consultabile qui:""Ulteriori informazioni""https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624""I certificati possono essere verificati anche offline?""In linea di principio, i certificati COVID possono essere verificati anche senza connessione Internet. A tale scopo, vengono scaricati regolarmente da un server centrale gli elenchi di verifica aggiornati. Questi elenchi salvati localmente non devono avere più di 48 ore.
Per poter aggiornare gli elenchi di verifica, l’app deve essere aperta e collegata a Internet. L’aggiornamento avviene in modo immediato e automatico.""Inquadrare il codice QR""Importa PDF""Suggerimento: Attiva notifiche""Attiva""Documentazione""Vaccinazione incompleta""Documentazione emessa il
{DATE}""Ulteriori informazioni""https://ufsp-coronavirus.ch/certificato/come-si-ottiene-il-certificato-covid-e-come-si-impiega/""Certificato light""Esporta""Che cos'è un certificato light?""Certificato light""Può essere utilizzato solamente in Svizzera""Contiene solamente cognome, nome, data di nascita e una firma elettronica""Valido per {LIGHT_CERT_VALIDITY_IN_H} ore al massimo""La conversione del certificato COVID in certificato light avviene online.""Puoi disattivare il certificato light in qualsiasi momento per tornare al certificato COVID normale.""Disattiva""Attiva""Non è stato possibile attivare il certificato light""Per poter attivare il certificato light, l'app deve essere online.""Valido solo in Svizzera
con un documento di legittimazione""Esporta il certificato COVID""Dai dati del tuo certificato COVID viene creato un PDF, che puoi stampare o condividere.""Il documento PDF viene creato online.""Esporta""Non è stato possibile creare il PDF""Per poter creare il PDF, l'app deve essere online.""codice QR""Nessuna connessione a Internet""Riprova più tardi.""Si è verificato un errore imprevisto.""Certificato light""Esporta""Dai dati del tuo certificato COVID viene creato un PDF, che puoi stampare o condividere.""Il documento PDF viene creato online.""Esporta""Nessuna connessione a Internet""Si è verificato un errore imprevisto.""Si è verificato un errore imprevisto. Riprova più tardi""Quando attivi il certificato light, dai dati del tuo certificato COVID viene creato un nuovo codice QR, il quale non contiene dati sanitari.""Se valido, il certificato COVID normale può essere utilizzato senza limitazioni sia in Svizzera sia nell'UE/AELS, mentre il certificato light può essere utilizzato solamente in Svizzera. Per motivi legati alla protezione dei dati, il certificato light deve essere riattivato dopo {LIGHT_CERT_VALIDITY_IN_H} ore. Rispetto al certificato COVID normale non implica alcun diritto supplementare.""solamente deve alcun""compressa""espansa""Aggiornamento""Certificato light""Con questo aggiornamento puoi far generare una copia del certificato senza dati sanitari per l'utilizzo in Svizzera. A tale scopo sono state aggiornate le condizioni d'uso e l'informativa sulla protezione dei dati, che sono considerate valide se si continua a utilizzare l'app. ""Aggiornamento""Certificato light""Con questo aggiornamento, nell'app puoi verificare anche la copia del certificato senza dati sanitari. A tale scopo sono state aggiornate le condizioni d'uso e l'informativa sulla protezione dei dati, che sono considerate valide se si continua a utilizzare l'app.""La validità del certificato
è scaduta""Light""Che cos'è il certificato light?""L’app «COVID Certificate» offre ai possessori di certificati COVID la possibilità di generare una copia del certificato con dati ridotti al minimo da utilizzare in Svizzera. Il certificato light conferma l’esistenza di un certificato valido, senza contenere dati sanitari.
Questo certificato con dati ridotti al minimo è un’alternativa al certificato COVID ed è stato sviluppato su richiesta dell’Incaricato federale della protezione dei dati e della trasparenza (IFPDT), poiché i certificati COVID contengono determinati dati sanitari, come per esempio il vaccino somministrato o la data della vaccinazione, che possono anche essere visualizzati e dunque letti. Ciò può essere evitato mediante il certificato light.
Il certificato light è disponibile unicamente in versione elettronica nell’app ed è riconosciuto solo in Svizzera. Per motivi legati alla protezione dei dati, il certificato light ha una validità massima di {LIGHT_CERT_VALIDITY_IN_H} ore e in seguito deve essere riattivato. Se si necessita del certificato normale prima che siano trascorse le {LIGHT_CERT_VALIDITY_IN_H} ore, il certificato light può essere disattivato semplicemente.
""Che cos'è il certificato light?""L'app «COVID Certificate» offre ai possessori di certificati COVID la possibilità di generare una copia del certificato con dati ridotti al minimo. Il certificato light indica semplicemente l'esistenza di un certificato valido, ma non contiene i dati sanitari.
Il certificato con dati ridotti al minimo è un’alternativa al certificato COVID-19 ed è stato sviluppato su richiesta dell’Incaricato federale della protezione dei dati e della trasparenza (IFPDT), poiché le applicazioni autosviluppate per verificare i certificati COVID-19 consentirebbero a terzi di visualizzare i dati sanitari, ad esempio il vaccino somministrato o la data della vaccinazione. Ciò può essere evitato mediante il «certificato light».
Il «certificato light» è disponibile unicamente in versione elettronica nell'app ed è riconosciuto solo in Svizzera. Per motivi legati alla protezione dei dati, il «certificato light» ha una validità massima di {LIGHT_CERT_VALIDITY_IN_H} ore e in seguito deve essere riattivato. Se si necessita del certificato normale prima che siano trascorse le {LIGHT_CERT_VALIDITY_IN_H} ore, il certificato light può essere disattivato semplicemente.""Come si fa a trasformare un certificato light nuovamente in un certificato COVID conforme all’UE/AELS?""Il certificato light può essere disattivato dal titolare in qualsiasi momento nell’app «COVID Certificate», dopodiché il certificato COVID di base è di nuovo disponibile.""Valido ancora {TIMESPAN}""Codice di trasferimento copiato""Cos'è un codice di trasferimento?""Con i codici di trasferimento i certificati COVID possono essere trasmessi in modo rapido e sicuro. Tramite questo canale puoi ricevere il certificato COVID direttamente nell’app dopo un test COVID o una vaccinazione anti-COVID-19.""Ho il certificato COVID esclusivamente in formato elettronico nell’app. Come posso ottenerne uno in formato PDF o cartaceo?""Nella vista di dettaglio del certificato COVID elettronico dell’app «COVID Certificate» è disponibile la funzione «Esporta», con la quale è possibile creare un PDF, salvarlo e stamparlo.""market://details?id=ch.admin.bag.covidcertificate.wallet""market://details?id=ch.admin.bag.covidcertificate.verifier""È stato raggiunto il limite di 24 ore""Il certificato light è già stato attivato troppo spesso nelle ultime 24 ore""Importazione non riuscita""O il file non contiene alcun codice QR valido o non è stato possibile riconoscere il codice QR""Errore imprevisto""Contattare il supporto""+41 58 466 07 99""Errore di decodificazione""Una memoria dell'app non ha potuto essere decodificata. Per continuare a utilizzare l'app è necessario eliminare e ricreare la memoria. Questa operazione comporta la perdita dei dati.""Impostazioni""Lingua""Date format used: dd.mm.yyyy""Fabbricante e Nome""Errore nell’ora""Per fare in modo che i codici di trasferimento funzionino, l’ora deve essere impostata correttamente. Reimpostare l’ora e riprovare.""UVCI copiato""Argovia""https://www.ag.ch/coronavirus-impfung""Appenzello Esterno""https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/""Appenzello Interno""https://www.ai.ch/coronavirus-impfung""Basilea Campagna""https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/amt-fur-gesundheit/medizinische-dienste/kantonsarztlicher-dienst/aktuelles/corona-impfung/italienisch-italiano""Basilea Città""http://www.coronaimpfzentrumbasel.ch""Berna""http://www.be.ch/corona-impfung""Friburgo""https://www.fr.ch/sante/covid-19/covid-19-vaccination""Ginevra""https://www.ge.ch/se-faire-vacciner-contre-covid-19""Glarona""https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung""Grigioni""https://www.gr.ch/IT/istituzioni/amministrazione/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx""Giura""https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html""Lucerna""http://www.lu.ch/covid_impfung""Neuchâtel""https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx""Nidvaldo""https://www.nw.ch/gesundheitsamtdienste/6044#Impfung""Obvaldo""https://www.ow.ch/dienstleistungen/7129""San Gallo""https://www.sg.ch/coronavirus/impfen""Sciaffusa""https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html""Svitto""https://www.sz.ch/corona-impfen""Soletta""https://so.ch/coronaimpfung""Turgovia""https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590""Ticino""http://www.ti.ch/vaccinazione""Uri""https://www.ur.ch/themen/3673""Vallese""https://www.vs.ch/de/web/coronavirus#ancre_vaccination""Vaud""https://vd.ch/coronavirus-vaccins""Zugo""https://www.corona-impfung-zug.ch/""Zurigo""http://www.zh.ch/coronaimpfung""Fatti vaccinare ora!""Con la vaccinazione anti-COVID-19 puoi viaggiare senza preoccupazioni nella maggior parte dei Paesi.""Fatti vaccinare ora!""Con la vaccinazione anti-COVID-19 puoi proteggerti dalla malattia e da un eventuale decorso grave.""Fatti vaccinare ora!""Con la vaccinazione anti-COVID-19 puoi immunizzarti in modo sicuro.""Fatti vaccinare ora!""Con la vaccinazione anti-COVID-19 puoi contribuire a ridurre il carico di malattia.""Fatti vaccinare ora!""Con la vaccinazione anti-COVID-19 puoi contribuire a combattere le ripercussioni della pandemia.""Fatti vaccinare ora!""Con la vaccinazione anti-COVID-19 puoi evitare le conseguenze a lungo termine di una malattia COVID-19.""Fatti vaccinare ora!""Con la vaccinazione anti-COVID-19 puoi contribuire a sgravare il sistema sanitario.""Prendi appuntamento per la vaccinazione nelle tue vicinanze""Per esempio potresti farti vaccinare in uno di questi luoghi nelle tue vicinanze:
- in centri di vaccinazione specifici
- negli ospedali
- dal tuo medico di famiglia
- nelle farmacie che vaccinano
Molti di essi offrono anche vaccinazioni libere senza appuntamento.""La vaccinazione anti-COVID-19 è raccomandata per le persone a partire dai 5 anni.""Appuntamento per la vaccinazione""Prendi appuntamento per la vaccinazione""Scegli il Cantone""Ulteriori informazioni sulla vaccinazione anti-COVID-19""Informazioni sulla vaccinazione""https://ufsp-coronavirus.ch/vaccinazione/""Rilevato uno scanner hardware esterno""Reset""I certificati non possono essere caricati
Code: {ERROR_CODE}""Guarigione (Anticorpi)""Impossibile effettuare la verifica""Impostazione di data, ora o fuso orario del dispositivo non corretta.""Si vogliono verificare certificati?""Per una verifica più rapida e conforme alla protezione dei dati, utilizzare l'app \"COVID Certificate Check\"""All'app Check""Capito""«COVID Certificate Check»-App.""Non valido al di fuori della Svizzera""Risultati""Sufficiente""Inizio della validità""Per il servizio responsabile dell'emissione""Certificato di deroga""È disponibile una nuova versione""Caricare la nuova versione dellʼapp.""Aggiorna""Il COVID-19 Vac-Check fornisce informazioni sulle prime vaccinazioni, sulle vaccinazioni di richiamo e ti indirizza verso il punto di contatto del tuo Cantone.""Vai al COVID-19 Vac-Check""https://covid19-vac-check.ch/""Prendi appuntamento ora""Video esplicativo""https://youtu.be/b4JXnfr2Ugg""Scegliere""Verifica ({MODE})""La modalità di verifica selezionata non esiste più.""Info""L’accesso a strutture e manifestazioni è consentito alle persone vaccinate o guarite.""L’accesso non è consentito.""3G""2G""Per le strutture e le manifestazioni in cui si applica la regola 3G.""In questa modalità sono accettati i certificati COVID per persone vaccinate, guartite o testate negative.""I certificati light possono essere verificati.""Per le strutture e le manifestazioni in cui si applica la regola 2G.""In questa modalità sono accettati i certificati COVID per persone vaccinate o guartite.""Questa modalità non permette di verificare i certificati light.""Modalità di verifica""L’accesso a strutture e manifestazioni è consentito alle persone vaccinate, guarite o testate negative.""L’accesso non è consentito.""Il certificato è di tipo «light». Questo tipo di certificato non può essere verificato nella modalità {MODUS}.""Per verificare il certificato è necessario disattivare il certificato light e tornare al certificato di base.""Selezionare la modalità in cui verificare i certificati COVID.""La modalità di verifica può essere cambiata in qualsiasi momento.""2G+""Per strutture e manifestazioni cui si applica la regola 2G+.""Oltre a un certificato di vaccinazione o di guarigione COVID è richiesto un certificato di test valido, che deve essere verificato separatamente.""Eccezioni: Persone per le quali sono trascorsi al massimo 120 giorni dalla vaccinazione completa, dalla vaccinazione di richiamo o dalla guarigione.""In questa modalità non è possibile verificare i certificati light.""Certificato COVID valido secondo la regola 2G""Certificato di test COVID valido""Per la regola 2G+ accettato solo previa verifica di un certificato di test valido.""Per la regola 2G+ accettato solo previa verifica di un certificato di vaccinazione o di guarigione.""Per la verifica di questo tipo di certificato COVID è necessario scaricare la versione più recente dell’app «COVID Certificate Check». Aggiornare l’app e ripetere la procedura di verifica.""All'App Store""Certificato di test""Per i contesti in cui è richiesto un certificato di test valido.""In questa modalità sono accettati i certificati COVID rilasciati alle persone risultate negative a un test PCR o a un test antigenico rapido.""In questa modalità non è possibile verificare i certificati light.""Il pulsante «Aggiorna» è stato eliminato.""Se il certificato è scaduto o se non è valido per motivi tecnici, l’informazione compare direttamente nell’app. ""I certificati COVID devono essere verificati utilizzando l’app «COVID Certificate Check».""Per le persone incaricate della verifica""Per saperne di più""https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1358421103""L’accesso a strutture e manifestazioni è consentito alle persone per le quali sono trascorsi al massimo 120 giorni dal completamento del ciclo vaccinale, dalla somministrazione della dose di richiamo o dalla guarigione (sulla base di un test PCR). In questo caso non è necessario un ulteriore certificato di test.""Oltre al certificato di vaccinazione o di guarigione, per l’accesso a strutture e manifestazioni è necessario presentare anche il risultato di un test negativo.""Informazione""Certificato medico rilasciato in""La presente attestazione non costituisce un documento di viaggio.
<br /><br />
Questo certificato ha soltanto una validità temporanea. L'applicazione «COVID Certificate» consente di verificare in qualsiasi momento l'attuale durata di validità in Svizzera.""Eccezione""Recovery (Antigen Rapid Test)""Data del primo risultato positivo""La presente attestazione non costituisce un documento di viaggio.
<br /><br />
Questo certificato ha soltanto una validità temporanea. L'applicazione «COVID Certificate» consente di verificare in qualsiasi momento l'attuale durata di validità in Svizzera.""Scadenza imminente""Info""Questo certificato sta per scadere.""Per saperne di più""Info""Questo certificato COVID è valido ancora per pochi giorni. Si prega di tenere conto della data di scadenza indicata sullo stesso.""E ora?""https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/cosa-devo-fare-se-il-mio-certificato-covid-sta-scadere-secondo-le-regole-di""Durata di validità abbreviata""Durata di validità abbreviata""Questo certificato sta per scadere.""Per saperne di più""Info""Dal 31 gennaio 2022 in Svizzera vige una durata di validità del certificato COVID per persone vaccinate o guarite di 270 anziché di 365 giorni. Questo certificato è interessato direttamente dall’abbreviazione della durata di validità:""La scadenza della durata di validità di questo certificato COVID è il 31 gennaio 2022. Pertanto il certificato non è più utilizzabile dopo quella data.""Per saperne di più""https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-la-durata-di-validita-dei-certificati-di-vaccinazione-o-di-guarigione-e""Mettete al sicuro il vostro certificato!""Se cancellate l’app, cambiate o smarrite il vostro smartphone, anche i vostri certificati COVID andranno persi.
Conservate quindi i vostri certificati anche al di fuori dell’app esportandoli in formato PDF.""Per maggiori informazioni""https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/ho-il-certificato-covid-esclusivamente-formato-elettronico-nellapp-covid""https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/ho-il-certificato-covid-esclusivamente-formato-elettronico-nellapp-covid""Primo""Secondo""Terzo""Validità all'estero""Validità per i viaggi all’estero""Prima di un viaggio all’estero, informatevi sulla validità del vostro certificato al momento dell’entrata nel Paese di destinazione. ""Verificare per:""Paese:""Seleziona""Entrata in data:""L’ora indicata è già passat""Avvertenze""Maggiori informazioni sono disponibili su""Vogliate scegliere un Paese e una data di entrata.""Seleziona un Paese""Valido per l’entrata in:""Non valido per l’entrata in:""{COUNTRY}, {DATE}""Si è verificato un errore durante il caricamento dei Paesi disponibili""Per poter verificare la validità, lo smartphone deve essere collegato a Internet.""Le disposizioni d’entrata possono cambiare. Verificate poco prima della partenza se il vostro certificato è valido e informatevi ulteriormente online sulle disposizioni d’entrata attuali del Paese di destinazione.""Le informazioni sopra indicate si riferiscono solo alle disposizioni d’entrata del Paese di destinazione. Per eventuali settori soggetti all’obbligo di certificato all’interno del Paese possono vigere altre regole.""La Confederazione non si assume la responsabilità per l’attualità e la completezza delle informazioni fornite.""Non avete trovato un Paese? Non tutti i Paesi accettano i certificati COVID o rendono disponibili le regole d’entrata.""reopen.europa.eu""https://reopen.europa.eu/""Novità: versione compatibile con l’UE""Per questo certificato COVID è possibile richiedere una versione compatibile con l’UE.""Maggiori informazioni""Richiedere un certificato COVID (compatibile con l’UE)""Ora i certificati COVID per persone guarite rilasciati sulla base di test antigenici rapidi sono accettati anche nell’UE.
È possibile richiedere una versione di questo certificato compatibile con l’UE presso l’organo nazionale per la richiesta di certificati COVID.""Al modulo online dell’organo nazionale per la richiesta di certificati COVID""Acconsento al trasferimento dei dati del presente certificato COVID nel modulo dell’organo nazionale per la richiesta di certificati COVID (un sito web della Confederazione).""Al modulo""Sito web dell’organo nazionale per la richiesta di certificati COVID (senza trasferimento dati)""Se la richiesta è accolta, il nuovo certificato COVID compatibile con l’UE sarà inviato per posta e successivamente potrà essere trasferito nell’app dal richiedente. Un invio direttamente nell’app non è possibile.""Con il trasferimento dei dati del certificato nel modulo online, la richiesta può essere elaborata più semplicemente.""https://covidcertificate-form.admin.ch/immunityrequest""Maggiori informazioni""Cosa significa?""I codici QR dei certificati COVID hanno una validità tecnica limitata""Affinché questo certificato possa continuare a essere verificato (p. es. durante i viaggi), è necessario rinnovare il codice QR.""Puoi eseguire autonomamente il rinnovo richiesto qui nell’app (collegamento Internet necessario). A tale scopo i dati del certificato attuale saranno codificati e trasmessi dall’app al sistema della Confederazione per l’emissione di certificati COVID, il quale a sua volta creerà un nuovo codice QR che in seguito sarà rinviato all’app per la conservazione. Infine i dati saranno cancellati a emissione e trasmissione avvenute.""In queste FAQ trovi i motivi per cui è necessario rinnovare il codice QR anche se il tuo certificato di vaccinazione o di guarigione dovesse giungere presto a scadenza o essere già scaduto secondo le regole di validità svizzere.""Cosa significa?""I codici QR dei certificati COVID hanno una validità tecnica limitata.""Affinché questo certificato possa continuare a essere verificato (p. es. durante i viaggi), è necessario rinnovare il codice QR.""Puoi eseguire autonomamente il rinnovo richiesto qui nell’app (collegamento Internet necessario). A tale scopo i dati del certificato attuale saranno codificati e trasmessi dall’app al sistema della Confederazione per l’emissione di certificati COVID, il quale a sua volta creerà un nuovo codice QR che in seguito sarà rinviato all’app per la conservazione. Infine i dati saranno cancellati a emissione e trasmissione avvenute.""In queste FAQ trovi i motivi per cui è necessario rinnovare il codice QR anche se il tuo certificato di vaccinazione o di guarigione dovesse giungere presto a scadenza o essere già scaduto secondo le regole di validità svizzere.""Importante!""Sostituisci anche i certificati stampati o salvati in precedenza con la presente versione aggiornata.""La durata del riconoscimento di una vaccinazione in un Paese non è specificata nel certificato. Questo viene calcolato durante la verifica in base alle regole del Paese esaminatore. Il rinnovo del codice QR garantisce solo che tale codice possa continuare a essere tecnicamente utilizzato.""QR code expiration date (technical)
{DATE}""Rinnova il codice QR!""Per continuare a utilizzare questo certificato, è necessario rinnovare il codice QR.""Per saperne di più""Rinnova il codice QR""Data di scadenza del codice QR""La data di scadenza tecnica di questo codice QR sarà (presto) raggiunta.""Codice QR viene rinnovato""Il codice QR è stato rinnovato.""Nessuna connessione a Internet""Per rinnovare il codice QR è necessario che l’app sia online.""Si è verificato un errore imprevisto.""Riprova più tardi""Rinnovo avvenuto""Sostituisci anche le versioni stampate o salvate di questo certificato con la presente versione aggiornata.""Per saperne di più""La data di scadenza tecnica di questo codice QR sarà raggiunta.""È stato raggiunto il limite di 24 ore""Codice QR rinnovato troppo spesso. Rinnovo temporaneamente bloccato.""Alle FAQ""https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-devo-rinnovare-il-codice-qr-del-mio-certificato-covid-anche-se-secondo-le""Aggiornamento""L’informativa sulla privacy (dichiarazione sulla protezione dei dati) e le condizioni d’uso dell’app sono state puntualmente aggiornate e adeguate alle basi legali.""Data di vaccinazione""Test negativo"" ""1 ora fa""{HOURS} ore fa""1 giorno fa""{DAYS} giorni fa""Quali sono le novità?""Nel certificato COVID non viene più indicato il campo «Validità in Svizzera». Al suo posto l’app riporta la data della vaccinazione o del test. Perché?""Certificato COVID in Svizzera""In Svizzera l’obbligo di certificato è stato revocato a febbraio 2022""Da allora la durata di validità in Svizzera esiste solo formalmente e non ha più alcun valore pratico nel nostro Paese.""La durata di validità svizzera non ha valore nemmeno all’estero.""Certificati COVID all’estero""All’estero si applicano le regole dei singoli Paesi.""L’app mostra ora quanti giorni sono passati da una vaccinazione o da un test.""In questo modo è più facile determinare se il certificato rispetta le regole del Paese di destinazione (qualora quest’ultimo richieda ancora un certificato COVID).""Situazione attuale in Europa e nel mondo""La maggior parte dei Paesi europei ha revocato l’obbligo di certificato per l’entrata.""La funzione «Validità all’estero» è dunque stata rimossa.""Per sapere se in un determinato Paese vige ancora l’obbligo di certificato, consulta i seguenti siti web:""reopen.europa.eu""https://reopen.europa.eu""iatatravelcentre.com""https://www.iatatravelcentre.com""più di""Test positivo""Obbligo di certificato revocato""Obbligo di certificato revocato""In Svizzera l’obbligo di certificato è stato revocato a febbraio 2022.""Da allora la durata di validità in Svizzera esiste solo formalmente e non ha più alcun valore pratico nel nostro Paese.""Questa app svizzera verifica i certificati COVID in base alle regole di validità vigenti in Svizzera. Il risultato della verifica non è determinante per un impiego all’estero.""Qualora un Paese richieda ancora un certificato COVID, si applicano le regole di tale Paese.""Organo nazionale per la richiesta di certificati COVID""https://covidcertificate-form.admin.ch/immunityrequest""Devo recarmi all’estero e ho bisogno di un certificato COVID. Cosa devo fare?""All’estero si applicano le regole di validità del rispettivo Paese, sia per l’entrata sia all’interno del Paese stesso. Per l’impiego del certificato all’interno del Paese di destinazione possono applicarsi altre regole rispetto a quelle vigenti per l’entrata. Queste regole possono cambiare in tempi brevi. Pertanto, prima di partire, si informi consultando il sito web delle autorità del Paese di transito o di destinazione se nel Paese vigono ancora regole relative alla COVID-19 e, in caso affermativo, quali sono.""Serie di vaccinazioni incompleta secondo gli standard internazionali."
================================================
FILE: common/src/main/res/values-rm/strings.xml
================================================
"Covid Check""Verifitgar""Covid Certificate""Check""Scannar il certificat preschentà""Ils certificats vegnan verifitgads automaticamain""Verifitgar""Uschia funcziuni""Sbagl en la rait""Verifitgai Vossa colliaziun d'internet.""Empruvar danovamain""Nagin access a la camera""L'app dovra access a la camera per pudair scannar il code QR.""Midar las configuraziuns""Sbagl""Il code n'è betg valaivel""OK""L'app dovra access a la camera per pudair scannar il code QR.""Permetter l'access a la camera""Scannar il code QR per verifitgar""Certificat COVID""Num""Data da naschientscha""Agiuntar""Certificat COVID""Scannai il code QR sin il certificat COVID per al agiuntar a l'app.""Agiuntar""Verificaziun reussida""Valaivel mo cun in
document da legitimaziun""Il certificat vegn verifitgà""Il certificat n'è betg valaivel""Na correspunda betg als criteris da valaivladad da la Svizra u dal modus da verificaziun ({MODUS})""Il certificat COVID n'ha betg ina signatura valaivla""Il certificat COVID è vegnì revocà""Verificaziun betg reussida""Igl è capità in sbagl imprevis.""Scannai il code QR sin il certificat COVID.""Uschia funcziuni""Scannar danovamain""Agiuntar""Certificats""Stizzar""Covid Cert""L'app""COVID Certificate""Cun l'app pudais Vus tegnair en salv en moda segira ils certificats COVID sin Voss smartphone ed als preschentar en moda simpla.""Vinavant""Protecziun da datas""Vossas datas restan en l'app""Ils certificats vegnan arcunads mo localmain sin Voss smartphone. Las datas na vegnan betg arcunadas en in sistem central.""Preschentar ils certificats en moda simpla""Las datas sin il certificat COVID èn er cuntegnidas en il code QR. ""Cun preschentar il certificat vegn scannà il code QR cun l'app da verificaziun. Las datas vegnan verifitgadas automaticamain areguard l'autenticitad e la valaivladad.""Decleraziun davart la protecziun da datas""Cundiziuns d'utilisaziun""Acceptar""rm""Uschia funcziuni""Agiuntar certificats COVID""Per pudair agiuntar in certificat COVID a l'app duvrais Vus il certificat original sin palpiri u sco PDF. ""Smatgai en l'app sin «Agiuntar» per agiuntar in nov certificat a l'app.""Tegnai ussa la camera dal smartphone sur il code QR sin il certificat original per scannar il code.""I cumpara ina prevista dal certificat covid. Smatgai sin «Agiuntar» per arcunar il certificat en moda segira en l'app.""Cura e co obtegn jau in certificat COVID?""Dumondas frequentas""Tge è il certificat COVID?""Il certificat COVID permetta da documentar – en moda nunfalsifitgabla – ina vaccinaziun cunter COVID-19, ina infecziun u in resultat negativ dal test.""Cura e co obtegn jau in certificat COVID?""Co poss jau preschentar in certificat COVID?""Nua vegnan arcunadas mias datas?""Co vegnan impedids abus e falsificaziuns?""Tge capita, sche jau perd mes certificat COVID?""Co poss jau agiuntar in certificat COVID a l'app?""Pon vegnir agiuntads er plirs certificats COVID?""Nua ves jau, sche mes certificat COVID è valaivel?""Co vegnan protegidas mias datas?""Tge datas cuntegna il code QR?""Tge stoss jau far, sche jau stiz il certificat COVID u l'app?""In certificat COVID survegnis Vus suenter ina vaccinaziun cumpletta cunter COVID-19, suenter ina infecziun u suenter in resultat negativ dal test. Il certificat vegn per il solit emess – sin dumonda – dal persunal spezialisà da sanadad al lieu. ""Vus pudais preschentar Voss certificat COVID sin palpiri u sur l'app «COVID Certificate». L'app permetta d'arcunar certificats e d'als preschentar directamain sin il telefonin.
Resguardai per plaschair che Vus stuais en mintga cas preschentar er anc in document da legitimaziun.
En intgins pajais vegn pretendida ina versiun stampada dal certificat ed il certificat electronic na vegn betg acceptà. Sin viadis duessas Vus perquai adina avair cun Vus er la versiun stampada.""Las datas da Voss certificat na vegnan betg arcunadas en in sistem central da la Confederaziun, mabain mo localmain sin Voss telefonin resp. sin il certificat COVID sin palpiri.""Il code QR sin Voss certificat COVID cuntegna ina signatura digitala. La signatura è ina impurtanta caracteristica da segirezza che impedescha da falsifitgar il certificat COVID. Il certificat COVID è ultra da quai valaivel mo en cumbinaziun cun in document da legitimaziun.""Voss certificat COVID na vegn betg arcunà en in sistem central da la Confederaziun. Tegnai perquai en salv cun quità il certificat COVID sin palpiri e/u sco PDF. Sche Vus avais pers il certificat u sche Vus duvrais in certificat substitutiv, po l'instituziun da sanadad (p.ex. il post da test u da vaccinaziun) pretender ina taxa per emetter in nov certificat.""Per agiuntar in certificat COVID a l'app, duvrais Vus il certificat original ch'è vegnì emess per Vus sin palpiri u en furma da PDF. Cun l'app COVID Certificate pudais Vus alura scannar il code QR sin il certificat ed al agiuntar a l'app. Silsuenter cumpara il certificat COVID directamain en l'app.""Gea, quai è pussaivel. Vus pudais p.ex. arcunar en Vossa app ils certificats COVID da tut Vossas confamigliaras e da tut Voss confamigliars. Er en quest cas vala: Il certificat COVID è valaivel mo en cumbinaziun cun in document da legitimaziun da la possessura u dal possessur dal certificat.""En Svizra è l'obligatori dal certificat vegnì abolì il favrer 2022. Las duradas da valaivladad svizras existan dapi lura mo anc formalmain e n'han praticamain nagina impurtanza pli en Svizra. Sin il certificat COVID na vegn perquai betg pli mussà il champ «Valaivladad en Svizra». Empè da quai mussa l'app la data da la vaccinaziun resp. dal test.
I vegn er mussà, avant quants dis ch'igl è vegnì fatg ina vaccinaziun resp. in test. Uschia èsi pli facil per Vus da constatar, sche Voss certificat correspunda a las reglas da valaivladad da Voss pajais da destinaziun (premess ch'il pajais pretenda anc in certificat Covid). A l'exteriur valan adina las reglas dal pajais respectiv. ""Vossas datas persunalas na vegnan betg arcunadas en in sistem central, mabain mo localmain sin Voss telefonin resp. en il code QR sin Voss certificat COVID en furma da palpiri.""Il code QR cuntegna tut las infurmaziuns che Vus chattais sin Voss certificat COVID en furma da palpiri en text betg criptà. Plinavant sa chatta ina signatura digitala en il code QR. Cun quella po vegnir verifitgada l'autenticitad da Voss certificat COVID. Uschia na po il certificat COVID betg vegnir falsifitgà.""Vus pudais simplamain arcunar anc ina giada il certificat COVID sin Voss telefonin. Chargiai giu danovamain l’app e scannai alura il code QR sin Voss certificat COVID sin palpiri u en furma da PDF.""Co funcziuna
l'app?""Cun l'app COVID Certificate pudais Vus arcunar e preschentar en moda simpla e segira certificats COVID sin Voss telefonin.""In certificat COVID pudais Vus obtegnair suenter ina vaccinaziun cumpletta cunter COVID-19, suenter ina infecziun cun COVID-19 u suenter in resultat negativ dal test da COVID-19. Il certificat vegn emess – sin dumonda – dal persunal medicinal al lieu.""Prenum""Update necessari""Chargiai giu la nova versiun da l'app.""Actualisar""Valaivel en Svizra a partir dals:
{DATE}""Vaccinaziun""Guariziun""Test""Avantatgs""Tegnair en salv ils certificats COVID en moda digitala""Ils certificats COVID pon vegnir agiuntads en moda simpla a l'app e vegnir tegnids en salv en moda digitala.""L'app verifitgescha ils certificats areguard lur valaivladad en Svizra. Uschia pudais Vus As atschertar che Voss certificats èn valaivels. ""Avantatgs""Impressum""Dumondas frequentas""Glista dals certificats""Agiuntar in certificat""Serrar""Activar la glisch da giaglioffa""Deactivar la glisch da giaglioffa""Configuraziuns""Igl è capità in sbagl nunenconuschent.""Na correspunda betg als criteris da valaivladad da la Svizra.
La valaivladad dal certificat è scadida.""Na correspunda betg als criteris da valaivladad da la Svizra.
Il certificat n'è anc betg valaivel.""Igl è capità in sbagl en la rait.""L'apparat è en il modus offline.""Valaivel en Svizra a partir dals:
{DATE}""Cuntegna datas che na correspundan betg als standards internaziunals.""Surpassà la durada da valaivladad en Svizra""Il certificat è vegnì
revocà""Certificat cun
signatura nunvalaivla""signatura nunvalaivla""revocà""Quest certificat è gia arcunà en l'app""Valaivladad
en Svizra""fin ils""Il certificat vegn verifitgà""Verificaziun reussida""Infurmaziun""Serrar""Dosa""COVID-19""Malsogna u agent patogen""Product""Producent""Data da la vaccinaziun""Pajais da la vaccinaziun""Emess da""Guariziun""Data da l'emprim resultat positiv""Valaivel a partir dals""Valaivel fin ils""Pajais dal test""Test""Resultat""Betg identifitgà (Negativ)""Identifitgà (Positiv)""Tip""Num""Producent""Data da l'emprova""Data da resultat""Uschia funcziuni""Vulais Vus propi stizzar il certificat?""Interrumper""Vaccinaziun""http://itunes.apple.com/app/id1565917320""http://itunes.apple.com/app/id1565917510""UVCI""Certificat emess ils
{DATE}""Tip dal vaccin""Center da test""L'app dovra access a la camera per pudair scannar il code QR.""Uschia vegnan verifitgads ils certificats COVID""Cun l'app COVID Certificate Check pon vegnir scannads ils codes QR sin ils certificats COVID per verifitgar l'autenticitad e la valaivladad dals certificats.""Co pon vegnir verifitgads ils certificats COVID?""Per verifitgar in certificat COVID pudais Vus scannar il code QR sin Voss certificat sin palpiri u en l'app COVID Certificate cun l’app «COVID Certificate Check» previsa per quai.""Tge vegn propi verifitgà?""Cun scannar vegnan verifitgads trais aspects:
– Cuntegna il certificat ina signatura digitala valaivla?
– N'è il certificat betg vegnì revocà?
– Correspunda il certificat als criteris da valaivladad en Svizra?
Sche tut ils trais aspects vegnan valitads en moda positiva, vegn il certificat COVID considerà sco valaivel.
""Tge documents da legitimaziun vegnan acceptads resp. èn valaivels? Pertge ston vegnir verifitgadas las persunalias?""Ultra dal passaport e da la ID vegnan acceptads er auters documents da legitimaziun valaivels che cumprovan l’identitad da la persuna pertutgada cun ina fotografia (p.ex. permiss dad ir cun auto). Il certificat COVID na po bain betg vegnir falsifitgà, però pir cun verifitgar las persunalias vegn controllà, sch'il certificat preschentà è vegnì emess per la persuna ch'al preschenta.""Pon vegnir verifitgads er certificats COVID esters?""Gea, certificats COVID ch'èn cumpatibels cun il «Digital Covid Certificate» da la UE pon vegnir verifitgads cun l'app COVID Certificate Check areguard ils criteris da valaivladad da la Svizra.""Tge datas ves jau tar la procedura da verificaziun?""Tar la procedura da verificaziun vesais Vus mo il num e la data da naschientscha da la possessura u dal possessur dal certificat e sch'il certificat COVID è valaivel.""Vegnan arcunadas datas en in sistem central u en l'app COVID Certificate Check tar la procedura da verificaziun?""Na, tar la procedura da verificaziun na vegnan arcunadas naginas datas – ni en l'app COVID Certificate Check ni en in sistem central? I n'è pia betg pussaivel d'identifitgar tge certificat COVID ch'è vegnì verifitgà da tgi, cura e nua.""Configuraziun""Decleraziun davart la protecziun da datas & cundiziuns d’utilisaziun""Quest attest n'è betg in document da viadi.
<br /><br />
Las enconuschientschas scientificas davart la vaccinaziun cunter COVID-19, davart la guariziun da COVID-19 e davart ils tests da COVID-19 sa sviluppan cuntinuadamain, er areguard las novas variantas privlusas dal virus.
<br /><br />
As infurmai per plaschair avant in viadi davart las restricziuns e davart las reglas da valaivladad che valan al lieu da destinaziun. La valaivladad da Voss certificat vegn calculada a l'exteriur a maun da las reglas dal pajais da destinaziun.""https://www.bit.admin.ch/bit/de/home/dokumentation/covid-certificate-app.html""https://www.bit.admin.ch/bit/de/home/dokumentation/covid-certificate-check-app.html""COVID Certificate Check""Co obtegn jau in certificat COVID suenter ina infecziun cun COVID-19?""Tut tenor il chantun vegn il certificat COVID per part emess directamain dal post da test u dal labor, nua che Voss test positiv è vegnì constatà. Sche quai n'è betg il cas, pudais Vus dumandar pli tard online in certificat COVID sur la pagina d'internet da la «Plattafurma naziunala da dumondas per il certificat COVID». Là vegn la dumonda elavurada da l'autoritad chantunala cumpetenta. La pagina d'internet da la «Plattafurma naziunala da dumondas per il certificat COVID» chattais Vus qua:""Tscherner il proxim pass""Agiuntar in certificat""Vus avais in certificat COVID sin palpiri u sco PDF ed al vulais agiuntar a l'app.""Crear in code da transfer""Codes da transfer""Vus pudais inditgar ils codes da transfer a chaschun da tests da COVID u vaccinaziuns cunter COVID-19. Vus retschavais alura il certificat COVID directamain en l'app.""Crear in code""Uschia funcziuni""Certificats COVID furnids directamain en l'app""Cun ils codes da transfer pon ils certificats COVID vegnir transmess en moda svelta e segira. Sin questa via vegn il certificat COVID furnì directamain en l'app suenter in test dal coronavirus u ina vaccinaziun cunter COVID-19.""Tgi porscha la transmissiun cun in code da transfer?""Pon ils codes da transfer vegnir duvrads er per transmetter certificats da vaccinaziun?""Co funcziuna la transmissiun cun in code da transfer?""Poss jau duvrar pliras giadas il medem code da transfer?""Sche Vus faschais in test dal coronavirus (test da PCR u test svelt d'antigens) u sche Vussurvegnis ina vaccinaziun cunter COVID-19, po il code da transfer vegnir en funcziun per transmetter sveltamain ils certificats COVID.
As infurmai tar Voss center da test, tar il post da vaccinaziun, en l'apoteca u tar Vossa media u Voss medi, sche la transmissiun cun in code da transfer è pussaivla.""Actualmain è la transmissiun cun in code da transfer concepì per tests dal coronavirus. Co che Vus survegnis in certificat COVID suenter ina vaccinaziun, vegnis Vus a savair qua:""En cas ch'il post che fa il test dal coronavirus u la vaccinaziun cunter COVID-19 porscha la transmissiun cun in code da transfer, pudais Vus inditgar Voss code da transfer gia tar l'annunzia, a chaschun da la prelevaziun dal test u avant che survegnir la vaccinaziun.
In code da transfer pudais Vus crear da tut temp en l'app «COVID Certificate». Cliccaii sin la pagina iniziala sin «Agiuntar» resp. sin il simbol «+» sutvart a dretga. Cliccai alura sin «Crear in code da transfer». L'app As mussa il code da 9 cifras.""Na, in code da transfer po vegnir duvrà mo ina giada. En cas che Vus vulais retschaiver plirs certificats, per exempel da confamigliaras u confamigliars, creai per plaschair per mintga certificat in nov code.""Uschia funcziuna il transfer""Co vegnan protegidas mias datas tar il transfer?""Tge poss jau far, sch'il certificat n'arriva betg?""Tge capita en cas d'in test positiv?""Per il transfer vegn Voss certificat COVID mess a disposiziun en moda codifitgada. Il code da transfer garantescha che mo Vossa app po retschaiver il certificat COVID. Las datas vegnan puspè stizzadas dal server immediatamain suenter il transfer.""Uschespert ch'il certificat è vegnì generà dal labor u dal center da test, stat el a disposiziun per il transfer. Guardai che Voss smartphone saja collià cun l'internet per pudair retschaiver certificats.
En cas che Voss certificat COVID n'arriva tuttina betg, As drizzai al post che ha fatg il test (center da test, apoteca, media u medi).""En cas d'in test svelt d'antigens positiv na survegnis Vus betg in certificat COVID dal labor.
En cas d'in test da PCR positiv survegnis Vus in certificat COVID per persunas guaridas. El è valaivel a partir dal 11. di suenter la prelevaziun dal test.""Voss code da transfer è vegnì creà""Code da transfer""Creà ils {DATE}""Proxims pass""Consegnai il code a l'apoteca, al center da test u a la media / al medi a chaschun da la prova da test.""En cas che Vus vulais retschaiver plirs certificats, per exempel da confamigliaras u confamigliars, creai per mintga certificat in nov code.""Terminà""Transfer""Spetgar il transfer""Anc valaivel 1 di""Anc valaivel {DAYS} dis""Il transfer n'è betg reussì""Il code è scadì""Actualisà l'ultima giada
{DATE}""Cun quest transfer na po vegnir retschavì pli nagin certificat.""Il format dal certificat
n’è betg valaivel""n’è betg valaivel""Il format dal certificat COVID n’è betg valaivel.""Modus offline""Per pudair mussar la valaivladad actuala sto l’app esser regularmain online.""La verificaziun n’è betg pussaivla en il modus offline""Actualmain n’è la verificaziun betg pussaivla""Empruvai pli tard anc ina giada""La verificaziun n’è betg pussaivla en il modus offline""Per actualisar las glistas da verificaziun dovri ina colliaziun cun l’internet.""Verificaziun betg reussida""Igl è capità in sbagl imprevis""La valaivladad n’ha betg pudì vegnir eruida""L'app verifitgescha regularmain, schebain in certificat COVID è disponibel per Voss code da transfer.""Uschespert ch'il certificat COVID è disponibel, cumpara el en l'app. Sche Vus avais activà ils avis, vegnis Vus infurmada u infurmà da l'app.""Suenter {TRANSFER_CODE_VALIDITY} dis scada il code da transfer. Silsuenter spetga l'app anc ulteriuras 72 uras, avant ch'il code da transfer daventa nunvalaivel.""Permetter avis""L'app As po infurmar, uschespert ch'il certificat è arrivà. Permettai a l'app d'As trametter avis.""Vinavant""https://bag-coronavirus.ch/zertifikat/wie-erhalte-ich-ein-covid-zertifikat-und-wie-verwende-ich-es/""Ulteriuras infurmaziuns""Crear in code""1 di""{DAYS} dis""Betg revocar""La signatura è valaivla""Na correspunda betg als criteris da valaivladad da la Svizra.""Il code da transfer n'ha betg pudì vegnir creà""Nagina colliaziun cun l'internet""Igl è capità in sbagl imprevis.""Actualmain n'è l'actualisaziun betg pussaivla""Per pudair retschaiver il transfer, sto l'app esser online.""Igl è capità in sbagl imprevis. Empruvai pli tard anc ina giada.""Empruvai pli tard anc ina giada.""Per pudair crear in code da transfer, sto l'app esser online.""Actualisar""Vulais Vus propi stizzar il transfer?""Transfer reussì""Il certificat COVID è arrivà""Quant ditg è il certificat COVID valaivel?""En Svizra è l'obligatori dal certificat vegnì abolì il favrer 2022. Las duradas da valaivladad svizras existan dapi lura mo anc formalmain e n'han praticamain nagina impurtanza pli en Svizra. A l'exteriur valan mintgamai las reglas da valaivladad dal pajais respectiv. As infurmai curt avant Vossa partenza sur la pagina d'internet da las autoritads da Voss pajais da transit u da destinaziun, sch'i valan en il pajais anc mesiras sin basa dal certificat, e sche gea, tge duradas da valaivladad che Voss pajais da destinaziun ha fixà. Pagina d'internet utila per viadis a l'exteriur:""Re-open EU (europa.eu)""https://reopen.europa.eu/de""Poss jau er duvrar l'app offline?""Vus pudais duvrar l'app senza ina colliaziun cun l'internet. Er en il modus offline pon ils certificats vegnir preschentads sco er scannads e verifitgads da las controlladras e dals controlladers.""Tge èn ils criteris da valaivladad actuals da la Svizra?""La durada da valaivladad vertenta actuala dals certificats COVID chattais Vus qua:""Ulteriuras infurmaziuns""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624""Pon ils certificats er vegnir verifitgads offline?""Da princip pon ils certificats COVID er vegnir verifitgads senza ina colliaziun cun l'internet. Per far quai vegnan chargiadas giu regularmain d'in server central glistas da verificaziun actualisadas. Questas glistas da verificaziun arcunadas localmain na dastgan betg esser pli veglias che 48 uras.
Per actualisar las glistas da verificaziun sto l'app esser colliada cun l'internet e vegnir averta. L'actualisaziun succeda immediatamain ed automaticamain.""Scannar il code QR""Importar il PDF""Activar avis""Activar""Cumprova""Vaccinaziun incumpletta""Cumprova emessa ils
{DATE}""Ulteriuras infurmaziuns""https://bag-coronavirus.ch/zertifikat/wie-erhalte-ich-ein-covid-zertifikat-und-wie-verwende-ich-es/""Certificat light""Exportar""Tge è in certificat light?""Certificat light""Po vegnir duvrà mo en Svizra""Cuntegna mo il num, il prenum, la data da naschientscha ed ina signatura digitala""Valaivel per max. {LIGHT_CERT_VALIDITY_IN_H} uras""La conversiun dal certificat COVID en in certificat light succeda online.""Vus pudais deactivar da tut temp il certificat light per puspè midar al certificat COVID normal.""Deactivar""Activar""Il certificat light n'ha betg pudì vegnir activà""Per pudair activar il certificat light sto l'app esser online.""Valaivel mo cun in document da legitimaziun
e mo en Svizra""Exportar il certificat COVID""Or da las datas da Voss certificat COVID vegn creà in PDF che Vus pudais stampar u cundivider.""La creaziun dal document PDF succeda online.""Exportar""Il PDF n'ha betg pudì vegnir creà""Per pudair crear il PDF sto l'app esser online.""code QR""Nagina colliaziun cun l'internet""Empruvai pli tard anc ina giada.""Igl è capità in sbagl imprevis.""Certificat light""Exportar""Or da las datas da Voss certificat COVID vegn creà in PDF che Vus pudais stampar u cundivider.""La creaziun dal document PDF succeda online.""Exportar""Nagina colliaziun cun l'internet""Igl è capità in sbagl imprevis.""Igl è capità in sbagl imprevis.Empruvai pli tard anc ina giada.""Sche Vus activais il certificat light, vegn creà or da las datas da Voss certificat COVID in nov code QR che na cuntegna naginas datas da sanadad.""Entant ch'il certificat COVID normal po vegnir duvrà en il rom da sia valaivladad senza restricziuns tant en Svizra sco er en il stadis da la UE e da la AECL, po il certificat light vegnir duvrà mo en Svizra.Per motivs da la protecziun da datas sto il certificat light vegnir activà danovamain suenter {LIGHT_CERT_VALIDITY_IN_H} uras. El na porta nagins dretgs supplementars en cumparegliaziun cun il certificat COVID normal. ""mo danovamain nagins""reducì""extendì""Update""Certificat light""Cun quest update pudais Vus laschar generar en l'app ina copia dal certificat senza las datas da sanadad per il diever en Svizra. Per quest intent èn vegnidas actualisadas las cundiziuns d'utilisaziun e la decleraziun davart la protecziun da datas che valan sco acceptadas, sche Vus duvrais vinavant l'app.""Update""Certificat light""Cun quest update pudais Vus verifitgar en l'app er la copia dal certificat senza las datas da sanadad. Per quest intent èn vegnidas actualisadas las cundiziuns d'utilisaziun e la decleraziun davart la protecziun da datas che valan sco acceptadas, sche Vus duvrais vinavant l'app.""La valaivladad dal certificat
è scadida""Light""Tge è in certificat light?""L'app «COVID Certificate» permetta a las possessuras ed als possessurs da certificats COVID da generar ina copia dal certificat COVID che cuntegna ina quantitad minimala da datas. Il «certificat light» conferma ch'igl è avant maun in certificat COVID valaivel, na cuntegna però naginas datas da sanadad.
Quest certificat cun ina quantitad minimala da datas è vegnì sviluppà sco alternativa al certificat COVID sin giavisch da l'Incumbensà federal per la protecziun da datas e per la transparenza (IFPDT), perquai ch'ils certificats COVID cuntegnan tschertas datas da sanadad ch'èn visiblas, sco per exempel il vaccin u la data da la vaccinaziun. Cun agid dal «certificat light» vegn quai impedì.
Il «certificat light» è disponibel mo en moda electronica entaifer l'app e vegn renconuschì mo en Svizra. Per motivs da la protecziun da datas ha il «certificat light» ina durada da valaivladad maximala da {LIGHT_CERT_VALIDITY_IN_H} uras e sto alura vegnir activà danovamain. Sch'il certificat normal vegn duvrà avant che las {LIGHT_CERT_VALIDITY_IN_H} uras èn passadas, po il «certificat light» simplamain vegnir deactivà.""Tge è in certificat light?""L'app «COVID Certificate» permetta a las possessuras ed als possessurs da certificats COVID da generar ina copia dal certificat COVID che cuntegna ina quantitad minimala da datas. Quest «certificat light» mussa mo ch'i è avant maun in certificat COVID valaivel, na cuntegna però naginas datas da sanadad.
L'alternativa al certificat COVID è vegnida sviluppada sin giavisch da l'Incumbensà federal per la protecziun da datas e per la transparenza (IFPDT), perquai che terzas persunas pudessan – en il rom da la verificaziun da certificats COVID e cun apps sviluppadas sez – prender invista da datas da sanadad, sco per exempel dal vaccin u da la data da la vaccinaziun. Cun agid dal «certificat COVID» vegn quai impedì.
Il «certificat light» è disponibel mo en moda electronica entaifer l'app e vegn renconuschì mo en Svizra. Per motivs da la protecziun da datas ha il «certificat light» ina durada da valaivladad maximala da {LIGHT_CERT_VALIDITY_IN_H} uras e sto alura vegnir activà danovamain. Sch'il certificat normal vegn duvrà gia pli baud, po il certificat light simplamain vegnir deactivà.""Co po in certificat light puspè vegnir transfurmà en in certificat COVID confurm a la UE/AECL?""La possessura u il possessur po deactivar da tut temp il certificat light en l'app «COVID Certificate». Alura stat puspè a disposiziun il certificat COVID normal. ""Anc valaivel {TIMESPAN}""Copià il code da transfer""Tge è in code da transfer?""Cun ils codes da transfer pon ils certificats COVID vegnir transmess en moda svelta e segira. Sin questa via vegn il certificat COVID furnì directamain en l'app suenter in test dal coronavirus u ina vaccinaziun cunter COVID-19.""Jau hai il certificat COVID mo en moda digitala en l'app. Co survegn jau il certificat sco PDF u sin palpiri?""En la vista detagliada dal certificat COVID digital en l'app «COVID Certificate» chattais Vus la funcziun «Exportar». Uschia pudais Vus generar in PDF, l'arcunar ed al stampar.""market://details?id=ch.admin.bag.covidcertificate.wallet""market://details?id=ch.admin.bag.covidcertificate.verifier""La limita da 24 uras è cuntanschida""Il certificat light è gia vegnì activà memia savens durant las ultimas 24 uras.""Import betg reussì""La datoteca na cuntegna nagin code QR valaivel ubain il code QR n'ha betg pudì vegnir reconuschì.""Sbagl nunspetgà""Contactai per plaschair il support""+41 58 466 07 99""Sbagl da decodaziun""In arcun da l'app n'ha betg pudì vegnir decodà. Per pudair utilisar vinavant l'app, sto l'arcun vegnir stizzà e creà da nov. Cun far quai van a perder datas.""Parameters""Lingua""Date format used: dd.mm.yyyy""Producent e Num""Sbagl uras""Las uras ston esser configuradas endretg, per ch’ils codes da transfer funcziunian. Adattai Vossas uras ed empruvai anc ina giada.""Copià il UVCI""Argovia""https://www.ag.ch/coronavirus-impfung""Appenzell Dadora""https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/""Appenzell Dadens""https://www.ai.ch/coronavirus-impfung""Basilea-Champagna""https://www.bl.ch/impfen""Basilea-Citad""http://www.coronaimpfzentrumbasel.ch""Berna""http://www.be.ch/corona-impfung""Friburg""https://www.fr.ch/sante/covid-19/covid-19-vaccination""Genevra""https://www.ge.ch/se-faire-vacciner-contre-covid-19""Glaruna""https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung""Grischun""https://www.gr.ch/RM/instituziuns/administraziun/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx""Giura""https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html""Lucerna""http://www.lu.ch/covid_impfung""Neuchâtel""https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx""Sutsilvania""https://www.nw.ch/gesundheitsamtdienste/6044#Impfung""Sursilvania""https://www.ow.ch/dienstleistungen/7129""Son Gagl""https://www.sg.ch/coronavirus/impfen""Schaffusa""https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html""Sviz""https://www.sz.ch/corona-impfen""Soloturn""https://so.ch/coronaimpfung""Turgovia""https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590""Tessin""http://www.ti.ch/vaccinazione""Uri""https://www.ur.ch/themen/3673""Vallais""https://www.vs.ch/de/web/coronavirus#ancre_vaccination""Vad""https://vd.ch/coronavirus-vaccins""Zug""https://www.corona-impfung-zug.ch/""Turitg""http://www.zh.ch/coronaimpfung""Sa laschar vaccinar ussa!""Cun la vaccinaziun cunter COVID-19 pudais Vus viagiar libramain en la gronda part dals pajais.""Sa laschar vaccinar ussa!""Cun la vaccinaziun cunter COVID-19 pudais Vus As proteger cunter ina infecziun e cunter in eventual grev decurs da la malsogna.""Sa laschar vaccinar ussa!""Cun la vaccinaziun cunter COVID-19 pudais Vus As immunisar en moda segira.""Sa laschar vaccinar ussa!""Cun la vaccinaziun cunter COVID-19 pudais Vus gidar a reducir la chargia da la malsogna.""Sa laschar vaccinar ussa!""Cun la vaccinaziun cunter COVID-19 pudais Vus gidar a cumbatter cunter las consequenzas da la pandemia.""Sa laschar vaccinar ussa!""Cun la vaccinaziun cunter COVID-19 pudais Vus evitar las consequenzas da lunga durada d'ina infecziun cun COVID-19.""Sa laschar vaccinar ussa!""Cun la vaccinaziun cunter COVID-19 pudais Vus gidar a distgargiar il sistem da sanadad.""Reservar in termin da vaccinaziun en Vossa vischinanza""Ina vaccinaziun pudess per exempel vegnir fatga en quests lieus en Vossa vischinanza:
- en centers da vaccinaziun specifics
- en ospitals
- tar Vossa media u tar Voss medi da chasa
- en apotecas da vaccinaziun
Blers lieus porschan er vaccinaziuns «walk-in» senza termin.""La vaccinaziun cunter COVID-19 è recumandada per persunas a partir da 5 onns.""Termin da vaccinaziun""Reservar in termin da vaccinaziun""Tscherni Voss chantun""Ulteriuras infurmaziuns davart la vaccinaziun cunter COVID-19""Infurmaziuns davart la vaccinaziun""https://bag-coronavirus.ch/impfung/""Identifitgà il scanner d'indriz tecnic extern""Reinizialisar""Ils certificats n’han betg pudì vegnir chargiads
Code: {ERROR_CODE}""Guariziun (Anticorpuls)""Verificaziun betg pussaivla""La data, las uras u la zona da temp sin l'apparat n'èn betg configuradas correctamain.""Vulais Vus verifitgar certificats?""Per ina verificaziun pli svelta e confurma a la protecziun da datas, utilisai l'app «COVID Certificate Check».""Tar l'app «COVID Certificate Check»""Chapì""«COVID Certificate Check»-App.""Betg valaivel ordaifer la Svizra""Diagnosa""Suffizient""Cumenzament da la valaivladad""Post responsabel per l'emissiun""Certificat excepziunal""A disposiziun versiun nova""Chargiai giu la nova versiun da l'app.""Actualisar""Il check da vaccinaziun COVID-19 As infurmescha davart las emprimas vaccinaziuns sco er davart las vaccinaziuns da rinfrestgament ed As maina al post da consultaziun correspundent da Voss chantun. ""Al check da vaccinaziun""https://covid19.impf-check.ch/""Reservar in termin ussa""Video explicativ""https://youtu.be/DClLZIUjr3w""Tscherner""Verifitgar ({MODE})""Il modus da verificaziun che Vus avais tschernì n’exista betg pli.""Info""Access a manaschis ed ad occurrenzas per persunas vaccinadas u guaridas.""Nagin access.""3G""2G""Per manaschis ed occurrenzas cun ina regla da 3G.""En quest modus vegnan acceptads certificats COVID per persunas vaccinadas, per persunas guaridas u per persunas cun in test negativ.""En quest modus po vegnir verifitgà in certificat light.""Per manaschis ed occurrenzas cun ina regla da 2G.""En quest modus vegnan acceptads ils certificats COVID per persunas vaccinadas u per persunas guaridas.""“Certificat light” na po betg vegnir verifitgà en il modus da verificaziun da 2G.""Modus da verificaziun""Access a manaschis ed ad occurrenzas per persunas vaccinadas, guaridas u cun in test negativ.""Nagin access.""Qua sa tracti d’in certificat light. In tal certificat na po betg vegnir verifitgà en il modus da verificaziun da {MODUS}.""Il certificat po en quest cas vegnir verifitgà mo, sch’il certificat light vegn midà enavos ad in certificat normal.""Tscherni il modus da verificaziun, en il qual Vus vulais verifitgar ils certificats COVID.""Il modus da verificaziun po vegnir midà da tut temp.""2G+""Per manaschis ed occurrenzas, nua ch’i vegn verifitgà tenor la regla da 2G+.""Ultra d’in certificat COVID per persunas vaccinadas e guaridas dovri in certificat d'in test valaivel che sto vegnir verifitgà separadamain.""Excepziuns: Persunas ch'èn vegnidas vaccinadas cumplettamain, che han laschà rinfrestgar la vaccinaziun u ch'èn guaridas (sin basa d'in test da PCR) avant maximalmain 120 dis""En quest modus na pon vegnir verifitgads nagins certificats light.""Certificat COVID valaivel tenor la regla da 2G""Certificat COVID valaivel per persunas testadas""Admess per 2G+ mo en cumbinaziun cun la verificaziun d’in certificat d'in test valaivel.""Admess per 2G+ mo en cumbinaziun cun la verificaziun d’in certificat COVID per persunas vaccinadas u guaridas.""Per verifitgar in tal certificat COVID dovri la versiun da l’app da verificaziun la pli nova. Actualisai per plaschair Vossa app ed empruvai anc ina giada.""Al App Store""Certificat d'in test""Per secturs che dovran in certificat d'in test valaivel.""En quest modus vegnan acceptads certificats COVID per persunas cun in test negativ sin basa d’in test da PCR u d’in test svelt d’antigens.""En quest modus na pon vegnir verifitgads nagins certificats light.""La «buttun da refresh» è vegnida stizzada.""Sche Voss certificat COVID è spirà u sch’el n’è tecnicamain betg valaivel, vegn quai inditgà directamain sin il certificat.""Ils certificats COVID ston vegnir verifitgads cun l’app «COVID Certificate Check».""Per las persunas che verifitgeschan""Dapli infurmaziuns""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1070048217""Access a manaschis ed ad occurrenzas per persunas ch’èn vaccinadas cumplettamain, che han laschà rinfrestgar la vaccinaziun u ch’èn guaridas (sin basa d’in test da PCR) avant maximalmain 120 dis. Vus na duvrais nagin certificat da test supplementar.""Per l’access a manaschis ed ad occurrenzas dovri ultra dal certificat COVID per persunas vaccinadas u guaridas in test negativ.""Infurmaziun""L'attest dal medi è vegnì emess a""Quest attest n'è betg in document da viadi.
<br /><br />
Quest certificat è valaivel mo per in tschert temp. La durada da valaivladad actuala en Svizra pudais Vus verifitgar da tut temp cun l'app «Covid-Certificate».""Excepziun""Guariziun (Test svelt d'antigens)""Data da l'emprim resultat positiv""Quest attest n'è betg in document da viadi.
<br /><br />
Quest certificat è valaivel mo per in tschert temp. La durada da valaivladad actuala en Svizra pudais Vus verifitgar da tut temp cun l'app «Covid-Certificate».""Scada bainbaud""Info""Quest certificat scada bainbaud.""Dapli infurmaziuns?""Info""Quest certificat COVID è valaivel mo pli intgins dis. Resguardai per plaschair la data da scadenza inditgà sin il certificat.""Ed uss?""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/was-soll-ich-tun-wenn-mein-covid-zertifikat-nach-schweizer-gueltigkeitsregeln-bald""Valaivladad pli curta""Valaivladad pli curta""Quest certificat scada bainbaud.""Dapli infurmaziuns""Info""A partir dals 31-01-2022 valan en Svizra duradas da valaivladad reducidas da 270 dis empè da 365 dis per certificats COVID per persunas vaccinadas u guaridas. Quest certificat è pertutgà directamain da la valaivladad pli curta:""Quest certificat COVID na po betg pli vegnir duvrà a partir dals 31-01-2022, perquai che la durada da valaivladad è lura gia scadida.""Dapli infurmaziuns""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/warum-wird-die-gueltigkeitsdauer-der-zertifikate-fuer-eine-impfung-oder-eine""Tegnair en salv il certificat!""Sche Vus stizzais l'app, midais u perdais Voss smartphone, van er a perder Voss certificats COVID.
Tegnai perquai en salv Voss certificats er ordaifer l'app cun exportar quels sco PDF.""Dapli infurmaziuns""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/ich-habe-das-covid-zertifikat-ausschliesslich-elektronisch-der-covid-certificate""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/ich-habe-das-covid-zertifikat-ausschliesslich-elektronisch-der-covid-certificate""Emprim""Segund""Terz""Valaivladad en l'exteriur""Valaivladad per viadis a l'exteriur""Vegni a savair avant in viadi a l'exteriur, sche Voss certificat COVID è valaivel il mument da l'entrada en il pajais da destinaziun.""Verifitgar per:""Pajais:""Selecziunar""Entrada ils:""Las uras inditgadas èn en il passà""Infurmaziuns""Dapli infurmaziuns chattais Vus sut""Tscherni per plaschair in pajais e la data d'entrada.""Tscherner in pajais""Valaivel per entrar en:""Betg valaivel per entrar en:""{COUNTRY}, {DATE}""Sbagl cun chargiar ils pajais disponibels""Per verifitgar la valaivladad sto Voss smartphone esser collià cun l’internet.""Las reglas d'entrada pon sa midar. Verifitgai perquai la valaivladad curt avant che Vus partis ed As infurmai ultra da quai online davart las reglas d'entrada actualas dal pajais da destinaziun.""Las infurmaziuns qua survart sa refereschan mo a las reglas d'entrada dal pajais da destinaziun. Per secturs che pretendan eventualmain in certificat entaifer il pajais pon valair autras reglas.""Per l'actualitad e la cumplettadad da las infurmaziuns na surpiglia la Confederaziun nagina responsabladad.""N'avais Vus betg chattà Voss pajais da destinaziun? Betg tut ils pajais n'acceptan certificats COVID, u i n'èn vegnidas messas a disposiziun naginas infurmaziuns davart eventualas reglas d'entrada.""reopen.europa.eu""https://reopen.europa.eu/""Nov: Versiun cumpatibla cun il certificat da la UE""Per quest certificat COVID po vegnir dumandada ina versiun cumpatibla cun il certificat da la UE.""Dapli infurmaziuns""Dumandar in certificat COVID (cumpatibel cun il certificat da la UE)""Da nov vegnan ils certificats COVID per persunas guaridas sin basa da tests svelts d'antigens acceptads er en la UE.
Per quest certificat pudais Vus dumandar ina versiun cumpatibla cun il certificat da la UE. La dumonda per in tal certificat pudais Vus far al Post naziunal da dumondas.""Al formular online dal Post naziunal da dumondas""Jau sun d'accord che las datas da quest certificat COVID vegnan transferidas en il formular dal Post naziunal da dumondas (ina pagina d'internet da la Confederaziun).""Al formular""Pagina d'internet dal Post naziunal da dumondas (senza transferiment da datas)""Sche la dumonda vegn acceptada, survegnis Vus il nov certificat COVID cumpatibel cun il certificat da la UE per posta. Quel pudais Vus alura arcunar en Vossa app. I n'è betg pussaivel d'As consegnar il certificat directamain en l'app.""Cun transferir las datas dal certificat en il formular online po Vossa dumonda vegnir tractada en moda pli simpla.""https://covidcertificate-form.admin.ch/immunityrequest""Ulteriuras infurmaziuns""Tge vul quai dir?""Tecnicamain valan ils codes QR dals certificats COVID mo per ina tscherta durada.""Per che quest certificat possia vegnir verifitgà er vinavant (p.ex. sin viadis) sto il code QR vegnir renovà.""La renovaziun pudais Vus far sezza u sez qua en l'app (ina colliaziun d'internet è necessaria). Las datas dal certificat actual vegnan transmessas da l'app en moda codada al sistem federal per l'emissiun da certificats COVID. In nov code QR vegn alura tramess enavos a l'app. Silsuenter vegnan las datas stizzadas là.""Pertge che Vus duessas renovar il code QR er, sche Voss certificat da vaccinaziun u da guariziun scada bainbaud u è gia scadì tenor las reglas da valaivladad en Svizra, pudais Vus leger en questa FAQ.""Tge vul quai dir?""Tecnicamain valan ils codes QR dals certificats COVID mo per ina tscherta durada.""Per che quest certificat possia vegnir verifitgà er vinavant (p.ex. sin viadis) sto il code QR vegnir renovà.""La renovaziun pudais Vus far sezza u sez qua en l'app (ina colliaziun d'internet è necessaria). Las datas dal certificat actual vegnan transmessas da l'app en moda codada al sistem federal per l'emissiun da certificats COVID. In nov code QR vegn alura tramess enavos a l'app. Silsuenter vegnan las datas stizzadas là.""Pertge che Vus duessas renovar il code QR er, sche Voss certificat da vaccinaziun u da guariziun scada bainbaud u è gia scadì tenor las reglas da valaivladad en Svizra, pudais Vus leger en questa FAQ.""Impurtant!""Remplazzai per plaschair tras questa nova versiun er ils certificats che Vus avais arcunà u stampà pli baud.""Quant ditg ch'ina vaccinaziun vegn renconuschida en in pajais, n'è betg fixà en il certificat. Quai vegn calculà a chaschun da la verificaziun tenor las reglas dal pajais che fa la verificaziun. La renovaziun dal code QR garantescha unicamain l'utilisaziun tecnica dal code QR""QR code expiration date (technical)
{DATE}""Renovar il code QR!""Per pudair duvrar vinavant quest certificat sto il code QR vegnir renovà""Dapli infurmaziuns""Renovar il code QR""Data da scadenza dal code QR""La data da la scadenza tecnica da quest code QR è (bainbaud) arrivada.""Il code QR vegn renovà""Il code QR è vegnì renovà cun success.""Nagina colliaziun cun l'internet""Per pudair renovar il code QR sto l'app esser online.""Igl è capità in sbagl imprevis.""Empruvai pli tard anc ina giada""Renovà cun success""Remplazzai per plaschair tras questa nova versiun er versiuns gia arcunadas e stampadas da quest certificat.""Dapli infurmaziuns""La data da la scadenza tecnica da quest code QR è arrivada.""La limita da 24 uras è cuntanschida""Code QR renovà memia savens. Renovaziun bloccada temporarmain.""A la FAQ""https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat""Actualisaziun""Las cundiziuns d’utilisaziun e la decleraziun davart la protecziun da datas da l’app èn vegnidas actualisadas en tscherts puncts ed adattadas a las basas legalas. ""Data da la vaccinaziun""Data dal test negativ""avant""1 ura""{HOURS} uras""1 di""{DAYS} dis""Tge è nov?""Sin il certificat COVID vegn da nov betg pli mussà il champ «Valaivladad en Svizra». Empè da quai mussa l'app la data da la vaccinaziun resp. dal test. Pertge?""Certificats COVID en Svizra""En Svizra è l'obligatori dal certificat vegnì abolì il favrer 2022.""Las duradas da valaivladad svizras existan dapi lura mo anc formalmain e n'han nagina impurtanza pratica pli en Svizra.""La durada da valaivladad svizra n'ha er nagina impurtanza a l'exteriur.""Certificats COVID a l'exteriur""A l'exteriur valan mintgamai las reglas dal pajais respectiv.""Da nov mussa l'app, avant quants dis ch'igl è vegnì fatg ina vaccinaziun resp. in test.""Uschia pudais Vus constatar en moda pli simpla, sche Voss certificat correspunda a las reglas da Voss pajais da destinaziun (premess ch'il pajais pretenda anc in certificat).""La situaziun actuala en l'Europa e sin l'entir mund""La gronda part dals pajais en l'Europa ha entant abolì l'obligatori dal certificat per l'entrada en il pajais.""La funcziun «Valaivladad a l'exteriur» è perquai medemamain vegnida stizzada.""Sche l'obligatori dal certificat vala anc en in tschert pajais, vegnis Vus a savair sin questas paginas d'internet:""reopen.europa.eu""https://reopen.europa.eu""iatatravelcentre.com""https://www.iatatravelcentre.com""avant pli che""Data dal test positiv""Abolì l'obligatori dal certificat""Abolì l'obligatori dal certificat""En Svizra è l'obligatori dal certificat vegnì abolì il favrer 2022.""Las duradas da valaivladad svizras existan dapi lura mo anc formalmain e n'han nagina impurtanza pratica pli en Svizra.""Questa app svizra da controlla controllescha certificats COVID tenor las reglas da valaivladad svizras. Il resultat da la controlla n'è betg relevant per il diever a l'exteriur.""Sch'in pajais premetta anc in certificat COVID, valan mintgamai las reglas dal pajais respectiv.""Plattafurma naziunala da dumondas per il certificat COVID (admin.ch)""https://covidcertificate-form.admin.ch/immunityrequest""Jau fatsch in viadi a l'exteriur e dovrel in certificat COVID per entrar en il pajais. Tge stoss jau resguardar?""A l'exteriur valan mintgamai las reglas da valaivladad dal pajais respectiv, e quai tant per entrar en il pajais sco er per activitads entaifer il pajais da destinaziun. Per l'utilisaziun dal certificat entaifer il pajais da destinaziun pon valair autras reglas che per l'entrada en il pajais. Questas reglas pon midar a curta vista. As infurmai perquai curt avant Vossa partenza sur la pagina d'internet da las autoritads da Voss pajais da transit u da destinaziun, sch'i valan là anc reglas en connex cun COVID-19, e sche gea, tgeninas.""Seria da vaccinaziun incumpletta tenor ils standards internaziunals."
================================================
FILE: common/src/main/res/xml/network_security_config.xml
================================================
================================================
FILE: common/src/prod/java/ch/admin/bag/covidcertificate/common/debug/DebugFragment.kt
================================================
package ch.admin.bag.covidcertificate.common.debug
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
import android.content.Context
import androidx.fragment.app.Fragment
open class DebugFragment : Fragment() {
companion object {
fun newInstance(): DebugFragment = DebugFragment()
const val EXISTS = false
fun initDebug(context: Context) {}
}
}
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=f581709a9c35e9cb92e16f585d2c4bc99b2b1a5f85d2badbd3dc6bff59e1e6dd
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app"s APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
# Bouncy Castle included some JDK15 classes starting with v1.67 which fails with Jetifier.
# Since Jetifier is an Android tool to migrate old support to AndroidX dependencies, blacklisting BC should not make any difference
android.jetifier.ignorelist = bcprov-jdk15on
================================================
FILE: gradlew
================================================
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: loadConfigs.sh
================================================
#!/bin/bash
apps=("wallet" "verifier")
environments=("prod" "abn" "dev")
timestamp=$(date +%s%N | cut -b1-13)
for app in ${apps[@]}; do
for environment in ${environments[@]}; do
if [[ $environment = "prod" ]]; then
subdomain="cc-a" # Take the prod config from the ABN environment
output="${app}/src/main/assets/faq/config.json"
elif [ $environment = "abn" ]; then
subdomain="cc-a"
output="${app}/src/${environment}/assets/faq/config.json"
elif [ $environment = "dev" ]; then
subdomain="cc-d"
output="${app}/src/${environment}/assets/faq/config.json"
fi
versionName=$(cat "${app}/build.gradle" | sed -n -e 's/^.*versionName\s*"\(.*\)"$/\1/p')
url="https://www.${subdomain}.bit.admin.ch/app/${app}/v1/config?osversion=android&appversion=android-${versionName}&buildnr=${timestamp}"
echo "Loading fallback ${environment} config for ${app} from ${url}"
curl $url | jq > $output
done
done
================================================
FILE: settings.gradle
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
include ':common'
include ':verifier'
include ':wallet'
rootProject.name = "CovidCertificate"
================================================
FILE: verifier/.gitignore
================================================
/build
================================================
FILE: verifier/build.gradle
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'com.google.devtools.ksp' version '1.6.10-1.0.4'
id 'org.sonarqube' version '3.0'
id 'ch.ubique.gradle.ubdiag'
}
ext.readProperty = { paramName -> readPropertyWithDefault(paramName, null) }
ext.readPropertyWithDefault = { paramName, defaultValue ->
if (project.hasProperty(paramName)) {
return project.getProperties().get(paramName)
} else {
Properties properties = new Properties()
if (project.rootProject.file('local.properties').exists()) {
properties.load(project.rootProject.file('local.properties').newDataInputStream())
}
if (properties.getProperty(paramName) != null) {
return properties.getProperty(paramName)
} else {
return defaultValue
}
}
}
android {
compileSdkVersion 31
defaultConfig {
applicationId "ch.admin.bag.covidcertificate.verifier"
minSdkVersion readPropertyWithDefault('minSdkVersion', '23').toInteger()
targetSdkVersion 31
versionCode 4_10_00_00
versionName "4.10.0"
// Stops the Gradle plugin’s automatic rasterization of vectors
generatedDensities = []
buildConfigField "long", "BUILD_TIME", readPropertyWithDefault('buildTimestamp', System.currentTimeMillis()) + 'L'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
productFlavors {
// These app tokens are reserved for the official COVID Certificate Check app.
// If you intend to integrate the CovidCertificate-SDK into your app, please get in touch with BIT/BAG to get a token assigned.
dev {
buildConfigField "String", "BASE_URL", '"https://www.cc-d.bit.admin.ch/app/verifier/v1/"'
buildConfigField "String", "SDK_APP_TOKEN", '"7f64903d-4420-4cc3-ac90-c14306b5e556"'
applicationIdSuffix '.dev'
}
abn {
buildConfigField "String", "BASE_URL", '"https://www.cc-a.bit.admin.ch/app/verifier/v1/"'
buildConfigField "String", "SDK_APP_TOKEN", '"f731fd3b-cb55-4cfd-9c46-fb3a927ffcd8"'
applicationIdSuffix '.abn'
}
prod {
buildConfigField "String", "BASE_URL", '"https://www.cc.bit.admin.ch/app/verifier/v1/"'
buildConfigField "String", "SDK_APP_TOKEN", '"25958ed0-7790-4846-9341-7c7ef87ec389"'
}
}
flavorDimensions "version"
signingConfigs {
release {
storeFile file(readPropertyWithDefault('keystoreFile', 'testKeystore'))
storePassword readProperty('keystorePassword')
keyAlias readPropertyWithDefault('keyAlias', 'keyAlias')
keyPassword readProperty('keyAliasPassword')
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
viewBinding true
}
}
sonarqube {
properties {
property "sonar.projectName", "COVID Certificate Check App Android"
property "sonar.projectKey", "admin-ch_CovidCertificate-App-Android"
property "sonar.organization", "admin-ch"
property "sonar.host.url", "https://sonarcloud.io"
}
}
dependencies {
implementation 'com.google.android.material:material:1.5.0'
implementation project(':common')
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.fragment:fragment-ktx:1.4.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
implementation "androidx.viewpager2:viewpager2:1.0.0"
implementation 'androidx.security:security-crypto:1.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1'
implementation 'com.squareup.moshi:moshi:1.13.0'
ksp "com.squareup.moshi:moshi-kotlin-codegen:1.13.0"
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
================================================
FILE: verifier/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
================================================
FILE: verifier/src/abn/assets/faq/config.json
================================================
{
"forceUpdate": false,
"infoBox": null,
"questions": null,
"works": {
"de": {
"faqTitle": "So werden Covid-Zertifikate geprüft",
"faqSubTitle": "Mit der COVID Certificate Check App können QR-Codes auf Covid-Zertifikaten gescannt und die Zertifikate auf Echtheit und Gültigkeit überprüft werden.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Wie können Covid-Zertifikate geprüft werden?",
"text": "Um ein Covid-Zertifikat zu prüfen, scannen Sie den QR-Code auf dem Papierzertifikat oder in der vorgewiesenen COVID Certificate App mit der dafür vorgesehenen COVID Certificate Check App.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Erklärvideo",
"linkUrl": "https://youtu.be/DClLZIUjr3w"
},
{
"title": "Was wird genau geprüft?",
"text": "Beim Scannen werden drei Aspekte geprüft:\n– Enthält das Zertifikat eine gültige elektronische Signatur?\n– Ist das Zertifikat nicht widerrufen worden?\n– Entspricht das Zertifikat den Gültigkeitskriterien der Schweiz?\n\nWenn alle drei Aspekte positiv bewertet werden, wird das Covid-Zertifikat als gültig ausgewiesen.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was sind die aktuellen Gültigkeitskriterien der Schweiz?",
"text": "Die aktuell geltende Gültigkeitsdauer von Covid-Zertifikaten finden Sie hier:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Weitere Informationen",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Welche Ausweisdokumente sind gültig? Weshalb müssen die Personalien überprüft werden?",
"text": "Neben Pass oder ID werden auch andere Ausweisdokumente akzeptiert, die die Identität der betreffenden Person mit einem Foto belegen (z.B. Führerausweis). Das Covid-Zertifikat ist zwar fälschungssicher, mit der Überprüfung der Personalien wird aber erst sichergestellt, dass das vorgezeigte Zertifikat auch auf den Vorweisenden ausgestellt wurde.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Welche Daten sehe ich beim Prüfvorgang?",
"text": "Beim Prüfvorgang sehen Sie nur den Namen und das Geburtsdatum der Zertifikatsinhaberin oder des Zertifikatsinhabers und ob das Covid-Zertifikat gültig ist.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Werden beim Prüfvorgang in der COVID Certificate Check App oder in einem zentralen System Daten gespeichert?",
"text": "Nein, beim Prüfvorgang werden keine Daten gespeichert - weder in der COVID Certificate Check App noch in einem zentralen System. Es ist somit nicht möglich nachzuvollziehen, welches Covid-Zertifikat von wem, wann und wo überprüft wurde.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Können Zertifikate auch offline geprüft werden?",
"text": "Grundsätzlich können Covid-Zertifikate auch ohne eine Internetverbindung geprüft werden. Dazu werden regelmässig aktualisierte Prüflisten von einem zentralen Server heruntergeladen. Diese lokal gespeicherten Prüflisten dürfen nicht älter als 48h sein. \n\nUm die Prüflisten zu aktualisieren muss die App mit dem Internet verbunden sein und geöffnet werden. Die Aktualisierung erfolgt unmittelbar und automatisch.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was ist das Zertifikat Light?",
"text": "Die «COVID Certificate»-App bietet Inhaberinnen und Inhabern von Covid-Zertifikaten die Möglichkeit, eine datenminimierte Zertifikatskopie zu generieren. Dieses «Zertifikat Light» zeigt lediglich das Vorliegen eines gültigen Covid-Zertifikats an, jedoch ohne Gesundheitsdaten zu enthalten. \n\nDie datenminimierte Alternative zum Covid-Zertifikat wurde auf Wunsch des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (EDÖB) entwickelt, da Dritte mit selbstentwickelten Apps bei der Prüfung von Covid-Zertifikaten Gesundheitsdaten wie beispielsweise Impfstoff oder Datum der Impfung einsehen könnten. Mittels dem «Zertifikat Light» wird dies verhindert.\n\nDas «Zertifikat Light» ist lediglich elektronisch innerhalb der App verfügbar und wird nur in der Schweiz anerkannt. Aus Datenschutzgründen hat das «Zertifikat Light» eine maximale Gültigkeitsdauer von 24 Stunden und muss danach erneut aktiviert werden. Wird das normale Zertifikat vor Ablauf der 24 Stunden benötigt, kann das Zertifikat Light einfach deaktiviert werden.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie kann ein Zertifikat Light wieder in ein EU/EFTA-konformes Covid-Zertifikat umgewandelt werden?",
"text": "Das Zertifikat Light kann durch die Halterin / den Halter jederzeit in der «COVID Certificate»-App deaktiviert werden. Danach steht das normale Covid-Zertifikat wieder zur Verfügung.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "How COVID certificates are checked",
"faqSubTitle": "The COVID Certificate Check app can be used to scan the QR codes on COVID certificates and check the certificates for authenticity and validity.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "How can COVID certificates be checked?",
"text": "To check a COVID certificate, use the dedicated COVID Certificate Check app to scan the QR code on the paper certificate or in the COVID Certificate app presented.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Explanatory video",
"linkUrl": "https://youtu.be/spfVPMqukjM"
},
{
"title": "What exactly is checked?",
"text": "Three aspects are checked when scanning:\n– Does the certificate contain a valid electronic signature?\n– Is the certificate unrevoked?\n– Does the certificate meet Switzerland's validity criteria?\n\nIf the answer to all three questions is affirmative, the COVID certificate is shown as valid.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What are the current validity criteria in Switzerland?",
"text": "The current validity period of COVID certificates can be found here:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Further information",
"linkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Which identification documents are valid? Why do personal details have to be checked?",
"text": "Aside from passports or ID cards, other photo identification documents that prove the identity of the person in question (e.g. driving licence) are also accepted. Although the COVID certificate is forgery-proof, the only way to ensure that the certificate shown was issued to the person presenting it is to check the personal details.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What data do I see during the verification process?",
"text": "During the verification process, you see only the certificate holder's name and date of birth, and whether the COVID certificate is valid.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Is any data stored in the COVID Certificate Check app or in a central system during the verification process?",
"text": "No, no data is stored during the verification process, be it in the COVID Certificate Check app or in a central system. Therefore, it is not possible to trace which COVID certificate was checked by whom, when and where.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Is it possible to verify the certificates offline?",
"text": "In principle, COVID certificates can also be verified without an Internet connection. For this purpose, regularly updated checklists are downloaded from a central server. These locally stored checklists must not be older than 48 hours. \n\nIn order to update the checklists, the app must be open and connected to the Internet. Updating occurs immediately and automatically.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What is the 'certificate light'",
"text": "The COVID Certificate app offers holders of COVID certificates the possibility of generating a copy of the certificate with minimised data. This 'certificate light' merely shows that the holder has a valid COVID certificate but does not contain any health-related data. \n\nThe alternative to the COVID certificate containing minimised data was developed at the wish of the Federal Data Protection and Information Commissioner (FDPIC) as third parties using apps they have developed themselves could be able to see health-related data such as the vaccine administered or date of vaccination when checking the certificate. The 'certificate light' prevents this.\n\nThe 'Certificate light' is only available electronically in the app and is only recognised in Switzerland. For data protection reasons the 'certificate light' is only valid for 24 hours and must then be reactivated. If you need to use the normal certificate before the end of the 24-hour period, you can simply deactivate the 'certificate light'.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How can a 'certificate light' be converted back into an EU/EFTA-compliant COVID certificate?",
"text": "The holder can deactivate a 'certificate light' any time in their COVID Certificate app. After that their normal COVID certificate is available again.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Contrôle de certificats COVID",
"faqSubTitle": "L'app de contrôle permet de scanner le code QR figurant sur un certificat COVID et de vérifier l'authenticité et la validité de ce dernier.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Comment contrôler un certificat COVID?",
"text": "Pour contrôler un certificat COVID, il vous suffit de scanner le code QR figurant sur le document papier ou dans l'app «COVID Certificate» au moyen de l'app de contrôle prévue à cet effet.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Vidéo explicative",
"linkUrl": "https://youtu.be/O-9YhJDI3ZI"
},
{
"title": "Sur quoi porte le contrôle au juste?",
"text": "Le scan du code QR permet de répondre aux trois questions suivantes:\n– Le certificat contient-il une signature électronique valable?\n– Le certificat a-t-il été révoqué?\n– Le certificat remplit-il les critères de validité fixés par la Suisse?\n\nSi vous pouvez répondre oui à la 1re et à la 3e question et non à la 2e, la validité du certificat COVID est attestée.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quels sont les critères de validité actuels de la Suisse ?",
"text": "Vous trouverez des informations sur la durée de validité actuelle du certificat COVID à l’adresse suivante :",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Informations supplémentaires",
"linkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Quelles pièces d'identité sont valables? Pourquoi faut-il vérifier les données personnelles?",
"text": "Outre le passeport et la carte d'identité, les pièces d'identité réputées valables sont celles qui attestent l'identité de la personne concernée au moyen d'une photo (par ex. permis de conduire). Le certificat COVID est certes infalsifiable, mais le contrôle des données personnelles est le seul moyen de vérifier que le certificat a été établi au nom de la personne qui le présente.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "À quelles données ai-je accès lors du contrôle?",
"text": "Lors du contrôle, vous n'avez accès qu'au nom et à la date de naissance du détenteur du certificat et voyez seulement si le certificat COVID est valable.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quid du stockage des données lors du contrôle?",
"text": "Aucune des données auxquelles vous avez accès lors du contrôle n'est stockée dans l'app ou dans un système central. Il est par conséquent impossible de savoir quel certificat COVID a été vérifié par qui, quand et où.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "La vérification des certificats est-elle possible hors ligne ?",
"text": "En principe, il est aussi possible de vérifier les certificats COVID sans connexion Internet. À cette fin, des listes de contrôle régulièrement mises à jour sont téléchargées à partir d’un serveur central. Elles sont enregistrées localement et ne doivent pas remonter à plus de 48 h.\n\nPour actualiser les listes de contrôle, l’application doit être ouverte et connectée à Internet. La mise à jour s’effectue immédiatement et automatiquement.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Qu’est-ce que le certificat light ?",
"text": "L’application « COVID Certificate » propose aux titulaires de certificats COVID la possibilité de générer une copie du certificat ne contenant que les données strictement nécessaires. Ce certificat « light » indique uniquement si le certificat présenté est valide, sans fournir de données sur la santé.\n\nL’alternative permettant de limiter les données du certificat COVID au strict minimum a été suggérée par le Préposé fédéral à la protection des données et à la transparence (PFPDT) ; en effet, des personnes tierces pourraient développer des applications leur donnant la possibilité de lire, lors de la vérification d’un certificat, les données sur la santé (p. ex. le type de vaccin et la date de la vaccination). Le certificat light empêche tout abus de ce genre.\n\nLe certificat light, reconnu uniquement en Suisse, n’est disponible que sous forme électronique. Pour des raisons de protection des données, il n’est valide que pendant 24 heures et doit ensuite être réactivé. Si le certificat normal est à nouveau nécessaire avant la fin de ce délai, il suffit de désactiver le certificat light.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Comment reconvertir un certificat light en certificat COVID conforme aux normes UE/AELE ?",
"text": "Le détenteur peut en tout temps désactiver le certificat light dans l’application «COVID Certificate». Le certificat COVID standard est alors à nouveau disponible.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Come avviene la verifica dei certificati COVID?",
"faqSubTitle": "Con l'app COVID Certificate Check è possibile scansionare i relativi codici QR e verificare l'autenticità e la validità dei certificati COVID.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Come posso verificare i certificati COVID?",
"text": "Per verificare un certificato COVID tramite l'app COVID Certificate Check, può scansionare il codice QR che trova sulla copia cartacea del certificato oppure sull’app che le viene mostrata.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Video esplicativo",
"linkUrl": "https://youtu.be/b4JXnfr2Ugg"
},
{
"title": "Cosa viene verificato esattamente?",
"text": "Scansionando il codice QR vengono verificati i seguenti tre aspetti.\n– Il certificato contiene una firma elettronica valida?\n– Il certificato è ancora valido?\n– Il certificato rispetta i criteri di validità previsti dalla normativa svizzera?\n\nSe tutti i tre aspetti sono valutati positivamente, il certificato COVID è considerato valido.\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quali sono attualmente i criteri di validità in Svizzera?",
"text": "L’attuale durata di validità dei certificati COVID è consultabile qui:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriori informazioni",
"linkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Quali documenti di legittimazione sono accettati o validi? Perché devono essere verificati i dati personali?",
"text": "Oltre al passaporto o alla carta d'identità sono accettati altri documenti che provano l'identità della persona in questione tramite una foto (ad es. licenza di condurre). Il certificato COVID non è falsificabile, tuttavia solo verificando i dati personali si garantisce che il certificato sia stato effettivamente rilasciato alla persona che lo sta mostrando.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quali dati posso visualizzare durante il processo di verifica?",
"text": "Durante il processo di verifica visualizzerà solo nome e cognome nonché la data di nascita del titolare del certificato e l'indicazione della validità del certificato.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Durante il processo di verifica vengono salvati dati nell'app COVID Certificate Check o in un sistema centrale?",
"text": "No, durante il processo di verifica non vengono salvati dati nell'app COVID Certificate Check né in un sistema centrale. In questo modo, non è possibile risalire a quali certificati sono stati verificati, da chi, quando e dove.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "I certificati possono essere verificati anche offline?",
"text": "In linea di principio, i certificati COVID possono essere verificati anche senza connessione Internet. A tale scopo, vengono scaricati regolarmente da un server centrale gli elenchi di verifica aggiornati. Questi elenchi salvati localmente non devono avere più di 48 ore. \n\nPer poter aggiornare gli elenchi di verifica, l’app deve essere aperta e collegata a Internet. L’aggiornamento avviene in modo immediato e automatico.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Che cos'è il certificato light?",
"text": "L'app «COVID Certificate» offre ai possessori di certificati COVID la possibilità di generare una copia del certificato con dati ridotti al minimo. Il certificato light indica semplicemente l'esistenza di un certificato valido, ma non contiene i dati sanitari.\n\nIl certificato con dati ridotti al minimo è un’alternativa al certificato COVID-19 ed è stato sviluppato su richiesta dell’Incaricato federale della protezione dei dati e della trasparenza (IFPDT), poiché le applicazioni autosviluppate per verificare i certificati COVID-19 consentirebbero a terzi di visualizzare i dati sanitari, ad esempio il vaccino somministrato o la data della vaccinazione. Ciò può essere evitato mediante il «certificato light».\n\nIl «certificato light» è disponibile unicamente in versione elettronica nell'app ed è riconosciuto solo in Svizzera. Per motivi legati alla protezione dei dati, il «certificato light» ha una validità massima di 24 ore e in seguito deve essere riattivato. Se si necessita del certificato normale prima che siano trascorse le 24 ore, il certificato light può essere disattivato semplicemente.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Come si fa a trasformare un certificato light nuovamente in un certificato COVID conforme all’UE/AELS?",
"text": "Il certificato light può essere disattivato dal titolare in qualsiasi momento nell’app «COVID Certificate», dopodiché il certificato COVID di base è di nuovo disponibile.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Uschia vegnan verifitgads ils certificats COVID",
"faqSubTitle": "Cun l'app COVID Certificate Check pon vegnir scannads ils codes QR sin ils certificats COVID per verifitgar l'autenticitad e la valaivladad dals certificats.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Co pon vegnir verifitgads ils certificats COVID?",
"text": "Per verifitgar in certificat COVID pudais Vus scannar il code QR sin Voss certificat sin palpiri u en l'app COVID Certificate cun l’app «COVID Certificate Check» previsa per quai.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Video explicativ",
"linkUrl": "https://youtu.be/DClLZIUjr3w"
},
{
"title": "Tge vegn propi verifitgà?",
"text": "Cun scannar vegnan verifitgads trais aspects:\n– Cuntegna il certificat ina signatura digitala valaivla?\n– N'è il certificat betg vegnì revocà?\n– Correspunda il certificat als criteris da valaivladad en Svizra?\n\nSche tut ils trais aspects vegnan valitads en moda positiva, vegn il certificat COVID considerà sco valaivel.\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge èn ils criteris da valaivladad actuals da la Svizra?",
"text": "La durada da valaivladad vertenta actuala dals certificats COVID chattais Vus qua:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriuras infurmaziuns",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Tge documents da legitimaziun vegnan acceptads resp. èn valaivels? Pertge ston vegnir verifitgadas las persunalias?",
"text": "Ultra dal passaport e da la ID vegnan acceptads er auters documents da legitimaziun valaivels che cumprovan l’identitad da la persuna pertutgada cun ina fotografia (p.ex. permiss dad ir cun auto). Il certificat COVID na po bain betg vegnir falsifitgà, però pir cun verifitgar las persunalias vegn controllà, sch'il certificat preschentà è vegnì emess per la persuna ch'al preschenta.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge datas ves jau tar la procedura da verificaziun?",
"text": "Tar la procedura da verificaziun vesais Vus mo il num e la data da naschientscha da la possessura u dal possessur dal certificat e sch'il certificat COVID è valaivel.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Vegnan arcunadas datas en in sistem central u en l'app COVID Certificate Check tar la procedura da verificaziun?",
"text": "Na, tar la procedura da verificaziun na vegnan arcunadas naginas datas – ni en l'app COVID Certificate Check ni en in sistem central? I n'è pia betg pussaivel d'identifitgar tge certificat COVID ch'è vegnì verifitgà da tgi, cura e nua.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Pon ils certificats er vegnir verifitgads offline?",
"text": "Da princip pon ils certificats COVID er vegnir verifitgads senza ina colliaziun cun l'internet. Per far quai vegnan chargiadas giu regularmain d'in server central glistas da verificaziun actualisadas. Questas glistas da verificaziun arcunadas localmain na dastgan betg esser pli veglias che 48 uras.\n\nPer actualisar las glistas da verificaziun sto l'app esser colliada cun l'internet e vegnir averta. L'actualisaziun succeda immediatamain ed automaticamain.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge è in certificat light?",
"text": "L'app «COVID Certificate» permetta a las possessuras ed als possessurs da certificats COVID da generar ina copia dal certificat COVID che cuntegna ina quantitad minimala da datas. Quest «certificat light» mussa mo ch'i è avant maun in certificat COVID valaivel, na cuntegna però naginas datas da sanadad.\n\nL'alternativa al certificat COVID è vegnida sviluppada sin giavisch da l'Incumbensà federal per la protecziun da datas e per la transparenza (IFPDT), perquai che terzas persunas pudessan – en il rom da la verificaziun da certificats COVID e cun apps sviluppadas sez – prender invista da datas da sanadad, sco per exempel dal vaccin u da la data da la vaccinaziun. Cun agid dal «certificat COVID» vegn quai impedì.\n\nIl «certificat light» è disponibel mo en moda electronica entaifer l'app e vegn renconuschì mo en Svizra. Per motivs da la protecziun da datas ha il «certificat light» ina durada da valaivladad maximala da 24 uras e sto alura vegnir activà danovamain. Sch'il certificat normal vegn duvrà gia pli baud, po il certificat light simplamain vegnir deactivà.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Co po in certificat light puspè vegnir transfurmà en in certificat COVID confurm a la UE/AECL?",
"text": "La possessura u il possessur po deactivar da tut temp il certificat light en l'app «COVID Certificate». Alura stat puspè a disposiziun il certificat COVID normal. ",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"androidTransferCheckIntervalMs": 0,
"androidTransferCheckBackoffMs": 0,
"timeshiftDetectionEnabled": false,
"checkModesInfos": {
"de": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Betriebe und Veranstaltungen, in welchen mit einer 3G-Regelung geprüft wird."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "In diesem Modus werden Covid-Zertifikate für Geimpfte, Genesene oder negativ Getestete akzeptiert."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "Die Prüfung von einem Zertifikat Light ist in diesem Modus möglich."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Betriebe und Veranstaltungen, in welchen mit einer 2G-Regelung geprüft wird."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "In diesem Modus werden Covid-Zertifikate für Geimpfte oder Genesene akzeptiert."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Die Prüfung von einem Zertifikat Light ist in diesem Modus nicht möglich."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Betriebe und Veranstaltungen, in welchen mit einer Regelung nach 2G+ geprüft wird."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Zusätzlich zu einem Covid-Zertifikat für Geimpfte oder Genesene wird ein gültiges Testzertifikat benötigt, welches separat geprüft werden muss."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Ausnahmen: Personen, deren vollständige Impfung, Auffrischimpfung oder Genesung nicht länger als 120 Tage zurückliegt."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Die Prüfung von Zertifikate Light ist in diesem Modus nicht möglich."
}
]
},
"TEST_CERT": {
"title": "Testzertifikat",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Bereiche, bei denen ein gültiges Testzertifikat notwendig ist."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "In diesem Modus werden Covid-Zertifikate für negativ Getestete basierend auf einem PCR- oder Antigen-Schnelltest akzeptiert."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Die Prüfung von Zertifikate Light ist in diesem Modus nicht möglich."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Wählen Sie den Prüfmodus, in welchem Sie Covid-Zertifikate prüfen möchten."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "Der Prüfmodus kann jederzeit geändert werden."
}
]
}
},
"en": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For organisations and events applying the 3G rule."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "In this mode, COVID certificates are accepted for people who have been vaccinated, or who have recovered or tested negative."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "It is possible to verify a \"light\" certificate in this mode."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For organisations and events applying the 2G rule."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "In this mode, COVID certificates are accepted for people who have been vaccinated or who have recovered."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "It is not possible to verify a \"light\" certificate in this mode."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For organisations and events applying the 2G+ rule."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "In addition to a COVID certificate for people who have been vaccinated or who have recovered, a valid test certificate is required. This must be verified separately."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Exceptions: People who have been fully vaccinated, received a booster vaccination or recovered (based on a PCR test) no longer than 120 days ago"
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "It is not possible to verify \"light\" certificates in this mode."
}
]
},
"TEST_CERT": {
"title": "Test certificate",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For areas in which a valid test certificate is required."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "In this mode, COVID certificates are accepted for people who have tested negative based on a PCR or rapid antigen test."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "It is not possible to verify \"light\" certificates in this mode."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Select the verification mode that you want to use for verifying COVID certificates."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "The verification mode can be changed at any time."
}
]
}
},
"fr": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pour les entreprises et les manifestations où les contrôles se fondent sur la règle des «3G»."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Ce mode de contrôle permet de vérifier les certificats COVID des personnes vaccinées, guéries ou testées négatives."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "Il peut être également utilisé pour vérifier un «certificat light»."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pour les entreprises et les manifestations où les contrôles se fondent sur la règle des «2G»."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Ce mode de contrôle permet de vérifier les certificats COVID des personnes vaccinées ou guéries."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "La vérification d’un «certificat light» n'est pas possible dans ce mode."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pour les entreprises et les manifestations qui appliquent la règle des 2G+."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "En plus d'un certificat COVID de vaccination ou de guérison, il faut présenter un certificat de test valable, qui doit être vérifié séparément."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Exceptions: les personnes dont la vaccination, la vaccination de rappel ou la guérison datent de moins de 120 jours"
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Ce mode ne permet pas de vérifier les «certificats light»."
}
]
},
"TEST_CERT": {
"title": "Certificat de test",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Destiné aux domaines qui nécessitent un certificat de test valable."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "Ce mode permet de vérifier les certificats des personnes qui disposent d'un résultat négatif à un test PCR ou à un test rapide antigénique."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Ce mode ne permet pas de vérifier les «certificats light»."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Choisissez le mode de contrôle correspondant aux certificats COVID à vérifier."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "Le mode de contrôle peut être changé en tout temps."
}
]
}
},
"it": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per le strutture e le manifestazioni in cui si applica la regola 3G."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "In questa modalità sono accettati i certificati COVID per persone vaccinate, guartite o testate negative."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "I certificati light possono essere verificati."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per le strutture e le manifestazioni in cui si applica la regola 2G."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "In questa modalità sono accettati i certificati COVID per persone vaccinate o guartite."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Questa modalità non permette di verificare i certificati light."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per strutture e manifestazioni cui si applica la regola 2G+."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Oltre a un certificato di vaccinazione o di guarigione COVID è richiesto un certificato di test valido, che deve essere verificato separatamente."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Eccezioni: Persone per le quali sono trascorsi al massimo 120 giorni dalla vaccinazione completa, dalla vaccinazione di richiamo o dalla guarigione."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "In questa modalità non è possibile verificare i certificati light."
}
]
},
"TEST_CERT": {
"title": "Certificato di test",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per i contesti in cui è richiesto un certificato di test valido."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "In questa modalità sono accettati i certificati COVID rilasciati alle persone risultate negative a un test PCR o a un test antigenico rapido."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "In questa modalità non è possibile verificare i certificati light."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Selezionare la modalità in cui verificare i certificati COVID."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "La modalità di verifica può essere cambiata in qualsiasi momento."
}
]
}
},
"rm": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per manaschis ed occurrenzas cun ina regla da 3G."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "En quest modus vegnan acceptads certificats COVID per persunas vaccinadas, per persunas guaridas u per persunas cun in test negativ."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "En quest modus po vegnir verifitgà in certificat light."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per manaschis ed occurrenzas cun ina regla da 2G."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "En quest modus vegnan acceptads ils certificats COVID per persunas vaccinadas u per persunas guaridas."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "“Certificat light” na po betg vegnir verifitgà en il modus da verificaziun da 2G."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per manaschis ed occurrenzas, nua ch’i vegn verifitgà tenor la regla da 2G+."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Ultra d’in certificat COVID per persunas vaccinadas e guaridas dovri in certificat d'in test valaivel che sto vegnir verifitgà separadamain."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Excepziuns: Persunas ch'èn vegnidas vaccinadas cumplettamain, che han laschà rinfrestgar la vaccinaziun u ch'èn guaridas (sin basa d'in test da PCR) avant maximalmain 120 dis"
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "En quest modus na pon vegnir verifitgads nagins certificats light."
}
]
},
"TEST_CERT": {
"title": "Certificat d'in test",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per secturs che dovran in certificat d'in test valaivel."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "En quest modus vegnan acceptads certificats COVID per persunas cun in test negativ sin basa d’in test da PCR u d’in test svelt d’antigens."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "En quest modus na pon vegnir verifitgads nagins certificats light."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Tscherni il modus da verificaziun, en il qual Vus vulais verifitgar ils certificats COVID."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "Il modus da verificaziun po vegnir midà da tut temp."
}
]
}
}
},
"checkModeReselectAfterHours": 2147483647
}
================================================
FILE: verifier/src/dev/assets/faq/config.json
================================================
{
"forceUpdate": false,
"infoBox": {
"de": {
"title": "Mock InfoBox Titel (de)",
"msg": "Ein Mock Text mit mehreren Zeilen.\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"url": "tel:+41583877780",
"urlTitle": "+41 58 387 77 80",
"isDismissible": false,
"infoId": "830796854"
},
"en": {
"title": "Mock InfoBox Titel (en)",
"msg": "Ein Mock Text mit mehreren Zeilen.\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"url": "tel:+41583877780",
"urlTitle": "+41 58 387 77 80",
"isDismissible": false,
"infoId": "830798094"
},
"fr": {
"title": "Mock InfoBox Titel (fr)",
"msg": "Ein Mock Text mit mehreren Zeilen.\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"url": "tel:+41583877780",
"urlTitle": "+41 58 387 77 80",
"isDismissible": false,
"infoId": "830799179"
},
"it": {
"title": "Mock InfoBox Titel (it)",
"msg": "Ein Mock Text mit mehreren Zeilen.\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"url": "tel:+41583877780",
"urlTitle": "+41 58 387 77 80",
"isDismissible": false,
"infoId": "830802124"
},
"rm": {
"title": "Mock InfoBox Titel (rm)",
"msg": "Ein Mock Text mit mehreren Zeilen.\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"url": "tel:+41583877780",
"urlTitle": "+41 58 387 77 80",
"isDismissible": false,
"infoId": "830810556"
}
},
"questions": null,
"works": {
"de": {
"faqTitle": "So werden Covid-Zertifikate geprüft",
"faqSubTitle": "Mit der COVID Certificate Check App können QR-Codes auf Covid-Zertifikaten gescannt und die Zertifikate auf Echtheit und Gültigkeit überprüft werden.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Wie können Covid-Zertifikate geprüft werden?",
"text": "Um ein Covid-Zertifikat zu prüfen, scannen Sie den QR-Code auf dem Papierzertifikat oder in der vorgewiesenen COVID Certificate App mit der dafür vorgesehenen COVID Certificate Check App.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Erklärvideo",
"linkUrl": "https://youtu.be/DClLZIUjr3w"
},
{
"title": "Was wird genau geprüft?",
"text": "Beim Scannen werden drei Aspekte geprüft:\n– Enthält das Zertifikat eine gültige elektronische Signatur?\n– Ist das Zertifikat nicht widerrufen worden?\n– Entspricht das Zertifikat den Gültigkeitskriterien der Schweiz?\n\nWenn alle drei Aspekte positiv bewertet werden, wird das Covid-Zertifikat als gültig ausgewiesen.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was sind die aktuellen Gültigkeitskriterien der Schweiz?",
"text": "Die aktuell geltende Gültigkeitsdauer von Covid-Zertifikaten finden Sie hier:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Weitere Informationen",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Welche Ausweisdokumente sind gültig? Weshalb müssen die Personalien überprüft werden?",
"text": "Neben Pass oder ID werden auch andere Ausweisdokumente akzeptiert, die die Identität der betreffenden Person mit einem Foto belegen (z.B. Führerausweis). Das Covid-Zertifikat ist zwar fälschungssicher, mit der Überprüfung der Personalien wird aber erst sichergestellt, dass das vorgezeigte Zertifikat auch auf den Vorweisenden ausgestellt wurde.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Welche Daten sehe ich beim Prüfvorgang?",
"text": "Beim Prüfvorgang sehen Sie nur den Namen und das Geburtsdatum der Zertifikatsinhaberin oder des Zertifikatsinhabers und ob das Covid-Zertifikat gültig ist.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Werden beim Prüfvorgang in der COVID Certificate Check App oder in einem zentralen System Daten gespeichert?",
"text": "Nein, beim Prüfvorgang werden keine Daten gespeichert - weder in der COVID Certificate Check App noch in einem zentralen System. Es ist somit nicht möglich nachzuvollziehen, welches Covid-Zertifikat von wem, wann und wo überprüft wurde.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Können Zertifikate auch offline geprüft werden?",
"text": "Grundsätzlich können Covid-Zertifikate auch ohne eine Internetverbindung geprüft werden. Dazu werden regelmässig aktualisierte Prüflisten von einem zentralen Server heruntergeladen. Diese lokal gespeicherten Prüflisten dürfen nicht älter als 48h sein. \n\nUm die Prüflisten zu aktualisieren muss die App mit dem Internet verbunden sein und geöffnet werden. Die Aktualisierung erfolgt unmittelbar und automatisch.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was ist das Zertifikat Light?",
"text": "Die «COVID Certificate»-App bietet Inhaberinnen und Inhabern von Covid-Zertifikaten die Möglichkeit, eine datenminimierte Zertifikatskopie zu generieren. Dieses «Zertifikat Light» zeigt lediglich das Vorliegen eines gültigen Covid-Zertifikats an, jedoch ohne Gesundheitsdaten zu enthalten. \n\nDie datenminimierte Alternative zum Covid-Zertifikat wurde auf Wunsch des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (EDÖB) entwickelt, da Dritte mit selbstentwickelten Apps bei der Prüfung von Covid-Zertifikaten Gesundheitsdaten wie beispielsweise Impfstoff oder Datum der Impfung einsehen könnten. Mittels dem «Zertifikat Light» wird dies verhindert.\n\nDas «Zertifikat Light» ist lediglich elektronisch innerhalb der App verfügbar und wird nur in der Schweiz anerkannt. Aus Datenschutzgründen hat das «Zertifikat Light» eine maximale Gültigkeitsdauer von 24 Stunden und muss danach erneut aktiviert werden. Wird das normale Zertifikat vor Ablauf der 24 Stunden benötigt, kann das Zertifikat Light einfach deaktiviert werden.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie kann ein Zertifikat Light wieder in ein EU/EFTA-konformes Covid-Zertifikat umgewandelt werden?",
"text": "Das Zertifikat Light kann durch die Halterin / den Halter jederzeit in der «COVID Certificate»-App deaktiviert werden. Danach steht das normale Covid-Zertifikat wieder zur Verfügung.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "How COVID certificates are checked",
"faqSubTitle": "The COVID Certificate Check app can be used to scan the QR codes on COVID certificates and check the certificates for authenticity and validity.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "How can COVID certificates be checked?",
"text": "To check a COVID certificate, use the dedicated COVID Certificate Check app to scan the QR code on the paper certificate or in the COVID Certificate app presented.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Explanatory video",
"linkUrl": "https://youtu.be/spfVPMqukjM"
},
{
"title": "What exactly is checked?",
"text": "Three aspects are checked when scanning:\n– Does the certificate contain a valid electronic signature?\n– Is the certificate unrevoked?\n– Does the certificate meet Switzerland's validity criteria?\n\nIf the answer to all three questions is affirmative, the COVID certificate is shown as valid.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What are the current validity criteria in Switzerland?",
"text": "The current validity period of COVID certificates can be found here:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Further information",
"linkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Which identification documents are valid? Why do personal details have to be checked?",
"text": "Aside from passports or ID cards, other photo identification documents that prove the identity of the person in question (e.g. driving licence) are also accepted. Although the COVID certificate is forgery-proof, the only way to ensure that the certificate shown was issued to the person presenting it is to check the personal details.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What data do I see during the verification process?",
"text": "During the verification process, you see only the certificate holder's name and date of birth, and whether the COVID certificate is valid.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Is any data stored in the COVID Certificate Check app or in a central system during the verification process?",
"text": "No, no data is stored during the verification process, be it in the COVID Certificate Check app or in a central system. Therefore, it is not possible to trace which COVID certificate was checked by whom, when and where.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Is it possible to verify the certificates offline?",
"text": "In principle, COVID certificates can also be verified without an Internet connection. For this purpose, regularly updated checklists are downloaded from a central server. These locally stored checklists must not be older than 48 hours. \n\nIn order to update the checklists, the app must be open and connected to the Internet. Updating occurs immediately and automatically.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What is the 'certificate light'",
"text": "The COVID Certificate app offers holders of COVID certificates the possibility of generating a copy of the certificate with minimised data. This 'certificate light' merely shows that the holder has a valid COVID certificate but does not contain any health-related data. \n\nThe alternative to the COVID certificate containing minimised data was developed at the wish of the Federal Data Protection and Information Commissioner (FDPIC) as third parties using apps they have developed themselves could be able to see health-related data such as the vaccine administered or date of vaccination when checking the certificate. The 'certificate light' prevents this.\n\nThe 'Certificate light' is only available electronically in the app and is only recognised in Switzerland. For data protection reasons the 'certificate light' is only valid for 24 hours and must then be reactivated. If you need to use the normal certificate before the end of the 24-hour period, you can simply deactivate the 'certificate light'.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How can a 'certificate light' be converted back into an EU/EFTA-compliant COVID certificate?",
"text": "The holder can deactivate a 'certificate light' any time in their COVID Certificate app. After that their normal COVID certificate is available again.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Contrôle de certificats COVID",
"faqSubTitle": "L'app de contrôle permet de scanner le code QR figurant sur un certificat COVID et de vérifier l'authenticité et la validité de ce dernier.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Comment contrôler un certificat COVID?",
"text": "Pour contrôler un certificat COVID, il vous suffit de scanner le code QR figurant sur le document papier ou dans l'app «COVID Certificate» au moyen de l'app de contrôle prévue à cet effet.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Vidéo explicative",
"linkUrl": "https://youtu.be/O-9YhJDI3ZI"
},
{
"title": "Sur quoi porte le contrôle au juste?",
"text": "Le scan du code QR permet de répondre aux trois questions suivantes:\n– Le certificat contient-il une signature électronique valable?\n– Le certificat a-t-il été révoqué?\n– Le certificat remplit-il les critères de validité fixés par la Suisse?\n\nSi vous pouvez répondre oui à la 1re et à la 3e question et non à la 2e, la validité du certificat COVID est attestée.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quels sont les critères de validité actuels de la Suisse ?",
"text": "Vous trouverez des informations sur la durée de validité actuelle du certificat COVID à l’adresse suivante :",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Informations supplémentaires",
"linkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Quelles pièces d'identité sont valables? Pourquoi faut-il vérifier les données personnelles?",
"text": "Outre le passeport et la carte d'identité, les pièces d'identité réputées valables sont celles qui attestent l'identité de la personne concernée au moyen d'une photo (par ex. permis de conduire). Le certificat COVID est certes infalsifiable, mais le contrôle des données personnelles est le seul moyen de vérifier que le certificat a été établi au nom de la personne qui le présente.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "À quelles données ai-je accès lors du contrôle?",
"text": "Lors du contrôle, vous n'avez accès qu'au nom et à la date de naissance du détenteur du certificat et voyez seulement si le certificat COVID est valable.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quid du stockage des données lors du contrôle?",
"text": "Aucune des données auxquelles vous avez accès lors du contrôle n'est stockée dans l'app ou dans un système central. Il est par conséquent impossible de savoir quel certificat COVID a été vérifié par qui, quand et où.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "La vérification des certificats est-elle possible hors ligne ?",
"text": "En principe, il est aussi possible de vérifier les certificats COVID sans connexion Internet. À cette fin, des listes de contrôle régulièrement mises à jour sont téléchargées à partir d’un serveur central. Elles sont enregistrées localement et ne doivent pas remonter à plus de 48 h.\n\nPour actualiser les listes de contrôle, l’application doit être ouverte et connectée à Internet. La mise à jour s’effectue immédiatement et automatiquement.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Qu’est-ce que le certificat light ?",
"text": "L’application « COVID Certificate » propose aux titulaires de certificats COVID la possibilité de générer une copie du certificat ne contenant que les données strictement nécessaires. Ce certificat « light » indique uniquement si le certificat présenté est valide, sans fournir de données sur la santé.\n\nL’alternative permettant de limiter les données du certificat COVID au strict minimum a été suggérée par le Préposé fédéral à la protection des données et à la transparence (PFPDT) ; en effet, des personnes tierces pourraient développer des applications leur donnant la possibilité de lire, lors de la vérification d’un certificat, les données sur la santé (p. ex. le type de vaccin et la date de la vaccination). Le certificat light empêche tout abus de ce genre.\n\nLe certificat light, reconnu uniquement en Suisse, n’est disponible que sous forme électronique. Pour des raisons de protection des données, il n’est valide que pendant 24 heures et doit ensuite être réactivé. Si le certificat normal est à nouveau nécessaire avant la fin de ce délai, il suffit de désactiver le certificat light.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Comment reconvertir un certificat light en certificat COVID conforme aux normes UE/AELE ?",
"text": "Le détenteur peut en tout temps désactiver le certificat light dans l’application «COVID Certificate». Le certificat COVID standard est alors à nouveau disponible.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Come avviene la verifica dei certificati COVID?",
"faqSubTitle": "Con l'app COVID Certificate Check è possibile scansionare i relativi codici QR e verificare l'autenticità e la validità dei certificati COVID.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Come posso verificare i certificati COVID?",
"text": "Per verificare un certificato COVID tramite l'app COVID Certificate Check, può scansionare il codice QR che trova sulla copia cartacea del certificato oppure sull’app che le viene mostrata.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Video esplicativo",
"linkUrl": "https://youtu.be/b4JXnfr2Ugg"
},
{
"title": "Cosa viene verificato esattamente?",
"text": "Scansionando il codice QR vengono verificati i seguenti tre aspetti.\n– Il certificato contiene una firma elettronica valida?\n– Il certificato è ancora valido?\n– Il certificato rispetta i criteri di validità previsti dalla normativa svizzera?\n\nSe tutti i tre aspetti sono valutati positivamente, il certificato COVID è considerato valido.\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quali sono attualmente i criteri di validità in Svizzera?",
"text": "L’attuale durata di validità dei certificati COVID è consultabile qui:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriori informazioni",
"linkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Quali documenti di legittimazione sono accettati o validi? Perché devono essere verificati i dati personali?",
"text": "Oltre al passaporto o alla carta d'identità sono accettati altri documenti che provano l'identità della persona in questione tramite una foto (ad es. licenza di condurre). Il certificato COVID non è falsificabile, tuttavia solo verificando i dati personali si garantisce che il certificato sia stato effettivamente rilasciato alla persona che lo sta mostrando.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quali dati posso visualizzare durante il processo di verifica?",
"text": "Durante il processo di verifica visualizzerà solo nome e cognome nonché la data di nascita del titolare del certificato e l'indicazione della validità del certificato.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Durante il processo di verifica vengono salvati dati nell'app COVID Certificate Check o in un sistema centrale?",
"text": "No, durante il processo di verifica non vengono salvati dati nell'app COVID Certificate Check né in un sistema centrale. In questo modo, non è possibile risalire a quali certificati sono stati verificati, da chi, quando e dove.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "I certificati possono essere verificati anche offline?",
"text": "In linea di principio, i certificati COVID possono essere verificati anche senza connessione Internet. A tale scopo, vengono scaricati regolarmente da un server centrale gli elenchi di verifica aggiornati. Questi elenchi salvati localmente non devono avere più di 48 ore. \n\nPer poter aggiornare gli elenchi di verifica, l’app deve essere aperta e collegata a Internet. L’aggiornamento avviene in modo immediato e automatico.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Che cos'è il certificato light?",
"text": "L'app «COVID Certificate» offre ai possessori di certificati COVID la possibilità di generare una copia del certificato con dati ridotti al minimo. Il certificato light indica semplicemente l'esistenza di un certificato valido, ma non contiene i dati sanitari.\n\nIl certificato con dati ridotti al minimo è un’alternativa al certificato COVID-19 ed è stato sviluppato su richiesta dell’Incaricato federale della protezione dei dati e della trasparenza (IFPDT), poiché le applicazioni autosviluppate per verificare i certificati COVID-19 consentirebbero a terzi di visualizzare i dati sanitari, ad esempio il vaccino somministrato o la data della vaccinazione. Ciò può essere evitato mediante il «certificato light».\n\nIl «certificato light» è disponibile unicamente in versione elettronica nell'app ed è riconosciuto solo in Svizzera. Per motivi legati alla protezione dei dati, il «certificato light» ha una validità massima di 24 ore e in seguito deve essere riattivato. Se si necessita del certificato normale prima che siano trascorse le 24 ore, il certificato light può essere disattivato semplicemente.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Come si fa a trasformare un certificato light nuovamente in un certificato COVID conforme all’UE/AELS?",
"text": "Il certificato light può essere disattivato dal titolare in qualsiasi momento nell’app «COVID Certificate», dopodiché il certificato COVID di base è di nuovo disponibile.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Uschia vegnan verifitgads ils certificats COVID",
"faqSubTitle": "Cun l'app COVID Certificate Check pon vegnir scannads ils codes QR sin ils certificats COVID per verifitgar l'autenticitad e la valaivladad dals certificats.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Co pon vegnir verifitgads ils certificats COVID?",
"text": "Per verifitgar in certificat COVID pudais Vus scannar il code QR sin Voss certificat sin palpiri u en l'app COVID Certificate cun l’app «COVID Certificate Check» previsa per quai.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Video explicativ",
"linkUrl": "https://youtu.be/DClLZIUjr3w"
},
{
"title": "Tge vegn propi verifitgà?",
"text": "Cun scannar vegnan verifitgads trais aspects:\n– Cuntegna il certificat ina signatura digitala valaivla?\n– N'è il certificat betg vegnì revocà?\n– Correspunda il certificat als criteris da valaivladad en Svizra?\n\nSche tut ils trais aspects vegnan valitads en moda positiva, vegn il certificat COVID considerà sco valaivel.\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge èn ils criteris da valaivladad actuals da la Svizra?",
"text": "La durada da valaivladad vertenta actuala dals certificats COVID chattais Vus qua:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriuras infurmaziuns",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Tge documents da legitimaziun vegnan acceptads resp. èn valaivels? Pertge ston vegnir verifitgadas las persunalias?",
"text": "Ultra dal passaport e da la ID vegnan acceptads er auters documents da legitimaziun valaivels che cumprovan l’identitad da la persuna pertutgada cun ina fotografia (p.ex. permiss dad ir cun auto). Il certificat COVID na po bain betg vegnir falsifitgà, però pir cun verifitgar las persunalias vegn controllà, sch'il certificat preschentà è vegnì emess per la persuna ch'al preschenta.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge datas ves jau tar la procedura da verificaziun?",
"text": "Tar la procedura da verificaziun vesais Vus mo il num e la data da naschientscha da la possessura u dal possessur dal certificat e sch'il certificat COVID è valaivel.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Vegnan arcunadas datas en in sistem central u en l'app COVID Certificate Check tar la procedura da verificaziun?",
"text": "Na, tar la procedura da verificaziun na vegnan arcunadas naginas datas – ni en l'app COVID Certificate Check ni en in sistem central? I n'è pia betg pussaivel d'identifitgar tge certificat COVID ch'è vegnì verifitgà da tgi, cura e nua.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Pon ils certificats er vegnir verifitgads offline?",
"text": "Da princip pon ils certificats COVID er vegnir verifitgads senza ina colliaziun cun l'internet. Per far quai vegnan chargiadas giu regularmain d'in server central glistas da verificaziun actualisadas. Questas glistas da verificaziun arcunadas localmain na dastgan betg esser pli veglias che 48 uras.\n\nPer actualisar las glistas da verificaziun sto l'app esser colliada cun l'internet e vegnir averta. L'actualisaziun succeda immediatamain ed automaticamain.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge è in certificat light?",
"text": "L'app «COVID Certificate» permetta a las possessuras ed als possessurs da certificats COVID da generar ina copia dal certificat COVID che cuntegna ina quantitad minimala da datas. Quest «certificat light» mussa mo ch'i è avant maun in certificat COVID valaivel, na cuntegna però naginas datas da sanadad.\n\nL'alternativa al certificat COVID è vegnida sviluppada sin giavisch da l'Incumbensà federal per la protecziun da datas e per la transparenza (IFPDT), perquai che terzas persunas pudessan – en il rom da la verificaziun da certificats COVID e cun apps sviluppadas sez – prender invista da datas da sanadad, sco per exempel dal vaccin u da la data da la vaccinaziun. Cun agid dal «certificat COVID» vegn quai impedì.\n\nIl «certificat light» è disponibel mo en moda electronica entaifer l'app e vegn renconuschì mo en Svizra. Per motivs da la protecziun da datas ha il «certificat light» ina durada da valaivladad maximala da 24 uras e sto alura vegnir activà danovamain. Sch'il certificat normal vegn duvrà gia pli baud, po il certificat light simplamain vegnir deactivà.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Co po in certificat light puspè vegnir transfurmà en in certificat COVID confurm a la UE/AECL?",
"text": "La possessura u il possessur po deactivar da tut temp il certificat light en l'app «COVID Certificate». Alura stat puspè a disposiziun il certificat COVID normal. ",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"androidTransferCheckIntervalMs": 0,
"androidTransferCheckBackoffMs": 0,
"timeshiftDetectionEnabled": false,
"checkModesInfos": {
"de": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Betriebe und Veranstaltungen, in welchen mit einer 3G-Regelung geprüft wird."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "In diesem Modus werden Covid-Zertifikate für Geimpfte, Genesene oder negativ Getestete akzeptiert."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "Die Prüfung von einem Zertifikat Light ist in diesem Modus möglich."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Betriebe und Veranstaltungen, in welchen mit einer 2G-Regelung geprüft wird."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "In diesem Modus werden Covid-Zertifikate für Geimpfte oder Genesene akzeptiert."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Die Prüfung von einem Zertifikat Light ist in diesem Modus nicht möglich."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Betriebe und Veranstaltungen, in welchen mit einer Regelung nach 2G+ geprüft wird."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Zusätzlich zu einem Covid-Zertifikat für Geimpfte oder Genesene wird ein gültiges Testzertifikat benötigt, welches separat geprüft werden muss."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Ausnahmen: Personen, deren vollständige Impfung, Auffrischimpfung oder Genesung nicht länger als 120 Tage zurückliegt."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Die Prüfung von Zertifikate Light ist in diesem Modus nicht möglich."
}
]
},
"TEST_CERT": {
"title": "Testzertifikat",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Bereiche, bei denen ein gültiges Testzertifikat notwendig ist."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "In diesem Modus werden Covid-Zertifikate für negativ Getestete basierend auf einem PCR- oder Antigen-Schnelltest akzeptiert."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Die Prüfung von Zertifikate Light ist in diesem Modus nicht möglich."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Wählen Sie den Prüfmodus, in welchem Sie Covid-Zertifikate prüfen möchten."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "Der Prüfmodus kann jederzeit geändert werden."
}
]
}
},
"en": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For organisations and events applying the 3G rule."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "In this mode, COVID certificates are accepted for people who have been vaccinated, or who have recovered or tested negative."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "It is possible to verify a \"light\" certificate in this mode."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For organisations and events applying the 2G rule."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "In this mode, COVID certificates are accepted for people who have been vaccinated or who have recovered."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "It is not possible to verify a \"light\" certificate in this mode."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For organisations and events applying the 2G+ rule."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "In addition to a COVID certificate for people who have been vaccinated or who have recovered, a valid test certificate is required. This must be verified separately."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Exceptions: People who have been fully vaccinated, received a booster vaccination or recovered (based on a PCR test) no longer than 120 days ago"
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "It is not possible to verify \"light\" certificates in this mode."
}
]
},
"TEST_CERT": {
"title": "Test certificate",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For areas in which a valid test certificate is required."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "In this mode, COVID certificates are accepted for people who have tested negative based on a PCR or rapid antigen test."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "It is not possible to verify \"light\" certificates in this mode."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Select the verification mode that you want to use for verifying COVID certificates."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "The verification mode can be changed at any time."
}
]
}
},
"fr": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pour les entreprises et les manifestations où les contrôles se fondent sur la règle des «3G»."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Ce mode de contrôle permet de vérifier les certificats COVID des personnes vaccinées, guéries ou testées négatives."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "Il peut être également utilisé pour vérifier un «certificat light»."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pour les entreprises et les manifestations où les contrôles se fondent sur la règle des «2G»."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Ce mode de contrôle permet de vérifier les certificats COVID des personnes vaccinées ou guéries."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "La vérification d’un «certificat light» n'est pas possible dans ce mode."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pour les entreprises et les manifestations qui appliquent la règle des 2G+."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "En plus d'un certificat COVID de vaccination ou de guérison, il faut présenter un certificat de test valable, qui doit être vérifié séparément."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Exceptions: les personnes dont la vaccination, la vaccination de rappel ou la guérison datent de moins de 120 jours"
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Ce mode ne permet pas de vérifier les «certificats light»."
}
]
},
"TEST_CERT": {
"title": "Certificat de test",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Destiné aux domaines qui nécessitent un certificat de test valable."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "Ce mode permet de vérifier les certificats des personnes qui disposent d'un résultat négatif à un test PCR ou à un test rapide antigénique."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Ce mode ne permet pas de vérifier les «certificats light»."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Choisissez le mode de contrôle correspondant aux certificats COVID à vérifier."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "Le mode de contrôle peut être changé en tout temps."
}
]
}
},
"it": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per le strutture e le manifestazioni in cui si applica la regola 3G."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "In questa modalità sono accettati i certificati COVID per persone vaccinate, guartite o testate negative."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "I certificati light possono essere verificati."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per le strutture e le manifestazioni in cui si applica la regola 2G."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "In questa modalità sono accettati i certificati COVID per persone vaccinate o guartite."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Questa modalità non permette di verificare i certificati light."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per strutture e manifestazioni cui si applica la regola 2G+."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Oltre a un certificato di vaccinazione o di guarigione COVID è richiesto un certificato di test valido, che deve essere verificato separatamente."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Eccezioni: Persone per le quali sono trascorsi al massimo 120 giorni dalla vaccinazione completa, dalla vaccinazione di richiamo o dalla guarigione."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "In questa modalità non è possibile verificare i certificati light."
}
]
},
"TEST_CERT": {
"title": "Certificato di test",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per i contesti in cui è richiesto un certificato di test valido."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "In questa modalità sono accettati i certificati COVID rilasciati alle persone risultate negative a un test PCR o a un test antigenico rapido."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "In questa modalità non è possibile verificare i certificati light."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Selezionare la modalità in cui verificare i certificati COVID."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "La modalità di verifica può essere cambiata in qualsiasi momento."
}
]
}
},
"rm": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per manaschis ed occurrenzas cun ina regla da 3G."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "En quest modus vegnan acceptads certificats COVID per persunas vaccinadas, per persunas guaridas u per persunas cun in test negativ."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "En quest modus po vegnir verifitgà in certificat light."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per manaschis ed occurrenzas cun ina regla da 2G."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "En quest modus vegnan acceptads ils certificats COVID per persunas vaccinadas u per persunas guaridas."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "“Certificat light” na po betg vegnir verifitgà en il modus da verificaziun da 2G."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per manaschis ed occurrenzas, nua ch’i vegn verifitgà tenor la regla da 2G+."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Ultra d’in certificat COVID per persunas vaccinadas e guaridas dovri in certificat d'in test valaivel che sto vegnir verifitgà separadamain."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Excepziuns: Persunas ch'èn vegnidas vaccinadas cumplettamain, che han laschà rinfrestgar la vaccinaziun u ch'èn guaridas (sin basa d'in test da PCR) avant maximalmain 120 dis"
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "En quest modus na pon vegnir verifitgads nagins certificats light."
}
]
},
"TEST_CERT": {
"title": "Certificat d'in test",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per secturs che dovran in certificat d'in test valaivel."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "En quest modus vegnan acceptads certificats COVID per persunas cun in test negativ sin basa d’in test da PCR u d’in test svelt d’antigens."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "En quest modus na pon vegnir verifitgads nagins certificats light."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Tscherni il modus da verificaziun, en il qual Vus vulais verifitgar ils certificats COVID."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "Il modus da verificaziun po vegnir midà da tut temp."
}
]
}
}
},
"checkModeReselectAfterHours": 2147483647,
"covidCertificateNewsText": {
"de": "Zertifikatspflicht aufgehoben",
"en": "Certificate requirement lifted",
"fr": "Levée de l’obligation de présenter un certificat.",
"it": "Obbligo di certificato revocato",
"rm": "Abolì l'obligatori dal certificat"
},
"infoCovidCertificateNews": {
"de": {
"title": "Zertifikatspflicht aufgehoben",
"newsItems": [
{
"text": "Die Zertifikatspflicht in der Schweiz wurde im Februar 2022 aufgehoben.",
"iconIos": "ic-bund-small",
"iconAndroid": "ic_bund_small"
},
{
"text": "Die Schweizer Gültigkeitsdauern bestehen seitdem nur noch formal und haben im Inland keine praktische Bedeutung mehr.",
"iconIos": "ic-timelapse-blue",
"iconAndroid": "ic_timelapse_blue"
},
{
"text": "Diese Schweizer Prüf-App prüft Covid-Zertifikate nach den Schweizer Gültigkeitsregeln. Das Prüfergebnis ist für einen Einsatz im Ausland nicht massgeblich.",
"iconIos": "ic-phone",
"iconAndroid": "ic_phone"
},
{
"text": "Falls ein Land noch ein Covid-Zertifikat voraussetzt, gelten jeweils die Regeln des entsprechenden Landes.",
"iconIos": "ic-travel",
"iconAndroid": "ic_travel"
}
]
},
"en": {
"title": "Certificate requirement lifted",
"newsItems": [
{
"text": "The certificate requirement in Switzerland was lifted in February 2022.",
"iconIos": "ic-bund-small",
"iconAndroid": "ic_bund_small"
},
{
"text": "Since then, the Swiss validity periods have only existed formally and no longer have any practical significance in this country.",
"iconIos": "ic-timelapse-blue",
"iconAndroid": "ic_timelapse_blue"
},
{
"text": "This Swiss certificate check app verifies COVID certificates based on Swiss validity rules. The result of the check is not relevant for use of the certificate abroad.",
"iconIos": "ic-phone",
"iconAndroid": "ic_phone"
},
{
"text": "If a country still requires a COVID certificate, the rules of the country in question apply.",
"iconIos": "ic-travel",
"iconAndroid": "ic_travel"
}
]
},
"fr": {
"title": "Levée de l’obligation de présenter un certificat.",
"newsItems": [
{
"text": "L’obligation de présenter un certificat en Suisse a été levée en février 2022.",
"iconIos": "ic-bund-small",
"iconAndroid": "ic_bund_small"
},
{
"text": "Depuis lors, les durées de validité pour la Suisse sont purement formelles et n’ont plus de pertinence pratique dans le pays.",
"iconIos": "ic-timelapse-blue",
"iconAndroid": "ic_timelapse_blue"
},
{
"text": "Cette application de vérification suisse contrôle les certificats COVID en fonction des règles de validité suisses. Le résultat du contrôle n’est pas déterminant pour utiliser l’étranger.",
"iconIos": "ic-phone",
"iconAndroid": "ic_phone"
},
{
"text": "Lorsqu’un pays exige encore un certificat COVID, les règles du pays en question s’appliquent.",
"iconIos": "ic-travel",
"iconAndroid": "ic_travel"
}
]
},
"it": {
"title": "Obbligo di certificato revocato",
"newsItems": [
{
"text": "In Svizzera l’obbligo di certificato è stato revocato a febbraio 2022.",
"iconIos": "ic-bund-small",
"iconAndroid": "ic_bund_small"
},
{
"text": "Da allora la durata di validità in Svizzera esiste solo formalmente e non ha più alcun valore pratico nel nostro Paese.",
"iconIos": "ic-timelapse-blue",
"iconAndroid": "ic_timelapse_blue"
},
{
"text": "Questa app svizzera verifica i certificati COVID in base alle regole di validità vigenti in Svizzera. Il risultato della verifica non è determinante per un impiego all’estero.",
"iconIos": "ic-phone",
"iconAndroid": "ic_phone"
},
{
"text": "Qualora un Paese richieda ancora un certificato COVID, si applicano le regole di tale Paese.",
"iconIos": "ic-travel",
"iconAndroid": "ic_travel"
}
]
},
"rm": {
"title": "Abolì l'obligatori dal certificat",
"newsItems": [
{
"text": "En Svizra è l'obligatori dal certificat vegnì abolì il favrer 2022.",
"iconIos": "ic-bund-small",
"iconAndroid": "ic_bund_small"
},
{
"text": "Las duradas da valaivladad svizras existan dapi lura mo anc formalmain e n'han nagina impurtanza pratica pli en Svizra.",
"iconIos": "ic-timelapse-blue",
"iconAndroid": "ic_timelapse_blue"
},
{
"text": "Questa app svizra da controlla controllescha certificats COVID tenor las reglas da valaivladad svizras. Il resultat da la controlla n'è betg relevant per il diever a l'exteriur.",
"iconIos": "ic-phone",
"iconAndroid": "ic_phone"
},
{
"text": "Sch'in pajais premetta anc in certificat COVID, valan mintgamai las reglas dal pajais respectiv.",
"iconIos": "ic-travel",
"iconAndroid": "ic_travel"
}
]
}
}
}
================================================
FILE: verifier/src/main/AndroidManifest.xml
================================================
================================================
FILE: verifier/src/main/assets/faq/config.json
================================================
{
"forceUpdate": false,
"infoBox": null,
"questions": null,
"works": {
"de": {
"faqTitle": "So werden Covid-Zertifikate geprüft",
"faqSubTitle": "Mit der COVID Certificate Check App können QR-Codes auf Covid-Zertifikaten gescannt und die Zertifikate auf Echtheit und Gültigkeit überprüft werden.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Wie können Covid-Zertifikate geprüft werden?",
"text": "Um ein Covid-Zertifikat zu prüfen, scannen Sie den QR-Code auf dem Papierzertifikat oder in der vorgewiesenen COVID Certificate App mit der dafür vorgesehenen COVID Certificate Check App.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Erklärvideo",
"linkUrl": "https://youtu.be/DClLZIUjr3w"
},
{
"title": "Was wird genau geprüft?",
"text": "Beim Scannen werden drei Aspekte geprüft:\n– Enthält das Zertifikat eine gültige elektronische Signatur?\n– Ist das Zertifikat nicht widerrufen worden?\n– Entspricht das Zertifikat den Gültigkeitskriterien der Schweiz?\n\nWenn alle drei Aspekte positiv bewertet werden, wird das Covid-Zertifikat als gültig ausgewiesen.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was sind die aktuellen Gültigkeitskriterien der Schweiz?",
"text": "Die aktuell geltende Gültigkeitsdauer von Covid-Zertifikaten finden Sie hier:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Weitere Informationen",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Welche Ausweisdokumente sind gültig? Weshalb müssen die Personalien überprüft werden?",
"text": "Neben Pass oder ID werden auch andere Ausweisdokumente akzeptiert, die die Identität der betreffenden Person mit einem Foto belegen (z.B. Führerausweis). Das Covid-Zertifikat ist zwar fälschungssicher, mit der Überprüfung der Personalien wird aber erst sichergestellt, dass das vorgezeigte Zertifikat auch auf den Vorweisenden ausgestellt wurde.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Welche Daten sehe ich beim Prüfvorgang?",
"text": "Beim Prüfvorgang sehen Sie nur den Namen und das Geburtsdatum der Zertifikatsinhaberin oder des Zertifikatsinhabers und ob das Covid-Zertifikat gültig ist.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Werden beim Prüfvorgang in der COVID Certificate Check App oder in einem zentralen System Daten gespeichert?",
"text": "Nein, beim Prüfvorgang werden keine Daten gespeichert - weder in der COVID Certificate Check App noch in einem zentralen System. Es ist somit nicht möglich nachzuvollziehen, welches Covid-Zertifikat von wem, wann und wo überprüft wurde.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Können Zertifikate auch offline geprüft werden?",
"text": "Grundsätzlich können Covid-Zertifikate auch ohne eine Internetverbindung geprüft werden. Dazu werden regelmässig aktualisierte Prüflisten von einem zentralen Server heruntergeladen. Diese lokal gespeicherten Prüflisten dürfen nicht älter als 48h sein. \n\nUm die Prüflisten zu aktualisieren muss die App mit dem Internet verbunden sein und geöffnet werden. Die Aktualisierung erfolgt unmittelbar und automatisch.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was ist das Zertifikat Light?",
"text": "Die «COVID Certificate»-App bietet Inhaberinnen und Inhabern von Covid-Zertifikaten die Möglichkeit, eine datenminimierte Zertifikatskopie zu generieren. Dieses «Zertifikat Light» zeigt lediglich das Vorliegen eines gültigen Covid-Zertifikats an, jedoch ohne Gesundheitsdaten zu enthalten. \n\nDie datenminimierte Alternative zum Covid-Zertifikat wurde auf Wunsch des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (EDÖB) entwickelt, da Dritte mit selbstentwickelten Apps bei der Prüfung von Covid-Zertifikaten Gesundheitsdaten wie beispielsweise Impfstoff oder Datum der Impfung einsehen könnten. Mittels dem «Zertifikat Light» wird dies verhindert.\n\nDas «Zertifikat Light» ist lediglich elektronisch innerhalb der App verfügbar und wird nur in der Schweiz anerkannt. Aus Datenschutzgründen hat das «Zertifikat Light» eine maximale Gültigkeitsdauer von 24 Stunden und muss danach erneut aktiviert werden. Wird das normale Zertifikat vor Ablauf der 24 Stunden benötigt, kann das Zertifikat Light einfach deaktiviert werden.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie kann ein Zertifikat Light wieder in ein EU/EFTA-konformes Covid-Zertifikat umgewandelt werden?",
"text": "Das Zertifikat Light kann durch die Halterin / den Halter jederzeit in der «COVID Certificate»-App deaktiviert werden. Danach steht das normale Covid-Zertifikat wieder zur Verfügung.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "How COVID certificates are checked",
"faqSubTitle": "The COVID Certificate Check app can be used to scan the QR codes on COVID certificates and check the certificates for authenticity and validity.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "How can COVID certificates be checked?",
"text": "To check a COVID certificate, use the dedicated COVID Certificate Check app to scan the QR code on the paper certificate or in the COVID Certificate app presented.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Explanatory video",
"linkUrl": "https://youtu.be/spfVPMqukjM"
},
{
"title": "What exactly is checked?",
"text": "Three aspects are checked when scanning:\n– Does the certificate contain a valid electronic signature?\n– Is the certificate unrevoked?\n– Does the certificate meet Switzerland's validity criteria?\n\nIf the answer to all three questions is affirmative, the COVID certificate is shown as valid.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What are the current validity criteria in Switzerland?",
"text": "The current validity period of COVID certificates can be found here:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Further information",
"linkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Which identification documents are valid? Why do personal details have to be checked?",
"text": "Aside from passports or ID cards, other photo identification documents that prove the identity of the person in question (e.g. driving licence) are also accepted. Although the COVID certificate is forgery-proof, the only way to ensure that the certificate shown was issued to the person presenting it is to check the personal details.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What data do I see during the verification process?",
"text": "During the verification process, you see only the certificate holder's name and date of birth, and whether the COVID certificate is valid.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Is any data stored in the COVID Certificate Check app or in a central system during the verification process?",
"text": "No, no data is stored during the verification process, be it in the COVID Certificate Check app or in a central system. Therefore, it is not possible to trace which COVID certificate was checked by whom, when and where.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Is it possible to verify the certificates offline?",
"text": "In principle, COVID certificates can also be verified without an Internet connection. For this purpose, regularly updated checklists are downloaded from a central server. These locally stored checklists must not be older than 48 hours. \n\nIn order to update the checklists, the app must be open and connected to the Internet. Updating occurs immediately and automatically.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What is the 'certificate light'",
"text": "The COVID Certificate app offers holders of COVID certificates the possibility of generating a copy of the certificate with minimised data. This 'certificate light' merely shows that the holder has a valid COVID certificate but does not contain any health-related data. \n\nThe alternative to the COVID certificate containing minimised data was developed at the wish of the Federal Data Protection and Information Commissioner (FDPIC) as third parties using apps they have developed themselves could be able to see health-related data such as the vaccine administered or date of vaccination when checking the certificate. The 'certificate light' prevents this.\n\nThe 'Certificate light' is only available electronically in the app and is only recognised in Switzerland. For data protection reasons the 'certificate light' is only valid for 24 hours and must then be reactivated. If you need to use the normal certificate before the end of the 24-hour period, you can simply deactivate the 'certificate light'.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How can a 'certificate light' be converted back into an EU/EFTA-compliant COVID certificate?",
"text": "The holder can deactivate a 'certificate light' any time in their COVID Certificate app. After that their normal COVID certificate is available again.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Contrôle de certificats COVID",
"faqSubTitle": "L'app de contrôle permet de scanner le code QR figurant sur un certificat COVID et de vérifier l'authenticité et la validité de ce dernier.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Comment contrôler un certificat COVID?",
"text": "Pour contrôler un certificat COVID, il vous suffit de scanner le code QR figurant sur le document papier ou dans l'app «COVID Certificate» au moyen de l'app de contrôle prévue à cet effet.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Vidéo explicative",
"linkUrl": "https://youtu.be/O-9YhJDI3ZI"
},
{
"title": "Sur quoi porte le contrôle au juste?",
"text": "Le scan du code QR permet de répondre aux trois questions suivantes:\n– Le certificat contient-il une signature électronique valable?\n– Le certificat a-t-il été révoqué?\n– Le certificat remplit-il les critères de validité fixés par la Suisse?\n\nSi vous pouvez répondre oui à la 1re et à la 3e question et non à la 2e, la validité du certificat COVID est attestée.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quels sont les critères de validité actuels de la Suisse ?",
"text": "Vous trouverez des informations sur la durée de validité actuelle du certificat COVID à l’adresse suivante :",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Informations supplémentaires",
"linkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Quelles pièces d'identité sont valables? Pourquoi faut-il vérifier les données personnelles?",
"text": "Outre le passeport et la carte d'identité, les pièces d'identité réputées valables sont celles qui attestent l'identité de la personne concernée au moyen d'une photo (par ex. permis de conduire). Le certificat COVID est certes infalsifiable, mais le contrôle des données personnelles est le seul moyen de vérifier que le certificat a été établi au nom de la personne qui le présente.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "À quelles données ai-je accès lors du contrôle?",
"text": "Lors du contrôle, vous n'avez accès qu'au nom et à la date de naissance du détenteur du certificat et voyez seulement si le certificat COVID est valable.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quid du stockage des données lors du contrôle?",
"text": "Aucune des données auxquelles vous avez accès lors du contrôle n'est stockée dans l'app ou dans un système central. Il est par conséquent impossible de savoir quel certificat COVID a été vérifié par qui, quand et où.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "La vérification des certificats est-elle possible hors ligne ?",
"text": "En principe, il est aussi possible de vérifier les certificats COVID sans connexion Internet. À cette fin, des listes de contrôle régulièrement mises à jour sont téléchargées à partir d’un serveur central. Elles sont enregistrées localement et ne doivent pas remonter à plus de 48 h.\n\nPour actualiser les listes de contrôle, l’application doit être ouverte et connectée à Internet. La mise à jour s’effectue immédiatement et automatiquement.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Qu’est-ce que le certificat light ?",
"text": "L’application « COVID Certificate » propose aux titulaires de certificats COVID la possibilité de générer une copie du certificat ne contenant que les données strictement nécessaires. Ce certificat « light » indique uniquement si le certificat présenté est valide, sans fournir de données sur la santé.\n\nL’alternative permettant de limiter les données du certificat COVID au strict minimum a été suggérée par le Préposé fédéral à la protection des données et à la transparence (PFPDT) ; en effet, des personnes tierces pourraient développer des applications leur donnant la possibilité de lire, lors de la vérification d’un certificat, les données sur la santé (p. ex. le type de vaccin et la date de la vaccination). Le certificat light empêche tout abus de ce genre.\n\nLe certificat light, reconnu uniquement en Suisse, n’est disponible que sous forme électronique. Pour des raisons de protection des données, il n’est valide que pendant 24 heures et doit ensuite être réactivé. Si le certificat normal est à nouveau nécessaire avant la fin de ce délai, il suffit de désactiver le certificat light.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Comment reconvertir un certificat light en certificat COVID conforme aux normes UE/AELE ?",
"text": "Le détenteur peut en tout temps désactiver le certificat light dans l’application «COVID Certificate». Le certificat COVID standard est alors à nouveau disponible.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Come avviene la verifica dei certificati COVID?",
"faqSubTitle": "Con l'app COVID Certificate Check è possibile scansionare i relativi codici QR e verificare l'autenticità e la validità dei certificati COVID.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Come posso verificare i certificati COVID?",
"text": "Per verificare un certificato COVID tramite l'app COVID Certificate Check, può scansionare il codice QR che trova sulla copia cartacea del certificato oppure sull’app che le viene mostrata.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Video esplicativo",
"linkUrl": "https://youtu.be/b4JXnfr2Ugg"
},
{
"title": "Cosa viene verificato esattamente?",
"text": "Scansionando il codice QR vengono verificati i seguenti tre aspetti.\n– Il certificato contiene una firma elettronica valida?\n– Il certificato è ancora valido?\n– Il certificato rispetta i criteri di validità previsti dalla normativa svizzera?\n\nSe tutti i tre aspetti sono valutati positivamente, il certificato COVID è considerato valido.\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quali sono attualmente i criteri di validità in Svizzera?",
"text": "L’attuale durata di validità dei certificati COVID è consultabile qui:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriori informazioni",
"linkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Quali documenti di legittimazione sono accettati o validi? Perché devono essere verificati i dati personali?",
"text": "Oltre al passaporto o alla carta d'identità sono accettati altri documenti che provano l'identità della persona in questione tramite una foto (ad es. licenza di condurre). Il certificato COVID non è falsificabile, tuttavia solo verificando i dati personali si garantisce che il certificato sia stato effettivamente rilasciato alla persona che lo sta mostrando.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quali dati posso visualizzare durante il processo di verifica?",
"text": "Durante il processo di verifica visualizzerà solo nome e cognome nonché la data di nascita del titolare del certificato e l'indicazione della validità del certificato.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Durante il processo di verifica vengono salvati dati nell'app COVID Certificate Check o in un sistema centrale?",
"text": "No, durante il processo di verifica non vengono salvati dati nell'app COVID Certificate Check né in un sistema centrale. In questo modo, non è possibile risalire a quali certificati sono stati verificati, da chi, quando e dove.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "I certificati possono essere verificati anche offline?",
"text": "In linea di principio, i certificati COVID possono essere verificati anche senza connessione Internet. A tale scopo, vengono scaricati regolarmente da un server centrale gli elenchi di verifica aggiornati. Questi elenchi salvati localmente non devono avere più di 48 ore. \n\nPer poter aggiornare gli elenchi di verifica, l’app deve essere aperta e collegata a Internet. L’aggiornamento avviene in modo immediato e automatico.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Che cos'è il certificato light?",
"text": "L'app «COVID Certificate» offre ai possessori di certificati COVID la possibilità di generare una copia del certificato con dati ridotti al minimo. Il certificato light indica semplicemente l'esistenza di un certificato valido, ma non contiene i dati sanitari.\n\nIl certificato con dati ridotti al minimo è un’alternativa al certificato COVID-19 ed è stato sviluppato su richiesta dell’Incaricato federale della protezione dei dati e della trasparenza (IFPDT), poiché le applicazioni autosviluppate per verificare i certificati COVID-19 consentirebbero a terzi di visualizzare i dati sanitari, ad esempio il vaccino somministrato o la data della vaccinazione. Ciò può essere evitato mediante il «certificato light».\n\nIl «certificato light» è disponibile unicamente in versione elettronica nell'app ed è riconosciuto solo in Svizzera. Per motivi legati alla protezione dei dati, il «certificato light» ha una validità massima di 24 ore e in seguito deve essere riattivato. Se si necessita del certificato normale prima che siano trascorse le 24 ore, il certificato light può essere disattivato semplicemente.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Come si fa a trasformare un certificato light nuovamente in un certificato COVID conforme all’UE/AELS?",
"text": "Il certificato light può essere disattivato dal titolare in qualsiasi momento nell’app «COVID Certificate», dopodiché il certificato COVID di base è di nuovo disponibile.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Uschia vegnan verifitgads ils certificats COVID",
"faqSubTitle": "Cun l'app COVID Certificate Check pon vegnir scannads ils codes QR sin ils certificats COVID per verifitgar l'autenticitad e la valaivladad dals certificats.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Co pon vegnir verifitgads ils certificats COVID?",
"text": "Per verifitgar in certificat COVID pudais Vus scannar il code QR sin Voss certificat sin palpiri u en l'app COVID Certificate cun l’app «COVID Certificate Check» previsa per quai.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Video explicativ",
"linkUrl": "https://youtu.be/DClLZIUjr3w"
},
{
"title": "Tge vegn propi verifitgà?",
"text": "Cun scannar vegnan verifitgads trais aspects:\n– Cuntegna il certificat ina signatura digitala valaivla?\n– N'è il certificat betg vegnì revocà?\n– Correspunda il certificat als criteris da valaivladad en Svizra?\n\nSche tut ils trais aspects vegnan valitads en moda positiva, vegn il certificat COVID considerà sco valaivel.\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge èn ils criteris da valaivladad actuals da la Svizra?",
"text": "La durada da valaivladad vertenta actuala dals certificats COVID chattais Vus qua:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriuras infurmaziuns",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat.html#-837133624"
},
{
"title": "Tge documents da legitimaziun vegnan acceptads resp. èn valaivels? Pertge ston vegnir verifitgadas las persunalias?",
"text": "Ultra dal passaport e da la ID vegnan acceptads er auters documents da legitimaziun valaivels che cumprovan l’identitad da la persuna pertutgada cun ina fotografia (p.ex. permiss dad ir cun auto). Il certificat COVID na po bain betg vegnir falsifitgà, però pir cun verifitgar las persunalias vegn controllà, sch'il certificat preschentà è vegnì emess per la persuna ch'al preschenta.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge datas ves jau tar la procedura da verificaziun?",
"text": "Tar la procedura da verificaziun vesais Vus mo il num e la data da naschientscha da la possessura u dal possessur dal certificat e sch'il certificat COVID è valaivel.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Vegnan arcunadas datas en in sistem central u en l'app COVID Certificate Check tar la procedura da verificaziun?",
"text": "Na, tar la procedura da verificaziun na vegnan arcunadas naginas datas – ni en l'app COVID Certificate Check ni en in sistem central? I n'è pia betg pussaivel d'identifitgar tge certificat COVID ch'è vegnì verifitgà da tgi, cura e nua.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Pon ils certificats er vegnir verifitgads offline?",
"text": "Da princip pon ils certificats COVID er vegnir verifitgads senza ina colliaziun cun l'internet. Per far quai vegnan chargiadas giu regularmain d'in server central glistas da verificaziun actualisadas. Questas glistas da verificaziun arcunadas localmain na dastgan betg esser pli veglias che 48 uras.\n\nPer actualisar las glistas da verificaziun sto l'app esser colliada cun l'internet e vegnir averta. L'actualisaziun succeda immediatamain ed automaticamain.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge è in certificat light?",
"text": "L'app «COVID Certificate» permetta a las possessuras ed als possessurs da certificats COVID da generar ina copia dal certificat COVID che cuntegna ina quantitad minimala da datas. Quest «certificat light» mussa mo ch'i è avant maun in certificat COVID valaivel, na cuntegna però naginas datas da sanadad.\n\nL'alternativa al certificat COVID è vegnida sviluppada sin giavisch da l'Incumbensà federal per la protecziun da datas e per la transparenza (IFPDT), perquai che terzas persunas pudessan – en il rom da la verificaziun da certificats COVID e cun apps sviluppadas sez – prender invista da datas da sanadad, sco per exempel dal vaccin u da la data da la vaccinaziun. Cun agid dal «certificat COVID» vegn quai impedì.\n\nIl «certificat light» è disponibel mo en moda electronica entaifer l'app e vegn renconuschì mo en Svizra. Per motivs da la protecziun da datas ha il «certificat light» ina durada da valaivladad maximala da 24 uras e sto alura vegnir activà danovamain. Sch'il certificat normal vegn duvrà gia pli baud, po il certificat light simplamain vegnir deactivà.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Co po in certificat light puspè vegnir transfurmà en in certificat COVID confurm a la UE/AECL?",
"text": "La possessura u il possessur po deactivar da tut temp il certificat light en l'app «COVID Certificate». Alura stat puspè a disposiziun il certificat COVID normal. ",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"androidTransferCheckIntervalMs": 0,
"androidTransferCheckBackoffMs": 0,
"timeshiftDetectionEnabled": false,
"checkModesInfos": {
"de": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Betriebe und Veranstaltungen, in welchen mit einer 3G-Regelung geprüft wird."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "In diesem Modus werden Covid-Zertifikate für Geimpfte, Genesene oder negativ Getestete akzeptiert."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "Die Prüfung von einem Zertifikat Light ist in diesem Modus möglich."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Betriebe und Veranstaltungen, in welchen mit einer 2G-Regelung geprüft wird."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "In diesem Modus werden Covid-Zertifikate für Geimpfte oder Genesene akzeptiert."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Die Prüfung von einem Zertifikat Light ist in diesem Modus nicht möglich."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Betriebe und Veranstaltungen, in welchen mit einer Regelung nach 2G+ geprüft wird."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Zusätzlich zu einem Covid-Zertifikat für Geimpfte oder Genesene wird ein gültiges Testzertifikat benötigt, welches separat geprüft werden muss."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Ausnahmen: Personen, deren vollständige Impfung, Auffrischimpfung oder Genesung nicht länger als 120 Tage zurückliegt."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Die Prüfung von Zertifikate Light ist in diesem Modus nicht möglich."
}
]
},
"TEST_CERT": {
"title": "Testzertifikat",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Für Bereiche, bei denen ein gültiges Testzertifikat notwendig ist."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "In diesem Modus werden Covid-Zertifikate für negativ Getestete basierend auf einem PCR- oder Antigen-Schnelltest akzeptiert."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Die Prüfung von Zertifikate Light ist in diesem Modus nicht möglich."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Wählen Sie den Prüfmodus, in welchem Sie Covid-Zertifikate prüfen möchten."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "Der Prüfmodus kann jederzeit geändert werden."
}
]
}
},
"en": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For organisations and events applying the 3G rule."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "In this mode, COVID certificates are accepted for people who have been vaccinated, or who have recovered or tested negative."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "It is possible to verify a \"light\" certificate in this mode."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For organisations and events applying the 2G rule."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "In this mode, COVID certificates are accepted for people who have been vaccinated or who have recovered."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "It is not possible to verify a \"light\" certificate in this mode."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For organisations and events applying the 2G+ rule."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "In addition to a COVID certificate for people who have been vaccinated or who have recovered, a valid test certificate is required. This must be verified separately."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Exceptions: People who have been fully vaccinated, received a booster vaccination or recovered (based on a PCR test) no longer than 120 days ago"
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "It is not possible to verify \"light\" certificates in this mode."
}
]
},
"TEST_CERT": {
"title": "Test certificate",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "For areas in which a valid test certificate is required."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "In this mode, COVID certificates are accepted for people who have tested negative based on a PCR or rapid antigen test."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "It is not possible to verify \"light\" certificates in this mode."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Select the verification mode that you want to use for verifying COVID certificates."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "The verification mode can be changed at any time."
}
]
}
},
"fr": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pour les entreprises et les manifestations où les contrôles se fondent sur la règle des «3G»."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Ce mode de contrôle permet de vérifier les certificats COVID des personnes vaccinées, guéries ou testées négatives."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "Il peut être également utilisé pour vérifier un «certificat light»."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pour les entreprises et les manifestations où les contrôles se fondent sur la règle des «2G»."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Ce mode de contrôle permet de vérifier les certificats COVID des personnes vaccinées ou guéries."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "La vérification d’un «certificat light» n'est pas possible dans ce mode."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pour les entreprises et les manifestations qui appliquent la règle des 2G+."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "En plus d'un certificat COVID de vaccination ou de guérison, il faut présenter un certificat de test valable, qui doit être vérifié séparément."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Exceptions: les personnes dont la vaccination, la vaccination de rappel ou la guérison datent de moins de 120 jours"
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Ce mode ne permet pas de vérifier les «certificats light»."
}
]
},
"TEST_CERT": {
"title": "Certificat de test",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Destiné aux domaines qui nécessitent un certificat de test valable."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "Ce mode permet de vérifier les certificats des personnes qui disposent d'un résultat négatif à un test PCR ou à un test rapide antigénique."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Ce mode ne permet pas de vérifier les «certificats light»."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Choisissez le mode de contrôle correspondant aux certificats COVID à vérifier."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "Le mode de contrôle peut être changé en tout temps."
}
]
}
},
"it": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per le strutture e le manifestazioni in cui si applica la regola 3G."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "In questa modalità sono accettati i certificati COVID per persone vaccinate, guartite o testate negative."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "I certificati light possono essere verificati."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per le strutture e le manifestazioni in cui si applica la regola 2G."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "In questa modalità sono accettati i certificati COVID per persone vaccinate o guartite."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "Questa modalità non permette di verificare i certificati light."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per strutture e manifestazioni cui si applica la regola 2G+."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Oltre a un certificato di vaccinazione o di guarigione COVID è richiesto un certificato di test valido, che deve essere verificato separatamente."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Eccezioni: Persone per le quali sono trascorsi al massimo 120 giorni dalla vaccinazione completa, dalla vaccinazione di richiamo o dalla guarigione."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "In questa modalità non è possibile verificare i certificati light."
}
]
},
"TEST_CERT": {
"title": "Certificato di test",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per i contesti in cui è richiesto un certificato di test valido."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "In questa modalità sono accettati i certificati COVID rilasciati alle persone risultate negative a un test PCR o a un test antigenico rapido."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "In questa modalità non è possibile verificare i certificati light."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Selezionare la modalità in cui verificare i certificati COVID."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "La modalità di verifica può essere cambiata in qualsiasi momento."
}
]
}
},
"rm": {
"infos": {
"THREE_G": {
"title": "3G",
"hexColor": "#86c5d9",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per manaschis ed occurrenzas cun ina regla da 3G."
},
{
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "En quest modus vegnan acceptads certificats COVID per persunas vaccinadas, per persunas guaridas u per persunas cun in test negativ."
},
{
"iconAndroid": "ic_qr_certificate_light",
"iconIos": "ic-qr-certificate-light",
"text": "En quest modus po vegnir verifitgà in certificat light."
}
]
},
"TWO_G": {
"title": "2G",
"hexColor": "#c2d076",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per manaschis ed occurrenzas cun ina regla da 2G."
},
{
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "En quest modus vegnan acceptads ils certificats COVID per persunas vaccinadas u per persunas guaridas."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "“Certificat light” na po betg vegnir verifitgà en il modus da verificaziun da 2G."
}
]
},
"TWO_G_PLUS": {
"title": "2G+",
"hexColor": "#e6ad8e",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per manaschis ed occurrenzas, nua ch’i vegn verifitgà tenor la regla da 2G+."
},
{
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Ultra d’in certificat COVID per persunas vaccinadas e guaridas dovri in certificat d'in test valaivel che sto vegnir verifitgà separadamain."
},
{
"iconAndroid": "ic_info_alert",
"iconIos": "ic-info-alert",
"text": "Excepziuns: Persunas ch'èn vegnidas vaccinadas cumplettamain, che han laschà rinfrestgar la vaccinaziun u ch'èn guaridas (sin basa d'in test da PCR) avant maximalmain 120 dis"
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "En quest modus na pon vegnir verifitgads nagins certificats light."
}
]
},
"TEST_CERT": {
"title": "Certificat d'in test",
"hexColor": "#facafa",
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Per secturs che dovran in certificat d'in test valaivel."
},
{
"iconAndroid": "ic_t",
"iconIos": "ic-t",
"text": "En quest modus vegnan acceptads certificats COVID per persunas cun in test negativ sin basa d’in test da PCR u d’in test svelt d’antigens."
},
{
"iconAndroid": "ic_qr_certificate_light_no",
"iconIos": "ic-qr-certificate-light-no",
"text": "En quest modus na pon vegnir verifitgads nagins certificats light."
}
]
}
},
"unselected": {
"infos": [
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Tscherni il modus da verificaziun, en il qual Vus vulais verifitgar ils certificats COVID."
},
{
"iconAndroid": "ic_settings",
"iconIos": "ic-settings",
"text": "Il modus da verificaziun po vegnir midà da tut temp."
}
]
}
}
},
"checkModeReselectAfterHours": 2147483647
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/HomeFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier
import android.content.res.ColorStateList
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.graphics.toColorInt
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import ch.admin.bag.covidcertificate.common.config.ConfigModel
import ch.admin.bag.covidcertificate.common.config.InfoBoxModel
import ch.admin.bag.covidcertificate.common.data.ConfigSecureStorage
import ch.admin.bag.covidcertificate.common.debug.DebugFragment
import ch.admin.bag.covidcertificate.common.dialog.InfoDialogFragment
import ch.admin.bag.covidcertificate.common.html.BuildInfo
import ch.admin.bag.covidcertificate.common.html.ImprintFragment
import ch.admin.bag.covidcertificate.sdk.android.CovidCertificateSdk
import ch.admin.bag.covidcertificate.sdk.android.models.VerifierCertificateHolder
import ch.admin.bag.covidcertificate.sdk.android.verification.state.VerifierDecodeState
import ch.admin.bag.covidcertificate.verifier.data.VerifierSecureStorage
import ch.admin.bag.covidcertificate.verifier.databinding.FragmentHomeBinding
import ch.admin.bag.covidcertificate.verifier.faq.VerifierFaqFragment
import ch.admin.bag.covidcertificate.verifier.modes.ChooseModeDialogFragment
import ch.admin.bag.covidcertificate.verifier.modes.ModesAndConfigViewModel
import ch.admin.bag.covidcertificate.verifier.news.InfoCertificateNewsFragment
import ch.admin.bag.covidcertificate.verifier.pager.HomescreenPageAdapter
import ch.admin.bag.covidcertificate.verifier.pager.HomescreenPagerFragment
import ch.admin.bag.covidcertificate.verifier.qr.VerifierQrScanFragment
import ch.admin.bag.covidcertificate.verifier.verification.VerificationFragment
import ch.admin.bag.covidcertificate.verifier.zebra.ZebraActionBroadcastReceiver
import com.google.android.material.tabs.TabLayoutMediator
import java.util.concurrent.atomic.AtomicLong
class HomeFragment : Fragment() {
companion object {
fun newInstance(): HomeFragment {
return HomeFragment()
}
}
private val modesAndConfigViewModel by activityViewModels()
private val verifierSecureStorage by lazy { VerifierSecureStorage.getInstance(requireContext()) }
private val zebraBroadcastReceiver by lazy { ZebraActionBroadcastReceiver(verifierSecureStorage) }
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentHomeBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val adapter = HomescreenPageAdapter(this, HomescreenPagerFragment.getDescriptions().size)
binding.viewPager.adapter = adapter
binding.homescreenScanButton.setOnClickListener {
parentFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit)
.replace(R.id.fragment_container, VerifierQrScanFragment.newInstance())
.addToBackStack(VerifierQrScanFragment::class.java.canonicalName)
.commit()
}
binding.homescreenSupportButton.setOnClickListener {
parentFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit)
.replace(R.id.fragment_container, VerifierFaqFragment.newInstance())
.addToBackStack(VerifierFaqFragment::class.java.canonicalName)
.commit()
}
binding.homescreenSettingsButton.setOnClickListener {
ChooseModeDialogFragment.newInstance().show(childFragmentManager, ChooseModeDialogFragment::class.java.canonicalName)
}
modesAndConfigViewModel.modesLiveData.observe(viewLifecycleOwner) { modeState ->
val mode = modeState.selectedMode
if (mode == null || modeState.availableModes.size == 1) {
binding.homescreenModeIndicator.isVisible = false
binding.homescreenScanButton.text = getString(R.string.verifier_homescreen_scan_button)
binding.homescreenSettingsButton.isVisible = modeState.availableModes.size > 1
} else {
binding.homescreenModeIndicator.backgroundTintList = ColorStateList.valueOf(mode.hexColor.toColorInt())
binding.homescreenModeIndicator.text = mode.title
binding.homescreenModeIndicator.setOnClickListener {
ChooseModeDialogFragment.newInstance()
.show(childFragmentManager, ChooseModeDialogFragment::class.java.canonicalName)
}
binding.homescreenModeIndicator.isVisible = true
binding.homescreenSettingsButton.isVisible = true
binding.homescreenScanButton.text =
getString(R.string.verifier_homescreen_scan_button_with_mode).replace("{MODE}", mode.title)
}
}
modesAndConfigViewModel.configLiveData.observe(viewLifecycleOwner) { configModel ->
val languageKey = getString(R.string.language_key)
val title = configModel.getCovidCertificateNewsText(languageKey)
if (!title.isNullOrBlank()) {
binding.covidCertificateInfo.text = title
binding.covidCertificateInfo.isVisible = true
binding.covidCertificateInfo.setOnClickListener {
showNewsDialog(configModel)
}
if (!verifierSecureStorage.wasNewsShown(configModel.getCovidCertificateNewsText("de") ?: "")) {
showNewsDialog(configModel)
}
} else {
binding.covidCertificateInfo.isVisible = false
}
}
TabLayoutMediator(binding.tabLayout, binding.viewPager) { _, _ ->
//Some implementation
}.attach()
if (DebugFragment.EXISTS) {
setupDebugFragment()
}
binding.homescreenHeader.headerImpressum.setOnClickListener {
val buildInfo = BuildInfo(
getString(R.string.verifier_app_title),
BuildConfig.VERSION_NAME,
BuildConfig.BUILD_TIME,
BuildConfig.FLAVOR,
getString(R.string.verifier_terms_privacy_link),
"covidCheck",
)
parentFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit)
.replace(
R.id.fragment_container, ImprintFragment.newInstance(
R.string.impressum_title,
buildInfo
)
)
.addToBackStack(ImprintFragment::class.java.canonicalName)
.commit()
}
setupInfoBox()
}
private fun showNewsDialog(configModel: ConfigModel) {
verifierSecureStorage.setNewsWasShown(configModel.getCovidCertificateNewsText("de") ?: "")
InfoCertificateNewsFragment.newInstance()
.show(childFragmentManager, InfoCertificateNewsFragment::class.java.canonicalName)
}
override fun onResume() {
super.onResume()
zebraBroadcastReceiver.registerWith(requireContext()) { decodeQrCodeData(it) }
modesAndConfigViewModel.resetSelectedModeIfNeeded()
}
override fun onPause() {
super.onPause()
zebraBroadcastReceiver.unregisterWith(requireContext())
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun setupDebugFragment() {
val lastClick = AtomicLong(0)
val debugButtonClickListener = View.OnClickListener {
val now = System.currentTimeMillis()
if (lastClick.get() > now - 1000L) {
lastClick.set(0)
parentFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit)
.replace(R.id.fragment_container, DebugFragment.newInstance())
.addToBackStack(DebugFragment::class.java.canonicalName)
.commit()
} else {
lastClick.set(now)
}
}
binding.homescreenHeader.schwiizerchruez.setOnClickListener(debugButtonClickListener)
}
private fun setupInfoBox() {
modesAndConfigViewModel.configLiveData.observe(viewLifecycleOwner) { config ->
val notificationButton = binding.homescreenHeader.headerNotification
val localizedInfo = config.getInfoBox(getString(R.string.language_key))
val hasInfoBox = localizedInfo != null
val onClickListener = localizedInfo?.let { infoBox ->
val secureStorage = ConfigSecureStorage.getInstance(notificationButton.context)
if (secureStorage.getLastShownInfoBoxId() != infoBox.infoId) {
closeCurrentInfoDialog()
showInfoDialog(infoBox)
secureStorage.setLastShownInfoBoxId(infoBox.infoId)
}
return@let View.OnClickListener {
closeCurrentInfoDialog()
showInfoDialog(infoBox)
secureStorage.setLastShownInfoBoxId(infoBox.infoId)
}
}
notificationButton.isVisible = hasInfoBox
notificationButton.setOnClickListener(onClickListener)
}
}
private fun closeCurrentInfoDialog() {
(childFragmentManager.findFragmentByTag(InfoDialogFragment::class.java.canonicalName) as? InfoDialogFragment)?.dismiss()
}
private fun showInfoDialog(infoBox: InfoBoxModel) {
InfoDialogFragment.newInstance(infoBox).show(childFragmentManager, InfoDialogFragment::class.java.canonicalName)
}
private fun decodeQrCodeData(qrCodeData: String) {
when (val decodeState = CovidCertificateSdk.Verifier.decode(qrCodeData)) {
is VerifierDecodeState.SUCCESS -> {
showVerificationFragment(decodeState.certificateHolder)
}
is VerifierDecodeState.ERROR -> {
// Ignore errors when scanning in the home screen
}
}
}
private fun showVerificationFragment(certificateHolder: VerifierCertificateHolder) {
parentFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit)
.replace(R.id.fragment_container, VerificationFragment.newInstance(certificateHolder))
.addToBackStack(VerificationFragment::class.java.canonicalName)
.commit()
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/MainActivity.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier
import android.content.DialogInterface
import android.content.Intent
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.lifecycleScope
import ch.admin.bag.covidcertificate.common.BaseActivity
import ch.admin.bag.covidcertificate.common.config.ConfigModel
import ch.admin.bag.covidcertificate.common.onboarding.BaseOnboardingActivity
import ch.admin.bag.covidcertificate.common.util.UrlUtil
import ch.admin.bag.covidcertificate.common.util.setSecureFlagToBlockScreenshots
import ch.admin.bag.covidcertificate.sdk.android.CovidCertificateSdk
import ch.admin.bag.covidcertificate.verifier.data.VerifierSecureStorage
import ch.admin.bag.covidcertificate.verifier.databinding.ActivityMainBinding
import ch.admin.bag.covidcertificate.verifier.modes.ModesAndConfigViewModel
import ch.admin.bag.covidcertificate.verifier.updateboarding.UpdateboardingActivity
class MainActivity : BaseActivity() {
private lateinit var binding: ActivityMainBinding
private val configViewModel by viewModels()
private val secureStorage by lazy { VerifierSecureStorage.getInstance(this) }
private var forceUpdateDialog: AlertDialog? = null
private val updateboardingLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
secureStorage.setCertificateLightUpdateboardingCompleted(true)
secureStorage.setAgbUpdateboardingCompleted(true)
// Load the config and trust list here because onStart ist called before the activity result and the onboarding
// completion flags are therefore not yet set to true
loadConfigAndTrustList()
showHomeFragment()
} else {
finish()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
configViewModel.loadActiveModes(getString(R.string.language_key))
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
window.setSecureFlagToBlockScreenshots(BuildConfig.FLAVOR)
if (savedInstanceState == null) {
val certificateLightUpdateboardingCompleted = secureStorage.getCertificateLightUpdateboardingCompleted()
val agbUpdateboardingCompleted = secureStorage.getAgbUpdateboardingCompleted()
val onboardingType = when {
!certificateLightUpdateboardingCompleted -> UpdateboardingActivity.OnboardingType.CERTIFICATE_LIGHT
!agbUpdateboardingCompleted -> UpdateboardingActivity.OnboardingType.AGB_UPDATE
else -> null
}
if (onboardingType != null) {
val intent = Intent(this, UpdateboardingActivity::class.java).apply {
putExtra(BaseOnboardingActivity.EXTRA_ONBOARDING_TYPE, onboardingType.name)
}
updateboardingLauncher.launch(intent)
} else {
showHomeFragment()
}
}
configViewModel.configLiveData.observe(this) { config -> handleConfig(config) }
}
override fun onStart() {
super.onStart()
// Every time the app comes into the foreground and the updateboarding was completed, reload the config and trust list
if (secureStorage.getCertificateLightUpdateboardingCompleted()) {
loadConfigAndTrustList()
}
}
override fun onDestroy() {
super.onDestroy()
CovidCertificateSdk.unregisterWithLifecycle(lifecycle)
}
private fun loadConfigAndTrustList() {
configViewModel.loadConfig(BuildConfig.BASE_URL, BuildConfig.VERSION_NAME, BuildConfig.BUILD_TIME.toString())
CovidCertificateSdk.refreshTrustList(lifecycleScope)
}
private fun showHomeFragment() {
CovidCertificateSdk.registerWithLifecycle(lifecycle)
supportFragmentManager.beginTransaction()
.add(R.id.fragment_container, HomeFragment.newInstance())
.commit()
}
private fun handleConfig(config: ConfigModel) {
if (config.forceUpdate && forceUpdateDialog == null) {
val forceUpdateDialog = AlertDialog.Builder(this, R.style.CovidCertificate_AlertDialogStyle)
.setTitle(R.string.force_update_title)
.setMessage(R.string.force_update_text)
.setPositiveButton(R.string.force_update_button, null)
.setCancelable(false)
.create()
.apply { window?.setSecureFlagToBlockScreenshots(BuildConfig.FLAVOR) }
forceUpdateDialog.setOnShowListener {
forceUpdateDialog.getButton(DialogInterface.BUTTON_POSITIVE)
.setOnClickListener {
val packageName = packageName
UrlUtil.openUrl(this@MainActivity, "market://details?id=$packageName")
}
}
this.forceUpdateDialog = forceUpdateDialog
forceUpdateDialog.show()
}
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/MainApplication.kt
================================================
package ch.admin.bag.covidcertificate.verifier
import android.app.Application
import android.content.Intent
import android.content.IntentFilter
import android.os.Build
import ch.admin.bag.covidcertificate.common.data.ConfigSecureStorage
import ch.admin.bag.covidcertificate.common.debug.DebugFragment
import ch.admin.bag.covidcertificate.common.util.EnvironmentUtil
import ch.admin.bag.covidcertificate.sdk.android.CovidCertificateSdk
import ch.admin.bag.covidcertificate.sdk.android.data.Config
import ch.admin.bag.covidcertificate.sdk.android.net.interceptor.UserAgentInterceptor
import ch.admin.bag.covidcertificate.verifier.data.VerifierSecureStorage
import ch.admin.bag.covidcertificate.verifier.zebra.ZebraDataWedgeApiUtil
import ch.admin.bag.covidcertificate.verifier.zebra.ZebraResultActionBroadcastReceiver
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
if (DebugFragment.EXISTS) {
DebugFragment.initDebug(this)
}
// If this is a fresh install, don't show an updateboarding
val isFreshInstall = ConfigSecureStorage.getInstance(this).getConfig() == null
if (isFreshInstall) {
VerifierSecureStorage.getInstance(this).setCertificateLightUpdateboardingCompleted(true)
VerifierSecureStorage.getInstance(this).setAgbUpdateboardingCompleted(true)
}
Config.appToken = BuildConfig.SDK_APP_TOKEN
Config.userAgent =
UserAgentInterceptor.UserAgentGenerator { "${this.packageName};${BuildConfig.VERSION_NAME};${BuildConfig.BUILD_TIME};Android;${Build.VERSION.SDK_INT}" }
CovidCertificateSdk.init(this, EnvironmentUtil.getSdkEnvironment())
checkForExternalScanners()
}
private fun checkForExternalScanners() {
registerReceiver(ZebraResultActionBroadcastReceiver(), IntentFilter().apply {
addAction(ZebraDataWedgeApiUtil.DATA_WEDGE_API_RESULT_ACTION)
addCategory(Intent.CATEGORY_DEFAULT)
})
// Send a broadcast to the Zebra Data Wedge API querying the available scanners
val enumerateScannersIntent = ZebraDataWedgeApiUtil.getEnumerateScannersIntent()
sendBroadcast(enumerateScannersIntent)
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/data/VerifierSecureStorage.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.data
import android.content.Context
import androidx.core.content.edit
import ch.admin.bag.covidcertificate.sdk.android.utils.EncryptedSharedPreferencesUtil
import ch.admin.bag.covidcertificate.sdk.android.utils.SingletonHolder
class VerifierSecureStorage private constructor(context: Context) {
companion object : SingletonHolder(::VerifierSecureStorage) {
private const val PREFERENCES = "SecureStorage"
private const val KEY_CERTIFICATE_LIGHT_UPDATEBOARDING_COMPLETED = "KEY_CERTIFICATE_LIGHT_UPDATEBOARDING_COMPLETED"
private const val KEY_AGB_UPDATEBOARDING_COMPLETED = "KEY_AGB_UPDATEBOARDIN_COMPLETED"
private const val KEY_HAS_ZEBRA_SCANNER = "KEY_HAS_ZEBRA_SCANNER"
private const val KEY_SELECTED_MODE = "KEY_SELECTED_MODE"
private const val KEY_MODE_SELECTION_TIME = "KEY_MODE_SELECTION_TIME"
private const val KEY_SHOW_COVID_NEWS = "KEY_SHOW_COVID_NEWS_FIRST_TIME"
}
private val prefs = EncryptedSharedPreferencesUtil.initializeSharedPreferences(context, PREFERENCES)
fun getCertificateLightUpdateboardingCompleted() = prefs.getBoolean(KEY_CERTIFICATE_LIGHT_UPDATEBOARDING_COMPLETED, false)
fun setCertificateLightUpdateboardingCompleted(completed: Boolean) = prefs.edit {
putBoolean(KEY_CERTIFICATE_LIGHT_UPDATEBOARDING_COMPLETED, completed)
}
fun getAgbUpdateboardingCompleted() = prefs.getBoolean(KEY_AGB_UPDATEBOARDING_COMPLETED, false)
fun setAgbUpdateboardingCompleted(completed: Boolean) = prefs.edit {
putBoolean(KEY_AGB_UPDATEBOARDING_COMPLETED, completed)
}
fun hasZebraScanner() = prefs.getBoolean(KEY_HAS_ZEBRA_SCANNER, false)
fun setHasZebraScanner(hasZebraScanner: Boolean) = prefs.edit { putBoolean(KEY_HAS_ZEBRA_SCANNER, hasZebraScanner) }
fun setSelectedMode(mode: String?) = prefs.edit {
putString(KEY_SELECTED_MODE, mode)
putLong(KEY_MODE_SELECTION_TIME, System.currentTimeMillis())
}
fun getSelectedMode(): String? {
return prefs.getString(KEY_SELECTED_MODE, null)
}
fun resetSelectedModeIfNeeded(maxAge: Long): Boolean {
val selectionTime = prefs.getLong(KEY_MODE_SELECTION_TIME, 0)
return if (selectionTime < System.currentTimeMillis() - maxAge) {
prefs.edit {
putString(KEY_SELECTED_MODE, null)
}
true
} else {
false
}
}
fun setNewsWasShown(title: String) = prefs.edit { putString(KEY_SHOW_COVID_NEWS, title) }
fun wasNewsShown(title: String): Boolean {
val shownNews = prefs.getString(KEY_SHOW_COVID_NEWS, "")
if (shownNews.isNullOrEmpty()) return false
return shownNews == title
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/extensions/ContextExtensions.kt
================================================
package ch.admin.bag.covidcertificate.verifier.extensions
import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.PackageManager
import android.content.pm.Signature
import android.os.Build
import java.security.MessageDigest
@SuppressLint("PackageManagerGetSignatures")
fun Context.getApplicationSignature(): List {
try {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val sig = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES).signingInfo
if (sig.hasMultipleSigners()) {
// Send all with apkContentsSigners
sig.apkContentsSigners.map { it.toShaHash() }
} else {
// Send one with signingCertificateHistory
sig.signingCertificateHistory.map { it.toShaHash() }
}
} else {
val sig = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures
sig.map { it.toShaHash() }
}
} catch (e: Exception) {
// Ignore exception
}
return emptyList()
}
private fun Signature.toShaHash(): String {
val digest = MessageDigest.getInstance("SHA")
digest.update(this.toByteArray())
return bytesToHex(digest.digest())
}
private fun bytesToHex(bytes: ByteArray): String {
val hexArray = charArrayOf('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F')
val hexChars = CharArray(bytes.size * 2)
var v: Int
for (j in bytes.indices) {
v = bytes[j].toInt() and 0xFF
hexChars[j * 2] = hexArray[v.ushr(4)]
hexChars[j * 2 + 1] = hexArray[v and 0x0F]
}
return String(hexChars)
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/faq/VerifierFaqFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.faq
import androidx.fragment.app.activityViewModels
import ch.admin.bag.covidcertificate.common.config.ConfigViewModel
import ch.admin.bag.covidcertificate.common.faq.FaqFragment
import ch.admin.bag.covidcertificate.verifier.BuildConfig
import ch.admin.bag.covidcertificate.verifier.R
import ch.admin.bag.covidcertificate.verifier.modes.ModesAndConfigViewModel
class VerifierFaqFragment : FaqFragment() {
companion object {
fun newInstance(): FaqFragment = VerifierFaqFragment()
}
private val configViewModel by activityViewModels()
override fun setupFaqProvider() {
toolbar.setTitle(R.string.verifier_support_header)
configViewModel.configLiveData.observe(viewLifecycleOwner, { config ->
val languageKey = getString(R.string.language_key)
setupFaqList(config.generateFaqItems(languageKey))
})
configViewModel.loadConfig(BuildConfig.BASE_URL, BuildConfig.VERSION_NAME, BuildConfig.BUILD_TIME.toString())
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/modes/ChooseModeDialogFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.modes
import android.content.res.ColorStateList
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.graphics.toColorInt
import androidx.core.view.isVisible
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import ch.admin.bag.covidcertificate.common.config.CheckModeInfoEntry
import ch.admin.bag.covidcertificate.common.extensions.getDrawableIdentifier
import ch.admin.bag.covidcertificate.verifier.R
import ch.admin.bag.covidcertificate.verifier.databinding.DialogFragmentChooseModeBinding
import ch.admin.bag.covidcertificate.verifier.databinding.ItemModeButtonBinding
import ch.admin.bag.covidcertificate.verifier.databinding.ItemModeInfoBinding
class ChooseModeDialogFragment : DialogFragment() {
companion object {
fun newInstance(): ChooseModeDialogFragment = ChooseModeDialogFragment()
}
private var _binding: DialogFragmentChooseModeBinding? = null
private val binding get() = _binding!!
private val viewModel by activityViewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.CovidCertificate_ChooseModeDialog)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = DialogFragmentChooseModeBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val observers = mutableListOf>()
viewModel.modesLiveData.observe(viewLifecycleOwner) { modeState ->
binding.modeItemsLayout.removeAllViews()
observers.forEach { viewModel.modesLiveData.removeObserver(it) }
observers.clear()
for (mode in modeState.availableModes) {
val itemView = ItemModeButtonBinding.inflate(layoutInflater, binding.infoItemsLayout, false)
itemView.title.text = mode.title
val observer = Observer { modeState ->
if (modeState.selectedMode?.id == mode.id) {
itemView.buttonIcon.setImageResource(R.drawable.ic_checkbox_filled)
itemView.root.backgroundTintList = ColorStateList.valueOf(mode.hexColor.toColorInt())
} else {
itemView.buttonIcon.setImageResource(R.drawable.ic_checkbox_empty)
itemView.root.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.grey_light, null))
}
}
viewModel.modesLiveData.observe(viewLifecycleOwner, observer)
observers.add(observer)
itemView.root.setOnClickListener {
viewModel.setSelectedMode(mode.id)
}
binding.modeItemsLayout.addView(itemView.root)
}
}
viewModel.modesLiveData.observe(viewLifecycleOwner) { modeState ->
binding.infoItemsLayout.removeAllViews()
val mode = modeState.selectedMode
val items: ArrayList = arrayListOf()
if (mode == null) {
binding.chooseModeButton.isVisible = false
val unselectedModeInfos = viewModel.configLiveData.value?.getUnselectedModesInfos(getString(R.string.language_key))
unselectedModeInfos?.infos?.forEach { unselectedModeInfo ->
items.add(CheckModeInfoEntry(unselectedModeInfo.iconAndroid, unselectedModeInfo.text))
}
} else {
binding.chooseModeButton.isVisible = true
items.addAll(mode.infos)
}
for (item in items) {
val itemView = ItemModeInfoBinding.inflate(layoutInflater, binding.infoItemsLayout, false)
val iconId = requireContext().getDrawableIdentifier(item.iconAndroid)
if (iconId != 0) {
itemView.icon.setImageResource(iconId)
} else {
itemView.icon.setImageResource(R.drawable.ic_info_outline)
}
itemView.infoText.text = item.text
binding.infoItemsLayout.addView(itemView.root)
}
}
binding.chooseModeButton.setOnClickListener {
dismiss()
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/modes/ModesAndConfigViewModel.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.modes
import android.app.Application
import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.asFlow
import androidx.lifecycle.viewModelScope
import ch.admin.bag.covidcertificate.common.config.CheckModeInfoModelWithId
import ch.admin.bag.covidcertificate.common.config.ConfigViewModel
import ch.admin.bag.covidcertificate.sdk.android.CovidCertificateSdk
import ch.admin.bag.covidcertificate.verifier.data.VerifierSecureStorage
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
class ModesAndConfigViewModel(application: Application) : ConfigViewModel(application) {
private val verifierSecureStorage = VerifierSecureStorage.getInstance(application)
private val modesMutableLiveData = MutableLiveData()
val modesLiveData: LiveData = modesMutableLiveData
private val selectedModeMutableLiveData = MutableLiveData()
init {
selectedModeMutableLiveData.value = verifierSecureStorage.getSelectedMode()
}
fun loadActiveModes(langKey: String) {
viewModelScope.launch(Dispatchers.Main) {
CovidCertificateSdk.Verifier.getActiveModes().combine(configLiveData.asFlow()) { activeModes, config ->
val configModeItems = mutableListOf()
for (mode in activeModes) {
val configItem = config?.getCheckModesInfos(langKey)?.get(mode.id)
if (configItem != null) {
configModeItems.add(
CheckModeInfoModelWithId(
mode.id,
configItem.title,
configItem.hexColor,
configItem.infos
)
)
} else {
configModeItems.add(
CheckModeInfoModelWithId(
mode.id,
mode.displayName,
"#888888",
listOf()
)
)
}
}
configModeItems
}.combine(selectedModeMutableLiveData.asFlow()) { configModeItems, selectedModeIdentifier ->
val selectedMode: CheckModeInfoModelWithId?
if (configModeItems.size == 1) {
selectedMode = configModeItems[0]
} else {
selectedMode = configModeItems.firstOrNull { it.id == selectedModeIdentifier }
}
ModeState(configModeItems, selectedMode)
}.collect {
modesMutableLiveData.value = it
}
}
}
fun setSelectedMode(mode: String?) {
selectedModeMutableLiveData.value = mode
verifierSecureStorage.setSelectedMode(mode)
}
fun resetSelectedModeIfNeeded() {
if (verifierSecureStorage.resetSelectedModeIfNeeded(
(configLiveData.value?.checkModeReselectAfterHours ?: 48) * 60 * 60 * 1000L
)
) {
selectedModeMutableLiveData.value = null
}
}
data class ModeState(val availableModes: List, val selectedMode: CheckModeInfoModelWithId?)
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/news/InfoCertificateNewsFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.news
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.activityViewModels
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.extensions.getDrawableIdentifier
import ch.admin.bag.covidcertificate.verifier.databinding.DialogFragmentInfoCertificateNewsBinding
import ch.admin.bag.covidcertificate.verifier.databinding.ItemCertificateNewsBinding
import ch.admin.bag.covidcertificate.verifier.modes.ModesAndConfigViewModel
class InfoCertificateNewsFragment : DialogFragment() {
companion object {
fun newInstance(): InfoCertificateNewsFragment = InfoCertificateNewsFragment()
}
private var _binding: DialogFragmentInfoCertificateNewsBinding? = null
private val binding get() = _binding!!
private val viewModel by activityViewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.CovidCertificate_ChooseModeDialog)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = DialogFragmentInfoCertificateNewsBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
setupNews()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun setupNews() {
val languageKey = getString(ch.admin.bag.covidcertificate.verifier.R.string.language_key)
viewModel.configLiveData.observe(viewLifecycleOwner) { configModel ->
val newsList = configModel.getInfoCovidCertificateNews(languageKey)
binding.infoCertificateNewsTitle.text = newsList?.title
binding.infoCertificateNewsList.removeAllViews()
newsList?.newsItems?.forEach { covidCertificateNewsItem ->
val itemView = ItemCertificateNewsBinding.inflate(layoutInflater, binding.infoCertificateNewsList, true)
val iconIdentifier = requireContext().getDrawableIdentifier(covidCertificateNewsItem.iconAndroid ?: "")
itemView.newsIcon.setImageResource(iconIdentifier)
itemView.newsText.text = covidCertificateNewsItem.text
}
}
binding.infoCertificateNewsCloseButton.setOnClickListener {
if (this@InfoCertificateNewsFragment.isVisible) dismiss()
}
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/pager/HomescreenPageAdapter.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.pager
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
class HomescreenPageAdapter(fragment: Fragment, private val itemsCount: Int) : FragmentStateAdapter(fragment) {
override fun getItemCount(): Int {
return itemsCount
}
override fun createFragment(position: Int): Fragment {
return HomescreenPagerFragment.getInstance(position)
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/pager/HomescreenPagerFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.pager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import ch.admin.bag.covidcertificate.verifier.R
import ch.admin.bag.covidcertificate.verifier.databinding.FragmentHomeScreenPagerBinding
class HomescreenPagerFragment : Fragment() {
companion object {
private const val ARG_POSITION = "ARG_POSITION"
fun getInstance(position: Int) = HomescreenPagerFragment().apply {
arguments = bundleOf(ARG_POSITION to position)
}
fun getDescriptions() = listOf(
R.string.verifier_homescreen_pager_description_1,
R.string.verifier_homescreen_pager_description_2
)
}
private var _binding: FragmentHomeScreenPagerBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentHomeScreenPagerBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val position = requireArguments().getInt(ARG_POSITION)
val homescreenPagerDescriptions: List = getDescriptions()
val homescreenImages = getImageAssets()
with(binding) {
homescreenImage.setImageResource(homescreenImages[position])
homescreenDescription.setText(homescreenPagerDescriptions[position])
root.post {
// It seems that the viewpager has an issue with wrap_content and multiline text views. That's why we have to
// request a layout on the description again after the full view is laid out, to ensure the whole text is visible.
homescreenDescription.requestLayout()
}
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun getImageAssets() = listOf(
R.drawable.ic_illu_home_1,
R.drawable.ic_illu_home_2
)
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/qr/VerifierQrScanFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.qr
import android.content.res.ColorStateList
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.graphics.toColorInt
import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.setFragmentResultListener
import ch.admin.bag.covidcertificate.common.qr.QrScanFragment
import ch.admin.bag.covidcertificate.sdk.android.CovidCertificateSdk
import ch.admin.bag.covidcertificate.sdk.android.models.VerifierCertificateHolder
import ch.admin.bag.covidcertificate.sdk.android.verification.state.VerifierDecodeState
import ch.admin.bag.covidcertificate.sdk.core.models.state.StateError
import ch.admin.bag.covidcertificate.verifier.R
import ch.admin.bag.covidcertificate.verifier.data.VerifierSecureStorage
import ch.admin.bag.covidcertificate.verifier.databinding.FragmentQrScanBinding
import ch.admin.bag.covidcertificate.verifier.modes.ChooseModeDialogFragment
import ch.admin.bag.covidcertificate.verifier.modes.ModesAndConfigViewModel
import ch.admin.bag.covidcertificate.verifier.verification.VerificationFragment
import ch.admin.bag.covidcertificate.verifier.verification.VerificationFragment.Companion.RESULT_FRAGMENT_POPPED
import ch.admin.bag.covidcertificate.verifier.zebra.ZebraActionBroadcastReceiver
class VerifierQrScanFragment : QrScanFragment() {
companion object {
val TAG = VerifierQrScanFragment::class.java.canonicalName
fun newInstance(): VerifierQrScanFragment {
return VerifierQrScanFragment()
}
}
private var _binding: FragmentQrScanBinding? = null
private val binding get() = _binding!!
override val viewFinderErrorColor: Int = R.color.red_error_qr_verifier
override val viewFinderColor: Int = R.color.white
override val torchOnDrawable: Int = R.drawable.ic_light_on_black
override val torchOffDrawable: Int = R.drawable.ic_light_off
override val zoomOnDrawable: Int = R.drawable.ic_zoom_on_black
override val zoomOffDrawable: Int = R.drawable.ic_zoom_off_white
private val verifierSecureStorage by lazy { VerifierSecureStorage.getInstance(requireContext()) }
private val zebraBroadcastReceiver by lazy { ZebraActionBroadcastReceiver(verifierSecureStorage) }
private val modesViewModel by activityViewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Restart the Analyzer whenever the VerificationFragment is popped
setFragmentResultListener(RESULT_FRAGMENT_POPPED) { _, _ ->
setScannerCallback()
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
super.onCreateView(inflater, container, savedInstanceState)
_binding = FragmentQrScanBinding.inflate(inflater, container, false)
toolbar = binding.fragmentQrScannerToolbar
qrCodeScanner = binding.qrCodeScanner
cutOut = binding.cameraPreviewContainer
flashButton = binding.fragmentQrScannerFlashButton
errorView = binding.fragmentQrScannerErrorView
errorCodeView = binding.qrCodeScannerErrorCode
zoomButton = binding.fragmentQrZoom
invalidCodeText = binding.qrCodeScannerInvalidCodeText
viewFinderTopLeftIndicator = binding.qrCodeScannerTopLeftIndicator
viewFinderTopRightIndicator = binding.qrCodeScannerTopRightIndicator
viewFinderBottomLeftIndicator = binding.qrCodeScannerBottomLeftIndicator
viewFinderBottomRightIndicator = binding.qrCodeScannerBottomRightIndicator
if (verifierSecureStorage.hasZebraScanner()) {
// Needs to be before the onAttachedToWindow of the scanner view (which happens between onCreateView and onViewCreated)
qrCodeScanner.setAutoActivateOnAttach(false)
}
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (verifierSecureStorage.hasZebraScanner()) {
binding.qrCodeScannerExternalHardwareDetected.isVisible = true
} else {
activateCamera()
}
modesViewModel.modesLiveData.observe(viewLifecycleOwner) { modeState ->
val mode = modeState.selectedMode
if (mode == null || modeState.availableModes.size <= 1) {
binding.fragmentQrScannerModeIndicator.visibility = View.GONE
} else {
binding.fragmentQrScannerModeIndicator.backgroundTintList = ColorStateList.valueOf(mode.hexColor.toColorInt())
binding.fragmentQrScannerModeIndicator.text = mode.title
binding.fragmentQrScannerModeIndicator.visibility = View.VISIBLE
}
binding.fragmentQrScannerModeIndicator.setOnClickListener {
ChooseModeDialogFragment.newInstance()
.show(childFragmentManager, ChooseModeDialogFragment::class.java.canonicalName)
}
}
setupActivateCameraButton()
}
override fun onResume() {
super.onResume()
val modeState = modesViewModel.modesLiveData.value
if (modeState?.availableModes?.size ?: 0 > 1 && modeState?.selectedMode == null) {
ChooseModeDialogFragment.newInstance().apply { isCancelable = false }
.show(childFragmentManager, ChooseModeDialogFragment::class.java.canonicalName)
}
zebraBroadcastReceiver.registerWith(requireContext()) { decodeQrCodeData(it, {}, {}) }
}
override fun onPause() {
super.onPause()
zebraBroadcastReceiver.unregisterWith(requireContext())
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun decodeQrCodeData(qrCodeData: String, onDecodeSuccess: () -> Unit, onDecodeError: (StateError) -> Unit) {
when (val decodeState = CovidCertificateSdk.Verifier.decode(qrCodeData)) {
is VerifierDecodeState.SUCCESS -> {
onDecodeSuccess.invoke()
showVerificationFragment(decodeState.certificateHolder)
}
is VerifierDecodeState.ERROR -> onDecodeError.invoke(decodeState.error)
}
}
private fun setupActivateCameraButton() {
binding.fragmentCameraActivate.isVisible = verifierSecureStorage.hasZebraScanner()
binding.fragmentCameraActivate.setOnClickListener {
if (qrCodeScanner.isCameraActive) {
deactivateCamera()
} else {
activateCamera()
}
binding.fragmentCameraActivate.isSelected = !qrCodeScanner.isCameraActive
val iconColor = if (qrCodeScanner.isCameraActive) R.color.white else R.color.black
binding.fragmentCameraActivate.imageTintList =
ColorStateList.valueOf(ContextCompat.getColor(requireContext(), iconColor))
}
}
private fun showVerificationFragment(certificateHolder: VerifierCertificateHolder) {
parentFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit)
.add(R.id.fragment_container, VerificationFragment.newInstance(certificateHolder))
.addToBackStack(VerificationFragment::class.java.canonicalName)
.commit()
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/updateboarding/UpdateboardingActivity.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.updateboarding
import androidx.viewpager2.adapter.FragmentStateAdapter
import ch.admin.bag.covidcertificate.common.onboarding.BaseOnboardingActivity
import ch.admin.bag.covidcertificate.common.onboarding.SimpleOnboardingPagerAdapter
class UpdateboardingActivity : BaseOnboardingActivity() {
override fun getPagerAdapter(): FragmentStateAdapter? {
val onboardingType = intent.getStringExtra(EXTRA_ONBOARDING_TYPE)?.let { OnboardingType.valueOf(it) }
return when (onboardingType) {
OnboardingType.CERTIFICATE_LIGHT -> SimpleOnboardingPagerAdapter(
this,
SimpleOnboardingPagerAdapter.FragmentProvider { UpdateboardingCertificateLightFragment.newInstance() }
)
OnboardingType.AGB_UPDATE -> SimpleOnboardingPagerAdapter(
this,
SimpleOnboardingPagerAdapter.FragmentProvider { UpdateboardingAgbFragment.newInstance() }
)
else -> null
}
}
enum class OnboardingType {
CERTIFICATE_LIGHT, AGB_UPDATE
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/updateboarding/UpdateboardingAgbFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.updateboarding
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import ch.admin.bag.covidcertificate.common.util.UrlUtil
import ch.admin.bag.covidcertificate.verifier.R
import ch.admin.bag.covidcertificate.verifier.databinding.FragmentUpdateboardingAgbBinding
class UpdateboardingAgbFragment : Fragment(R.layout.fragment_updateboarding_agb) {
companion object {
fun newInstance() = UpdateboardingAgbFragment()
}
private var _binding: FragmentUpdateboardingAgbBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentUpdateboardingAgbBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.onboardingContinueButton.setOnClickListener {
(requireActivity() as UpdateboardingActivity).continueToNextPage()
}
binding.itemAgbLink.setOnClickListener { v ->
val url = v.context.getString(R.string.verifier_terms_privacy_link)
UrlUtil.openUrl(v.context, url)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/updateboarding/UpdateboardingCertificateLightFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.updateboarding
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import ch.admin.bag.covidcertificate.common.util.UrlUtil
import ch.admin.bag.covidcertificate.verifier.R
import ch.admin.bag.covidcertificate.verifier.databinding.FragmentUpdateboardingCertificateLightBinding
class UpdateboardingCertificateLightFragment : Fragment(R.layout.fragment_updateboarding_certificate_light) {
companion object {
fun newInstance() = UpdateboardingCertificateLightFragment()
}
private var _binding: FragmentUpdateboardingCertificateLightBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FragmentUpdateboardingCertificateLightBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.onboardingContinueButton.setOnClickListener {
(requireActivity() as UpdateboardingActivity).continueToNextPage()
}
binding.itemAgbLink.setOnClickListener { v ->
val url = v.context.getString(R.string.verifier_terms_privacy_link)
UrlUtil.openUrl(v.context, url)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/verification/VerificationAdapter.kt
================================================
package ch.admin.bag.covidcertificate.verifier.verification
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import ch.admin.bag.covidcertificate.verifier.databinding.ItemVerificationStatusBinding
import ch.admin.bag.covidcertificate.verifier.databinding.ItemVerificationStatusInfoBinding
class VerificationAdapter(
private val onRetryClickListener: View.OnClickListener,
private val onPlayStoreClickListener: View.OnClickListener
) :
RecyclerView.Adapter() {
private val items: MutableList = mutableListOf()
override fun getItemViewType(position: Int): Int {
return when (items[position]) {
is StatusItem -> 0
is InfoItem -> 1
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
0 -> StatusViewHolder(ItemVerificationStatusBinding.inflate(LayoutInflater.from(parent.context), parent, false))
else -> InfoViewHolder(
ItemVerificationStatusInfoBinding.inflate(LayoutInflater.from(parent.context), parent, false),
onRetryClickListener,
onPlayStoreClickListener
)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val item = items[position]
val type = getItemViewType(position)
when (type) {
0 -> (holder as StatusViewHolder).bindStatusItem(item as StatusItem)
else -> (holder as InfoViewHolder).bindStatusItem(item as InfoItem)
}
}
override fun getItemCount(): Int = items.size
fun setItems(newItems: List) {
items.clear()
items.addAll(newItems)
notifyDataSetChanged()
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/verification/VerificationFragment.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.verification
import android.annotation.SuppressLint
import android.content.res.ColorStateList
import android.content.res.Resources
import android.graphics.drawable.GradientDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import androidx.core.view.doOnLayout
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager.POP_BACK_STACK_INCLUSIVE
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.setFragmentResult
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import ch.admin.bag.covidcertificate.common.util.UrlUtil
import ch.admin.bag.covidcertificate.common.util.getInvalidErrorCode
import ch.admin.bag.covidcertificate.common.views.VerticalMarginItemDecoration
import ch.admin.bag.covidcertificate.sdk.android.CovidCertificateSdk
import ch.admin.bag.covidcertificate.sdk.android.models.VerifierCertificateHolder
import ch.admin.bag.covidcertificate.sdk.android.verification.state.VerifierDecodeState
import ch.admin.bag.covidcertificate.sdk.core.models.state.ModeValidityState
import ch.admin.bag.covidcertificate.sdk.core.models.state.SuccessState
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState
import ch.admin.bag.covidcertificate.verifier.R
import ch.admin.bag.covidcertificate.verifier.data.VerifierSecureStorage
import ch.admin.bag.covidcertificate.verifier.databinding.FragmentVerificationBinding
import ch.admin.bag.covidcertificate.verifier.databinding.ItemVerificationHeaderIconBinding
import ch.admin.bag.covidcertificate.verifier.modes.ModesAndConfigViewModel
import ch.admin.bag.covidcertificate.verifier.zebra.ZebraActionBroadcastReceiver
import kotlin.math.max
import kotlin.math.roundToInt
class VerificationFragment : Fragment() {
companion object {
private val TAG = VerificationFragment::class.java.canonicalName
private const val ARG_DECODE_DGC = "ARG_DECODE_DGC"
const val RESULT_FRAGMENT_POPPED = "RESULT_FRAGMENT_POPPED"
fun newInstance(certificateHolder: VerifierCertificateHolder): VerificationFragment {
return VerificationFragment().apply {
arguments = Bundle().apply {
putSerializable(ARG_DECODE_DGC, certificateHolder)
}
}
}
}
private var _binding: FragmentVerificationBinding? = null
private val binding get() = _binding!!
private val verificationViewModel: VerificationViewModel by viewModels()
private val modesViewModel by activityViewModels()
private val zebraBroadcastReceiver by lazy { ZebraActionBroadcastReceiver(VerifierSecureStorage.getInstance(requireContext())) }
private var certificateHolder: VerifierCertificateHolder? = null
private var isClosedByUser = false
private lateinit var verificationAdapter: VerificationAdapter
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
isClosedByUser = true
parentFragmentManager.popBackStack()
setFragmentResult(RESULT_FRAGMENT_POPPED, bundleOf())
remove()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (arguments?.containsKey(ARG_DECODE_DGC) == false) {
return
}
certificateHolder = requireArguments().getSerializable(ARG_DECODE_DGC) as VerifierCertificateHolder
requireActivity().onBackPressedDispatcher.addCallback(onBackPressedCallback)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentVerificationBinding.inflate(inflater, container, false)
return binding.root
}
@SuppressLint("SetTextI18n")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.doOnLayout { setupScrollBehavior() }
verificationAdapter = VerificationAdapter(onRetryClickListener = {
certificateHolder?.let {
verificationViewModel.retryVerification(it, modesViewModel.modesLiveData.value?.selectedMode?.id ?: "unknown")
}
}, onPlayStoreClickListener = {
UrlUtil.openUrl(context, getString(R.string.verifier_android_app_google_play_store_url))
})
binding.verificationStatusRecyclerView.apply {
layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
adapter = verificationAdapter
addItemDecoration(VerticalMarginItemDecoration(context, R.dimen.spacing_very_small))
}
binding.verificationFooterButton.setOnClickListener {
isClosedByUser = true
onBackPressedCallback.remove()
parentFragmentManager.popBackStack()
setFragmentResult(RESULT_FRAGMENT_POPPED, bundleOf())
}
verificationViewModel.verificationLiveData.observe(viewLifecycleOwner) {
updateHeaderAndVerificationView(it)
if (it is VerificationState.SUCCESS && (it.successState as SuccessState.VerifierSuccessState).modeValidity.modeValidityState == ModeValidityState.UNKNOWN_MODE) {
AlertDialog.Builder(requireContext())
.setMessage(R.string.verifier_error_mode_no_longer_exists)
.setPositiveButton(R.string.ok_button) { _, _ -> }
.show()
modesViewModel.setSelectedMode(null)
parentFragmentManager.popBackStack(VerificationFragment::class.java.canonicalName, POP_BACK_STACK_INCLUSIVE)
}
}
verifyAndDisplayCertificateHolder()
}
override fun onResume() {
super.onResume()
zebraBroadcastReceiver.registerWith(requireContext()) { decodeQrCodeData(it) }
}
override fun onPause() {
super.onPause()
// Pop the backstack back to the QR scanner screen when the verification fragment is put into the background, unless
// it was closed by the user (e.g. with the back or OK button)
if (!isClosedByUser) {
onBackPressedCallback.remove()
parentFragmentManager.popBackStack()
setFragmentResult(RESULT_FRAGMENT_POPPED, bundleOf())
}
zebraBroadcastReceiver.unregisterWith(requireContext())
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun verifyAndDisplayCertificateHolder() {
val certificateHolder = certificateHolder ?: return
binding.verificationScrollView.smoothScrollTo(0, 0)
val personName = certificateHolder.getPersonName()
binding.verificationFamilyName.text = personName.prettyFamilyName()
binding.verificationGivenName.text = personName.prettyGivenName()
binding.verificationBirthdate.text = certificateHolder.getFormattedDateOfBirth()
binding.verificationStandardizedNameLabel.text = personName.prettyStandardizedName()
verificationViewModel.startVerification(
certificateHolder,
modesViewModel.modesLiveData.value?.selectedMode?.id ?: "unknown"
)
}
private fun updateHeaderAndVerificationView(verificationState: VerificationState) {
updateHeader(verificationState)
updateStatusBubbles(verificationState)
}
private fun updateHeader(state: VerificationState) {
val context = binding.root.context
val isLoading = state == VerificationState.LOADING
binding.verificationHeaderProgressBar.isVisible = isLoading
binding.verificationHeaderIcon.isVisible = !isLoading
val inflater = LayoutInflater.from(context)
binding.verificationHeaderIcons.isVisible = !isLoading
binding.verificationHeaderIcons.removeAllViews()
val headerIcons = state.getValidationStatusIconsLarge()
headerIcons.forEach {
val iconView = ItemVerificationHeaderIconBinding.inflate(inflater, binding.verificationHeaderIcons, true)
iconView.root.setImageResource(it)
}
ColorStateList.valueOf(ContextCompat.getColor(context, state.getHeaderColor())).let { headerBackgroundTint ->
binding.verificationBaseGroup.backgroundTintList = headerBackgroundTint
binding.verificationContentGroup.backgroundTintList = headerBackgroundTint
binding.verificationHeaderGroup.backgroundTintList = headerBackgroundTint
}
}
private fun updateStatusBubbles(state: VerificationState) {
val context = binding.root.context
verificationAdapter.setItems(
state.getVerificationStateItems(
context,
modesViewModel.modesLiveData.value?.selectedMode?.title ?: ""
)
)
binding.verificationErrorCode.apply {
visibility = View.INVISIBLE
if (state is VerificationState.ERROR) {
visibility = View.VISIBLE
text = state.error.code
} else if (state is VerificationState.INVALID) {
val errorCode = state.getInvalidErrorCode()
if (errorCode.isNotEmpty()) {
visibility = View.VISIBLE
text = errorCode
}
}
}
}
private fun setupScrollBehavior() {
val headerCollapseManager = HeaderCollapseManager(resources, binding)
binding.verificationScrollView.setOnScrollChangeListener(headerCollapseManager)
}
private fun decodeQrCodeData(qrCodeData: String) {
when (val decodeState = CovidCertificateSdk.Verifier.decode(qrCodeData)) {
is VerifierDecodeState.SUCCESS -> {
certificateHolder = decodeState.certificateHolder
verifyAndDisplayCertificateHolder()
}
is VerifierDecodeState.ERROR -> {
// Ignore errors when scanning in the details screen
}
}
}
internal class HeaderCollapseManager(resources: Resources, binding: FragmentVerificationBinding) : View.OnScrollChangeListener {
private val root = binding.verificationBaseGroup
private val headerGroup = binding.verificationHeaderGroup
private val headerShadow = binding.verificationHeaderGroupShadow
private val sheetGroup = binding.verificationSheetGroup
private val scrollOffset = (sheetGroup.layoutParams as ViewGroup.MarginLayoutParams).topMargin
private val minHeaderHeight = resources.getDimensionPixelSize(R.dimen.header_height_default)
private val maxHeaderHeight = resources.getDimensionPixelSize(R.dimen.header_height_max)
private val diffMaxMinHeaderHeight = maxHeaderHeight - minHeaderHeight
private val headerShadowAnimRange = resources.getDimensionPixelSize(R.dimen.spacing_medium)
private val sheetDefaultCornerRadius = resources.getDimensionPixelSize(R.dimen.corner_radius_sheet)
override fun onScrollChange(v: View, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) {
val scrollVertical = max(scrollY - scrollOffset, 0)
val progressPadding = (scrollVertical / minHeaderHeight.toFloat()).coerceIn(0f, 1f)
headerGroup.setPadding(0, ((1f - progressPadding) * minHeaderHeight).roundToInt(), 0, 0)
val progressSize = (scrollVertical / diffMaxMinHeaderHeight.toFloat()).coerceIn(0f, 1f)
val lp: ViewGroup.LayoutParams = headerGroup.layoutParams
lp.height = (maxHeaderHeight - progressSize * diffMaxMinHeaderHeight).roundToInt()
headerGroup.layoutParams = lp
val progressHeaderShadow =
((scrollVertical - diffMaxMinHeaderHeight) / headerShadowAnimRange.toFloat()).coerceIn(0f, 1f)
headerShadow.alpha = progressHeaderShadow
val progressSheetCorner = ((scrollVertical - minHeaderHeight) / scrollOffset.toFloat()).coerceIn(0f, 1f)
val sheetCornerRadius = (1f - progressSheetCorner) * sheetDefaultCornerRadius
(sheetGroup.background as? GradientDrawable)?.cornerRadii =
floatArrayOf(sheetCornerRadius, sheetCornerRadius, sheetCornerRadius, sheetCornerRadius, 0f, 0f, 0f, 0f)
root.requestLayout()
}
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/verification/VerificationItem.kt
================================================
package ch.admin.bag.covidcertificate.verifier.verification
import android.text.SpannableString
sealed class VerificationItem
data class StatusItem(val statusString: SpannableString, val statusIcon: Int, val bubbleColor: Int, val isLoading: Boolean) :
VerificationItem()
data class InfoItem(
val statusString: String,
val infoIconColor: Int,
val bubbleColor: Int,
val showRetry: Boolean,
val showAppLink: Boolean
) :
VerificationItem()
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/verification/VerificationStateUtil.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.verification
import android.content.Context
import android.text.SpannableString
import androidx.annotation.ColorRes
import androidx.annotation.DrawableRes
import ch.admin.bag.covidcertificate.common.R
import ch.admin.bag.covidcertificate.common.util.makeBold
import ch.admin.bag.covidcertificate.sdk.core.data.ErrorCodes
import ch.admin.bag.covidcertificate.sdk.core.models.state.*
/**
* The verification state indicates an offline mode if it is an ERROR and the error code is set to GENERAL_OFFLINE (G|OFF)
*/
fun VerificationState.isOfflineMode() = this is VerificationState.ERROR && this.error.code == ErrorCodes.GENERAL_OFFLINE
/**
* @return A list of 0-n [StatusItem] and optionally one or none [InfoItem]
*/
fun VerificationState.getVerificationStateItems(context: Context, modeTitle: String): List {
val items = mutableListOf()
val isLoading = this == VerificationState.LOADING
// Get a list of status bubbles based on the verification state
val statusString = getValidationStatusStrings(context, modeTitle)
val statusIcons = getValidationStatusIcons()
val statusBubbleColors = getStatusBubbleColors()
val numStatus = listOf(statusString.size, statusIcons.size, statusBubbleColors.size).minOrNull() ?: 0
for (i in 0 until numStatus) {
items.add(StatusItem(statusString[i], statusIcons[i], statusBubbleColors[i], isLoading))
}
if (!isLoading) {
// Add an additional info status bubble if it's not a loading state
val statusInfoText = getStatusInformationString(context)
if (statusInfoText != null) {
val showRetry = this is VerificationState.ERROR
var showAppStoreLink = false
if (this is VerificationState.SUCCESS) {
if (getModeValidity() == ModeValidityState.UNKNOWN) {
showAppStoreLink = true
}
}
items.add(InfoItem(statusInfoText, getInfoIconColor(), getStatusInformationBubbleColor(), showRetry, showAppStoreLink))
}
}
return items
}
/**
* @return A list of spannable strings shown in the status bubbles (each list entry is shown in a separate bubble)
*/
fun VerificationState.getValidationStatusStrings(context: Context, modeTitle: String): List {
return when (this) {
is VerificationState.SUCCESS -> when (getModeValidity()) {
ModeValidityState.SUCCESS -> listOf(context.getString(R.string.verifier_verify_success_title).makeBold())
ModeValidityState.IS_LIGHT -> listOf(
context.getString(R.string.verifier_verify_light_not_supported_by_mode_title).replace("{MODUS}", modeTitle)
.makeBold()
)
ModeValidityState.INVALID -> listOf(
SpannableString(context.getString(R.string.verifier_verify_success_info_for_certificate_valid)),
SpannableString(context.getString(R.string.verifier_verify_success_info_for_blacklist)),
context.getString(R.string.verifier_verify_error_info_for_national_rules).replace("{MODUS}", modeTitle).makeBold()
)
ModeValidityState.SUCCESS_2G -> listOf(
context.getString(R.string.verifier_2g_plus_success2g).makeBold(),
SpannableString(context.getString(R.string.verifier_2g_plus_infoplus))
)
ModeValidityState.SUCCESS_2G_PLUS -> listOf(
context.getString(R.string.verifier_2g_plus_successplus).makeBold(),
SpannableString(context.getString(R.string.verifier_2g_plus_info2g))
)
ModeValidityState.UNKNOWN -> listOf(
SpannableString(context.getString(R.string.verifier_error_app_store_text))
)
else -> listOf(context.getString(R.string.verifier_verify_error_list_title).makeBold())
}
is VerificationState.ERROR -> {
listOf(
if (isOfflineMode()) {
context.getString(R.string.verifier_offline_error_title).makeBold()
} else {
context.getString(R.string.verifier_verify_error_list_title).makeBold()
}
)
}
is VerificationState.INVALID -> {
val stateStrings = mutableListOf()
val signatureState = this.signatureState
if (signatureState is CheckSignatureState.SUCCESS) {
stateStrings.add(SpannableString(context.getString(R.string.verifier_verify_success_info_for_certificate_valid)))
if (this.revocationState is CheckRevocationState.SUCCESS) {
stateStrings.add(SpannableString(context.getString(R.string.verifier_verify_success_info_for_blacklist)))
when (this.nationalRulesState) {
is CheckNationalRulesState.INVALID,
is CheckNationalRulesState.NOT_VALID_ANYMORE,
is CheckNationalRulesState.NOT_YET_VALID -> {
stateStrings.add(
context.getString(R.string.verifier_verify_error_info_for_national_rules)
.replace("{MODUS}", modeTitle).makeBold()
)
}
else -> {}
}
} else {
stateStrings.add(context.getString(R.string.verifier_verify_error_info_for_blacklist).makeBold())
}
} else {
if (signatureState is CheckSignatureState.INVALID
&& signatureState.signatureErrorCode == ErrorCodes.SIGNATURE_TIMESTAMP_EXPIRED
) {
stateStrings.add(context.getString(R.string.verifier_certificate_light_error_expired).makeBold())
} else {
stateStrings.add(context.getString(R.string.verifier_verify_error_info_for_certificate_invalid).makeBold())
}
}
stateStrings
}
VerificationState.LOADING -> listOf(SpannableString(context.getString(R.string.wallet_certificate_verifying)))
}
}
/**
* @return The string to be shown in the info status bubble
*/
fun VerificationState.getStatusInformationString(context: Context): String? {
return when (this) {
is VerificationState.ERROR -> {
if (isOfflineMode()) {
context.getString(R.string.verifier_offline_error_text)
} else {
context.getString(R.string.verifier_verify_error_list_info_text)
}
}
is VerificationState.INVALID -> null
VerificationState.LOADING -> context.getString(R.string.wallet_certificate_verifying)
is VerificationState.SUCCESS -> when (getModeValidity()) {
ModeValidityState.SUCCESS -> if (this.isLightCertificate) {
context.getString(R.string.verifier_verify_success_certificate_light_info)
} else {
context.getString(R.string.verifier_verify_success_info)
}
ModeValidityState.IS_LIGHT -> context.getString(R.string.verifier_verify_light_not_supported_by_mode_text)
ModeValidityState.UNKNOWN -> context.getString(R.string.verifier_error_app_store_button)
ModeValidityState.INVALID -> null
ModeValidityState.SUCCESS_2G -> null
ModeValidityState.SUCCESS_2G_PLUS -> null
else -> context.getString(R.string.verifier_verify_error_list_info_text)
}
}
}
/**
* @return A list of drawable resource IDs shown in the status bubbles (each list entry is shown in a separate bubble)
*/
@DrawableRes
fun VerificationState.getValidationStatusIcons(): List {
return when (this) {
is VerificationState.ERROR -> {
listOf(
if (isOfflineMode()) {
R.drawable.ic_no_connection
} else {
R.drawable.ic_process_error
}
)
}
is VerificationState.INVALID -> {
val stateIcons = mutableListOf()
if (this.signatureState is CheckSignatureState.SUCCESS) {
stateIcons.add(R.drawable.ic_privacy_grey)
if (this.revocationState is CheckRevocationState.SUCCESS) {
stateIcons.add(R.drawable.ic_check_grey)
stateIcons.add(R.drawable.ic_error)
} else {
stateIcons.add(R.drawable.ic_error)
}
} else {
stateIcons.add(R.drawable.ic_error)
}
stateIcons
}
is VerificationState.SUCCESS -> when (getModeValidity()) {
ModeValidityState.SUCCESS -> listOf(R.drawable.ic_check_green)
ModeValidityState.IS_LIGHT, ModeValidityState.UNKNOWN -> listOf(R.drawable.ic_process_error)
ModeValidityState.INVALID -> listOf(
R.drawable.ic_privacy_grey,
R.drawable.ic_check_grey,
R.drawable.ic_error
)
ModeValidityState.SUCCESS_2G -> listOf(
R.drawable.ic_2g_green,
R.drawable.ic_plus
)
ModeValidityState.SUCCESS_2G_PLUS -> listOf(
R.drawable.ic_plus_green,
R.drawable.ic_2g_grey
)
else -> listOf(R.drawable.ic_error)
}
VerificationState.LOADING -> listOf(0)
}
}
/**
* @return A list of drawable resource IDs that correspond to the large verification state icon in the header
*/
fun VerificationState.getValidationStatusIconsLarge(): List {
return when (this) {
is VerificationState.ERROR -> {
if (isOfflineMode()) {
listOf(R.drawable.ic_no_connection_large)
} else {
listOf(R.drawable.ic_process_error_large)
}
}
is VerificationState.INVALID -> listOf(R.drawable.ic_error_large)
is VerificationState.LOADING -> emptyList()
is VerificationState.SUCCESS -> when (getModeValidity()) {
ModeValidityState.SUCCESS -> listOf(R.drawable.ic_check_large)
ModeValidityState.IS_LIGHT, ModeValidityState.UNKNOWN -> listOf(R.drawable.ic_process_error_large)
ModeValidityState.SUCCESS_2G -> listOf(
ch.admin.bag.covidcertificate.verifier.R.drawable.ic_header_2g_on,
ch.admin.bag.covidcertificate.verifier.R.drawable.ic_header_plus_off,
)
ModeValidityState.SUCCESS_2G_PLUS -> listOf(
ch.admin.bag.covidcertificate.verifier.R.drawable.ic_header_2g_off,
ch.admin.bag.covidcertificate.verifier.R.drawable.ic_header_plus_on,
)
else -> listOf(R.drawable.ic_error_large)
}
}
}
/**
* @return A list of color resource IDs for the status bubble backgrounds
*/
@ColorRes
fun VerificationState.getStatusBubbleColors(): List {
return when (this) {
is VerificationState.ERROR -> listOf(R.color.orangeish)
is VerificationState.INVALID -> {
val stateColors = mutableListOf()
if (this.signatureState is CheckSignatureState.SUCCESS) {
stateColors.add(R.color.greyish)
if (this.revocationState is CheckRevocationState.SUCCESS) {
stateColors.add(R.color.greyish)
stateColors.add(R.color.redish)
} else {
stateColors.add(R.color.redish)
}
} else {
stateColors.add(R.color.redish)
}
stateColors
}
VerificationState.LOADING -> listOf(R.color.greyish)
is VerificationState.SUCCESS -> when (getModeValidity()) {
ModeValidityState.SUCCESS -> listOf(R.color.greenish)
ModeValidityState.IS_LIGHT, ModeValidityState.UNKNOWN -> listOf(R.color.orangeish)
ModeValidityState.INVALID -> listOf(R.color.greyish, R.color.greyish, R.color.redish)
ModeValidityState.SUCCESS_2G, ModeValidityState.SUCCESS_2G_PLUS -> listOf(R.color.greenish, R.color.greyish)
else -> listOf(R.color.redish)
}
}
}
/**
* @return The background color resource ID for the info status bubble
*/
@ColorRes
fun VerificationState.getStatusInformationBubbleColor(): Int {
return when (this) {
is VerificationState.ERROR -> R.color.orangeish
is VerificationState.INVALID -> R.color.redish
VerificationState.LOADING -> R.color.greyish
is VerificationState.SUCCESS -> when (getModeValidity()) {
ModeValidityState.SUCCESS -> R.color.blueish
ModeValidityState.IS_LIGHT, ModeValidityState.UNKNOWN -> R.color.orangeish
else -> R.color.redish
}
}
}
/**
* @return The color resource ID for the info status bubble icon tint
*/
@ColorRes
fun VerificationState.getInfoIconColor(): Int {
return when (this) {
is VerificationState.ERROR -> R.color.orange
is VerificationState.INVALID -> R.color.red
VerificationState.LOADING -> R.color.grey
is VerificationState.SUCCESS -> when (getModeValidity()) {
ModeValidityState.SUCCESS -> R.color.blue
ModeValidityState.IS_LIGHT, ModeValidityState.UNKNOWN -> R.color.orange
else -> R.color.red
}
}
}
/**
* @return The header background color
*/
@ColorRes
fun VerificationState.getHeaderColor(): Int {
return when (this) {
is VerificationState.ERROR -> R.color.orange
is VerificationState.INVALID -> R.color.red
VerificationState.LOADING -> R.color.grey
is VerificationState.SUCCESS -> {
when (getModeValidity()) {
ModeValidityState.SUCCESS, ModeValidityState.SUCCESS_2G, ModeValidityState.SUCCESS_2G_PLUS -> R.color.green
ModeValidityState.INVALID -> R.color.red
ModeValidityState.IS_LIGHT -> R.color.orange
ModeValidityState.UNKNOWN -> R.color.orange
ModeValidityState.UNKNOWN_MODE -> R.color.red_error
}
}
}
}
private fun VerificationState.SUCCESS.getModeValidity() =
(this.successState as SuccessState.VerifierSuccessState).modeValidity.modeValidityState
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/verification/VerificationViewHolder.kt
================================================
package ch.admin.bag.covidcertificate.verifier.verification
import android.content.res.ColorStateList
import android.view.View
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import ch.admin.bag.covidcertificate.verifier.databinding.ItemVerificationStatusBinding
import ch.admin.bag.covidcertificate.verifier.databinding.ItemVerificationStatusInfoBinding
class StatusViewHolder(private val binding: ItemVerificationStatusBinding) : RecyclerView.ViewHolder(binding.root) {
fun bindStatusItem(statusItem: StatusItem) {
binding.apply {
verificationStepTitle.text = statusItem.statusString
verificationStepProgressIndicator.progressIndicatorIcon.setImageResource(statusItem.statusIcon)
verificationStepProgressIndicator.progressIndicatorIcon.isVisible = !statusItem.isLoading
verificationStepProgressIndicator.progressIndicatorProgressBar.isVisible = statusItem.isLoading
verificationStepFrame.backgroundTintList =
ColorStateList.valueOf(ContextCompat.getColor(root.context, statusItem.bubbleColor))
}
}
}
class InfoViewHolder(
private val binding: ItemVerificationStatusInfoBinding,
private val onRetryClickListener: View.OnClickListener,
private val onPlayStoreClickListener: View.OnClickListener
) : RecyclerView.ViewHolder(binding.root) {
fun bindStatusItem(infoItem: InfoItem) {
binding.apply {
infoText.text = infoItem.statusString
infoIcon.imageTintList =
ColorStateList.valueOf(ContextCompat.getColor(root.context, infoItem.infoIconColor))
infoFrame.backgroundTintList =
ColorStateList.valueOf(ContextCompat.getColor(root.context, infoItem.bubbleColor))
if (infoItem.showRetry) {
infoRetry.isVisible = true
infoRetry.setOnClickListener { view ->
onRetryClickListener.onClick(view)
infoRetry.setOnClickListener(null)
}
} else if (infoItem.showAppLink) {
infoApplink.isVisible = true
infoApplink.setOnClickListener { view ->
onPlayStoreClickListener.onClick(view)
}
} else {
infoRetry.isVisible = false
infoApplink.isVisible = false
}
}
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/verification/VerificationViewModel.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.verification
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import ch.admin.bag.covidcertificate.sdk.android.CovidCertificateSdk
import ch.admin.bag.covidcertificate.sdk.android.models.VerifierCertificateHolder
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
class VerificationViewModel(application: Application) : AndroidViewModel(application) {
companion object {
private const val STATUS_LOAD_DELAY = 1000L
}
private val verificationStateMutableLiveData = MutableLiveData()
val verificationLiveData = verificationStateMutableLiveData as LiveData
fun startVerification(certificateHolder: VerifierCertificateHolder, verificationMode: String) {
viewModelScope.launch {
val verificationStateFlow = CovidCertificateSdk.Verifier.verify(certificateHolder, verificationMode, viewModelScope)
verificationStateFlow.collect {
verificationStateMutableLiveData.postValue(it)
}
}
}
fun retryVerification(certificateHolder: VerifierCertificateHolder, verificationMode: String) {
verificationStateMutableLiveData.value = VerificationState.LOADING
viewModelScope.launch {
delay(STATUS_LOAD_DELAY)
if (!isActive) return@launch
startVerification(certificateHolder, verificationMode)
}
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/zebra/ZebraActionBroadcastReceiver.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.verifier.zebra
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import ch.admin.bag.covidcertificate.verifier.data.VerifierSecureStorage
class ZebraActionBroadcastReceiver(private val secureStorage: VerifierSecureStorage) : BroadcastReceiver() {
companion object {
private const val INTENT_ACTION = "ch.admin.bag.covidcertificate.verifier.qr.zebra"
private const val INTENT_CATEGORY = Intent.CATEGORY_DEFAULT
private const val KEY_ZEBRA_RESULT_DATA_STRING = "com.symbol.datawedge.data_string"
}
private val intentFilter = IntentFilter().apply {
addAction(INTENT_ACTION)
addCategory(INTENT_CATEGORY)
}
private var onQrCodeScanned: (String) -> Unit = {}
override fun onReceive(context: Context, intent: Intent) {
if (intent.hasExtra(KEY_ZEBRA_RESULT_DATA_STRING)) {
handleQrCodeScannedResult(intent)
}
}
fun registerWith(context: Context, onQrCodeScanned: (String) -> Unit) {
this.onQrCodeScanned = onQrCodeScanned
if (secureStorage.hasZebraScanner()) {
context.registerReceiver(this, intentFilter)
}
}
fun unregisterWith(context: Context) {
if (secureStorage.hasZebraScanner()) {
context.unregisterReceiver(this)
}
}
private fun handleQrCodeScannedResult(intent: Intent) {
val qrCodeData = intent.getStringExtra(KEY_ZEBRA_RESULT_DATA_STRING)
qrCodeData?.let {
onQrCodeScanned.invoke(it)
}
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/zebra/ZebraDataWedgeApiUtil.kt
================================================
package ch.admin.bag.covidcertificate.verifier.zebra
import android.content.Context
import android.content.Intent
import androidx.core.os.bundleOf
import ch.admin.bag.covidcertificate.verifier.BuildConfig
import ch.admin.bag.covidcertificate.verifier.extensions.getApplicationSignature
/**
* A utility class to work with the Data Wedge API of Zebra scanner phones
* @see https://techdocs.zebra.com/datawedge/11-0/guide/output/intent/
*/
object ZebraDataWedgeApiUtil {
const val DATA_WEDGE_API_RESULT_ACTION = "com.symbol.datawedge.api.RESULT_ACTION"
const val DATA_WEDGE_API_ACTION = "com.symbol.datawedge.api.ACTION"
fun getEnumerateScannersIntent() = Intent().apply {
action = DATA_WEDGE_API_ACTION
putExtra("com.symbol.datawedge.api.ENUMERATE_SCANNERS", "")
}
fun getCreateProfileIntent() = Intent().apply {
action = DATA_WEDGE_API_ACTION
putExtra("com.symbol.datawedge.api.CREATE_PROFILE", "CovidCheck-${BuildConfig.FLAVOR}")
}
fun getSetConfigIntent(context: Context): Intent {
val configExtras = bundleOf(
"PROFILE_NAME" to "CovidCheck-${BuildConfig.FLAVOR}",
"PROFILE_ENABLED" to true,
"CONFIG_MODE" to "OVERWRITE",
"APP_LIST" to arrayOf(
bundleOf(
"PACKAGE_NAME" to BuildConfig.APPLICATION_ID,
"ACTIVITY_LIST" to arrayOf("*"),
)
),
"PLUGIN_CONFIG" to bundleOf(
"PLUGIN_NAME" to "INTENT",
"RESET_CONFIG" to false,
"PARAM_LIST" to bundleOf(
"intent_action" to "ch.admin.bag.covidcertificate.verifier.qr.zebra",
"intent_category" to Intent.CATEGORY_DEFAULT,
"intent_delivery" to 2, // 2 = Deliver via Broadcast
"intent_component_info" to bundleOf(
"PACKAGE_NAME" to BuildConfig.APPLICATION_ID,
"SIGNATURE" to context.getApplicationSignature(),
),
"intent_output_enabled" to true,
)
)
)
val configIntent = Intent().apply {
action = "com.symbol.datawedge.api.ACTION"
putExtra("com.symbol.datawedge.api.SET_CONFIG", configExtras)
}
return configIntent
}
}
================================================
FILE: verifier/src/main/java/ch/admin/bag/covidcertificate/verifier/zebra/ZebraResultActionBroadcastReceiver.kt
================================================
package ch.admin.bag.covidcertificate.verifier.zebra
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Bundle
import ch.admin.bag.covidcertificate.verifier.data.VerifierSecureStorage
class ZebraResultActionBroadcastReceiver : BroadcastReceiver() {
companion object {
private const val KEY_ZEBRA_ENUMERATE_SCANNER_RESULT = "com.symbol.datawedge.api.RESULT_ENUMERATE_SCANNERS"
}
override fun onReceive(context: Context, intent: Intent) {
if (intent.hasExtra(KEY_ZEBRA_ENUMERATE_SCANNER_RESULT)) {
handleEnumerateScannersResult(context, intent)
}
}
private fun handleEnumerateScannersResult(context: Context, intent: Intent) {
val storage = VerifierSecureStorage.getInstance(context)
val scanners = intent.getSerializableExtra(KEY_ZEBRA_ENUMERATE_SCANNER_RESULT) as? List
if (scanners != null && scanners.isNotEmpty()) {
storage.setHasZebraScanner(true)
// Create a profile in the Data Wedge API
val createProfileIntent = ZebraDataWedgeApiUtil.getCreateProfileIntent()
context.sendBroadcast(createProfileIntent)
// Configure the Data Wedge API
val setConfigIntent = ZebraDataWedgeApiUtil.getSetConfigIntent(context)
context.sendBroadcast(setConfigIntent)
} else {
storage.setHasZebraScanner(false)
}
}
}
================================================
FILE: verifier/src/main/play/listings/de-DE/full-description.txt
================================================
Covid-Zertifikate mit dem Mobiltelefon prüfen
COVID Certificate Check ist die offizielle App für das Prüfen von Covid-Zertifikaten in der Schweiz. Sie wird durch das Bundesamt für Informatik und Telekommunikation BIT im Auftrag des Bundesamtes für Gesundheit betrieben.
Mit der App lassen sich in der Schweiz ausgestellte Covid-Zertifikate auf Gültigkeit prüfen.
So funktioniert die App
Ein Button auf dem Startbildschirm aktiviert die Kamera des Smartphones und die Anwendung ist bereit zur Erfassung des QR-Codes.
Einfach den QR-Code auf dem Papier oder auf dem gezeigten Mobiltelefon mit einer Halter-Anwendung in das anzeigte Quadrat positionieren und der QR-Code wird automatisch erfasst. Unmittelbar danach führt das System eine automatische Prüfung gegen die Schweizer Gültigkeitskriterien durch.
- Ein Haken und ein grüner Hintergrund zeigen an, dass das vorgewiesene Zertifikat gültig ist.
- Ein Ausrufezeichen und ein roter Hintergrund zeigen an, dass das vorgewiesene Zertifikat nicht gültig ist.
- Ein Fragezeichen und ein oranger Hintergrund zeigen an, dass die Prüfung fehlgeschlagen ist.
Zudem wird noch der Name, Vorname und das Geburtsdatum der Inhaberin des Zertifikates angezeigt. Diese Daten sind mit dem vorgezeigten Ausweisdokument zu vergleichen.
Datenschutz ist zentral
Die Daten von Covid-Zertifikaten sowie von Prüfvorgängen werden nicht gespeichert.Ein Covid-Zertifikat ist durch eine digitale Signatur geschützt und dadurch fälschungssicher.
Die Anwendung der App ist auf die Schweiz beschränkt und unterliegt Schweizer Recht.
================================================
FILE: verifier/src/main/play/listings/de-DE/short-description.txt
================================================
Covid-Zertifikate prüfen
================================================
FILE: verifier/src/main/play/listings/de-DE/title.txt
================================================
COVID Certificate Check
================================================
FILE: verifier/src/main/play/listings/en-US/full-description.txt
================================================
Check COVID certificates with a mobile phone
COVID Certificate Check is the official app for checking COVID certificates in Switzerland. It is developed by the Federal Office of Information Technology, Systems and Telecommunication FOITT on behalf of the Federal Office of Public Health.
The app can be used to check the validity of COVID certificates issued in Switzerland.
How the app works
A button on the home screen activates the smartphone camera and the app is ready to capture the QR code.
Simply position the QR code on the paper or on the mobile phone shown with a holder app in the square displayed and the QR will be captured automatically.
Immediately afterwards, the system performs an automatic check concerning Swiss validity rules.
- A tick and a green background indicate that the presented certificate is valid.
- An exclamation mark and a red background indicate that the presented certificate is not valid.
- A question mark and an orange background indicate that the check failed.
In addition, the full name and date of birth of the certificate holder are displayed. These details are to be compared with the identification document presented.
Data protection is a top priority
The data concerning COVID certificates and checking processes is not stored. COVID certificates are protected by a digital signature and are thus forgery-proof.
The use of the app is limited to Switzerland and is subject to Swiss law.
================================================
FILE: verifier/src/main/play/listings/en-US/short-description.txt
================================================
Check COVID certificates
================================================
FILE: verifier/src/main/play/listings/en-US/title.txt
================================================
COVID Certificate Check
================================================
FILE: verifier/src/main/play/listings/fr-FR/full-description.txt
================================================
Vérification du certificat COVID au moyen du téléphone portable
COVID Certificate Check est le nom de l’application officielle permettant de vérifier la validité des certificats COVID en Suisse. Elle a été développée par l’Office fédéral de l’informatique et de la télécommunication sur mandant de l’Office fédéral de la santé publique (OFSP).
L’application permet de vérifier la validité des certificats COVID délivrés en Suisse.
Fonctionnement de l’application
Un bouton sur l'écran d'accueil active automatiquement l’appareil photo du smartphone, qui est alors prêt à scanner le code QR.
Pour capturer un code QR, il suffit de tenir votre smartphone de telle sorte que le code apparaisse dans le viseur de l’application. Il est possible de scanner les codes affichés sur un écran tout comme les codes imprimés. Dès que le code a été saisi, le système vérifie automatiquement la validité du certificat en tenant compte des règles en Suisse.
- Une coche sur fond vert indique que le certificat présenté est valide.
- Un point d'exclamation sur fond rouge indique que le certificat présenté n’est pas valide.
- Un point d’interrogation sur fond orange indique l’échec de la vérification.
En outre, le nom, le prénom et la date de naissance du titulaire du certificat sont affichés. Ces données doivent être comparées avec le document d'identité présenté.
Respect absolu de la protection des données
Les données relatives aux certificats COVID et aux procédures de vérification ne sont pas enregistrées. Le certificat COVID est protégé par une signature électronique et n’est donc pas falsifiable.
L'utilisation de l'application est limitée à la Suisse et est soumise au droit suisse.
================================================
FILE: verifier/src/main/play/listings/fr-FR/short-description.txt
================================================
Vérifier les certificats COVID
================================================
FILE: verifier/src/main/play/listings/fr-FR/title.txt
================================================
COVID Certificate Check
================================================
FILE: verifier/src/main/play/listings/it-IT/full-description.txt
================================================
Verificare i certificati COVID con un dispositivo mobile
L’applicazione COVID Certificate Check è l’app ufficiale per verificare i certificati COVID in Svizzera. È stato sviluppato dall’Ufficio federale dell’informatica e della telecomunicazione (UFIT) su mandato dell’Ufficio federale della sanità pubblica (UFSP).
L’applicazione permette di verificare la validità dei certificati COVID emessi in Svizzera.
Come funziona l’app?
Un pulsante sulla homescreen attiva la fotocamera dello smartphone si attiva e l’applicazione è pronta per scansionare il codice QR.
Basta quindi posizionare nell’apposito riquadro il codice QR che si trova sulla copia cartacea del certificato o quello visualizzato sul cellulare con l’applicazione messa a disposizione del titolare e il codice viene rilevato automaticamente.
Subito dopo, il sistema esegue un controllo automatico in base ai criteri di validità applicabili in Svizzera.
- Un segno di spunta su sfondo verde indica che il certificato presentato è valido.
- Un punto esclamativo su sfondo rosso indica che il certificato presentato non è valido.
- Un punto di domanda su sfondo arancione indica che la verifica non è andata a buon fine.
Vengono inoltre visualizzati il nome, il cognome e la data di nascita del titolare del certificato. Questi dati devono essere confrontati con quelli presenti nel documento d’identità esibito.
La protezione dei dati è fondamentale
I dati dei certificati COVID e quelli delle verifiche non vengono memorizzati. I certificati COVID recano una firma elettronica e quindi non sono falsificabili.
L'applicazione dell'app è limitata alla Svizzera ed è soggetta al diritto svizzero.
================================================
FILE: verifier/src/main/play/listings/it-IT/short-description.txt
================================================
Verificare i certificati COVID
================================================
FILE: verifier/src/main/play/listings/it-IT/title.txt
================================================
COVID Certificate Check
================================================
FILE: verifier/src/main/play/release-notes/en-US/default.txt
================================================
See https://github.com/admin-ch/CovidCertificate-App-Android/releases (or click Links > Changelog)
================================================
FILE: verifier/src/main/res/drawable/bg_bubble_bottom_left.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/ic_faq_image.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/ic_header_2g_off.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/ic_header_2g_on.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/ic_header_plus_off.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/ic_header_plus_on.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/ic_illu_home_1.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/ic_illu_home_2.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/ic_launcher_background.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/ic_settings.xml
================================================
================================================
FILE: verifier/src/main/res/drawable/illu_updateboarding_certificate_light.xml
================================================
================================================
FILE: verifier/src/main/res/layout/activity_main.xml
================================================
================================================
FILE: verifier/src/main/res/layout/dialog_fragment_choose_mode.xml
================================================
================================================
FILE: verifier/src/main/res/layout/dialog_fragment_info_certificate_news.xml
================================================
================================================
FILE: verifier/src/main/res/layout/fragment_home.xml
================================================
================================================
FILE: verifier/src/main/res/layout/fragment_home_screen_pager.xml
================================================
================================================
FILE: verifier/src/main/res/layout/fragment_qr_scan.xml
================================================
================================================
FILE: verifier/src/main/res/layout/fragment_updateboarding_agb.xml
================================================
================================================
FILE: verifier/src/main/res/layout/fragment_updateboarding_certificate_light.xml
================================================
================================================
FILE: verifier/src/main/res/layout/fragment_verification.xml
================================================
================================================
FILE: verifier/src/main/res/layout/item_certificate_news.xml
================================================
================================================
FILE: verifier/src/main/res/layout/item_mode_button.xml
================================================
================================================
FILE: verifier/src/main/res/layout/item_mode_info.xml
================================================
================================================
FILE: verifier/src/main/res/layout/item_progress_indicator.xml
================================================
================================================
FILE: verifier/src/main/res/layout/item_verification_header_icon.xml
================================================
================================================
FILE: verifier/src/main/res/layout/item_verification_status.xml
================================================
================================================
FILE: verifier/src/main/res/layout/item_verification_status_info.xml
================================================
================================================
FILE: verifier/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
================================================
FILE: verifier/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
================================================
FILE: wallet/.gitignore
================================================
/build
================================================
FILE: wallet/build.gradle
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'com.google.devtools.ksp' version '1.6.10-1.0.4'
id 'org.sonarqube' version '3.0'
id 'ch.ubique.gradle.ubdiag'
}
ext.readProperty = { paramName -> readPropertyWithDefault(paramName, null) }
ext.readPropertyWithDefault = { paramName, defaultValue ->
if (project.hasProperty(paramName)) {
return project.getProperties().get(paramName)
} else {
Properties properties = new Properties()
if (project.rootProject.file('local.properties').exists()) {
properties.load(project.rootProject.file('local.properties').newDataInputStream())
}
if (properties.getProperty(paramName) != null) {
return properties.getProperty(paramName)
} else {
return defaultValue
}
}
}
android {
compileSdkVersion 31
defaultConfig {
applicationId "ch.admin.bag.covidcertificate.wallet"
minSdkVersion readPropertyWithDefault('minSdkVersion', '23').toInteger()
targetSdkVersion 31
versionCode 4_10_00_00
versionName "4.10.0"
// Stops the Gradle plugin’s automatic rasterization of vectors
generatedDensities = []
buildConfigField "long", "BUILD_TIME", readPropertyWithDefault('buildTimestamp', System.currentTimeMillis()) + 'L'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// The following argument makes the Android Test Orchestrator run its
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
testOptions {
animationsDisabled = true
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
}
productFlavors {
// These app tokens are reserved for the official COVID Certificate app.
// If you intend to integrate the CovidCertificate-SDK into your app, please get in touch with BIT/BAG to get a token assigned.
dev {
buildConfigField "String", "BASE_URL", '"https://www.cc-d.bit.admin.ch/app/wallet/v1/"'
buildConfigField "String", "BASE_URL_DELIVERY", '"https://covidcertificate-app-d.bit.admin.ch/app/delivery/v1/"'
buildConfigField "String", "BASE_URL_TRANSFORMATION", '"https://covidcertificate-app-d.bit.admin.ch/app/transform/v1/"'
buildConfigField "String", "SDK_APP_TOKEN", '"c838a4c4-39e5-4bbb-8e75-e4382df2edfe"'
applicationIdSuffix '.dev'
}
abn {
buildConfigField "String", "BASE_URL", '"https://www.cc-a.bit.admin.ch/app/wallet/v1/"'
buildConfigField "String", "BASE_URL_DELIVERY", '"https://covidcertificate-app-a.bit.admin.ch/app/delivery/v1/"'
buildConfigField "String", "BASE_URL_TRANSFORMATION", '"https://covidcertificate-app-a.bit.admin.ch/app/transform/v1/"'
buildConfigField "String", "SDK_APP_TOKEN", '"e9802c49-4f2b-49cc-a645-24c206366455"'
applicationIdSuffix '.abn'
}
prod {
buildConfigField "String", "BASE_URL", '"https://www.cc.bit.admin.ch/app/wallet/v1/"'
buildConfigField "String", "BASE_URL_DELIVERY", '"https://covidcertificate-app.bit.admin.ch/app/delivery/v1/"'
buildConfigField "String", "BASE_URL_TRANSFORMATION", '"https://covidcertificate-app.bit.admin.ch/app/transform/v1/"'
buildConfigField "String", "SDK_APP_TOKEN", '"0795dc8b-d8d0-4313-abf2-510b12d50939"'
}
}
flavorDimensions "version"
signingConfigs {
release {
storeFile file(readPropertyWithDefault('keystoreFile', 'testKeystore'))
storePassword readProperty('keystorePassword')
keyAlias readPropertyWithDefault('keyAlias', 'keyAlias')
keyPassword readProperty('keyAliasPassword')
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
viewBinding true
}
}
sonarqube {
properties {
property "sonar.projectName", "COVID Certificate App Android"
property "sonar.projectKey", "covidcertificate-android"
property "sonar.organization", "admin-ch"
property "sonar.host.url", "https://sonarcloud.io"
}
}
dependencies {
androidTestImplementation 'androidx.test:rules:1.4.1-alpha03'
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.5.0-alpha03'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
implementation 'com.google.android.material:material:1.5.0'
implementation project(':common')
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.fragment:fragment-ktx:1.4.0'
implementation 'androidx.lifecycle:lifecycle-process:2.4.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'androidx.security:security-crypto:1.0.0'
implementation 'androidx.work:work-runtime-ktx:2.7.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1'
implementation 'com.squareup.moshi:moshi:1.13.0'
ksp 'com.squareup.moshi:moshi-kotlin-codegen:1.13.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation 'androidx.test:runner:1.4.0'
androidTestUtil 'androidx.test:orchestrator:1.4.1'
}
================================================
FILE: wallet/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
================================================
FILE: wallet/src/abn/assets/faq/config.json
================================================
{
"forceUpdate": false,
"infoBox": null,
"questions": {
"de": {
"faqTitle": "Was sind Covid-Zertifikate?",
"faqSubTitle": "Das Covid-Zertifikat bietet die Möglichkeit, eine Covid-19-Impfung, eine durchgemachte Erkrankung oder ein negatives Testergebnis fälschungssicher zu dokumentieren.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Wann und wo kann ich ein Covid-Zertifikat erhalten?",
"text": "Ein Covid-Zertifikat können Sie nach einer Covid-19-Impfung, nach einer durchgemachten Erkrankung oder nach einem negativen Testergebnis erhalten. Das Zertifikat stellt Ihnen in der Regel das Gesundheitsfachpersonal vor Ort auf Anfrage aus.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie erhalte ich nach einer durchgemachten Covid-19-Erkrankung ein Covid-Zertifikat?",
"text": "Je nach Kanton wird Ihnen das Covid-Zertifikat teilweise direkt von der Teststelle oder dem Labor ausgestellt, in dem Ihr positives Testresultat festgestellt wurde. Falls dies nicht der Fall ist, können Sie nachträglich online über die Webseite der «Nationale Antragsstelle Covid-Zertifikat» ein Covid-Zertifikat beantragen. Der Antrag wird dort von der zuständigen kantonalen Behörde bearbeitet. Die Webseite der «Nationale Antragsstelle Covid-Zertifikat» finden Sie hier:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Nationale Antragsstelle Covid-Zertifikat (admin.ch)",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "Wie kann ich ein Covid-Zertifikat vorweisen?",
"text": "Sie können Ihr Covid-Zertifikat in Papierform vorweisen oder Sie benutzen die «COVID Certificate»-App, um Zertifikate in der App zu speichern und direkt aus der App vorzuweisen. \n\nBeachten Sie, dass Sie in jedem Fall auch noch ein Ausweisdokument vorweisen müssen.\nIn einigen Ländern wird eine ausgedruckte Version des Zertifikats verlangt und das elektronische Zertifikat nicht akzeptiert. Führen Sie auf Reisen daher stets auch die ausgedruckte Version mit.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie lange ist das Covid-Zertifikat gültig?",
"text": "In der Schweiz wurde die Zertifikatspflicht im Februar 2022 aufgehoben. Die Schweizer Gültigkeitsdauern bestehen seitdem nur noch formal und haben praktisch im Inland keine Bedeutung mehr. Im Ausland gelten jeweils die Gültigkeitsregeln des entsprechenden Landes. Informieren Sie sich kurz vor Ihrer Abreise auf der Webseite der Behörden Ihres Transit- oder Ziellandes, ob das Land noch zertifikatsbasierte Massnahmen hat und welche falls ja, welche Gültigkeitsdauern für Ihr Zielland festgelegt sind. Hilfreiche Webseite bei Auslandsreisen:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/de"
},
{
"title": "Wo sind meine Daten gespeichert?",
"text": "Ihre Zertifikatsdaten werden nicht in einem zentralen System des Bundes gespeichert, sondern befinden sich nur lokal auf Ihrem Mobilgerät, respektive auf dem Covid-Zertifikat in Papierform.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie werden Missbrauch und Fälschung verhindert?",
"text": "Der QR-Code auf dem Covid-Zertifikat enthält eine elektronische Signatur. Die Signatur ist ein wichtiges Sicherheitsmerkmal und macht das Covid-Zertifikat fälschungssicher. Das Covid-Zertifikat ist zudem nur in Kombination mit einem Ausweisdokument gültig.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was passiert, wenn ich mein Covid-Zertifikat verliere?",
"text": "Ihr Covid-Zertifikat wird in keinem zentralen System des Bundes gespeichert. Bewahren Sie das Covid-Zertifikat auf Papier und/oder als PDF deshalb sorgfältig auf. Bei Verlust und Bedarf nach einem Einsatz kann für die Neuausstellung durch die Gesundheitseinrichtungen (z. B. der Test- oder Impf-stelle) eine Gebühr erhoben werden. ",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was ist das Zertifikat Light?",
"text": "Die «COVID Certificate»-App bietet Inhaberinnen und Inhabern von Covid-Zertifikaten die Möglichkeit, eine datenminimierte Zertifikatskopie zur Nutzung in der Schweiz zu generieren. Das «Zertifikat Light» bestätigt das Vorliegen eines gültigen Covid-Zertifikats, ohne selbst Gesundheitsdaten zu enthalten. \n\nDiese datenminimierte Alternative zum Covid-Zertifikat wurde auf Wunsch des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (EDÖB) entwickelt, da Covid-Zertifikategewisse Gesundheitsdaten wie beispielsweise Impfstoff oder Datum der Impfung enthalten, die auch ausgelesen werden können. Mittels dem «Zertifikat Light» wird dies verhindert.\n\nDas «Zertifikat Light» ist lediglich elektronisch innerhalb der App verfügbar und wird nur in der Schweiz anerkannt. Aus Datenschutzgründen hat das «Zertifikat Light» eine maximale Gültigkeitsdauer von 24 Stunden und muss danach erneut aktiviert werden. Wird das normale Zertifikat vor Ablauf der 24 Stunden benötigt, kann das «Zertifikat Light» einfach deaktiviert werden.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "What are COVID certificates?",
"faqSubTitle": "The COVID certificate makes it possible to document a COVID-19 vaccination, recovery from the virus or a negative test result in a forgery-proof manner.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "When and where can I get a COVID certificate?",
"text": "You can get a COVID certificate after a COVID-19 vaccination, after you have recovered from the virus, or after you have tested negative. The certificate is generally issued upon request by health care professionals on site.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How do I get a COVID certificate after I have recovered from COVID-19?",
"text": "Depending on the canton, the COVID certificate will, in some cases, be sent to you directly by the test centre or by the laboratory that determined your positive test result. If this is not the case, you can subsequently apply online for a COVID certificate via the “National COVID certificate application platform”. The application will be processed there by the competent cantonal authority. You will find the “National COVID certificate application platform” here:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "National COVID certificate application platform",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "How can I present a COVID certificate?",
"text": "You can present your COVID certificate in paper form, or you can use the COVID Certificate app to save certificates in the dedicated app and present them directly from the app.\n\nPlease note that you will also need to show an identification document (passport or ID card) in either case. A number of countries require a printed version of the certificate and will not accept the electronic certificate. You should therefore always take the printed version with you when travelling.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How long is the COVID certificate valid?",
"text": "In Switzerland, the requirement for a certificate was lifted in February 2022. Since then, the Swiss validity periods have existed only in formal terms and no longer have any significance in practice in Switzerland. Abroad, the validity rules of the country in question apply. Shortly before departing you should check the authorities’ website for your transit or destination country to see whether certificate-based measures are still in force and, if so, which validity periods apply for your destination country. Helpful website for travel abroad:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/en/"
},
{
"title": "Where is my data stored?",
"text": "Your certificate data is not stored in a central government system, but only locally on your mobile device or on the paper COVID certificate.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How are misuse and forgery prevented?",
"text": "The COVID certificate QR code contains an electronic signature. This is an important security feature and makes the COVID certificate forgery-proof. Moreover, the COVID certificate is valid only in combination with an identification document (passport or ID card).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What happens if I lose my COVID certificate?",
"text": "Your COVID certificate is not stored in any central government system. Therefore, keep your paper and/or PDF COVID certificate in a safe place. If you lose your certificate and need to replace it, a fee may be charged for its reissue by a health care facility (e.g. the test or vaccination centre).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What is the 'certificate light'",
"text": "The COVID Certificate app offers holders of COVID certificates the possibility of generating a copy of the certificate with minimised data. The 'certificate light' confirms that the holder has a valid COVID certificate but does not itself contain any health-related data. \n\nThis alternative to the COVID certificate which contains minimised data was developed at the wish of the Federal Data Protection and Information Commissioner (FDPIC) as COVID certificates contain certain health-related data such as the vaccine administered or the date of vaccination, which can also be seen. The 'certificate light' prevents this.\n\nThe 'certificate light' is only available electronically in the app and is only recognised in Switzerland. For data protection reasons, the 'certificate light' is only valid for 24 hours and must then be reactivated. If you need to use the normal certificate before the end of the 24-hour period, you can simply deactivate the 'certificate light'.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Le certificat COVID en bref",
"faqSubTitle": "Le certificat COVID atteste de manière infalsifiable une vaccination contre le COVID-19, une guérison ou un résultat de test négatif.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Quand et où puis-je obtenir un certificat COVID?",
"text": "Vous pouvez obtenir le certificat COVID si vous êtes vaccinés contre le COVID-19, si vous avez guéri de la maladie ou si vous présentez un résultat de test négatif. En général, le certificat est délivré sur demande, par les professionnels de la santé présents sur le site.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Comment puis-je obtenir un certificat COVID après avoir guéri?",
"text": "En fonction de votre canton, le certificat COVID vous sera délivré soit directement par le lieu de test soit par le laboratoire qui a confirmé votre résultat de test positif. Si tel n’est pas le cas, vous pouvez demander votre certificat après coup, en ligne via la « Plateforme nationale des demandes pour le certificat COVID ». Votre demande y sera traitée par les autorités cantonales compétentes. Lien :",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Plateforme nationale de demandes pour le certificat COVID",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "Par quel moyen puis-je présenter un certificat COVID?",
"text": "Vous pouvez présenter votre certificat COVID sur papier ou au moyen de l’app de stockage créée à cet effet. Vous êtes libre de choisir l’une ou l’autre solution.\n\nDans tous les cas, vous devez aussi présenter une pièce d’identité sur demande. Dans certains pays, une version imprimée du certificat est exigée, et le certificat électronique n’est pas accepté. Nous vous conseillons donc de vous munir de la version imprimée lorsque vous voyagez.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quelle est la durée de validité du certificat COVID ?",
"text": "En Suisse, l’obligation de présenter un certificat a été levée en février 2022. Les durées de validité suisses sont donc devenues uniquement formelles et n’ont pratiquement plus aucune pertinence dans notre pays. À l’étranger, les règles de validité du pays concerné s’appliquent. Vérifiez peu avant votre départ sur le site Internet des autorités de votre pays de transit ou de destination si des mesures impliquant l’utilisation d’un certificat y sont appliquées et si c’est le cas, quelles règles de validité y sont appliquées. Site Internet utile pour les voyages à l’étranger :",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/fr/"
},
{
"title": "Où mes données sont-elles stockées?",
"text": "Les données de votre certificat ne sont pas stockées dans un système central de la Confédération, mais sont sauvegardées localement, sur votre appareil mobile ou sur le certificat papier.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Comment prévient-on les abus et les falsifications?",
"text": "Le code QR figurant sur le certificat COVID contient une signature électronique. Celle-ci est une caractéristique de sécurité importante qui rend le certificat infalsifiable. En outre, le certificat COVID n'est valable que sur présentation d'une pièce d'identité.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Et si je perds mon certificat COVID?",
"text": "Votre certificat COVID n'est pas stocké dans un système central de la Confédération. Par conséquent, nous vous recommandons de le conserver sur papier ou au format PDF dans un endroit sûr. En cas de perte ou de remplacement, le paiement d’un émolument peut être exigé pour l’établissement d’un nouveau document par les institutions sanitaires (lieu de test ou de vaccination).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Qu’est-ce que le certificat light ?",
"text": "L’application « COVID Certificate » propose aux titulaires de certificats COVID la possibilité de générer une copie du certificat ne contenant que les données strictement nécessaires. Le certificat « light » confirme que le certificat présenté est valide, sans contenir lui-même des données sur la santé.\n\nCette alternative permettant de limiter les données du certificat COVID au strict minimum a été suggérée par le Préposé fédéral à la protection des données et à la transparence (PFPDT) ; en effet, les certificats COVID contiennent certaines données sur la santé (p. ex. le type de vaccin et la date de la vaccination) qui peuvent être lues par des tiers. Le certificat « light » empêche tout abus de ce genre.\n\nLe certificat light, reconnu uniquement en Suisse, n’est disponible que sous forme électronique. Pour des raisons de protection des données, il n’est valide que pendant 24 heures et doit ensuite être réactivé. Si le certificat normal est à nouveau nécessaire avant la fin de ce délai, il suffit de désactiver le certificat light.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Cos'è il certificato COVID?",
"faqSubTitle": "Il certificato COVID offre la possibilità di provare in modo non falsificabile l'avvenuta vaccinazione, la guarigione o un risultato negativo al test.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Quando e dove posso ottenere un certificato COVID?",
"text": "Può ricevere un certificato COVID in seguito alla vaccinazione anti-COVID-19, all'avvenuta guarigione o a un risultato negativo al test. Normalmente, il certificato è rilasciato su richiesta dal personale medico specializzato presso le strutture sanitarie.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Come posso ottenere un certificato COVID dopo essere guarito?",
"text": "A seconda del Cantone, il certificato COVID viene rilasciato in parte direttamente dalla struttura che ha effettuato il test o dal laboratorio in cui è stato accertato il risultato positivo al test. Qualora così non fosse, può richiedere a posteriori online un certificato COVID tramite il sito web dell’«organo nazionale per la richiesta di certificati COVID». La richiesta sarà evasa in tale sede dall’autorità cantonale competente. Il sito web dell’«organo nazionale per la richiesta di certificati COVID» si trova qui:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Organo nazionale per la richiesta di certificati COVID",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "Come posso mostrare il certificato COVID?",
"text": "Può mostrare il Suo certificato COVID in formato cartaceo oppure salvarlo e presentarlo utilizzando l’app «COVID Certificate». \nIn entrambi i casi, dovrà mostrare anche un documento di legittimazione.\nIn alcuni Paesi si richiede la versione cartacea del certificato e non si accetta quello elettronico. Porti quindi sempre con sé anche la versione cartacea quando viaggia.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Fino a quando è valido il certificato COVID?",
"text": "In Svizzera l’obbligo di certificato è stato revocato nel febbraio 2022. Da allora, la durata di validità svizzera esiste solo formalmente e non ha più alcun valore pratico nel nostro Paese. All’estero si applicano le regole di validità del rispettivo Paese. Pertanto, prima di partire, si informi consultando il sito web delle autorità del Paese di transito o di destinazione se nel Paese vigono ancora misure relative al certificato e, in caso affermativo, qual è la loro durata di validità. Sito web utile per viaggi all’estero:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/it/"
},
{
"title": "Dove vengono salvati i miei dati?",
"text": "I dati del Suo certificato non vengono salvati in un sistema centrale della Confederazione, ma si trovano solo localmente sul Suo dispositivo mobile, rispettivamente sul certificato COVID in formato cartaceo.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Come vengono impediti l'uso improprio e le falsificazioni?",
"text": "Il codice QR sul certificato COVID contiene una firma elettronica. Questa firma è un elemento di sicurezza importante e garantisce che il certificato non possa essere falsificato. Inoltre, il certificato COVID è valido solo con un documento di legittimazione.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cosa succede se perdo il mio certificato COVID su carta?",
"text": "Il Suo certificato COVID non è salvato su un sistema centrale della Confederazione Conservi quindi con cura il certificato COVID su carta e/o in formato PDF. In caso di smarrimento e sostituzione, per il nuovo rilascio da parte delle strutture sanitarie (p. es. la struttura in cui è stato effettuato il test o è stata somministrata la vaccinazione) potrà essere riscosso un emolumento.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Che cos'è il certificato light?",
"text": "L’app «COVID Certificate» offre ai possessori di certificati COVID la possibilità di generare una copia del certificato con dati ridotti al minimo da utilizzare in Svizzera. Il certificato light conferma l’esistenza di un certificato valido, senza contenere dati sanitari.\n\nQuesto certificato con dati ridotti al minimo è un’alternativa al certificato COVID ed è stato sviluppato su richiesta dell’Incaricato federale della protezione dei dati e della trasparenza (IFPDT), poiché i certificati COVID contengono determinati dati sanitari, come per esempio il vaccino somministrato o la data della vaccinazione, che possono anche essere visualizzati e dunque letti. Ciò può essere evitato mediante il certificato light.\n\nIl certificato light è disponibile unicamente in versione elettronica nell’app ed è riconosciuto solo in Svizzera. Per motivi legati alla protezione dei dati, il certificato light ha una validità massima di 24 ore e in seguito deve essere riattivato. Se si necessita del certificato normale prima che siano trascorse le 24 ore, il certificato light può essere disattivato semplicemente.\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Tge è il certificat COVID?",
"faqSubTitle": "Il certificat COVID permetta da documentar – en moda nunfalsifitgabla – ina vaccinaziun cunter COVID-19, ina infecziun u in resultat negativ dal test.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Cura e co obtegn jau in certificat COVID?",
"text": "In certificat COVID survegnis Vus suenter ina vaccinaziun cumpletta cunter COVID-19, suenter ina infecziun u suenter in resultat negativ dal test. Il certificat vegn per il solit emess – sin dumonda – dal persunal spezialisà da sanadad al lieu. ",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Co obtegn jau in certificat COVID suenter ina infecziun cun COVID-19?",
"text": "Tut tenor il chantun vegn il certificat COVID per part emess directamain dal post da test u dal labor, nua che Voss test positiv è vegnì constatà. Sche quai n'è betg il cas, pudais Vus dumandar pli tard online in certificat COVID sur la pagina d'internet da la «Plattafurma naziunala da dumondas per il certificat COVID». Là vegn la dumonda elavurada da l'autoritad chantunala cumpetenta. La pagina d'internet da la «Plattafurma naziunala da dumondas per il certificat COVID» chattais Vus qua:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Plattafurma naziunala da dumondas per il certificat COVID (admin.ch)",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "Co poss jau preschentar in certificat COVID?",
"text": "Vus pudais preschentar Voss certificat COVID sin palpiri u sur l'app «COVID Certificate». L'app permetta d'arcunar certificats e d'als preschentar directamain sin il telefonin. \nResguardai per plaschair che Vus stuais en mintga cas preschentar er anc in document da legitimaziun.\nEn intgins pajais vegn pretendida ina versiun stampada dal certificat ed il certificat electronic na vegn betg acceptà. Sin viadis duessas Vus perquai adina avair cun Vus er la versiun stampada.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quant ditg è il certificat COVID valaivel?",
"text": "En Svizra è l'obligatori dal certificat vegnì abolì il favrer 2022. Las duradas da valaivladad svizras existan dapi lura mo anc formalmain e n'han praticamain nagina impurtanza pli en Svizra. A l'exteriur valan mintgamai las reglas da valaivladad dal pajais respectiv. As infurmai curt avant Vossa partenza sur la pagina d'internet da las autoritads da Voss pajais da transit u da destinaziun, sch'i valan en il pajais anc mesiras sin basa dal certificat, e sche gea, tge duradas da valaivladad che Voss pajais da destinaziun ha fixà. Pagina d'internet utila per viadis a l'exteriur:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/de"
},
{
"title": "Nua vegnan arcunadas mias datas?",
"text": "Las datas da Voss certificat na vegnan betg arcunadas en in sistem central da la Confederaziun, mabain mo localmain sin Voss telefonin resp. sin il certificat COVID sin palpiri.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Co vegnan impedids abus e falsificaziuns?",
"text": "Il code QR sin Voss certificat COVID cuntegna ina signatura digitala. La signatura è ina impurtanta caracteristica da segirezza che impedescha da falsifitgar il certificat COVID. Il certificat COVID è ultra da quai valaivel mo en cumbinaziun cun in document da legitimaziun.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge capita, sche jau perd mes certificat COVID?",
"text": "Voss certificat COVID na vegn betg arcunà en in sistem central da la Confederaziun. Tegnai perquai en salv cun quità il certificat COVID sin palpiri e/u sco PDF. Sche Vus avais pers il certificat u sche Vus duvrais in certificat substitutiv, po l'instituziun da sanadad (p.ex. il post da test u da vaccinaziun) pretender ina taxa per emetter in nov certificat.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge è in certificat light?",
"text": "L'app «COVID Certificate» permetta a las possessuras ed als possessurs da certificats COVID da generar ina copia dal certificat COVID che cuntegna ina quantitad minimala da datas. Il «certificat light» conferma ch'igl è avant maun in certificat COVID valaivel, na cuntegna però naginas datas da sanadad. \n\nQuest certificat cun ina quantitad minimala da datas è vegnì sviluppà sco alternativa al certificat COVID sin giavisch da l'Incumbensà federal per la protecziun da datas e per la transparenza (IFPDT), perquai ch'ils certificats COVID cuntegnan tschertas datas da sanadad ch'èn visiblas, sco per exempel il vaccin u la data da la vaccinaziun. Cun agid dal «certificat light» vegn quai impedì.\n\nIl «certificat light» è disponibel mo en moda electronica entaifer l'app e vegn renconuschì mo en Svizra. Per motivs da la protecziun da datas ha il «certificat light» ina durada da valaivladad maximala da 24 uras e sto alura vegnir activà danovamain. Sch'il certificat normal vegn duvrà avant che las 24 uras èn passadas, po il «certificat light» simplamain vegnir deactivà.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"works": {
"de": {
"faqTitle": "Wie funktioniert \ndie App?",
"faqSubTitle": "Mit der COVID Certificate App können Sie Covid-Zertifikate einfach und sicher auf Ihrem Mobilgerät abspeichern und vorweisen.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "Wie kann ich ein Covid-Zertifikat zur App hinzufügen?",
"text": "Um ein Covid-Zertifikat zur App hinzuzufügen, benötigen Sie das Ihnen ausgestellte Originalzertifikat auf Papier oder als PDF-Dokument. Den darauf abgebildeten QR-Code können Sie mit der COVID Certificate App scannen und hinzufügen. Anschliessend erscheint das Covid-Zertifikat direkt in der App.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Können auch mehrere Covid-Zertifikate hinzugefügt werden?",
"text": "Ja das ist möglich. So können Sie z. B. alle Covid-Zertifikate von Familienangehörigen in Ihrer App speichern. Auch in diesem Fall gilt: Das Covid-Zertifikat ist nur in Kombination mit einem Ausweisdokument des Zertifikatsinhabers / der Zertifikatsinhaberin gültig.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was ist ein Transfer-Code?",
"text": "Mit Transfer-Codes können Covid-Zertifikate schnell und sicher übermittelt werden. Auf diesem Weg erhalten Sie das Covid-Zertifikat, z. B. nach einem Covid-Test, direkt in die App geliefert.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wo sehe ich, ob mein Covid-Zertifikat gültig ist?",
"text": "Die Zertifikatspflicht in der Schweiz wurde im Februar 2022 aufgehoben. Die Schweizer Gültigkeitsdauern bestehen seitdem nur noch formal und haben praktisch im Inland keine Bedeutung mehr. Deshalb wird in der App das Feld «Gültigkeit in der Schweiz» nicht mehr dargestellt. Stattdessen zeigt sie den Zeitpunkt der Impfung bzw. des Tests an. \n\nEs wird auch angezeigt, wie viele Tage eine Impfung bzw. ein Test her ist. So können Sie einfacher feststellen, ob Ihr Zertifikat den Gültigkeitsregeln Ihres Ziellandes entspricht (falls das Land noch ein Covid-Zertifikat voraussetzt). Im Ausland gelten immer die Regeln des entsprechenden Landes.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Kann ich die App auch offline verwenden?",
"text": "Sie können die App ohne eine Internetverbindung verwenden. Auch im Offline-Modus können Zertifikate vorgewiesen und von den Prüfern gescannt und verifiziert werden.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie sind meine Daten geschützt?",
"text": "Ihre persönlichen Daten werden in keinem zentralen System gespeichert, sondern befinden sich ausschliesslich bei Ihnen lokal auf dem Mobilgerät, respektive im QR-Code auf dem Covid-Zertifikat in Papierform.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Welche Daten sind im QR-Code enthalten?",
"text": "Der QR-Code enthält alle Informationen, die Sie auf Ihrem Covid-Zertifikat in Papierform im Klartext finden. Weiter befindet sich im QR-Code eine elektronische Signatur, mit der sich die Echtheit des Covid-Zertifikats überprüfen lässt. Dadurch wird das Covid-Zertifikat fälschungssicher.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Ich habe das Covid-Zertifikat ausschliesslich elektronisch in der App. Wie komme ich zum Zertifikat als PDF oder auf Papier?",
"text": "In der «COVID Certificate»-App finden Sie in der Detailansicht des elektronischen Covid-Zertifikats die Funktion «Exportieren». Damit können Sie ein PDF erstellen, dieses speichern und ausdrucken.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was muss ich tun, wenn ich das Covid-Zertifikat oder die App lösche?",
"text": "Sie können Ihr Covid-Zertifikat einfach wieder auf Ihrem Mobilgerät speichern. Laden Sie dazu die App erneut herunter und scannen Sie anschliessend den QR-Code auf Ihrem Covid-Zertifikat auf Papier oder als PDF.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "How the app works",
"faqSubTitle": "With the COVID Certificate app, you can easily and securely store and present COVID certificates on your mobile device.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "How can I add a COVID certificate to the app?",
"text": "To add a COVID certificate to the app, you need the original certificate issued to you on paper or as a PDF document. You can use the COVID certificate app to scan the QR code on the original and add it to the app. The COVID certificate will then appear directly in the app.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Can several COVID certificates be added?",
"text": "Yes, that is possible. For example, you can save the COVID certificates of all family members in your app. Also in this case, each COVID certificate is valid only in combination with an identification document (passport or ID card) of the certificate holder.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What is a transfer code?",
"text": "The transfer codes allow COVID certificates to be transmitted quickly and securely. In this way, you receive your certificate (e.g. after a test) directly in the application.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Where can I see if my COVID certificate is valid?",
"text": "In Switzerland, the requirement for a certificate was lifted in February 2022. Since then, the Swiss validity periods have existed only in formal terms and no longer have any significance in practice in Switzerland. The “Validity in Switzerland” section is thus no longer displayed in the app. Instead, the time of the vaccination or test is shown. \n\nThe number of days that have elapsed since a vaccination or test is also shown. This makes it easier for you to determine whether your certificate complies with the validity rules of your destination country (if the country in question still requires a COVID certificate). When abroad, it is always the rules of the country in question that apply.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Can I use the app offline?",
"text": "You can use the app without an internet connection, so you can still call up your certificates and present them for scanning and verification.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How is my data protected?",
"text": "Your personal data is not stored in a central system; instead, it can be found solely locally on the mobile device or in the QR code in the case of the paper COVID certificate.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What data is contained in the QR code?",
"text": "The QR code contains all the information that is found in plain text on your paper COVID certificate. The QR code also contains an electronic signature that can be used to check the authenticity of the COVID certificate. This makes the COVID certificate forgery-proof.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "I only have my COVID certificate electronically in the app. How can I get the certificate as a PDF or on paper?",
"text": "In the detailed view of the electronic COVID certificate in the COVID Certificate app you’ll find the Export function. You can use this to generate, save and print a PDF",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What do I need to do if I delete the COVID certificate or the app?",
"text": "You can easily restore your COVID certificate on your mobile device. To do so, download the app again and then scan the QR code on your paper or PDF COVID certificate.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Comment l'app \nfonctionne-t-elle?",
"faqSubTitle": "L'app vous permet de stocker des certificats COVID de manière simple et sûre sur votre appareil mobile et de les présenter au moyen de ce dernier.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "Comment ajouter un certificat COVID à l'app?",
"text": "Pour ajouter un certificat COVID à l'app, vous avez besoin du certificat original qui vous a été délivré sur papier ou par voie électronique, au format PDF. Au moyen de l'app, vous pouvez scanner le code QR figurant sur ce document. Ensuite, le certificat COVID apparaît directement dans l'app.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Puis-je ajouter plusieurs certificats COVID?",
"text": "Oui. Vous pouvez par exemple stocker dans l'app les certificats COVID de tous les membres de votre famille. À noter également dans ce cas qu'un certificat COVID n'est valable que si son détenteur présente une pièce d'identité.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Qu'est-ce qu'un code de transfert ?",
"text": "Les codes de transfert permettent de transmettre les certificats COVID rapidement et en toute sécurité. De cette façon, vous recevez votre certificat (p. ex. après un test) directement dans l’application.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Où voir si mon certificat COVID est valable ?",
"text": "En Suisse, l’obligation de présenter un certificat a été levée en février 2022. Les durées de validité suisses sont donc devenues uniquement formelles et n’ont pratiquement plus aucune pertinence dans notre pays. C’est pourquoi le champ « Validité en Suisse » n’est plus représenté dans l’application, qui indique par contre le nombre de jours écoulés depuis une vaccination ou un test. \n\nL’application indique aussi le nombre de jours écoulés depuis une vaccination ou un test. Vous pouvez ainsi vérifier plus facilement si votre certificat correspond aux règles de validité de votre pays de destination (au cas où ce pays exige encore un certificat COVID). À l’étranger, les règles en vigueur varient d’un pays à l’autre.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Puis-je également utiliser l’application hors ligne ?",
"text": "Oui, vous pouvez utiliser l’application sans connexion Internet. Les certificats peuvent aussi être présentés, scannés et vérifiés en mode hors ligne.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Comment mes données sont-elles protégées?",
"text": "Vos données personnelles ne sont pas stockées dans un système central, mais ne sont sauvegardées que localement, sur votre appareil mobile ou dans le code QR figurant sur le certificat papier.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Que contient le code QR?",
"text": "Le code QR contient toutes les informations qui apparaissent en clair sur le certificat papier. En outre, il renferme une signature électronique qui permet de vérifier l'authenticité du certificat COVID. Par conséquent, le certificat COVID est infalsifiable.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Mon certificat COVID n’est disponible qu’au format électronique dans l’application. Comment puis-je obtenir mon certificat en PDF ou sur papier ?",
"text": "Dans l’application « COVID Certificate », vous trouvez la fonction « Exporter » dans la vue détaillée du certificat. Vous pouvez ainsi générer un PDF afin de le sauvegarder et de l’imprimer.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Et si je supprime le certificat COVID ou l'app?",
"text": "Vous pouvez réenregistrer facilement votre certificat COVID sur votre appareil mobile. Il vous suffit de télécharger de nouveau l'app, puis de scanner le code QR figurant sur le certificat original, établi sur papier ou au format PDF.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Come funziona \nl'app?",
"faqSubTitle": "Con l'app COVID Certificate può salvare e mostrare i certificati COVID in modo semplice e sicuro sul Suo dispositivo mobile.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "Come posso inserire un certificato COVID sulla app?",
"text": "Per inserire sull'app un certificato COVID serve il certificato originale rilasciatole su carta o in formato PDF. Utilizzando l'app COVID Certificate può aggiungere il certificato inquadrando il codice QR raffigurato sul certificato. In questo modo, il certificato COVID appare direttamente sull'app.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "È possibile aggiungere più certificati COVID?",
"text": "Sì, è possibile. Ad esempio, può salvare nella Sua app i certificati COVID dei suoi familiari. Anche in questo caso, il certificato COVID è valido solo con un documento di legittimazione del titolare.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cos'è un codice di trasferimento?",
"text": "Con i codici di trasferimento i certificati COVID possono essere trasmessi in modo rapido e sicuro. Tramite questo canale puoi ricevere il certificato COVID direttamente nell’app, ad esempio dopo aver fatto un test COVID.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Dove posso verificare se il mio certificato COVID è valido?",
"text": "In Svizzera l’obbligo di certificato è stato revocato nel febbraio 2022. Da allora, la durata di validità svizzera esiste solo formalmente e non ha più alcun valore pratico nel nostro Paese. Pertanto il campo «Validità in Svizzera» non è più visualizzato nell’app. Al suo posto si trova la data della vaccinazione o del test.\n\nViene anche visualizzato quanti giorni sono trascorsi da una vaccinazione o da un test. In tal modo può determinare più facilmente se il Suo certificato è conforme alle regole di validità del Paese di destinazione (qualora il Paese richiedesse ancora un certificato COVID). All’estero si applicano sempre le regole di validità del rispettivo Paese.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Posso utilizzare l’app anche offline?",
"text": "È possibile utilizzare l’app senza connessione Internet. I certificati possono essere presentati, nonché scansionati e verificati dagli addetti anche in modalità offline.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Come sono protetti i miei dati?",
"text": "I Suoi dati personali non sono salvati in un sistema centrale ma unicamente sul Suo dispositivo mobile oppure nel codice QR indicato sul certificato COVID in formato cartaceo.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quali dati contiene il codice QR?",
"text": "Il codice QR contiene tutte le informazioni che trova nel testo del Suo certificato COVID in formato cartaceo. Nel codice QR si trova anche una firma elettronica che consente di verificare la validità del certificato COVID. La firma elettronica impedisce la falsificazione del certificato COVID.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Ho il certificato COVID esclusivamente in formato elettronico nell’app. Come posso ottenerne uno in formato PDF o cartaceo?",
"text": "Nella vista di dettaglio del certificato COVID elettronico dell’app «COVID Certificate» è disponibile la funzione «Esporta», con la quale è possibile creare un PDF, salvarlo e stamparlo.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cosa devo fare se elimino il file contenente il certificato COVID o l'app?",
"text": "Può semplicemente risalvare il certificato COVID sul Suo dispositivo mobile. Per farlo, scarichi nuovamente l'app e poi scansioni il codice QR che trova sul Suo certificato COVID in formato cartaceo o PDF.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Co funcziuna \nl'app?",
"faqSubTitle": "Cun l'app COVID Certificate pudais Vus arcunar e preschentar en moda simpla e segira certificats COVID sin Voss telefonin.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "Co poss jau agiuntar in certificat COVID a l'app?",
"text": "Per agiuntar in certificat COVID a l'app, duvrais Vus il certificat original ch'è vegnì emess per Vus sin palpiri u en furma da PDF. Cun l'app COVID Certificate pudais Vus alura scannar il code QR sin il certificat ed al agiuntar a l'app. Silsuenter cumpara il certificat COVID directamain en l'app.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Pon vegnir agiuntads er plirs certificats COVID?",
"text": "Gea, quai è pussaivel. Vus pudais p.ex. arcunar en Vossa app ils certificats COVID da tut Vossas confamigliaras e da tut Voss confamigliars. Er en quest cas vala: Il certificat COVID è valaivel mo en cumbinaziun cun in document da legitimaziun da la possessura u dal possessur dal certificat.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge è in code da transfer?",
"text": "Cun ils codes da transfer pon ils certificats COVID vegnir transmess en moda svelta e segira. Sin questa via vegn il certificat COVID furnì directamain en l'app, p.ex. suenter in test dal coronavirus.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Nua ves jau, sche mes certificat COVID è valaivel?",
"text": "En Svizra è l'obligatori dal certificat vegnì abolì il favrer 2022. Las duradas da valaivladad svizras existan dapi lura mo anc formalmain e n'han praticamain nagina impurtanza pli en Svizra. Sin il certificat COVID na vegn perquai betg pli mussà il champ «Valaivladad en Svizra». Empè da quai mussa l'app la data da la vaccinaziun resp. dal test. \n\nI vegn er mussà, avant quants dis ch'igl è vegnì fatg ina vaccinaziun resp. in test. Uschia èsi pli facil per Vus da constatar, sche Voss certificat correspunda a las reglas da valaivladad da Voss pajais da destinaziun (premess ch'il pajais pretenda anc in certificat Covid). A l'exteriur valan adina las reglas dal pajais respectiv. ",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Poss jau er duvrar l'app offline?",
"text": "Vus pudais duvrar l'app senza ina colliaziun cun l'internet. Er en il modus offline pon ils certificats vegnir preschentads sco er scannads e verifitgads da las controlladras e dals controlladers.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Co vegnan protegidas mias datas?",
"text": "Vossas datas persunalas na vegnan betg arcunadas en in sistem central, mabain mo localmain sin Voss telefonin resp. en il code QR sin Voss certificat COVID en furma da palpiri.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge datas cuntegna il code QR?",
"text": "Il code QR cuntegna tut las infurmaziuns che Vus chattais sin Voss certificat COVID en furma da palpiri en text betg criptà. Plinavant sa chatta ina signatura digitala en il code QR. Cun quella po vegnir verifitgada l'autenticitad da Voss certificat COVID. Uschia na po il certificat COVID betg vegnir falsifitgà.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Jau hai il certificat COVID mo en moda digitala en l'app. Co survegn jau il certificat sco PDF u sin palpiri?",
"text": "En la vista detagliada dal certificat COVID digital en l'app «COVID Certificate» chattais Vus la funcziun «Exportar». Uschia pudais Vus generar in PDF, l'arcunar ed al stampar.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge stoss jau far, sche jau stiz il certificat COVID u l'app?",
"text": "Vus pudais simplamain arcunar anc ina giada il certificat COVID sin Voss telefonin. Chargiai giu danovamain l’app e scannai alura il code QR sin Voss certificat COVID sin palpiri u en furma da PDF.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"androidTransferCheckIntervalMs": 7200000,
"androidTransferCheckBackoffMs": 30000,
"timeshiftDetectionEnabled": true,
"transferQuestions": {
"de": {
"faqTitle": "Covid-Zertifikate direkt in die App geliefert",
"faqSubTitle": "Mit Transfer-Codes können Covid-Zertifikate schnell und sicher übermittelt werden. Auf diesem Weg erhalten Sie das Covid-Zertifikat, z. B. nach einem Covid-Test, direkt in die App geliefert.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Wer bietet die Übermittlung per Transfer-Code an?",
"text": "Wenn Sie einen Covid-Test machen (PCR-Test oder Antigen-Schnelltest), kann der Transfer-Code zur schnellen Übermittlung von Covid-Zertifikaten zum Einsatz kommen.\n\nInformieren Sie sich bei Ihrem Testcenter, in der Apotheke oder bei Ihrem Arzt, ob die Übermittlung per Transfer-Code angeboten wird.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Können Transfer-Codes auch zur Übermittlung von Impfzertifikaten verwendet werden?",
"text": "Aktuell ist die Übermittlung per Transfer-Code auf Covid-Tests ausgelegt. Wie Sie ein Covid-Zertifikat nach einer Impfung erhalten erfahren Sie hier:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Weitere Informationen",
"linkUrl": "https://bag-coronavirus.ch/zertifikat/wie-erhalte-ich-ein-covid-zertifikat-und-wie-verwende-ich-es/"
},
{
"title": "Wie funktioniert die Übermittlung per Transfer-Code?",
"text": "Falls die Stelle, die den Covid-Test durchführt, die Übermittlung per Transfer-Code anbietet, werden Sie bereits bei der Anmeldung oder der Testentnahme nach einem Transfer-Code gefragt.\n\nDen Transfer-Code können Sie in der «COVID Certificate»-App erstellen. Tippen Sie dazu auf dem Startbildschirm auf «Hinzufügen» resp. auf das «Plus»-Symbol unten rechts. Danach tippen Sie auf «Transfer-Code erstellen».\n\nDie App zeigt Ihnen einen 9-stelligen Code an. Diesen können Sie entweder bei der Anmeldung in ein Formular eintragen oder direkt bei der Testentnahme angeben.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Kann ich den Transfer-Code mehrmals benutzen?",
"text": "Nein, ein Transfer-Code kann nur einmal verwendet werden. Falls Sie mehrere Zertifikate z. B. von Familienangehörigen empfangen möchten, erstellen Sie bitte für jedes Zertifikat einen neuen Code.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "Receive COVID certificates directly in the app",
"faqSubTitle": "The transfer codes allow COVID certificates to be transmitted quickly and securely. In this way, you receive your certificate (e.g. after a test) directly in the application.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Who offers the transmission of the COVID certificate by transfer code?",
"text": "If you perform a COVID test (PCR test or rapid antigen test), the transfer code can be used to quickly transmit the COVID certificate.\n\nAsk your test centre, pharmacy or doctor if this option is available.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Can the transfer codes also be used for the transmission of vaccination certificates?",
"text": "Currently, the transmission of the certificate by transfer code is reserved for COVID tests. To find out how to obtain a COVID certificate after vaccination, click here:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Further information",
"linkUrl": "https://foph-coronavirus.ch/certificate/how-do-i-get-a-covid-certificate-and-how-do-i-use-it/"
},
{
"title": "How does the transmission of the certificate by transfer code work?",
"text": "If the test centre offers to transmit the certificate by transfer code, you will be asked for a code at the time of registration or testing.\n\nYou can create the transfer code in the \"COVID Certificate\" application: press \"Add\" on the home screen or the \"More\" symbol at the bottom right, then \"Create a transfer code\".\n\nThe application will show you a 9-character code, which you can either enter in a form when you register or pass on directly during the test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Can I use the same transfer code more than once?",
"text": "No, a transfer code can only be used once. If you wish to obtain several certificates (e.g. for your relatives), please create a new code for each certificate.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Recevez les certificats COVID directement dans l'application",
"faqSubTitle": "Les codes de transfert permettent de transmettre les certificats COVID rapidement et en toute sécurité. De cette façon, vous recevez votre certificat (p. ex. après un test) directement dans l’application.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Qui propose la transmission du certificat COVID par code de transfert ?",
"text": "Si vous effectuez un test COVID (test PCR ou test rapide antigénique), le code de transfert peut être utilisé pour transmettre rapidement le certificat COVID.\n\nRenseignez-vous auprès de votre centre de test, de votre pharmacie ou de votre médecin pour savoir si cette option est proposée.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Les codes de transfert peuvent-ils aussi être utilisés pour la transmission de certificats de vaccination ?",
"text": "Actuellement, la transmission du certificat par code de transfert est réservée aux tests COVID. Pour savoir comment obtenir un certificat COVID après une vaccination, cliquez ici :",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Informations supplémentaires",
"linkUrl": "https://ofsp-coronavirus.ch/certificat/comment-obtenir-le-certificat-covid-et-comment-men-servir/"
},
{
"title": "Comment fonctionne la transmission du certificat par code de transfert ?",
"text": "Si le centre de test propose de transmettre le certificat par code de transfert, un code vous sera demandé au moment de l’inscription ou du test.\n\nVous pouvez créer le code de transfert dans l’application « COVID Certificate » : appuyez sur « Ajouter » sur l’écran d’accueil ou sur le symbole « Plus » en bas à droite, puis sur « Créer un code de transfert ».\n\nL’application vous montre un code à 9 caractères, que vous pouvez soit inscrire dans un formulaire lors de l’inscription, soit transmettre directement lors du test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Puis-je utiliser plusieurs fois le même code de transfert ?",
"text": "Non, un code de transfert ne peut être utilisé qu’une seule fois. Si vous souhaitez obtenir plusieurs certificats (p. ex. pour vos proches), veuillez créer un nouveau code pour chaque certificat.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Ricevere i certificati COVID direttamente nell’app",
"faqSubTitle": "Con i codici di trasferimento i certificati COVID possono essere trasmessi in modo rapido e sicuro. Tramite questo canale puoi ricevere il certificato COVID direttamente nell’app, ad esempio dopo aver fatto un test COVID.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Chi offre la trasmissione mediante codice di trasferimento?",
"text": "Quando fai un test COVID (test PCR o test antigenico rapido), è possibile impiegare il codice di trasferimento per la trasmissione rapida dei certificati COVID.\n\nChiedi al centro di test, alla farmacia o al medico se offrono la trasmissione mediante codice di trasferimento.\n\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "I codici di trasferimento possono essere impiegati anche per trasmettere i certificati di vaccinazione?",
"text": "Attualmente la trasmissione mediante codice di trasferimento funziona solo per i test COVID. Qui trovi maggiori informazioni su come ottenere un certificato COVID dopo una vaccinazione:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriori informazioni",
"linkUrl": "https://ufsp-coronavirus.ch/certificato/come-si-ottiene-il-certificato-covid-e-come-si-impiega/"
},
{
"title": "Come funziona la trasmissione mediante codice di trasferimento?",
"text": "Se il servizio che effettua il test COVID offre la trasmissione mediante codice di trasferimento, te ne chiede uno già al momento della prenotazione o dell’esecuzione del test.\n\nPuoi creare il codice di trasferimento nell’app «COVID Certificate» toccando il pulsante «Aggiungi» nella schermata iniziale o il simbolo «Più» in basso a destra. Poi tocca «Crea codice di trasferimento».\n\nL’app visualizza un codice a 9 cifre, che puoi inserire nel modulo di prenotazione o fornire direttamente al momento dell’esecuzione del test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Posso utilizzare lo stesso codice di trasferimento più volte?",
"text": "No, un codice di trasferimento può essere utilizzato una volta sola. Se desideri ricevere più di un certificato, per esempio i certificati dei tuoi familiari, crea un nuovo codice per ciascun certificato.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Certificats COVID furnids directamain en l'app",
"faqSubTitle": "Cun ils codes da transfer pon ils certificats COVID vegnir transmess en moda svelta e segira. Sin questa via vegn il certificat COVID furnì directamain en l'app, p.ex. suenter in test dal coronavirus.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Tgi porscha la transmissiun cun in code da transfer?",
"text": "Sche Vus faschais in test dal coronavirus (test da PCR u test svelt d'antigens), po il code da transfer vegnir en funcziun per transmetter sveltamain ils certificats COVID.\n\nAs infurmai tar Voss center da test, en l'apoteca u tar Vossa media u Voss medi, sche la transmissiun cun in code da transfer è pussaivla.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Pon ils codes da transfer vegnir duvrads er per transmetter certificats da vaccinaziun?",
"text": "Actualmain è la transmissiun cun in code da transfer concepì per tests dal coronavirus. Co che Vus survegnis in certificat COVID suenter ina vaccinaziun, vegnis Vus a savair qua:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriuras infurmaziuns",
"linkUrl": "https://bag-coronavirus.ch/zertifikat/wie-erhalte-ich-ein-covid-zertifikat-und-wie-verwende-ich-es/"
},
{
"title": "Co funcziuna la transmissiun cun in code da transfer?",
"text": "En cas ch'il post che fa il test dal coronavirus porscha la transmissiun cun in code da transfer, vegnis Vus supplitgà d'inditgar Voss code da transfer gia tar l'annunzia u a chaschun da la prelevaziun dal test.\n\nIl code da transfer pudais Vus crear en l'app «COVID Certificate». Smatgai sin la pagina iniziala sin «Agiuntar» resp. sin il simbol «+» sutvart a dretga. Smatgai alura sin «Crear in code da transfer».\n\nL'app As mussa in code da 9 cifras. Quest code pudais Vus u endatar tar l'annunzia en in formular u inditgar directamain a chaschun da la prelevaziun dal test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Poss jau duvrar pliras giadas il medem code da transfer?",
"text": "Na, in code da transfer po vegnir duvrà mo ina giada. En cas che Vus vulais retschaiver plirs certificats, per exempel da confamigliaras u confamigliars, creai per plaschair per mintga certificat in nov code.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"transferWorks": {
"de": {
"faqTitle": "So funktioniert der Transfer",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "Die App prüft regelmässig, ob ein Covid-Zertifikat für Ihren Transfer-Code verfügbar ist."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "Sobald das Covid-Zertifikat verfügbar ist, erscheint es in der App. Wenn Sie Mitteilungen aktiviert haben, werden Sie von der App benachrichtigt."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "Nach 30 Tagen läuft der Transfer-Code ab. Danach wartet die App noch für weitere 72h auf einen möglichen Transfer, bevor der Transfer-Code ungültig wird."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "Wie sind meine Daten beim Transfer geschützt?",
"text": "Für den Transfer wird Ihr Covid-Zertifikat verschlüsselt bereitgestellt. Der Transfer-Code stellt sicher, dass nur Ihre App das Covid-Zertifikat empfangen kann. Unmittelbar nach dem Transfer werden die Daten wieder vom Server gelöscht.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was kann ich tun, wenn das Zertifikat nicht ankommt?",
"text": "Sobald das Zertifikat vom Labor oder Testcenter generiert wurde, steht es zum Transfer zur Verfügung. Stellen Sie sicher, dass Ihr Smartphone mit dem Internet verbunden ist, um Zertifikate empfangen zu können.\n\nSollte ihr Covid-Zertifikat dennoch nicht eintreffen, fragen Sie bei der Stelle nach, die den Test durchgeführt hat (Testcenter, Apotheke, Ärztin / Arzt).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was passiert bei einem positiven Testresultat?",
"text": "Bei einem positiven Antigen-Schnelltest erhalten Sie vom Labor kein Covid-Zertifikat. \n\nBei einem positiven PCR-Test erhalten Sie ein Covid-Zertifikat für Genesene. Es ist ab dem 11. Tag nach der Testentnahme gültig.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "How does the transfer work?",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "The application regularly checks whether a COVID certificate is available for your transfer code."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "As soon as the COVID certificate is available, it appears in the application. If you have activated notifications, you will receive a message from the application."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "The transfer code expires after 30 days. After this period, the application waits for any further transfers for 72 hours. After that, the transfer code is no longer valid."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "How is my data secured during the transfer?",
"text": "For the transfer, your COVID certificate is delivered in encrypted form. The transfer code ensures that only your application can receive the certificate. The data is deleted from the server immediately after the transfer.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What if my certificate does not arrive in the application?",
"text": "Once the certificate has been generated by the laboratory or test centre, it is available for transfer. Make sure that your smartphone is connected to the Internet to receive certificates.\n\nIf you still do not receive your certificate, contact the place where you performed the test (centre, pharmacy, doctor's practice).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What happens if I test positive?",
"text": "In case of a positive rapid antigen test, you will not receive a COVID certificate from the laboratory.\n\nIn case of a positive PCR test, you will receive a COVID certificate for cured persons, valid from the 11th day after the test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Comment fonctionne le transfert ?",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "L’application vérifie régulièrement si un certificat COVID est disponible pour votre code de transfert."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "Dès que le certificat COVID est disponible, il apparaît dans l’application. Si vous avez activé les notifications, vous recevrez un message de l’application."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "Le code de transfert expire après 30 jours. Une fois ce délai passé, l’application attend tout autre transfert pendant 72 h. Ensuite, le code de transfert n’est plus valable."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "Comment mes données sont-elles sécurisées lors du transfert ?",
"text": "Pour le transfert, votre certificat COVID est fourni sous forme cryptée. Le code de transfert garantit que seule votre application peut recevoir le certificat. Les données sont supprimées du serveur immédiatement après le transfert.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Que faire si mon certificat n’arrive pas dans l’application ?",
"text": "Dès que le certificat a été généré par le laboratoire ou le centre de test, il est disponible pour le transfert. Vérifiez que votre smartphone est connecté à Internet pour recevoir des certificats.\n\nSi malgré tout vous ne recevez pas votre certificat, adressez-vous au lieu où vous avez effectué le test (centre, pharmacie, cabinet médical).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Que se passe-t-il en cas de test positif ?",
"text": "En cas de test rapide antigénique positif, vous ne recevrez pas de certificat COVID du laboratoire.\n\nEn cas de test PCR positif, vous recevrez un certificat COVID pour personnes guéries, valable à partir du 11e jour suivant le test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Il trasferimento funziona così",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "L’app verifica periodicamente se è disponibile un certificato COVID per il tuo codice di trasferimento."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "Non appena il certificato COVID è disponibile, viene visualizzato nell’app. Se hai attivato le notifiche, ne riceverai una dall’app."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "Il codice di trasferimento scade dopo 30 giorni. Poi l’app attende un eventuale trasferimento per altre 72 ore prima di considerare scaduto il codice."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "Come sono protetti i miei dati durante il trasferimento?",
"text": "Il tuo certificato COVID è messo a disposizione per il trasferimento in forma criptata. Il codice di trasferimento assicura che soltanto la tua app sia in grado di riceverlo. I dati sono eliminati dal server immediatamente dopo il trasferimento.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cosa posso fare se il certificato non arriva?",
"text": "Non appena il certificato è stato generato dal laboratorio o dal centro di test, è disponibile per il trasferimento. Accertati che il tuo smartphone sia connesso a Internet per poter ricevere i certificati.\n\nSe comunque non dovessi ricevere il tuo certificato COVID, rivolgiti al servizio che ha effettuato il test (centro di test, farmacia, medico).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cosa accade in caso di risultato positivo del test?",
"text": "In caso di test antigenico positivo, non ricevi alcun certificato di test dal laboratorio. \n\nIn caso di test PCR positivo, ricevi un certificato COVID per persone guarite, valido a partire dall’undicesimo giorno dopo l’esecuzione del test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Uschia funcziuna il transfer",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "L'app verifitgescha regularmain, schebain in certificat COVID è disponibel per Voss code da transfer."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "Uschespert ch'il certificat COVID è disponibel, cumpara el en l'app. Sche Vus avais activà ils avis, vegnis Vus infurmada u infurmà da l'app."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "Suenter 30 dis scada il code da transfer. Silsuenter spetga l'app anc ulteriuras 72 uras, avant ch'il code da transfer daventa nunvalaivel."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "Co vegnan protegidas mias datas tar il transfer?",
"text": "Per il transfer vegn Voss certificat COVID mess a disposiziun en moda codifitgada. Il code da transfer garantescha che mo Vossa app po retschaiver il certificat COVID. Las datas vegnan puspè stizzadas dal server immediatamain suenter il transfer.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge poss jau far, sch'il certificat n'arriva betg?",
"text": "Uschespert ch'il certificat è vegnì generà dal labor u dal center da test, stat el a disposiziun per il transfer. Guardai che Voss smartphone saja collià cun l'internet per pudair retschaiver certificats.\n\nEn cas che Voss certificat COVID n'arriva tuttina betg, As drizzai al post che ha fatg il test (center da test, apoteca, media u medi).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge capita en cas d'in test positiv?",
"text": "En cas d'in test svelt d'antigens positiv na survegnis Vus betg in certificat COVID dal labor.\n\nEn cas d'in test da PCR positiv survegnis Vus in certificat COVID per persunas guaridas. El è valaivel a partir dal 11. di suenter la prelevaziun dal test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"lightCertificateActive": true,
"pdfGenerationActive": true,
"vaccinationHints": {
"de": [
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie unbeschwert in die meisten Länder reisen."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie sich vor Erkrankung und einem allfälligen schweren Verlauf schützen."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie auf sichere Art immun werden."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie mithelfen, die Krankheitslast zu reduzieren."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie helfen, die Auswirkungen der Pandemie zu bekämpfen."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie die Langzeitfolgen einer Covid-19-Erkrankung vermeiden."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie dazu beitragen, das Gesundheitswesen zu entlasten."
}
],
"en": [
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means hassle-free travel to most countries. "
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means protection from infection and severe disease. "
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means immunity the safe way."
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means helping to reduce the disease burden. "
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means helping to control the impact of the pandemic. "
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means preventing long COVID."
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means helping to relieve the pressure on the health system."
}
],
"fr": [
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "La vaccination contre le COVID-19 vous permet de voyager sereinement dans la plupart des pays."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "La vaccination vous protège contre le COVID-19 et, le cas échéant, contre une évolution grave de la maladie."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "La vaccination contre le COVID-19 vous permet de vous immuniser en toute sécurité."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "Grâce à la vaccination contre le COVID-19, vous pouvez contribuer à réduire la charge de morbidité."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "Grâce à la vaccination contre le COVID-19, vous contribuez à la lutte contre les conséquences de la pandémie."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "La vaccination contre le COVID-19 vous permet d’éviter les effets à long terme de la maladie."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "Grâce à la vaccination contre le COVID-19, vous pouvez contribuer à décharger le système de santé."
}
],
"it": [
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi viaggiare senza preoccupazioni nella maggior parte dei Paesi."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi proteggerti dalla malattia e da un eventuale decorso grave."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi immunizzarti in modo sicuro."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi contribuire a ridurre il carico di malattia."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi contribuire a combattere le ripercussioni della pandemia."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi evitare le conseguenze a lungo termine di una malattia COVID-19."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi contribuire a sgravare il sistema sanitario."
}
],
"rm": [
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus viagiar libramain en la gronda part dals pajais."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus As proteger cunter ina infecziun e cunter in eventual grev decurs da la malsogna."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus As immunisar en moda segira."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus gidar a reducir la chargia da la malsogna."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus gidar a cumbatter cunter las consequenzas da la pandemia."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus evitar las consequenzas da lunga durada d'ina infecziun cun COVID-19."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus gidar a distgargiar il sistem da sanadad."
}
]
},
"foreignRulesHints": {
"de": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "Für die Aktualität und Vollständigkeit der gegebenen Informationen übernimmt der Bund keine Haftung."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Die Einreiseregeln können sich ändern. Prüfen Sie daher die Gültigkeit kurz vor der Abreise und informieren Sie sich zusätzlich online über die aktuellen Einreiseregeln des Ziellandes."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "Die oben genannten Angaben beziehen sich nur auf die Einreiseregeln des Ziellandes. Für allfällige zertifikatspflichtige Bereiche innerhalb des Landes können andere Regeln gelten."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "Land nicht gefunden? Nicht alle Länder akzeptieren Covid-Zertifikate oder es wurden keine Einreiseregeln verfügbar gemacht."
}
],
"en": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "The federal government assumes no liability for the up-to-dateness or completeness of the information provided."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Entry rules can change. So check the validity shortly before you depart, and go online to make sure of the latest entry rules for your destination country."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "The above information relates only to the rules for entering your destination country. Different rules may apply to settings where a certificate is required within the country."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "Couldn’t find the country you were looking for? Not all countries accept COVID certificates; it might also be that no entry rules have been made available."
}
],
"fr": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "La Confédération décline toute responsabilité en ce qui concerne l’actualité et l’exhaustivité des informations fournies."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Les dispositions d’entrée peuvent changer. Vérifiez donc la validité de votre certificat avant votre départ et renseignez-vous également en ligne sur les dispositions d’entrée en vigueur dans votre pays de destination."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "Les informations ci-dessus ne concernent que les dispositions d’entrée du pays de destination. Dans le pays, d’autres règles peuvent s’appliquer aux éventuels domaines soumis à l’obligation de présenter un certificat."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "Vous n’avez pas trouvé votre pays de destination ? Il se peut que certains pays ne reconnaissent pas le certificat COVID ou qu’aucune disposition d’entrée ne soit disponible."
}
],
"it": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "La Confederazione non si assume la responsabilità per l’attualità e la completezza delle informazioni fornite."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Le disposizioni d’entrata possono cambiare. Verificate poco prima della partenza se il vostro certificato è valido e informatevi ulteriormente online sulle disposizioni d’entrata attuali del Paese di destinazione."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "Le informazioni sopra indicate si riferiscono solo alle disposizioni d’entrata del Paese di destinazione. Per eventuali settori soggetti all’obbligo di certificato all’interno del Paese possono vigere altre regole."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "Non avete trovato un Paese? Non tutti i Paesi accettano i certificati COVID o rendono disponibili le regole d’entrata."
}
],
"rm": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "Per l'actualitad e la cumplettadad da las infurmaziuns na surpiglia la Confederaziun nagina responsabladad."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Las reglas d'entrada pon sa midar. Verifitgai perquai la valaivladad curt avant che Vus partis ed As infurmai ultra da quai online davart las reglas d'entrada actualas dal pajais da destinaziun."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "Las infurmaziuns qua survart sa refereschan mo a las reglas d'entrada dal pajais da destinaziun. Per secturs che pretendan eventualmain in certificat entaifer il pajais pon valair autras reglas."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "N'avais Vus betg chattà Voss pajais da destinaziun? Betg tut ils pajais n'acceptan certificats COVID, u i n'èn vegnidas messas a disposiziun naginas infurmaziuns davart eventualas reglas d'entrada."
}
]
},
"foreignRulesLinkText": {
"de": "reopen.europa.eu",
"en": "reopen.europa.eu",
"fr": "reopen.europa.eu",
"it": "reopen.europa.eu",
"rm": "reopen.europa.eu"
},
"foreignRulesLinkUrl": {
"de": "https://reopen.europa.eu/",
"en": "https://reopen.europa.eu/",
"fr": "https://reopen.europa.eu/",
"it": "https://reopen.europa.eu/",
"rm": "https://reopen.europa.eu/"
},
"vaccinationBookingCantons": {
"de": [
{
"name": "Aargau",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzell Ausserrhoden",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzell Innerrhoden",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Basel-Landschaft",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.bl.ch/impfen"
},
{
"name": "Basel-Stadt",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Bern",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "http://www.be.ch/corona-impfung"
},
{
"name": "Freiburg",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/de/gesundheit/covid-19/covid-19-impfung-in-ihrer-naehe-durch-impfteams-in-den-impfzentren-in-der-apotheke-oder-bei-ihrem-arzt"
},
{
"name": "Genf",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/se-faire-vacciner-contre-covid-19"
},
{
"name": "Glarus",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Graubünden",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/DE/institutionen/verwaltung/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Jura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Luzern",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuenburg",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Nidwalden",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Obwalden",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "St. Gallen",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Schaffhausen",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Schwyz",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Solothurn",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Thurgau",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Tessin",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Wallis",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/de/web/coronavirus#ancre_vaccination"
},
{
"name": "Waadt",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zug",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/"
},
{
"name": "Zürich",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
],
"en": [
{
"name": "Aargau",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzell Ausserrhoden",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzell Innerrhoden",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Basel-Country",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/amt-fur-gesundheit/medizinische-dienste/kantonsarztlicher-dienst/aktuelles/corona-impfung/englisch-english"
},
{
"name": "Basel-City",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Berne",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "http://www.be.ch/corona-impfung"
},
{
"name": "Fribourg",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/sante/covid-19/covid-19-vaccination"
},
{
"name": "Geneva",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/en/getting-vaccinated-against-covid-19"
},
{
"name": "Glarus",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Graubünden",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/DE/institutionen/verwaltung/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Jura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Lucerne",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuchâtel",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Nidwalden",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Obwalden",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "St. Gallen",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Schaffhausen",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Schwyz",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Solothurn",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Thurgovia",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Ticino",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Valais",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/de/web/coronavirus#ancre_vaccination"
},
{
"name": "Vaud",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zug",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/en/"
},
{
"name": "Zürich",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
],
"fr": [
{
"name": "Argovie",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzell Rhodes-Extérieures",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzell Rhodes-Intérieures",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Bâle-Campagne",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/amt-fur-gesundheit/medizinische-dienste/kantonsarztlicher-dienst/aktuelles/corona-impfung/franzoesisch-francais"
},
{
"name": "Bâle-Ville",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Berne",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "https://www.gsi.be.ch/fr/start/themen/coronavirus/impfen.html"
},
{
"name": "Fribourg",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/sante/covid-19/covid-19-vaccination"
},
{
"name": "Genève",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/se-faire-vacciner-contre-covid-19"
},
{
"name": "Glaris",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Grisons",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/DE/institutionen/verwaltung/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Jura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Lucerne",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuchâtel",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Nidwald",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Obwald",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "Saint-Gall",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Schaffhouse",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Schwyz",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Soleure",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Thurgovie",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Tessin",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Valais",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/web/coronavirus/#ancre_vaccination"
},
{
"name": "Vaud",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zoug",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/"
},
{
"name": "Zurich",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
],
"it": [
{
"name": "Argovia",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzello Esterno",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzello Interno",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Basilea Campagna",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/amt-fur-gesundheit/medizinische-dienste/kantonsarztlicher-dienst/aktuelles/corona-impfung/italienisch-italiano"
},
{
"name": "Basilea Città",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Berna",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "http://www.be.ch/corona-impfung"
},
{
"name": "Friburgo",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/sante/covid-19/covid-19-vaccination"
},
{
"name": "Ginevra",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/se-faire-vacciner-contre-covid-19"
},
{
"name": "Glarona",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Grigioni",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/IT/istituzioni/amministrazione/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Giura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Lucerna",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuchâtel",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Nidvaldo",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Obvaldo",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "San Gallo",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Sciaffusa",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Svitto",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Soletta",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Turgovia",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Ticino",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Vallese",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/de/web/coronavirus#ancre_vaccination"
},
{
"name": "Vaud",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zugo",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/"
},
{
"name": "Zurigo",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
],
"rm": [
{
"name": "Argovia",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzell Dadora",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzell Dadens",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Basilea-Champagna",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.bl.ch/impfen"
},
{
"name": "Basilea-Citad",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Berna",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "http://www.be.ch/corona-impfung"
},
{
"name": "Friburg",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/sante/covid-19/covid-19-vaccination"
},
{
"name": "Genevra",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/se-faire-vacciner-contre-covid-19"
},
{
"name": "Glaruna",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Grischun",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/RM/instituziuns/administraziun/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Giura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Lucerna",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuchâtel",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Sutsilvania",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Sursilvania",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "Son Gagl",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Schaffusa",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Sviz",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Soloturn",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Turgovia",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Tessin",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Vallais",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/de/web/coronavirus#ancre_vaccination"
},
{
"name": "Vad",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zug",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/"
},
{
"name": "Turitg",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
]
},
"vaccinationBookingInfo": {
"de": {
"title": "Impftermin in Ihrer Nähe buchen",
"text": "Eine Impfung könnte zum Beispiel an diesen Orten in Ihrer Nähe stattfinden:\n\n- in spezifischen Impfzentren\n- in Spitälern\n- bei Ihrem Hausarzt oder Ihrer Hausärztin\n- in Impfapotheken\n\nViele Orte bieten auch Walk-in-Impfungen ohne Termine an.",
"info": "Die Covid-19-Impfung ist für Personen ab 5 Jahren empfohlen.",
"impfcheckTitle": "Jetzt Termin buchen",
"impfcheckText": "Der Covid-19 Impf-Check gibt Auskunft über Erst- sowie Auffrischimpfungen und führt Sie zur entsprechenden Anlaufstelle in Ihrem Kanton.",
"impfcheckButton": "Zum Impf-Check",
"impfcheckUrl": "https://covid19.impf-check.ch/"
},
"en": {
"title": "Book a vaccination appointment near you",
"text": "Vaccination may be performed at the following locations near you:\n\n- at specific vaccination centres\n- in hospitals\n- at your general practitioner's surgery\n- at a vaccination pharmacy\n\nMany places also offer walk-in vaccinations without an appointment.",
"info": "The COVID-19 vaccination is recommended for those over 5. ",
"impfcheckTitle": "Book an appointment now",
"impfcheckText": "The COVID-19 Vaccination Check provides information on initial and booster vaccinations and guides you to the relevant point of contact in your canton.",
"impfcheckButton": "To the Vaccination Check",
"impfcheckUrl": "https://covid19.impf-check.ch/"
},
"fr": {
"title": "Prendre un rendez-vous de vaccination près de chez vous",
"text": "La vaccination pourrait, par exemple, être proposée dans les lieux suivants situés à proximité de chez vous :\n\n- dans des centres de vaccination désignés\n- dans les hôpitaux\n- chez votre médecin de famille\n- dans les pharmacies\n\nIl est aussi possible de se faire vacciner sans rendez-vous dans de nombreux endroits.",
"info": "La vaccination contre le COVID-19 est recommandée pour les personnes dès 5 ans.",
"impfcheckTitle": "Prendre un rendez-vous maintenant",
"impfcheckText": "COVID-19 Vac-check fournit des renseignements sur la première vaccination ainsi que sur la vaccination de rappel et vous guide vers le service compétent de votre canton.",
"impfcheckButton": "Vers COVID-19 Vac-check",
"impfcheckUrl": "https://covid19-vac-check.ch/"
},
"it": {
"title": "Prendi appuntamento per la vaccinazione nelle tue vicinanze",
"text": "Per esempio potresti farti vaccinare in uno di questi luoghi nelle tue vicinanze:\n\n- in centri di vaccinazione specifici\n- negli ospedali\n- dal tuo medico di famiglia\n- nelle farmacie che vaccinano\n\nMolti di essi offrono anche vaccinazioni libere senza appuntamento.",
"info": "La vaccinazione anti-COVID-19 è raccomandata per le persone a partire dai 5 anni.",
"impfcheckTitle": "Prendi appuntamento ora",
"impfcheckText": "Il COVID-19 Vac-Check fornisce informazioni sulle prime vaccinazioni, sulle vaccinazioni di richiamo e ti indirizza verso il punto di contatto del tuo Cantone.",
"impfcheckButton": "Vai al COVID-19 Vac-Check",
"impfcheckUrl": "https://covid19-vac-check.ch/"
},
"rm": {
"title": "Reservar in termin da vaccinaziun en Vossa vischinanza",
"text": "Ina vaccinaziun pudess per exempel vegnir fatga en quests lieus en Vossa vischinanza:\n\n- en centers da vaccinaziun specifics\n- en ospitals\n- tar Vossa media u tar Voss medi da chasa\n- en apotecas da vaccinaziun\n\nBlers lieus porschan er vaccinaziuns «walk-in» senza termin.",
"info": "La vaccinaziun cunter COVID-19 è recumandada per persunas a partir da 5 onns.",
"impfcheckTitle": "Reservar in termin ussa",
"impfcheckText": "Il check da vaccinaziun COVID-19 As infurmescha davart las emprimas vaccinaziuns sco er davart las vaccinaziuns da rinfrestgament ed As maina al post da consultaziun correspundent da Voss chantun. ",
"impfcheckButton": "Al check da vaccinaziun",
"impfcheckUrl": "https://covid19.impf-check.ch/"
}
},
"checkModesInfo": {
"de": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Zutritt zu Betrieben und Veranstaltungen für geimpfte, genesene oder negativ getestete Personen."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "Kein Zutritt."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Zutritt zu Betrieben und Veranstaltungen für geimpfte oder genesene Personen."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "Kein Zutritt."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Zutritt zu Betrieben und Veranstaltungen für Personen, deren vollständige Impfung, Auffrischimpfung oder Genesung (basierend auf PCR-Test) nicht länger als 120 Tage zurückliegt. Sie benötigen kein zusätzliches Testzertifikat."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "Für den Zutritt zu Betrieben und Veranstaltungen wird zusätzlich zum Covid-Zertifikat für geimpfte oder genesene Personen ein negatives Testresultat benötigt."
}
}
}
},
"en": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Access to organisations and events permitted for people who have been vaccinated, or who have recovered or tested negative."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "Access not permitted."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Access to organisations and events permitted for people who have been vaccinated or who have recovered."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "Access not permitted."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Access to organisations and events permitted for people who have been fully vaccinated, have received a booster jab or have recovered (based on PCR test results) in the preceding 120 days; an additional test certificate is not required."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "To gain access to organisations and events, a negative test result is required in addition to the COVID certificate for people who have been vaccinated or have recovered."
}
}
}
},
"fr": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Accès aux établissements et aux manifestations réservé aux personnes vaccinées, guéries ou testées négatives."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "Accès refusé."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Accès aux établissements et aux manifestations réservé aux personnes vaccinées ou guéries."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "Accès refusé."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Accès aux établissements et aux manifestations réservé aux personnes dont la vaccination complète, la vaccination de rappel ou la guérison (confirmée par un test PCR) ne date pas de plus de 120 jours. Vous n'avez pas besoin de présenter un certificat de test supplémentaire."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "Accès aux établissements et aux manifestations réservé aux personnes vaccinées ou guéries qui présentent, en plus d'un certificat COVID, un résultat de test négatif."
}
}
}
},
"it": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "L’accesso a strutture e manifestazioni è consentito alle persone vaccinate, guarite o testate negative."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "L’accesso non è consentito."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "L’accesso a strutture e manifestazioni è consentito alle persone vaccinate o guarite."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "L’accesso non è consentito."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "L’accesso a strutture e manifestazioni è consentito alle persone per le quali sono trascorsi al massimo 120 giorni dal completamento del ciclo vaccinale, dalla somministrazione della dose di richiamo o dalla guarigione (sulla base di un test PCR). In questo caso non è necessario un ulteriore certificato di test."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "Oltre al certificato di vaccinazione o di guarigione, per l’accesso a strutture e manifestazioni è necessario presentare anche il risultato di un test negativo."
}
}
}
},
"rm": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Access a manaschis ed ad occurrenzas per persunas vaccinadas, guaridas u cun in test negativ."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "Nagin access."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Access a manaschis ed ad occurrenzas per persunas vaccinadas u guaridas."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "Nagin access."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Access a manaschis ed ad occurrenzas per persunas ch’èn vaccinadas cumplettamain, che han laschà rinfrestgar la vaccinaziun u ch’èn guaridas (sin basa d’in test da PCR) avant maximalmain 120 dis. Vus na duvrais nagin certificat da test supplementar."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "Per l’access a manaschis ed ad occurrenzas dovri ultra dal certificat COVID per persunas vaccinadas u guaridas in test negativ."
}
}
}
}
},
"lightCertDurationInHours": 24,
"showVaccinationHintHomescreen": false,
"showVaccinationHintDetail": false,
"showVaccinationHintTransfer": false,
"refreshButtonDisabled": true,
"refreshButtonInfo": {
"de": {
"title": "Info",
"text1": "Der «Refresh-Button» wurde entfernt.",
"text2": "Sollte Ihr Covid-Zertifikat abgelaufen oder technisch ungültig sein, wird Ihnen dies direkt auf dem Zertifikat angezeigt.",
"fatTitle": "Für Prüfende",
"text3": "Die Prüfung von Covid-Zertifikaten ist mit der App «COVID Certificate Check» vorzunehmen.",
"linkText": "Mehr erfahren",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1070048217"
},
"en": {
"title": "Info",
"text1": "The \"Refresh button\" has been removed.",
"text2": "If your COVID certificate has expired or is technically invalid, this is indicated directly on the certificate.",
"fatTitle": "For verifiers",
"text3": "COVID certificates are to be verified with the \"COVID Certificate Check\" app.",
"linkText": "To find out more",
"linkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1851413288"
},
"fr": {
"title": "Information",
"text1": "Le bouton «rafraîchir» a été supprimé.",
"text2": "Si votre certificat COVID a expiré ou s'il n'est techniquement pas valable, cette information apparaît automatiquement sur le certificat.",
"fatTitle": "Pour les personnes chargées du contrôle",
"text3": "La vérification des certificats COVID doit s'effectuer au moyen de l'application «COVID Certificate Check».",
"linkText": "Pour en savoir plus",
"linkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#-1006172949"
},
"it": {
"title": "Informazione",
"text1": "Il pulsante «Aggiorna» è stato eliminato.",
"text2": "Se il certificato è scaduto o se non è valido per motivi tecnici, l’informazione compare direttamente nell’app. ",
"fatTitle": "Per le persone incaricate della verifica",
"text3": "I certificati COVID devono essere verificati utilizzando l’app «COVID Certificate Check».",
"linkText": "Per saperne di più",
"linkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1358421103"
},
"rm": {
"title": "Infurmaziun",
"text1": "La «buttun da refresh» è vegnida stizzada.",
"text2": "Sche Voss certificat COVID è spirà u sch’el n’è tecnicamain betg valaivel, vegn quai inditgà directamain sin il certificat.",
"fatTitle": "Per las persunas che verifitgeschan",
"text3": "Ils certificats COVID ston vegnir verifitgads cun l’app «COVID Certificate Check».",
"linkText": "Dapli infurmaziuns",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1070048217"
}
},
"eolBannerInfo": {
"de": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Verkürzte Gültigkeitsdauer",
"detailHexColor": "#ffde27",
"detailTitle": "Verkürzte Gültigkeitsdauer",
"detailText": "Dieses Zertifikat wird bald ablaufen.",
"detailMoreInfo": "Mehr erfahren",
"popupTitle": "Info",
"popupText1": "Per 31. Jan. 2022 gelten in der Schweiz reduzierte Gültigkeitsdauern von 270 statt 365 Tagen für Covid-Zertifikate für Geimpfte oder Genesene. Dieses Zertifikat ist von der verkürzten Gültigkeitsdauer unmittelbar betroffen:",
"popupBoldText": "Dieses Covid-Zertifikat kann ab dem 31. Jan. 2022 nicht mehr verwendet werden, da die Gültigkeitsdauer dann bereits abgelaufen sein wird.",
"popupText2": null,
"popupLinkText": "Mehr erfahren",
"popupLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/warum-wird-die-gueltigkeitsdauer-der-zertifikate-fuer-eine-impfung-oder-eine"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Bald abgelaufen",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "Dieses Zertifikat läuft bald ab.",
"detailMoreInfo": "Mehr erfahren?",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "Dieses Covid-Zertifikat ist nur noch wenige Tage gültig. Bitte beachten Sie das auf dem Zertifikat ausgewiesene Ablaufdatum.",
"popupText2": null,
"popupLinkText": "Und nun?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/was-soll-ich-tun-wenn-mein-covid-zertifikat-nach-schweizer-gueltigkeitsregeln-bald"
}
},
"en": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Shortened period of validity",
"detailHexColor": "#ffde27",
"detailTitle": "Shortened period of validity",
"detailText": "This certificate will soon expire.",
"detailMoreInfo": "More information",
"popupTitle": "Info",
"popupText1": "As of 31 Jan 2022 a shortened period of validity of 270 instead of 365 days applies to COVID vaccination or recovery certificates in Switzerland. This certificate is directly affected by the shortened period of validity:",
"popupBoldText": "This COVID certificate can no longer be used after 31 Jan 2022 as the period of validity will already have expired.",
"popupText2": null,
"popupLinkText": "More information",
"popupLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-period-validity-certificates-vaccination-or-recovery-being-shortened-365-270"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Imminent expiry",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "This certificate will soon expire.",
"detailMoreInfo": "More information?",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "This COVID certificate is valid for only a few more days. Please note the expiry date shown on the certificate.",
"popupText2": null,
"popupLinkText": "And now?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/what-should-i-do-if-my-covid-certificate-about-expire-under-swiss-rules-validity"
}
},
"fr": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Durée de validité réduite",
"detailHexColor": "#ffde27",
"detailTitle": "Durée de validité réduite",
"detailText": "Ce certificat expirera bientôt.",
"detailMoreInfo": "En savoir plus",
"popupTitle": "Info",
"popupText1": "À partir du 31 janvier 2022, la durée de validité en Suisse des certificats COVID pour les personnes vaccinées ou guéries est réduite de 365 à 270 jours. Ce certificat est directement concerné:",
"popupBoldText": "Ce certificat COVID ne peut plus être utilisé à partir du 31 janvier 2022.",
"popupText2": null,
"popupLinkText": "En savoir plus",
"popupLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-la-duree-de-validite-des-certificats-de-vaccination-ou-de-guerison-t-elle"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Expiration imminente",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "Ce certificat expirera bientôt.",
"detailMoreInfo": "En savoir plus?",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "Ce certificat COVID expirera dans quelques jours. Nous attirons votre attention sur la date de fin de validité affichée.",
"popupText2": null,
"popupLinkText": "Et maintenant ?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/que-dois-je-faire-si-mon-certificat-covid-est-sur-le-point-dexpirer-en-suisse"
}
},
"it": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Durata di validità abbreviata",
"detailHexColor": "#ffde27",
"detailTitle": "Durata di validità abbreviata",
"detailText": "Questo certificato sta per scadere.",
"detailMoreInfo": "Per saperne di più",
"popupTitle": "Info",
"popupText1": "Dal 31 gennaio 2022 in Svizzera vige una durata di validità del certificato COVID per persone vaccinate o guarite di 270 anziché di 365 giorni. Questo certificato è interessato direttamente dall’abbreviazione della durata di validità:",
"popupBoldText": "La scadenza della durata di validità di questo certificato COVID è il 31 gennaio 2022. Pertanto il certificato non è più utilizzabile dopo quella data.",
"popupText2": null,
"popupLinkText": "Per saperne di più",
"popupLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-la-durata-di-validita-dei-certificati-di-vaccinazione-o-di-guarigione-e"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Scadenza imminente",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "Questo certificato sta per scadere.",
"detailMoreInfo": "Per saperne di più",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "Questo certificato COVID è valido ancora per pochi giorni. Si prega di tenere conto della data di scadenza indicata sullo stesso.",
"popupText2": null,
"popupLinkText": "E ora?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/cosa-devo-fare-se-il-mio-certificato-covid-sta-scadere-secondo-le-regole-di"
}
},
"rm": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Valaivladad pli curta",
"detailHexColor": "#ffde27",
"detailTitle": "Valaivladad pli curta",
"detailText": "Quest certificat scada bainbaud.",
"detailMoreInfo": "Dapli infurmaziuns",
"popupTitle": "Info",
"popupText1": "A partir dals 31-01-2022 valan en Svizra duradas da valaivladad reducidas da 270 dis empè da 365 dis per certificats COVID per persunas vaccinadas u guaridas. Quest certificat è pertutgà directamain da la valaivladad pli curta:",
"popupBoldText": "Quest certificat COVID na po betg pli vegnir duvrà a partir dals 31-01-2022, perquai che la durada da valaivladad è lura gia scadida.",
"popupText2": null,
"popupLinkText": "Dapli infurmaziuns",
"popupLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/warum-wird-die-gueltigkeitsdauer-der-zertifikate-fuer-eine-impfung-oder-eine"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Scada bainbaud",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "Quest certificat scada bainbaud.",
"detailMoreInfo": "Dapli infurmaziuns?",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "Quest certificat COVID è valaivel mo pli intgins dis. Resguardai per plaschair la data da scadenza inditgà sin il certificat.",
"popupText2": null,
"popupLinkText": "Ed uss?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/was-soll-ich-tun-wenn-mein-covid-zertifikat-nach-schweizer-gueltigkeitsregeln-bald"
}
}
},
"showRatConversionForm": true,
"ratConversionFormUrl": "https://covidcertificate-form.admin.ch/immunityrequest",
"certRenewalInfo": {
"de": {
"INFO": {
"heading": "Was bedeutet das?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Die QR-Codes der Covid-Zertifikate sind technisch nur begrenzt gültig."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Damit dieses Zertifikat (z. B. auf Reisen) weiterhin geprüft werden kann, muss der QR-Code erneuert werden."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Die Erneuerung können Sie hier in der App selbst durchführen (Internetverbindung nötig). Die Daten des aktuellen Zertifikats werden dazu verschlüsselt von der App an das System des Bundes zur Ausstellung von Covid-Zertifikaten übermittelt. Danach wird ein neuer QR-Code zurück an die App gesendet. Anschliessend werden die Daten gelöscht."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Wieso Sie den QR-Code auch dann erneuern sollten, wenn Ihr Impf- oder Genesungszertifikat nach den Schweizer Gültigkeitsregeln bald abläuft oder bereits abgelaufen ist, lesen Sie in dieser FAQ."
}
],
"faqLinkText": "Zur FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
},
"EXPIRED": {
"heading": "Was bedeutet das?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Die QR-Codes der Covid-Zertifikate sind technisch nur begrenzt gültig."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Damit dieses Zertifikat (z. B. auf Reisen) weiterhin geprüft werden kann, muss der QR-Code erneuert werden."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Die Erneuerung können Sie hier in der App selbst durchführen (Internetverbindung nötig). Die Daten des aktuellen Zertifikats werden dazu verschlüsselt von der App an das System des Bundes zur Ausstellung von Covid-Zertifikaten übermittelt. Danach wird ein neuer QR-Code zurück an die App gesendet. Anschliessend werden die Daten gelöscht."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Erneuern Sie den QR-Code auch dann, wenn die Gültigkeit in der Schweiz bald abläuft oder bereits abgelaufen ist."
}
],
"faqLinkText": "Zur FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
},
"RENEWED": {
"heading": "Wichtig!",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Ersetzen Sie auch zuvor ausgedruckte oder gespeicherte Zertifikate durch diese erneuerte Version."
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "Wie lange ein Covid-Zertifikat gültig ist wird in jedem Land gemäss den aktuell geltenden Regeln berechnet. Die Erneuerung des QR-Codes hat darauf keinen Einfluss."
}
],
"faqLinkText": "Zur FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
}
},
"en": {
"INFO": {
"heading": "What does this mean?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "The QR codes used for COVID certificates have limited technical validity"
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "To enable this certificate to continue to be checked (e.g. when you’re travelling), you must renew the QR code."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "You can do this directly here in the app (provided you have an internet connection). The data in your current certificate will be encrypted and sent to the federal government’s COVID certificate issuing system for a new QR code to be issued. This QR code is then sent back to the app. Once the new QR code has been issued and the data sent, the data on the government system are deleted."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Check out this FAQ to find out why you should also renew the QR code if your vaccination or recovery certificate is about to expire or has already expired under the Swiss validity rules."
}
],
"faqLinkText": "To the FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-should-i-renew-qr-code-my-covid-certificate-even-though-certificate-about"
},
"EXPIRED": {
"heading": "What does this mean?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "The QR codes used for COVID certificates have limited technical validity."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "To enable this certificate to continue to be checked (e.g. when you’re travelling), you must renew the QR code."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "You can do this directly here in the app (provided you have an internet connection). The data in your current certificate will be encrypted and sent to the federal government’s COVID certificate issuing system for a new QR code to be issued. This QR code is then sent back to the app. Once the new QR code has been issued and the data sent, the data on the government system are deleted."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Check out this FAQ to find out why you should also renew the QR code if your vaccination or recovery certificate is about to expire or has already expired under the Swiss validity rules."
}
],
"faqLinkText": "To the FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-should-i-renew-qr-code-my-covid-certificate-even-though-certificate-about"
},
"RENEWED": {
"heading": "Important!",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Also replace certificates you have previously printed out or stored with this renewed version."
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "The length of time for which a vaccination is recognised in a particular country is not specified in the certificate. Instead, it is calculated in accordance with the specific rules of the country each time the certificate is checked. Renewing the QR code merely ensures that the QR code can be used from a technical point of view."
}
],
"faqLinkText": "To the FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-should-i-renew-qr-code-my-covid-certificate-even-though-certificate-about"
}
},
"fr": {
"INFO": {
"heading": "Qu’est-ce que cela signifie ?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Les codes QR des certificats COVID ont une validité technique limitée"
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Pour qu’il soit toujours possible de contrôler ce certificat (par exemple en voyage), le code QR doit être renouvelé."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Le renouvellement nécessaire peut être effectué ici directement dans l’application (connexion Internet requise). Les données du certificat actuel sont transmises sous forme cryptée depuis l’application vers le système de la Confédération établissant les certificats COVID. Ensuite, un nouveau code QR est ainsi établi, qui est renvoyé à l’application de stockage. Une fois établies et transmises. Enfin, les données sont effacées du système"
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Cette FAQ vous explique pourquoi vous devriez renouveler le code QR même si votre certificat de vaccination ou de guérison est sur le point d’expirer ou a déjà expiré selon les règles de validité suisses."
}
],
"faqLinkText": "Vers la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-dois-je-renouveler-le-code-qr-de-mon-certificat-covid-alors-que-selon-les"
},
"EXPIRED": {
"heading": "Qu’est-ce que cela signifie ?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Les codes QR des certificats COVID ont une validité technique limitée."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Pour qu’il soit toujours possible de contrôler ce certificat (par exemple en voyage), le code QR doit être renouvelé."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Le renouvellement nécessaire peut être effectué ici directement dans l’application (connexion Internet requise). Les données du certificat actuel sont transmises sous forme cryptée depuis l’application vers le système de la Confédération établissant les certificats COVID. Ensuite, un nouveau code QR est ainsi établi, qui est renvoyé à l’application de stockage. Une fois établies et transmises. Enfin, les données sont effacées du système"
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Cette FAQ vous explique pourquoi vous devriez renouveler le code QR même si votre certificat de vaccination ou de guérison est sur le point d’expirer ou a déjà expiré selon les règles de validité suisses."
}
],
"faqLinkText": "Vers la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-dois-je-renouveler-le-code-qr-de-mon-certificat-covid-alors-que-selon-les"
},
"RENEWED": {
"heading": "À noter:",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Remplacez également les certificats précédemment imprimés ou enregistrés par cette nouvelle version"
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "La durée pendant laquelle une vaccination est reconnue dans un pays n’est pas définie dans le certificat, mais calculée au moment du contrôle selon les règles du pays examinateur. Le renouvellement du code QR garantit uniquement que celui-ci puisse être utilisé d’un point de vue technique. "
}
],
"faqLinkText": "Vers la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-dois-je-renouveler-le-code-qr-de-mon-certificat-covid-alors-que-selon-les"
}
},
"it": {
"INFO": {
"heading": "Cosa significa?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "I codici QR dei certificati COVID hanno una validità tecnica limitata"
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Affinché questo certificato possa continuare a essere verificato (p. es. durante i viaggi), è necessario rinnovare il codice QR."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Puoi eseguire autonomamente il rinnovo richiesto qui nell’app (collegamento Internet necessario). A tale scopo i dati del certificato attuale saranno codificati e trasmessi dall’app al sistema della Confederazione per l’emissione di certificati COVID, il quale a sua volta creerà un nuovo codice QR che in seguito sarà rinviato all’app per la conservazione. Infine i dati saranno cancellati a emissione e trasmissione avvenute."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "In queste FAQ trovi i motivi per cui è necessario rinnovare il codice QR anche se il tuo certificato di vaccinazione o di guarigione dovesse giungere presto a scadenza o essere già scaduto secondo le regole di validità svizzere."
}
],
"faqLinkText": "Alle FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-devo-rinnovare-il-codice-qr-del-mio-certificato-covid-anche-se-secondo-le"
},
"EXPIRED": {
"heading": "Cosa significa?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "I codici QR dei certificati COVID hanno una validità tecnica limitata."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Affinché questo certificato possa continuare a essere verificato (p. es. durante i viaggi), è necessario rinnovare il codice QR."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Puoi eseguire autonomamente il rinnovo richiesto qui nell’app (collegamento Internet necessario). A tale scopo i dati del certificato attuale saranno codificati e trasmessi dall’app al sistema della Confederazione per l’emissione di certificati COVID, il quale a sua volta creerà un nuovo codice QR che in seguito sarà rinviato all’app per la conservazione. Infine i dati saranno cancellati a emissione e trasmissione avvenute."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "In queste FAQ trovi i motivi per cui è necessario rinnovare il codice QR anche se il tuo certificato di vaccinazione o di guarigione dovesse giungere presto a scadenza o essere già scaduto secondo le regole di validità svizzere."
}
],
"faqLinkText": "Alle FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-devo-rinnovare-il-codice-qr-del-mio-certificato-covid-anche-se-secondo-le"
},
"RENEWED": {
"heading": "Importante!",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Sostituisci anche i certificati stampati o salvati in precedenza con la presente versione aggiornata."
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "La durata del riconoscimento di una vaccinazione in un Paese non è specificata nel certificato. Questo viene calcolato durante la verifica in base alle regole del Paese esaminatore. Il rinnovo del codice QR garantisce solo che tale codice possa continuare a essere tecnicamente utilizzato."
}
],
"faqLinkText": "Alle FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-devo-rinnovare-il-codice-qr-del-mio-certificato-covid-anche-se-secondo-le"
}
},
"rm": {
"INFO": {
"heading": "Tge vul quai dir?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Tecnicamain valan ils codes QR dals certificats COVID mo per ina tscherta durada."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Per che quest certificat possia vegnir verifitgà er vinavant (p.ex. sin viadis) sto il code QR vegnir renovà."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "La renovaziun pudais Vus far sezza u sez qua en l'app (ina colliaziun d'internet è necessaria). Las datas dal certificat actual vegnan transmessas da l'app en moda codada al sistem federal per l'emissiun da certificats COVID. In nov code QR vegn alura tramess enavos a l'app. Silsuenter vegnan las datas stizzadas là."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pertge che Vus duessas renovar il code QR er, sche Voss certificat da vaccinaziun u da guariziun scada bainbaud u è gia scadì tenor las reglas da valaivladad en Svizra, pudais Vus leger en questa FAQ."
}
],
"faqLinkText": "A la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
},
"EXPIRED": {
"heading": "Tge vul quai dir?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Tecnicamain valan ils codes QR dals certificats COVID mo per ina tscherta durada."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Per che quest certificat possia vegnir verifitgà er vinavant (p.ex. sin viadis) sto il code QR vegnir renovà."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "La renovaziun pudais Vus far sezza u sez qua en l'app (ina colliaziun d'internet è necessaria). Las datas dal certificat actual vegnan transmessas da l'app en moda codada al sistem federal per l'emissiun da certificats COVID. In nov code QR vegn alura tramess enavos a l'app. Silsuenter vegnan las datas stizzadas là."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pertge che Vus duessas renovar il code QR er, sche Voss certificat da vaccinaziun u da guariziun scada bainbaud u è gia scadì tenor las reglas da valaivladad en Svizra, pudais Vus leger en questa FAQ."
}
],
"faqLinkText": "A la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
},
"RENEWED": {
"heading": "Impurtant!",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Remplazzai per plaschair tras questa nova versiun er ils certificats che Vus avais arcunà u stampà pli baud."
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "Quant ditg ch'ina vaccinaziun vegn renconuschida en in pajais, n'è betg fixà en il certificat. Quai vegn calculà a chaschun da la verificaziun tenor las reglas dal pajais che fa la verificaziun. La renovaziun dal code QR garantescha unicamain l'utilisaziun tecnica dal code QR"
}
],
"faqLinkText": "A la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
}
}
},
"showValidityState": false,
"foreignRulesCheckEnabled": false
}
================================================
FILE: wallet/src/abn/java/ch/admin/bag/covidcertificate/wallet/debug/WalletDebugFragment.kt
================================================
package ch.admin.bag.covidcertificate.wallet.debug
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
import ch.admin.bag.covidcertificate.common.debug.DebugFragment
class WalletDebugFragment : DebugFragment() {
companion object {
fun newInstance(): DebugFragment = DebugFragment()
}
}
================================================
FILE: wallet/src/androidTest/java/ch/admin/bag/covidcertificate/wallet/EspressoUtil.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.wallet
import androidx.test.espresso.Espresso
import androidx.test.espresso.ViewAction
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.matcher.ViewMatchers
import org.hamcrest.Matchers
open class EspressoUtil {
fun doOnboarding() {
val materialButton = Espresso.onView(
Matchers.allOf(
ViewMatchers.withId(R.id.onboarding_continue_button),
ViewMatchers.isDisplayed()
)
)
materialButton.perform(ViewActions.click())
val materialButton2 = Espresso.onView(
Matchers.allOf(
ViewMatchers.withId(R.id.onboarding_continue_button),
ViewMatchers.isDisplayed()
)
)
materialButton2.perform(ViewActions.click())
val materialButton3 = Espresso.onView(
Matchers.allOf(
ViewMatchers.withId(R.id.onboarding_continue_button),
ViewMatchers.isDisplayed()
)
)
materialButton3.perform(ViewActions.click())
val materialButton4 = Espresso.onView(
Matchers.allOf(
ViewMatchers.withId(R.id.onboarding_continue_button),
ViewMatchers.isDisplayed()
)
)
materialButton4.perform(ViewActions.click())
}
// The standard scrollTo Action does not support NestedScrollView. This implementation does support NestedScrollView in
// addition to the Views supported by the standard ScrollToAction
fun scrollTo(): ViewAction {
return ViewActions.actionWithAssertions(NestedScrollToAction())
}
}
================================================
FILE: wallet/src/androidTest/java/ch/admin/bag/covidcertificate/wallet/LoadconfigTest.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.wallet
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule
import androidx.test.runner.AndroidJUnit4
import ch.admin.bag.covidcertificate.common.browserstack.AirplaneMode
import ch.admin.bag.covidcertificate.common.browserstack.BadNetwork
import ch.admin.bag.covidcertificate.wallet.data.WalletSecureStorage
import org.hamcrest.Matchers.*
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@AirplaneMode
@BadNetwork
@LargeTest
@RunWith(AndroidJUnit4::class)
class LoadconfigTest : EspressoUtil() {
@Rule
@JvmField
var mActivityTestRule = ActivityTestRule(MainActivity::class.java)
val secureStorage by lazy { WalletSecureStorage.getInstance(InstrumentationRegistry.getInstrumentation().getTargetContext()) }
@Before
fun checkIfOnboardingIsShown(){
if (secureStorage.getOnboardingCompleted()){
return
}
doOnboarding()
}
@Test
fun loadconfigTest() {
val supportButton = onView(
allOf(
withId(R.id.homescreen_support_button),
isDisplayed()
)
)
supportButton.perform(click())
onView(
allOf(
withId(R.id.faq_recycler_view),
isDisplayed(),
)
).check( RecyclerViewNotEmptyAssertion())
}
}
================================================
FILE: wallet/src/androidTest/java/ch/admin/bag/covidcertificate/wallet/NestedScrollViewScrollTo.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.wallet
import android.view.View
import android.widget.HorizontalScrollView
import android.widget.ListView
import android.widget.ScrollView
import androidx.core.widget.NestedScrollView
import androidx.test.espresso.ViewAction
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.matcher.ViewMatchers
import org.hamcrest.Matcher
import org.hamcrest.Matchers
class NestedScrollToAction(scrolltoAction: ViewAction = ViewActions.scrollTo()) : ViewAction by scrolltoAction {
override fun getConstraints(): Matcher {
return Matchers.allOf(
ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE),
ViewMatchers.isDescendantOfA(
Matchers.anyOf(
ViewMatchers.isAssignableFrom(NestedScrollView::class.java),
ViewMatchers.isAssignableFrom(ScrollView::class.java),
ViewMatchers.isAssignableFrom(HorizontalScrollView::class.java),
ViewMatchers.isAssignableFrom(ListView::class.java)
)
)
)
}
}
================================================
FILE: wallet/src/androidTest/java/ch/admin/bag/covidcertificate/wallet/OnboardingTest.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.wallet
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.filters.LargeTest
import androidx.test.rule.ActivityTestRule
import androidx.test.runner.AndroidJUnit4
import ch.admin.bag.covidcertificate.common.browserstack.AirplaneMode
import ch.admin.bag.covidcertificate.common.browserstack.BadNetwork
import ch.admin.bag.covidcertificate.common.browserstack.Normal
import ch.admin.bag.covidcertificate.common.browserstack.Onboarding
import org.hamcrest.Matchers.allOf
import org.junit.FixMethodOrder
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
@Onboarding
@RunWith(AndroidJUnit4::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class OnboardingTest : EspressoUtil() {
@Rule
@JvmField
var mActivityTestRule = ActivityTestRule(MainActivity::class.java)
@Test
fun A_onboardingTest() {
doOnboarding()
val textView = onView(
allOf(
withId(R.id.homescreen_add_certificate_options_title),
isDisplayed()
)
)
textView.check(matches(withText(R.string.wallet_homescreen_what_to_do)))
}
@Test
fun B_onboardingTestShowNoOnboarding() {
val textView = onView(
allOf(
withId(R.id.homescreen_add_certificate_options_title),
isDisplayed()
)
)
textView.check(matches(withText(R.string.wallet_homescreen_what_to_do)))
}
}
================================================
FILE: wallet/src/androidTest/java/ch/admin/bag/covidcertificate/wallet/RecyclerViewNotEmptyAssertion.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.wallet
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.NoMatchingViewException
import androidx.test.espresso.ViewAssertion
import org.junit.Assert.assertNotNull
class RecyclerViewNotEmptyAssertion : ViewAssertion {
override fun check(view: View?, noViewFoundException: NoMatchingViewException?) {
if (noViewFoundException != null) {
throw noViewFoundException
}
val recyclerView = view as RecyclerView
val adapter = recyclerView.adapter
assertNotNull(adapter)
assert(adapter!!.itemCount > 0)
}
}
================================================
FILE: wallet/src/androidTest/java/ch/admin/bag/covidcertificate/wallet/ScanCountTest.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.wallet
import android.content.Context
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import ch.admin.bag.covidcertificate.common.browserstack.Normal
import ch.admin.bag.covidcertificate.sdk.android.utils.EncryptedSharedPreferencesUtil
import ch.admin.bag.covidcertificate.wallet.data.WalletSecureStorage
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@Normal
@RunWith(AndroidJUnit4::class)
class ScanCountTest() {
lateinit var context: Context
lateinit var walletSecureStorage: WalletSecureStorage
@Before
fun setup() {
context = InstrumentationRegistry.getInstrumentation().targetContext
EncryptedSharedPreferencesUtil.initializeSharedPreferences(context, "SecureStorage").edit().clear().apply()
walletSecureStorage = WalletSecureStorage.getInstance(context)
}
@Test
fun checkInsertTodayLessThan10() {
for (i in 1..9) {
walletSecureStorage.addLastScanTimes(System.currentTimeMillis())
}
assertFalse(walletSecureStorage.has10OrMoreScansInLast24h())
}
@Test
fun checkInsertTodayExactly10() {
for (i in 1..10) {
walletSecureStorage.addLastScanTimes(System.currentTimeMillis())
}
assertTrue(walletSecureStorage.has10OrMoreScansInLast24h())
}
@Test
fun checkInsertTodayMoreThan10() {
for (i in 1..15) {
walletSecureStorage.addLastScanTimes(System.currentTimeMillis())
}
assertTrue(walletSecureStorage.has10OrMoreScansInLast24h())
}
@Test
fun checkInsertTodayMoreThan10Yesterday() {
for (i in 1..15) {
walletSecureStorage.addLastScanTimes(System.currentTimeMillis() - 24 * 60 * 60 * 1000L)
}
assertFalse(walletSecureStorage.has10OrMoreScansInLast24h())
}
@Test
fun checkInsertTodayMoreThan10YesterdayAndToday() {
for (i in 1..15) {
walletSecureStorage.addLastScanTimes(System.currentTimeMillis())
walletSecureStorage.addLastScanTimes(System.currentTimeMillis() - 24 * 60 * 60 * 1000L)
}
assertTrue(walletSecureStorage.has10OrMoreScansInLast24h())
}
}
================================================
FILE: wallet/src/androidTest/java/ch/admin/bag/covidcertificate/wallet/TransferCodeTest.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.wallet
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.ViewAction
import androidx.test.espresso.action.ViewActions.*
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule
import androidx.test.runner.AndroidJUnit4
import androidx.viewpager2.widget.ViewPager2
import ch.admin.bag.covidcertificate.common.browserstack.Normal
import ch.admin.bag.covidcertificate.wallet.data.WalletSecureStorage
import org.hamcrest.Matchers.allOf
import org.junit.Assert
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@LargeTest
@Normal
@RunWith(AndroidJUnit4::class)
class TransferCodeTest : EspressoUtil() {
private val context by lazy { InstrumentationRegistry.getInstrumentation().targetContext }
private val secureStorage by lazy { WalletSecureStorage.getInstance(context) }
@Before
fun setup() {
if (!secureStorage.getOnboardingCompleted()) doOnboarding()
}
@Rule
@JvmField
var mActivityTestRule = ActivityTestRule(MainActivity::class.java)
@Test
fun testCreateTransferCode() {
while (countTransfercodesOnHomeScreen() != 0) {
deleteTransfercode()
}
Assert.assertEquals(0, countTransfercodesOnHomeScreen())
createTransfercode()
Assert.assertEquals(1, countTransfercodesOnHomeScreen())
deleteTransfercode()
Assert.assertEquals(0, countTransfercodesOnHomeScreen())
}
@Test
fun testCreateMultipleTransferCodes() {
while (countTransfercodesOnHomeScreen() != 0) {
deleteTransfercode()
}
Assert.assertEquals(0, countTransfercodesOnHomeScreen())
createTransfercode()
Assert.assertEquals(1, countTransfercodesOnHomeScreen())
createTransfercode()
Assert.assertEquals(2, countTransfercodesOnHomeScreen())
deleteTransfercode()
Assert.assertEquals(1, countTransfercodesOnHomeScreen())
deleteTransfercode()
Assert.assertEquals(0, countTransfercodesOnHomeScreen())
}
private fun clickButton(id: Int) {
onView(allOf(withId(id), isDisplayed())).perform(click())
}
private fun createTransfercode() {
if (countTransfercodesOnHomeScreen() != 0) {
clickButton(R.id.homescreen_scan_button_small)
}
clickButton(R.id.option_transfer_code)
clickButton(R.id.transfer_code_intro_create)
onView(withId(R.id.transfer_code_content)).perform(waitUntilVisible(timeout = 30000L))
clickButton(R.id.transfer_code_creation_done_button)
}
private fun deleteTransfercode() {
onView(allOf(withId(R.id.transfer_code_page_card), isCompletelyDisplayed())).perform(click())
onView(withId(R.id.transfer_code_content)).perform(waitUntilVisible(timeout = 30000L))
//Scroll to delete button
onView(withId(R.id.transfer_code_detail_delete_button)).perform(scrollTo())
clickButton(R.id.transfer_code_detail_delete_button)
clickButton(android.R.id.button1)
}
private fun countTransfercodesOnHomeScreen(): Int {
val recyclerView = onView(
allOf(
withId(R.id.homescreen_certificates_view_pager),
isDisplayed()
)
)
var count = 0
recyclerView.check { view, _ ->
if (view == null) return@check
count = (view as ViewPager2).adapter?.itemCount ?: 0
}
return count
}
/**
* @return a [WaitUntilVisibleAction] instance created with the given [timeout] parameter.
*/
private fun waitUntilVisible(timeout: Long): ViewAction = WaitUntilVisibleAction(timeout)
}
================================================
FILE: wallet/src/androidTest/java/ch/admin/bag/covidcertificate/wallet/WaitUntilVisibleAction.kt
================================================
/*
* Copyright (c) 2022 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.wallet
import android.view.View
import androidx.test.espresso.PerformException
import androidx.test.espresso.UiController
import androidx.test.espresso.ViewAction
import androidx.test.espresso.util.HumanReadables
import org.hamcrest.Matcher
import org.hamcrest.Matchers.any
import java.util.concurrent.TimeoutException
/**
* A [ViewAction] that waits up to [timeout] milliseconds for a [View]'s visibility value to change to [View.VISIBLE].
*/
class WaitUntilVisibleAction(private val timeout: Long) : ViewAction {
override fun getConstraints(): Matcher {
return any(View::class.java)
}
override fun getDescription(): String {
return "wait up to $timeout milliseconds for the view to become visible"
}
override fun perform(uiController: UiController, view: View) {
val endTime = System.currentTimeMillis() + timeout
do {
if (view.visibility == View.VISIBLE) return
uiController.loopMainThreadForAtLeast(50)
} while (System.currentTimeMillis() < endTime)
throw PerformException.Builder()
.withActionDescription(description)
.withCause(TimeoutException("Waited $timeout milliseconds"))
.withViewDescription(HumanReadables.describe(view))
.build()
}
}
================================================
FILE: wallet/src/dev/assets/faq/config.json
================================================
{
"forceUpdate": false,
"infoBox": null,
"questions": {
"de": {
"faqTitle": "Was sind Covid-Zertifikate?",
"faqSubTitle": "Das Covid-Zertifikat bietet die Möglichkeit, eine Covid-19-Impfung, eine durchgemachte Erkrankung oder ein negatives Testergebnis fälschungssicher zu dokumentieren.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Wann und wo kann ich ein Covid-Zertifikat erhalten?",
"text": "Ein Covid-Zertifikat können Sie nach einer Covid-19-Impfung, nach einer durchgemachten Erkrankung oder nach einem negativen Testergebnis erhalten. Das Zertifikat stellt Ihnen in der Regel das Gesundheitsfachpersonal vor Ort auf Anfrage aus.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie erhalte ich nach einer durchgemachten Covid-19-Erkrankung ein Covid-Zertifikat?",
"text": "Je nach Kanton wird Ihnen das Covid-Zertifikat teilweise direkt von der Teststelle oder dem Labor ausgestellt, in dem Ihr positives Testresultat festgestellt wurde. Falls dies nicht der Fall ist, können Sie nachträglich online über die Webseite der «Nationale Antragsstelle Covid-Zertifikat» ein Covid-Zertifikat beantragen. Der Antrag wird dort von der zuständigen kantonalen Behörde bearbeitet. Die Webseite der «Nationale Antragsstelle Covid-Zertifikat» finden Sie hier:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Nationale Antragsstelle Covid-Zertifikat (admin.ch)",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "Wie kann ich ein Covid-Zertifikat vorweisen?",
"text": "Sie können Ihr Covid-Zertifikat in Papierform vorweisen oder Sie benutzen die «COVID Certificate»-App, um Zertifikate in der App zu speichern und direkt aus der App vorzuweisen. \n\nBeachten Sie, dass Sie in jedem Fall auch noch ein Ausweisdokument vorweisen müssen.\nIn einigen Ländern wird eine ausgedruckte Version des Zertifikats verlangt und das elektronische Zertifikat nicht akzeptiert. Führen Sie auf Reisen daher stets auch die ausgedruckte Version mit.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie lange ist das Covid-Zertifikat gültig?",
"text": "In der Schweiz wurde die Zertifikatspflicht im Februar 2022 aufgehoben. Die Schweizer Gültigkeitsdauern bestehen seitdem nur noch formal und haben praktisch im Inland keine Bedeutung mehr. Im Ausland gelten jeweils die Gültigkeitsregeln des entsprechenden Landes. Informieren Sie sich kurz vor Ihrer Abreise auf der Webseite der Behörden Ihres Transit- oder Ziellandes, ob das Land noch zertifikatsbasierte Massnahmen hat und welche falls ja, welche Gültigkeitsdauern für Ihr Zielland festgelegt sind. Hilfreiche Webseite bei Auslandsreisen:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/de"
},
{
"title": "Wo sind meine Daten gespeichert?",
"text": "Ihre Zertifikatsdaten werden nicht in einem zentralen System des Bundes gespeichert, sondern befinden sich nur lokal auf Ihrem Mobilgerät, respektive auf dem Covid-Zertifikat in Papierform.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie werden Missbrauch und Fälschung verhindert?",
"text": "Der QR-Code auf dem Covid-Zertifikat enthält eine elektronische Signatur. Die Signatur ist ein wichtiges Sicherheitsmerkmal und macht das Covid-Zertifikat fälschungssicher. Das Covid-Zertifikat ist zudem nur in Kombination mit einem Ausweisdokument gültig.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was passiert, wenn ich mein Covid-Zertifikat verliere?",
"text": "Ihr Covid-Zertifikat wird in keinem zentralen System des Bundes gespeichert. Bewahren Sie das Covid-Zertifikat auf Papier und/oder als PDF deshalb sorgfältig auf. Bei Verlust und Bedarf nach einem Einsatz kann für die Neuausstellung durch die Gesundheitseinrichtungen (z. B. der Test- oder Impf-stelle) eine Gebühr erhoben werden. ",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was ist das Zertifikat Light?",
"text": "Die «COVID Certificate»-App bietet Inhaberinnen und Inhabern von Covid-Zertifikaten die Möglichkeit, eine datenminimierte Zertifikatskopie zur Nutzung in der Schweiz zu generieren. Das «Zertifikat Light» bestätigt das Vorliegen eines gültigen Covid-Zertifikats, ohne selbst Gesundheitsdaten zu enthalten. \n\nDiese datenminimierte Alternative zum Covid-Zertifikat wurde auf Wunsch des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (EDÖB) entwickelt, da Covid-Zertifikategewisse Gesundheitsdaten wie beispielsweise Impfstoff oder Datum der Impfung enthalten, die auch ausgelesen werden können. Mittels dem «Zertifikat Light» wird dies verhindert.\n\nDas «Zertifikat Light» ist lediglich elektronisch innerhalb der App verfügbar und wird nur in der Schweiz anerkannt. Aus Datenschutzgründen hat das «Zertifikat Light» eine maximale Gültigkeitsdauer von 24 Stunden und muss danach erneut aktiviert werden. Wird das normale Zertifikat vor Ablauf der 24 Stunden benötigt, kann das «Zertifikat Light» einfach deaktiviert werden.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "What are COVID certificates?",
"faqSubTitle": "The COVID certificate makes it possible to document a COVID-19 vaccination, recovery from the virus or a negative test result in a forgery-proof manner.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "When and where can I get a COVID certificate?",
"text": "You can get a COVID certificate after a COVID-19 vaccination, after you have recovered from the virus, or after you have tested negative. The certificate is generally issued upon request by health care professionals on site.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How do I get a COVID certificate after I have recovered from COVID-19?",
"text": "Depending on the canton, the COVID certificate will, in some cases, be sent to you directly by the test centre or by the laboratory that determined your positive test result. If this is not the case, you can subsequently apply online for a COVID certificate via the “National COVID certificate application platform”. The application will be processed there by the competent cantonal authority. You will find the “National COVID certificate application platform” here:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "National COVID certificate application platform",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "How can I present a COVID certificate?",
"text": "You can present your COVID certificate in paper form, or you can use the COVID Certificate app to save certificates in the dedicated app and present them directly from the app.\n\nPlease note that you will also need to show an identification document (passport or ID card) in either case. A number of countries require a printed version of the certificate and will not accept the electronic certificate. You should therefore always take the printed version with you when travelling.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How long is the COVID certificate valid?",
"text": "In Switzerland, the requirement for a certificate was lifted in February 2022. Since then, the Swiss validity periods have existed only in formal terms and no longer have any significance in practice in Switzerland. Abroad, the validity rules of the country in question apply. Shortly before departing you should check the authorities’ website for your transit or destination country to see whether certificate-based measures are still in force and, if so, which validity periods apply for your destination country. Helpful website for travel abroad:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/en/"
},
{
"title": "Where is my data stored?",
"text": "Your certificate data is not stored in a central government system, but only locally on your mobile device or on the paper COVID certificate.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How are misuse and forgery prevented?",
"text": "The COVID certificate QR code contains an electronic signature. This is an important security feature and makes the COVID certificate forgery-proof. Moreover, the COVID certificate is valid only in combination with an identification document (passport or ID card).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What happens if I lose my COVID certificate?",
"text": "Your COVID certificate is not stored in any central government system. Therefore, keep your paper and/or PDF COVID certificate in a safe place. If you lose your certificate and need to replace it, a fee may be charged for its reissue by a health care facility (e.g. the test or vaccination centre).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What is the 'certificate light'",
"text": "The COVID Certificate app offers holders of COVID certificates the possibility of generating a copy of the certificate with minimised data. The 'certificate light' confirms that the holder has a valid COVID certificate but does not itself contain any health-related data. \n\nThis alternative to the COVID certificate which contains minimised data was developed at the wish of the Federal Data Protection and Information Commissioner (FDPIC) as COVID certificates contain certain health-related data such as the vaccine administered or the date of vaccination, which can also be seen. The 'certificate light' prevents this.\n\nThe 'certificate light' is only available electronically in the app and is only recognised in Switzerland. For data protection reasons, the 'certificate light' is only valid for 24 hours and must then be reactivated. If you need to use the normal certificate before the end of the 24-hour period, you can simply deactivate the 'certificate light'.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Le certificat COVID en bref",
"faqSubTitle": "Le certificat COVID atteste de manière infalsifiable une vaccination contre le COVID-19, une guérison ou un résultat de test négatif.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Quand et où puis-je obtenir un certificat COVID?",
"text": "Vous pouvez obtenir le certificat COVID si vous êtes vaccinés contre le COVID-19, si vous avez guéri de la maladie ou si vous présentez un résultat de test négatif. En général, le certificat est délivré sur demande, par les professionnels de la santé présents sur le site.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Comment puis-je obtenir un certificat COVID après avoir guéri?",
"text": "En fonction de votre canton, le certificat COVID vous sera délivré soit directement par le lieu de test soit par le laboratoire qui a confirmé votre résultat de test positif. Si tel n’est pas le cas, vous pouvez demander votre certificat après coup, en ligne via la « Plateforme nationale des demandes pour le certificat COVID ». Votre demande y sera traitée par les autorités cantonales compétentes. Lien :",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Plateforme nationale de demandes pour le certificat COVID",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "Par quel moyen puis-je présenter un certificat COVID?",
"text": "Vous pouvez présenter votre certificat COVID sur papier ou au moyen de l’app de stockage créée à cet effet. Vous êtes libre de choisir l’une ou l’autre solution.\n\nDans tous les cas, vous devez aussi présenter une pièce d’identité sur demande. Dans certains pays, une version imprimée du certificat est exigée, et le certificat électronique n’est pas accepté. Nous vous conseillons donc de vous munir de la version imprimée lorsque vous voyagez.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quelle est la durée de validité du certificat COVID ?",
"text": "En Suisse, l’obligation de présenter un certificat a été levée en février 2022. Les durées de validité suisses sont donc devenues uniquement formelles et n’ont pratiquement plus aucune pertinence dans notre pays. À l’étranger, les règles de validité du pays concerné s’appliquent. Vérifiez peu avant votre départ sur le site Internet des autorités de votre pays de transit ou de destination si des mesures impliquant l’utilisation d’un certificat y sont appliquées et si c’est le cas, quelles règles de validité y sont appliquées. Site Internet utile pour les voyages à l’étranger :",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/fr/"
},
{
"title": "Où mes données sont-elles stockées?",
"text": "Les données de votre certificat ne sont pas stockées dans un système central de la Confédération, mais sont sauvegardées localement, sur votre appareil mobile ou sur le certificat papier.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Comment prévient-on les abus et les falsifications?",
"text": "Le code QR figurant sur le certificat COVID contient une signature électronique. Celle-ci est une caractéristique de sécurité importante qui rend le certificat infalsifiable. En outre, le certificat COVID n'est valable que sur présentation d'une pièce d'identité.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Et si je perds mon certificat COVID?",
"text": "Votre certificat COVID n'est pas stocké dans un système central de la Confédération. Par conséquent, nous vous recommandons de le conserver sur papier ou au format PDF dans un endroit sûr. En cas de perte ou de remplacement, le paiement d’un émolument peut être exigé pour l’établissement d’un nouveau document par les institutions sanitaires (lieu de test ou de vaccination).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Qu’est-ce que le certificat light ?",
"text": "L’application « COVID Certificate » propose aux titulaires de certificats COVID la possibilité de générer une copie du certificat ne contenant que les données strictement nécessaires. Le certificat « light » confirme que le certificat présenté est valide, sans contenir lui-même des données sur la santé.\n\nCette alternative permettant de limiter les données du certificat COVID au strict minimum a été suggérée par le Préposé fédéral à la protection des données et à la transparence (PFPDT) ; en effet, les certificats COVID contiennent certaines données sur la santé (p. ex. le type de vaccin et la date de la vaccination) qui peuvent être lues par des tiers. Le certificat « light » empêche tout abus de ce genre.\n\nLe certificat light, reconnu uniquement en Suisse, n’est disponible que sous forme électronique. Pour des raisons de protection des données, il n’est valide que pendant 24 heures et doit ensuite être réactivé. Si le certificat normal est à nouveau nécessaire avant la fin de ce délai, il suffit de désactiver le certificat light.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Cos'è il certificato COVID?",
"faqSubTitle": "Il certificato COVID offre la possibilità di provare in modo non falsificabile l'avvenuta vaccinazione, la guarigione o un risultato negativo al test.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Quando e dove posso ottenere un certificato COVID?",
"text": "Può ricevere un certificato COVID in seguito alla vaccinazione anti-COVID-19, all'avvenuta guarigione o a un risultato negativo al test. Normalmente, il certificato è rilasciato su richiesta dal personale medico specializzato presso le strutture sanitarie.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Come posso ottenere un certificato COVID dopo essere guarito?",
"text": "A seconda del Cantone, il certificato COVID viene rilasciato in parte direttamente dalla struttura che ha effettuato il test o dal laboratorio in cui è stato accertato il risultato positivo al test. Qualora così non fosse, può richiedere a posteriori online un certificato COVID tramite il sito web dell’«organo nazionale per la richiesta di certificati COVID». La richiesta sarà evasa in tale sede dall’autorità cantonale competente. Il sito web dell’«organo nazionale per la richiesta di certificati COVID» si trova qui:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Organo nazionale per la richiesta di certificati COVID",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "Come posso mostrare il certificato COVID?",
"text": "Può mostrare il Suo certificato COVID in formato cartaceo oppure salvarlo e presentarlo utilizzando l’app «COVID Certificate». \nIn entrambi i casi, dovrà mostrare anche un documento di legittimazione.\nIn alcuni Paesi si richiede la versione cartacea del certificato e non si accetta quello elettronico. Porti quindi sempre con sé anche la versione cartacea quando viaggia.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Fino a quando è valido il certificato COVID?",
"text": "In Svizzera l’obbligo di certificato è stato revocato nel febbraio 2022. Da allora, la durata di validità svizzera esiste solo formalmente e non ha più alcun valore pratico nel nostro Paese. All’estero si applicano le regole di validità del rispettivo Paese. Pertanto, prima di partire, si informi consultando il sito web delle autorità del Paese di transito o di destinazione se nel Paese vigono ancora misure relative al certificato e, in caso affermativo, qual è la loro durata di validità. Sito web utile per viaggi all’estero:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/it/"
},
{
"title": "Dove vengono salvati i miei dati?",
"text": "I dati del Suo certificato non vengono salvati in un sistema centrale della Confederazione, ma si trovano solo localmente sul Suo dispositivo mobile, rispettivamente sul certificato COVID in formato cartaceo.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Come vengono impediti l'uso improprio e le falsificazioni?",
"text": "Il codice QR sul certificato COVID contiene una firma elettronica. Questa firma è un elemento di sicurezza importante e garantisce che il certificato non possa essere falsificato. Inoltre, il certificato COVID è valido solo con un documento di legittimazione.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cosa succede se perdo il mio certificato COVID su carta?",
"text": "Il Suo certificato COVID non è salvato su un sistema centrale della Confederazione Conservi quindi con cura il certificato COVID su carta e/o in formato PDF. In caso di smarrimento e sostituzione, per il nuovo rilascio da parte delle strutture sanitarie (p. es. la struttura in cui è stato effettuato il test o è stata somministrata la vaccinazione) potrà essere riscosso un emolumento.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Che cos'è il certificato light?",
"text": "L’app «COVID Certificate» offre ai possessori di certificati COVID la possibilità di generare una copia del certificato con dati ridotti al minimo da utilizzare in Svizzera. Il certificato light conferma l’esistenza di un certificato valido, senza contenere dati sanitari.\n\nQuesto certificato con dati ridotti al minimo è un’alternativa al certificato COVID ed è stato sviluppato su richiesta dell’Incaricato federale della protezione dei dati e della trasparenza (IFPDT), poiché i certificati COVID contengono determinati dati sanitari, come per esempio il vaccino somministrato o la data della vaccinazione, che possono anche essere visualizzati e dunque letti. Ciò può essere evitato mediante il certificato light.\n\nIl certificato light è disponibile unicamente in versione elettronica nell’app ed è riconosciuto solo in Svizzera. Per motivi legati alla protezione dei dati, il certificato light ha una validità massima di 24 ore e in seguito deve essere riattivato. Se si necessita del certificato normale prima che siano trascorse le 24 ore, il certificato light può essere disattivato semplicemente.\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Tge è il certificat COVID?",
"faqSubTitle": "Il certificat COVID permetta da documentar – en moda nunfalsifitgabla – ina vaccinaziun cunter COVID-19, ina infecziun u in resultat negativ dal test.",
"faqIntroSections": null,
"faqIconIos": "ic-faq-image",
"faqIconAndroid": "ic_faq_image",
"faqEntries": [
{
"title": "Cura e co obtegn jau in certificat COVID?",
"text": "In certificat COVID survegnis Vus suenter ina vaccinaziun cumpletta cunter COVID-19, suenter ina infecziun u suenter in resultat negativ dal test. Il certificat vegn per il solit emess – sin dumonda – dal persunal spezialisà da sanadad al lieu. ",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Co obtegn jau in certificat COVID suenter ina infecziun cun COVID-19?",
"text": "Tut tenor il chantun vegn il certificat COVID per part emess directamain dal post da test u dal labor, nua che Voss test positiv è vegnì constatà. Sche quai n'è betg il cas, pudais Vus dumandar pli tard online in certificat COVID sur la pagina d'internet da la «Plattafurma naziunala da dumondas per il certificat COVID». Là vegn la dumonda elavurada da l'autoritad chantunala cumpetenta. La pagina d'internet da la «Plattafurma naziunala da dumondas per il certificat COVID» chattais Vus qua:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Plattafurma naziunala da dumondas per il certificat COVID (admin.ch)",
"linkUrl": "https://covidcertificate-form.admin.ch/immunityrequest"
},
{
"title": "Co poss jau preschentar in certificat COVID?",
"text": "Vus pudais preschentar Voss certificat COVID sin palpiri u sur l'app «COVID Certificate». L'app permetta d'arcunar certificats e d'als preschentar directamain sin il telefonin. \nResguardai per plaschair che Vus stuais en mintga cas preschentar er anc in document da legitimaziun.\nEn intgins pajais vegn pretendida ina versiun stampada dal certificat ed il certificat electronic na vegn betg acceptà. Sin viadis duessas Vus perquai adina avair cun Vus er la versiun stampada.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quant ditg è il certificat COVID valaivel?",
"text": "En Svizra è l'obligatori dal certificat vegnì abolì il favrer 2022. Las duradas da valaivladad svizras existan dapi lura mo anc formalmain e n'han praticamain nagina impurtanza pli en Svizra. A l'exteriur valan mintgamai las reglas da valaivladad dal pajais respectiv. As infurmai curt avant Vossa partenza sur la pagina d'internet da las autoritads da Voss pajais da transit u da destinaziun, sch'i valan en il pajais anc mesiras sin basa dal certificat, e sche gea, tge duradas da valaivladad che Voss pajais da destinaziun ha fixà. Pagina d'internet utila per viadis a l'exteriur:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Re-open EU (europa.eu)",
"linkUrl": "https://reopen.europa.eu/de"
},
{
"title": "Nua vegnan arcunadas mias datas?",
"text": "Las datas da Voss certificat na vegnan betg arcunadas en in sistem central da la Confederaziun, mabain mo localmain sin Voss telefonin resp. sin il certificat COVID sin palpiri.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Co vegnan impedids abus e falsificaziuns?",
"text": "Il code QR sin Voss certificat COVID cuntegna ina signatura digitala. La signatura è ina impurtanta caracteristica da segirezza che impedescha da falsifitgar il certificat COVID. Il certificat COVID è ultra da quai valaivel mo en cumbinaziun cun in document da legitimaziun.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge capita, sche jau perd mes certificat COVID?",
"text": "Voss certificat COVID na vegn betg arcunà en in sistem central da la Confederaziun. Tegnai perquai en salv cun quità il certificat COVID sin palpiri e/u sco PDF. Sche Vus avais pers il certificat u sche Vus duvrais in certificat substitutiv, po l'instituziun da sanadad (p.ex. il post da test u da vaccinaziun) pretender ina taxa per emetter in nov certificat.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge è in certificat light?",
"text": "L'app «COVID Certificate» permetta a las possessuras ed als possessurs da certificats COVID da generar ina copia dal certificat COVID che cuntegna ina quantitad minimala da datas. Il «certificat light» conferma ch'igl è avant maun in certificat COVID valaivel, na cuntegna però naginas datas da sanadad. \n\nQuest certificat cun ina quantitad minimala da datas è vegnì sviluppà sco alternativa al certificat COVID sin giavisch da l'Incumbensà federal per la protecziun da datas e per la transparenza (IFPDT), perquai ch'ils certificats COVID cuntegnan tschertas datas da sanadad ch'èn visiblas, sco per exempel il vaccin u la data da la vaccinaziun. Cun agid dal «certificat light» vegn quai impedì.\n\nIl «certificat light» è disponibel mo en moda electronica entaifer l'app e vegn renconuschì mo en Svizra. Per motivs da la protecziun da datas ha il «certificat light» ina durada da valaivladad maximala da 24 uras e sto alura vegnir activà danovamain. Sch'il certificat normal vegn duvrà avant che las 24 uras èn passadas, po il «certificat light» simplamain vegnir deactivà.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"works": {
"de": {
"faqTitle": "Wie funktioniert \ndie App?",
"faqSubTitle": "Mit der COVID Certificate App können Sie Covid-Zertifikate einfach und sicher auf Ihrem Mobilgerät abspeichern und vorweisen.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "Wie kann ich ein Covid-Zertifikat zur App hinzufügen?",
"text": "Um ein Covid-Zertifikat zur App hinzuzufügen, benötigen Sie das Ihnen ausgestellte Originalzertifikat auf Papier oder als PDF-Dokument. Den darauf abgebildeten QR-Code können Sie mit der COVID Certificate App scannen und hinzufügen. Anschliessend erscheint das Covid-Zertifikat direkt in der App.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Können auch mehrere Covid-Zertifikate hinzugefügt werden?",
"text": "Ja das ist möglich. So können Sie z. B. alle Covid-Zertifikate von Familienangehörigen in Ihrer App speichern. Auch in diesem Fall gilt: Das Covid-Zertifikat ist nur in Kombination mit einem Ausweisdokument des Zertifikatsinhabers / der Zertifikatsinhaberin gültig.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was ist ein Transfer-Code?",
"text": "Mit Transfer-Codes können Covid-Zertifikate schnell und sicher übermittelt werden. Auf diesem Weg erhalten Sie das Covid-Zertifikat, z. B. nach einem Covid-Test, direkt in die App geliefert.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wo sehe ich, ob mein Covid-Zertifikat gültig ist?",
"text": "Die Zertifikatspflicht in der Schweiz wurde im Februar 2022 aufgehoben. Die Schweizer Gültigkeitsdauern bestehen seitdem nur noch formal und haben praktisch im Inland keine Bedeutung mehr. Deshalb wird in der App das Feld «Gültigkeit in der Schweiz» nicht mehr dargestellt. Stattdessen zeigt sie den Zeitpunkt der Impfung bzw. des Tests an. \n\nEs wird auch angezeigt, wie viele Tage eine Impfung bzw. ein Test her ist. So können Sie einfacher feststellen, ob Ihr Zertifikat den Gültigkeitsregeln Ihres Ziellandes entspricht (falls das Land noch ein Covid-Zertifikat voraussetzt). Im Ausland gelten immer die Regeln des entsprechenden Landes.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Kann ich die App auch offline verwenden?",
"text": "Sie können die App ohne eine Internetverbindung verwenden. Auch im Offline-Modus können Zertifikate vorgewiesen und von den Prüfern gescannt und verifiziert werden.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Wie sind meine Daten geschützt?",
"text": "Ihre persönlichen Daten werden in keinem zentralen System gespeichert, sondern befinden sich ausschliesslich bei Ihnen lokal auf dem Mobilgerät, respektive im QR-Code auf dem Covid-Zertifikat in Papierform.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Welche Daten sind im QR-Code enthalten?",
"text": "Der QR-Code enthält alle Informationen, die Sie auf Ihrem Covid-Zertifikat in Papierform im Klartext finden. Weiter befindet sich im QR-Code eine elektronische Signatur, mit der sich die Echtheit des Covid-Zertifikats überprüfen lässt. Dadurch wird das Covid-Zertifikat fälschungssicher.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Ich habe das Covid-Zertifikat ausschliesslich elektronisch in der App. Wie komme ich zum Zertifikat als PDF oder auf Papier?",
"text": "In der «COVID Certificate»-App finden Sie in der Detailansicht des elektronischen Covid-Zertifikats die Funktion «Exportieren». Damit können Sie ein PDF erstellen, dieses speichern und ausdrucken.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was muss ich tun, wenn ich das Covid-Zertifikat oder die App lösche?",
"text": "Sie können Ihr Covid-Zertifikat einfach wieder auf Ihrem Mobilgerät speichern. Laden Sie dazu die App erneut herunter und scannen Sie anschliessend den QR-Code auf Ihrem Covid-Zertifikat auf Papier oder als PDF.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "How the app works",
"faqSubTitle": "With the COVID Certificate app, you can easily and securely store and present COVID certificates on your mobile device.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "How can I add a COVID certificate to the app?",
"text": "To add a COVID certificate to the app, you need the original certificate issued to you on paper or as a PDF document. You can use the COVID certificate app to scan the QR code on the original and add it to the app. The COVID certificate will then appear directly in the app.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Can several COVID certificates be added?",
"text": "Yes, that is possible. For example, you can save the COVID certificates of all family members in your app. Also in this case, each COVID certificate is valid only in combination with an identification document (passport or ID card) of the certificate holder.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What is a transfer code?",
"text": "The transfer codes allow COVID certificates to be transmitted quickly and securely. In this way, you receive your certificate (e.g. after a test) directly in the application.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Where can I see if my COVID certificate is valid?",
"text": "In Switzerland, the requirement for a certificate was lifted in February 2022. Since then, the Swiss validity periods have existed only in formal terms and no longer have any significance in practice in Switzerland. The “Validity in Switzerland” section is thus no longer displayed in the app. Instead, the time of the vaccination or test is shown. \n\nThe number of days that have elapsed since a vaccination or test is also shown. This makes it easier for you to determine whether your certificate complies with the validity rules of your destination country (if the country in question still requires a COVID certificate). When abroad, it is always the rules of the country in question that apply.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Can I use the app offline?",
"text": "You can use the app without an internet connection, so you can still call up your certificates and present them for scanning and verification.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "How is my data protected?",
"text": "Your personal data is not stored in a central system; instead, it can be found solely locally on the mobile device or in the QR code in the case of the paper COVID certificate.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What data is contained in the QR code?",
"text": "The QR code contains all the information that is found in plain text on your paper COVID certificate. The QR code also contains an electronic signature that can be used to check the authenticity of the COVID certificate. This makes the COVID certificate forgery-proof.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "I only have my COVID certificate electronically in the app. How can I get the certificate as a PDF or on paper?",
"text": "In the detailed view of the electronic COVID certificate in the COVID Certificate app you’ll find the Export function. You can use this to generate, save and print a PDF",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What do I need to do if I delete the COVID certificate or the app?",
"text": "You can easily restore your COVID certificate on your mobile device. To do so, download the app again and then scan the QR code on your paper or PDF COVID certificate.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Comment l'app \nfonctionne-t-elle?",
"faqSubTitle": "L'app vous permet de stocker des certificats COVID de manière simple et sûre sur votre appareil mobile et de les présenter au moyen de ce dernier.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "Comment ajouter un certificat COVID à l'app?",
"text": "Pour ajouter un certificat COVID à l'app, vous avez besoin du certificat original qui vous a été délivré sur papier ou par voie électronique, au format PDF. Au moyen de l'app, vous pouvez scanner le code QR figurant sur ce document. Ensuite, le certificat COVID apparaît directement dans l'app.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Puis-je ajouter plusieurs certificats COVID?",
"text": "Oui. Vous pouvez par exemple stocker dans l'app les certificats COVID de tous les membres de votre famille. À noter également dans ce cas qu'un certificat COVID n'est valable que si son détenteur présente une pièce d'identité.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Qu'est-ce qu'un code de transfert ?",
"text": "Les codes de transfert permettent de transmettre les certificats COVID rapidement et en toute sécurité. De cette façon, vous recevez votre certificat (p. ex. après un test) directement dans l’application.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Où voir si mon certificat COVID est valable ?",
"text": "En Suisse, l’obligation de présenter un certificat a été levée en février 2022. Les durées de validité suisses sont donc devenues uniquement formelles et n’ont pratiquement plus aucune pertinence dans notre pays. C’est pourquoi le champ « Validité en Suisse » n’est plus représenté dans l’application, qui indique par contre le nombre de jours écoulés depuis une vaccination ou un test. \n\nL’application indique aussi le nombre de jours écoulés depuis une vaccination ou un test. Vous pouvez ainsi vérifier plus facilement si votre certificat correspond aux règles de validité de votre pays de destination (au cas où ce pays exige encore un certificat COVID). À l’étranger, les règles en vigueur varient d’un pays à l’autre.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Puis-je également utiliser l’application hors ligne ?",
"text": "Oui, vous pouvez utiliser l’application sans connexion Internet. Les certificats peuvent aussi être présentés, scannés et vérifiés en mode hors ligne.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Comment mes données sont-elles protégées?",
"text": "Vos données personnelles ne sont pas stockées dans un système central, mais ne sont sauvegardées que localement, sur votre appareil mobile ou dans le code QR figurant sur le certificat papier.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Que contient le code QR?",
"text": "Le code QR contient toutes les informations qui apparaissent en clair sur le certificat papier. En outre, il renferme une signature électronique qui permet de vérifier l'authenticité du certificat COVID. Par conséquent, le certificat COVID est infalsifiable.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Mon certificat COVID n’est disponible qu’au format électronique dans l’application. Comment puis-je obtenir mon certificat en PDF ou sur papier ?",
"text": "Dans l’application « COVID Certificate », vous trouvez la fonction « Exporter » dans la vue détaillée du certificat. Vous pouvez ainsi générer un PDF afin de le sauvegarder et de l’imprimer.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Et si je supprime le certificat COVID ou l'app?",
"text": "Vous pouvez réenregistrer facilement votre certificat COVID sur votre appareil mobile. Il vous suffit de télécharger de nouveau l'app, puis de scanner le code QR figurant sur le certificat original, établi sur papier ou au format PDF.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Come funziona \nl'app?",
"faqSubTitle": "Con l'app COVID Certificate può salvare e mostrare i certificati COVID in modo semplice e sicuro sul Suo dispositivo mobile.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "Come posso inserire un certificato COVID sulla app?",
"text": "Per inserire sull'app un certificato COVID serve il certificato originale rilasciatole su carta o in formato PDF. Utilizzando l'app COVID Certificate può aggiungere il certificato inquadrando il codice QR raffigurato sul certificato. In questo modo, il certificato COVID appare direttamente sull'app.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "È possibile aggiungere più certificati COVID?",
"text": "Sì, è possibile. Ad esempio, può salvare nella Sua app i certificati COVID dei suoi familiari. Anche in questo caso, il certificato COVID è valido solo con un documento di legittimazione del titolare.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cos'è un codice di trasferimento?",
"text": "Con i codici di trasferimento i certificati COVID possono essere trasmessi in modo rapido e sicuro. Tramite questo canale puoi ricevere il certificato COVID direttamente nell’app, ad esempio dopo aver fatto un test COVID.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Dove posso verificare se il mio certificato COVID è valido?",
"text": "In Svizzera l’obbligo di certificato è stato revocato nel febbraio 2022. Da allora, la durata di validità svizzera esiste solo formalmente e non ha più alcun valore pratico nel nostro Paese. Pertanto il campo «Validità in Svizzera» non è più visualizzato nell’app. Al suo posto si trova la data della vaccinazione o del test.\n\nViene anche visualizzato quanti giorni sono trascorsi da una vaccinazione o da un test. In tal modo può determinare più facilmente se il Suo certificato è conforme alle regole di validità del Paese di destinazione (qualora il Paese richiedesse ancora un certificato COVID). All’estero si applicano sempre le regole di validità del rispettivo Paese.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Posso utilizzare l’app anche offline?",
"text": "È possibile utilizzare l’app senza connessione Internet. I certificati possono essere presentati, nonché scansionati e verificati dagli addetti anche in modalità offline.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Come sono protetti i miei dati?",
"text": "I Suoi dati personali non sono salvati in un sistema centrale ma unicamente sul Suo dispositivo mobile oppure nel codice QR indicato sul certificato COVID in formato cartaceo.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Quali dati contiene il codice QR?",
"text": "Il codice QR contiene tutte le informazioni che trova nel testo del Suo certificato COVID in formato cartaceo. Nel codice QR si trova anche una firma elettronica che consente di verificare la validità del certificato COVID. La firma elettronica impedisce la falsificazione del certificato COVID.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Ho il certificato COVID esclusivamente in formato elettronico nell’app. Come posso ottenerne uno in formato PDF o cartaceo?",
"text": "Nella vista di dettaglio del certificato COVID elettronico dell’app «COVID Certificate» è disponibile la funzione «Esporta», con la quale è possibile creare un PDF, salvarlo e stamparlo.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cosa devo fare se elimino il file contenente il certificato COVID o l'app?",
"text": "Può semplicemente risalvare il certificato COVID sul Suo dispositivo mobile. Per farlo, scarichi nuovamente l'app e poi scansioni il codice QR che trova sul Suo certificato COVID in formato cartaceo o PDF.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Co funcziuna \nl'app?",
"faqSubTitle": "Cun l'app COVID Certificate pudais Vus arcunar e preschentar en moda simpla e segira certificats COVID sin Voss telefonin.",
"faqIntroSections": null,
"faqIconIos": "ic-how-it-works-image",
"faqIconAndroid": "illu_how_it_works",
"faqEntries": [
{
"title": "Co poss jau agiuntar in certificat COVID a l'app?",
"text": "Per agiuntar in certificat COVID a l'app, duvrais Vus il certificat original ch'è vegnì emess per Vus sin palpiri u en furma da PDF. Cun l'app COVID Certificate pudais Vus alura scannar il code QR sin il certificat ed al agiuntar a l'app. Silsuenter cumpara il certificat COVID directamain en l'app.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Pon vegnir agiuntads er plirs certificats COVID?",
"text": "Gea, quai è pussaivel. Vus pudais p.ex. arcunar en Vossa app ils certificats COVID da tut Vossas confamigliaras e da tut Voss confamigliars. Er en quest cas vala: Il certificat COVID è valaivel mo en cumbinaziun cun in document da legitimaziun da la possessura u dal possessur dal certificat.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge è in code da transfer?",
"text": "Cun ils codes da transfer pon ils certificats COVID vegnir transmess en moda svelta e segira. Sin questa via vegn il certificat COVID furnì directamain en l'app, p.ex. suenter in test dal coronavirus.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Nua ves jau, sche mes certificat COVID è valaivel?",
"text": "En Svizra è l'obligatori dal certificat vegnì abolì il favrer 2022. Las duradas da valaivladad svizras existan dapi lura mo anc formalmain e n'han praticamain nagina impurtanza pli en Svizra. Sin il certificat COVID na vegn perquai betg pli mussà il champ «Valaivladad en Svizra». Empè da quai mussa l'app la data da la vaccinaziun resp. dal test. \n\nI vegn er mussà, avant quants dis ch'igl è vegnì fatg ina vaccinaziun resp. in test. Uschia èsi pli facil per Vus da constatar, sche Voss certificat correspunda a las reglas da valaivladad da Voss pajais da destinaziun (premess ch'il pajais pretenda anc in certificat Covid). A l'exteriur valan adina las reglas dal pajais respectiv. ",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Poss jau er duvrar l'app offline?",
"text": "Vus pudais duvrar l'app senza ina colliaziun cun l'internet. Er en il modus offline pon ils certificats vegnir preschentads sco er scannads e verifitgads da las controlladras e dals controlladers.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Co vegnan protegidas mias datas?",
"text": "Vossas datas persunalas na vegnan betg arcunadas en in sistem central, mabain mo localmain sin Voss telefonin resp. en il code QR sin Voss certificat COVID en furma da palpiri.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge datas cuntegna il code QR?",
"text": "Il code QR cuntegna tut las infurmaziuns che Vus chattais sin Voss certificat COVID en furma da palpiri en text betg criptà. Plinavant sa chatta ina signatura digitala en il code QR. Cun quella po vegnir verifitgada l'autenticitad da Voss certificat COVID. Uschia na po il certificat COVID betg vegnir falsifitgà.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Jau hai il certificat COVID mo en moda digitala en l'app. Co survegn jau il certificat sco PDF u sin palpiri?",
"text": "En la vista detagliada dal certificat COVID digital en l'app «COVID Certificate» chattais Vus la funcziun «Exportar». Uschia pudais Vus generar in PDF, l'arcunar ed al stampar.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge stoss jau far, sche jau stiz il certificat COVID u l'app?",
"text": "Vus pudais simplamain arcunar anc ina giada il certificat COVID sin Voss telefonin. Chargiai giu danovamain l’app e scannai alura il code QR sin Voss certificat COVID sin palpiri u en furma da PDF.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"androidTransferCheckIntervalMs": 7200000,
"androidTransferCheckBackoffMs": 30000,
"timeshiftDetectionEnabled": true,
"transferQuestions": {
"de": {
"faqTitle": "Covid-Zertifikate direkt in die App geliefert",
"faqSubTitle": "Mit Transfer-Codes können Covid-Zertifikate schnell und sicher übermittelt werden. Auf diesem Weg erhalten Sie das Covid-Zertifikat, z. B. nach einem Covid-Test, direkt in die App geliefert.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Wer bietet die Übermittlung per Transfer-Code an?",
"text": "Wenn Sie einen Covid-Test machen (PCR-Test oder Antigen-Schnelltest), kann der Transfer-Code zur schnellen Übermittlung von Covid-Zertifikaten zum Einsatz kommen.\n\nInformieren Sie sich bei Ihrem Testcenter, in der Apotheke oder bei Ihrem Arzt, ob die Übermittlung per Transfer-Code angeboten wird.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Können Transfer-Codes auch zur Übermittlung von Impfzertifikaten verwendet werden?",
"text": "Aktuell ist die Übermittlung per Transfer-Code auf Covid-Tests ausgelegt. Wie Sie ein Covid-Zertifikat nach einer Impfung erhalten erfahren Sie hier:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Weitere Informationen",
"linkUrl": "https://bag-coronavirus.ch/zertifikat/wie-erhalte-ich-ein-covid-zertifikat-und-wie-verwende-ich-es/"
},
{
"title": "Wie funktioniert die Übermittlung per Transfer-Code?",
"text": "Falls die Stelle, die den Covid-Test durchführt, die Übermittlung per Transfer-Code anbietet, werden Sie bereits bei der Anmeldung oder der Testentnahme nach einem Transfer-Code gefragt.\n\nDen Transfer-Code können Sie in der «COVID Certificate»-App erstellen. Tippen Sie dazu auf dem Startbildschirm auf «Hinzufügen» resp. auf das «Plus»-Symbol unten rechts. Danach tippen Sie auf «Transfer-Code erstellen».\n\nDie App zeigt Ihnen einen 9-stelligen Code an. Diesen können Sie entweder bei der Anmeldung in ein Formular eintragen oder direkt bei der Testentnahme angeben.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Kann ich den Transfer-Code mehrmals benutzen?",
"text": "Nein, ein Transfer-Code kann nur einmal verwendet werden. Falls Sie mehrere Zertifikate z. B. von Familienangehörigen empfangen möchten, erstellen Sie bitte für jedes Zertifikat einen neuen Code.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "Receive COVID certificates directly in the app",
"faqSubTitle": "The transfer codes allow COVID certificates to be transmitted quickly and securely. In this way, you receive your certificate (e.g. after a test) directly in the application.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Who offers the transmission of the COVID certificate by transfer code?",
"text": "If you perform a COVID test (PCR test or rapid antigen test), the transfer code can be used to quickly transmit the COVID certificate.\n\nAsk your test centre, pharmacy or doctor if this option is available.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Can the transfer codes also be used for the transmission of vaccination certificates?",
"text": "Currently, the transmission of the certificate by transfer code is reserved for COVID tests. To find out how to obtain a COVID certificate after vaccination, click here:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Further information",
"linkUrl": "https://foph-coronavirus.ch/certificate/how-do-i-get-a-covid-certificate-and-how-do-i-use-it/"
},
{
"title": "How does the transmission of the certificate by transfer code work?",
"text": "If the test centre offers to transmit the certificate by transfer code, you will be asked for a code at the time of registration or testing.\n\nYou can create the transfer code in the \"COVID Certificate\" application: press \"Add\" on the home screen or the \"More\" symbol at the bottom right, then \"Create a transfer code\".\n\nThe application will show you a 9-character code, which you can either enter in a form when you register or pass on directly during the test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Can I use the same transfer code more than once?",
"text": "No, a transfer code can only be used once. If you wish to obtain several certificates (e.g. for your relatives), please create a new code for each certificate.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Recevez les certificats COVID directement dans l'application",
"faqSubTitle": "Les codes de transfert permettent de transmettre les certificats COVID rapidement et en toute sécurité. De cette façon, vous recevez votre certificat (p. ex. après un test) directement dans l’application.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Qui propose la transmission du certificat COVID par code de transfert ?",
"text": "Si vous effectuez un test COVID (test PCR ou test rapide antigénique), le code de transfert peut être utilisé pour transmettre rapidement le certificat COVID.\n\nRenseignez-vous auprès de votre centre de test, de votre pharmacie ou de votre médecin pour savoir si cette option est proposée.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Les codes de transfert peuvent-ils aussi être utilisés pour la transmission de certificats de vaccination ?",
"text": "Actuellement, la transmission du certificat par code de transfert est réservée aux tests COVID. Pour savoir comment obtenir un certificat COVID après une vaccination, cliquez ici :",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Informations supplémentaires",
"linkUrl": "https://ofsp-coronavirus.ch/certificat/comment-obtenir-le-certificat-covid-et-comment-men-servir/"
},
{
"title": "Comment fonctionne la transmission du certificat par code de transfert ?",
"text": "Si le centre de test propose de transmettre le certificat par code de transfert, un code vous sera demandé au moment de l’inscription ou du test.\n\nVous pouvez créer le code de transfert dans l’application « COVID Certificate » : appuyez sur « Ajouter » sur l’écran d’accueil ou sur le symbole « Plus » en bas à droite, puis sur « Créer un code de transfert ».\n\nL’application vous montre un code à 9 caractères, que vous pouvez soit inscrire dans un formulaire lors de l’inscription, soit transmettre directement lors du test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Puis-je utiliser plusieurs fois le même code de transfert ?",
"text": "Non, un code de transfert ne peut être utilisé qu’une seule fois. Si vous souhaitez obtenir plusieurs certificats (p. ex. pour vos proches), veuillez créer un nouveau code pour chaque certificat.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Ricevere i certificati COVID direttamente nell’app",
"faqSubTitle": "Con i codici di trasferimento i certificati COVID possono essere trasmessi in modo rapido e sicuro. Tramite questo canale puoi ricevere il certificato COVID direttamente nell’app, ad esempio dopo aver fatto un test COVID.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Chi offre la trasmissione mediante codice di trasferimento?",
"text": "Quando fai un test COVID (test PCR o test antigenico rapido), è possibile impiegare il codice di trasferimento per la trasmissione rapida dei certificati COVID.\n\nChiedi al centro di test, alla farmacia o al medico se offrono la trasmissione mediante codice di trasferimento.\n\n",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "I codici di trasferimento possono essere impiegati anche per trasmettere i certificati di vaccinazione?",
"text": "Attualmente la trasmissione mediante codice di trasferimento funziona solo per i test COVID. Qui trovi maggiori informazioni su come ottenere un certificato COVID dopo una vaccinazione:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriori informazioni",
"linkUrl": "https://ufsp-coronavirus.ch/certificato/come-si-ottiene-il-certificato-covid-e-come-si-impiega/"
},
{
"title": "Come funziona la trasmissione mediante codice di trasferimento?",
"text": "Se il servizio che effettua il test COVID offre la trasmissione mediante codice di trasferimento, te ne chiede uno già al momento della prenotazione o dell’esecuzione del test.\n\nPuoi creare il codice di trasferimento nell’app «COVID Certificate» toccando il pulsante «Aggiungi» nella schermata iniziale o il simbolo «Più» in basso a destra. Poi tocca «Crea codice di trasferimento».\n\nL’app visualizza un codice a 9 cifre, che puoi inserire nel modulo di prenotazione o fornire direttamente al momento dell’esecuzione del test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Posso utilizzare lo stesso codice di trasferimento più volte?",
"text": "No, un codice di trasferimento può essere utilizzato una volta sola. Se desideri ricevere più di un certificato, per esempio i certificati dei tuoi familiari, crea un nuovo codice per ciascun certificato.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Certificats COVID furnids directamain en l'app",
"faqSubTitle": "Cun ils codes da transfer pon ils certificats COVID vegnir transmess en moda svelta e segira. Sin questa via vegn il certificat COVID furnì directamain en l'app, p.ex. suenter in test dal coronavirus.",
"faqIntroSections": null,
"faqIconIos": "illu-faq-transfer-code",
"faqIconAndroid": "illu_faq_transfer_code",
"faqEntries": [
{
"title": "Tgi porscha la transmissiun cun in code da transfer?",
"text": "Sche Vus faschais in test dal coronavirus (test da PCR u test svelt d'antigens), po il code da transfer vegnir en funcziun per transmetter sveltamain ils certificats COVID.\n\nAs infurmai tar Voss center da test, en l'apoteca u tar Vossa media u Voss medi, sche la transmissiun cun in code da transfer è pussaivla.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Pon ils codes da transfer vegnir duvrads er per transmetter certificats da vaccinaziun?",
"text": "Actualmain è la transmissiun cun in code da transfer concepì per tests dal coronavirus. Co che Vus survegnis in certificat COVID suenter ina vaccinaziun, vegnis Vus a savair qua:",
"iconAndroid": null,
"iconIos": null,
"linkTitle": "Ulteriuras infurmaziuns",
"linkUrl": "https://bag-coronavirus.ch/zertifikat/wie-erhalte-ich-ein-covid-zertifikat-und-wie-verwende-ich-es/"
},
{
"title": "Co funcziuna la transmissiun cun in code da transfer?",
"text": "En cas ch'il post che fa il test dal coronavirus porscha la transmissiun cun in code da transfer, vegnis Vus supplitgà d'inditgar Voss code da transfer gia tar l'annunzia u a chaschun da la prelevaziun dal test.\n\nIl code da transfer pudais Vus crear en l'app «COVID Certificate». Smatgai sin la pagina iniziala sin «Agiuntar» resp. sin il simbol «+» sutvart a dretga. Smatgai alura sin «Crear in code da transfer».\n\nL'app As mussa in code da 9 cifras. Quest code pudais Vus u endatar tar l'annunzia en in formular u inditgar directamain a chaschun da la prelevaziun dal test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Poss jau duvrar pliras giadas il medem code da transfer?",
"text": "Na, in code da transfer po vegnir duvrà mo ina giada. En cas che Vus vulais retschaiver plirs certificats, per exempel da confamigliaras u confamigliars, creai per plaschair per mintga certificat in nov code.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"transferWorks": {
"de": {
"faqTitle": "So funktioniert der Transfer",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "Die App prüft regelmässig, ob ein Covid-Zertifikat für Ihren Transfer-Code verfügbar ist."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "Sobald das Covid-Zertifikat verfügbar ist, erscheint es in der App. Wenn Sie Mitteilungen aktiviert haben, werden Sie von der App benachrichtigt."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "Nach 30 Tagen läuft der Transfer-Code ab. Danach wartet die App noch für weitere 72h auf einen möglichen Transfer, bevor der Transfer-Code ungültig wird."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "Wie sind meine Daten beim Transfer geschützt?",
"text": "Für den Transfer wird Ihr Covid-Zertifikat verschlüsselt bereitgestellt. Der Transfer-Code stellt sicher, dass nur Ihre App das Covid-Zertifikat empfangen kann. Unmittelbar nach dem Transfer werden die Daten wieder vom Server gelöscht.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was kann ich tun, wenn das Zertifikat nicht ankommt?",
"text": "Sobald das Zertifikat vom Labor oder Testcenter generiert wurde, steht es zum Transfer zur Verfügung. Stellen Sie sicher, dass Ihr Smartphone mit dem Internet verbunden ist, um Zertifikate empfangen zu können.\n\nSollte ihr Covid-Zertifikat dennoch nicht eintreffen, fragen Sie bei der Stelle nach, die den Test durchgeführt hat (Testcenter, Apotheke, Ärztin / Arzt).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Was passiert bei einem positiven Testresultat?",
"text": "Bei einem positiven Antigen-Schnelltest erhalten Sie vom Labor kein Covid-Zertifikat. \n\nBei einem positiven PCR-Test erhalten Sie ein Covid-Zertifikat für Genesene. Es ist ab dem 11. Tag nach der Testentnahme gültig.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"en": {
"faqTitle": "How does the transfer work?",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "The application regularly checks whether a COVID certificate is available for your transfer code."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "As soon as the COVID certificate is available, it appears in the application. If you have activated notifications, you will receive a message from the application."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "The transfer code expires after 30 days. After this period, the application waits for any further transfers for 72 hours. After that, the transfer code is no longer valid."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "How is my data secured during the transfer?",
"text": "For the transfer, your COVID certificate is delivered in encrypted form. The transfer code ensures that only your application can receive the certificate. The data is deleted from the server immediately after the transfer.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What if my certificate does not arrive in the application?",
"text": "Once the certificate has been generated by the laboratory or test centre, it is available for transfer. Make sure that your smartphone is connected to the Internet to receive certificates.\n\nIf you still do not receive your certificate, contact the place where you performed the test (centre, pharmacy, doctor's practice).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "What happens if I test positive?",
"text": "In case of a positive rapid antigen test, you will not receive a COVID certificate from the laboratory.\n\nIn case of a positive PCR test, you will receive a COVID certificate for cured persons, valid from the 11th day after the test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"fr": {
"faqTitle": "Comment fonctionne le transfert ?",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "L’application vérifie régulièrement si un certificat COVID est disponible pour votre code de transfert."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "Dès que le certificat COVID est disponible, il apparaît dans l’application. Si vous avez activé les notifications, vous recevrez un message de l’application."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "Le code de transfert expire après 30 jours. Une fois ce délai passé, l’application attend tout autre transfert pendant 72 h. Ensuite, le code de transfert n’est plus valable."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "Comment mes données sont-elles sécurisées lors du transfert ?",
"text": "Pour le transfert, votre certificat COVID est fourni sous forme cryptée. Le code de transfert garantit que seule votre application peut recevoir le certificat. Les données sont supprimées du serveur immédiatement après le transfert.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Que faire si mon certificat n’arrive pas dans l’application ?",
"text": "Dès que le certificat a été généré par le laboratoire ou le centre de test, il est disponible pour le transfert. Vérifiez que votre smartphone est connecté à Internet pour recevoir des certificats.\n\nSi malgré tout vous ne recevez pas votre certificat, adressez-vous au lieu où vous avez effectué le test (centre, pharmacie, cabinet médical).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Que se passe-t-il en cas de test positif ?",
"text": "En cas de test rapide antigénique positif, vous ne recevrez pas de certificat COVID du laboratoire.\n\nEn cas de test PCR positif, vous recevrez un certificat COVID pour personnes guéries, valable à partir du 11e jour suivant le test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"it": {
"faqTitle": "Il trasferimento funziona così",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "L’app verifica periodicamente se è disponibile un certificato COVID per il tuo codice di trasferimento."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "Non appena il certificato COVID è disponibile, viene visualizzato nell’app. Se hai attivato le notifiche, ne riceverai una dall’app."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "Il codice di trasferimento scade dopo 30 giorni. Poi l’app attende un eventuale trasferimento per altre 72 ore prima di considerare scaduto il codice."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "Come sono protetti i miei dati durante il trasferimento?",
"text": "Il tuo certificato COVID è messo a disposizione per il trasferimento in forma criptata. Il codice di trasferimento assicura che soltanto la tua app sia in grado di riceverlo. I dati sono eliminati dal server immediatamente dopo il trasferimento.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cosa posso fare se il certificato non arriva?",
"text": "Non appena il certificato è stato generato dal laboratorio o dal centro di test, è disponibile per il trasferimento. Accertati che il tuo smartphone sia connesso a Internet per poter ricevere i certificati.\n\nSe comunque non dovessi ricevere il tuo certificato COVID, rivolgiti al servizio che ha effettuato il test (centro di test, farmacia, medico).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Cosa accade in caso di risultato positivo del test?",
"text": "In caso di test antigenico positivo, non ricevi alcun certificato di test dal laboratorio. \n\nIn caso di test PCR positivo, ricevi un certificato COVID per persone guarite, valido a partire dall’undicesimo giorno dopo l’esecuzione del test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
},
"rm": {
"faqTitle": "Uschia funcziuna il transfer",
"faqSubTitle": null,
"faqIntroSections": [
{
"iconAndroid": "ic_one",
"iconIos": "ic-one",
"text": "L'app verifitgescha regularmain, schebain in certificat COVID è disponibel per Voss code da transfer."
},
{
"iconAndroid": "ic_two",
"iconIos": "ic-two",
"text": "Uschespert ch'il certificat COVID è disponibel, cumpara el en l'app. Sche Vus avais activà ils avis, vegnis Vus infurmada u infurmà da l'app."
},
{
"iconAndroid": "ic_three",
"iconIos": "ic-three",
"text": "Suenter 30 dis scada il code da transfer. Silsuenter spetga l'app anc ulteriuras 72 uras, avant ch'il code da transfer daventa nunvalaivel."
}
],
"faqIconIos": null,
"faqIconAndroid": null,
"faqEntries": [
{
"title": "Co vegnan protegidas mias datas tar il transfer?",
"text": "Per il transfer vegn Voss certificat COVID mess a disposiziun en moda codifitgada. Il code da transfer garantescha che mo Vossa app po retschaiver il certificat COVID. Las datas vegnan puspè stizzadas dal server immediatamain suenter il transfer.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge poss jau far, sch'il certificat n'arriva betg?",
"text": "Uschespert ch'il certificat è vegnì generà dal labor u dal center da test, stat el a disposiziun per il transfer. Guardai che Voss smartphone saja collià cun l'internet per pudair retschaiver certificats.\n\nEn cas che Voss certificat COVID n'arriva tuttina betg, As drizzai al post che ha fatg il test (center da test, apoteca, media u medi).",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
},
{
"title": "Tge capita en cas d'in test positiv?",
"text": "En cas d'in test svelt d'antigens positiv na survegnis Vus betg in certificat COVID dal labor.\n\nEn cas d'in test da PCR positiv survegnis Vus in certificat COVID per persunas guaridas. El è valaivel a partir dal 11. di suenter la prelevaziun dal test.",
"iconAndroid": null,
"iconIos": null,
"linkTitle": null,
"linkUrl": null
}
]
}
},
"lightCertificateActive": true,
"pdfGenerationActive": true,
"vaccinationHints": {
"de": [
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie unbeschwert in die meisten Länder reisen."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie sich vor Erkrankung und einem allfälligen schweren Verlauf schützen."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie auf sichere Art immun werden."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie mithelfen, die Krankheitslast zu reduzieren."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie helfen, die Auswirkungen der Pandemie zu bekämpfen."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie die Langzeitfolgen einer Covid-19-Erkrankung vermeiden."
},
{
"title": "Jetzt impfen lassen!",
"text": "Mit der Covid-19-Impfung können Sie dazu beitragen, das Gesundheitswesen zu entlasten."
}
],
"en": [
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means hassle-free travel to most countries. "
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means protection from infection and severe disease. "
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means immunity the safe way."
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means helping to reduce the disease burden. "
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means helping to control the impact of the pandemic. "
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means preventing long COVID."
},
{
"title": "Get vaccinated today!",
"text": "Being vaccinated against COVID-19 means helping to relieve the pressure on the health system."
}
],
"fr": [
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "La vaccination contre le COVID-19 vous permet de voyager sereinement dans la plupart des pays."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "La vaccination vous protège contre le COVID-19 et, le cas échéant, contre une évolution grave de la maladie."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "La vaccination contre le COVID-19 vous permet de vous immuniser en toute sécurité."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "Grâce à la vaccination contre le COVID-19, vous pouvez contribuer à réduire la charge de morbidité."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "Grâce à la vaccination contre le COVID-19, vous contribuez à la lutte contre les conséquences de la pandémie."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "La vaccination contre le COVID-19 vous permet d’éviter les effets à long terme de la maladie."
},
{
"title": "Faites-vous vacciner sans plus attendre !",
"text": "Grâce à la vaccination contre le COVID-19, vous pouvez contribuer à décharger le système de santé."
}
],
"it": [
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi viaggiare senza preoccupazioni nella maggior parte dei Paesi."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi proteggerti dalla malattia e da un eventuale decorso grave."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi immunizzarti in modo sicuro."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi contribuire a ridurre il carico di malattia."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi contribuire a combattere le ripercussioni della pandemia."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi evitare le conseguenze a lungo termine di una malattia COVID-19."
},
{
"title": "Fatti vaccinare ora!",
"text": "Con la vaccinazione anti-COVID-19 puoi contribuire a sgravare il sistema sanitario."
}
],
"rm": [
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus viagiar libramain en la gronda part dals pajais."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus As proteger cunter ina infecziun e cunter in eventual grev decurs da la malsogna."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus As immunisar en moda segira."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus gidar a reducir la chargia da la malsogna."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus gidar a cumbatter cunter las consequenzas da la pandemia."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus evitar las consequenzas da lunga durada d'ina infecziun cun COVID-19."
},
{
"title": "Sa laschar vaccinar ussa!",
"text": "Cun la vaccinaziun cunter COVID-19 pudais Vus gidar a distgargiar il sistem da sanadad."
}
]
},
"foreignRulesHints": {
"de": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "Für die Aktualität und Vollständigkeit der gegebenen Informationen übernimmt der Bund keine Haftung."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Die Einreiseregeln können sich ändern. Prüfen Sie daher die Gültigkeit kurz vor der Abreise und informieren Sie sich zusätzlich online über die aktuellen Einreiseregeln des Ziellandes."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "Die oben genannten Angaben beziehen sich nur auf die Einreiseregeln des Ziellandes. Für allfällige zertifikatspflichtige Bereiche innerhalb des Landes können andere Regeln gelten."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "Land nicht gefunden? Nicht alle Länder akzeptieren Covid-Zertifikate oder es wurden keine Einreiseregeln verfügbar gemacht."
}
],
"en": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "The federal government assumes no liability for the up-to-dateness or completeness of the information provided."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Entry rules can change. So check the validity shortly before you depart, and go online to make sure of the latest entry rules for your destination country."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "The above information relates only to the rules for entering your destination country. Different rules may apply to settings where a certificate is required within the country."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "Couldn’t find the country you were looking for? Not all countries accept COVID certificates; it might also be that no entry rules have been made available."
}
],
"fr": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "La Confédération décline toute responsabilité en ce qui concerne l’actualité et l’exhaustivité des informations fournies."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Les dispositions d’entrée peuvent changer. Vérifiez donc la validité de votre certificat avant votre départ et renseignez-vous également en ligne sur les dispositions d’entrée en vigueur dans votre pays de destination."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "Les informations ci-dessus ne concernent que les dispositions d’entrée du pays de destination. Dans le pays, d’autres règles peuvent s’appliquer aux éventuels domaines soumis à l’obligation de présenter un certificat."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "Vous n’avez pas trouvé votre pays de destination ? Il se peut que certains pays ne reconnaissent pas le certificat COVID ou qu’aucune disposition d’entrée ne soit disponible."
}
],
"it": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "La Confederazione non si assume la responsabilità per l’attualità e la completezza delle informazioni fornite."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Le disposizioni d’entrata possono cambiare. Verificate poco prima della partenza se il vostro certificato è valido e informatevi ulteriormente online sulle disposizioni d’entrata attuali del Paese di destinazione."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "Le informazioni sopra indicate si riferiscono solo alle disposizioni d’entrata del Paese di destinazione. Per eventuali settori soggetti all’obbligo di certificato all’interno del Paese possono vigere altre regole."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "Non avete trovato un Paese? Non tutti i Paesi accettano i certificati COVID o rendono disponibili le regole d’entrata."
}
],
"rm": [
{
"iconIos": "ic-info-outline",
"iconAndroid": "ic_info_outline",
"text": "Per l'actualitad e la cumplettadad da las infurmaziuns na surpiglia la Confederaziun nagina responsabladad."
},
{
"iconIos": "ic-timelapse",
"iconAndroid": "ic_timelapse",
"text": "Las reglas d'entrada pon sa midar. Verifitgai perquai la valaivladad curt avant che Vus partis ed As infurmai ultra da quai online davart las reglas d'entrada actualas dal pajais da destinaziun."
},
{
"iconIos": "ic-travel",
"iconAndroid": "ic_travel",
"text": "Las infurmaziuns qua survart sa refereschan mo a las reglas d'entrada dal pajais da destinaziun. Per secturs che pretendan eventualmain in certificat entaifer il pajais pon valair autras reglas."
},
{
"iconIos": "ic-question-outline",
"iconAndroid": "ic_question_outline",
"text": "N'avais Vus betg chattà Voss pajais da destinaziun? Betg tut ils pajais n'acceptan certificats COVID, u i n'èn vegnidas messas a disposiziun naginas infurmaziuns davart eventualas reglas d'entrada."
}
]
},
"foreignRulesLinkText": {
"de": "reopen.europa.eu",
"en": "reopen.europa.eu",
"fr": "reopen.europa.eu",
"it": "reopen.europa.eu",
"rm": "reopen.europa.eu"
},
"foreignRulesLinkUrl": {
"de": "https://reopen.europa.eu/",
"en": "https://reopen.europa.eu/",
"fr": "https://reopen.europa.eu/",
"it": "https://reopen.europa.eu/",
"rm": "https://reopen.europa.eu/"
},
"vaccinationBookingCantons": {
"de": [
{
"name": "Aargau",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzell Ausserrhoden",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzell Innerrhoden",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Basel-Landschaft",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.bl.ch/impfen"
},
{
"name": "Basel-Stadt",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Bern",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "http://www.be.ch/corona-impfung"
},
{
"name": "Freiburg",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/de/gesundheit/covid-19/covid-19-impfung-in-ihrer-naehe-durch-impfteams-in-den-impfzentren-in-der-apotheke-oder-bei-ihrem-arzt"
},
{
"name": "Genf",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/se-faire-vacciner-contre-covid-19"
},
{
"name": "Glarus",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Graubünden",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/DE/institutionen/verwaltung/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Jura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Luzern",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuenburg",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Nidwalden",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Obwalden",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "St. Gallen",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Schaffhausen",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Schwyz",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Solothurn",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Thurgau",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Tessin",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Wallis",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/de/web/coronavirus#ancre_vaccination"
},
{
"name": "Waadt",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zug",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/"
},
{
"name": "Zürich",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
],
"en": [
{
"name": "Aargau",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzell Ausserrhoden",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzell Innerrhoden",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Basel-Country",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/amt-fur-gesundheit/medizinische-dienste/kantonsarztlicher-dienst/aktuelles/corona-impfung/englisch-english"
},
{
"name": "Basel-City",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Berne",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "http://www.be.ch/corona-impfung"
},
{
"name": "Fribourg",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/sante/covid-19/covid-19-vaccination"
},
{
"name": "Geneva",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/en/getting-vaccinated-against-covid-19"
},
{
"name": "Glarus",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Graubünden",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/DE/institutionen/verwaltung/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Jura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Lucerne",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuchâtel",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Nidwalden",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Obwalden",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "St. Gallen",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Schaffhausen",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Schwyz",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Solothurn",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Thurgovia",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Ticino",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Valais",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/de/web/coronavirus#ancre_vaccination"
},
{
"name": "Vaud",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zug",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/en/"
},
{
"name": "Zürich",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
],
"fr": [
{
"name": "Argovie",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzell Rhodes-Extérieures",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzell Rhodes-Intérieures",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Bâle-Campagne",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/amt-fur-gesundheit/medizinische-dienste/kantonsarztlicher-dienst/aktuelles/corona-impfung/franzoesisch-francais"
},
{
"name": "Bâle-Ville",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Berne",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "https://www.gsi.be.ch/fr/start/themen/coronavirus/impfen.html"
},
{
"name": "Fribourg",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/sante/covid-19/covid-19-vaccination"
},
{
"name": "Genève",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/se-faire-vacciner-contre-covid-19"
},
{
"name": "Glaris",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Grisons",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/DE/institutionen/verwaltung/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Jura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Lucerne",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuchâtel",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Nidwald",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Obwald",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "Saint-Gall",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Schaffhouse",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Schwyz",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Soleure",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Thurgovie",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Tessin",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Valais",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/web/coronavirus/#ancre_vaccination"
},
{
"name": "Vaud",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zoug",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/"
},
{
"name": "Zurich",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
],
"it": [
{
"name": "Argovia",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzello Esterno",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzello Interno",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Basilea Campagna",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/amt-fur-gesundheit/medizinische-dienste/kantonsarztlicher-dienst/aktuelles/corona-impfung/italienisch-italiano"
},
{
"name": "Basilea Città",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Berna",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "http://www.be.ch/corona-impfung"
},
{
"name": "Friburgo",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/sante/covid-19/covid-19-vaccination"
},
{
"name": "Ginevra",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/se-faire-vacciner-contre-covid-19"
},
{
"name": "Glarona",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Grigioni",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/IT/istituzioni/amministrazione/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Giura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Lucerna",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuchâtel",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Nidvaldo",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Obvaldo",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "San Gallo",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Sciaffusa",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Svitto",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Soletta",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Turgovia",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Ticino",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Vallese",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/de/web/coronavirus#ancre_vaccination"
},
{
"name": "Vaud",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zugo",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/"
},
{
"name": "Zurigo",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
],
"rm": [
{
"name": "Argovia",
"iconAndroid": "icon_ag",
"iconIos": "icon-ag",
"linkUrl": "https://www.ag.ch/coronavirus-impfung"
},
{
"name": "Appenzell Dadora",
"iconAndroid": "icon_ar",
"iconIos": "icon-ar",
"linkUrl": "https://www.ar.ch/verwaltung/departement-gesundheit-und-soziales/amt-fuer-gesundheit/informationsseite-coronavirus/coronaimpfung/"
},
{
"name": "Appenzell Dadens",
"iconAndroid": "icon_ai",
"iconIos": "icon-ai",
"linkUrl": "https://www.ai.ch/coronavirus-impfung"
},
{
"name": "Basilea-Champagna",
"iconAndroid": "icon_bl",
"iconIos": "icon-bl",
"linkUrl": "https://www.bl.ch/impfen"
},
{
"name": "Basilea-Citad",
"iconAndroid": "icon_bs",
"iconIos": "icon-bs",
"linkUrl": "http://www.coronaimpfzentrumbasel.ch"
},
{
"name": "Berna",
"iconAndroid": "icon_be",
"iconIos": "icon-be",
"linkUrl": "http://www.be.ch/corona-impfung"
},
{
"name": "Friburg",
"iconAndroid": "icon_fr",
"iconIos": "icon-fr",
"linkUrl": "https://www.fr.ch/sante/covid-19/covid-19-vaccination"
},
{
"name": "Genevra",
"iconAndroid": "icon_ge",
"iconIos": "icon-ge",
"linkUrl": "https://www.ge.ch/se-faire-vacciner-contre-covid-19"
},
{
"name": "Glaruna",
"iconAndroid": "icon_gl",
"iconIos": "icon-gl",
"linkUrl": "https://www.gl.ch/verwaltung/finanzen-und-gesundheit/gesundheit/coronavirus.html/4817#Impfung"
},
{
"name": "Grischun",
"iconAndroid": "icon_gr",
"iconIos": "icon-gr",
"linkUrl": "https://www.gr.ch/RM/instituziuns/administraziun/djsg/ga/coronavirus/info/impfen/Seiten/impfen.aspx"
},
{
"name": "Giura",
"iconAndroid": "icon_ju",
"iconIos": "icon-ju",
"linkUrl": "https://www.jura.ch/fr/Autorites/Coronavirus/Vaccination.html"
},
{
"name": "Lucerna",
"iconAndroid": "icon_lu",
"iconIos": "icon-lu",
"linkUrl": "http://www.lu.ch/covid_impfung"
},
{
"name": "Neuchâtel",
"iconAndroid": "icon_ne",
"iconIos": "icon-ne",
"linkUrl": "https://www.ne.ch/autorites/DFS/SCSP/medecin-cantonal/maladies-vaccinations/covid-19-vaccination/Pages/accueil.aspx"
},
{
"name": "Sutsilvania",
"iconAndroid": "icon_nw",
"iconIos": "icon-nw",
"linkUrl": "https://www.nw.ch/gesundheitsamtdienste/6044#Impfung"
},
{
"name": "Sursilvania",
"iconAndroid": "icon_ow",
"iconIos": "icon-ow",
"linkUrl": "https://www.ow.ch/dienstleistungen/7129"
},
{
"name": "Son Gagl",
"iconAndroid": "icon_sg",
"iconIos": "icon-sg",
"linkUrl": "https://www.sg.ch/coronavirus/impfen"
},
{
"name": "Schaffusa",
"iconAndroid": "icon_sh",
"iconIos": "icon-sh",
"linkUrl": "https://sh.ch/CMS/Webseite/Kanton-Schaffhausen/Beh-rde/Verwaltung/Departement-des-Innern/Gesundheitsamt-7126057-DE.html"
},
{
"name": "Sviz",
"iconAndroid": "icon_sz",
"iconIos": "icon-sz",
"linkUrl": "https://www.sz.ch/corona-impfen"
},
{
"name": "Soloturn",
"iconAndroid": "icon_so",
"iconIos": "icon-so",
"linkUrl": "https://so.ch/coronaimpfung"
},
{
"name": "Turgovia",
"iconAndroid": "icon_tg",
"iconIos": "icon-tg",
"linkUrl": "https://gesundheit.tg.ch/aktuelles/impfung-fuer-covid-19.html/11590"
},
{
"name": "Tessin",
"iconAndroid": "icon_ti",
"iconIos": "icon-ti",
"linkUrl": "http://www.ti.ch/vaccinazione"
},
{
"name": "Uri",
"iconAndroid": "icon_ur",
"iconIos": "icon-ur",
"linkUrl": "https://www.ur.ch/themen/3673"
},
{
"name": "Vallais",
"iconAndroid": "icon_vs",
"iconIos": "icon-vs",
"linkUrl": "https://www.vs.ch/de/web/coronavirus#ancre_vaccination"
},
{
"name": "Vad",
"iconAndroid": "icon_vd",
"iconIos": "icon-vd",
"linkUrl": "https://vd.ch/coronavirus-vaccins"
},
{
"name": "Zug",
"iconAndroid": "icon_zg",
"iconIos": "icon-zg",
"linkUrl": "https://www.corona-impfung-zug.ch/"
},
{
"name": "Turitg",
"iconAndroid": "icon_zh",
"iconIos": "icon-zh",
"linkUrl": "http://www.zh.ch/coronaimpfung"
}
]
},
"vaccinationBookingInfo": {
"de": {
"title": "Impftermin in Ihrer Nähe buchen",
"text": "Eine Impfung könnte zum Beispiel an diesen Orten in Ihrer Nähe stattfinden:\n\n- in spezifischen Impfzentren\n- in Spitälern\n- bei Ihrem Hausarzt oder Ihrer Hausärztin\n- in Impfapotheken\n\nViele Orte bieten auch Walk-in-Impfungen ohne Termine an.",
"info": "Die Covid-19-Impfung ist für Personen ab 5 Jahren empfohlen.",
"impfcheckTitle": "Jetzt Termin buchen",
"impfcheckText": "Der Covid-19 Impf-Check gibt Auskunft über Erst- sowie Auffrischimpfungen und führt Sie zur entsprechenden Anlaufstelle in Ihrem Kanton.",
"impfcheckButton": "Zum Impf-Check",
"impfcheckUrl": "https://covid19.impf-check.ch/"
},
"en": {
"title": "Book a vaccination appointment near you",
"text": "Vaccination may be performed at the following locations near you:\n\n- at specific vaccination centres\n- in hospitals\n- at your general practitioner's surgery\n- at a vaccination pharmacy\n\nMany places also offer walk-in vaccinations without an appointment.",
"info": "The COVID-19 vaccination is recommended for those over 5. ",
"impfcheckTitle": "Book an appointment now",
"impfcheckText": "The COVID-19 Vaccination Check provides information on initial and booster vaccinations and guides you to the relevant point of contact in your canton.",
"impfcheckButton": "To the Vaccination Check",
"impfcheckUrl": "https://covid19.impf-check.ch/"
},
"fr": {
"title": "Prendre un rendez-vous de vaccination près de chez vous",
"text": "La vaccination pourrait, par exemple, être proposée dans les lieux suivants situés à proximité de chez vous :\n\n- dans des centres de vaccination désignés\n- dans les hôpitaux\n- chez votre médecin de famille\n- dans les pharmacies\n\nIl est aussi possible de se faire vacciner sans rendez-vous dans de nombreux endroits.",
"info": "La vaccination contre le COVID-19 est recommandée pour les personnes dès 5 ans.",
"impfcheckTitle": "Prendre un rendez-vous maintenant",
"impfcheckText": "COVID-19 Vac-check fournit des renseignements sur la première vaccination ainsi que sur la vaccination de rappel et vous guide vers le service compétent de votre canton.",
"impfcheckButton": "Vers COVID-19 Vac-check",
"impfcheckUrl": "https://covid19-vac-check.ch/"
},
"it": {
"title": "Prendi appuntamento per la vaccinazione nelle tue vicinanze",
"text": "Per esempio potresti farti vaccinare in uno di questi luoghi nelle tue vicinanze:\n\n- in centri di vaccinazione specifici\n- negli ospedali\n- dal tuo medico di famiglia\n- nelle farmacie che vaccinano\n\nMolti di essi offrono anche vaccinazioni libere senza appuntamento.",
"info": "La vaccinazione anti-COVID-19 è raccomandata per le persone a partire dai 5 anni.",
"impfcheckTitle": "Prendi appuntamento ora",
"impfcheckText": "Il COVID-19 Vac-Check fornisce informazioni sulle prime vaccinazioni, sulle vaccinazioni di richiamo e ti indirizza verso il punto di contatto del tuo Cantone.",
"impfcheckButton": "Vai al COVID-19 Vac-Check",
"impfcheckUrl": "https://covid19-vac-check.ch/"
},
"rm": {
"title": "Reservar in termin da vaccinaziun en Vossa vischinanza",
"text": "Ina vaccinaziun pudess per exempel vegnir fatga en quests lieus en Vossa vischinanza:\n\n- en centers da vaccinaziun specifics\n- en ospitals\n- tar Vossa media u tar Voss medi da chasa\n- en apotecas da vaccinaziun\n\nBlers lieus porschan er vaccinaziuns «walk-in» senza termin.",
"info": "La vaccinaziun cunter COVID-19 è recumandada per persunas a partir da 5 onns.",
"impfcheckTitle": "Reservar in termin ussa",
"impfcheckText": "Il check da vaccinaziun COVID-19 As infurmescha davart las emprimas vaccinaziuns sco er davart las vaccinaziuns da rinfrestgament ed As maina al post da consultaziun correspundent da Voss chantun. ",
"impfcheckButton": "Al check da vaccinaziun",
"impfcheckUrl": "https://covid19.impf-check.ch/"
}
},
"checkModesInfo": {
"de": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Zutritt zu Betrieben und Veranstaltungen für geimpfte, genesene oder negativ getestete Personen."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "Kein Zutritt."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Zutritt zu Betrieben und Veranstaltungen für geimpfte oder genesene Personen."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "Kein Zutritt."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Zutritt zu Betrieben und Veranstaltungen für Personen, deren vollständige Impfung, Auffrischimpfung oder Genesung (basierend auf PCR-Test) nicht länger als 120 Tage zurückliegt. Sie benötigen kein zusätzliches Testzertifikat."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "Für den Zutritt zu Betrieben und Veranstaltungen wird zusätzlich zum Covid-Zertifikat für geimpfte oder genesene Personen ein negatives Testresultat benötigt."
}
}
}
},
"en": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Access to organisations and events permitted for people who have been vaccinated, or who have recovered or tested negative."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "Access not permitted."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Access to organisations and events permitted for people who have been vaccinated or who have recovered."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "Access not permitted."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Access to organisations and events permitted for people who have been fully vaccinated, have received a booster jab or have recovered (based on PCR test results) in the preceding 120 days; an additional test certificate is not required."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "To gain access to organisations and events, a negative test result is required in addition to the COVID certificate for people who have been vaccinated or have recovered."
}
}
}
},
"fr": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Accès aux établissements et aux manifestations réservé aux personnes vaccinées, guéries ou testées négatives."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "Accès refusé."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Accès aux établissements et aux manifestations réservé aux personnes vaccinées ou guéries."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "Accès refusé."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Accès aux établissements et aux manifestations réservé aux personnes dont la vaccination complète, la vaccination de rappel ou la guérison (confirmée par un test PCR) ne date pas de plus de 120 jours. Vous n'avez pas besoin de présenter un certificat de test supplémentaire."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "Accès aux établissements et aux manifestations réservé aux personnes vaccinées ou guéries qui présentent, en plus d'un certificat COVID, un résultat de test négatif."
}
}
}
},
"it": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "L’accesso a strutture e manifestazioni è consentito alle persone vaccinate, guarite o testate negative."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "L’accesso non è consentito."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "L’accesso a strutture e manifestazioni è consentito alle persone vaccinate o guarite."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "L’accesso non è consentito."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "L’accesso a strutture e manifestazioni è consentito alle persone per le quali sono trascorsi al massimo 120 giorni dal completamento del ciclo vaccinale, dalla somministrazione della dose di richiamo o dalla guarigione (sulla base di un test PCR). In questo caso non è necessario un ulteriore certificato di test."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "Oltre al certificato di vaccinazione o di guarigione, per l’accesso a strutture e manifestazioni è necessario presentare anche il risultato di un test negativo."
}
}
}
},
"rm": {
"title": "Info",
"modes": {
"THREE_G": {
"ok": {
"iconAndroid": "ic_3g",
"iconIos": "ic_3g",
"text": "Access a manaschis ed ad occurrenzas per persunas vaccinadas, guaridas u cun in test negativ."
},
"notOk": {
"iconAndroid": "ic_no3g",
"iconIos": "ic_no3g",
"text": "Nagin access."
}
},
"TWO_G": {
"ok": {
"iconAndroid": "ic_2g",
"iconIos": "ic_2g",
"text": "Access a manaschis ed ad occurrenzas per persunas vaccinadas u guaridas."
},
"notOk": {
"iconAndroid": "ic_no2g",
"iconIos": "ic_no2g",
"text": "Nagin access."
}
},
"TWO_G_PLUS": {
"ok": {
"iconAndroid": "ic_2g_plus",
"iconIos": "ic-2-g-plus",
"text": "Access a manaschis ed ad occurrenzas per persunas ch’èn vaccinadas cumplettamain, che han laschà rinfrestgar la vaccinaziun u ch’èn guaridas (sin basa d’in test da PCR) avant maximalmain 120 dis. Vus na duvrais nagin certificat da test supplementar."
},
"notOk": {
"iconAndroid": "ic_no_2_g_plus_height",
"iconIos": "ic-no-2-g-plus-height",
"text": "Per l’access a manaschis ed ad occurrenzas dovri ultra dal certificat COVID per persunas vaccinadas u guaridas in test negativ."
}
}
}
}
},
"lightCertDurationInHours": 24,
"showVaccinationHintHomescreen": false,
"showVaccinationHintDetail": false,
"showVaccinationHintTransfer": false,
"refreshButtonDisabled": true,
"refreshButtonInfo": {
"de": {
"title": "Info",
"text1": "Der «Refresh-Button» wurde entfernt.",
"text2": "Sollte Ihr Covid-Zertifikat abgelaufen oder technisch ungültig sein, wird Ihnen dies direkt auf dem Zertifikat angezeigt.",
"fatTitle": "Für Prüfende",
"text3": "Die Prüfung von Covid-Zertifikaten ist mit der App «COVID Certificate Check» vorzunehmen.",
"linkText": "Mehr erfahren",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1070048217"
},
"en": {
"title": "Info",
"text1": "The \"Refresh button\" has been removed.",
"text2": "If your COVID certificate has expired or is technically invalid, this is indicated directly on the certificate.",
"fatTitle": "For verifiers",
"text3": "COVID certificates are to be verified with the \"COVID Certificate Check\" app.",
"linkText": "To find out more",
"linkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1851413288"
},
"fr": {
"title": "Information",
"text1": "Le bouton «rafraîchir» a été supprimé.",
"text2": "Si votre certificat COVID a expiré ou s'il n'est techniquement pas valable, cette information apparaît automatiquement sur le certificat.",
"fatTitle": "Pour les personnes chargées du contrôle",
"text3": "La vérification des certificats COVID doit s'effectuer au moyen de l'application «COVID Certificate Check».",
"linkText": "Pour en savoir plus",
"linkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#-1006172949"
},
"it": {
"title": "Informazione",
"text1": "Il pulsante «Aggiorna» è stato eliminato.",
"text2": "Se il certificato è scaduto o se non è valido per motivi tecnici, l’informazione compare direttamente nell’app. ",
"fatTitle": "Per le persone incaricate della verifica",
"text3": "I certificati COVID devono essere verificati utilizzando l’app «COVID Certificate Check».",
"linkText": "Per saperne di più",
"linkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1358421103"
},
"rm": {
"title": "Infurmaziun",
"text1": "La «buttun da refresh» è vegnida stizzada.",
"text2": "Sche Voss certificat COVID è spirà u sch’el n’è tecnicamain betg valaivel, vegn quai inditgà directamain sin il certificat.",
"fatTitle": "Per las persunas che verifitgeschan",
"text3": "Ils certificats COVID ston vegnir verifitgads cun l’app «COVID Certificate Check».",
"linkText": "Dapli infurmaziuns",
"linkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/covid-zertifikat/covid-zertifikat-pruefer-aussteller-technische-informationen.html#1070048217"
}
},
"eolBannerInfo": {
"de": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Verkürzte Gültigkeitsdauer",
"detailHexColor": "#ffde27",
"detailTitle": "Verkürzte Gültigkeitsdauer",
"detailText": "Dieses Zertifikat wird bald ablaufen.",
"detailMoreInfo": "Mehr erfahren",
"popupTitle": "Info",
"popupText1": "Per 31. Jan. 2022 gelten in der Schweiz reduzierte Gültigkeitsdauern von 270 statt 365 Tagen für Covid-Zertifikate für Geimpfte oder Genesene. Dieses Zertifikat ist von der verkürzten Gültigkeitsdauer unmittelbar betroffen:",
"popupBoldText": "Dieses Covid-Zertifikat kann ab dem 31. Jan. 2022 nicht mehr verwendet werden, da die Gültigkeitsdauer dann bereits abgelaufen sein wird.",
"popupText2": null,
"popupLinkText": "Mehr erfahren",
"popupLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/warum-wird-die-gueltigkeitsdauer-der-zertifikate-fuer-eine-impfung-oder-eine"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Bald abgelaufen",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "Dieses Zertifikat läuft bald ab.",
"detailMoreInfo": "Mehr erfahren?",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "Dieses Covid-Zertifikat ist nur noch wenige Tage gültig. Bitte beachten Sie das auf dem Zertifikat ausgewiesene Ablaufdatum.",
"popupText2": null,
"popupLinkText": "Und nun?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/was-soll-ich-tun-wenn-mein-covid-zertifikat-nach-schweizer-gueltigkeitsregeln-bald"
}
},
"en": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Shortened period of validity",
"detailHexColor": "#ffde27",
"detailTitle": "Shortened period of validity",
"detailText": "This certificate will soon expire.",
"detailMoreInfo": "More information",
"popupTitle": "Info",
"popupText1": "As of 31 Jan 2022 a shortened period of validity of 270 instead of 365 days applies to COVID vaccination or recovery certificates in Switzerland. This certificate is directly affected by the shortened period of validity:",
"popupBoldText": "This COVID certificate can no longer be used after 31 Jan 2022 as the period of validity will already have expired.",
"popupText2": null,
"popupLinkText": "More information",
"popupLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-period-validity-certificates-vaccination-or-recovery-being-shortened-365-270"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Imminent expiry",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "This certificate will soon expire.",
"detailMoreInfo": "More information?",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "This COVID certificate is valid for only a few more days. Please note the expiry date shown on the certificate.",
"popupText2": null,
"popupLinkText": "And now?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/what-should-i-do-if-my-covid-certificate-about-expire-under-swiss-rules-validity"
}
},
"fr": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Durée de validité réduite",
"detailHexColor": "#ffde27",
"detailTitle": "Durée de validité réduite",
"detailText": "Ce certificat expirera bientôt.",
"detailMoreInfo": "En savoir plus",
"popupTitle": "Info",
"popupText1": "À partir du 31 janvier 2022, la durée de validité en Suisse des certificats COVID pour les personnes vaccinées ou guéries est réduite de 365 à 270 jours. Ce certificat est directement concerné:",
"popupBoldText": "Ce certificat COVID ne peut plus être utilisé à partir du 31 janvier 2022.",
"popupText2": null,
"popupLinkText": "En savoir plus",
"popupLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-la-duree-de-validite-des-certificats-de-vaccination-ou-de-guerison-t-elle"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Expiration imminente",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "Ce certificat expirera bientôt.",
"detailMoreInfo": "En savoir plus?",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "Ce certificat COVID expirera dans quelques jours. Nous attirons votre attention sur la date de fin de validité affichée.",
"popupText2": null,
"popupLinkText": "Et maintenant ?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/que-dois-je-faire-si-mon-certificat-covid-est-sur-le-point-dexpirer-en-suisse"
}
},
"it": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Durata di validità abbreviata",
"detailHexColor": "#ffde27",
"detailTitle": "Durata di validità abbreviata",
"detailText": "Questo certificato sta per scadere.",
"detailMoreInfo": "Per saperne di più",
"popupTitle": "Info",
"popupText1": "Dal 31 gennaio 2022 in Svizzera vige una durata di validità del certificato COVID per persone vaccinate o guarite di 270 anziché di 365 giorni. Questo certificato è interessato direttamente dall’abbreviazione della durata di validità:",
"popupBoldText": "La scadenza della durata di validità di questo certificato COVID è il 31 gennaio 2022. Pertanto il certificato non è più utilizzabile dopo quella data.",
"popupText2": null,
"popupLinkText": "Per saperne di più",
"popupLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-la-durata-di-validita-dei-certificati-di-vaccinazione-o-di-guarigione-e"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Scadenza imminente",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "Questo certificato sta per scadere.",
"detailMoreInfo": "Per saperne di più",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "Questo certificato COVID è valido ancora per pochi giorni. Si prega di tenere conto della data di scadenza indicata sullo stesso.",
"popupText2": null,
"popupLinkText": "E ora?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/cosa-devo-fare-se-il-mio-certificato-covid-sta-scadere-secondo-le-regole-di"
}
},
"rm": {
"invalidFromFirstFebruary": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Valaivladad pli curta",
"detailHexColor": "#ffde27",
"detailTitle": "Valaivladad pli curta",
"detailText": "Quest certificat scada bainbaud.",
"detailMoreInfo": "Dapli infurmaziuns",
"popupTitle": "Info",
"popupText1": "A partir dals 31-01-2022 valan en Svizra duradas da valaivladad reducidas da 270 dis empè da 365 dis per certificats COVID per persunas vaccinadas u guaridas. Quest certificat è pertutgà directamain da la valaivladad pli curta:",
"popupBoldText": "Quest certificat COVID na po betg pli vegnir duvrà a partir dals 31-01-2022, perquai che la durada da valaivladad è lura gia scadida.",
"popupText2": null,
"popupLinkText": "Dapli infurmaziuns",
"popupLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/warum-wird-die-gueltigkeitsdauer-der-zertifikate-fuer-eine-impfung-oder-eine"
},
"invalidInThreeWeeks": {
"homescreenHexColor": "#ffde27",
"homescreenTitle": "Scada bainbaud",
"detailHexColor": "#ffde27",
"detailTitle": "Info",
"detailText": "Quest certificat scada bainbaud.",
"detailMoreInfo": "Dapli infurmaziuns?",
"popupTitle": "Info",
"popupText1": null,
"popupBoldText": "Quest certificat COVID è valaivel mo pli intgins dis. Resguardai per plaschair la data da scadenza inditgà sin il certificat.",
"popupText2": null,
"popupLinkText": "Ed uss?",
"popupLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/was-soll-ich-tun-wenn-mein-covid-zertifikat-nach-schweizer-gueltigkeitsregeln-bald"
}
}
},
"showRatConversionForm": true,
"ratConversionFormUrl": "https://covidcertificate-form.admin.ch/immunityrequest",
"certRenewalInfo": {
"de": {
"INFO": {
"heading": "Was bedeutet das?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Die QR-Codes der Covid-Zertifikate sind technisch nur begrenzt gültig."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Damit dieses Zertifikat (z. B. auf Reisen) weiterhin geprüft werden kann, muss der QR-Code erneuert werden."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Die Erneuerung können Sie hier in der App selbst durchführen (Internetverbindung nötig). Die Daten des aktuellen Zertifikats werden dazu verschlüsselt von der App an das System des Bundes zur Ausstellung von Covid-Zertifikaten übermittelt. Danach wird ein neuer QR-Code zurück an die App gesendet. Anschliessend werden die Daten gelöscht."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Wieso Sie den QR-Code auch dann erneuern sollten, wenn Ihr Impf- oder Genesungszertifikat nach den Schweizer Gültigkeitsregeln bald abläuft oder bereits abgelaufen ist, lesen Sie in dieser FAQ."
}
],
"faqLinkText": "Zur FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
},
"EXPIRED": {
"heading": "Was bedeutet das?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Die QR-Codes der Covid-Zertifikate sind technisch nur begrenzt gültig."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Damit dieses Zertifikat (z. B. auf Reisen) weiterhin geprüft werden kann, muss der QR-Code erneuert werden."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Die Erneuerung können Sie hier in der App selbst durchführen (Internetverbindung nötig). Die Daten des aktuellen Zertifikats werden dazu verschlüsselt von der App an das System des Bundes zur Ausstellung von Covid-Zertifikaten übermittelt. Danach wird ein neuer QR-Code zurück an die App gesendet. Anschliessend werden die Daten gelöscht."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Erneuern Sie den QR-Code auch dann, wenn die Gültigkeit in der Schweiz bald abläuft oder bereits abgelaufen ist."
}
],
"faqLinkText": "Zur FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
},
"RENEWED": {
"heading": "Wichtig!",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Ersetzen Sie auch zuvor ausgedruckte oder gespeicherte Zertifikate durch diese erneuerte Version."
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "Wie lange ein Covid-Zertifikat gültig ist wird in jedem Land gemäss den aktuell geltenden Regeln berechnet. Die Erneuerung des QR-Codes hat darauf keinen Einfluss."
}
],
"faqLinkText": "Zur FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
}
},
"en": {
"INFO": {
"heading": "What does this mean?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "The QR codes used for COVID certificates have limited technical validity"
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "To enable this certificate to continue to be checked (e.g. when you’re travelling), you must renew the QR code."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "You can do this directly here in the app (provided you have an internet connection). The data in your current certificate will be encrypted and sent to the federal government’s COVID certificate issuing system for a new QR code to be issued. This QR code is then sent back to the app. Once the new QR code has been issued and the data sent, the data on the government system are deleted."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Check out this FAQ to find out why you should also renew the QR code if your vaccination or recovery certificate is about to expire or has already expired under the Swiss validity rules."
}
],
"faqLinkText": "To the FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-should-i-renew-qr-code-my-covid-certificate-even-though-certificate-about"
},
"EXPIRED": {
"heading": "What does this mean?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "The QR codes used for COVID certificates have limited technical validity."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "To enable this certificate to continue to be checked (e.g. when you’re travelling), you must renew the QR code."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "You can do this directly here in the app (provided you have an internet connection). The data in your current certificate will be encrypted and sent to the federal government’s COVID certificate issuing system for a new QR code to be issued. This QR code is then sent back to the app. Once the new QR code has been issued and the data sent, the data on the government system are deleted."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Check out this FAQ to find out why you should also renew the QR code if your vaccination or recovery certificate is about to expire or has already expired under the Swiss validity rules."
}
],
"faqLinkText": "To the FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-should-i-renew-qr-code-my-covid-certificate-even-though-certificate-about"
},
"RENEWED": {
"heading": "Important!",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Also replace certificates you have previously printed out or stored with this renewed version."
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "The length of time for which a vaccination is recognised in a particular country is not specified in the certificate. Instead, it is calculated in accordance with the specific rules of the country each time the certificate is checked. Renewing the QR code merely ensures that the QR code can be used from a technical point of view."
}
],
"faqLinkText": "To the FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/en/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/en/covid-certificate/why-should-i-renew-qr-code-my-covid-certificate-even-though-certificate-about"
}
},
"fr": {
"INFO": {
"heading": "Qu’est-ce que cela signifie ?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Les codes QR des certificats COVID ont une validité technique limitée"
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Pour qu’il soit toujours possible de contrôler ce certificat (par exemple en voyage), le code QR doit être renouvelé."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Le renouvellement nécessaire peut être effectué ici directement dans l’application (connexion Internet requise). Les données du certificat actuel sont transmises sous forme cryptée depuis l’application vers le système de la Confédération établissant les certificats COVID. Ensuite, un nouveau code QR est ainsi établi, qui est renvoyé à l’application de stockage. Une fois établies et transmises. Enfin, les données sont effacées du système"
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Cette FAQ vous explique pourquoi vous devriez renouveler le code QR même si votre certificat de vaccination ou de guérison est sur le point d’expirer ou a déjà expiré selon les règles de validité suisses."
}
],
"faqLinkText": "Vers la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-dois-je-renouveler-le-code-qr-de-mon-certificat-covid-alors-que-selon-les"
},
"EXPIRED": {
"heading": "Qu’est-ce que cela signifie ?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Les codes QR des certificats COVID ont une validité technique limitée."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Pour qu’il soit toujours possible de contrôler ce certificat (par exemple en voyage), le code QR doit être renouvelé."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Le renouvellement nécessaire peut être effectué ici directement dans l’application (connexion Internet requise). Les données du certificat actuel sont transmises sous forme cryptée depuis l’application vers le système de la Confédération établissant les certificats COVID. Ensuite, un nouveau code QR est ainsi établi, qui est renvoyé à l’application de stockage. Une fois établies et transmises. Enfin, les données sont effacées du système"
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Cette FAQ vous explique pourquoi vous devriez renouveler le code QR même si votre certificat de vaccination ou de guérison est sur le point d’expirer ou a déjà expiré selon les règles de validité suisses."
}
],
"faqLinkText": "Vers la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-dois-je-renouveler-le-code-qr-de-mon-certificat-covid-alors-que-selon-les"
},
"RENEWED": {
"heading": "À noter:",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Remplacez également les certificats précédemment imprimés ou enregistrés par cette nouvelle version"
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "La durée pendant laquelle une vaccination est reconnue dans un pays n’est pas définie dans le certificat, mais calculée au moment du contrôle selon les règles du pays examinateur. Le renouvellement du code QR garantit uniquement que celui-ci puisse être utilisé d’un point de vue technique. "
}
],
"faqLinkText": "Vers la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/fr/certificat-covid/pourquoi-dois-je-renouveler-le-code-qr-de-mon-certificat-covid-alors-que-selon-les"
}
},
"it": {
"INFO": {
"heading": "Cosa significa?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "I codici QR dei certificati COVID hanno una validità tecnica limitata"
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Affinché questo certificato possa continuare a essere verificato (p. es. durante i viaggi), è necessario rinnovare il codice QR."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Puoi eseguire autonomamente il rinnovo richiesto qui nell’app (collegamento Internet necessario). A tale scopo i dati del certificato attuale saranno codificati e trasmessi dall’app al sistema della Confederazione per l’emissione di certificati COVID, il quale a sua volta creerà un nuovo codice QR che in seguito sarà rinviato all’app per la conservazione. Infine i dati saranno cancellati a emissione e trasmissione avvenute."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "In queste FAQ trovi i motivi per cui è necessario rinnovare il codice QR anche se il tuo certificato di vaccinazione o di guarigione dovesse giungere presto a scadenza o essere già scaduto secondo le regole di validità svizzere."
}
],
"faqLinkText": "Alle FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-devo-rinnovare-il-codice-qr-del-mio-certificato-covid-anche-se-secondo-le"
},
"EXPIRED": {
"heading": "Cosa significa?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "I codici QR dei certificati COVID hanno una validità tecnica limitata."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Affinché questo certificato possa continuare a essere verificato (p. es. durante i viaggi), è necessario rinnovare il codice QR."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "Puoi eseguire autonomamente il rinnovo richiesto qui nell’app (collegamento Internet necessario). A tale scopo i dati del certificato attuale saranno codificati e trasmessi dall’app al sistema della Confederazione per l’emissione di certificati COVID, il quale a sua volta creerà un nuovo codice QR che in seguito sarà rinviato all’app per la conservazione. Infine i dati saranno cancellati a emissione e trasmissione avvenute."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "In queste FAQ trovi i motivi per cui è necessario rinnovare il codice QR anche se il tuo certificato di vaccinazione o di guarigione dovesse giungere presto a scadenza o essere già scaduto secondo le regole di validità svizzere."
}
],
"faqLinkText": "Alle FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-devo-rinnovare-il-codice-qr-del-mio-certificato-covid-anche-se-secondo-le"
},
"RENEWED": {
"heading": "Importante!",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Sostituisci anche i certificati stampati o salvati in precedenza con la presente versione aggiornata."
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "La durata del riconoscimento di una vaccinazione in un Paese non è specificata nel certificato. Questo viene calcolato durante la verifica in base alle regole del Paese esaminatore. Il rinnovo del codice QR garantisce solo che tale codice possa continuare a essere tecnicamente utilizzato."
}
],
"faqLinkText": "Alle FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/it/certificato-covid/perche-devo-rinnovare-il-codice-qr-del-mio-certificato-covid-anche-se-secondo-le"
}
},
"rm": {
"INFO": {
"heading": "Tge vul quai dir?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Tecnicamain valan ils codes QR dals certificats COVID mo per ina tscherta durada."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Per che quest certificat possia vegnir verifitgà er vinavant (p.ex. sin viadis) sto il code QR vegnir renovà."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "La renovaziun pudais Vus far sezza u sez qua en l'app (ina colliaziun d'internet è necessaria). Las datas dal certificat actual vegnan transmessas da l'app en moda codada al sistem federal per l'emissiun da certificats COVID. In nov code QR vegn alura tramess enavos a l'app. Silsuenter vegnan las datas stizzadas là."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pertge che Vus duessas renovar il code QR er, sche Voss certificat da vaccinaziun u da guariziun scada bainbaud u è gia scadì tenor las reglas da valaivladad en Svizra, pudais Vus leger en questa FAQ."
}
],
"faqLinkText": "A la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
},
"EXPIRED": {
"heading": "Tge vul quai dir?",
"infos": [
{
"iconAndroid": "ic_timeerror",
"iconIos": "ic-timeerror",
"text": "Tecnicamain valan ils codes QR dals certificats COVID mo per ina tscherta durada."
},
{
"iconAndroid": "ic_qr_certificate",
"iconIos": "ic-qr-certificate",
"text": "Per che quest certificat possia vegnir verifitgà er vinavant (p.ex. sin viadis) sto il code QR vegnir renovà."
},
{
"iconAndroid": "ic_online",
"iconIos": "ic-online",
"text": "La renovaziun pudais Vus far sezza u sez qua en l'app (ina colliaziun d'internet è necessaria). Las datas dal certificat actual vegnan transmessas da l'app en moda codada al sistem federal per l'emissiun da certificats COVID. In nov code QR vegn alura tramess enavos a l'app. Silsuenter vegnan las datas stizzadas là."
},
{
"iconAndroid": "ic_expire_i",
"iconIos": "ic-expire-i",
"text": "Pertge che Vus duessas renovar il code QR er, sche Voss certificat da vaccinaziun u da guariziun scada bainbaud u è gia scadì tenor las reglas da valaivladad en Svizra, pudais Vus leger en questa FAQ."
}
],
"faqLinkText": "A la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
},
"RENEWED": {
"heading": "Impurtant!",
"infos": [
{
"iconAndroid": "ic_pdf",
"iconIos": "ic-pdf",
"text": "Remplazzai per plaschair tras questa nova versiun er ils certificats che Vus avais arcunà u stampà pli baud."
},
{
"iconAndroid": "ic_travel",
"iconIos": "ic-travel",
"text": "Quant ditg ch'ina vaccinaziun vegn renconuschida en in pajais, n'è betg fixà en il certificat. Quai vegn calculà a chaschun da la verificaziun tenor las reglas dal pajais che fa la verificaziun. La renovaziun dal code QR garantescha unicamain l'utilisaziun tecnica dal code QR"
}
],
"faqLinkText": "A la FAQ",
"faqLinkUrl": "https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov/haeufig-gestellte-fragen.html?faq-url=/covid/de/covid-zertifikat/wieso-soll-ich-den-qr-code-meines-covid-zertifikats-erneuern-obwohl-das-zertifikat"
}
}
},
"showValidityState": false,
"foreignRulesCheckEnabled": false
}
================================================
FILE: wallet/src/dev/java/ch/admin/bag/covidcertificate/wallet/debug/DebugCertificateItem.kt
================================================
/*
* Copyright (c) 2021 Ubique Innovation AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
*/
package ch.admin.bag.covidcertificate.wallet.debug
import android.view.View
import android.widget.Button
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.CertType
import ch.admin.bag.covidcertificate.sdk.core.models.state.VerificationState
import ch.admin.bag.covidcertificate.wallet.R
import ch.admin.bag.covidcertificate.wallet.homescreen.pager.StatefulWalletItem
import ch.admin.bag.covidcertificate.wallet.util.getInvalidContentAlpha
data class DebugCertificateItem(val verifiedCertificate: StatefulWalletItem.VerifiedCertificate) {
fun bindView(
itemView: View,
onShareClickListener: ((String) -> Unit),
) {
val context = itemView.context
val certificate = verifiedCertificate.certificateHolder
val state = verifiedCertificate.state
val certType = certificate?.certType
var typeBackgroundColor = R.color.blue
var typeTextColor = R.color.white
var typeLabelRes: Int? = null
when (certType) {
CertType.RECOVERY -> {
typeLabelRes = R.string.certificate_reason_recovered
}
CertType.TEST -> {
typeLabelRes = R.string.certificate_reason_tested
typeBackgroundColor = R.color.blueish
typeTextColor = R.color.blue
}
CertType.VACCINATION -> {
typeLabelRes = R.string.certificate_reason_vaccinated
}
else -> {}
}
val isInvalid = state is VerificationState.INVALID
if (isInvalid) {
typeBackgroundColor = R.color.greyish
typeTextColor = R.color.grey
}
// Name
val name = certificate?.certificate?.getPersonName()?.prettyName() ?: verifiedCertificate.qrCodeData
val qrAlpha = state.getInvalidContentAlpha()
itemView.findViewById(R.id.item_certificate_list_name).apply {
text = name
alpha = qrAlpha
}
// Type
itemView.findViewById(R.id.item_certificate_list_type).apply {
backgroundTintList = context.resources.getColorStateList(typeBackgroundColor, context.theme)
setTextColor(ContextCompat.getColor(context, typeTextColor))
typeLabelRes?.let { setText(it) }
isVisible = certType != null
}
// Buttons
itemView.findViewById